calc_sun 0.1.1 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+
2
+ require 'mkmf'
3
+ extension_name = 'side_time/side_time'
4
+ dir_config(extension_name)
5
+ create_makefile(extension_name)
@@ -0,0 +1,117 @@
1
+ #include <ruby.h>
2
+ #include <math.h>
3
+ #include <time.h>
4
+ /* if PI's not defined, define it */
5
+ #ifndef PI
6
+ #define PI 3.14159265358979323846
7
+ #endif
8
+ #ifndef DBL2NUM
9
+ # define DBL2NUM(dbl) rb_float_new(dbl)
10
+ #endif
11
+ # define R2D 57.295779513082320876798154814105
12
+ # define D2R 0.017453292519943295769236907684886
13
+ # define M2PI M_PI * 2.0
14
+ # define INV24 1.0 / 24.0
15
+ # define INV360 1.0 / 360.0
16
+ # define DJ00 2451545.0L
17
+ # define RND12 1000000000000.0
18
+
19
+ /*
20
+ * call-seq:
21
+ * initialize()
22
+ *
23
+ * Create CalcSun class Ruby object.
24
+ *
25
+ */
26
+ static VALUE t_init(VALUE self){
27
+ return self;
28
+ }
29
+ /*
30
+ * call-seq:
31
+ * date('yyyy-mm-dd')
32
+ *
33
+ * convert input string to Date object.
34
+ *
35
+ */
36
+ static VALUE func_set_datetime(VALUE self, VALUE vdate){
37
+ VALUE cDate = rb_const_get(rb_cObject, rb_intern("DateTime"));
38
+ VALUE day = rb_funcall(cDate, rb_intern("parse"), 1, vdate);
39
+ return day;
40
+ }
41
+ /*
42
+ * call-seq:
43
+ * jd(date)
44
+ *
45
+ * convert Date or DateTime object to JD number.
46
+ *
47
+ */
48
+ static VALUE func_get_jd(VALUE self, VALUE vdate){
49
+ double jd = NUM2DBL(rb_funcall(vdate, rb_intern("jd"), 0));
50
+ return DBL2NUM(jd);
51
+ }
52
+ /*
53
+ * call-seq:
54
+ * ajd(date)
55
+ *
56
+ * convert Date or DateTime object to AJD number.
57
+ *
58
+ */
59
+ static VALUE func_get_ajd(VALUE self, VALUE vdate){
60
+ double ajd = NUM2DBL(rb_funcall(vdate, rb_intern("ajd"), 0));
61
+ return DBL2NUM(ajd);
62
+ }
63
+ /*
64
+ * call-seq:
65
+ * gmst(date)
66
+ *
67
+ * calculate Greenwhich Mean Sidereal Time.
68
+ *
69
+ */
70
+ static VALUE func_mean_sidetime(VALUE self, VALUE vdate){
71
+ double ajd = NUM2DBL(func_get_ajd(self, vdate));
72
+ long double sidereal;
73
+ long double t;
74
+ t = (ajd - 2451545.0) / 36525.0;
75
+ /* calc mean angle */
76
+ sidereal =
77
+ 280.46061837 +
78
+ (360.98564736629 * (ajd - 2451545.0)) +
79
+ (0.000387933 * t * t) -
80
+ (t * t * t / 38710000.0);
81
+ sidereal = fmod(sidereal, 360.0);
82
+ /* change to hours */
83
+ sidereal *= 24.0 / 360.0;
84
+ return DBL2NUM(roundf(sidereal * RND12) / RND12);
85
+ }
86
+ /*
87
+ * call-seq:
88
+ * lmst(date)
89
+ *
90
+ * calculate Local Mean Sidereal Time.
91
+ *
92
+ */
93
+ static VALUE func_local_sidetime(VALUE self, VALUE vdate, VALUE vlon){
94
+ double sidereal;
95
+ double ls;
96
+ double lon = NUM2DBL(vlon);
97
+ sidereal = NUM2DBL(func_mean_sidetime(self, vdate));
98
+ sidereal *= 15.0;
99
+ ls = sidereal + lon;
100
+ ls *= 24.0 / 360.0;
101
+ return DBL2NUM(roundf(ls * RND12) / RND12);
102
+ }
103
+
104
+
105
+ void Init_side_time(void){
106
+ VALUE cSideTime = rb_define_class("SideTime", rb_cObject);
107
+ rb_require("date");
108
+ rb_define_method(cSideTime, "initialize", t_init, 0);
109
+ rb_define_attr(cSideTime, "date", 1, 1);
110
+ rb_define_method(cSideTime, "ajd", func_get_ajd, 1);
111
+ rb_define_method(cSideTime, "s_datetime", func_set_datetime, 1);
112
+ rb_define_method(cSideTime, "jd", func_get_jd, 1);
113
+ //rb_define_method(cSideTime, "jd2000_dif", func_jd_from_2000, 1);
114
+ //rb_define_method(cSideTime, "jd2000_dif_lon", func_days_from_2000, 2);
115
+ rb_define_method(cSideTime, "lmst", func_local_sidetime, 2);
116
+ rb_define_method(cSideTime, "gmst", func_mean_sidetime, 1);
117
+ }
data/lib/calc_sun.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
+
2
3
  require 'calc_sun/version'
