equationoftime 4.0.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +8 -3
  3. data/Gemfile.lock +48 -0
  4. data/README.md +22 -19
  5. data/Rakefile +14 -7
  6. data/equationoftime.gemspec +9 -6
  7. data/ext/ceot/ceot.c +52 -0
  8. data/ext/ceot/eot.c +79 -0
  9. data/ext/ceot/eot.h +8 -0
  10. data/ext/ceot/extconf.rb +5 -0
  11. data/lib/eot.rb +2 -1
  12. data/lib/eot/angles.rb +44 -43
  13. data/lib/eot/init.rb +13 -6
  14. data/lib/eot/version.rb +1 -1
  15. data/wiki.md +6 -7
  16. metadata +26 -255
  17. data/.settings/org.eclipse.ltk.core.refactoring.prefs +0 -2
  18. data/Makefile +0 -238
  19. data/analemma_data.yml +0 -2925
  20. data/examples/Equation_of_Time.jpg +0 -0
  21. data/examples/analemma_data_generator.rb +0 -53
  22. data/examples/celes_parts/.RUBYARCHDIR.time +0 -0
  23. data/examples/celes_parts/.cproject +0 -56
  24. data/examples/celes_parts/.project +0 -78
  25. data/examples/celes_parts/a2af.c +0 -120
  26. data/examples/celes_parts/a2tf.c +0 -116
  27. data/examples/celes_parts/af2a.c +0 -107
  28. data/examples/celes_parts/anp.c +0 -82
  29. data/examples/celes_parts/anpm.c +0 -82
  30. data/examples/celes_parts/bi00.c +0 -116
  31. data/examples/celes_parts/bp00.c +0 -173
  32. data/examples/celes_parts/bp06.c +0 -136
  33. data/examples/celes_parts/bpn2xy.c +0 -100
  34. data/examples/celes_parts/c2i00a.c +0 -139
  35. data/examples/celes_parts/c2i00b.c +0 -139
  36. data/examples/celes_parts/c2i06a.c +0 -136
  37. data/examples/celes_parts/c2ibpn.c +0 -142
  38. data/examples/celes_parts/c2ixy.c +0 -131
  39. data/examples/celes_parts/c2ixys.c +0 -123
  40. data/examples/celes_parts/c2s.c +0 -96
  41. data/examples/celes_parts/c2t00a.c +0 -154
  42. data/examples/celes_parts/c2t00b.c +0 -150
  43. data/examples/celes_parts/c2t06a.c +0 -152
  44. data/examples/celes_parts/c2tcio.c +0 -122
  45. data/examples/celes_parts/c2teqx.c +0 -122
  46. data/examples/celes_parts/c2tpe.c +0 -167
  47. data/examples/celes_parts/c2txy.c +0 -159
  48. data/examples/celes_parts/cal2jd.c +0 -139
  49. data/examples/celes_parts/celes_core.c +0 -2522
  50. data/examples/celes_parts/cp.c +0 -80
  51. data/examples/celes_parts/cpv.c +0 -82
  52. data/examples/celes_parts/cr.c +0 -83
  53. data/examples/celes_parts/d2dtf.c +0 -206
  54. data/examples/celes_parts/d2tf.c +0 -160
  55. data/examples/celes_parts/dat.c +0 -289
  56. data/examples/celes_parts/depend +0 -25
  57. data/examples/celes_parts/dtdb.c +0 -1213
  58. data/examples/celes_parts/dtf2d.c +0 -196
  59. data/examples/celes_parts/ee00.c +0 -128
  60. data/examples/celes_parts/ee00a.c +0 -135
  61. data/examples/celes_parts/ee00b.c +0 -141
  62. data/examples/celes_parts/ee06a.c +0 -122
  63. data/examples/celes_parts/eect00.c +0 -282
  64. data/examples/celes_parts/eform.c +0 -147
  65. data/examples/celes_parts/eo06a.c +0 -131
  66. data/examples/celes_parts/eors.c +0 -108
  67. data/examples/celes_parts/epb.c +0 -96
  68. data/examples/celes_parts/epb2jd.c +0 -91
  69. data/examples/celes_parts/epj.c +0 -93
  70. data/examples/celes_parts/epj2jd.c +0 -91
  71. data/examples/celes_parts/epv00.c +0 -2589
  72. data/examples/celes_parts/eqeq94.c +0 -131
  73. data/examples/celes_parts/era00.c +0 -136
  74. data/examples/celes_parts/extconf.rb +0 -4
  75. data/examples/celes_parts/fad03.c +0 -103
  76. data/examples/celes_parts/fae03.c +0 -102
  77. data/examples/celes_parts/faf03.c +0 -106
  78. data/examples/celes_parts/faju03.c +0 -102
  79. data/examples/celes_parts/fal03.c +0 -103
  80. data/examples/celes_parts/falp03.c +0 -103
  81. data/examples/celes_parts/fama03.c +0 -102
  82. data/examples/celes_parts/fame03.c +0 -102
  83. data/examples/celes_parts/fane03.c +0 -99
  84. data/examples/celes_parts/faom03.c +0 -104
  85. data/examples/celes_parts/fapa03.c +0 -103
  86. data/examples/celes_parts/fasa03.c +0 -102
  87. data/examples/celes_parts/faur03.c +0 -99
  88. data/examples/celes_parts/fave03.c +0 -102
  89. data/examples/celes_parts/fk52h.c +0 -143
  90. data/examples/celes_parts/fk5hip.c +0 -126
  91. data/examples/celes_parts/fk5hz.c +0 -160
  92. data/examples/celes_parts/fw2m.c +0 -134
  93. data/examples/celes_parts/fw2xy.c +0 -120
  94. data/examples/celes_parts/gc2gd.c +0 -134
  95. data/examples/celes_parts/gc2gde.c +0 -200
  96. data/examples/celes_parts/gd2gc.c +0 -134
  97. data/examples/celes_parts/gd2gce.c +0 -138
  98. data/examples/celes_parts/gmst00.c +0 -145
  99. data/examples/celes_parts/gmst06.c +0 -136
  100. data/examples/celes_parts/gmst82.c +0 -151
  101. data/examples/celes_parts/gst00a.c +0 -138
  102. data/examples/celes_parts/gst00b.c +0 -146
  103. data/examples/celes_parts/gst06.c +0 -140
  104. data/examples/celes_parts/gst06a.c +0 -131
  105. data/examples/celes_parts/gst94.c +0 -131
  106. data/examples/celes_parts/h2fk5.c +0 -148
  107. data/examples/celes_parts/hfk5z.c +0 -175
  108. data/examples/celes_parts/ir.c +0 -83
  109. data/examples/celes_parts/jd2cal.c +0 -155
  110. data/examples/celes_parts/jdcalf.c +0 -161
  111. data/examples/celes_parts/num00a.c +0 -121
  112. data/examples/celes_parts/num00b.c +0 -121
  113. data/examples/celes_parts/num06a.c +0 -125
  114. data/examples/celes_parts/numat.c +0 -109
  115. data/examples/celes_parts/nut00a.c +0 -2047
  116. data/examples/celes_parts/nut00b.c +0 -372
  117. data/examples/celes_parts/nut06a.c +0 -153
  118. data/examples/celes_parts/nut80.c +0 -325
  119. data/examples/celes_parts/nutm80.c +0 -117
  120. data/examples/celes_parts/obl06.c +0 -118
  121. data/examples/celes_parts/obl80.c +0 -118
  122. data/examples/celes_parts/p06e.c +0 -321
  123. data/examples/celes_parts/p2pv.c +0 -83
  124. data/examples/celes_parts/p2s.c +0 -91
  125. data/examples/celes_parts/pap.c +0 -139
  126. data/examples/celes_parts/pas.c +0 -96
  127. data/examples/celes_parts/pb06.c +0 -144
  128. data/examples/celes_parts/pdp.c +0 -84
  129. data/examples/celes_parts/pfw06.c +0 -165
  130. data/examples/celes_parts/plan94.c +0 -514
  131. data/examples/celes_parts/pm.c +0 -83
  132. data/examples/celes_parts/pmat00.c +0 -118
  133. data/examples/celes_parts/pmat06.c +0 -122
  134. data/examples/celes_parts/pmat76.c +0 -141
  135. data/examples/celes_parts/pmp.c +0 -85
  136. data/examples/celes_parts/pn.c +0 -109
  137. data/examples/celes_parts/pn00.c +0 -177
  138. data/examples/celes_parts/pn00a.c +0 -162
  139. data/examples/celes_parts/pn00b.c +0 -162
  140. data/examples/celes_parts/pn06.c +0 -187
  141. data/examples/celes_parts/pn06a.c +0 -152
  142. data/examples/celes_parts/pnm00a.c +0 -121
  143. data/examples/celes_parts/pnm00b.c +0 -121
  144. data/examples/celes_parts/pnm06a.c +0 -124
  145. data/examples/celes_parts/pnm80.c +0 -126
  146. data/examples/celes_parts/pom00.c +0 -115
  147. data/examples/celes_parts/ppp.c +0 -85
  148. data/examples/celes_parts/ppsp.c +0 -94
  149. data/examples/celes_parts/pr00.c +0 -142
  150. data/examples/celes_parts/prec76.c +0 -148
  151. data/examples/celes_parts/pv2p.c +0 -81
  152. data/examples/celes_parts/pv2s.c +0 -144
  153. data/examples/celes_parts/pvdpv.c +0 -102
  154. data/examples/celes_parts/pvm.c +0 -86
  155. data/examples/celes_parts/pvmpv.c +0 -87
  156. data/examples/celes_parts/pvppv.c +0 -87
  157. data/examples/celes_parts/pvstar.c +0 -207
  158. data/examples/celes_parts/pvu.c +0 -93
  159. data/examples/celes_parts/pvup.c +0 -88
  160. data/examples/celes_parts/pvxpv.c +0 -107
  161. data/examples/celes_parts/pxp.c +0 -94
  162. data/examples/celes_parts/rm2v.c +0 -111
  163. data/examples/celes_parts/rv2m.c +0 -118
  164. data/examples/celes_parts/rx.c +0 -110
  165. data/examples/celes_parts/rxp.c +0 -99
  166. data/examples/celes_parts/rxpv.c +0 -86
  167. data/examples/celes_parts/rxr.c +0 -99
  168. data/examples/celes_parts/ry.c +0 -110
  169. data/examples/celes_parts/rz.c +0 -110
  170. data/examples/celes_parts/s00.c +0 -371
  171. data/examples/celes_parts/s00a.c +0 -143
  172. data/examples/celes_parts/s00b.c +0 -143
  173. data/examples/celes_parts/s06.c +0 -368
  174. data/examples/celes_parts/s06a.c +0 -145
  175. data/examples/celes_parts/s2c.c +0 -85
  176. data/examples/celes_parts/s2p.c +0 -88
  177. data/examples/celes_parts/s2pv.c +0 -103
  178. data/examples/celes_parts/s2xpv.c +0 -87
  179. data/examples/celes_parts/sepp.c +0 -105
  180. data/examples/celes_parts/seps.c +0 -93
  181. data/examples/celes_parts/sofa.h +0 -379
  182. data/examples/celes_parts/sofam.h +0 -155
  183. data/examples/celes_parts/sp00.c +0 -118
  184. data/examples/celes_parts/starpm.c +0 -205
  185. data/examples/celes_parts/starpv.c +0 -264
  186. data/examples/celes_parts/sxp.c +0 -84
  187. data/examples/celes_parts/sxpv.c +0 -85
  188. data/examples/celes_parts/taitt.c +0 -110
  189. data/examples/celes_parts/taiut1.c +0 -112
  190. data/examples/celes_parts/taiutc.c +0 -182
  191. data/examples/celes_parts/tcbtdb.c +0 -132
  192. data/examples/celes_parts/tcgtt.c +0 -109
  193. data/examples/celes_parts/tdbtcb.c +0 -137
  194. data/examples/celes_parts/tdbtt.c +0 -122
  195. data/examples/celes_parts/test_celes.rb +0 -48
  196. data/examples/celes_parts/tf2a.c +0 -107
  197. data/examples/celes_parts/tf2d.c +0 -107
  198. data/examples/celes_parts/tr.c +0 -93
  199. data/examples/celes_parts/trxp.c +0 -93
  200. data/examples/celes_parts/trxpv.c +0 -93
  201. data/examples/celes_parts/tttai.c +0 -110
  202. data/examples/celes_parts/tttcg.c +0 -112
  203. data/examples/celes_parts/tttdb.c +0 -121
  204. data/examples/celes_parts/ttut1.c +0 -110
  205. data/examples/celes_parts/ut1tai.c +0 -111
  206. data/examples/celes_parts/ut1tt.c +0 -110
  207. data/examples/celes_parts/ut1utc.c +0 -193
  208. data/examples/celes_parts/utctai.c +0 -163
  209. data/examples/celes_parts/utcut1.c +0 -151
  210. data/examples/celes_parts/xy06.c +0 -2758
  211. data/examples/celes_parts/xys00a.c +0 -133
  212. data/examples/celes_parts/xys00b.c +0 -133
  213. data/examples/celes_parts/xys06a.c +0 -133
  214. data/examples/celes_parts/zp.c +0 -77
  215. data/examples/celes_parts/zpv.c +0 -79
  216. data/examples/celes_parts/zr.c +0 -83
  217. data/examples/check_date_type.rb +0 -55
  218. data/examples/compare_geoc_long_ra.rb +0 -39
  219. data/examples/data_table_for_astro_dog.rb +0 -40
  220. data/examples/earth_rotation.rb +0 -38
  221. data/examples/eot.c +0 -15
  222. data/examples/eot.h +0 -2
  223. data/examples/eot_methods_list.rb +0 -43
  224. data/examples/eot_plot.r +0 -57
  225. data/examples/eot_suntimes.rb +0 -144
  226. data/examples/equation_of_time.py +0 -186
  227. data/examples/extconf.rb +0 -2
  228. data/examples/figure_1.jpg +0 -0
  229. data/examples/file_converter.rb +0 -31
  230. data/examples/from_readme.rb +0 -10
  231. data/examples/geo_locator.rb +0 -12
  232. data/examples/getjd.rb +0 -45
  233. data/examples/gmst_gast_non_sofa.rb +0 -404
  234. data/examples/input_suntimes.rb +0 -21
  235. data/examples/julian_day_formula.rb +0 -29
  236. data/examples/julian_day_formula.txt +0 -12
  237. data/examples/my_time_conversion.rb +0 -21
  238. data/examples/nutation_series.txt +0 -678
  239. data/examples/nutation_series.yaml +0 -14239
  240. data/examples/nutation_table5_3a.txt +0 -682
  241. data/examples/nutation_table5_3a.yaml +0 -9532
  242. data/examples/ptime.rb +0 -162
  243. data/examples/rbeot.c +0 -24
  244. data/examples/suntimes.rb +0 -28
  245. data/examples/suntimes_test.rb +0 -47
  246. data/examples/test_eot.rb +0 -17
  247. data/examples/test_poly_eval.rb +0 -27
  248. data/examples/time_scales.rb +0 -26
  249. data/examples/times_year.rb +0 -50
  250. data/examples/usage_example.rb +0 -23
  251. data/examples/use_angles.rb +0 -219
  252. data/rise_set_data.yml +0 -1461
  253. data/tests/minitest/aliased_angles_spec.rb +0 -241
  254. data/tests/minitest/aliased_displays_spec.rb +0 -108
  255. data/tests/minitest/aliased_utilities_spec.rb +0 -38
  256. data/tests/minitest/angles_spec.rb +0 -266
  257. data/tests/minitest/constants_spec.rb +0 -21
  258. data/tests/minitest/delta_epsilon_spec.rb +0 -32
  259. data/tests/minitest/displays_spec.rb +0 -113
  260. data/tests/minitest/geo_spec.rb +0 -40
  261. data/tests/minitest/init_spec.rb +0 -46
  262. data/tests/minitest/nutation_spec.rb +0 -39
  263. data/tests/minitest/times_spec.rb +0 -139
  264. data/tests/minitest/utilities_spec.rb +0 -37
  265. data/tests/spec_config.rb +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7ffd7f20110660ab1c68e7b8d811106c487808f1
