annotate lisp/calendar/solar.el @ 93580:b6cea5b391eb

(calendar-holiday-list): Fix previous change. (holiday-filter-visible-calendar): Doc fix. Use mapcar. (holiday-easter-etc): Fix nesting of result. Tweak holiday order. Use calendar-date-is-visible-p, not holiday-filter-visible-calendar.
author Glenn Morris <rgm@gnu.org>
date Thu, 03 Apr 2008 04:09:31 +0000
parents 2fd8322cee67
children 8a8d2922328b
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
93490
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
31 ;; See calendar.el. This file implements features that deal with
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
32 ;; times of day, sunrise/sunset, and equinoxes/solstices.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 ;; 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
35 ;; 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
36 ;; ``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
37 ;; 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
38 ;; 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
39 ;; -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
40 ;; 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
41
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 ;;
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
43 ;; Accuracy:
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
44 ;; 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
45 ;; 1951--2050. For other years the times will be within +/- 2 minutes.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 ;;
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
47 ;; 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
48 ;; 1951--2050. For other years the times will be within +/- 1 minute.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 ;;; Code:
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
93230
21dd50e483d6 Remove floating-point check.
Glenn Morris <rgm@gnu.org>
parents: 93093
diff changeset
52 (require 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
53 (require 'cal-dst)
93230
21dd50e483d6 Remove floating-point check.
Glenn Morris <rgm@gnu.org>
parents: 93093
diff changeset
54 ;; calendar-absolute-from-astro and v versa are cal-autoloads.
21dd50e483d6 Remove floating-point check.
Glenn Morris <rgm@gnu.org>
parents: 93093
diff changeset
55 ;;;(require 'cal-julian)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
56
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
57
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
58 (defcustom calendar-time-display-form
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
59 '(12-hours ":" minutes am-pm
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
60 (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
61 "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
62
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
63 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
64 `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
65 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
66
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
67 For example, the form
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
68
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
69 '(24-hours \":\" minutes
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
70 (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
71
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
72 would give military-style times like `21:07 (UTC)'."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
73 :type 'sexp
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
74 :group 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
75
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
76 (defcustom calendar-latitude nil
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
77 "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
78 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
79 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
80 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
81 York City.
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
82
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
83 This variable should be set in `site-start'.el."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
84 :type '(choice (const nil)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
85 (number :tag "Exact")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
86 (vector :value [0 0 north]
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
87 (integer :tag "Degrees")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
88 (integer :tag "Minutes")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
89 (choice :tag "Position"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
90 (const north)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
91 (const south))))
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
92 :group 'calendar)
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
93
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
94 (defcustom calendar-longitude nil
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
95 "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
96 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
97 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
98 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
99 York City.
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
100
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
101 This variable should be set in `site-start'.el."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
102 :type '(choice (const nil)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
103 (number :tag "Exact")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
104 (vector :value [0 0 west]
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
105 (integer :tag "Degrees")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
106 (integer :tag "Minutes")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
107 (choice :tag "Position"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
108 (const east)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
109 (const west))))
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 15095
diff changeset
110 :group 'calendar)
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
111
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
112 (defcustom calendar-location-name
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
113 '(let ((float-output-format "%.1f"))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
114 (format "%s%s, %s%s"
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
115 (if (numberp calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
116 (abs calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
117 (+ (aref calendar-latitude 0)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
118 (/ (aref calendar-latitude 1) 60.0)))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
119 (if (numberp calendar-latitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
120 (if (> calendar-latitude 0) "N" "S")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
121 (if (eq (aref calendar-latitude 2) 'north) "N" "S"))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
122 (if (numberp calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
123 (abs calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
124 (+ (aref calendar-longitude 0)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
125 (/ (aref calendar-longitude 1) 60.0)))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
126 (if (numberp calendar-longitude)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
127 (if (> calendar-longitude 0) "E" "W")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
128 (if (eq (aref calendar-longitude 2) 'east) "E" "W"))))
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
129 "Expression evaluating to the name of the calendar location.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
130 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
131 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
132
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
133 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
134 :type 'sexp
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
135 :group 'calendar)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
136
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
137 (defcustom solar-error 0.5
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
138 "Tolerance (in minutes) for sunrise/sunset calculations.
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 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
141 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
142 times will be correct to the minute.
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 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
145 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
146 `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
147 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
148 `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
149 :type 'number
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
150 :group 'calendar)
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
151
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
152 (defcustom diary-sabbath-candles-minutes 18
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
153 "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
154 :group 'diary
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
155 :type 'integer
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
156 :version "21.1")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
157
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 ;;; End of user options.
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
160
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
161
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
162 (defconst solar-n-hemi-seasons
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
163 '("Vernal Equinox" "Summer Solstice" "Autumnal Equinox" "Winter Solstice")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
164 "List of season changes for the northern hemisphere.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
165
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
166 (defconst solar-s-hemi-seasons
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
167 '("Autumnal Equinox" "Winter Solstice" "Vernal Equinox" "Summer Solstice")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
168 "List of season changes for the southern hemisphere.")
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
169
92996
6dcaa1e995c4 Small formatting change.
Glenn Morris <rgm@gnu.org>
parents: 92958
diff changeset
170 (defvar solar-sidereal-time-greenwich-midnight nil
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
171 "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
172
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
173 (defvar solar-northern-spring-or-summer-season nil
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
174 "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
175 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
176
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
177
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
178 (defsubst calendar-latitude ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
179 "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
180 (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
181 calendar-latitude
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
182 (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
183 (/ (aref calendar-latitude 1) 60.0))))
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
184 (if (eq (aref calendar-latitude 2) 'north)
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
185 lat
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
186 (- lat)))))
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
187
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
188 (defsubst calendar-longitude ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
189 "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
190 (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
191 calendar-longitude
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
192 (let ((long (+ (aref calendar-longitude 0)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
193 (/ (aref calendar-longitude 1) 60.0))))
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
194 (if (eq (aref calendar-longitude 2) 'east)
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
195 long
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
196 (- long)))))
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
197
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
198 (defun solar-get-number (prompt)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
199 "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
200 Returns nil if nothing was entered."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
201 (let ((x (read-string prompt "")))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
202 (unless (string-equal x "")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
203 (string-to-number x))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
204
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 (defun solar-setup ()
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
206 "Prompt for `calendar-longitude', `calendar-latitude', `calendar-time-zone'."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 (beep)
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
208 (or calendar-longitude
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 (setq calendar-longitude
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 (solar-get-number
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 "Enter longitude (decimal fraction; + east, - west): ")))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
212 (or calendar-latitude
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 (setq calendar-latitude
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 (solar-get-number
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 "Enter latitude (decimal fraction; + north, - south): ")))
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
216 (or calendar-time-zone
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 (setq calendar-time-zone
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 (solar-get-number
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
219 "Enter difference from Coordinated Universal Time (in minutes): ")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
220 )))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
222 (defun solar-sin-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
223 "Return sin of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
224 (sin (degrees-to-radians (mod x 360.0))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
225
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
226 (defun solar-cosine-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
227 "Return cosine of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
228 (cos (degrees-to-radians (mod x 360.0))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
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-tangent-degrees (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
231 "Return tangent of X degrees."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
232 (tan (degrees-to-radians (mod x 360.0))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
233
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 (defun solar-xy-to-quadrant (x y)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
235 "Determine the quadrant of the point X, Y."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 (if (> x 0)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 (if (> y 0) 1 4)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
238 (if (> y 0) 2 3)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 (defun solar-degrees-to-quadrant (angle)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
241 "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
242 (1+ (floor (mod angle 360) 90)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 (defun solar-arctan (x quad)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 "Arctangent of X in quadrant QUAD."
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 (let ((deg (radians-to-degrees (atan x))))
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
247 (cond ((= quad 2) (+ deg 180))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
248 ((= quad 3) (+ deg 180))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
249 ((= quad 4) (+ deg 360))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
250 (t deg))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
252 (defun solar-atn2 (x y)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
253 "Arctangent of point X, Y."
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
254 (if (zerop x)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
255 (if (> y 0) 90 270)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
256 (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
257
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 (defun solar-arccos (x)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
259 "Arccosine of X."
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
260 (let ((y (sqrt (- 1 (* x x)))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
261 (solar-atn2 x y)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 (defun solar-arcsin (y)
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
264 "Arcsin of Y."
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
265 (let ((x (sqrt (- 1 (* y y)))))
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
266 (solar-atn2 x y)))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
268 (defsubst solar-degrees-to-hours (degrees)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
269 "Convert DEGREES to hours."
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
270 (/ degrees 15.0))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271
9714
c14b023ca6fe Allow vector form of latitude/longitude. Fix documentation.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 7778
diff changeset
272 (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
273 "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
274 (/ hour 24.0))
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 (defun solar-right-ascension (longitude obliquity)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
277 "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
278 Both arguments are in degrees."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 (solar-degrees-to-hours
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 (solar-arctan
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
281 (* (solar-cosine-degrees obliquity) (solar-tangent-degrees longitude))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 (solar-degrees-to-quadrant longitude))))
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-declination (longitude obliquity)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
285 "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
286 Both arguments are in degrees."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (solar-arcsin
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
288 (* (solar-sin-degrees obliquity)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 (solar-sin-degrees longitude))))
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
291 (defun solar-ecliptic-coordinates (time sunrise-flag)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
292 "Return solar longitude, ecliptic inclination, equation of time, nutation.
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
293 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
294 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
295 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
296 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
297 (let* ((l (+ 280.46645
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
298 (* 36000.76983 time)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
299 (* 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
300 (ml (+ 218.3165
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
301 (* 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
302 (m (+ 357.52910
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
303 (* 35999.05030 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
304 (* -0.0001559 time time)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
305 (* -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
306 (i (+ 23.43929111 (* -0.013004167 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
307 (* -0.00000016389 time time)
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
308 (* 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
309 (c (+ (* (+ 1.914600
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
310 (* -0.004817 time)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
311 (* -0.000014 time time))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
312 (solar-sin-degrees m))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
313 (* (+ 0.019993 (* -0.000101 time))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
314 (solar-sin-degrees (* 2 m)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
315 (* 0.000290
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
316 (solar-sin-degrees (* 3 m))))) ; center equation
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
317 (L (+ l c)) ; total longitude
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
318 ;; 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
319 (omega (+ 125.04
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
320 (* -1934.136 time)))
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
321 ;; 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
322 (nut (unless sunrise-flag
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
323 (+ (* -17.20 (solar-sin-degrees omega))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
324 (* -1.32 (solar-sin-degrees (* 2 l)))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
325 (* -0.23 (solar-sin-degrees (* 2 ml)))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
326 (* 0.21 (solar-sin-degrees (* 2 omega))))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
327 (ecc (unless sunrise-flag ; eccentricity of earth's orbit
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
328 (+ 0.016708617
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
329 (* -0.000042037 time)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
330 (* -0.0000001236 time time))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
331 (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
332 -0.00569
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
333 (* -0.00478
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
334 (solar-sin-degrees omega))))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
335 (y (unless sunrise-flag
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
336 (* (solar-tangent-degrees (/ i 2))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
337 (solar-tangent-degrees (/ i 2)))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
338 ;; Equation of time, in hours.
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
339 (time-eq (unless sunrise-flag
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
340 (/ (* 12 (+ (* y (solar-sin-degrees (* 2 l)))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
341 (* -2 ecc (solar-sin-degrees m))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
342 (* 4 ecc y (solar-sin-degrees m)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
343 (solar-cosine-degrees (* 2 l)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
344 (* -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
345 (* -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
346 3.1415926535))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
347 (list app i time-eq nut)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
348
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
349 (defun solar-ephemeris-correction (year)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
350 "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
351 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
352 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
353 (cond ((and (<= 1988 year) (< year 2020))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
354 (/ (+ 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
355 ((and (<= 1900 year) (< year 1988))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
356 (let* ((theta (/ (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
357 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
358 (list 7 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
359 (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
360 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
361 '(1 1 1900))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
362 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
363 (theta2 (* theta theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
364 (theta3 (* theta2 theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
365 (theta4 (* theta2 theta2))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
366 (theta5 (* theta3 theta2)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
367 (+ -0.00002
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
368 (* 0.000297 theta)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
369 (* 0.025184 theta2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
370 (* -0.181133 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
371 (* 0.553040 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
372 (* -0.861938 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
373 (* 0.677066 theta3 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
374 (* -0.212591 theta4 theta3))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
375 ((and (<= 1800 year) (< year 1900))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
376 (let* ((theta (/ (- (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
377 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
378 (list 7 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
379 (calendar-astro-from-absolute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
380 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
381 '(1 1 1900))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
382 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
383 (theta2 (* theta theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
384 (theta3 (* theta2 theta))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
385 (theta4 (* theta2 theta2))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
386 (theta5 (* theta3 theta2)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
387 (+ -0.000009
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
388 (* 0.003844 theta)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
389 (* 0.083563 theta2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
390 (* 0.865736 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
391 (* 4.867575 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
392 (* 15.845535 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
393 (* 31.332267 theta3 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
394 (* 38.291999 theta4 theta3)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
395 (* 28.316289 theta4 theta4)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
396 (* 11.636204 theta4 theta5)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
397 (* 2.043794 theta5 theta5))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
398 ((and (<= 1620 year) (< year 1800))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
399 (let ((x (/ (- year 1600) 10.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
400 (/ (+ (* 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
401 (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
402 (calendar-absolute-from-gregorian
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
403 (list 1 1 year)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
404 2382148))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
405 (second (- (/ (* tmp tmp) 41048480.0) 15)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
406 (/ 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
407
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
408 (defun solar-ephemeris-time (time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
409 "Ephemeris Time at moment TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
410 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
411 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
412 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
413 \(-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
414 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
415
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
416 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
417 (let* ((t0 (car time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
418 (ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
419 (t1 (+ t0 (/ (/ ut 24.0) 36525)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
420 (y (+ 2000 (* 100 t1)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
421 (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
422 (+ t1 (/ (/ dt 86400) 36525))))
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 (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
425 "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
426 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
427 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
428 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
429 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
430 -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
431 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
432 to `solar-ecliptic-coordinates'."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
433 (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
434 sunrise-flag)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
435 (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
436 (solar-declination (car ec) (cadr ec)))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
437
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
438 (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
439 "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
440 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
441 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
442 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
443 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
444 -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
445 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
446 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
447 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
448 (let* ((ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
449 (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
450 (st (+ solar-sidereal-time-greenwich-midnight
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
451 (* ut 1.00273790935)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
452 ;; Hour angle (in degrees).
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
453 (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
454 (de (cadr ec))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
455 (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
456 (solar-sin-degrees latitude))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
457 (* (solar-tangent-degrees de)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
458 (solar-cosine-degrees latitude)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
459 (solar-sin-degrees ah)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
460 (height (solar-arcsin
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
461 (+ (* (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
462 (* (solar-cosine-degrees latitude)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
463 (solar-cosine-degrees de)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
464 (solar-cosine-degrees ah))))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
465 (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
466 (list azimuth height)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
467
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
468 (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
469 "Sunrise/sunset at location.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
470 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
471 being TIME.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
472
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
473 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
474 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
475 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
476 \(-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
477 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
478
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
479 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
480 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
481 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
482
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
483 Uses binary search."
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
484 (let* ((ut (cadr time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
485 (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
486 (utmin (+ ut (* direction 12.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
487 (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
488 ;; utmin and utmax are in hours.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
489 (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
490 (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
491 (hut 0) ; sun height at utmoment
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
492 (t0 (car time))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
493 (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
494 latitude longitude t)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
495 (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
496 latitude longitude t))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
497 ;; -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
498 ;; rises or sets.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
499 (if (< hmin height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
500 (if (> hmax height)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
501 (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
502 ;;; (> (abs (- hut height)) epsilon)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
503 (>= (abs (- utmoment utmoment-old))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
504 (/ solar-error 60))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
505 (setq utmoment-old utmoment
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
506 utmoment (/ (+ utmin utmax) 2)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
507 hut (cadr (solar-horizontal-coordinates
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
508 (list t0 utmoment) latitude longitude t)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
509 (if (< hut height) (setq utmin utmoment))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
510 (if (> hut height) (setq utmax utmoment)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
511 (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
512 (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
513 (if possible utmoment)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
514
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
515 (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
516 "Sunrise, sunset and length of day.
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
517 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
518
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
519 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
520 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
521 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
522 \(-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
523 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
524
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
525 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
526 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
527 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
528
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
529 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
530 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
531 (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
532 (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
533 day-length)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
534 (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
535 (if (or (and (> latitude 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
536 solar-northern-spring-or-summer-season)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
537 (and (< latitude 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
538 (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
539 (setq day-length 24)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
540 (setq day-length 0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
541 (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
542 (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
543 (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
544 day-length)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
545
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
546 (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
547 "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
548 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
549 (let* ((time (round (* 60 time)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
550 (24-hours (/ time 60))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
551 (minutes (format "%02d" (% time 60)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
552 (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
553 (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
554 (24-hours (format "%02d" 24-hours)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
555 (mapconcat 'eval calendar-time-display-form "")))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
556
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
557 (defun solar-daylight (time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
558 "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
559 (format "%d:%02d"
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
560 (floor time)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
561 (floor (* 60 (- time (floor time))))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
562
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
563 (defun solar-julian-ut-centuries (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
564 "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
565 (/ (- (calendar-absolute-from-gregorian date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
566 (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
567 36525.0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
568
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
569 (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
570 "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
571 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
572 (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
573
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
574 (defun solar-time-equation (date ut)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
575 "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
576 (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
577
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
578 (defun solar-exact-local-noon (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
579 "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
580 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
581 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
582 (let* ((nd date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
583 (ut (- 12.0 (/ (calendar-longitude) 15)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
584 (te (solar-time-equation date ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
585 (setq ut (- ut te))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
586 (if (>= ut 24)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
587 (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
588 (nth 2 date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
589 ut (- ut 24)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
590 (if (< ut 0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
591 (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
592 (nth 2 date))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
593 ut (+ ut 24)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
594 (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
595 (calendar-absolute-from-gregorian nd)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
596 (list nd ut)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
597
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
598 (defun solar-sidereal-time (t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
599 "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
600 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
601 (let* ((mean-sid-time (+ 6.6973746
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
602 (* 2400.051337 t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
603 (* 0.0000258622 t0 t0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
604 (* -0.0000000017222 t0 t0 t0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
605 (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
606 (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
607 (nut (nth 3 nut-i)) ; nutation
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
608 (i (cadr nut-i))) ; inclination
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
609 (mod (+ (mod (+ mean-sid-time
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
610 (/ (/ (* 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
611 24.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
612 24.0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
613
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
614 (defun solar-sunrise-sunset (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
615 "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
616 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
617 ;; 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
618 (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
619 ;; 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
620 (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
621 ;; 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
622 ;; 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
623 (equator-rise-set
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
624 (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
625 (solar-sidereal-time t0))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
626 (solar-sunrise-and-sunset
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
627 (list t0 (cadr exact-local-noon))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
628 1.0
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
629 (calendar-longitude) 0)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
630 ;; 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
631 ;; 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
632 ;; 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
633 ;; 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
634 (rise-set
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
635 (progn
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
636 (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
637 (> (nth 2 equator-rise-set) 12))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
638 (solar-sunrise-and-sunset
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
639 (list t0 (cadr exact-local-noon))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
640 (calendar-latitude)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
641 (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
642 (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
643 (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
644 (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
645 (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
646 (length (nth 2 rise-set)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
647 (list
92958
5700422f1364 (solar-n-hemi-seasons, solar-s-hemi-seasons): Make constants.
Glenn Morris <rgm@gnu.org>
parents: 92928
diff changeset
648 (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
649 (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
650 (solar-daylight length))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
651
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
652 (defun solar-sunrise-sunset-string (date)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
653 "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
654 (let ((l (solar-sunrise-sunset date)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
655 (format
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
656 "%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
657 (if (car l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
658 (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
659 "No sunrise")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
660 (if (cadr l)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
661 (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
662 "no sunset")
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
663 (eval calendar-location-name)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
664 (nth 2 l))))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
665
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
666 (defconst solar-data-list
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
667 '((403406 4.721964 1.621043)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
668 (195207 5.937458 62830.348067)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
669 (119433 1.115589 62830.821524)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
670 (112392 5.781616 62829.634302)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
671 (3891 5.5474 125660.5691)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
672 (2819 1.5120 125660.984)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
673 (1721 4.1897 62832.4766)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
674 (0 1.163 0.813)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
675 (660 5.415 125659.31)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
676 (350 4.315 57533.85)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
677 (334 4.553 -33.931)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
678 (314 5.198 777137.715)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
679 (268 5.989 78604.191)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
680 (242 2.911 5.412)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
681 (234 1.423 39302.098)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
682 (158 0.061 -34.861)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
683 (132 2.317 115067.698)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
684 (129 3.193 15774.337)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
685 (114 2.828 5296.670)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
686 (99 0.52 58849.27)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
687 (93 4.65 5296.11)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
688 (86 4.35 -3980.70)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
689 (78 2.75 52237.69)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
690 (72 4.50 55076.47)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
691 (68 3.23 261.08)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
692 (64 1.22 15773.85)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
693 (46 0.14 188491.03)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
694 (38 3.44 -7756.55)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
695 (37 4.37 264.89)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
696 (32 1.14 117906.27)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
697 (29 2.84 55075.75)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
698 (28 5.96 -7961.39)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
699 (27 5.09 188489.81)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
700 (27 1.72 2132.19)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
701 (25 2.56 109771.03)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
702 (24 1.92 54868.56)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
703 (21 0.09 25443.93)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
704 (21 5.98 -55731.43)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
705 (20 4.03 60697.74)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
706 (18 4.47 2132.79)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
707 (17 0.79 109771.63)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
708 (14 4.24 -7752.82)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
709 (13 2.01 188491.91)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
710 (13 2.65 207.81)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
711 (13 4.98 29424.63)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
712 (12 0.93 -7.99)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
713 (10 2.21 46941.14)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
714 (10 3.59 -68.29)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
715 (10 1.50 21463.25)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
716 (10 2.55 157208.40))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
717 "Data used for calculation of solar longitude.")
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
719 (defun solar-longitude (d)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
720 "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
721 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
722 The values of `calendar-daylight-savings-starts',
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
723 `calendar-daylight-savings-starts-time', `calendar-daylight-savings-ends',
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
724 `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
725 `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
726 (let* ((a-d (calendar-absolute-from-astro d))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
727 ;; Get Universal Time.
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
728 (date (calendar-astro-from-absolute
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
729 (- a-d
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
730 (if (dst-in-effect a-d)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
731 (/ 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
732 (/ calendar-time-zone 60.0 24.0))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
733 ;; Get Ephemeris Time.
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
734 (date (+ date (solar-ephemeris-correction
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
735 (extract-calendar-year
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
736 (calendar-gregorian-from-absolute
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
737 (floor
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
738 (calendar-absolute-from-astro
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
739 date)))))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
740 (U (/ (- date 2451545) 3652500))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
741 (longitude
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
742 (+ 4.9353929
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
743 (* 62833.1961680 U)
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
744 (* 0.0000001
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
745 (apply '+
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
746 (mapcar (lambda (x)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
747 (* (car x)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
748 (sin (mod
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
749 (+ (cadr x)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
750 (* (nth 2 x) U))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
751 (* 2 pi)))))
62312
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
752 solar-data-list)))))
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
753 (aberration
cc808dc04a2d (solar-data-list): Move definition up.
Richard M. Stallman <rms@gnu.org>
parents: 62168
diff changeset
754 (* 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
755 (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
756 (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
757 (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
758 (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
759
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
760 (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
761 "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
762 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
763 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
764 \(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
765 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
766 `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
767 `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
768 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
769 (let* ((long)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
770 (start d)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
771 (start-long (solar-longitude d))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
772 (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
773 (end (+ d (* (/ l 360.0) 400)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
774 (end-long (solar-longitude end)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
775 (while ; bisection search for nearest minute
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
776 (< 0.00001 (- end start))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
777 ;; start <= d < end
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
778 ;; 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
779 ;; 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
780 ;; 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
781 (setq d (/ (+ start end) 2.0)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
782 long (solar-longitude d))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
783 (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
784 (and (zerop next) (< l long)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
785 (setq start d
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
786 start-long long)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
787 (setq end d
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
788 end-long long)))
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
789 (/ (+ start end) 2.0)))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
790
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 ;;;###autoload
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 (defun sunrise-sunset (&optional arg)
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
793 "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
794 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
795 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
796 longitude, latitude, time zone, and date, and always use standard time.
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 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
799 (interactive "p")
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
800 (or arg (setq arg 1))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
801 (if (and (< arg 16)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
802 (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
803 (solar-setup))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
804 (let* ((calendar-longitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
805 (if (< arg 16) calendar-longitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
806 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
807 "Enter longitude (decimal fraction; + east, - west): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
808 (calendar-latitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
809 (if (< arg 16) calendar-latitude
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
810 (solar-get-number
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
811 "Enter latitude (decimal fraction; + north, - south): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
812 (calendar-time-zone
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
813 (if (< arg 16) calendar-time-zone
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 difference from Coordinated Universal Time (in minutes): ")))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
816 (calendar-location-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
817 (if (< arg 16) calendar-location-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
818 (let ((float-output-format "%.1f"))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
819 (format "%s%s, %s%s"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
820 (if (numberp calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
821 (abs calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
822 (+ (aref calendar-latitude 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
823 (/ (aref calendar-latitude 1) 60.0)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
824 (if (numberp calendar-latitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
825 (if (> calendar-latitude 0) "N" "S")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
826 (if (eq (aref calendar-latitude 2) 'north) "N" "S"))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
827 (if (numberp calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
828 (abs calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
829 (+ (aref calendar-longitude 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
830 (/ (aref calendar-longitude 1) 60.0)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
831 (if (numberp calendar-longitude)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
832 (if (> calendar-longitude 0) "E" "W")
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
833 (if (eq (aref calendar-longitude 2) 'east)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
834 "E" "W"))))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
835 (calendar-standard-time-zone-name
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
836 (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
837 (cond ((zerop calendar-time-zone) "UTC")
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
838 ((< calendar-time-zone 0)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
839 (format "UTC%dmin" calendar-time-zone))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
840 (t (format "UTC+%dmin" calendar-time-zone)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
841 (calendar-daylight-savings-starts
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
842 (if (< arg 16) calendar-daylight-savings-starts))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
843 (calendar-daylight-savings-ends
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
844 (if (< arg 16) calendar-daylight-savings-ends))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
845 (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
846 (date-string (calendar-date-string date t))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
847 (time-string (solar-sunrise-sunset-string date))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
848 (msg (format "%s: %s" date-string time-string))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
849 (one-window (one-window-p t)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
850 (if (<= (length msg) (frame-width))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
851 (message "%s" msg)
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
852 (with-output-to-temp-buffer "*temp*"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
853 (princ (concat date-string "\n" time-string)))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
854 (message "%s"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
855 (substitute-command-keys
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
856 (if one-window
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
857 (if pop-up-windows
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
858 "Type \\[delete-other-windows] to remove temp window."
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
859 "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
860 "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
861 contents of temp window."))))))
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
862
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
863 ;;;###cal-autoload
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 (defun calendar-sunrise-sunset ()
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 "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
866 Accurate to a few seconds."
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 (interactive)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
868 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 (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
870 (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
871 (message "%s: %s"
d127e0963a2c (calendar-sunrise-sunset): Add date to message.
Richard M. Stallman <rms@gnu.org>
parents: 5010
diff changeset
872 (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
873 (solar-sunrise-sunset-string date))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
875 (defvar date)
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
876
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
877 ;; 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
878 ;;;###diary-autoload
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 (defun diary-sunrise-sunset ()
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 "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
881 Accurate to a few seconds."
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
882 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 (solar-setup))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
884 (solar-sunrise-sunset-string date))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
886 ;; 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
887 ;;;###diary-autoload
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
888 (defun diary-sabbath-candles (&optional mark)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 "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
890 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
891
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
892 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
893 use when highlighting the day in the calendar."
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
894 (or (and calendar-latitude calendar-longitude calendar-time-zone)
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 (solar-setup))
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
896 (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
897 (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
898 (light (if sunset
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
899 (cons (- (car sunset)
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
900 (/ diary-sabbath-candles-minutes 60.0))
c652288e6fb7 (solar-spring-or-summer-season): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 42706
diff changeset
901 (cdr sunset)))))
15095
66db908addc7 Double DST correction removed!
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14917
diff changeset
902 (if sunset
46617
b15eab0c85c1 (diary-sabbath-candles): Add optional MARK
Richard M. Stallman <rms@gnu.org>
parents: 44395
diff changeset
903 (cons mark
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
904 (format "%s Sabbath candle lighting"
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
905 (apply 'solar-time-string light)))))))
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
907 ;; From Meeus, 1991, page 167.
52113
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
908 (defconst solar-seasons-data
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
909 '((485 324.96 1934.136)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
910 (203 337.23 32964.467)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
911 (199 342.08 20.186)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
912 (182 27.85 445267.112)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
913 (156 73.14 45036.886)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
914 (136 171.52 22518.443)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
915 (77 222.54 65928.934)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
916 (74 296.72 3034.906)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
917 (70 243.58 9037.513)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
918 (58 119.81 33718.147)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
919 (52 297.17 150.678)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
920 (50 21.02 2281.226)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
921 (45 247.54 29929.562)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
922 (44 325.15 31555.956)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
923 (29 60.93 4443.417)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
924 (18 155.12 67555.328)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
925 (17 288.79 4562.452)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
926 (16 198.04 62894.029)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
927 (14 199.76 31436.921)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
928 (12 95.39 14577.848)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
929 (12 287.11 31931.756)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
930 (12 320.81 34777.259)
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
931 (9 227.73 1222.114)
92665
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
932 (8 15.45 16859.074))
b01c207d45b2 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92657
diff changeset
933 "Data for solar equinox/solstice calculations.")
52113
e94e668195a2 (displayed-month, displayed-year): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents: 49598
diff changeset
934
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
935 (defun solar-equinoxes/solstices (k year)
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
936 "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
937 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
938 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
939 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
940 (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
941 (T (/ (- JDE0 2451545.0) 36525))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
942 (W (- (* 35999.373 T) 2.47))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
943 (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
944 (* 0.0007 (solar-cosine-degrees (* 2 W)))))
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
945 (S (apply '+ (mapcar (lambda(x)
92822
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
946 (* (car x) (solar-cosine-degrees
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
947 (+ (* (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
948 solar-seasons-data)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
949 (JDE (+ JDE0 (/ (* 0.00001 S) Delta-lambda)))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
950 ;; Ephemeris time correction.
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
951 (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
952 (JD (- JDE (/ correction 86400)))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
953 (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
954 (time (- (- JD 0.5) (floor (- JD 0.5)))))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
955 (list (car date) (+ (cadr date) time
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
956 (/ (/ calendar-time-zone 60.0) 24.0))
3e5b1792e433 (solar-moment, solar-exact-local-noon)
Glenn Morris <rgm@gnu.org>
parents: 92665
diff changeset
957 (nth 2 date))))
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
958
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
959 ;; From Meeus, 1991, page 166.
13874
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
960 (defun solar-mean-equinoxes/solstices (k year)
49598
0d8b17d428b5 Trailing whitepace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48674
diff changeset
961 "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
962 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
963 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
964 (let ((y (/ year 1000.0))
eec68643bcfb Rewrote completely for better accuracy.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13742
diff changeset
965 (z (/ (- year 2000) 1000.0)))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
966 (if (< year 1000) ; actually between -1000 and 1000
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
967 (cond ((= k 0) (+ 1721139.29189
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
968 (* 365242.13740 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
969 (* 0.06134 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
970 (* 0.00111 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
971 (* -0.00071 y y y y)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
972 ((= k 1) (+ 1721233.25401
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
973 (* 365241.72562 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
974 (* -0.05323 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
975 (* 0.00907 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
976 (* 0.00025 y y y y)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
977 ((= k 2) (+ 1721325.70455
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
978 (* 365242.49558 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
979 (* -0.11677 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
980 (* -0.00297 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
981 (* 0.00074 y y y y)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
982 ((= k 3) (+ 1721414.39987
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
983 (* 365242.88257 y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
984 (* -0.00769 y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
985 (* -0.00933 y y y)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
986 (* -0.00006 y y y y))))
92657
96ad5987f35a Formatting changes only.
Glenn Morris <rgm@gnu.org>
parents: 92598
diff changeset
987 ; actually between 1000 and 3000
93093
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
988 (cond ((= k 0) (+ 2451623.80984
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
989 (* 365242.37404 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
990 (* 0.05169 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
991 (* -0.00411 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
992 (* -0.00057 z z z z)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
993 ((= k 1) (+ 2451716.56767
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
994 (* 365241.62603 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
995 (* 0.00325 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
996 (* 0.00888 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
997 (* -0.00030 z z z z)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
998 ((= k 2) (+ 2451810.21715
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
999 (* 365242.01767 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1000 (* -0.11575 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1001 (* 0.00337 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1002 (* 0.00078 z z z z)))
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1003 ((= k 3) (+ 2451900.05952
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1004 (* 365242.74049 z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1005 (* -0.06223 z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1006 (* -0.00823 z z z)
fb92abde7664 (calendar-location-name, calendar-latitude)
Glenn Morris <rgm@gnu.org>
parents: 92996
diff changeset
1007 (* 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
1008
92928
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1009 (defvar displayed-month) ; from generate-calendar
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1010 (defvar displayed-year)
506b148b25a4 Reorder so that functions are defined before use.
Glenn Morris <rgm@gnu.org>
parents: 92841
diff changeset
1011
92841
bde51dafc021 Add calendar-specific autoload cookies.
Glenn Morris <rgm@gnu.org>
parents: 92822
diff changeset
1012 ;;;###holiday-autoload
3866
c97c63c1a920 * solar.el (calendar-holiday-solar-equinoxes-solstices): Renamed
Jim Blandy <jimb@redhat.com>
parents: 3779
diff changeset
1013 (defun solar-equinoxes-solstices ()
92553
4fcd0c94d0b7 Remove leading `*' from defcustom doc-strings.
Glenn Morris <rgm@gnu.org>
parents: 79703
diff changeset
1014 "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
1015 Requires floating point."
93490
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1016 (let* ((m displayed-month)
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1017 (y displayed-year)
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1018 (calendar-standard-time-zone-name
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1019 (if calendar-time-zone calendar-standard-time-zone-name "UTC"))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1020 (calendar-daylight-savings-starts
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1021 (if calendar-time-zone calendar-daylight-savings-starts))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1022 (calendar-daylight-savings-ends
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1023 (if calendar-time-zone calendar-daylight-savings-ends))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1024 (calendar-time-zone (if calendar-time-zone calendar-time-zone 0))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1025 (k (progn
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1026 (increment-calendar-month m y (cond ((= 1 (% m 3)) -1)
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1027 ((= 2 (% m 3)) 1)
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1028 (t 0)))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1029 (1- (/ m 3))))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1030 (d0 (solar-equinoxes/solstices k y))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1031 (d1 (list (car d0) (floor (cadr d0)) (nth 2 d0)))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1032 (h0 (* 24 (- (cadr d0) (floor (cadr d0)))))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1033 (adj (dst-adjust-time d1 h0))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1034 (d (list (caar adj)
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1035 (+ (car (cdar adj))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1036 (/ (cadr adj) 24.0))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1037 (cadr (cdar adj))))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1038 ;; The following is nearly as accurate, but not quite:
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1039 ;; (d0 (solar-date-next-longitude
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1040 ;; (calendar-astro-from-absolute
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1041 ;; (calendar-absolute-from-gregorian
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1042 ;; (list (+ 3 (* k 3)) 15 y)))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1043 ;; 90))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1044 ;; (abs-day (calendar-absolute-from-astro d)))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1045 (abs-day (calendar-absolute-from-gregorian d)))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1046 (list
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1047 (list (calendar-gregorian-from-absolute (floor abs-day))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1048 (format "%s %s"
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1049 (nth k (if (and calendar-latitude
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1050 (< (calendar-latitude) 0))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1051 solar-s-hemi-seasons
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1052 solar-n-hemi-seasons))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1053 (solar-time-string
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1054 (* 24 (- abs-day (floor abs-day)))
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1055 (if (dst-in-effect abs-day)
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1056 calendar-daylight-time-zone-name
2fd8322cee67 (Commentary): Point to calendar.el.
Glenn Morris <rgm@gnu.org>
parents: 93230
diff changeset
1057 calendar-standard-time-zone-name)))))))
13045
2779e3cf6cfa Added code to support Chinese calendar. Minor fixes as well.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 12908
diff changeset
1058
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 (provide 'solar)
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061
92598
391954131548 Unquote lambda functions.
Glenn Morris <rgm@gnu.org>
parents: 92553
diff changeset
1062 ;; arch-tag: bc0ff693-df58-4666-bde4-2a7837ccb8fe
956
c530dbc9a92a Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 ;;; solar.el ends here