3
4
  require 'calc_sun/calc_sun'
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+
2
3
  # class file CalcSun
3
4
  class CalcSun
4
- # version 0.1.0
5
- VERSION = '0.1.1'
5
+ # version 1.2.5
6
+ VERSION = '1.2.6'
6
7
  end
Binary file
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # class file SideTime
4
+ class SideTime
5
+ # version 0.1.0
6
+ VERSION = '0.1.0'
7
+ end
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'side_time/version'
4
+ require 'side_time/side_time'
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: calc_sun
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
- - kb9agt
7
+ - Douglas Allen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
@@ -30,101 +30,76 @@ cert_chain:
30
30
  J4L8DCnzZFU8ARwINSdPvhk8WzXpVgErPQezTziVg7gAtBjqdJO5qVlAiOp+z7m2
31
31
  gT57pae1qMGtqvMp
32
32
  -----END CERTIFICATE-----
33
- date: 2016-12-30 00:00:00.000000000 Z
34
- dependencies:
35
- - !ruby/object:Gem::Dependency
36
- name: rake-compiler
37
- requirement: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: 0.9.3
42
- type: :development
43
- prerelease: false
44
- version_requirements: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - "~>"
47
- - !ruby/object:Gem::Version
48
- version: 0.9.3
49
- - !ruby/object:Gem::Dependency
50
- name: rdoc
51
- requirement: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - "~>"
54
- - !ruby/object:Gem::Version
55
- version: '4.0'
56
- type: :development
57
- prerelease: false
58
- version_requirements: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "~>"
61
- - !ruby/object:Gem::Version
62
- version: '4.0'
63
- - !ruby/object:Gem::Dependency
64
- name: hoe
65
- requirement: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '3.15'
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '3.15'
33
+ date: 2017-04-06 00:00:00.000000000 Z
34
+ dependencies: []
77
35
  description: |-
78
- Calculate Sunrise and Sunset. Now uses native C extension.
79
- An example is supplied to show gem usage.
36
+ supply the date yyyy-mm-dd, latitude decimal, and
37
+ longitude decimal in the calls to each method
38
+ rise(date, lat, lon),
39
+ noon(date, lat, lon), and
40
+ set(date, lat, lon)
80
41
  email:
81
42
  - kb9agt@gmail.com
82
43
  executables: []
83
44
  extensions:
84
45
  - ext/calc_sun/extconf.rb
85
- extra_rdoc_files:
86
- - History.rdoc
87
- - LICENSE.txt
88
- - Manifest.txt
89
- - README.rdoc
46
+ extra_rdoc_files: []
90
47
  files:
48
+ - .autotest
49
+ - .gitignore
50
+ - .source_index
51
+ - .travis.yml
52
+ - CODE_OF_CONDUCT.md
91
53
  - Gemfile
54
+ - Guardfile
92
55
  - History.rdoc
93
56
  - LICENSE.txt
94
57
  - Manifest.txt
95
58
  - README.rdoc
96
59
  - Rakefile
97
60
  - calc_sun.gemspec
61
+ - dev.md
62
+ - example/Almanac.html
63
+ - example/Makefile
64
+ - example/adt_helper.rb
65
+ - example/askgeo_query.rb
66
+ - example/eq_center.md
67
+ - example/sunriset.c
68
+ - example/sunriset.exe
98
69
  - example/sunriset.rb