4
- data.tar.gz: d5edf33341d270becd60e42550e1edd46d53c1fd
3
+ metadata.gz: 9bbe68b6f756ff39bd440ad62c0f6209c87399db
4
+ data.tar.gz: b5927f2e937a02fa15c48a09eb04d4abbe54c358
5
5
  SHA512:
6
- metadata.gz: 30aaae71fe66cbae8b59b2eda84ed0c8408f1f08d797cd362391249f44ce335bd00a7c9723ce91c3ca4276f1d5a760d2ca37ceda7b30a2705efc07e878a0a456
7
- data.tar.gz: cb9a772a410188fa3ed27e71e959b318e9bbaef529b8564792f35c4048c041f9e5c5a589e561bc9a651823febfcd3adfa6e4f95fda16a11e2718bab46fffd200
6
+ metadata.gz: b64380f519afa2d4d1caaabd7a7991dd222430475ca4f1c40fce4e8f76f2be889bec4d16d01dc3e06db1f454f92d32d1b4780fbd1f51b822b9217970ccdb00bb
7
+ data.tar.gz: f4c5c5b927e7a0dd1aa66d40746d339563ed8bca8462fcea8d183b628a22b8edce2a55709c4e02febc8e4ce142b90e81280449b4bfca800801e15a17657df284
data/.gitignore CHANGED
@@ -1,15 +1,16 @@
1
- *.gem
2
- *.rbc
1
+ .gem
2
+ .rbc
3
3
  .rspec
