gphys 1.2.2.1 → 1.4.3

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 (405) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -17
  3. data/.rspec +2 -0
  4. data/.travis.yml +3 -0
  5. data/ChangeLog +5762 -753
  6. data/LICENSE.txt +30 -18
  7. data/Rakefile +1 -0
  8. data/bin/console +14 -0
  9. data/bin/gpcat +43 -2
  10. data/bin/gpcut +16 -0
  11. data/bin/gpvect +167 -15
  12. data/bin/gpview +254 -51
  13. data/bin/setup +7 -0
  14. data/dim_op.c +1220 -0
  15. data/doc/attribute.html +19 -0
  16. data/doc/attributenetcdf.html +15 -0
  17. data/doc/axis.html +387 -0
  18. data/doc/coordmapping.html +111 -0
  19. data/doc/coordtransform.html +36 -0
  20. data/doc/dclext.html +821 -0
  21. data/doc/derivative/gphys-derivative.html +100 -0
  22. data/doc/derivative/index.html +21 -0
  23. data/doc/derivative/index.rd +14 -0
  24. data/doc/derivative/math-doc/document.pdf +0 -0
  25. data/doc/derivative/math-doc/document.tex +158 -0
  26. data/doc/derivative/math-doc/document/document.css +30 -0
  27. data/doc/derivative/math-doc/document/document.html +57 -0
  28. data/doc/derivative/math-doc/document/images.aux +1 -0
  29. data/doc/derivative/math-doc/document/images.log +385 -0
  30. data/doc/derivative/math-doc/document/images.pl +186 -0
  31. data/doc/derivative/math-doc/document/images.tex +364 -0
  32. data/doc/derivative/math-doc/document/img1.png +0 -0
  33. data/doc/derivative/math-doc/document/img10.png +0 -0
  34. data/doc/derivative/math-doc/document/img11.png +0 -0
  35. data/doc/derivative/math-doc/document/img12.png +0 -0
  36. data/doc/derivative/math-doc/document/img13.png +0 -0
  37. data/doc/derivative/math-doc/document/img14.png +0 -0
  38. data/doc/derivative/math-doc/document/img15.png +0 -0
  39. data/doc/derivative/math-doc/document/img16.png +0 -0
  40. data/doc/derivative/math-doc/document/img17.png +0 -0
  41. data/doc/derivative/math-doc/document/img18.png +0 -0
  42. data/doc/derivative/math-doc/document/img19.png +0 -0
  43. data/doc/derivative/math-doc/document/img2.png +0 -0
  44. data/doc/derivative/math-doc/document/img20.png +0 -0
  45. data/doc/derivative/math-doc/document/img21.png +0 -0
  46. data/doc/derivative/math-doc/document/img22.png +0 -0
  47. data/doc/derivative/math-doc/document/img23.png +0 -0
  48. data/doc/derivative/math-doc/document/img24.png +0 -0
  49. data/doc/derivative/math-doc/document/img25.png +0 -0
  50. data/doc/derivative/math-doc/document/img26.png +0 -0
  51. data/doc/derivative/math-doc/document/img27.png +0 -0
  52. data/doc/derivative/math-doc/document/img28.png +0 -0
  53. data/doc/derivative/math-doc/document/img29.png +0 -0
  54. data/doc/derivative/math-doc/document/img3.png +0 -0
  55. data/doc/derivative/math-doc/document/img30.png +0 -0
  56. data/doc/derivative/math-doc/document/img4.png +0 -0
  57. data/doc/derivative/math-doc/document/img5.png +0 -0
  58. data/doc/derivative/math-doc/document/img6.png +0 -0
  59. data/doc/derivative/math-doc/document/img7.png +0 -0
  60. data/doc/derivative/math-doc/document/img8.png +0 -0
  61. data/doc/derivative/math-doc/document/img9.png +0 -0
  62. data/doc/derivative/math-doc/document/index.html +57 -0
  63. data/doc/derivative/math-doc/document/labels.pl +13 -0
  64. data/doc/derivative/math-doc/document/next.png +0 -0
  65. data/doc/derivative/math-doc/document/next_g.png +0 -0
  66. data/doc/derivative/math-doc/document/node1.html +238 -0
  67. data/doc/derivative/math-doc/document/node2.html +75 -0
  68. data/doc/derivative/math-doc/document/prev.png +0 -0
  69. data/doc/derivative/math-doc/document/prev_g.png +0 -0
  70. data/doc/derivative/math-doc/document/up.png +0 -0
  71. data/doc/derivative/math-doc/document/up_g.png +0 -0
  72. data/doc/derivative/numru-derivative.html +158 -0
  73. data/doc/ep_flux/ep_flux.html +469 -0
  74. data/doc/ep_flux/ggraph_on_merdional_section.html +71 -0
  75. data/doc/ep_flux/index.html +31 -0
  76. data/doc/ep_flux/index.rd +24 -0
  77. data/doc/ep_flux/math-doc/document.pdf +0 -0
  78. data/doc/ep_flux/math-doc/document.tex +2018 -0
  79. data/doc/ep_flux/math-doc/document/WARNINGS +1 -0
  80. data/doc/ep_flux/math-doc/document/contents.png +0 -0
  81. data/doc/ep_flux/math-doc/document/crossref.png +0 -0
  82. data/doc/ep_flux/math-doc/document/document.css +30 -0
  83. data/doc/ep_flux/math-doc/document/document.html +101 -0
  84. data/doc/ep_flux/math-doc/document/images.aux +1 -0
  85. data/doc/ep_flux/math-doc/document/images.log +1375 -0
  86. data/doc/ep_flux/math-doc/document/images.pl +1328 -0
  87. data/doc/ep_flux/math-doc/document/images.tex +1471 -0
  88. data/doc/ep_flux/math-doc/document/img1.png +0 -0
  89. data/doc/ep_flux/math-doc/document/img10.png +0 -0
  90. data/doc/ep_flux/math-doc/document/img100.png +0 -0
  91. data/doc/ep_flux/math-doc/document/img101.png +0 -0
  92. data/doc/ep_flux/math-doc/document/img102.png +0 -0
  93. data/doc/ep_flux/math-doc/document/img103.png +0 -0
  94. data/doc/ep_flux/math-doc/document/img104.png +0 -0
  95. data/doc/ep_flux/math-doc/document/img105.png +0 -0
  96. data/doc/ep_flux/math-doc/document/img106.png +0 -0
  97. data/doc/ep_flux/math-doc/document/img107.png +0 -0
  98. data/doc/ep_flux/math-doc/document/img108.png +0 -0
  99. data/doc/ep_flux/math-doc/document/img109.png +0 -0
  100. data/doc/ep_flux/math-doc/document/img11.png +0 -0
  101. data/doc/ep_flux/math-doc/document/img110.png +0 -0
  102. data/doc/ep_flux/math-doc/document/img111.png +0 -0
  103. data/doc/ep_flux/math-doc/document/img112.png +0 -0
  104. data/doc/ep_flux/math-doc/document/img113.png +0 -0
  105. data/doc/ep_flux/math-doc/document/img114.png +0 -0
  106. data/doc/ep_flux/math-doc/document/img115.png +0 -0
  107. data/doc/ep_flux/math-doc/document/img116.png +0 -0
  108. data/doc/ep_flux/math-doc/document/img117.png +0 -0
  109. data/doc/ep_flux/math-doc/document/img118.png +0 -0
  110. data/doc/ep_flux/math-doc/document/img119.png +0 -0
  111. data/doc/ep_flux/math-doc/document/img12.png +0 -0
  112. data/doc/ep_flux/math-doc/document/img120.png +0 -0
  113. data/doc/ep_flux/math-doc/document/img121.png +0 -0
  114. data/doc/ep_flux/math-doc/document/img122.png +0 -0
  115. data/doc/ep_flux/math-doc/document/img123.png +0 -0
  116. data/doc/ep_flux/math-doc/document/img124.png +0 -0
  117. data/doc/ep_flux/math-doc/document/img125.png +0 -0
  118. data/doc/ep_flux/math-doc/document/img126.png +0 -0
  119. data/doc/ep_flux/math-doc/document/img127.png +0 -0
  120. data/doc/ep_flux/math-doc/document/img128.png +0 -0
  121. data/doc/ep_flux/math-doc/document/img129.png +0 -0
  122. data/doc/ep_flux/math-doc/document/img13.png +0 -0
  123. data/doc/ep_flux/math-doc/document/img130.png +0 -0
  124. data/doc/ep_flux/math-doc/document/img131.png +0 -0
  125. data/doc/ep_flux/math-doc/document/img132.png +0 -0
  126. data/doc/ep_flux/math-doc/document/img133.png +0 -0
  127. data/doc/ep_flux/math-doc/document/img134.png +0 -0
  128. data/doc/ep_flux/math-doc/document/img135.png +0 -0
  129. data/doc/ep_flux/math-doc/document/img136.png +0 -0
  130. data/doc/ep_flux/math-doc/document/img137.png +0 -0
  131. data/doc/ep_flux/math-doc/document/img138.png +0 -0
  132. data/doc/ep_flux/math-doc/document/img139.png +0 -0
  133. data/doc/ep_flux/math-doc/document/img14.png +0 -0
  134. data/doc/ep_flux/math-doc/document/img140.png +0 -0
  135. data/doc/ep_flux/math-doc/document/img141.png +0 -0
  136. data/doc/ep_flux/math-doc/document/img142.png +0 -0
  137. data/doc/ep_flux/math-doc/document/img143.png +0 -0
  138. data/doc/ep_flux/math-doc/document/img144.png +0 -0
  139. data/doc/ep_flux/math-doc/document/img145.png +0 -0
  140. data/doc/ep_flux/math-doc/document/img146.png +0 -0
  141. data/doc/ep_flux/math-doc/document/img147.png +0 -0
  142. data/doc/ep_flux/math-doc/document/img148.png +0 -0
  143. data/doc/ep_flux/math-doc/document/img149.png +0 -0
  144. data/doc/ep_flux/math-doc/document/img15.png +0 -0
  145. data/doc/ep_flux/math-doc/document/img150.png +0 -0
  146. data/doc/ep_flux/math-doc/document/img151.png +0 -0
  147. data/doc/ep_flux/math-doc/document/img152.png +0 -0
  148. data/doc/ep_flux/math-doc/document/img153.png +0 -0
  149. data/doc/ep_flux/math-doc/document/img154.png +0 -0
  150. data/doc/ep_flux/math-doc/document/img155.png +0 -0
  151. data/doc/ep_flux/math-doc/document/img156.png +0 -0
  152. data/doc/ep_flux/math-doc/document/img157.png +0 -0
  153. data/doc/ep_flux/math-doc/document/img158.png +0 -0
  154. data/doc/ep_flux/math-doc/document/img159.png +0 -0
  155. data/doc/ep_flux/math-doc/document/img16.png +0 -0
  156. data/doc/ep_flux/math-doc/document/img160.png +0 -0
  157. data/doc/ep_flux/math-doc/document/img161.png +0 -0
  158. data/doc/ep_flux/math-doc/document/img162.png +0 -0
  159. data/doc/ep_flux/math-doc/document/img163.png +0 -0
  160. data/doc/ep_flux/math-doc/document/img164.png +0 -0
  161. data/doc/ep_flux/math-doc/document/img165.png +0 -0
  162. data/doc/ep_flux/math-doc/document/img166.png +0 -0
  163. data/doc/ep_flux/math-doc/document/img167.png +0 -0
  164. data/doc/ep_flux/math-doc/document/img168.png +0 -0
  165. data/doc/ep_flux/math-doc/document/img169.png +0 -0
  166. data/doc/ep_flux/math-doc/document/img17.png +0 -0
  167. data/doc/ep_flux/math-doc/document/img170.png +0 -0
  168. data/doc/ep_flux/math-doc/document/img171.png +0 -0
  169. data/doc/ep_flux/math-doc/document/img172.png +0 -0
  170. data/doc/ep_flux/math-doc/document/img173.png +0 -0
  171. data/doc/ep_flux/math-doc/document/img174.png +0 -0
  172. data/doc/ep_flux/math-doc/document/img175.png +0 -0
  173. data/doc/ep_flux/math-doc/document/img176.png +0 -0
  174. data/doc/ep_flux/math-doc/document/img177.png +0 -0
  175. data/doc/ep_flux/math-doc/document/img178.png +0 -0
  176. data/doc/ep_flux/math-doc/document/img179.png +0 -0
  177. data/doc/ep_flux/math-doc/document/img18.png +0 -0
  178. data/doc/ep_flux/math-doc/document/img180.png +0 -0
  179. data/doc/ep_flux/math-doc/document/img181.png +0 -0
  180. data/doc/ep_flux/math-doc/document/img182.png +0 -0
  181. data/doc/ep_flux/math-doc/document/img183.png +0 -0
  182. data/doc/ep_flux/math-doc/document/img184.png +0 -0
  183. data/doc/ep_flux/math-doc/document/img185.png +0 -0
  184. data/doc/ep_flux/math-doc/document/img186.png +0 -0
  185. data/doc/ep_flux/math-doc/document/img187.png +0 -0
  186. data/doc/ep_flux/math-doc/document/img188.png +0 -0
  187. data/doc/ep_flux/math-doc/document/img189.png +0 -0
  188. data/doc/ep_flux/math-doc/document/img19.png +0 -0
  189. data/doc/ep_flux/math-doc/document/img190.png +0 -0
  190. data/doc/ep_flux/math-doc/document/img191.png +0 -0
  191. data/doc/ep_flux/math-doc/document/img192.png +0 -0
  192. data/doc/ep_flux/math-doc/document/img193.png +0 -0
  193. data/doc/ep_flux/math-doc/document/img194.png +0 -0
  194. data/doc/ep_flux/math-doc/document/img195.png +0 -0
  195. data/doc/ep_flux/math-doc/document/img196.png +0 -0
  196. data/doc/ep_flux/math-doc/document/img197.png +0 -0
  197. data/doc/ep_flux/math-doc/document/img198.png +0 -0
  198. data/doc/ep_flux/math-doc/document/img199.png +0 -0
  199. data/doc/ep_flux/math-doc/document/img2.png +0 -0
  200. data/doc/ep_flux/math-doc/document/img20.png +0 -0
  201. data/doc/ep_flux/math-doc/document/img200.png +0 -0
  202. data/doc/ep_flux/math-doc/document/img21.png +0 -0
  203. data/doc/ep_flux/math-doc/document/img22.png +0 -0
  204. data/doc/ep_flux/math-doc/document/img23.png +0 -0
  205. data/doc/ep_flux/math-doc/document/img24.png +0 -0
  206. data/doc/ep_flux/math-doc/document/img25.png +0 -0
  207. data/doc/ep_flux/math-doc/document/img26.png +0 -0
  208. data/doc/ep_flux/math-doc/document/img27.png +0 -0
  209. data/doc/ep_flux/math-doc/document/img28.png +0 -0
  210. data/doc/ep_flux/math-doc/document/img29.png +0 -0
  211. data/doc/ep_flux/math-doc/document/img3.png +0 -0
  212. data/doc/ep_flux/math-doc/document/img30.png +0 -0
  213. data/doc/ep_flux/math-doc/document/img31.png +0 -0
  214. data/doc/ep_flux/math-doc/document/img32.png +0 -0
  215. data/doc/ep_flux/math-doc/document/img33.png +0 -0
  216. data/doc/ep_flux/math-doc/document/img34.png +0 -0
  217. data/doc/ep_flux/math-doc/document/img35.png +0 -0
  218. data/doc/ep_flux/math-doc/document/img36.png +0 -0
  219. data/doc/ep_flux/math-doc/document/img37.png +0 -0
  220. data/doc/ep_flux/math-doc/document/img38.png +0 -0
  221. data/doc/ep_flux/math-doc/document/img39.png +0 -0
  222. data/doc/ep_flux/math-doc/document/img4.png +0 -0
  223. data/doc/ep_flux/math-doc/document/img40.png +0 -0
  224. data/doc/ep_flux/math-doc/document/img41.png +0 -0
  225. data/doc/ep_flux/math-doc/document/img42.png +0 -0
  226. data/doc/ep_flux/math-doc/document/img43.png +0 -0
  227. data/doc/ep_flux/math-doc/document/img44.png +0 -0
  228. data/doc/ep_flux/math-doc/document/img45.png +0 -0
  229. data/doc/ep_flux/math-doc/document/img46.png +0 -0
  230. data/doc/ep_flux/math-doc/document/img47.png +0 -0
  231. data/doc/ep_flux/math-doc/document/img48.png +0 -0
  232. data/doc/ep_flux/math-doc/document/img49.png +0 -0
  233. data/doc/ep_flux/math-doc/document/img5.png +0 -0
  234. data/doc/ep_flux/math-doc/document/img50.png +0 -0
  235. data/doc/ep_flux/math-doc/document/img51.png +0 -0
  236. data/doc/ep_flux/math-doc/document/img52.png +0 -0
  237. data/doc/ep_flux/math-doc/document/img53.png +0 -0
  238. data/doc/ep_flux/math-doc/document/img54.png +0 -0
  239. data/doc/ep_flux/math-doc/document/img55.png +0 -0
  240. data/doc/ep_flux/math-doc/document/img56.png +0 -0
  241. data/doc/ep_flux/math-doc/document/img57.png +0 -0
  242. data/doc/ep_flux/math-doc/document/img58.png +0 -0
  243. data/doc/ep_flux/math-doc/document/img59.png +0 -0
  244. data/doc/ep_flux/math-doc/document/img6.png +0 -0
  245. data/doc/ep_flux/math-doc/document/img60.png +0 -0
  246. data/doc/ep_flux/math-doc/document/img61.png +0 -0
  247. data/doc/ep_flux/math-doc/document/img62.png +0 -0
  248. data/doc/ep_flux/math-doc/document/img63.png +0 -0
  249. data/doc/ep_flux/math-doc/document/img64.png +0 -0
  250. data/doc/ep_flux/math-doc/document/img65.png +0 -0
  251. data/doc/ep_flux/math-doc/document/img66.png +0 -0
  252. data/doc/ep_flux/math-doc/document/img67.png +0 -0
  253. data/doc/ep_flux/math-doc/document/img68.png +0 -0
  254. data/doc/ep_flux/math-doc/document/img69.png +0 -0
  255. data/doc/ep_flux/math-doc/document/img7.png +0 -0
  256. data/doc/ep_flux/math-doc/document/img70.png +0 -0
  257. data/doc/ep_flux/math-doc/document/img71.png +0 -0
  258. data/doc/ep_flux/math-doc/document/img72.png +0 -0
  259. data/doc/ep_flux/math-doc/document/img73.png +0 -0
  260. data/doc/ep_flux/math-doc/document/img74.png +0 -0
  261. data/doc/ep_flux/math-doc/document/img75.png +0 -0
  262. data/doc/ep_flux/math-doc/document/img76.png +0 -0
  263. data/doc/ep_flux/math-doc/document/img77.png +0 -0
  264. data/doc/ep_flux/math-doc/document/img78.png +0 -0
  265. data/doc/ep_flux/math-doc/document/img79.png +0 -0
  266. data/doc/ep_flux/math-doc/document/img8.png +0 -0
  267. data/doc/ep_flux/math-doc/document/img80.png +0 -0
  268. data/doc/ep_flux/math-doc/document/img81.png +0 -0
  269. data/doc/ep_flux/math-doc/document/img82.png +0 -0
  270. data/doc/ep_flux/math-doc/document/img83.png +0 -0
  271. data/doc/ep_flux/math-doc/document/img84.png +0 -0
  272. data/doc/ep_flux/math-doc/document/img85.png +0 -0
  273. data/doc/ep_flux/math-doc/document/img86.png +0 -0
  274. data/doc/ep_flux/math-doc/document/img87.png +0 -0
  275. data/doc/ep_flux/math-doc/document/img88.png +0 -0
  276. data/doc/ep_flux/math-doc/document/img89.png +0 -0
  277. data/doc/ep_flux/math-doc/document/img9.png +0 -0
  278. data/doc/ep_flux/math-doc/document/img90.png +0 -0
  279. data/doc/ep_flux/math-doc/document/img91.png +0 -0
  280. data/doc/ep_flux/math-doc/document/img92.png +0 -0
  281. data/doc/ep_flux/math-doc/document/img93.png +0 -0
  282. data/doc/ep_flux/math-doc/document/img94.png +0 -0
  283. data/doc/ep_flux/math-doc/document/img95.png +0 -0
  284. data/doc/ep_flux/math-doc/document/img96.png +0 -0
  285. data/doc/ep_flux/math-doc/document/img97.png +0 -0
  286. data/doc/ep_flux/math-doc/document/img98.png +0 -0
  287. data/doc/ep_flux/math-doc/document/img99.png +0 -0
  288. data/doc/ep_flux/math-doc/document/index.html +101 -0
  289. data/doc/ep_flux/math-doc/document/internals.pl +258 -0
  290. data/doc/ep_flux/math-doc/document/labels.pl +265 -0
  291. data/doc/ep_flux/math-doc/document/next.png +0 -0
  292. data/doc/ep_flux/math-doc/document/next_g.png +0 -0
  293. data/doc/ep_flux/math-doc/document/node1.html +104 -0
  294. data/doc/ep_flux/math-doc/document/node10.html +164 -0
  295. data/doc/ep_flux/math-doc/document/node11.html +86 -0
  296. data/doc/ep_flux/math-doc/document/node12.html +166 -0
  297. data/doc/ep_flux/math-doc/document/node13.html +897 -0
  298. data/doc/ep_flux/math-doc/document/node14.html +1065 -0
  299. data/doc/ep_flux/math-doc/document/node15.html +72 -0
  300. data/doc/ep_flux/math-doc/document/node16.html +81 -0
  301. data/doc/ep_flux/math-doc/document/node2.html +82 -0
  302. data/doc/ep_flux/math-doc/document/node3.html +91 -0
  303. data/doc/ep_flux/math-doc/document/node4.html +149 -0
  304. data/doc/ep_flux/math-doc/document/node5.html +330 -0
  305. data/doc/ep_flux/math-doc/document/node6.html +99 -0
  306. data/doc/ep_flux/math-doc/document/node7.html +98 -0
  307. data/doc/ep_flux/math-doc/document/node8.html +83 -0
  308. data/doc/ep_flux/math-doc/document/node9.html +140 -0
  309. data/doc/ep_flux/math-doc/document/prev.png +0 -0
  310. data/doc/ep_flux/math-doc/document/prev_g.png +0 -0
  311. data/doc/ep_flux/math-doc/document/up.png +0 -0
  312. data/doc/ep_flux/math-doc/document/up_g.png +0 -0
  313. data/doc/gdir.html +412 -0
  314. data/doc/gdir_client.html +16 -0
  315. data/doc/gdir_connect_ftp-like.html +61 -0
  316. data/doc/gdir_server.html +45 -0
  317. data/doc/ggraph.html +1119 -0
  318. data/doc/gpcat.html +45 -0
  319. data/doc/gpcut.html +47 -0
  320. data/doc/gphys.html +624 -0
  321. data/doc/gphys_fft.html +324 -0
  322. data/doc/gphys_grads_io.html +69 -0
  323. data/doc/gphys_grib_io.html +82 -0
  324. data/doc/gphys_io.html +183 -0
  325. data/doc/gphys_io_common.html +18 -0
  326. data/doc/gphys_netcdf_io.html +283 -0
  327. data/doc/gplist.html +24 -0
  328. data/doc/gpmath.html +52 -0
  329. data/doc/gpmaxmin.html +32 -0
  330. data/doc/gpprint.html +35 -0
  331. data/doc/gpview.html +349 -0
  332. data/doc/grads2nc_with_gphys.html +21 -0
  333. data/doc/grads_gridded.html +307 -0
  334. data/doc/grib.html +149 -0
  335. data/doc/grid.html +224 -0
  336. data/doc/index.html +145 -0
  337. data/doc/index.rd +138 -0
  338. data/doc/netcdf_convention.html +136 -0
  339. data/doc/unumeric.html +176 -0
  340. data/doc/update +69 -0
  341. data/doc/update_rdoc +8 -0
  342. data/doc/varray.html +299 -0
  343. data/doc/varraycomposite.html +67 -0
  344. data/ext_init.c +1 -0
  345. data/extconf.rb +16 -6
  346. data/gphys.gemspec +33 -26
  347. data/interpo.c +1 -1
  348. data/lib/numru/dclext.rb +718 -546
  349. data/lib/numru/derivative.rb +2 -0
  350. data/lib/numru/ganalysis.rb +38 -0
  351. data/lib/numru/ganalysis/beta_plane.rb +103 -0
  352. data/lib/numru/ganalysis/eof.rb +3 -2
  353. data/lib/numru/ganalysis/fitting.rb +559 -0
  354. data/lib/numru/ganalysis/histogram.rb +36 -19
  355. data/lib/numru/ganalysis/log_p.rb +130 -0
  356. data/lib/numru/ganalysis/met.rb +396 -2
  357. data/lib/numru/ganalysis/met_z.rb +300 -0
  358. data/lib/numru/ganalysis/planet.rb +17 -7
  359. data/lib/numru/ganalysis/qg.rb +685 -0
  360. data/lib/numru/ganalysis/sigma_coord.rb +90 -0
  361. data/lib/numru/gdir.rb +2 -1
  362. data/lib/numru/ggraph.rb +204 -60
  363. data/lib/numru/ggraph_on_merdional_section.rb +1 -1
  364. data/lib/numru/gphys.rb +6 -0
  365. data/lib/numru/gphys/assoccoords.rb +18 -3
  366. data/lib/numru/gphys/axis.rb +209 -8
  367. data/lib/numru/gphys/derivative.rb +11 -0
  368. data/lib/numru/gphys/gphys.rb +539 -48
  369. data/lib/numru/gphys/gphys_dim_op.rb +331 -0
  370. data/lib/numru/gphys/gphys_fft.rb +48 -2
  371. data/lib/numru/gphys/gphys_io.rb +241 -13
  372. data/lib/numru/gphys/gphys_netcdf_io.rb +77 -39
  373. data/lib/numru/gphys/gphys_nusdas_io.rb +3 -0
  374. data/lib/numru/gphys/grib.rb +133 -54
  375. data/lib/numru/gphys/grib_params.rb +26 -3
  376. data/lib/numru/gphys/grid.rb +75 -34
  377. data/lib/numru/gphys/interpolate.rb +24 -10
  378. data/lib/numru/gphys/mdstorage.rb +160 -0
  379. data/lib/numru/gphys/netcdf_convention.rb +4 -2
  380. data/lib/numru/gphys/subsetmapping.rb +0 -1
  381. data/lib/numru/gphys/unumeric.rb +50 -5
  382. data/lib/numru/gphys/varray.rb +15 -30
  383. data/lib/numru/gphys/varraycomposite.rb +107 -24
  384. data/lib/numru/gphys/varraynetcdf.rb +9 -3
  385. data/lib/numru/gphys/version.rb +5 -0
  386. data/sample/druby_cli1.rb +2 -0
  387. data/sample/druby_cli2.rb +0 -6
  388. data/sample/druby_serv2.rb +0 -13
  389. data/spec/gphys_spec.rb +11 -0
  390. data/spec/spec_helper.rb +2 -0
  391. data/test/test_assoccoords.rb +102 -0
  392. data/test/test_axis.rb +61 -0
  393. data/test/test_fitting.rb +116 -0
  394. data/test/test_gphys.rb +20 -0
  395. data/test/test_met_z.rb +96 -0
  396. data/test/test_sigma_coord.rb +50 -0
  397. data/{test → test_old}/eof_slp.rb +0 -0
  398. data/{test → test_old}/mltbit.dat +0 -0
  399. data/{test → test_old}/test_ep_flux.rb +0 -0
  400. data/{test → test_old}/test_multibitIO.rb +0 -0
  401. metadata +530 -191
  402. data/README.md +0 -29
  403. data/lib/gphys.rb +0 -2
  404. data/lib/numru/dclext_datetime_ax.rb +0 -220
  405. data/lib/version.rb +0 -3