70
+ - example/test_my_times.rb
99
71
  - ext/calc_sun/calc_sun.c
100
72
  - ext/calc_sun/extconf.rb
73
+ - ext/side_time/extconf.rb
74
+ - ext/side_time/side_time.c
101
75
  - lib/calc_sun.rb
76
+ - lib/calc_sun/calc_sun.so
102
77
  - lib/calc_sun/version.rb
103
- - test/calc_sun_test.rb
104
- homepage: https://rubygems.org/gems/calc_sun
78
+ - lib/side_time/side_time.so
79
+ - lib/side_time/version.rb
80
+ - lib/sidereal_time.rb
81
+ homepage: https://github.com/DouglasAllen/calc_sun
105
82
  licenses:
106
83
  - MIT
107
84
  metadata: {}
108
85
  post_install_message:
109
- rdoc_options:
110
- - "--main"
111
- - README.rdoc
86
+ rdoc_options: []
112
87
  require_paths:
113
88
  - lib
114
89
  required_ruby_version: !ruby/object:Gem::Requirement
115
90
  requirements:
116
- - - ">="
91
+ - - '>='
117
92
  - !ruby/object:Gem::Version
118
93
  version: '0'
119
94
  required_rubygems_version: !ruby/object:Gem::Requirement
120
95
  requirements:
121
- - - ">="
96
+ - - '>='
122
97
  - !ruby/object:Gem::Version
123
98
  version: '0'
124
99
  requirements: []
125
100
  rubyforge_project:
126
- rubygems_version: 2.6.8
101
+ rubygems_version: 2.6.10
127
102
  signing_key:
128
103
  specification_version: 4
129
- summary: Calculate Sunrise and Sunset
104
+ summary: Calculates Sun Times ea. rise, noon, set
130
105
  test_files: []