4
4
  .bundle
5
5
  .config
6
+ .settings
6
7
  .yardoc
7
8
  Gemfile.lock
9
+
8
10
  InstalledFiles
9
11
  _yardoc
10
12
  coverage
11
13
  doc
12
-
13
14
  lib/bundler/man
14
15
  pkg
15
16
  rdoc
@@ -17,3 +18,7 @@ spec/reports
17
18
  test/tmp
18
19
  test/version_tmp
19
20
  tmp
21
+ ext/ceot/*.o
22
+ ext/ceot/*.so
23
+ ext/ceot/Makefile
24
+ lib/*.so
data/Gemfile.lock ADDED
@@ -0,0 +1,48 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ equationoftime (4.1.1)
5
+ celes
6
+ multi_xml
7
+ rest-client
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ celes (0.0.1)
13
+ diff-lcs (1.2.5)
14
+ mime-types (2.3)
15
+ minitest (5.4.1)
16
+ multi_xml (0.5.5)
17
+ netrc (0.7.7)
18
+ rake (10.3.2)
19
+ rake-compiler (0.9.3)
20
+ rake
21
+ rest-client (1.7.2)
22
+ mime-types (>= 1.16, < 3.0)
23
+ netrc (~> 0.7)
24
+ rspec (3.0.0)
25
+ rspec-core (~> 3.0.0)
26
+ rspec-expectations (~> 3.0.0)
27
+ rspec-mocks (~> 3.0.0)
28
+ rspec-core (3.0.4)
29
+ rspec-support (~> 3.0.0)
30
+ rspec-expectations (3.0.4)
31
+ diff-lcs (>= 1.2.0, < 2.0)
32
+ rspec-support (~> 3.0.0)
33
+ rspec-mocks (3.0.4)
34
+ rspec-support (~> 3.0.0)
35
+ rspec-support (3.0.4)
36
+ yard (0.8.7.4)
37
+
38
+ PLATFORMS
39
+ ruby
40
+
41
+ DEPENDENCIES
42
+ bundler (~> 1.5)
43
+ equationoftime!
44
+ minitest
45
+ rake
46
+ rake-compiler
47
+ rspec
48
+ yard
data/README.md CHANGED
@@ -1,7 +1,11 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/equationoftime.png)](http://badge.fury.io/rb/equationoftime)
2
- ##[*RDocs*](http://rubydoc.info/gems/equationoftime/3.0.0/frames)
3
- ##[*Graphic Plot 1*](https://github.com/DouglasAllen/equationoftime-3.0.0/blob/master/examples/figure_1.jpg) created from [*equation_of_time.py*](https://bitbucket.org/cmcqueen1975/sundials/src/26a0f54a7c18fc3b54a3a4cff4f79192fcef1a91/equation_of_time.py?at=default)
4
- ##[*Graphic Plot 2*](https://github.com/DouglasAllen/equationoftime-3.0.0/blob/master/examples/Equation_of_Time.jpg) created from [*R script*](http://en.wikipedia.org/wiki/File:Zeitgleichung.png)
2
+
3
+ ##[*Graphic Plot 1*](https://github.com/DouglasAllen/equationoftime/blob/master/examples/figure_1.jpg)
4
+ created from [*equation_of_time.py*](https://bitbucket.org/cmcqueen1975/sundials/src/26a0f54a7c18fc3b54a3a4cff4f79192fcef1a91/equation_of_time.py?at=default)
5
+
6
+ [*Graphic Plot 1*](https://github.com/DouglasAllen/equationoftime/blob/master/examples/equation_of_time.py)
7
+
8
+ ##[*Graphic Plot 2*](https://github.com/DouglasAllen/equationoftime/blob/master/examples/Equation_of_Time.jpg) created from [*R script*](http://en.wikipedia.org/wiki/File:Zeitgleichung.png)
5
9
  ##[*Solar Time*](http://www.maa.mhn.de/Scholar/times.html#solar)
6
10
  ##[*Web Calculator*](http://www.nature1st.net/bogan/astro/time/jsjdetst.html)
7
11
  # equationoftime gem
@@ -12,23 +16,23 @@
12
16
 
13
17
  Fork it and Clone it:
14
18
 
15
- $ git clone git@github.com:DouglasAllen/equationoftime-3.0.0.git
19
+ $ git clone git@github.com:DouglasAllen/equationoftime.git
16
20
 
17
21
  Enter dir:
18
22
 
19
- $ cd equationoftime-3.0.0
23
+ $ cd equationoftime
20
24
 
21
25
  Execute:
22
26
 
23
- $ bundle
27
+ $ bundle install
24
28
 
25
- Run minitest tests:
29
+ Build extension:
26
30
 
27
- $ rake
31
+ $ rake compile:ceot
28
32
 
29
- Build gem:
33
+ Run minitest tests:
30
34
 
31
- $ rake build
35
+ $ rake
32
36
 
33
37
  Local install of gem build:
34
38
 
@@ -41,7 +45,7 @@ Add this line to your application's Gemfile:
41
45
 
42
46
  And then execute:
43
47
 
44
- $ bundle
48
+ $ bundle install
45
49
 
46
50
  Or install it yourself as:
47
51
 
@@ -52,24 +56,23 @@ Or install it yourself as:
52
56
  $ irb --simple-prompt
53
57
 
54
58
  require 'eot'
55
- eot = Eot.new; "note: nutation data loading is normal if you leave this off."
59
+ eot = Eot.new
56
60
  eot.string_eot()
57
61
 
58
- #[Wikis](https://github.com/DouglasAllen/equationoftime-3.0.0/blob/master/wiki.md)
59
-
60
-
61
- Notes:
62
-
63
- 1. for other time equations see:[*gist 2032003*](https://gist.github.com/2032003)
62
+ #[Wikis](https://github.com/DouglasAllen/equationoftime/blob/master/wiki.md)
64
63
 
65
64
 
66
65
  Suggestions:
67
66
 
68
67
  1. http://equationoftime.herokuapp.com/analemma Itererates through a years worth of dates and computes analemma data.
69
68
  2. A file is included in examples named analemma_data_generator.rb and may help you get started.
70
- 3. See the [*astro dog*](https://github.com/DouglasAllen/Sinatra-projects/tree/master/astro_dog) project here and the web post of it on [*Heroku*](http://equationoftime.herokuapp.com/) for more info about the Equation of Time.
69
+ 3. See the [*astro dog*](https://github.com/DouglasAllen/Sinatra-projects/tree/master/astro_dog) project or the web post [*Heroku*](http://equationoftime.herokuapp.com/) for more info about the Equation of Time.
71
70
  4. See the wikis for more usage examples.
72
71
 
72
+ Notes:
73
+
74
+ 1. for other time equations see:[*gist 2032003*](https://gist.github.com/2032003)
75
+
73
76
  Contributing:
74
77
 
75
78
  1. Fork it
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
-
2
+ =begin
3
3
  require 'thor'
4
4
  require 'bundler'
5
5
  require 'rbconfig'
@@ -35,7 +35,7 @@ module Bundler
35
35
  end
36
36
  end
37
37
  end
38
-
38
+ =end
39
39
  # require "bundler/install_tasks"
40
40
 
41
41
  require 'rspec/core/rake_task'
@@ -43,10 +43,17 @@ require 'rspec/core/rake_task'
43
43
 
44
44
  task :default => [ :test ]
45
45
 
46
- #RSpec::Core::RakeTask.new(:spec) do | t |
47
- # t.pattern = "./tests/spec/*_spec.rb"
48
- # t.rspec_opts = []
49
- #end
46
+ RSpec::Core::RakeTask.new(:spec) do | t |
47
+ t.pattern = "./tests/minitest/*_spec.rb"
48
+ t.rspec_opts = []
49
+ end
50
+
51
+ require 'rake/extensiontask'
52
+ spec = Gem::Specification.load('equationoftime.gemspec')
53
+ Rake::ExtensionTask.new('ceot', spec)
54
+ #Rake::ExtensionTask.new "ceot" do |ext|
55
+ #ext.lib_dir = "lib"
56
+ #end
50
57
 
51
58
  require 'rake/testtask'
52
59
 
@@ -114,4 +121,4 @@ Rake::RDocTask.new(:rdox) do |rd|
114
121
 
115
122
  rd.options << '--line-numbers'
116
123
 
117
- end
124
+ end
@@ -10,22 +10,25 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ["DouglasAllen"]
11
11
  spec.email = ["kb9agt@gmail.com"]
12
12
  spec.summary = %q{Equation of Time calculates time of solar transition.}
13
- spec.description = %q{Calculate Sunrise and Sunset, GMST, and GAST for just about any date and location.
14
- Lots of examples to play with included.}
15
- spec.homepage = "http://equationoftime.herokuapp.com"
16
- #spec.source = "https://github.com/DouglasAllen/equationoftime-3.0.0"
13
+ spec.description = %q{Calculate Sunrise and Sunset. Now uses native C wrappers.
14
+ Lots of examples to play with for learning.}
15
+ #spec.homepage = "http://equationoftime.herokuapp.com"
16
+ spec.homepage = "https://github.com/DouglasAllen/equationoftime"
17
17
  spec.license = "MIT"
18
18
 
19
19
 
20
20
  # Manifest
21
- #spec.files = Dir.glob("{examples, lib}/**/*") + %w(LICENSE README}
22
- spec.files = `git ls-files -z`.split("\x0")
21
+ spec.files = Dir.glob("ext/**/*.{c,h,rb, so}") + Dir.glob("**") +
22
+ Dir.glob("lib/**/*.rb") + Dir.glob(".*")
23
+ #spec.files = `git ls-files -z`.split($/)#split("\x0")
24
+ spec.extensions << "ext/ceot/extconf.rb"
23
25
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
26
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
27
  spec.require_paths = ["lib"]
