annotate lisp/calendar/solar.el @ 92970:9bc37937216f

(number, original-date, add-to-diary-list) (diary-name-pattern, mark-calendar-days-named): Remove declarations. (diary-list-entries-1, diary-mark-entries-1): Autoload. (diary-bahai-list-entries): Use diary-list-entries-1. (diary-bahai-mark-entries): Doc fix. Use diary-mark-entries-1. (calendar-bahai-epoch): Doc fix.
author Glenn Morris <rgm@gnu.org>
date Sat, 15 Mar 2008 03:00:48 +0000
parents 5700422f1364
children 6dcaa1e995c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 20462
diff changeset
1 ;;; solar.el --- calendar functions for solar events
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2
68721
8daf7d9a0771 Add 2006 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 67465
diff changeset
3 ;; Copyright (C) 1992, 1993, 1995, 1997, 2001, 2002, 2003, 2004, 2005,
79703
974a828870fe Add 2008 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 78216
diff changeset
4 ;; 2006, 2007, 2008 Free Software Foundation, Inc.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
7 ;; Denis B. Roegel <Denis.Roegel@loria.fr>
65919
5c09efcfc1d9 Update maintainer email address.
Glenn Morris <rgm@gnu.org>
parents: 65145
diff changeset
8 ;; Maintainer: Glenn Morris <rgm@gnu.org>
2249
94fc2ce49c55 Corrected Keywords header
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2248
diff changeset
9 ;; Keywords: calendar
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
10 ;; Human-Keywords: sunrise, sunset, equinox, solstice, calendar, diary, holidays
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; This file is part of GNU Emacs.
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
14 ;; GNU Emacs is free software; you can redistribute it and/or modify
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
78216
93e11478c954 Switch license to GPLv3 or later.
Glenn Morris <rgm@gnu.org>
parents: 77279
diff changeset
16 ;; the Free Software Foundation; either version 3, or (at your option)
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
17 ;; any later version.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18
6736
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
22 ;; GNU General Public License for more details.
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
23
3e1323443b1a Fix copying conditions for current GPL version.
Richard M. Stallman <rms@gnu.org>
parents: 5835
diff changeset
24 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13874
diff changeset
25 ;; along with GNU Emacs; see the file COPYING. If not, write to the
64085
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62402
diff changeset
26 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18a818a2ee7c Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 62402
diff changeset
27 ;; Boston, MA 02110-1301, USA.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 ;;; Commentary:
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
31 ;; This collection of functions implements the features of calendar.el,
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
32 ;; diary.el, and holiday.el that deal with times of day, sunrise/sunset, and
13742
6896ecdd9378 Fix misspelling in comment.
Paul Eggert <eggert@twinsun.com>
parents: 13668
diff changeset
33 ;; equinoxes/solstices.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 ;; Based on the ``Almanac for Computers 1984,'' prepared by the Nautical
13045
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
36 ;; Almanac Office, United States Naval Observatory, Washington, 1984, on
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
37 ;; ``Astronomical Formulae for Calculators,'' 3rd ed., by Jean Meeus,
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
38 ;; Willmann-Bell, Inc., 1985, on ``Astronomical Algorithms'' by Jean Meeus,
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
39 ;; Willmann-Bell, Inc., 1991, and on ``Planetary Programs and Tables from
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
40 ;; -4000 to +2800'' by Pierre Bretagnon and Jean-Louis Simon, Willmann-Bell,
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
41 ;; Inc., 1986.
13045
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
42
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 ;;
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
44 ;; Accuracy:
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
45 ;; 1. Sunrise/sunset times will be accurate to the minute for years
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
46 ;; 1951--2050. For other years the times will be within +/- 2 minutes.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 ;;
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
48 ;; 2. Equinox/solstice times will be accurate to the minute for years
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
49 ;; 1951--2050. For other years the times will be within +/- 1 minute.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 19898
diff changeset
51 ;; Technical details of all the calendrical calculations can be found in
61148
7f7db25577d9 Update reference to "Calendrical Calculations" book; there's a new edition.
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
52 ;; ``Calendrical Calculations: The Millennium Edition'' by Edward M. Reingold
7f7db25577d9 Update reference to "Calendrical Calculations" book; there's a new edition.
Paul Eggert <eggert@twinsun.com>
parents: 52401
diff changeset
53 ;; and Nachum Dershowitz, Cambridge University Press (2001).
20462
d179de7ad92e Add reference to new Calendrical Calculations book.
Paul Eggert <eggert@twinsun.com>
parents: 19898
diff changeset
54
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 ;;; Code:
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 (if (fboundp 'atan)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 (require 'lisp-float-type)
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
59 (error "Solar calculations impossible since floating point is unavailable"))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
61 (require 'cal-dst)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
62 (require 'cal-julian)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
63
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
64
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
65 (defcustom calendar-time-display-form
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
66 '(12-hours ":" minutes am-pm
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
67 (if time-zone " (") time-zone (if time-zone ")"))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
68 "The pseudo-pattern that governs the way a time of day is formatted.
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
69
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
70 A pseudo-pattern is a list of expressions that can involve the keywords
47252
0fcc52168240 (calendar-time-display-form): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46617
diff changeset
71 `12-hours', `24-hours', and `minutes', all numbers in string form,
0fcc52168240 (calendar-time-display-form): Fix spacing.
Juanma Barranquero <lekktu@gmail.com>
parents: 46617
diff changeset
72 and `am-pm' and `time-zone', both alphabetic strings.
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
73
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
74 For example, the form
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
75
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
76 '(24-hours \":\" minutes
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
77 (if time-zone \" (\") time-zone (if time-zone \")\"))
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
78
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
79 would give military-style times like `21:07 (UTC)'."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
80 :type 'sexp
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
81 :group 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
82
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
83 (defcustom calendar-latitude nil
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
84 "Latitude of `calendar-location-name' in degrees.
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
85 The value can be either a decimal fraction (one place of accuracy is
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
86 sufficient), + north, - south, such as 40.7 for New York City, or the value
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
87 can be a vector [degrees minutes north/south] such as [40 50 north] for New
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
88 York City.
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
89
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
90 This variable should be set in `site-start'.el."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
91 :type '(choice (const nil)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
92 (number :tag "Exact")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
93 (vector :value [0 0 north]
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
94 (integer :tag "Degrees")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
95 (integer :tag "Minutes")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
96 (choice :tag "Position"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
97 (const north)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
98 (const south))))
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
99 :group 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
100
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
101 (defcustom calendar-longitude nil
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
102 "Longitude of `calendar-location-name' in degrees.
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
103 The value can be either a decimal fraction (one place of accuracy is
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
104 sufficient), + east, - west, such as -73.9 for New York City, or the value
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
105 can be a vector [degrees minutes east/west] such as [73 55 west] for New
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
106 York City.
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
107
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
108 This variable should be set in `site-start'.el."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
109 :type '(choice (const nil)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
110 (number :tag "Exact")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
111 (vector :value [0 0 west]
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
112 (integer :tag "Degrees")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
113 (integer :tag "Minutes")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
114 (choice :tag "Position"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
115 (const east)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
116 (const west))))
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
117 :group 'calendar)
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
118
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
119 (defcustom calendar-location-name
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
120 '(let ((float-output-format "%.1f"))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
121 (format "%s%s, %s%s"
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
122 (if (numberp calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
123 (abs calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
124 (+ (aref calendar-latitude 0)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
125 (/ (aref calendar-latitude 1) 60.0)))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
126 (if (numberp calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
127 (if (> calendar-latitude 0) "N" "S")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
128 (if (equal (aref calendar-latitude 2) 'north) "N" "S"))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
129 (if (numberp calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
130 (abs calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
131 (+ (aref calendar-longitude 0)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
132 (/ (aref calendar-longitude 1) 60.0)))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
133 (if (numberp calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
134 (if (> calendar-longitude 0) "E" "W")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
135 (if (equal (aref calendar-longitude 2) 'east) "E" "W"))))
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
136 "Expression evaluating to the name of the calendar location.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
137 For example, \"New York City\". The default value is just the
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
138 variable `calendar-latitude' paired with the variable `calendar-longitude'.
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
139
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
140 This variable should be set in `site-start'.el."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
141 :type 'sexp
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
142 :group 'calendar)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
143
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
144 (defcustom solar-error 0.5
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
145 "Tolerance (in minutes) for sunrise/sunset calculations.
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
146
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
147 A larger value makes the calculations for sunrise/sunset faster, but less
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
148 accurate. The default is half a minute (30 seconds), so that sunrise/sunset
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
149 times will be correct to the minute.
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
150
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
151 It is useless to set the value smaller than 4*delta, where delta is the
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
152 accuracy in the longitude of the sun (given by the function
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
153 `solar-ecliptic-coordinates') in degrees since (delta/360) x (86400/60) = 4 x
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
154 delta. At present, delta = 0.01 degrees, so the value of the variable
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
155 `solar-error' should be at least 0.04 minutes (about 2.5 seconds)."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
156 :type 'number
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
157 :group 'calendar)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
158
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
159 (defcustom diary-sabbath-candles-minutes 18
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
160 "Number of minutes before sunset for sabbath candle lighting."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
161 :group 'diary
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
162 :type 'integer
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
163 :version "21.1")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
164
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
165
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
166 ;;; End of user options.
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
167
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
168
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
169 (defconst solar-n-hemi-seasons
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
170 '("Vernal Equinox" "Summer Solstice" "Autumnal Equinox" "Winter Solstice")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
171 "List of season changes for the northern hemisphere.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
172
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
173 (defconst solar-s-hemi-seasons
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
174 '("Autumnal Equinox" "Winter Solstice" "Vernal Equinox" "Summer Solstice")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
175 "List of season changes for the southern hemisphere.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
176
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
177 (defvar solar-sidereal-time-greenwich-midnight
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
178 nil
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
179 "Sidereal time at Greenwich at midnight (universal time).")
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
180
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
181 (defvar solar-northern-spring-or-summer-season nil
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
182 "Non-nil if northern spring or summer and nil otherwise.
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
183 Needed for polar areas, in order to know whether the day lasts 0 or 24 hours.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
184
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
185
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
186 (defsubst calendar-latitude ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
187 "Ensure the variable `calendar-latitude' is a signed decimal fraction."
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
188 (if (numberp calendar-latitude)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
189 calendar-latitude
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
190 (let ((lat (+ (aref calendar-latitude 0)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
191 (/ (aref calendar-latitude 1) 60.0))))
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
192 (if (equal (aref calendar-latitude 2) 'north)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
193 lat
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
194 (- lat)))))
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
195
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
196 (defsubst calendar-longitude ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
197 "Ensure the variable `calendar-longitude' is a signed decimal fraction."
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
198 (if (numberp calendar-longitude)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
199 calendar-longitude
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
200 (let ((long (+ (aref calendar-longitude 0)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
201 (/ (aref calendar-longitude 1) 60.0))))
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
202 (if (equal (aref calendar-longitude 2) 'east)
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
203 long
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
204 (- long)))))
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
205
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
206 (defun solar-get-number (prompt)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
207 "Return a number from the minibuffer, prompting with PROMPT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
208 Returns nil if nothing was entered."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
209 (let ((x (read-string prompt "")))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
210 (unless (string-equal x "")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
211 (string-to-number x))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
212
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 (defun solar-setup ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
214 "Prompt for `calendar-longitude', `calendar-latitude', `calendar-time-zone'."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 (beep)
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
216 (or calendar-longitude
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 (setq calendar-longitude
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 (solar-get-number
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 "Enter longitude (decimal fraction; + east, - west): ")))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
220 (or calendar-latitude
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 (setq calendar-latitude
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 (solar-get-number
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 "Enter latitude (decimal fraction; + north, - south): ")))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
224 (or calendar-time-zone
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 (setq calendar-time-zone
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 (solar-get-number
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
227 "Enter difference from Coordinated Universal Time (in minutes): ")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
228 )))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
230 (defun solar-sin-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
231 "Return sin of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
232 (sin (degrees-to-radians (mod x 360.0))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
233
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
234 (defun solar-cosine-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
235 "Return cosine of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
236 (cos (degrees-to-radians (mod x 360.0))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
237
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
238 (defun solar-tangent-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
239 "Return tangent of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
240 (tan (degrees-to-radians (mod x 360.0))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
241
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 (defun solar-xy-to-quadrant (x y)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
243 "Determine the quadrant of the point X, Y."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 (if (> x 0)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (if (> y 0) 1 4)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
246 (if (> y 0) 2 3)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (defun solar-degrees-to-quadrant (angle)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
249 "Determine the quadrant of ANGLE degrees."
4660
2516bc453477 Use integers instead of floating point where they will do.
Paul Eggert <eggert@twinsun.com>
parents: 4657
diff changeset
250 (1+ (floor (mod angle 360) 90)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 (defun solar-arctan (x quad)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 "Arctangent of X in quadrant QUAD."
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 (let ((deg (radians-to-degrees (atan x))))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
255 (cond ((equal quad 2) (+ deg 180))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
256 ((equal quad 3) (+ deg 180))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
257 ((equal quad 4) (+ deg 360))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
258 (t deg))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
260 (defun solar-atn2 (x y)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
261 "Arctangent of point X, Y."
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
262 (if (zerop x)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
263 (if (> y 0) 90 270)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
264 (solar-arctan (/ y x) (solar-xy-to-quadrant x y))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
265
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (defun solar-arccos (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
267 "Arccosine of X."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
268 (let ((y (sqrt (- 1 (* x x)))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
269 (solar-atn2 x y)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 (defun solar-arcsin (y)
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
272 "Arcsin of Y."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
273 (let ((x (sqrt (- 1 (* y y)))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
274 (solar-atn2 x y)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
276 (defsubst solar-degrees-to-hours (degrees)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
277 "Convert DEGREES to hours."
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
278 (/ degrees 15.0))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
280 (defsubst solar-hours-to-days (hour)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
281 "Convert HOUR to decimal fraction of a day."
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
282 (/ hour 24.0))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
284 (defun solar-right-ascension (longitude obliquity)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
285 "Right ascension of the sun, in hours, given LONGITUDE and OBLIQUITY.
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
286 Both arguments are in degrees."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (solar-degrees-to-hours
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 (solar-arctan
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
289 (* (solar-cosine-degrees obliquity) (solar-tangent-degrees longitude))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 (solar-degrees-to-quadrant longitude))))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
292 (defun solar-declination (longitude obliquity)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
293 "Declination of the sun, in degrees, given LONGITUDE and OBLIQUITY.
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
294 Both arguments are in degrees."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 (solar-arcsin
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
296 (* (solar-sin-degrees obliquity)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 (solar-sin-degrees longitude))))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
299 (defun solar-ecliptic-coordinates (time sunrise-flag)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
300 "Return solar longitude, ecliptic inclination, equation of time, nutation.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
301 Values are for TIME in Julian centuries of Ephemeris Time since
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
302 January 1st, 2000, at 12 ET. Longitude and inclination are in
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
303 degrees, equation of time in hours, and nutation in seconds of longitude.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
304 If SUNRISE-FLAG is non-nil, only calculate longitude and inclination."
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
305 (let* ((l (+ 280.46645
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
306 (* 36000.76983 time)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
307 (* 0.0003032 time time))) ; sun mean longitude
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
308 (ml (+ 218.3165
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
309 (* 481267.8813 time))) ; moon mean longitude
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
310 (m (+ 357.52910
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
311 (* 35999.05030 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
312 (* -0.0001559 time time)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
313 (* -0.00000048 time time time))) ; sun mean anomaly
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
314 (i (+ 23.43929111 (* -0.013004167 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
315 (* -0.00000016389 time time)
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
316 (* 0.0000005036 time time time))) ; mean inclination
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
317 (c (+ (* (+ 1.914600
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
318 (* -0.004817 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
319 (* -0.000014 time time))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
320 (solar-sin-degrees m))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
321 (* (+ 0.019993 (* -0.000101 time))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
322 (solar-sin-degrees (* 2 m)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
323 (* 0.000290
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
324 (solar-sin-degrees (* 3 m))))) ; center equation
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
325 (L (+ l c)) ; total longitude
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
326 ;; Longitude of moon's ascending node on the ecliptic.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
327 (omega (+ 125.04
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
328 (* -1934.136 time)))
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
329 ;; nut = nutation in longitude, measured in seconds of angle.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
330 (nut (unless sunrise-flag
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
331 (+ (* -17.20 (solar-sin-degrees omega))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
332 (* -1.32 (solar-sin-degrees (* 2 l)))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
333 (* -0.23 (solar-sin-degrees (* 2 ml)))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
334 (* 0.21 (solar-sin-degrees (* 2 omega))))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
335 (ecc (unless sunrise-flag ; eccentricity of earth's orbit
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
336 (+ 0.016708617
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
337 (* -0.000042037 time)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
338 (* -0.0000001236 time time))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
339 (app (+ L ; apparent longitude of sun
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
340 -0.00569
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
341 (* -0.00478
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
342 (solar-sin-degrees omega))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
343 (y (unless sunrise-flag
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
344 (* (solar-tangent-degrees (/ i 2))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
345 (solar-tangent-degrees (/ i 2)))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
346 ;; Equation of time, in hours.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
347 (time-eq (unless sunrise-flag
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
348 (/ (* 12 (+ (* y (solar-sin-degrees (* 2 l)))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
349 (* -2 ecc (solar-sin-degrees m))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
350 (* 4 ecc y (solar-sin-degrees m)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
351 (solar-cosine-degrees (* 2 l)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
352 (* -0.5 y y (solar-sin-degrees (* 4 l)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
353 (* -1.25 ecc ecc (solar-sin-degrees (* 2 m)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
354 3.1415926535))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
355 (list app i time-eq nut)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
356
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
357 (defun solar-ephemeris-correction (year)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
358 "Ephemeris time minus Universal Time during Gregorian YEAR.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
359 Result is in days. For the years 1800-1987, the maximum error is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
360 1.9 seconds. For the other years, the maximum error is about 30 seconds."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
361 (cond ((and (<= 1988 year) (< year 2020))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
362 (/ (+ year -2000 67.0) 60.0 60.0 24.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
363 ((and (<= 1900 year) (< year 1988))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
364 (let* ((theta (/ (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
365 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
366 (list 7 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
367 (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
368 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
369 '(1 1 1900))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
370 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
371 (theta2 (* theta theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
372 (theta3 (* theta2 theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
373 (theta4 (* theta2 theta2))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
374 (theta5 (* theta3 theta2)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
375 (+ -0.00002
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
376 (* 0.000297 theta)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
377 (* 0.025184 theta2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
378 (* -0.181133 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
379 (* 0.553040 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
380 (* -0.861938 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
381 (* 0.677066 theta3 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
382 (* -0.212591 theta4 theta3))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
383 ((and (<= 1800 year) (< year 1900))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
384 (let* ((theta (/ (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
385 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
386 (list 7 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
387 (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
388 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
389 '(1 1 1900))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
390 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
391 (theta2 (* theta theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
392 (theta3 (* theta2 theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
393 (theta4 (* theta2 theta2))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
394 (theta5 (* theta3 theta2)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
395 (+ -0.000009
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
396 (* 0.003844 theta)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
397 (* 0.083563 theta2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
398 (* 0.865736 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
399 (* 4.867575 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
400 (* 15.845535 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
401 (* 31.332267 theta3 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
402 (* 38.291999 theta4 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
403 (* 28.316289 theta4 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
404 (* 11.636204 theta4 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
405 (* 2.043794 theta5 theta5))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
406 ((and (<= 1620 year) (< year 1800))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
407 (let ((x (/ (- year 1600) 10.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
408 (/ (+ (* 2.19167 x x) (* -40.675 x) 196.58333) 60.0 60.0 24.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
409 (t (let* ((tmp (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
410 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
411 (list 1 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
412 2382148))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
413 (second (- (/ (* tmp tmp) 41048480.0) 15)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
414 (/ second 60.0 60.0 24.0)))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
415
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
416 (defun solar-ephemeris-time (time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
417 "Ephemeris Time at moment TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
418 TIME is a pair with the first component being the number of Julian centuries
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
419 elapsed at 0 Universal Time, and the second component being the universal
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
420 time. For instance, the pair corresponding to November 28, 1995 at 16 UT is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
421 \(-0.040945 16), -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
422 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
423
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
424 Result is in Julian centuries of ephemeris time."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
425 (let* ((t0 (car time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
426 (ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
427 (t1 (+ t0 (/ (/ ut 24.0) 36525)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
428 (y (+ 2000 (* 100 t1)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
429 (dt (* 86400 (solar-ephemeris-correction (floor y)))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
430 (+ t1 (/ (/ dt 86400) 36525))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
431
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
432 (defun solar-equatorial-coordinates (time sunrise-flag)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
433 "Right ascension (in hours) and declination (in degrees) of the sun at TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
434 TIME is a pair with the first component being the number of
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
435 Julian centuries elapsed at 0 Universal Time, and the second
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
436 component being the universal time. For instance, the pair
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
437 corresponding to November 28, 1995 at 16 UT is (-0.040945 16),
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
438 -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
439 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT. SUNRISE-FLAG is passed
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
440 to `solar-ecliptic-coordinates'."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
441 (let ((ec (solar-ecliptic-coordinates (solar-ephemeris-time time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
442 sunrise-flag)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
443 (list (solar-right-ascension (car ec) (cadr ec))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
444 (solar-declination (car ec) (cadr ec)))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
445
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
446 (defun solar-horizontal-coordinates (time latitude longitude sunrise-flag)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
447 "Azimuth and height of the sun at TIME, LATITUDE, and LONGITUDE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
448 TIME is a pair with the first component being the number of
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
449 Julian centuries elapsed at 0 Universal Time, and the second
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
450 component being the universal time. For instance, the pair
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
451 corresponding to November 28, 1995 at 16 UT is (-0.040945 16),
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
452 -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
453 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT. SUNRISE-FLAG
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
454 is passed to `solar-ecliptic-coordinates'. Azimuth and
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
455 height (between -180 and 180) are both in degrees."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
456 (let* ((ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
457 (ec (solar-equatorial-coordinates time sunrise-flag))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
458 (st (+ solar-sidereal-time-greenwich-midnight
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
459 (* ut 1.00273790935)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
460 ;; Hour angle (in degrees).
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
461 (ah (- (* st 15) (* 15 (car ec)) (* -1 (calendar-longitude))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
462 (de (cadr ec))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
463 (azimuth (solar-atn2 (- (* (solar-cosine-degrees ah)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
464 (solar-sin-degrees latitude))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
465 (* (solar-tangent-degrees de)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
466 (solar-cosine-degrees latitude)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
467 (solar-sin-degrees ah)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
468 (height (solar-arcsin
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
469 (+ (* (solar-sin-degrees latitude) (solar-sin-degrees de))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
470 (* (solar-cosine-degrees latitude)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
471 (solar-cosine-degrees de)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
472 (solar-cosine-degrees ah))))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
473 (if (> height 180) (setq height (- height 360)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
474 (list azimuth height)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
475
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
476 (defun solar-moment (direction latitude longitude time height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
477 "Sunrise/sunset at location.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
478 Sunrise if DIRECTION =-1 or sunset if =1 at LATITUDE, LONGITUDE, with midday
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
479 being TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
480
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
481 TIME is a pair with the first component being the number of Julian centuries
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
482 elapsed at 0 Universal Time, and the second component being the universal
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
483 time. For instance, the pair corresponding to November 28, 1995 at 16 UT is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
484 \(-0.040945 16), -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
485 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
486
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
487 HEIGHT is the angle the center of the sun has over the horizon for the contact
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
488 we are trying to find. For sunrise and sunset, it is usually -0.61 degrees,
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
489 accounting for the edge of the sun being on the horizon.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
490
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
491 Uses binary search."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
492 (let* ((ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
493 (possible t) ; we assume that rise or set are possible
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
494 (utmin (+ ut (* direction 12.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
495 (utmax ut) ; the time searched is between utmin and utmax
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
496 ;; utmin and utmax are in hours.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
497 (utmoment-old 0.0) ; rise or set approximation
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
498 (utmoment 1.0) ; rise or set approximation
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
499 (hut 0) ; sun height at utmoment
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
500 (t0 (car time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
501 (hmin (cadr (solar-horizontal-coordinates (list t0 utmin)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
502 latitude longitude t)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
503 (hmax (cadr (solar-horizontal-coordinates (list t0 utmax)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
504 latitude longitude t))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
505 ;; -0.61 degrees is the height of the middle of the sun, when it
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
506 ;; rises or sets.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
507 (if (< hmin height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
508 (if (> hmax height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
509 (while ;;; (< i 20) ; we perform a simple dichotomy
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
510 ;;; (> (abs (- hut height)) epsilon)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
511 (>= (abs (- utmoment utmoment-old))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
512 (/ solar-error 60))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
513 (setq utmoment-old utmoment
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
514 utmoment (/ (+ utmin utmax) 2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
515 hut (cadr (solar-horizontal-coordinates
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
516 (list t0 utmoment) latitude longitude t)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
517 (if (< hut height) (setq utmin utmoment))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
518 (if (> hut height) (setq utmax utmoment)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
519 (setq possible nil)) ; the sun never rises
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
520 (setq possible nil)) ; the sun never sets
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
521 (if possible utmoment)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
522
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
523 (defun solar-sunrise-and-sunset (time latitude longitude height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
524 "Sunrise, sunset and length of day.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
525 Parameters are the midday TIME and the LATITUDE, LONGITUDE of the location.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
526
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
527 TIME is a pair with the first component being the number of Julian centuries
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
528 elapsed at 0 Universal Time, and the second component being the universal
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
529 time. For instance, the pair corresponding to November 28, 1995 at 16 UT is
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
530 \(-0.040945 16), -0.040945 being the number of Julian centuries elapsed between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
531 Jan 1, 2000 at 12 UT and November 28, 1995 at 0 UT.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
532
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
533 HEIGHT is the angle the center of the sun has over the horizon for the contact
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
534 we are trying to find. For sunrise and sunset, it is usually -0.61 degrees,
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
535 accounting for the edge of the sun being on the horizon.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
536
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
537 Coordinates are included because this function is called with latitude=1
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
538 degrees to find out if polar regions have 24 hours of sun or only night."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
539 (let ((rise-time (solar-moment -1 latitude longitude time height))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
540 (set-time (solar-moment 1 latitude longitude time height))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
541 day-length)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
542 (if (not (and rise-time set-time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
543 (if (or (and (> latitude 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
544 solar-northern-spring-or-summer-season)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
545 (and (< latitude 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
546 (not solar-northern-spring-or-summer-season)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
547 (setq day-length 24)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
548 (setq day-length 0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
549 (setq day-length (- set-time rise-time)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
550 (list (if rise-time (+ rise-time (/ calendar-time-zone 60.0)) nil)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
551 (if set-time (+ set-time (/ calendar-time-zone 60.0)) nil)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
552 day-length)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
553
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
554 (defun solar-time-string (time time-zone)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
555 "Printable form for decimal fraction TIME in TIME-ZONE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
556 Format used is given by `calendar-time-display-form'."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
557 (let* ((time (round (* 60 time)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
558 (24-hours (/ time 60))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
559 (minutes (format "%02d" (% time 60)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
560 (12-hours (format "%d" (1+ (% (+ 24-hours 11) 12))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
561 (am-pm (if (>= 24-hours 12) "pm" "am"))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
562 (24-hours (format "%02d" 24-hours)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
563 (mapconcat 'eval calendar-time-display-form "")))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
564
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
565 (defun solar-daylight (time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
566 "Printable form for TIME expressed in hours."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
567 (format "%d:%02d"
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
568 (floor time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
569 (floor (* 60 (- time (floor time))))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
570
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
571 (defun solar-julian-ut-centuries (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
572 "Number of Julian centuries since 1 Jan, 2000 at noon UT for Gregorian DATE."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
573 (/ (- (calendar-absolute-from-gregorian date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
574 (calendar-absolute-from-gregorian '(1 1.5 2000)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
575 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
576
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
577 (defun solar-date-to-et (date ut)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
578 "Ephemeris Time at Gregorian DATE at Universal Time UT (in hours).
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
579 Expressed in Julian centuries of Ephemeris Time."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
580 (solar-ephemeris-time (list (solar-julian-ut-centuries date) ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
581
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
582 (defun solar-time-equation (date ut)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
583 "Equation of time expressed in hours at Gregorian DATE at Universal time UT."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
584 (nth 2 (solar-ecliptic-coordinates (solar-date-to-et date ut) nil)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
585
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
586 (defun solar-exact-local-noon (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
587 "Date and Universal Time of local noon at *local date* DATE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
588 The date may be different from the one asked for, but it will be the right
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
589 local date. The second component of date should be an integer."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
590 (let* ((nd date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
591 (ut (- 12.0 (/ (calendar-longitude) 15)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
592 (te (solar-time-equation date ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
593 (setq ut (- ut te))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
594 (if (>= ut 24)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
595 (setq nd (list (car date) (1+ (cadr date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
596 (nth 2 date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
597 ut (- ut 24)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
598 (if (< ut 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
599 (setq nd (list (car date) (1- (cadr date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
600 (nth 2 date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
601 ut (+ ut 24)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
602 (setq nd (calendar-gregorian-from-absolute ; date standardization
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
603 (calendar-absolute-from-gregorian nd)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
604 (list nd ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
605
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
606 (defun solar-sidereal-time (t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
607 "Sidereal time (in hours) in Greenwich at T0 Julian centuries.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
608 T0 must correspond to 0 hours UT."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
609 (let* ((mean-sid-time (+ 6.6973746
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
610 (* 2400.051337 t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
611 (* 0.0000258622 t0 t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
612 (* -0.0000000017222 t0 t0 t0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
613 (et (solar-ephemeris-time (list t0 0.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
614 (nut-i (solar-ecliptic-coordinates et nil))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
615 (nut (nth 3 nut-i)) ; nutation
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
616 (i (cadr nut-i))) ; inclination
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
617 (mod (+ (mod (+ mean-sid-time
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
618 (/ (/ (* nut (solar-cosine-degrees i)) 15) 3600)) 24.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
619 24.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
620 24.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
621
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
622 (defun solar-sunrise-sunset (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
623 "List of *local* times of sunrise, sunset, and daylight on Gregorian DATE.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
624 Corresponding value is nil if there is no sunrise/sunset."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
625 ;; First, get the exact moment of local noon.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
626 (let* ((exact-local-noon (solar-exact-local-noon date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
627 ;; Get the time from the 2000 epoch.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
628 (t0 (solar-julian-ut-centuries (car exact-local-noon)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
629 ;; Store the sidereal time at Greenwich at midnight of UT time.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
630 ;; Find if summer or winter slightly above the equator.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
631 (equator-rise-set
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
632 (progn (setq solar-sidereal-time-greenwich-midnight
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
633 (solar-sidereal-time t0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
634 (solar-sunrise-and-sunset
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
635 (list t0 (cadr exact-local-noon))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
636 1.0
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
637 (calendar-longitude) 0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
638 ;; Store the spring/summer information, compute sunrise and
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
639 ;; sunset (two first components of rise-set). Length of day
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
640 ;; is the third component (it is only the difference between
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
641 ;; sunset and sunrise when there is a sunset and a sunrise)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
642 (rise-set
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
643 (progn
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
644 (setq solar-northern-spring-or-summer-season
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
645 (> (nth 2 equator-rise-set) 12))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
646 (solar-sunrise-and-sunset
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
647 (list t0 (cadr exact-local-noon))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
648 (calendar-latitude)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
649 (calendar-longitude) -0.61)))
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
650 (rise-time (car rise-set))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
651 (adj-rise (if rise-time (dst-adjust-time date rise-time)))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
652 (set-time (cadr rise-set))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
653 (adj-set (if set-time (dst-adjust-time date set-time)))
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
654 (length (nth 2 rise-set)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
655 (list
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
656 (and rise-time (calendar-date-equal date (car adj-rise)) (cdr adj-rise))
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
657 (and set-time (calendar-date-equal date (car adj-set)) (cdr adj-set))
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
658 (solar-daylight length))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
659
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
660 (defun solar-sunrise-sunset-string (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
661 "String of *local* times of sunrise, sunset, and daylight on Gregorian DATE."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
662 (let ((l (solar-sunrise-sunset date)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
663 (format
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
664 "%s, %s at %s (%s hours daylight)"
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
665 (if (car l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
666 (concat "Sunrise " (apply 'solar-time-string (car l)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
667 "No sunrise")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
668 (if (cadr l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
669 (concat "sunset " (apply 'solar-time-string (cadr l)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
670 "no sunset")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
671 (eval calendar-location-name)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
672 (nth 2 l))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
673
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
674 (defconst solar-data-list
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
675 '((403406 4.721964 1.621043)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
676 (195207 5.937458 62830.348067)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
677 (119433 1.115589 62830.821524)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
678 (112392 5.781616 62829.634302)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
679 (3891 5.5474 125660.5691)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
680 (2819 1.5120 125660.984)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
681 (1721 4.1897 62832.4766)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
682 (0 1.163 0.813)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
683 (660 5.415 125659.31)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
684 (350 4.315 57533.85)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
685 (334 4.553 -33.931)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
686 (314 5.198 777137.715)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
687 (268 5.989 78604.191)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
688 (242 2.911 5.412)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
689 (234 1.423 39302.098)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
690 (158 0.061 -34.861)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
691 (132 2.317 115067.698)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
692 (129 3.193 15774.337)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
693 (114 2.828 5296.670)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
694 (99 0.52 58849.27)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
695 (93 4.65 5296.11)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
696 (86 4.35 -3980.70)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
697 (78 2.75 52237.69)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
698 (72 4.50 55076.47)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
699 (68 3.23 261.08)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
700 (64 1.22 15773.85)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
701 (46 0.14 188491.03)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
702 (38 3.44 -7756.55)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
703 (37 4.37 264.89)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
704 (32 1.14 117906.27)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
705 (29 2.84 55075.75)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
706 (28 5.96 -7961.39)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
707 (27 5.09 188489.81)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
708 (27 1.72 2132.19)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
709 (25 2.56 109771.03)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
710 (24 1.92 54868.56)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
711 (21 0.09 25443.93)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
712 (21 5.98 -55731.43)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
713 (20 4.03 60697.74)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
714 (18 4.47 2132.79)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
715 (17 0.79 109771.63)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
716 (14 4.24 -7752.82)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
717 (13 2.01 188491.91)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
718 (13 2.65 207.81)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
719 (13 4.98 29424.63)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
720 (12 0.93 -7.99)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
721 (10 2.21 46941.14)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
722 (10 3.59 -68.29)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
723 (10 1.50 21463.25)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
724 (10 2.55 157208.40))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
725 "Data used for calculation of solar longitude.")
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
727 (defun solar-longitude (d)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
728 "Longitude of sun on astronomical (Julian) day number D.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
729 Accuracy is about 0.0006 degree (about 365.25*24*60*0.0006/360 = 1 minutes).
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
730 The values of `calendar-daylight-savings-starts',
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
731 `calendar-daylight-savings-starts-time', `calendar-daylight-savings-ends',
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
732 `calendar-daylight-savings-ends-time', `calendar-daylight-time-offset', and
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
733 `calendar-time-zone' are used to interpret local time."
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
734 (let* ((a-d (calendar-absolute-from-astro d))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
735 ;; Get Universal Time.
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
736 (date (calendar-astro-from-absolute
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
737 (- a-d
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
738 (if (dst-in-effect a-d)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
739 (/ calendar-daylight-time-offset 24.0 60.0) 0)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
740 (/ calendar-time-zone 60.0 24.0))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
741 ;; Get Ephemeris Time.
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
742 (date (+ date (solar-ephemeris-correction
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
743 (extract-calendar-year
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
744 (calendar-gregorian-from-absolute
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
745 (floor
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
746 (calendar-absolute-from-astro
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
747 date)))))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
748 (U (/ (- date 2451545) 3652500))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
749 (longitude
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
750 (+ 4.9353929
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
751 (* 62833.1961680 U)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
752 (* 0.0000001
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
753 (apply '+
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
754 (mapcar (lambda (x)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
755 (* (car x)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
756 (sin (mod
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
757 (+ (cadr x)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
758 (* (nth 2 x) U))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
759 (* 2 pi)))))
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
760 solar-data-list)))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
761 (aberration
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
762 (* 0.0000001 (- (* 17 (cos (+ 3.10 (* 62830.14 U)))) 973)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
763 (A1 (mod (+ 2.18 (* U (+ -3375.70 (* 0.36 U)))) (* 2 pi)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
764 (A2 (mod (+ 3.51 (* U (+ 125666.39 (* 0.10 U)))) (* 2 pi)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
765 (nutation (* -0.0000001 (+ (* 834 (sin A1)) (* 64 (sin A2))))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
766 (mod (radians-to-degrees (+ longitude aberration nutation)) 360.0)))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
767
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
768 (defun solar-date-next-longitude (d l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
769 "First time after day D when solar longitude is a multiple of L degrees.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
770 D is a Julian day number. L must be an integer divisor of 360.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
771 The result is for `calendar-location-name', and is in local time
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
772 \(including any daylight saving rules) expressed in astronomical (Julian)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
773 day numbers. The values of `calendar-daylight-savings-starts',
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
774 `calendar-daylight-savings-starts-time', `calendar-daylight-savings-ends',
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
775 `calendar-daylight-savings-ends-time', `calendar-daylight-time-offset',
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
776 and `calendar-time-zone' are used to interpret local time."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
777 (let* ((long)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
778 (start d)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
779 (start-long (solar-longitude d))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
780 (next (mod (* l (1+ (floor (/ start-long l)))) 360))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
781 (end (+ d (* (/ l 360.0) 400)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
782 (end-long (solar-longitude end)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
783 (while ; bisection search for nearest minute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
784 (< 0.00001 (- end start))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
785 ;; start <= d < end
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
786 ;; start-long <= next < end-long when next != 0
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
787 ;; when next = 0, we look for the discontinuity (start-long is near 360
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
788 ;; and end-long is small (less than l).
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
789 (setq d (/ (+ start end) 2.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
790 long (solar-longitude d))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
791 (if (or (and (not (zerop next)) (< long next))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
792 (and (zerop next) (< l long)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
793 (setq start d
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
794 start-long long)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
795 (setq end d
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
796 end-long long)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
797 (/ (+ start end) 2.0)))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
798
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 ;;;###autoload
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 (defun sunrise-sunset (&optional arg)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
801 "Local time of sunrise and sunset for today. Accurate to a few seconds.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
802 If called with an optional prefix argument ARG, prompt for date.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
803 If called with an optional double prefix argument, prompt for
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
804 longitude, latitude, time zone, and date, and always use standard time.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 This function is suitable for execution in a .emacs file."
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
807 (interactive "p")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
808 (or arg (setq arg 1))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
809 (if (and (< arg 16)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
810 (not (and calendar-latitude calendar-longitude calendar-time-zone)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
811 (solar-setup))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
812 (let* ((calendar-longitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
813 (if (< arg 16) calendar-longitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
814 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
815 "Enter longitude (decimal fraction; + east, - west): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
816 (calendar-latitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
817 (if (< arg 16) calendar-latitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
818 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
819 "Enter latitude (decimal fraction; + north, - south): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
820 (calendar-time-zone
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
821 (if (< arg 16) calendar-time-zone
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
822 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
823 "Enter difference from Coordinated Universal Time (in minutes): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
824 (calendar-location-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
825 (if (< arg 16) calendar-location-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
826 (let ((float-output-format "%.1f"))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
827 (format "%s%s, %s%s"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
828 (if (numberp calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
829 (abs calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
830 (+ (aref calendar-latitude 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
831 (/ (aref calendar-latitude 1) 60.0)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
832 (if (numberp calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
833 (if (> calendar-latitude 0) "N" "S")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
834 (if (equal (aref calendar-latitude 2) 'north) "N" "S"))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
835 (if (numberp calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
836 (abs calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
837 (+ (aref calendar-longitude 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
838 (/ (aref calendar-longitude 1) 60.0)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
839 (if (numberp calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
840 (if (> calendar-longitude 0) "E" "W")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
841 (if (equal (aref calendar-longitude 2) 'east)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
842 "E" "W"))))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
843 (calendar-standard-time-zone-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
844 (if (< arg 16) calendar-standard-time-zone-name
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
845 (cond ((zerop calendar-time-zone) "UTC")
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
846 ((< calendar-time-zone 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
847 (format "UTC%dmin" calendar-time-zone))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
848 (t (format "UTC+%dmin" calendar-time-zone)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
849 (calendar-daylight-savings-starts
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
850 (if (< arg 16) calendar-daylight-savings-starts))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
851 (calendar-daylight-savings-ends
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
852 (if (< arg 16) calendar-daylight-savings-ends))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
853 (date (if (< arg 4) (calendar-current-date) (calendar-read-date)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
854 (date-string (calendar-date-string date t))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
855 (time-string (solar-sunrise-sunset-string date))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
856 (msg (format "%s: %s" date-string time-string))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
857 (one-window (one-window-p t)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
858 (if (<= (length msg) (frame-width))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
859 (message "%s" msg)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
860 (with-output-to-temp-buffer "*temp*"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
861 (princ (concat date-string "\n" time-string)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
862 (message "%s"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
863 (substitute-command-keys
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
864 (if one-window
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
865 (if pop-up-windows
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
866 "Type \\[delete-other-windows] to remove temp window."
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
867 "Type \\[switch-to-buffer] RET to remove temp window.")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
868 "Type \\[switch-to-buffer-other-window] RET to restore old \
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
869 contents of temp window."))))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
870
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
871 ;;;###cal-autoload
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872 (defun calendar-sunrise-sunset ()
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 "Local time of sunrise and sunset for date under cursor.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
874 Accurate to a few seconds."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 (interactive)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
876 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 (solar-setup))
5835
1c685c3bd5a9 (calendar-sunrise-sunset): Use new error arg to calendar-cursor-to-date.
Richard M. Stallman <rms@gnu.org>
parents: 5698
diff changeset
878 (let ((date (calendar-cursor-to-date t)))
5698
d127e0963a2c (calendar-sunrise-sunset): Add date to message.
Richard M. Stallman <rms@gnu.org>
parents: 5010
diff changeset
879 (message "%s: %s"
d127e0963a2c (calendar-sunrise-sunset): Add date to message.
Richard M. Stallman <rms@gnu.org>
parents: 5010
diff changeset
880 (calendar-date-string date t t)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
881 (solar-sunrise-sunset-string date))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
883 (defvar date)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
884
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
885 ;; To be called from list-sexp-diary-entries, where DATE is bound.
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
886 ;;;###diary-autoload
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 (defun diary-sunrise-sunset ()
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 "Local time of sunrise and sunset as a diary entry.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
889 Accurate to a few seconds."
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
890 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 (solar-setup))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
892 (solar-sunrise-sunset-string date))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
894 ;; To be called from list-sexp-diary-entries, where DATE is bound.
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
895 ;;;###diary-autoload
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
896 (defun diary-sabbath-candles (&optional mark)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 "Local time of candle lighting diary entry--applies if date is a Friday.
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
898 No diary entry if there is no sunset on that date.
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
899
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
900 An optional parameter MARK specifies a face or single-character string to
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
901 use when highlighting the day in the calendar."
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
902 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 (solar-setup))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
904 (if (= (% (calendar-absolute-from-gregorian date) 7) 5) ; Friday
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
905 (let* ((sunset (cadr (solar-sunrise-sunset date)))
44367
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
906 (light (if sunset
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
907 (cons (- (car sunset)
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
908 (/ diary-sabbath-candles-minutes 60.0))
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
909 (cdr sunset)))))
15095
66db908addc7 Double DST correction removed!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14917
diff changeset
910 (if sunset
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
911 (cons mark
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
912 (format "%s Sabbath candle lighting"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
913 (apply 'solar-time-string light)))))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
915 ;; From Meeus, 1991, page 167.
52113
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
916 (defconst solar-seasons-data
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
917 '((485 324.96 1934.136)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
918 (203 337.23 32964.467)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
919 (199 342.08 20.186)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
920 (182 27.85 445267.112)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
921 (156 73.14 45036.886)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
922 (136 171.52 22518.443)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
923 (77 222.54 65928.934)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
924 (74 296.72 3034.906)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
925 (70 243.58 9037.513)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
926 (58 119.81 33718.147)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
927 (52 297.17 150.678)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
928 (50 21.02 2281.226)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
929 (45 247.54 29929.562)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
930 (44 325.15 31555.956)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
931 (29 60.93 4443.417)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
932 (18 155.12 67555.328)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
933 (17 288.79 4562.452)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
934 (16 198.04 62894.029)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
935 (14 199.76 31436.921)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
936 (12 95.39 14577.848)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
937 (12 287.11 31931.756)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
938 (12 320.81 34777.259)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
939 (9 227.73 1222.114)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
940 (8 15.45 16859.074))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
941 "Data for solar equinox/solstice calculations.")
52113
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
942
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
943 (defun solar-equinoxes/solstices (k year)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
944 "Date of equinox/solstice K for YEAR.
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
945 K=0, spring equinox; K=1, summer solstice; K=2, fall equinox;
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
946 K=3, winter solstice. RESULT is a Gregorian local date.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
947 Accurate to within a minute between 1951 and 2050."
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
948 (let* ((JDE0 (solar-mean-equinoxes/solstices k year))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
949 (T (/ (- JDE0 2451545.0) 36525))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
950 (W (- (* 35999.373 T) 2.47))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
951 (Delta-lambda (+ 1 (* 0.0334 (solar-cosine-degrees W))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
952 (* 0.0007 (solar-cosine-degrees (* 2 W)))))
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
953 (S (apply '+ (mapcar (lambda(x)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
954 (* (car x) (solar-cosine-degrees
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
955 (+ (* (nth 2 x) T) (cadr x)))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
956 solar-seasons-data)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
957 (JDE (+ JDE0 (/ (* 0.00001 S) Delta-lambda)))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
958 ;; Ephemeris time correction.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
959 (correction (+ 102.3 (* 123.5 T) (* 32.5 T T)))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
960 (JD (- JDE (/ correction 86400)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
961 (date (calendar-gregorian-from-absolute (floor (- JD 1721424.5))))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
962 (time (- (- JD 0.5) (floor (- JD 0.5)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
963 (list (car date) (+ (cadr date) time
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
964 (/ (/ calendar-time-zone 60.0) 24.0))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
965 (nth 2 date))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
966
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
967 ;; From Meeus, 1991, page 166.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
968 (defun solar-mean-equinoxes/solstices (k year)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
969 "Julian day of mean equinox/solstice K for YEAR.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
970 K=0, spring equinox; K=1, summer solstice; K=2, fall equinox; K=3, winter
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
971 solstice. These formulae are only to be used between 1000 BC and 3000 AD."
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
972 (let ((y (/ year 1000.0))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
973 (z (/ (- year 2000) 1000.0)))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
974 (if (< year 1000) ; actually between -1000 and 1000
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
975 (cond ((equal k 0) (+ 1721139.29189
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
976 (* 365242.13740 y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
977 (* 0.06134 y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
978 (* 0.00111 y y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
979 (* -0.00071 y y y y)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
980 ((equal k 1) (+ 1721233.25401
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
981 (* 365241.72562 y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
982 (* -0.05323 y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
983 (* 0.00907 y y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
984 (* 0.00025 y y y y)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
985 ((equal k 2) (+ 1721325.70455
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
986 (* 365242.49558 y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
987 (* -0.11677 y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
988 (* -0.00297 y y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
989 (* 0.00074 y y y y)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
990 ((equal k 3) (+ 1721414.39987
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
991 (* 365242.88257 y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
992 (* -0.00769 y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
993 (* -0.00933 y y y)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
994 (* -0.00006 y y y y))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
995 ; actually between 1000 and 3000
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
996 (cond ((equal k 0) (+ 2451623.80984
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
997 (* 365242.37404 z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
998 (* 0.05169 z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
999 (* -0.00411 z z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1000 (* -0.00057 z z z z)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1001 ((equal k 1) (+ 2451716.56767
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1002 (* 365241.62603 z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1003 (* 0.00325 z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1004 (* 0.00888 z z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1005 (* -0.00030 z z z z)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1006 ((equal k 2) (+ 2451810.21715
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1007 (* 365242.01767 z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1008 (* -0.11575 z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1009 (* 0.00337 z z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1010 (* 0.00078 z z z z)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1011 ((equal k 3) (+ 2451900.05952
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1012 (* 365242.74049 z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1013 (* -0.06223 z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1014 (* -0.00823 z z z)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1015 (* 0.00032 z z z z)))))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
1016
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1017 (defvar displayed-month) ; from generate-calendar
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1018 (defvar displayed-year)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1019
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
1020 ;;;###holiday-autoload
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1021 (defun solar-equinoxes-solstices ()
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
1022 "Local date and time of equinoxes and solstices, if visible in the calendar.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 Requires floating point."
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1024 (let ((m displayed-month)
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1025 (y displayed-year))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 (increment-calendar-month m y (cond ((= 1 (% m 3)) -1)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1027 ((= 2 (% m 3)) 1)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1028 (t 0)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 (let* ((calendar-standard-time-zone-name
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1030 (if calendar-time-zone calendar-standard-time-zone-name "UTC"))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 (calendar-daylight-savings-starts
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 (if calendar-time-zone calendar-daylight-savings-starts))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 (calendar-daylight-savings-ends
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 (if calendar-time-zone calendar-daylight-savings-ends))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 (calendar-time-zone (if calendar-time-zone calendar-time-zone 0))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 (k (1- (/ m 3)))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
1037 (d0 (solar-equinoxes/solstices k y))
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1038 (d1 (list (car d0) (floor (cadr d0)) (nth 2 d0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1039 (h0 (* 24 (- (cadr d0) (floor (cadr d0)))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
1040 (adj (dst-adjust-time d1 h0))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1041 (d (list (caar adj)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1042 (+ (car (cdar adj))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1043 (/ (cadr adj) 24.0))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1044 (cadr (cdar adj))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1045 ;; The following is nearly as accurate, but not quite:
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
1046 ;; (d0 (solar-date-next-longitude
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1047 ;; (calendar-astro-from-absolute
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1048 ;; (calendar-absolute-from-gregorian
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1049 ;; (list (+ 3 (* k 3)) 15 y)))
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1050 ;; 90))
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
1051 ;; (abs-day (calendar-absolute-from-astro d)))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
1052 (abs-day (calendar-absolute-from-gregorian d)))
13045
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1053 (list
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1054 (list (calendar-gregorian-from-absolute (floor abs-day))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1055 (format "%s %s"
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1056 (nth k (if (and calendar-latitude
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1057 (< (calendar-latitude) 0))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1058 solar-s-hemi-seasons
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1059 solar-n-hemi-seasons))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1060 (solar-time-string
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1061 (* 24 (- abs-day (floor abs-day)))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1062 (if (dst-in-effect abs-day)
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1063 calendar-daylight-time-zone-name
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1064 calendar-standard-time-zone-name))))))))
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1065
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 (provide 'solar)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
1069 ;; arch-tag: bc0ff693-df58-4666-bde4-2a7837ccb8fe
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 ;;; solar.el ends here