metadata.gz.sig CHANGED
Binary file
@@ -1,230 +0,0 @@
1
-
2
- gem 'minitest'
3
- require 'minitest/autorun'
4
- require 'test/unit'
5
- lib = File.expand_path('../../lib', __FILE__)
6
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
7
- require 'calc_sun'
8
- #
9
- class CalcSunTest < Minitest::Test
10
- def test_that_it_has_a_version_number
11
- refute_nil ::CalcSun::VERSION
12
- end
13
-
14
- def test_it_does_something_useful
15
- assert false
16
- end
17
- end
18
- require 'date'
19
- #
20
- # class TestCalcSun < MiniTest::Test
21
- class TestCalcSun100 < Test::Unit::TestCase
22
- def setup
23
- @t = CalcSun.new
24
- @t_ajd = 0.0
25
- @t_lat = 0.0
26
- @t_lon = 0.0
27
- end
28
-
29
- def test_mean_anomaly
30
- assert_equal(
31
- 6.240059966692,
32
- @t.mean_anomaly(@t_ajd).round(12)
33
- )
34
- end
35
-
36
- def test_eccentricity
37
- assert_equal(
38
- 0.016709,
39
- @t.eccentricity(@t_ajd)
40
- )
41
- end
42
-
43
- def test_equation_of_center
44
- assert_equal(
45
- -0.001471380867,
46
- @t.equation_of_center(@t_ajd).round(12)
47
- )
48
- end
49
-
50
- def test_true_anomaly
51
- assert_equal(
52
- 6.238588585825,
53
- @t.true_anomaly(@t_ajd).round(12)
54
- )
55
- end
56
-
57
- def test_mean_longitude
58
- assert_equal(
59
- 4.895063110817,
60
- @t.mean_longitude(@t_ajd).round(12)
61
- )
62
- end
63
-
64
- def test_eccentric_anomaly
65
- assert_equal(
66
- 4.878582250862,
67
- @t.eccentric_anomaly(@t_ajd).round(12)
68
- )
69
- end
70
-
71
- def test_obliquity_of_ecliptic
72
- assert_equal(
73
- 0.409092802283,
74
- @t.obliquity_of_ecliptic(@t_ajd).round(12)
75
- )
76
- end
77
-
78
- def test_xv
79
- assert_equal(
80
- 0.148720277673,
81
- @t.xv(@t_ajd).round(12)
82
- )
83
- end
84
-
85
- def test_yv
86
- assert_equal(
87
- -0.986083974099,
88
- @t.yv(@t_ajd).round(12)
89
- )
90
- end
91
-
92
- def test_longitude_of_perihelion
93
- assert_equal(
94
- 4.93824156691,
95
- @t.longitude_of_perihelion(@t_ajd).round(12)
96
- )
97
- end
98
-
99
- def test_true_longitude
100
- assert_equal(
101
- 4.893644845555,
102
- @t.true_longitude(@t_ajd).round(12)
103
- )
104
- end
105
-
106
- def test_rv
107
- assert_equal(
108
- 0.997235842199,
109
- @t.rv(@t_ajd).round(12)
110
- )
111
- end
112
- end
113
-
114
- #
115
- class TestCalcSun200 < Test::Unit::TestCase
116
- def setup
117
- @t = CalcSun.new
118
- @t_ajd = 0.0
119
- @t_lat = 0.0
120
- @t_lon = 0.0
121
- end
122
-
123
- def test_ecliptic_x
124
- assert_equal(
125
- 0.17976672602,
126
- @t.ecliptic_x(@t_ajd).round(12)
127
- )
128
- end
129
-
130
- def test_ecliptic_y
131
- assert_equal(
132
- -0.980899204395,
133
- @t.ecliptic_y(@t_ajd).round(12)
134
- )
135
- end
136
-
137
- def test_right_ascension
138
- assert_equal(
139
- 18.753078192426,
140
- @t.right_ascension(@t_ajd).round(12)
141
- )
142
- end
143
-
144
- def test_declination
145
- assert_equal(
146
- -0.372949956542,
147
- @t.declination(@t_ajd).round(12)
148
- )
149
- end
150
-
151
- def test_sidereal_time
152
- assert_equal(
153
- 6.697967333333,
154
- @t.sidereal_time(@t_ajd).round(12)
155
- )
156
- end
157
-
158
- def test_local_sidereal_time
159
- assert_equal(
160
- 18.697967333333,
161
- @t.local_sidereal_time(@t_ajd, @t_lon).round(12)
162
- )
163
- end
164
-
165
- def test_dlt
166
- assert_equal(
167
- 12.120732161881,
168
- @t.dlt(@t_ajd, @t_lat).round(12)
169
- )
170
- end
171
-
172
- def test_diurnal_arc
173
- assert_equal(
174
- 6.06036608094,
175
- @t.diurnal_arc(@t_ajd, @t_lat).round(12)
176
- )
177
- end
178
-
179
- def test_t_south
180
- assert_equal(
181
- 12.055110859092,
182
- @t.t_south(@t_ajd, @t_lon).round(12)
183
- )
184
- end
185
-
186
- def test_t_rise
187
- assert_equal(
188
- 5.994744778152,
189
- @t.t_rise(@t_ajd, @t_lon, @t_lat).round(12)
190
- )
191
- end
192
-
193
- def test_t_mid_day
194
- assert_equal(
195
- 12.055110859092,
196
- @t.t_mid_day(@t_ajd, @t_lon, @t_lat).round(12)
197
- )
198
- end
199
-
200
- def test_t_set
201
- assert_equal(
202
- 18.115476940033,
203
- @t.t_set(@t_ajd, @t_lon, @t_lat).round(12)
204
- )
205
- end
206
-
207
- def test_rise_time
208
- rise = @t.t_rise(@t_ajd, @t_lon, @t_lat).round(12)
209
- assert_equal(
210
- "Sun rises \t\t\t : 5:59 UTC",
211
- "Sun rises \t\t\t : #{rise.floor}:#{(rise % 1 * 60.0).floor} UTC"
212
- )
213
- end
214
-
215
- def test_midday_time
216
- midday = @t.t_mid_day(@t_ajd, @t_lon, @t_lat).round(12)
217
- assert_equal(
218
- "Sun mid day \t\t\t : 12:3 UTC",
219
- "Sun mid day \t\t\t : #{midday.floor}:#{((midday % 1.0) * 60).floor} UTC"
220
- )
221
- end
222
-
223
- def test_set_time
224
- set = @t.t_set(@t_ajd, @t_lon, @t_lat).round(12)
225
- assert_equal(
226
- "Sun sets \t\t\t : 18:6 UTC",
227
- "Sun sets \t\t\t : #{set.floor}:#{(set % 1 * 60.0).floor} UTC"
228
- )
229
- end
230
- end