26
28
  spec.platform = Gem::Platform::RUBY
27
29
  spec.add_development_dependency "bundler", "~> 1.5"
28
30
  spec.add_development_dependency "rake"
31
+ spec.add_development_dependency "rake-compiler"
29
32
  spec.add_development_dependency "minitest"
30
33
  spec.add_development_dependency "rspec"
31
34
  spec.add_development_dependency "yard"
data/ext/ceot/ceot.c ADDED
@@ -0,0 +1,52 @@
1
+ #include "ruby.h"
2
+ #include "eot.h"
3
+
4
+ #ifndef DBL2NUM
5
+ # define DBL2NUM(dbl) rb_float_new(dbl)
6
+ #endif
7
+
8
+ ID id_status;
9
+
10
+ VALUE func_ml(VALUE klass, VALUE vt) {
11
+ rb_ivar_set(klass, id_status, INT2FIX(0));
12
+ return DBL2NUM(mlSun(NUM2DBL(vt)));
13
+ }
14
+
15
+ VALUE func_eoe(VALUE klass, VALUE vt) {
16
+ rb_ivar_set(klass, id_status, INT2FIX(0));
17
+ return DBL2NUM(eoe(NUM2DBL(vt)));
18
+ }
19
+
20
+ VALUE func_eqc(VALUE klass, VALUE vma, VALUE vt) {
21
+ rb_ivar_set(klass, id_status, INT2FIX(0));
22
+ return DBL2NUM(eqc(NUM2DBL(vma), NUM2DBL(vt)));
23
+ }
24
+
25
+ VALUE func_tl(VALUE klass, VALUE vma, VALUE vt) {
26
+ rb_ivar_set(klass, id_status, INT2FIX(0));
27
+ return DBL2NUM(tlSun(NUM2DBL(vma), NUM2DBL(vt)));
28
+ }
29
+
30
+ VALUE func_al(VALUE klass, VALUE vma, VALUE vt, VALUE vo) {
31
+ rb_ivar_set(klass, id_status, INT2FIX(0));
32
+ return DBL2NUM(alSun(NUM2DBL(vma), NUM2DBL(vt), NUM2DBL(vo)));
33
+ }
34
+
35
+ VALUE func_cosZ(VALUE klass, VALUE vz) {
36
+ rb_ivar_set(klass, id_status, INT2FIX(0));
37
+ return DBL2NUM(cosZ(NUM2DBL(vz)));
38
+ }
39
+
40
+ VALUE cEot;
41
+ void
42
+ Init_ceot(void) {
43
+
44
+ VALUE cEot = rb_define_class("Eot", rb_cObject);
45
+ id_status = rb_intern("@status");
46
+ rb_define_method(cEot, "ml", func_ml, 1);
47
+ rb_define_method(cEot, "eoe", func_eoe, 1);
48
+ rb_define_method(cEot, "eqc", func_eqc, 2);
49
+ rb_define_method(cEot, "tl", func_tl, 2);
50
+ rb_define_method(cEot, "al", func_al, 3);
51
+ rb_define_method(cEot, "cosZ", func_cosZ, 1);
52
+ }
data/ext/ceot/eot.c ADDED
@@ -0,0 +1,79 @@
1
+ #include "eot.h"
2
+
3
+
4
+ double mlSun(double t)
5
+ {
6
+ double a;
7
+
8
+ /* Mean geocentric longitude of the Sun */
9
+ a = fmod( 280.4664567 +
10
+ t * ( 36000.76982779 +
11
+ t * ( 0.0003032028 +
12
+ t * ( 1.0/499310.0 +
13
+ t * ( 1.0/-152990.0 +
14
+ t * (1.0/-19880000.0 ) ) ) ) ), 360.0 ) * 0.017453292519943295769236907684886;
15
+
16
+ return a;
17
+ }
18
+
19
+ double eoe(double t)
20
+ {
21
+ double e;
22
+
23
+ /* Eccentricity of Earth orbit */
24
+ e = (0.016708617 +
25
+ t * (-0.000042037 +
26
+ t * -0.0000001235));
27
+
28
+ return e;
29
+ }
30
+
31
+ double eqc(double ma, double t)
32
+ {
33
+ double a, e, e2, e3, e4, e5;
34
+ e = eoe(t);
35
+ e2 = pow(e, 2);
36
+ e3 = pow(e, 3);
37
+ e4 = pow(e, 4);
38
+ e5 = pow(e, 5);
39
+
40
+ /* Equation of Center */
41
+ a = sin( 1.0 * ma ) * (e * 2.0 - e3 * 1.0/4.0 + e5 * 5.0/96.0) +
42
+ sin( 2.0 * ma ) * (e2 * 5.0/4.0 - 0.0 - e4 * 11.0/24.0) +
43
+ sin( 3.0 * ma ) * (e3 * 13.0/12.0 - 0.0 - e5 * 43.0/64.0) +
44
+ sin( 4.0 * ma ) * e4 * 103.0/96.0 +
45
+ sin( 5.0 * ma ) * e5 * 1097.0/960.0;
46
+
47
+ return a;
48
+ }
49
+
50
+ double tlSun(double ma, double t)
51
+ {
52
+ double a;
53
+
54
+ a = fmod( mlSun(t) + eqc(ma, t), 57.295779513082320876798154814105);
55
+
56
+ return a;
57
+ }
58
+
59
+ double alSun(double ma, double t, double o)
60
+ {
61
+ double a;
62
+
63
+ a = fmod(tlSun(ma, t) -
64
+ 0.00569 * 0.017453292519943295769236907684886 -
65
+ 0.00478 * 0.017453292519943295769236907684886 *
66
+ sin(o), 57.295779513082320876798154814105);
67
+
68
+ return a;
69
+ }
70
+
71
+ double cosZ(double zenith)
72
+ {
73
+
74
+ double a;
75
+
76
+ a = cos(zenith * 0.017453292519943295769236907684886);
77
+
78
+ return a;
79
+ }
data/ext/ceot/eot.h ADDED
@@ -0,0 +1,8 @@
1
+ #include "math.h"
2
+
3
+ double mlSun(double t);
4
+ double eoe(double t);
5
+ double eqc(double ma, double t);
6
+ double tlSun(double ma, double t);
7
+ double alSun(double ma, double t, double o);
8
+ double cosZ(double zenith);
@@ -0,0 +1,5 @@
1
+ require "mkmf"
2
+ #create_makefile('ceot')
3
+ extension_name = 'ceot'
4
+ dir_config(extension_name)
5
+ create_makefile(extension_name)
data/lib/eot.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # eot.rb
2
2
 
