gphys 1.1.1a

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 (428) hide show
  1. data/ChangeLog +1777 -0
  2. data/LICENSE.txt +34 -0
  3. data/README +33 -0
  4. data/Rakefile +57 -0
  5. data/TODO_ep_flux +6 -0
  6. data/bin/gdir_client +27 -0
  7. data/bin/gdir_server +129 -0
  8. data/bin/gpaop +146 -0
  9. data/bin/gpcat +148 -0
  10. data/bin/gpcut +102 -0
  11. data/bin/gpedit +228 -0
  12. data/bin/gplist +68 -0
  13. data/bin/gpmath +120 -0
  14. data/bin/gpmaxmin +128 -0
  15. data/bin/gpprint +60 -0
  16. data/bin/gpvect +706 -0
  17. data/bin/gpview +704 -0
  18. data/bin/grads2nc_with_gphys +61 -0
  19. data/doc/attribute.html +19 -0
  20. data/doc/attributenetcdf.html +15 -0
  21. data/doc/axis.html +376 -0
  22. data/doc/coordmapping.html +111 -0
  23. data/doc/coordtransform.html +36 -0
  24. data/doc/derivative/gphys-derivative.html +80 -0
  25. data/doc/derivative/index.html +21 -0
  26. data/doc/derivative/index.rd +14 -0
  27. data/doc/derivative/math-doc/document/document.css +30 -0
  28. data/doc/derivative/math-doc/document/document.html +57 -0
  29. data/doc/derivative/math-doc/document/images.aux +1 -0
  30. data/doc/derivative/math-doc/document/images.log +385 -0
  31. data/doc/derivative/math-doc/document/images.pl +186 -0
  32. data/doc/derivative/math-doc/document/images.tex +364 -0
  33. data/doc/derivative/math-doc/document/img1.png +0 -0
  34. data/doc/derivative/math-doc/document/img10.png +0 -0
  35. data/doc/derivative/math-doc/document/img11.png +0 -0
  36. data/doc/derivative/math-doc/document/img12.png +0 -0
  37. data/doc/derivative/math-doc/document/img13.png +0 -0
  38. data/doc/derivative/math-doc/document/img14.png +0 -0
  39. data/doc/derivative/math-doc/document/img15.png +0 -0
  40. data/doc/derivative/math-doc/document/img16.png +0 -0
  41. data/doc/derivative/math-doc/document/img17.png +0 -0
  42. data/doc/derivative/math-doc/document/img18.png +0 -0
  43. data/doc/derivative/math-doc/document/img19.png +0 -0
  44. data/doc/derivative/math-doc/document/img2.png +0 -0
  45. data/doc/derivative/math-doc/document/img20.png +0 -0
  46. data/doc/derivative/math-doc/document/img21.png +0 -0
  47. data/doc/derivative/math-doc/document/img22.png +0 -0
  48. data/doc/derivative/math-doc/document/img23.png +0 -0
  49. data/doc/derivative/math-doc/document/img24.png +0 -0
  50. data/doc/derivative/math-doc/document/img25.png +0 -0
  51. data/doc/derivative/math-doc/document/img26.png +0 -0
  52. data/doc/derivative/math-doc/document/img27.png +0 -0
  53. data/doc/derivative/math-doc/document/img28.png +0 -0
  54. data/doc/derivative/math-doc/document/img29.png +0 -0
  55. data/doc/derivative/math-doc/document/img3.png +0 -0
  56. data/doc/derivative/math-doc/document/img30.png +0 -0
  57. data/doc/derivative/math-doc/document/img4.png +0 -0
  58. data/doc/derivative/math-doc/document/img5.png +0 -0
  59. data/doc/derivative/math-doc/document/img6.png +0 -0
  60. data/doc/derivative/math-doc/document/img7.png +0 -0
  61. data/doc/derivative/math-doc/document/img8.png +0 -0
  62. data/doc/derivative/math-doc/document/img9.png +0 -0
  63. data/doc/derivative/math-doc/document/index.html +57 -0
  64. data/doc/derivative/math-doc/document/labels.pl +13 -0
  65. data/doc/derivative/math-doc/document/next.png +0 -0
  66. data/doc/derivative/math-doc/document/next_g.png +0 -0
  67. data/doc/derivative/math-doc/document/node1.html +238 -0
  68. data/doc/derivative/math-doc/document/node2.html +75 -0
  69. data/doc/derivative/math-doc/document/prev.png +0 -0
  70. data/doc/derivative/math-doc/document/prev_g.png +0 -0
  71. data/doc/derivative/math-doc/document/up.png +0 -0
  72. data/doc/derivative/math-doc/document/up_g.png +0 -0
  73. data/doc/derivative/math-doc/document.pdf +0 -0
  74. data/doc/derivative/math-doc/document.tex +158 -0
  75. data/doc/derivative/numru-derivative.html +129 -0
  76. data/doc/ep_flux/ep_flux.html +469 -0
  77. data/doc/ep_flux/ggraph_on_merdional_section.html +71 -0
  78. data/doc/ep_flux/index.html +31 -0
  79. data/doc/ep_flux/index.rd +24 -0
  80. data/doc/ep_flux/math-doc/document/WARNINGS +1 -0
  81. data/doc/ep_flux/math-doc/document/contents.png +0 -0
  82. data/doc/ep_flux/math-doc/document/crossref.png +0 -0
  83. data/doc/ep_flux/math-doc/document/document.css +30 -0
  84. data/doc/ep_flux/math-doc/document/document.html +101 -0
  85. data/doc/ep_flux/math-doc/document/images.aux +1 -0
  86. data/doc/ep_flux/math-doc/document/images.log +1375 -0
  87. data/doc/ep_flux/math-doc/document/images.pl +1328 -0
  88. data/doc/ep_flux/math-doc/document/images.tex +1471 -0
  89. data/doc/ep_flux/math-doc/document/img1.png +0 -0
  90. data/doc/ep_flux/math-doc/document/img10.png +0 -0
  91. data/doc/ep_flux/math-doc/document/img100.png +0 -0
  92. data/doc/ep_flux/math-doc/document/img101.png +0 -0
  93. data/doc/ep_flux/math-doc/document/img102.png +0 -0
  94. data/doc/ep_flux/math-doc/document/img103.png +0 -0
  95. data/doc/ep_flux/math-doc/document/img104.png +0 -0
  96. data/doc/ep_flux/math-doc/document/img105.png +0 -0
  97. data/doc/ep_flux/math-doc/document/img106.png +0 -0
  98. data/doc/ep_flux/math-doc/document/img107.png +0 -0
  99. data/doc/ep_flux/math-doc/document/img108.png +0 -0
  100. data/doc/ep_flux/math-doc/document/img109.png +0 -0
  101. data/doc/ep_flux/math-doc/document/img11.png +0 -0
  102. data/doc/ep_flux/math-doc/document/img110.png +0 -0
  103. data/doc/ep_flux/math-doc/document/img111.png +0 -0
  104. data/doc/ep_flux/math-doc/document/img112.png +0 -0
  105. data/doc/ep_flux/math-doc/document/img113.png +0 -0
  106. data/doc/ep_flux/math-doc/document/img114.png +0 -0
  107. data/doc/ep_flux/math-doc/document/img115.png +0 -0
  108. data/doc/ep_flux/math-doc/document/img116.png +0 -0
  109. data/doc/ep_flux/math-doc/document/img117.png +0 -0
  110. data/doc/ep_flux/math-doc/document/img118.png +0 -0
  111. data/doc/ep_flux/math-doc/document/img119.png +0 -0
  112. data/doc/ep_flux/math-doc/document/img12.png +0 -0
  113. data/doc/ep_flux/math-doc/document/img120.png +0 -0
  114. data/doc/ep_flux/math-doc/document/img121.png +0 -0
  115. data/doc/ep_flux/math-doc/document/img122.png +0 -0
  116. data/doc/ep_flux/math-doc/document/img123.png +0 -0
  117. data/doc/ep_flux/math-doc/document/img124.png +0 -0
  118. data/doc/ep_flux/math-doc/document/img125.png +0 -0
  119. data/doc/ep_flux/math-doc/document/img126.png +0 -0
  120. data/doc/ep_flux/math-doc/document/img127.png +0 -0
  121. data/doc/ep_flux/math-doc/document/img128.png +0 -0
  122. data/doc/ep_flux/math-doc/document/img129.png +0 -0
  123. data/doc/ep_flux/math-doc/document/img13.png +0 -0
  124. data/doc/ep_flux/math-doc/document/img130.png +0 -0
  125. data/doc/ep_flux/math-doc/document/img131.png +0 -0
  126. data/doc/ep_flux/math-doc/document/img132.png +0 -0
  127. data/doc/ep_flux/math-doc/document/img133.png +0 -0
  128. data/doc/ep_flux/math-doc/document/img134.png +0 -0
  129. data/doc/ep_flux/math-doc/document/img135.png +0 -0
  130. data/doc/ep_flux/math-doc/document/img136.png +0 -0
  131. data/doc/ep_flux/math-doc/document/img137.png +0 -0
  132. data/doc/ep_flux/math-doc/document/img138.png +0 -0
  133. data/doc/ep_flux/math-doc/document/img139.png +0 -0
  134. data/doc/ep_flux/math-doc/document/img14.png +0 -0
  135. data/doc/ep_flux/math-doc/document/img140.png +0 -0
  136. data/doc/ep_flux/math-doc/document/img141.png +0 -0
  137. data/doc/ep_flux/math-doc/document/img142.png +0 -0
  138. data/doc/ep_flux/math-doc/document/img143.png +0 -0
  139. data/doc/ep_flux/math-doc/document/img144.png +0 -0
  140. data/doc/ep_flux/math-doc/document/img145.png +0 -0
  141. data/doc/ep_flux/math-doc/document/img146.png +0 -0
  142. data/doc/ep_flux/math-doc/document/img147.png +0 -0
  143. data/doc/ep_flux/math-doc/document/img148.png +0 -0
  144. data/doc/ep_flux/math-doc/document/img149.png +0 -0
  145. data/doc/ep_flux/math-doc/document/img15.png +0 -0
  146. data/doc/ep_flux/math-doc/document/img150.png +0 -0
  147. data/doc/ep_flux/math-doc/document/img151.png +0 -0
  148. data/doc/ep_flux/math-doc/document/img152.png +0 -0
  149. data/doc/ep_flux/math-doc/document/img153.png +0 -0
  150. data/doc/ep_flux/math-doc/document/img154.png +0 -0
  151. data/doc/ep_flux/math-doc/document/img155.png +0 -0
  152. data/doc/ep_flux/math-doc/document/img156.png +0 -0
  153. data/doc/ep_flux/math-doc/document/img157.png +0 -0
  154. data/doc/ep_flux/math-doc/document/img158.png +0 -0
  155. data/doc/ep_flux/math-doc/document/img159.png +0 -0
  156. data/doc/ep_flux/math-doc/document/img16.png +0 -0
  157. data/doc/ep_flux/math-doc/document/img160.png +0 -0
  158. data/doc/ep_flux/math-doc/document/img161.png +0 -0
  159. data/doc/ep_flux/math-doc/document/img162.png +0 -0
  160. data/doc/ep_flux/math-doc/document/img163.png +0 -0
  161. data/doc/ep_flux/math-doc/document/img164.png +0 -0
  162. data/doc/ep_flux/math-doc/document/img165.png +0 -0
  163. data/doc/ep_flux/math-doc/document/img166.png +0 -0
  164. data/doc/ep_flux/math-doc/document/img167.png +0 -0
  165. data/doc/ep_flux/math-doc/document/img168.png +0 -0
  166. data/doc/ep_flux/math-doc/document/img169.png +0 -0
  167. data/doc/ep_flux/math-doc/document/img17.png +0 -0
  168. data/doc/ep_flux/math-doc/document/img170.png +0 -0
  169. data/doc/ep_flux/math-doc/document/img171.png +0 -0
  170. data/doc/ep_flux/math-doc/document/img172.png +0 -0
  171. data/doc/ep_flux/math-doc/document/img173.png +0 -0
  172. data/doc/ep_flux/math-doc/document/img174.png +0 -0
  173. data/doc/ep_flux/math-doc/document/img175.png +0 -0
  174. data/doc/ep_flux/math-doc/document/img176.png +0 -0
  175. data/doc/ep_flux/math-doc/document/img177.png +0 -0
  176. data/doc/ep_flux/math-doc/document/img178.png +0 -0
  177. data/doc/ep_flux/math-doc/document/img179.png +0 -0
  178. data/doc/ep_flux/math-doc/document/img18.png +0 -0
  179. data/doc/ep_flux/math-doc/document/img180.png +0 -0
  180. data/doc/ep_flux/math-doc/document/img181.png +0 -0
  181. data/doc/ep_flux/math-doc/document/img182.png +0 -0
  182. data/doc/ep_flux/math-doc/document/img183.png +0 -0
  183. data/doc/ep_flux/math-doc/document/img184.png +0 -0
  184. data/doc/ep_flux/math-doc/document/img185.png +0 -0
  185. data/doc/ep_flux/math-doc/document/img186.png +0 -0
  186. data/doc/ep_flux/math-doc/document/img187.png +0 -0
  187. data/doc/ep_flux/math-doc/document/img188.png +0 -0
  188. data/doc/ep_flux/math-doc/document/img189.png +0 -0
  189. data/doc/ep_flux/math-doc/document/img19.png +0 -0
  190. data/doc/ep_flux/math-doc/document/img190.png +0 -0
  191. data/doc/ep_flux/math-doc/document/img191.png +0 -0
  192. data/doc/ep_flux/math-doc/document/img192.png +0 -0
  193. data/doc/ep_flux/math-doc/document/img193.png +0 -0
  194. data/doc/ep_flux/math-doc/document/img194.png +0 -0
  195. data/doc/ep_flux/math-doc/document/img195.png +0 -0
  196. data/doc/ep_flux/math-doc/document/img196.png +0 -0
  197. data/doc/ep_flux/math-doc/document/img197.png +0 -0
  198. data/doc/ep_flux/math-doc/document/img198.png +0 -0
  199. data/doc/ep_flux/math-doc/document/img199.png +0 -0
  200. data/doc/ep_flux/math-doc/document/img2.png +0 -0
  201. data/doc/ep_flux/math-doc/document/img20.png +0 -0
  202. data/doc/ep_flux/math-doc/document/img200.png +0 -0
  203. data/doc/ep_flux/math-doc/document/img21.png +0 -0
  204. data/doc/ep_flux/math-doc/document/img22.png +0 -0
  205. data/doc/ep_flux/math-doc/document/img23.png +0 -0
  206. data/doc/ep_flux/math-doc/document/img24.png +0 -0
  207. data/doc/ep_flux/math-doc/document/img25.png +0 -0
  208. data/doc/ep_flux/math-doc/document/img26.png +0 -0
  209. data/doc/ep_flux/math-doc/document/img27.png +0 -0
  210. data/doc/ep_flux/math-doc/document/img28.png +0 -0
  211. data/doc/ep_flux/math-doc/document/img29.png +0 -0
  212. data/doc/ep_flux/math-doc/document/img3.png +0 -0
  213. data/doc/ep_flux/math-doc/document/img30.png +0 -0
  214. data/doc/ep_flux/math-doc/document/img31.png +0 -0
  215. data/doc/ep_flux/math-doc/document/img32.png +0 -0
  216. data/doc/ep_flux/math-doc/document/img33.png +0 -0
  217. data/doc/ep_flux/math-doc/document/img34.png +0 -0
  218. data/doc/ep_flux/math-doc/document/img35.png +0 -0
  219. data/doc/ep_flux/math-doc/document/img36.png +0 -0
  220. data/doc/ep_flux/math-doc/document/img37.png +0 -0
  221. data/doc/ep_flux/math-doc/document/img38.png +0 -0
  222. data/doc/ep_flux/math-doc/document/img39.png +0 -0
  223. data/doc/ep_flux/math-doc/document/img4.png +0 -0
  224. data/doc/ep_flux/math-doc/document/img40.png +0 -0
  225. data/doc/ep_flux/math-doc/document/img41.png +0 -0
  226. data/doc/ep_flux/math-doc/document/img42.png +0 -0
  227. data/doc/ep_flux/math-doc/document/img43.png +0 -0
  228. data/doc/ep_flux/math-doc/document/img44.png +0 -0
  229. data/doc/ep_flux/math-doc/document/img45.png +0 -0
  230. data/doc/ep_flux/math-doc/document/img46.png +0 -0
  231. data/doc/ep_flux/math-doc/document/img47.png +0 -0
  232. data/doc/ep_flux/math-doc/document/img48.png +0 -0
  233. data/doc/ep_flux/math-doc/document/img49.png +0 -0
  234. data/doc/ep_flux/math-doc/document/img5.png +0 -0
  235. data/doc/ep_flux/math-doc/document/img50.png +0 -0
  236. data/doc/ep_flux/math-doc/document/img51.png +0 -0
  237. data/doc/ep_flux/math-doc/document/img52.png +0 -0
  238. data/doc/ep_flux/math-doc/document/img53.png +0 -0
  239. data/doc/ep_flux/math-doc/document/img54.png +0 -0
  240. data/doc/ep_flux/math-doc/document/img55.png +0 -0
  241. data/doc/ep_flux/math-doc/document/img56.png +0 -0
  242. data/doc/ep_flux/math-doc/document/img57.png +0 -0
  243. data/doc/ep_flux/math-doc/document/img58.png +0 -0
  244. data/doc/ep_flux/math-doc/document/img59.png +0 -0
  245. data/doc/ep_flux/math-doc/document/img6.png +0 -0
  246. data/doc/ep_flux/math-doc/document/img60.png +0 -0
  247. data/doc/ep_flux/math-doc/document/img61.png +0 -0
  248. data/doc/ep_flux/math-doc/document/img62.png +0 -0
  249. data/doc/ep_flux/math-doc/document/img63.png +0 -0
  250. data/doc/ep_flux/math-doc/document/img64.png +0 -0
  251. data/doc/ep_flux/math-doc/document/img65.png +0 -0
  252. data/doc/ep_flux/math-doc/document/img66.png +0 -0
  253. data/doc/ep_flux/math-doc/document/img67.png +0 -0
  254. data/doc/ep_flux/math-doc/document/img68.png +0 -0
  255. data/doc/ep_flux/math-doc/document/img69.png +0 -0
  256. data/doc/ep_flux/math-doc/document/img7.png +0 -0
  257. data/doc/ep_flux/math-doc/document/img70.png +0 -0
  258. data/doc/ep_flux/math-doc/document/img71.png +0 -0
  259. data/doc/ep_flux/math-doc/document/img72.png +0 -0
  260. data/doc/ep_flux/math-doc/document/img73.png +0 -0
  261. data/doc/ep_flux/math-doc/document/img74.png +0 -0
  262. data/doc/ep_flux/math-doc/document/img75.png +0 -0
  263. data/doc/ep_flux/math-doc/document/img76.png +0 -0
  264. data/doc/ep_flux/math-doc/document/img77.png +0 -0
  265. data/doc/ep_flux/math-doc/document/img78.png +0 -0
  266. data/doc/ep_flux/math-doc/document/img79.png +0 -0
  267. data/doc/ep_flux/math-doc/document/img8.png +0 -0
  268. data/doc/ep_flux/math-doc/document/img80.png +0 -0
  269. data/doc/ep_flux/math-doc/document/img81.png +0 -0
  270. data/doc/ep_flux/math-doc/document/img82.png +0 -0
  271. data/doc/ep_flux/math-doc/document/img83.png +0 -0
  272. data/doc/ep_flux/math-doc/document/img84.png +0 -0
  273. data/doc/ep_flux/math-doc/document/img85.png +0 -0
  274. data/doc/ep_flux/math-doc/document/img86.png +0 -0
  275. data/doc/ep_flux/math-doc/document/img87.png +0 -0
  276. data/doc/ep_flux/math-doc/document/img88.png +0 -0
  277. data/doc/ep_flux/math-doc/document/img89.png +0 -0
  278. data/doc/ep_flux/math-doc/document/img9.png +0 -0
  279. data/doc/ep_flux/math-doc/document/img90.png +0 -0
  280. data/doc/ep_flux/math-doc/document/img91.png +0 -0
  281. data/doc/ep_flux/math-doc/document/img92.png +0 -0
  282. data/doc/ep_flux/math-doc/document/img93.png +0 -0
  283. data/doc/ep_flux/math-doc/document/img94.png +0 -0
  284. data/doc/ep_flux/math-doc/document/img95.png +0 -0
  285. data/doc/ep_flux/math-doc/document/img96.png +0 -0
  286. data/doc/ep_flux/math-doc/document/img97.png +0 -0
  287. data/doc/ep_flux/math-doc/document/img98.png +0 -0
  288. data/doc/ep_flux/math-doc/document/img99.png +0 -0
  289. data/doc/ep_flux/math-doc/document/index.html +101 -0
  290. data/doc/ep_flux/math-doc/document/internals.pl +258 -0
  291. data/doc/ep_flux/math-doc/document/labels.pl +265 -0
  292. data/doc/ep_flux/math-doc/document/next.png +0 -0
  293. data/doc/ep_flux/math-doc/document/next_g.png +0 -0
  294. data/doc/ep_flux/math-doc/document/node1.html +104 -0
  295. data/doc/ep_flux/math-doc/document/node10.html +164 -0
  296. data/doc/ep_flux/math-doc/document/node11.html +86 -0
  297. data/doc/ep_flux/math-doc/document/node12.html +166 -0
  298. data/doc/ep_flux/math-doc/document/node13.html +897 -0
  299. data/doc/ep_flux/math-doc/document/node14.html +1065 -0
  300. data/doc/ep_flux/math-doc/document/node15.html +72 -0
  301. data/doc/ep_flux/math-doc/document/node16.html +81 -0
  302. data/doc/ep_flux/math-doc/document/node2.html +82 -0
  303. data/doc/ep_flux/math-doc/document/node3.html +91 -0
  304. data/doc/ep_flux/math-doc/document/node4.html +149 -0
  305. data/doc/ep_flux/math-doc/document/node5.html +330 -0
  306. data/doc/ep_flux/math-doc/document/node6.html +99 -0
  307. data/doc/ep_flux/math-doc/document/node7.html +98 -0
  308. data/doc/ep_flux/math-doc/document/node8.html +83 -0
  309. data/doc/ep_flux/math-doc/document/node9.html +140 -0
  310. data/doc/ep_flux/math-doc/document/prev.png +0 -0
  311. data/doc/ep_flux/math-doc/document/prev_g.png +0 -0
  312. data/doc/ep_flux/math-doc/document/up.png +0 -0
  313. data/doc/ep_flux/math-doc/document/up_g.png +0 -0
  314. data/doc/ep_flux/math-doc/document.pdf +0 -0
  315. data/doc/ep_flux/math-doc/document.tex +2018 -0
  316. data/doc/gdir.html +412 -0
  317. data/doc/gdir_client.html +16 -0
  318. data/doc/gdir_connect_ftp-like.html +61 -0
  319. data/doc/gdir_server.html +45 -0
  320. data/doc/ggraph.html +1615 -0
  321. data/doc/gpcat.html +44 -0
  322. data/doc/gpcut.html +41 -0
  323. data/doc/gphys.html +532 -0
  324. data/doc/gphys_fft.html +324 -0
  325. data/doc/gphys_grads_io.html +69 -0
  326. data/doc/gphys_grib_io.html +82 -0
  327. data/doc/gphys_io.html +120 -0
  328. data/doc/gphys_io_common.html +18 -0
  329. data/doc/gphys_netcdf_io.html +283 -0
  330. data/doc/gplist.html +24 -0
  331. data/doc/gpmath.html +51 -0
  332. data/doc/gpmaxmin.html +31 -0
  333. data/doc/gpprint.html +34 -0
  334. data/doc/gpview.html +270 -0
  335. data/doc/grads2nc_with_gphys.html +21 -0
  336. data/doc/grads_gridded.html +307 -0
  337. data/doc/grib.html +144 -0
  338. data/doc/grid.html +212 -0
  339. data/doc/index.html +133 -0
  340. data/doc/index.rd +127 -0
  341. data/doc/netcdf_convention.html +136 -0
  342. data/doc/unumeric.html +176 -0
  343. data/doc/update +64 -0
  344. data/doc/varray.html +299 -0
  345. data/doc/varraycomposite.html +67 -0
  346. data/ext_coord.c +209 -0
  347. data/ext_init.c +7 -0
  348. data/extconf.rb +42 -0
  349. data/install.rb +130 -0
  350. data/interpo.c +497 -0
  351. data/lib/numru/dcl_mouse.rb +71 -0
  352. data/lib/numru/dclext_datetime_ax.rb +220 -0
  353. data/lib/numru/derivative.rb +348 -0
  354. data/lib/numru/ganalysis/covariance.rb +154 -0
  355. data/lib/numru/ganalysis/eof.rb +298 -0
  356. data/lib/numru/ganalysis/histogram.rb +252 -0
  357. data/lib/numru/ganalysis/met.rb +317 -0
  358. data/lib/numru/ganalysis/planet.rb +182 -0
  359. data/lib/numru/ganalysis.rb +7 -0
  360. data/lib/numru/gdir.rb +1038 -0
  361. data/lib/numru/gdir_connect_ftp-like.rb +149 -0
  362. data/lib/numru/ggraph.rb +5838 -0
  363. data/lib/numru/ggraph_on_merdional_section.rb +178 -0
  364. data/lib/numru/gphys/assoccoords.rb +359 -0
  365. data/lib/numru/gphys/attribute.rb +129 -0
  366. data/lib/numru/gphys/attributenetcdf.rb +80 -0
  367. data/lib/numru/gphys/axis.rb +963 -0
  368. data/lib/numru/gphys/coordmapping.rb +286 -0
  369. data/lib/numru/gphys/coordtransform.rb +209 -0
  370. data/lib/numru/gphys/derivative.rb +314 -0
  371. data/lib/numru/gphys/ep_flux.rb +868 -0
  372. data/lib/numru/gphys/gpcommon.rb +52 -0
  373. data/lib/numru/gphys/gphys.rb +1207 -0
  374. data/lib/numru/gphys/gphys_fft.rb +886 -0
  375. data/lib/numru/gphys/gphys_grads_io.rb +212 -0
  376. data/lib/numru/gphys/gphys_grib_io.rb +214 -0
  377. data/lib/numru/gphys/gphys_gtool3_io.rb +162 -0
  378. data/lib/numru/gphys/gphys_hdfeos5_io.rb +672 -0
  379. data/lib/numru/gphys/gphys_io.rb +452 -0
  380. data/lib/numru/gphys/gphys_io_common.rb +126 -0
  381. data/lib/numru/gphys/gphys_netcdf_io.rb +800 -0
  382. data/lib/numru/gphys/gphys_nusdas_io.rb +132 -0
  383. data/lib/numru/gphys/grads_gridded.rb +1638 -0
  384. data/lib/numru/gphys/grib.rb +2049 -0
  385. data/lib/numru/gphys/grib_params.rb +1465 -0
  386. data/lib/numru/gphys/grid.rb +723 -0
  387. data/lib/numru/gphys/gtool3.rb +771 -0
  388. data/lib/numru/gphys/interpolate.rb +854 -0
  389. data/lib/numru/gphys/narray_ext.rb +34 -0
  390. data/lib/numru/gphys/netcdf_convention.rb +406 -0
  391. data/lib/numru/gphys/subsetmapping.rb +332 -0
  392. data/lib/numru/gphys/unumeric.rb +522 -0
  393. data/lib/numru/gphys/varray.rb +1109 -0
  394. data/lib/numru/gphys/varraycomposite.rb +415 -0
  395. data/lib/numru/gphys/varraygrads.rb +225 -0
  396. data/lib/numru/gphys/varraygrib.rb +177 -0
  397. data/lib/numru/gphys/varraygtool3.rb +226 -0
  398. data/lib/numru/gphys/varrayhdfeos5.rb +451 -0
  399. data/lib/numru/gphys/varraynetcdf.rb +350 -0
  400. data/lib/numru/gphys/varraynusdas.rb +59 -0
  401. data/lib/numru/gphys.rb +9 -0
  402. data/lib/numru/htdir.rb +170 -0
  403. data/multibitIO.c +567 -0
  404. data/sample/cira86_to_nc.rb +122 -0
  405. data/sample/druby_cli1.rb +21 -0
  406. data/sample/druby_cli2.rb +34 -0
  407. data/sample/druby_serv1.rb +30 -0
  408. data/sample/druby_serv2.rb +64 -0
  409. data/sample/ep_flux/demo_NCEP_1.rb +48 -0
  410. data/sample/ep_flux/demo_NCEP_2.rb +57 -0
  411. data/sample/ep_flux/demo_NCEP_3.rb +81 -0
  412. data/sample/ggraph_latlon_labelling_dr002690.rb +159 -0
  413. data/sample/ggraph_mapfit-axes_dr002687.rb +131 -0
  414. data/sample/map_projection.rb +121 -0
  415. data/sample/ncep_theta_coord.rb +79 -0
  416. data/test/eof_slp.rb +28 -0
  417. data/test/mltbit.dat +0 -0
  418. data/test/test_ep_flux.rb +533 -0
  419. data/test/test_multibitIO.rb +19 -0
  420. data/testdata/T.jan.ctl +12 -0
  421. data/testdata/T.jan.dat +0 -0
  422. data/testdata/T.jan.grib +0 -0
  423. data/testdata/T.jan.nc +0 -0
  424. data/testdata/T.jan.packed.withmiss.nc +0 -0
  425. data/testdata/UV.jan.nc +0 -0
  426. data/testdata/assoc_crds.nc +0 -0
  427. data/testdata/cira86.dat +1332 -0
  428. metadata +621 -0
