gphys 1.1.1a

Sign up to get free protection for your applications and to get access to all the features.
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