3
+ require 'ceot'
3
4
  require 'eot/version'
4
5
  require 'eot/constants'
5
6
  require 'eot/init'
@@ -8,4 +9,4 @@ require 'eot/angles'
8
9
  require 'eot/times'
9
10
  require 'eot/displays'
10
11
  require 'eot/nutation'
11
- require 'eot/geo_lat_lng_smt'
12
+ require 'eot/geo_lat_lng_smt'
data/lib/eot/angles.rb CHANGED
@@ -7,7 +7,8 @@ class Eot
7
7
  # From angles.rb:<br>
8
8
  # Apparent solar longitude = true longitude - aberation
9
9
  def al_Sun()
10
- Celes.anp(tl_Sun() - 0.00569 * D2R - 0.00478 * D2R * sin(omega()))
10
+ #Celes.anp(tl_Sun() - 0.00569 * D2R - 0.00478 * D2R * sin(omega()))
11
+ al(@ma, @ta, Celes.faom03(@ta))
11
12
  end
12
13
  alias_method :apparent_longitude, :al_Sun
13
14
  alias_method :alsun, :al_Sun
@@ -23,7 +24,7 @@ class Eot
23
24
  # From angles.rb:<br>
24
25
  # one time component to total equation of time
25
26
  def angle_delta_oblique()