@@ -0,0 +1,183 @@
1
+ <?xml version="1.0" ?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml">
6
+ <head>
7
+ <title>../lib/numru/gphys/gphys_io.rb</title>
8
+ </head>
9
+ <body>
10
+ <h1><a name="label-0" id="label-0">module NumRu::GPhys::IO</a></h1><!-- RDLabel: "module NumRu::GPhys::IO" -->
11
+ <p>A module to handle file IO regarding GPhys. </p>
12
+ <p>Many of the functionality of this module is implemented in the modules
13
+ for specific file types such as NumRu::GPhys::NetCDF_IO, to which this
14
+ module directs operations.</p>
15
+ <p>For example, GPhys::IO.open(file, name) simply calls
16
+ GPhys::*_IO.open(file, name), where '*' is
17
+ NetCDF, GrADS, or grib.</p>
18
+ <h2><a name="label-1" id="label-1">Module functions</a></h2><!-- RDLabel: "Module functions" -->
19
+ <dl>
20
+ <dt><h4><a name="label-2" id="label-2"><code>open(<var>file</var>, <var>varname</var>)</code></a></h4></dt><!-- RDLabel: "open" -->
21
+ <dd>
22
+ <p>Opens a GPhys in <code>file</code> having the name <code>varname</code>.</p>
23
+ <p>ARGUMENTS</p>
24
+ <ul>
25
+ <li>file (String, NetCDF, GRIB,.. etc, or Array, NArray, Regexp) :
26
+ Specifies the file. Path if String; a File pointer if NetCDF etc..
27
+ The processing is forwarded to open_multi, if this argument is
28
+ an Array, NArray, or Regexp. </li>
29
+ <li>varname (String) : name of the variable</li>
30
+ </ul>
31
+ <p>RETURN VALUE</p>
32
+ <ul>
33
+ <li>a GPhys</li>
34
+ </ul></dd>
35
+ <dt><h4><a name="label-3" id="label-3"><code>open_multi(<var>files</var>, <var>varname</var>)</code></a></h4></dt><!-- RDLabel: "open_multi" -->
36
+ <dd>
37
+ <p>Opens a GPhys by combining a variable across multiple files.
38
+ It initializes GPhys objects over the files by calling open and
39
+ unites them into a single GPhys object by using <code>GPhys.join</code> or
40
+ <code>GPhys.join_md</code>.</p>
41
+ <p>ARGUMENTS</p>
42
+ <ul>
43
+ <li>files (Array, NArray (NArray.object), or Regexp) : Specifies the files.
44
+ <ul>
45
+ <li>when Array, it must consist of paths or file pointers
46
+ (that are accepted by open).
47
+ All coordinates of the variable in the files are scanned,
48
+ and a joined object is constructed properly.
49
+ Thus, you can simply put subsets of a 2D tiling in a simple
50
+ non-nested 1D Array. <code>GPhys.join</code> is used in this case.</li>
51
+ <li><p>when NArray, it must consist of paths or file pointers
52
+ (that are accepted by open).
53
+ Each dimension with multiple elements must correspond
54
+ to a dimension along which joining is made.
55
+ For example, a 2D tiling can be specified as</p>
56
+ <pre>files = NArray.to_na([['f00.nc','f10.nc'],['f01.nc','f11.nc']])
57
+ gp = GPhys::IO.open_multi( files, "f" )</pre>
58
+ <p><code>GPhys.join_md</code> is used in this case.</p></li>
59
+ <li><p>When Regexp, similar to when NArray, but expresses the paths.
60
+ The dimensions to join is specified by "captures"
61
+ (parentheses). For example, the above 2D tiling can be specified as</p>
62
+ <pre>files = /f(\d)(\d).nc/
63
+ gp = GPhys::IO.open_multi( files, "f" )</pre>
64
+ <p>The regexp can contain a directory path (e.g., /dir\/sub\/f(\d)(d).nc/),
65
+ but the directory part must be unique (i.e., a simple string),
66
+ so only a single directly can be specified. All captures must
67
+ be in the part representing the file names (in the directory).
68
+ <code>GPhys.join_md</code> is used in this case.</p></li>
69
+ </ul></li>
70
+ <li>varname (String) : name of the variable</li>
71
+ </ul>
72
+ <p>RETURN VALUE</p>
73
+ <ul>
74
+ <li>a GPhys</li>
75
+ </ul></dd>
76
+ <dt><h4><a name="label-4" id="label-4"><code>write(<var>file</var>, <var>gphys</var>, <var>name</var>=<var>nil</var>)</code></a></h4></dt><!-- RDLabel: "write" -->
77
+ <dd>
78
+ <p>Writes a GPhys object in a file</p>
79
+ <p>ARGUMENTS</p>
80
+ <ul>
81
+ <li>file (NetCDF, GRIB,.. etc) : the file. Writing must be permitted.
82
+ To close (finalize) it after writing is left to the user.</li>
83
+ <li>gphys (GPhys) : the GPhys object to write</li>
84
+ <li>name (String; optional) : if specified, this name is used in the file
85
+ rather than the name of gphys</li>
86
+ </ul></dd>
87
+ <dt><h4><a name="label-5" id="label-5"><code>write_grid(<var>file</var>, <var>grid_or_gphys</var>)</code></a></h4></dt><!-- RDLabel: "write_grid" -->
88
+ <dt><h4><a name="label-6" id="label-6"><code>each_along_dims_write(<var>gphyses</var>, <var>files</var>, *<var>loopdims</var>){...} # <var>a</var> <var>block</var> <var>is</var> <var>expected</var></code></a></h4></dt><!-- RDLabel: "each_along_dims_write" -->
89
+ <dt><h4><a name="label-7" id="label-7"><code>var_names(<var>file</var>)</code></a></h4></dt><!-- RDLabel: "var_names" -->
90
+ <dt><h4><a name="label-8" id="label-8"><code>var_names_except_coordinates(<var>file</var>)</code></a></h4></dt><!-- RDLabel: "var_names_except_coordinates" -->
91
+ <dd>
92
+ See the manual of NumRu::GPhys::NetCDF_IO for the methods listed above.</dd>
93
+ <dt><h4><a name="label-9" id="label-9"><code>file2type(<var>file</var>)</code></a></h4></dt><!-- RDLabel: "file2type" -->
94
+ <dd>
95
+ <p>Figures out the file type supported in this module.</p>
96
+ <p>ARGUMENTS</p>
97
+ <ul>
98
+ <li>file (String, NetCDF, Grib, or GrADS_Gridded) :
99
+ What to return is of course obvious if it is
100
+ NetCDF, Grib, or GrADS_Gridded. If it is a String,
101
+ it is assumed to be a path of a file, and the file type
102
+ is determined by its suffix when 'nc', 'ctl', or 'grib';
103
+ In other cases, the type is figured out by reading in
104
+ a few bytes from the beginning.</li>
105
+ </ul>
106
+ <p>RETURN VALUE</p>
107
+ <ul>
108
+ <li>GPhys::IO::NETCDF, GPhys::IO::GRIB, or GPhys::IO::GRADS,
109
+ which are string constants.</li>
110
+ </ul></dd>
111
+ <dt><h4><a name="label-10" id="label-10"><code>file2specific_module(<var>file</var>)</code></a></h4></dt><!-- RDLabel: "file2specific_module" -->
112
+ <dd>
113
+ Same as <a href="#label-9">file2type</a>, but returns GPhys::NetCDF_IO,
114
+ GPhys::GrADS_IO, or GPhys::Grib_IO.</dd>
115
+ <dt><h4><a name="label-11" id="label-11"><code>file2file_class(<var>file</var>)</code></a></h4></dt><!-- RDLabel: "file2file_class" -->
116
+ <dd>
117
+ Same as <a href="#label-9">file2type</a>, but returns NetCDF,
118
+ GrADS_Gridded, or Grib.</dd>
119
+ <dt><h4><a name="label-12" id="label-12"><code>parse_gturl(<var>gturl</var>)</code></a></h4></dt><!-- RDLabel: "parse_gturl" -->
120
+ <dd>
121
+ <p>Parses GTOOL4-type URLs to specify path, variable name,
122
+ and optionally subsets, whose format is
123
+ path[@|/]varname[,dimname=pos1[:pos2[:thinning_intv]][,dimname=...]]</p>
124
+ <p>ARGUMENTS</p>
125
+ <ul>
126
+ <li>gturl (String) GTOOL4 URL, whose format is
127
+ path[@|/]varname[,dimname=pos1[:pos2[:thinning_intv]][,dimname=...]]</li>
128
+ </ul>
129
+ <p>RETURN VALUES</p>
130
+ <ul>
131
+ <li>An Array consisting of [file, var, slice, cut_slice, thinning], where
132
+ <ul>
133
+ <li>file (String) : path</li>
134
+ <li>var (String) : variable name</li>
135
+ <li>slice (Array) : subset specifier by the grid numbers
136
+ to be used as GPhys#[slice].</li>
137
+ <li>cut_slice (Array) : subset specifier in physical coordinate
138
+ to be used as GPhys#cut[cut_slice].</li>
139
+ <li>thinning (Array) : additional subset specifier for thinning
140
+ with uniform intervals if needed to be used GPhys#[thinning]
141
+ after appling GPhys#cut.</li>
142
+ </ul></li>
143
+ </ul></dd>
144
+ <dt><h4><a name="label-13" id="label-13"><code>open_gturl(<var>gturl</var>)</code></a></h4></dt><!-- RDLabel: "open_gturl" -->
145
+ <dd>
146
+ <p>a GPhys constructor from a Gtool4-type URL.
147
+ See <a href="#label-12">parse_gturl</a> for its format.</p>
148
+ <p>RETURN VALUE</p>
149
+ <ul>
150
+ <li>a GPhys</li>
151
+ </ul></dd>
152
+ <dt><h4><a name="label-14" id="label-14"><code>str2gphys(<var>str</var>)</code></a></h4></dt><!-- RDLabel: "str2gphys" -->
153
+ <dd>
154
+ <p>Open a GPhys from a slash("/")-separated String
155
+ such as "U.nc/U" and "U.nc".</p>
156
+ <ul>
157
+ <li>Aimed to help quick jobs with interactive sessions
158
+ -- This method do not handle a GPhys across multiple files.</li>
159
+ <li>if the variable path is ommited such as "U.nc",
160
+ try to find the variable in it -- read the file and if
161
+ only one variable is found, assume that is the
162
+ variable specified; otherwise, an exception is raised.</li>
163
+ <li>URL is accepted, but it's only thru NetCDF assuming OPeNDAP.</li>
164
+ </ul>
165
+ <p>ARGUMENTS</p>
166
+ <ul>
167
+ <li>a String (file_path[/variable_path])
168
+ e.g. "U.nc/U", "U.nc", "http://.../U.nc/U"</li>
169
+ </ul>
170
+ <p>RETURN VALUE</p>
171
+ <ul>
172
+ <li>a GPhys</li>
173
+ </ul></dd>
174
+ </dl>
175
+ <h2><a name="label-15" id="label-15">Module constants</a></h2><!-- RDLabel: "Module constants" -->
176
+ <dl>
177
+ <dt><h4><a name="label-16" id="label-16"><code>GTURLfmt</code></a></h4></dt><!-- RDLabel: "GTURLfmt" -->
178
+ <dd>
179
+ The format of Gtool4URL.</dd>
180
+ </dl>
181
+
182
+ </body>
183
+ </html>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" ?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml">
6
+ <head>
7
+ <title>../lib/numru/gphys/gphys_io_common.rb</title>
8
+ </head>
9
+ <body>
10
+ <h1><a name="label-0" id="label-0">module NumRu::GPhys::IO_Common</a></h1><!-- RDLabel: "module NumRu::GPhys::IO_Common" -->
11
+ <p>THIS MODULE IS ONLY FOR INTERNAL USAGE.
12
+ (Does not work stand alone.)</p>
13
+ <p>Functions independent of specific file formart.
14
+ To be used by IO, NetCDF_IO, GrADS_IO etc. </p>
15
+ <p>A test program is included in gphys_netcdf.rb</p>
16
+
17
+ </body>
18
+ </html>
@@ -0,0 +1,283 @@
1
+ <?xml version="1.0" ?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+ <html xmlns="http://www.w3.org/1999/xhtml">
6
+ <head>
7
+ <title>../lib/numru/gphys/gphys_netcdf_io.rb</title>
8
+ </head>
9
+ <body>
10
+ <h1><a name="label-0" id="label-0">module NumRu::GPhys::NetCDF_Convention_Users_Guide</a></h1><!-- RDLabel: "module NumRu::GPhys::NetCDF_Convention_Users_Guide" -->
11
+ <p>(To be written.)</p>
12
+ <h1><a name="label-1" id="label-1">module NumRu::GPhys::NetCDF_IO</a></h1><!-- RDLabel: "module NumRu::GPhys::NetCDF_IO" -->
13
+ <p>a NetCDF read/write helper by automatically interpreting conventions</p>
14
+ <h2><a name="label-2" id="label-2">Module functions</a></h2><!-- RDLabel: "Module functions" -->
15
+ <dl>
16
+ <dt><h4><a name="label-3" id="label-3"><code>is_a_NetCDF?(<var>filename</var>)</code></a></h4></dt><!-- RDLabel: "is_a_NetCDF?" -->
17
+ <dd>
18
+ <p>test whether the file is a NetCDF file.</p>
19
+ <p>ARGUMENTS</p>
20
+ <ul>
21
+ <li>filename (String): filename to test.</li>
22
+ </ul>
23
+ <p>RETURN VALUE</p>
24
+ <ul>
25
+ <li>true/false</li>
26
+ </ul></dd>
27
+ <dt><h4><a name="label-4" id="label-4"><code>open(<var>files</var>, <var>varname</var>)</code></a></h4></dt><!-- RDLabel: "open" -->
28
+ <dd>
29
+ <p>a GPhys constructor from a NetCDF file (or multiple NetCDF files).</p>
30
+ <p>ARGUMENTS</p>
31
+ <ul>
32
+ <li>files (String, NetCDF, NArray, or Regexp): file specifier.
33
+ A single file is specified by a String (containing the path),
34
+ of a NetCDF. Multiple files can be specified by a NArray of
35
+ String or NetCDF or by a Regexp to match paths. In that case,
36
+ data and axes are represented by VArrayComposite.</li>
37
+ <li>varname (String): name of the variable.</li>
38
+ </ul>
39
+ <p>RETURN VALUE</p>
40
+ <ul>
41
+ <li>a GPhys</li>
42
+ </ul>
43
+ <p>EXAMPLES</p>
44
+ <ul>
45
+ <li><p>From a single file:</p>
46
+ <pre>file = NetCDF.open('hogehoge.nc')
47
+ gphys = GPhys::NetCDF_IO(file, 'temp')
48
+
49
+ file = NetCDF.open('hogehoge.nc', 'a') # writable
50
+ gphys = GPhys::NetCDF_IO(file, 'temp')</pre></li>
51
+ <li><p>From a single file:</p>
52
+ <pre>gphys = GPhys::NetCDF_IO('hogehoge.nc', 'temp')
53
+
54
+ gphys = GPhys::NetCDF_IO('/data/netcdf/hogehoge.nc', 'temp')</pre>
55
+ <p>If you use a String to specify a file path, the file is opened as
56
+ read-only.</p></li>
57
+ <li><p>To use data separated into multiple files. Suppose that you have
58
+ hoge_yr2000.nc, hoge_yr2001.nc, and hoge_yr2002.nc in the current
59
+ directory. You can open it by using a regular expression as follows:</p>
60
+ <pre>gphys = GPhys::NetCDF_IO(/hoge_yr(\d\d\d\d).nc/, 'temp')</pre>
61
+ <p>Here, the parentheses to enclose \d\d\d\d is NEEDED. </p>
62
+ <p>The same thing can be done as follows by using Array or NArray:</p>
63
+ <pre>files = ['hoge_yr2000.nc', 'hoge_yr2001.nc', 'hoge_yr2002.nc']
64
+ gphys = GPhys::NetCDF_IO(files, 'temp')
65
+
66
+ files = NArray['hoge_yr2000.nc', 'hoge_yr2001.nc', 'hoge_yr2002.nc']
67
+ gphys = GPhys::NetCDF_IO(files, 'temp')</pre></li>
68
+ <li><p>Same as above but to use the full path:</p>
69
+ <pre>gphys = GPhys::NetCDF_IO(/\/data\/nc\/hoge_yr(\d\d\d\d).nc/, 'temp')</pre>
70
+ <p>Here, the directory separator '/' is escaped as '\/'.</p></li>
71
+ <li><p>To use data separated into multiple files. Suppose that you have
72
+ hoge_x0y0.nc, hoge_x1y0.nc, hoge_x0y1.nc, hoge_x1y1.nc, where
73
+ the data is separated 2 dimensionally into 2*2 = 4 files.</p>
74
+ <pre>gphys = GPhys::NetCDF_IO(/hoge_x(\d)y(\d).nc/, 'temp')</pre>
75
+ <p>Note that 2 pairs of parentheses are needed here. Alternatively,
76
+ you can also do it like this:</p>
77
+ <pre>files = NArray[ ['hoge_x0y0.nc', 'hoge_x1y0.nc'],
78
+ ['hoge_x0y1.nc', 'hoge_x1y1.nc'] ]
79
+ gphys = GPhys::NetCDF_IO(files, 'temp')</pre></li>
80
+ </ul></dd>
81
+ <dt><h4><a name="label-5" id="label-5"><code>write(<var>file</var>, <var>gphys</var>, <var>name</var>=<var>nil</var>)</code></a></h4></dt><!-- RDLabel: "write" -->
82
+ <dd>
83
+ <p>Write a GPhys into a NetCDF file. The whole data under the GPhys
84
+ (such as coordinate vars) are written self-descriptively.</p>
85
+ <p>ARGUMENTS</p>
86
+ <ul>
87
+ <li>file (NetCDF): the NetCDF file to write in. Must be writable of course.</li>
88
+ <li>gphys (GPhys): the GPhys to write.</li>
89
+ <li>name (String): (optional) name in the new file -- if you want to save
90
+ with a different variable name than that of gphys.</li>
91
+ </ul>
92
+ <p>RETURN VALUE</p>
93
+ <ul>
94
+ <li>nil</li>
95
+ </ul></dd>
96
+ <dt><h4><a name="label-6" id="label-6"><code>write_grid(<var>file</var>, <var>grid_or_gphys</var>)</code></a></h4></dt><!-- RDLabel: "write_grid" -->
97
+ <dd>
98
+ <p>Same as <a href="#label-5">write</a> but for writing only the contents of the grid.
99
+ (Used in <a href="#label-5">write</a>.)</p>
100
+ <p>ARGUMENTS</p>
101
+ <ul>
102
+ <li>file (NetCDF): the NetCDF file to write in. Must be writable of course.</li>
103
+ <li>grid_or_gphys (Grid or GPhys):</li>
104
+ </ul>
105
+ <p>RETURN VALUE</p>
106
+ <ul>
107
+ <li>a Grid, in which all VArrays in the original grid are replaced
108
+ with the new ones in the file.</li>
109
+ </ul></dd>
110
+ <dt><h4><a name="label-7" id="label-7"><code>each_along_dims_write(<var>gphyses</var>, <var>files</var>, *<var>loopdims</var>){...} # <var>a</var> <var>block</var> <var>is</var> <var>expected</var></code></a></h4></dt><!-- RDLabel: "each_along_dims_write" -->
111
+ <dd>
112
+ <p>Iterator to process GPhys objects too big to read on memory at once.
113
+ Makes a loop (loops) by dividing the GPhys object(s) (<var>gphyses</var>)
114
+ with the dimension(s) specified by <var>loopdims</var>, and the results
115
+ (which is the return value of the block) are written in <var>files</var>.</p>
116
+ <p>ARGUMENTS</p>
117
+ <ul>
118
+ <li>gphyses (GPhys or Array of GPhys): GPhys object(s) to be processed.
119
+ All of them must have dimensions spcified with <var>loopdims</var>,
120
+ and their lengths must not vary among files. Other dimensions
121
+ are aribtary, so, for example, <var>gphyses</var> could be
122
+ [a(lon,lat,time), b(lat,time)] as long as loopdims==["time"].</li>
123
+ <li>files (NetCDF or Array of NetCDF): the file in which the results are
124
+ written. The number of the file must be smaller than or equalt to
125
+ the number of resultant GPhys objects (following the multiple assignment
126
+ rule of Ruby).</li>
127
+ <li>loopdims (Array of String or Integer) : name (when String) or
128
+ count starting from zero (when Integer) </li>
129
+ <li>expected block : Number of arguments == number of GPhys objects in
130
+ <var>gphyses</var>. Expected return value is an Array of GPhys objects
131
+ to be written <var>files</var>.</li>
132
+ </ul>
133
+ <p>RETURN VALUE</p>
134
+ <ul>
135
+ <li>GPhys objects in which the results are written</li>
136
+ </ul>
137
+ <p>ERRORS</p>
138
+ <p>The following raise exceptions (in adition to errors in arguments).</p>
139
+ <ul>
140
+ <li>Dimensions specified by <var>loopdims</var> are not shared among
141
+ GPhys objects in <var>gphyses</var>.</li>
142
+ <li>Return value of the block is not an Array of GPhys.</li>
143
+ <li>Dimension(s) used for looping (<var>loopdims</var>) is(are) eliminated
144
+ from the retunred GPhys objects.</li>
145
+ </ul>
146
+ <p>USAGE</p>
147
+ <ul>
148
+ <li><p>EXAMPLE 1</p>
149
+ <p>Suppose that you want to do the following:</p>
150
+ <pre>in = GPhys::NetCDF_IO.open(infile, varname)
151
+ ofile = NetCDF.create(ofilename)
152
+ out = in.mean(0)
153
+ GPhys::NetCDF_IO.write( ofile, out )
154
+ ofile.close</pre>
155
+ <p>The data object (<var>in</var>) is read on memory and an averagin is made.
156
+ If the size of the data is too big to read on memory at once, you can
157
+ divid this process by using this iterator. The following gives the
158
+ same result as above, but the processing is made for each subset
159
+ divided at the last dimension (represented by -1, as in the negative
160
+ indexing of Array).</p>
161
+ <pre>in = GPhys::NetCDF_IO.open(infile, varname)
162
+ ofile = NetCDF.create(ofilename)
163
+ out = GPhys::NetCDF_IO.each_along_dims_write(in, ofile, -1){|in_sub|
164
+ [ in_sub.mean(0) ]
165
+ }
166
+ ofile.close</pre>
167
+ <p>In this case, each_along_dims_write makes a loop by substituting
168
+ <var>in[false,0..0]</var>, <var>in[false,1..1]</var>, <var>in[false,2..2]</var>,..
169
+ into the argument of the block (<var>in_sub</var>). Thus, the return
170
+ value of the block (here, <var>[ in_sub.mean(0) ]</var>) consists of
171
+ <var>in[false,0..0].mean(0)</var>, <var>in[false,1..1].mean(0)</var>,.. .
172
+ This iterator creates a GPhys object in <var>out</var> that
173
+ represents the whole part of the results (here, <var>in.mean(0)</var>), and
174
+ write the resultant subsets in it one by one. Therefore, the output file
175
+ is filled correctly when exiting the iterator.</p>
176
+ <p>Note that the subset (<var>in_sub</var>) retains the last dimension
177
+ but the length is 1 becasue of the slicing by Range (0..0, 1..1,..).
178
+ Therefore, the subset has the same rank as the original.
179
+ The output GPhys objects, as given by the return value of the block,
180
+ must have the dimension retained, since the dimension (whose length
181
+ is one) is replaced by the original one when written in the file.
182
+ Therefore, THE FOLLOWING CAUSE AN ERROR (an exception is raised):</p>
183
+ <pre>out = GPhys::NetCDF_IO.each_along_dims_write(in, ofile, 0){|in_sub|
184
+ [ in_sub.mean(0) ]
185
+ }</pre>
186
+ <p>Here, looping is made by the first dimension (0), but it is eliminated
187
+ from the result by averaging with the same dimension. (Also, note
188
+ that this averaging is non-sense, since the length of the first
189
+ dimension of the subset is 1).</p></li>
190
+ <li><p>EXAMPLE 2</p>
191
+ <p>You can specify mutiple dimensions for looping to further
192
+ decrease the size of data to read on memory:</p>
193
+ <pre>GPhys::NetCDF_IO.each_along_dims_write(in, ofile, -2, -1){|in_sub|
194
+ ...
195
+ }</pre>
196
+ <p>Also, you can specify the loop dimension(s) by name(s):</p>
197
+ <pre>GPhys::NetCDF_IO.each_along_dims_write(in, ofile, "y"){|in_sub|
198
+ ...
199
+ }
200
+
201
+ GPhys::NetCDF_IO.each_along_dims_write(in, ofile, "y", "z"){|in_sub|
202
+ ...
203
+ }</pre></li>
204
+ <li><p>EXAMPLE 3</p>
205
+ <p>You can give multiple objects in the iterotor if they
206
+ have the same shape (in future, this restriction may been loosened),
207
+ as follows:</p>
208
+ <pre>in1 = GPhys::NetCDF_IO.open(infile1, varname1)
209
+ in2 = GPhys::NetCDF_IO.open(infile2, varname2)
210
+ in3 = GPhys::NetCDF_IO.open(infile3, varname3)
211
+ ofile = NetCDF.create(ofilename)
212
+ outA, outB = \
213
+ GPhys::NetCDF_IO.each_along_dims_write([in1,in2,in3], ofile, -1){
214
+ |isub1,isub2,isub3|
215
+ osubA = (isub1*isub2).mean(0)
216
+ osubB = (isub2*isub3).mean(1)
217
+ [ osubA, osubB ]
218
+ }
219
+ ofile.close</pre>
220
+ <p>In this case, two output objects (outA and outB) are made
221
+ from the three input objects (in1,in2,in3) and written in a
222
+ single file (ofile). If you want to separate into two files,
223
+ you can do it like this: </p>
224
+ <pre>in1 = GPhys::NetCDF_IO.open(infile1, varname1)
225
+ in2 = GPhys::NetCDF_IO.open(infile2, varname2)
226
+ in3 = GPhys::NetCDF_IO.open(infile3, varname3)
227
+ ofile1 = NetCDF.create(ofilename1)
228
+ ofile2 = NetCDF.create(ofilename2)
229
+ outA, outB = \
230
+ GPhys::NetCDF_IO.each_along_dims_write([in1,in2,in3], [ofile1,ofile2], -1){
231
+ |isub1,isub2,isub3|
232
+ osubA = (isub1*isub2).mean(0)
233
+ osubB = (isub2*isub3).mean(1)
234
+ [ osubA, osubB ]
235
+ }
236
+ ofile.close</pre></li>
237
+ </ul></dd>
238
+ <dt><h4><a name="label-8" id="label-8"><code>set_convention(<var>convention</var>)</code></a></h4></dt><!-- RDLabel: "set_convention" -->
239
+ <dd>
240
+ <p>Set a NetCDF convention to be interpreted.</p>
241
+ <p>ARGUMENTS</p>
242
+ <ul>
243
+ <li>convention (Module): the convention</li>
244
+ </ul>
245
+ <p>RETURN VALUE</p>
246
+ <ul>
247
+ <li>convention (Module)</li>
248
+ </ul></dd>
249
+ <dt><h4><a name="label-9" id="label-9"><code>convention</code></a></h4></dt><!-- RDLabel: "convention" -->
250
+ <dd>
251
+ <p>Returns the current NetCDF convention to be interpreted.</p>
252
+ <p>RETURN VALUE</p>
253
+ <ul>
254
+ <li>convention (Module)</li>
255
+ </ul></dd>
256
+ <dt><h4><a name="label-10" id="label-10"><code>var_names(<var>file</var>)</code></a></h4></dt><!-- RDLabel: "var_names" -->
257
+ <dd>
258
+ <p>ARGUMENTS</p>
259
+ <ul>
260
+ <li>file (NetCDF or String): if string,
261
+ it must be the name (path) of a NetCDF file.</li>
262
+ </ul>
263
+ <p>RETURN VALUE</p>
264
+ <ul>
265
+ <li>names of variables (Array): this return the names of variables
266
+ which the file has.</li>
267
+ </ul></dd>
268
+ <dt><h4><a name="label-11" id="label-11"><code>var_names_except_coordinate(<var>file</var>)</code></a></h4></dt><!-- RDLabel: "var_names_except_coordinate" -->
269
+ <dd>
270
+ <p>ARGUMENTS</p>
271
+ <ul>
272
+ <li>file (NetCDF or String): if string,
273
+ it must be the name (path) of a NetCDF file.</li>
274
+ </ul>
275
+ <p>RETURN VALUE</p>
276
+ <ul>
277
+ <li>names of variables (Array): this return the names of variables
278
+ which the file has, except variables for coordinate.</li>
279
+ </ul></dd>
280
+ </dl>
281
+
282
+ </body>
283
+ </html>