data/multibitIO.c ADDED
@@ -0,0 +1,567 @@
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+ #include "ruby.h"
4
+ #include "narray.h"
5
+
6
+ #ifndef HAVE_INT32_T
7
+ typedef int int32_t;
8
+ #endif
9
+
10
+ /* for compatibility with ruby 1.6 */
11
+ #ifndef RARRAY_PTR
12
+ #define RARRAY_PTR(a) (RARRAY(a)->ptr)
13
+ #endif
14
+ #ifndef RARRAY_LEN
15
+ #define RARRAY_LEN(a) (RARRAY(a)->len)
16
+ #endif
17
+ #ifndef StringValueCStr
18
+ #define StringValueCStr(s) STR2CSTR(s)
19
+ #endif
20
+ #ifndef StringValuePtr
21
+ #define StringValuePtr(s) STR2CSTR(s)
22
+ #endif
23
+
24
+ struct multibit_IO {
25
+ FILE *fp;
26
+ };
27
+
28
+ static void
29
+ multibit_IO_closer(ptr)
30
+ struct multibit_IO *ptr;
31
+ {
32
+ if (ptr->fp)
33
+ fclose(ptr->fp);
34
+ free(ptr);
35
+ }
36
+
37
+ /*
38
+ VALUE
39
+ multibit_IO_close(self)
40
+ VALUE self;
41
+ {
42
+ struct multibit_IO *ptr;
43
+ Data_Get_Struct(self, struct multibit_IO, ptr);
44
+ multibit_IO_closer(ptr);
45
+ return Qnil;
46
+ }
47
+ */
48
+
49
+ static VALUE
50
+ multibit_IO_alloc(VALUE klass)
51
+ {
52
+ struct multibit_IO *ptr = ALLOC(struct multibit_IO);
53
+ return Data_Wrap_Struct(klass, 0, multibit_IO_closer, ptr);
54
+ }
55
+
56
+
57
+ static VALUE
58
+ multibit_IO_initialize(VALUE self, VALUE path)
59
+ {
60
+ struct multibit_IO *ptr;
61
+ Data_Get_Struct(self, struct multibit_IO, ptr);
62
+ ptr->fp = fopen(StringValueCStr(path),"rb");
63
+ if (!ptr->fp)
64
+ rb_raise(rb_eArgError, "Cannot open file: %s\n", StringValueCStr(path));
65
+ return Qnil;
66
+ }
67
+
68
+ static int32_t *
69
+ multibit_read_2D(fp, pos, nbit, sh0, sh1, f0, l0, s0, f1, l1, s1, idx0, idx1,
70
+ ival)
71
+ // IN
72
+ FILE *fp; // binary file to read
73
+ long pos; // starting postion of the current 2D block in fp (bytes)
74
+ long nbit; // number of bits of each data element (>= 0, integer)
75
+ long sh0; // shape of the 2D array - lengths of the 1st D
76
+ long sh1; // shape of the 2D array - lengths of the 2nd D
77
+ long f0; // first index of the subset to read regarding the 1st D
78
+ long f1; // first index of the subset to read regarding the 2nd D
79
+ long l0; // last index of the subset to read regarding the 1st D
80
+ long l1; // last index of the subset to read regarding the 2nd D
81
+ long s0; // step of the subset to read regarding the 1st D
82
+ long s1; // step of the subset to read regarding the 2nd D
83
+ long *idx0;// If non-NULL, index map of the subset regarding the 1st D
84
+ // Then f0, s0, and l0 must be 0, 1 and len-1 of idx0
85
+ long *idx1;// If non-NULL, index map of the subset regarding the 2nd D
86
+ // Then f1, s1, and l1 must be 0, 1 and len-1 of idx1
87
+ // OUT
88
+ int32_t *ival; // to return (allocated if NULL)
89
+ {
90
+ long pf, pl, bskip;
91
+ unsigned char *buf;
92
+ long sz, size;
93
+ long len;
94
+ int status;
95
+ long i, i0, i1, ns, nl, k, j, ib;
96
+ int w, b;
97
+ unsigned char cn[5];
98
+ unsigned char mk[8] = {0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
99
+ // bit mask. in binary, 01111111, 00111111, 00011111,..., 00000001
100
+ unsigned int one = 1;
101
+ long fa0, fa1, la0, la1; // actual f0, f1, l0, l1
102
+
103
+ // << read the file >>
104
+
105
+ if(idx0 == NULL){
106
+ fa0 = f0;
107
+ la0 = l0;
108
+ } else {
109
+ fa0 = 0; // possible min val (to use actual min is impactless)
110
+ la0 = sh0-1; // possible max val (to use actual max is impactless)
111
+ }
112
+ if(idx1 == NULL){
113
+ fa1 = f1;
114
+ la1 = l1;
115
+ } else {
116
+ for( i=0, fa1=sh1-1, la1=0 ; i<=l1 ; i++){
117
+ if(idx1[i] < fa1){ fa1=idx1[i]; } // find actual minimum
118
+ if(idx1[i] > la1){ la1=idx1[i]; } // find actual maximum
119
+ }
120
+ }
121
+
122
+ bskip = (fa0+sh0*fa1) * nbit / 8;
123
+ pf = pos + bskip; // first file pos to read
124
+ pl = pos + ( (la0+sh0*la1+1)*nbit -1 ) / 8; // last file pos to read
125
+
126
+ size = pl-pf+1;
127
+ //printf("=== %d %d %d %d %d\n",pf,pl,size,sh0,la1);
128
+ buf = ALLOCA_N(unsigned char, size);
129
+ status = fseek(fp, pf, SEEK_SET);
130
+ if (status) { rb_raise(rb_eStandardError,
131
+ "Could not move to the specified position %d",pf); }
132
+ sz = fread(buf,1,size,fp);
133
+ if (sz!=size) { rb_raise(rb_eStandardError,
134
+ "Could not read %d bytes from %d",size,pf); }
135
+
136
+ // << multibit -> int32_t >>
137
+
138
+ if(ival==NULL){
139
+ len = ((l0-f0)/s0+1) * ((l1-f1)/s1+1); // total len of ival
140
+ ival = (int32_t *) xmalloc(len*sizeof(int32_t));
141
+ }
142
+
143
+ k = 0;
144
+ for(i1=f1; i1<=l1; i1+=s1){
145
+ for(i0=f0; i0<=l0; i0+=s0, k++){
146
+ if(idx0 == NULL && idx1 == NULL){
147
+ i = i0+sh0*i1;
148
+ } else if (idx0 == NULL) {
149
+ i = i0+sh0*idx1[i1];
150
+ } else if (idx1 == NULL) {
151
+ i = idx0[i0]+sh0*i1;
152
+ } else {
153
+ i = idx0[i0]+sh0*idx1[i1];
154
+ //printf("--- %d\n",i);
155
+ }
156
+ ib = i*nbit;
157
+ ns = ib / 8 - bskip; // start position i*nbit/8
158
+ nl = (ib+nbit-1) / 8 - bskip; // end position
159
+ w = ib % 8;
160
+ cn[0] = buf[ns] & mk[w]; // mask the first w bits
161
+ for(j=1; j<= nl-ns; j++){
162
+ cn[j] = buf[ns+j];
163
+ }
164
+ ival[k] = 0;
165
+ for(j=0; j<=nl-ns; j++){
166
+ b = w + nbit - (j+1)*8 ;
167
+ if (b>0) {
168
+ ival[k] += cn[j] * (one<<b); //cn[j]<<b (truncation-free)
169
+ } else if (b==0) {
170
+ ival[k] += cn[j];
171
+ } else {
172
+ ival[k] += cn[j] >> (-b);
173
+ }
174
+ }
175
+ //printf("%d %d\n",(int)k,ival[k]);
176
+ }
177
+ }
178
+ return(ival);
179
+ }
180
+ // Array -> C pointer with range checking (from Ruby-DCL)
181
+ static long *
182
+ ary2long(src, sh, len)
183
+ VALUE src;
184
+ long sh;
185
+ long *len;
186
+ {
187
+ VALUE *ptr;
188
+ long i;
189
+ long *rtn,x;
190
+
191
+ *len = RARRAY_LEN(src);
192
+ ptr = RARRAY_PTR(src);
193
+ rtn = ALLOC_N(long, *len);
194
+ for (i = 0; i < *len; i++) {
195
+ x = NUM2INT(ptr[i]);
196
+ if(x<-sh||x>=sh){rb_raise(rb_eArgError,
197
+ "%d-th index (%d) is not in the index range", i,x);}
198
+ if(x<0){x += sh;}
199
+ rtn[i] = x;
200
+ }
201
+ return rtn;
202
+ }
203
+
204
+ // NArray -> C pointer with range checking (from Ruby-DCL)
205
+ static long *
206
+ na2long(src, sh, len)
207
+ VALUE src;
208
+ long sh;
209
+ long *len;
210
+ {
211
+ VALUE chk;
212
+ long i;
213
+ long *rtn, x;
214
+ int32_t *ptr;
215
+
216
+ chk = rb_obj_is_kind_of(src, cNArray);
217
+ if (chk == Qfalse) {
218
+ rb_raise(rb_eTypeError, "expect an integer NArray");
219
+ }
220
+
221
+ src = na_cast_object(src, NA_LINT);
222
+ *len = NA_TOTAL(src);
223
+ ptr = NA_PTR_TYPE(src, int32_t *);
224
+ rtn = ALLOC_N(long, *len);
225
+ for (i = 0; i < *len; i++) {
226
+ x = (long)ptr[i];
227
+ if(x<-sh||x>=sh){rb_raise(rb_eArgError,
228
+ "%d-th index (%d) is not in the index range", i,x);}
229
+ if(x<0){x += sh;}
230
+ rtn[i] = x;
231
+ }
232
+
233
+ return rtn;
234
+ }
235
+
236
+ /*
237
+ = MultibitIO::read2D : A wrapper of multibit_read_2D.
238
+
239
+ In addtion to be a simple wrapper, a scaling facotor and
240
+ an offset can be specfied optionally:
241
+ The return value is sfloat NArray if factor and/or offset
242
+ is given (non-nil). Otherwise, it will be an integer NArray.
243
+
244
+ Also, [fls][01] can be nil if idx0 and/or idx1 is present.
245
+ */
246
+ static VALUE
247
+ wrp_multibit_read_2D(self, pos, nbit, sh0, sh1, f0, l0, s0, f1, l1, s1,
248
+ idx0, idx1, factor, offset )
249
+ VALUE self;
250
+ VALUE pos; // starting postion of the current 2D block in fp (bytes)
251
+ VALUE nbit; // number of bits of each data element (>= 0, integer)
252
+ VALUE sh0; // shape of the 2D array - lengths of the 1st D
253
+ VALUE sh1; // shape of the 2D array - lengths of the 2nd D
254
+ VALUE f0; // first index of the subset to read regarding the 1st D.
255
+ // nil ok if idx0 is non-nil (same for l0, s0).
256
+ VALUE f1; // first index of the subset to read regarding the 2nd D.
257
+ // nil ok if idx1 is non-nil (same for l1, s1).
258
+ VALUE l0; // last index of the subset to read regarding the 1st D.
259
+ VALUE l1; // last index of the subset to read regarding the 2nd D.
260
+ VALUE s0; // step of the subset to read regarding the 1st D.
261
+ VALUE s1; // step of the subset to read regarding the 2nd D.
262
+ VALUE idx0; // If non-nil, index map of the subset regarding the 1st D
263
+ // Then f0, s0, and l0 are automatically set (so nil ok)
264
+ VALUE idx1; // If non-nil, index map of the subset regarding the 2nd D
265
+ // Then f1, s1, and l1 are automatically set (so nil ok)
266
+ VALUE factor; // (optional) nil or scale_factor (Numeric)
267
+ VALUE offset; // (optional) nil oradd_offset (Numeric)
268
+ {
269
+ VALUE na;
270
+ struct multibit_IO *ptr;
271
+ FILE *fp; // binary file to read
272
+ long Pos; // starting postion of the current 2D block in fp (bytes)
273
+ long Nbit; // number of bits of each data element (>= 0, integer)
274
+ long Sh0; // shape of the 2D array - lengths of the 1st D
275
+ long Sh1; // shape of the 2D array - lengths of the 2nd D
276
+ long F0; // first index of the subset to read regarding the 1st D
277
+ long F1; // first index of the subset to read regarding the 2nd D
278
+ long L0; // last index of the subset to read regarding the 1st D
279
+ long L1; // last index of the subset to read regarding the 2nd D
280
+ long S0; // step of the subset to read regarding the 1st D
281
+ long S1; // step of the subset to read regarding the 2nd D
282
+ long *Idx0; // If non-NULL, index map of the subset regarding the 1st D
283
+ // Then f0, s0, and l0 must be 0, 1 and len-1 of idx0
284
+ long *Idx1; // If non-NULL, index map of the subset regarding the 2nd D
285
+ // Then f1, s1, and l1 must be 0, 1 and len-1 of idx1
286
+ int lens[2];
287
+ long len;
288
+ int32_t *ival;
289
+ float *fval;
290
+ float Factor, Offset;
291
+ long i;
292
+
293
+ Data_Get_Struct(self, struct multibit_IO, ptr);
294
+ fp = ptr->fp;
295
+
296
+ Pos = NUM2INT(pos);
297
+ Nbit = NUM2INT(nbit);
298
+ Sh0 = NUM2INT(sh0);
299
+ Sh1 = NUM2INT(sh1);
300
+ if (idx0 == Qnil){
301
+ F0 = NUM2INT(f0);
302
+ if(F0<-Sh0||F0>=Sh0){rb_raise(rb_eArgError,
303
+ "f0 (=%d) is not in the index range of the 1st dim", f0);}
304
+ if(F0<0){F0 += Sh0;}
305
+ L0 = NUM2INT(l0);
306
+ if(L0<-Sh0||L0>=Sh0){rb_raise(rb_eArgError,
307
+ "l0 (=%d) is not in the index range of the 1st dim", l0);}
308
+ if(L0<0){L0 += Sh0;}
309
+ S0 = NUM2INT(s0);
310
+ if(S0<=0){rb_raise(rb_eArgError,"s0 (step) must be positive integer");}
311
+ Idx0 = NULL;
312
+ } else {
313
+ switch (TYPE(idx0)) {
314
+ case T_ARRAY:
315
+ Idx0 = ary2long(idx0, Sh0, &len);
316
+ break;
317
+ case T_DATA:
318
+ Idx0 = na2long(idx0, Sh0, &len);
319
+ break;
320
+ default:
321
+ rb_raise(rb_eTypeError, "idx0 must be Array or NArray");
322
+ break;
323
+ }
324
+ F0 = 0;
325
+ L0 = len-1;
326
+ S0 = 1;
327
+ }
328
+
329
+ if (idx1 == Qnil){
330
+ F1 = NUM2INT(f1);
331
+ if(F1<-Sh1||F1>=Sh1){rb_raise(rb_eArgError,
332
+ "f1 (=%d) is not in the index range of the 2nd dim", f1);}
333
+ if(F1<0){F1 += Sh1;}
334
+ L1 = NUM2INT(l1);
335
+ if(L1<-Sh1||L1>=Sh1){rb_raise(rb_eArgError,
336
+ "l1 (=%d) is not in the index range of the 2nd dim", l1);}
337
+ if(L1<0){L1 += Sh1;}
338
+ S1 = NUM2INT(s1);
339
+ if(S1<=0){rb_raise(rb_eArgError,"s1 (step) must be positive integer");}
340
+ Idx1 = NULL;
341
+ } else {
342
+ switch (TYPE(idx1)) {
343
+ case T_ARRAY:
344
+ Idx1 = ary2long(idx1, Sh1, &len);
345
+ break;
346
+ case T_DATA:
347
+ Idx1 = na2long(idx1, Sh1, &len);
348
+ break;
349
+ default:
350
+ rb_raise(rb_eTypeError, "idx1 must be Array or NArray");
351
+ break;
352
+ }
353
+ F1 = 0;
354
+ L1 = len-1;
355
+ S1 = 1;
356
+ }
357
+
358
+ lens[0] = (L0-F0)/S0+1;
359
+ lens[1] = (L1-F1)/S1+1;
360
+
361
+ if (factor==Qnil && offset==Qnil){
362
+ na = na_make_object(NA_LINT, 2, lens, cNArray);
363
+ ival = NA_PTR_TYPE(na, int32_t *);
364
+ } else {
365
+ na = na_make_object(NA_SFLOAT, 2, lens, cNArray);
366
+ ival = NULL; // then it is allocated in the following
367
+ fval = NA_PTR_TYPE(na, float *);
368
+ }
369
+
370
+ ival = multibit_read_2D(fp, Pos, Nbit, Sh0, Sh1, F0, L0, S0, F1, L1, S1,
371
+ Idx0,Idx1,ival);
372
+
373
+ if (factor!=Qnil || offset!=Qnil){
374
+ if (factor!=Qnil) {
375
+ Factor = NUM2DBL(factor);
376
+ } else {
377
+ Factor = 1.0;
378
+ }
379
+ if (offset!=Qnil) {
380
+ Offset = NUM2DBL(offset);
381
+ } else {
382
+ Offset = 0.0;
383
+ }
384
+ for(i=0; i<lens[0]*lens[1]; i++){
385
+ fval[i] = ival[i]*Factor + Offset;
386
+ }
387
+ free(ival);
388
+ }
389
+
390
+
391
+ return(na);
392
+ }
393
+
394
+
395
+ static uint
396
+ str_to_uint1(unsigned char *ptr)
397
+ {
398
+ uint i0 = ptr[0];
399
+ return i0;
400
+ }
401
+ static uint
402
+ str_to_uint2(unsigned char *ptr)
403
+ {
404
+ uint i0 = ptr[0];
405
+ uint i1 = ptr[1];
406
+ return (i0<<8) + i1;
407
+ }
408
+ static uint
409
+ str_to_uint3(unsigned char *ptr)
410
+ {
411
+ uint i0 = ptr[0];
412
+ uint i1 = ptr[1];
413
+ uint i2 = ptr[2];
414
+ return (i0<<16) + (i1<<8) + i2;
415
+ }
416
+ #define STR2UINT(num) \
417
+ static VALUE \
418
+ rb_str_to_uint##num(int argc, VALUE *argv, VALUE self) \
419
+ { \
420
+ if (argc > 1) { \
421
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc); \
422
+ } \
423
+ unsigned char *ptr = (unsigned char*)StringValuePtr(self); \
424
+ if (argc == 1) { \
425
+ unsigned long n = FIX2UINT(argv[0]); \
426
+ if (n >= RSTRING_LEN(self)) { \
427
+ rb_raise(rb_eArgError, "out of index"); \
428
+ } \
429
+ ptr += n; \
430
+ } \
431
+ uint i = str_to_uint##num(ptr); \
432
+ return UINT2NUM(i); \
433
+ }
434
+ STR2UINT(1)
435
+ STR2UINT(2)
436
+ STR2UINT(3)
437
+
438
+
439
+ void
440
+ init_gphys_multibitIO()
441
+ {
442
+ VALUE mNumRu;
443
+ VALUE cMultibitIO;
444
+
445
+ mNumRu = rb_define_module("NumRu");
446
+ cMultibitIO = rb_define_class_under(mNumRu,"MultibitIO", rb_cObject);
447
+ rb_define_alloc_func(cMultibitIO, multibit_IO_alloc);
448
+ rb_define_private_method(cMultibitIO, "initialize", multibit_IO_initialize, 1);
449
+ rb_define_method(cMultibitIO, "read2D", wrp_multibit_read_2D, 14);
450
+ // rb_define_method(cMultibitIO, "close", multibit_IO_close, 0);
451
+ ///^^ conflicts with the multibit_IO_closer call by GC
452
+
453
+ rb_define_method(rb_cString, "to_uint1", rb_str_to_uint1, -1);
454
+ rb_define_method(rb_cString, "to_uint2", rb_str_to_uint2, -1);
455
+ rb_define_method(rb_cString, "to_uint3", rb_str_to_uint3, -1);
456
+
457
+ }
458
+
459
+ //-------------------------------
460
+
461
+ #ifdef MAKETESTDATA
462
+
463
+ /*-----------------------------------------------------------------
464
+ * Test part : To compile, remove -c option and add -DMAKETESTDATA
465
+ *----------------------------------------------------------------*/
466
+
467
+ static void
468
+ create(fp, headskip, nbit, sh0, sh1)
469
+ FILE *fp;
470
+ long headskip;
471
+ long nbit;
472
+ long sh0;
473
+ long sh1;
474
+ {
475
+ unsigned int *ival, iv;
476
+ unsigned char * buf, cn;
477
+ long sz, size;
478
+ long len;
479
+ long i, ns, nl, j, ib;
480
+ int w, b;
481
+ unsigned char mk[8] = {0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01};
482
+ // bit mask. in binary, 01111111, 00111111, 00011111,..., 00000001
483
+ unsigned int one = 1;
484
+
485
+ for(i=0; i<headskip; i++){
486
+ sz = fwrite("-",1,1,fp); // fill with "-" over headskip bytes
487
+ }
488
+
489
+ size = ( (sh0*sh1+1)*nbit -1 ) / 8 + 1;
490
+ buf = (unsigned char *) malloc( size );
491
+
492
+ len = sh0*sh1;
493
+ ival = (unsigned int *) malloc(len*sizeof(unsigned int));
494
+
495
+ for(i=0; i<len; i++){
496
+ ival[i] = (i%sh0) + i/sh0;
497
+ //printf("%x ",ival[i]);
498
+ }
499
+ //printf("\n");
500
+
501
+ for(i=0; i<len; i++){
502
+ ib = i*nbit;
503
+ ns = ib / 8; // start position i*nbit/8
504
+ nl = (ib+nbit-1) / 8; // end position
505
+ w = ib % 8;
506
+ //printf("%d: ",(int)i);
507
+ for(j=0; j<= nl-ns; j++){
508
+ b = w + nbit - (j+1)*8;
509
+ //printf(" (%d)",b);
510
+ if(b>=0){
511
+ cn = ival[i] / (one<<b);
512
+ } else{
513
+ cn = ival[i] * (one<<(-b));
514
+ }
515
+ if(j==0){
516
+ buf[ns] = (buf[ns] & ~mk[w]) + cn;
517
+ } else {
518
+ buf[ns+j] = cn;
519
+ }
520
+ //printf(" %d %x ",(int)(ns+j),buf[ns+j]);
521
+ }
522
+ //printf("\n");
523
+ }
524
+
525
+ sz = fwrite(buf,1,size,fp);
526
+
527
+ for(j=0; j<size; j++){
528
+ printf("%02x ",buf[j]);
529
+ }
530
+ printf("\n");
531
+
532
+ free(buf);
533
+ free(ival);
534
+ }
535
+
536
+ int main()
537
+ {
538
+ FILE *fp;
539
+ long headskip = 12;
540
+ long nbit = 15;
541
+ long sh0 = 100;
542
+ long sh1 = 100;
543
+ long pos;
544
+ char fnm[100] = "mltbit.dat";
545
+ long f0=1, l0=91, s0=10, f1=2, l1=5, s1=3;
546
+ long idx0[3] = {3,8,0};
547
+ long idx1[4] = {0,1,90,3};
548
+ int32_t *ival;
549
+
550
+ fp = fopen(fnm,"wb");
551
+ create(fp, headskip, nbit, sh0, sh1);
552
+ fclose(fp);
553
+
554
+ fp = fopen(fnm,"rb");
555
+ pos = headskip;
556
+ printf("-------------\n");
557
+ ival = multibit_read_2D(fp, pos, nbit, sh0, sh1, f0, l0, s0, f1, l1, s1,
558
+ NULL, NULL, NULL);
559
+ printf("-------------\n");
560
+ ival = multibit_read_2D(fp, pos, nbit, sh0, sh1, 0, 3-1, 1, 0, 4-1, 1,
561
+ idx0, idx1, NULL);
562
+ fclose(fp);
563
+
564
+ return(0);
565
+ }
566
+
567
+ #endif
@@ -0,0 +1,122 @@
1
+ =begin
2
+ =cira86_to_nc.rb
3
+
4
+ Read the CIRA86 data file, make corresponding GPhys objects,
5
+ and write into a NetCDF file.
6
+
7
+ ==Usage
8
+
9
+ The following will create a NetCDF file 'cira86.nc' under the current
10
+ directory.
11
+
12
+ % ruby cira86_to_nc.rb
13
+ =end
14
+
15
+ require 'numru/gphys'
16
+
17
+ #<< read CIRA data >>
18
+
19
+ file = File.open('../testdata/cira86.dat')
20
+
21
+ nlat = 17
22
+ nht = 36
23
+ nmon = 12
24
+ cira_miss_val = 999.0
25
+
26
+ lat, lat_units = NArray.sfloat(nlat), 'degrees' # latitude
27
+ ht, ht_units = NArray.sfloat(nht), 'km' # height
28
+ mon, mon_units = NArray.sfloat(nmon), 'month' # month
29
+ prs, prs_units = NArray.sfloat(nht), 'hPa' # pressure
30
+ temp,temp_units = NArray.sfloat(nht,nlat,nmon), 'K' # temperature
31
+ gph, gph_units = NArray.sfloat(nht,nlat,nmon), 'km' # geopot. height
32
+ west,west_units = NArray.sfloat(nht,nlat,nmon),'m/s' #eastward(westerly) wind
33
+
34
+ mon.indgen!.add!(1) # => 1..12
35
+ lat=(lat.indgen!-8)*10 # => -80,-70,...,80
36
+
37
+ print "Reading the CIRA86 data file...\n"
38
+ for imon in 0...nmon
39
+ dummy = file.gets
40
+ for iht in 0...nht
41
+ data = file.gets.strip.split(/ +/).collect{|v| v.to_f}
42
+ ht[iht] = data.shift
43
+ prs[iht] = data.shift
44
+ temp[iht,true,imon] = data
45
+ end
46
+ dummy = file.gets
47
+ for iht in 0...nht
48
+ data = file.gets.strip.split(/ +/).collect{|v| v.to_f}
49
+ gph[iht,true,imon] = data[2..-1]
50
+ end
51
+ dummy = file.gets
52
+ for iht in 0...nht
53
+ data = file.gets.strip.split(/ +/).collect{|v| v.to_f}
54
+ west[iht,true,imon] = data[2..-1]
55
+ end
56
+ end
57
+
58
+ temp = temp.transpose(1,0,2) # => [lat,ht,mon]
59
+ gph = gph.transpose(1,0,2) # => [lat,ht,mon]
60
+ west = west.transpose(1,0,2) # => [lat,ht,mon]
61
+
62
+ #<< change missing value to a large value >>
63
+
64
+ gp_miss_val = 2e30
65
+ valid_max = 1e30
66
+ temp[temp.eq(cira_miss_val)] = gp_miss_val
67
+ gph[gph.eq(cira_miss_val)] = gp_miss_val
68
+ west[west.eq(cira_miss_val)] = gp_miss_val
69
+
70
+ #<< into GPhys >>
71
+
72
+ include NumRu
73
+
74
+ lat_ax = Axis.new.set_pos(
75
+ VArray.new(lat,nil,'lat').set_att('units',lat_units).
76
+ set_att('long_name','latitude')
77
+ )
78
+ ht_ax = Axis.new.set_pos(
79
+ VArray.new(ht,nil,'ht').set_att('units',ht_units).
80
+ set_att('long_name','height')
81
+ )
82
+ ht_ax.set_aux('pressure',
83
+ VArray.new(prs,nil,'prs').set_att('units',prs_units).
84
+ set_att('long_name','pressure')
85
+ )
86
+ mon_ax = Axis.new.set_pos(
87
+ VArray.new(mon,nil,'mon').set_att('units',mon_units).
88
+ set_att('long_name','calendar month')
89
+ )
90
+
91
+ grid = Grid.new(lat_ax, ht_ax, mon_ax)
92
+
93
+ gp_miss_val = NArray.sfloat(1).fill!(gp_miss_val)
94
+ valid_max = NArray.sfloat(1).fill!(valid_max)
95
+
96
+ temp_gp = GPhys.new( grid,
97
+ VArray.new(temp,nil,'temp').set_att('units',temp_units).
98
+ set_att('long_name','temperature').
99
+ set_att('valid_max',valid_max).set_att('missing_value',gp_miss_val)
100
+ )
101
+ gph_gp = GPhys.new( grid,
102
+ VArray.new(gph,nil,'gph').set_att('units',gph_units).
103
+ set_att('long_name','geoptential height').
104
+ set_att('valid_max',valid_max).set_att('missing_value',gp_miss_val)
105
+ )
106
+ west_gp = GPhys.new( grid,
107
+ VArray.new(west,nil,'west').set_att('units',west_units).
108
+ set_att('long_name','westerly wind').
109
+ set_att('valid_max',valid_max).set_att('missing_value',gp_miss_val)
110
+ )
111
+ print "...GPhys created: #{temp_gp.name}, #{gph_gp.name}, #{west_gp.name}\n"
112
+
113
+ #<<into a NetCDF file>>
114
+
115
+ ofilename = 'cira86.nc'
116
+ print "Writing into #{ofilename}...\n"
117
+ file = NetCDF.create(ofilename)
118
+ GPhys::NetCDF_IO.write(file,temp_gp)
119
+ GPhys::NetCDF_IO.write(file,gph_gp)
120
+ GPhys::NetCDF_IO.write(file,west_gp)
121
+ file.close
122
+ print "...done\n"
@@ -0,0 +1,21 @@
1
+ # druby_cli1.rb -- a sample dRuby client
2
+ #
3
+ # USAGE
4
+ # See ./druby_serv1.rb
5
+
6
+ require "drb/drb"
7
+
8
+ DRb.start_service
9
+ uri = ARGV.shift || raise("Usage: % #{$0} uri")
10
+ gp = DRbObject.new(nil, uri)
11
+
12
+ p gp.class, gp.name, gp.rank, gp.length
13
+ p gp.grid.axis(0).pos.name
14
+
15
+ gps = gp[0,true,true]
16
+ p gps.class, gps.name, gps.rank, gps.length
17
+ p gps.grid.axis(0).pos.name
18
+
19
+ gpmean = gp[true,true,0].mean(0)
20
+ p gpmean.class, gpmean.name, gpmean.rank, gpmean.length
21
+ p gpmean.grid.axis(0).pos.name