26
- tl_Sun() - ra_Sun()
27
+ al(@ma, @ta, Celes.faom03(@ta)) - ra_Sun()
27
28
  end
28
29
  alias_method :delta_t_ecliptic, :angle_delta_oblique
29
30
  alias_method :delta_oblique, :angle_delta_oblique
@@ -31,7 +32,7 @@ class Eot
31
32
  # From angles.rb:<br>
32
33
  # one time component to total equation of time
33
34
  def angle_delta_orbit()
34
- @ma - ta_Sun()
35
+ @ma - Celes.anp(@ma + eqc( @ma, @ta ))
35
36
  end
36
37
  alias_method :delta_t_elliptic, :angle_delta_orbit
37
38
  alias_method :delta_orbit, :angle_delta_orbit
@@ -48,7 +49,7 @@ class Eot
48
49
  # total equation of time
49
50
  def angle_equation_of_time()
50
51
  #~ @ma = ma_Sun()
51
- angle_delta_oblique() + angle_delta_orbit()
52
+ @ma - Celes.anp(@ma + eqc( @ma, @ta )) + al(@ma, @ta, Celes.faom03(@ta)) - ra_Sun()
52
53
  end
53
54
  alias_method :eot, :angle_equation_of_time
54
55
 
@@ -56,20 +57,21 @@ class Eot
56
57
  # equation of centre
57
58
  # added to mean anomaly to get true anomaly.
58
59
  def center()
59
- sine_1M = sin( 1.0 * @ma )
60
- sine_2M = sin( 2.0 * @ma )
61
- sine_3M = sin( 3.0 * @ma )
62
- sine_4M = sin( 4.0 * @ma )
63
- sine_5M = sin( 5.0 * @ma )
64
- e = eccentricity_Earth()
65
- sine_1M * ( 2.0 * e - e**3/4.0 + 5/96.0 * e**5 ) +
66
- sine_2M * ( 5/4.0 * e**2 - 11/24.0 * e**4 ) +
67
- sine_3M * ( 13/12.0 * e**3 - 43/64.0 * e**5 ) +
68
- sine_4M * 103/96.0 * e**4 +
69
- sine_5M * 1097/960.0 * e**5
70
- # sine_1M *( 1.914602 - ta[ 0 ] * ( 0.004817 + ta[ 0 ] * 0.000014 )) + +
71
- # sine_2M *( 0.019993 - ta[ 0 ] * 0.000101 ) + +
60
+ # sine_1M = sin( 1.0 * @ma )
61
+ # sine_2M = sin( 2.0 * @ma )
62
+ # sine_3M = sin( 3.0 * @ma )
63
+ # sine_4M = sin( 4.0 * @ma )
64
+ # sine_5M = sin( 5.0 * @ma )
65
+ # e = eccentricity_Earth()
66
+ # sine_1M * ( 2.0 * e - e**3 * 1.0/4.0 + 5/96.0 * e**5 ) +
67
+ # sine_2M * ( 5.0/4.0 * e**2 - 11/24.0 * e**4 ) +
68
+ # sine_3M * ( 13.0/12.0 * e**3 - 43/64.0 * e**5 ) +
69
+ # sine_4M * 103.0/96.0 * e**4 +
70
+ # sine_5M * 1097.0/960.0 * e**5
71
+ # sine_1M * ( 1.914602 - @ta * ( 0.004817 + @ta * 0.000014 )) + +
72
+ # sine_2M * ( 0.019993 - @ta * 0.000101 ) + +
72
73
  # sine_3M * 0.000289
74
+ eqc( @ma, @ta )
73
75
  end
74
76
  alias_method :equation_of_center, :center
75
77
 
@@ -77,7 +79,7 @@ class Eot
77
79
  # cosine apparent longitude
78
80
  # could be useful when dividing
79
81
  def cosine_al_Sun()
80
- cos( alsun() )
82
+ cos( al(@ma, @ta, Celes.faom03(@ta)) )
81
83
  end
82
84
  alias_method :cosine_apparent_longitude, :cosine_al_Sun
83
85
  alias_method :cosalsun, :cosine_al_Sun
@@ -86,7 +88,7 @@ class Eot
86
88
  # cosine true longitude
87
89
  # used in solar right ascension
88
90
  def cosine_tl_Sun()
89
- cos( tl_Sun() )
91
+ cos( tl(@ma, @ta) )
90
92
  end
91
93
  alias_method :cosine_true_longitude, :cosine_tl_Sun
92
94
 
@@ -94,15 +96,15 @@ class Eot
94
96
  # cosine true obliquity
95
97
  # used in solar right ascension and equation of equinox
96
98
  def cosine_to_Earth()
97
- cos( to_Earth() )
99
+ cos( Celes.nut06a(@ajd, 0)[ 1 ] + Celes.obl06(@ajd, 0) )
98
100
  end
99
101
  alias_method :cosine_true_obliquity, :cosine_to_Earth
100
102
 
101
103
  # From angles.rb:<br>
102
104
  # solar declination
103
105
  def dec_Sun()
104
- sine_declination = sine_to_Earth() * sine_al_Sun()
105
- asin( sine_declination )
106
+ asin( sin(Celes.nut06a(@ajd, 0)[ 1 ] + Celes.obl06(@ajd, 0)) *
107
+ sin( al(@ma, @ta, Celes.faom03(@ta))))
106
108
  end
107
109
  alias_method :declination, :dec_Sun
108
110
 
@@ -111,7 +113,8 @@ class Eot
111
113
  # eccentricity of elliptical Earth orbit around Sun
112
114
  # Horners' calculation method
113
115
  def eccentricity_Earth()
114
- [-0.0000001235, -0.000042037, 0.016708617].inject(0.0) {|p, a| p * @ta + a}
116
+ # [-0.0000001235, -0.000042037, 0.016708617].inject(0.0) {|p, a| p * @ta + a}
117
+ eoe(@ta)
115
118
  end
116
119
  alias_method :eccentricity_earth_orbit, :eccentricity_Earth
117
120
 
@@ -120,7 +123,7 @@ class Eot
120
123
  # used for true longitude of Aries
121
124
  # Depricated by Celes.gst06a()
122
125
  def eq_of_equinox()
123
- cosine_to_Earth() * delta_psi()
126
+ cos( Celes.nut06a(@ajd, 0)[ 1 ] + Celes.obl06(@ajd, 0) ) * Celes.nut06a(@ajd, 0)[ 0 ]
124
127
  end
125
128
 
126
129
 
@@ -128,9 +131,10 @@ class Eot
128
131
  # angle geometric mean longitude
129
132
  # needed to get true longitude for low accuracy.
130
133
  def gml_Sun()
131
- total = [ 1.0/-19880000.0, 1.0/-152990.0, 1.0/499310.0,
132
- 0.0003032028, 36000.76982779, 280.4664567 ]
133
- mod_360(total.inject(0.0) {|p, a| p * @ta + a}) * D2R
134
+ #total = [ 1.0/-19880000.0, 1.0/-152990.0, 1.0/499310.0,
135
+ # 0.0003032028, 36000.76982779, 280.4664567 ]
136
+ # mod_360(total.inject(0.0) {|p, a| p * @ta + a}) * D2R
137
+ ml(@ta)
134
138
  end
135
139
  alias_method :geometric_mean_longitude, :gml_Sun
136
140
 
@@ -138,14 +142,9 @@ class Eot
138
142
  # horizon angle for provided geo coordinates
139
143
  # used for angles from transit to horizons
140
144
  def ha_Sun()
141
- zenith = 90.8333 * D2R
142
- cosine_zenith = cos( zenith )
143
- cosine_declination = cos( dec_Sun() )
144
- sine_declination = sin( dec_Sun() )
145
- cosine_latitude = cos( @latitude * D2R )
146
- sine_latitude = sin( @latitude * D2R )
147
- top = cosine_zenith - sine_declination * sine_latitude
148
- bottom = cosine_declination * cosine_latitude
145
+ zenith = 90.8333 # use other zeniths here for non commercial
146
+ top = cosZ( zenith ) - sin( dec_Sun() ) * sin( @latitude * D2R )
147
+ bottom = cos( dec_Sun() ) * cos( @latitude * D2R )
149
148
  t_cosine = top / bottom
150
149
  t_cosine > 1.0 || t_cosine < -1.0 ? cos = 1.0 : cos = t_cosine
151
150
  acos( cos )
@@ -212,8 +211,9 @@ class Eot
212
211
  # From angles.rb:<br>
213
212
  # solar right ascension
214
213
  def ra_Sun()
215
- y0 = sine_al_Sun() * cosine_to_Earth()
216
- Celes.anp(180.0 * PI / 180.0 + atan2( -y0, -cosine_al_Sun() ) )
214
+ y0 = sin( al(@ma, @ta, Celes.faom03(@ta)) ) * cos( Celes.nut06a(@ajd, 0)[ 1 ] +
215
+ Celes.obl06(@ajd, 0) )
216
+ Celes.anp( PI + atan2( -y0, -cos( al(@ma, @ta, Celes.faom03(@ta)) ) ) )
217
217
  end
218
218
  alias_method :right_ascension, :ra_Sun
219
219
 
@@ -221,7 +221,7 @@ class Eot
221
221
  # sine apparent longitude
222
222
  # used in solar declination
223
223
  def sine_al_Sun()
224
- sin( al_Sun() )
224
+ sin( al(@ma, @ta, Celes.faom03(@ta)) )
225
225
  end
226
226
  alias_method :sine_apparent_longitude, :sine_al_Sun
227
227
 
@@ -229,7 +229,7 @@ class Eot
229
229
  # sine true longitude
230
230
  # used in solar right ascension
231
231
  def sine_tl_Sun()
232
- sin( tl_Sun() )
232
+ sin( tl(@ma, @ta) )
233
233
  end
234
234
  alias_method :sine_true_longitude, :sine_tl_Sun
235
235
 
@@ -237,14 +237,14 @@ class Eot
237
237
  # sine true obliquity angle of Earth
238
238
  # used in solar declination
239
239
  def sine_to_Earth()
240
- sin(to_Earth())
240
+ sin(Celes.nut06a(@ajd, 0)[ 1 ] + Celes.obl06(@ajd, 0))
241
241
  end
242
242
 
243
243
  # From angles.rb:<br>
244
244
  # angle true anomaly
245
245
  # used in equation of time
246
246
  def ta_Sun()
247
- Celes.anp(@ma + center())
247
+ Celes.anp(@ma + eqc( @ma, @ta ))
248
248
  end
249
249
  alias_method :true_anomaly, :ta_Sun
250
250
 
@@ -263,7 +263,8 @@ class Eot
263
263
  # angle of true longitude sun
264
264
  # used in equation of time
265
265
  def tl_Sun()
266
- Celes.anp(gml_Sun() + center())
266
+ #Celes.anp(gml_Sun() + center())
267
+ tl(@ma, @ta)
267
268
  end
268
269
  alias_method :true_longitude, :tl_Sun
269
270
  alias_method :ecliptic_longitude, :tl_Sun
@@ -272,7 +273,7 @@ class Eot
272
273
  # From angles.rb:<br>
273
274
  # true obliquity considers nutation
274
275
  def to_Earth()
275
- Celes.anp(delta_epsilon() + mo_Earth())
276
+ Celes.nut06a(@ajd, 0)[ 1 ] + Celes.obl06(@ajd, 0)
276
277
  end
277
278
  alias_method :obliquity_correction, :to_Earth
278
279
  alias_method :true_obliquity, :to_Earth