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.
- data/ChangeLog +1777 -0
- data/LICENSE.txt +34 -0
- data/README +33 -0
- data/Rakefile +57 -0
- data/TODO_ep_flux +6 -0
- data/bin/gdir_client +27 -0
- data/bin/gdir_server +129 -0
- data/bin/gpaop +146 -0
- data/bin/gpcat +148 -0
- data/bin/gpcut +102 -0
- data/bin/gpedit +228 -0
- data/bin/gplist +68 -0
- data/bin/gpmath +120 -0
- data/bin/gpmaxmin +128 -0
- data/bin/gpprint +60 -0
- data/bin/gpvect +706 -0
- data/bin/gpview +704 -0
- data/bin/grads2nc_with_gphys +61 -0
- data/doc/attribute.html +19 -0
- data/doc/attributenetcdf.html +15 -0
- data/doc/axis.html +376 -0
- data/doc/coordmapping.html +111 -0
- data/doc/coordtransform.html +36 -0
- data/doc/derivative/gphys-derivative.html +80 -0
- data/doc/derivative/index.html +21 -0
- data/doc/derivative/index.rd +14 -0
- data/doc/derivative/math-doc/document/document.css +30 -0
- data/doc/derivative/math-doc/document/document.html +57 -0
- data/doc/derivative/math-doc/document/images.aux +1 -0
- data/doc/derivative/math-doc/document/images.log +385 -0
- data/doc/derivative/math-doc/document/images.pl +186 -0
- data/doc/derivative/math-doc/document/images.tex +364 -0
- data/doc/derivative/math-doc/document/img1.png +0 -0
- data/doc/derivative/math-doc/document/img10.png +0 -0
- data/doc/derivative/math-doc/document/img11.png +0 -0
- data/doc/derivative/math-doc/document/img12.png +0 -0
- data/doc/derivative/math-doc/document/img13.png +0 -0
- data/doc/derivative/math-doc/document/img14.png +0 -0
- data/doc/derivative/math-doc/document/img15.png +0 -0
- data/doc/derivative/math-doc/document/img16.png +0 -0
- data/doc/derivative/math-doc/document/img17.png +0 -0
- data/doc/derivative/math-doc/document/img18.png +0 -0
- data/doc/derivative/math-doc/document/img19.png +0 -0
- data/doc/derivative/math-doc/document/img2.png +0 -0
- data/doc/derivative/math-doc/document/img20.png +0 -0
- data/doc/derivative/math-doc/document/img21.png +0 -0
- data/doc/derivative/math-doc/document/img22.png +0 -0
- data/doc/derivative/math-doc/document/img23.png +0 -0
- data/doc/derivative/math-doc/document/img24.png +0 -0
- data/doc/derivative/math-doc/document/img25.png +0 -0
- data/doc/derivative/math-doc/document/img26.png +0 -0
- data/doc/derivative/math-doc/document/img27.png +0 -0
- data/doc/derivative/math-doc/document/img28.png +0 -0
- data/doc/derivative/math-doc/document/img29.png +0 -0
- data/doc/derivative/math-doc/document/img3.png +0 -0
- data/doc/derivative/math-doc/document/img30.png +0 -0
- data/doc/derivative/math-doc/document/img4.png +0 -0
- data/doc/derivative/math-doc/document/img5.png +0 -0
- data/doc/derivative/math-doc/document/img6.png +0 -0
- data/doc/derivative/math-doc/document/img7.png +0 -0
- data/doc/derivative/math-doc/document/img8.png +0 -0
- data/doc/derivative/math-doc/document/img9.png +0 -0
- data/doc/derivative/math-doc/document/index.html +57 -0
- data/doc/derivative/math-doc/document/labels.pl +13 -0
- data/doc/derivative/math-doc/document/next.png +0 -0
- data/doc/derivative/math-doc/document/next_g.png +0 -0
- data/doc/derivative/math-doc/document/node1.html +238 -0
- data/doc/derivative/math-doc/document/node2.html +75 -0
- data/doc/derivative/math-doc/document/prev.png +0 -0
- data/doc/derivative/math-doc/document/prev_g.png +0 -0
- data/doc/derivative/math-doc/document/up.png +0 -0
- data/doc/derivative/math-doc/document/up_g.png +0 -0
- data/doc/derivative/math-doc/document.pdf +0 -0
- data/doc/derivative/math-doc/document.tex +158 -0
- data/doc/derivative/numru-derivative.html +129 -0
- data/doc/ep_flux/ep_flux.html +469 -0
- data/doc/ep_flux/ggraph_on_merdional_section.html +71 -0
- data/doc/ep_flux/index.html +31 -0
- data/doc/ep_flux/index.rd +24 -0
- data/doc/ep_flux/math-doc/document/WARNINGS +1 -0
- data/doc/ep_flux/math-doc/document/contents.png +0 -0
- data/doc/ep_flux/math-doc/document/crossref.png +0 -0
- data/doc/ep_flux/math-doc/document/document.css +30 -0
- data/doc/ep_flux/math-doc/document/document.html +101 -0
- data/doc/ep_flux/math-doc/document/images.aux +1 -0
- data/doc/ep_flux/math-doc/document/images.log +1375 -0
- data/doc/ep_flux/math-doc/document/images.pl +1328 -0
- data/doc/ep_flux/math-doc/document/images.tex +1471 -0
- data/doc/ep_flux/math-doc/document/img1.png +0 -0
- data/doc/ep_flux/math-doc/document/img10.png +0 -0
- data/doc/ep_flux/math-doc/document/img100.png +0 -0
- data/doc/ep_flux/math-doc/document/img101.png +0 -0
- data/doc/ep_flux/math-doc/document/img102.png +0 -0
- data/doc/ep_flux/math-doc/document/img103.png +0 -0
- data/doc/ep_flux/math-doc/document/img104.png +0 -0
- data/doc/ep_flux/math-doc/document/img105.png +0 -0
- data/doc/ep_flux/math-doc/document/img106.png +0 -0
- data/doc/ep_flux/math-doc/document/img107.png +0 -0
- data/doc/ep_flux/math-doc/document/img108.png +0 -0
- data/doc/ep_flux/math-doc/document/img109.png +0 -0
- data/doc/ep_flux/math-doc/document/img11.png +0 -0
- data/doc/ep_flux/math-doc/document/img110.png +0 -0
- data/doc/ep_flux/math-doc/document/img111.png +0 -0
- data/doc/ep_flux/math-doc/document/img112.png +0 -0
- data/doc/ep_flux/math-doc/document/img113.png +0 -0
- data/doc/ep_flux/math-doc/document/img114.png +0 -0
- data/doc/ep_flux/math-doc/document/img115.png +0 -0
- data/doc/ep_flux/math-doc/document/img116.png +0 -0
- data/doc/ep_flux/math-doc/document/img117.png +0 -0
- data/doc/ep_flux/math-doc/document/img118.png +0 -0
- data/doc/ep_flux/math-doc/document/img119.png +0 -0
- data/doc/ep_flux/math-doc/document/img12.png +0 -0
- data/doc/ep_flux/math-doc/document/img120.png +0 -0
- data/doc/ep_flux/math-doc/document/img121.png +0 -0
- data/doc/ep_flux/math-doc/document/img122.png +0 -0
- data/doc/ep_flux/math-doc/document/img123.png +0 -0
- data/doc/ep_flux/math-doc/document/img124.png +0 -0
- data/doc/ep_flux/math-doc/document/img125.png +0 -0
- data/doc/ep_flux/math-doc/document/img126.png +0 -0
- data/doc/ep_flux/math-doc/document/img127.png +0 -0
- data/doc/ep_flux/math-doc/document/img128.png +0 -0
- data/doc/ep_flux/math-doc/document/img129.png +0 -0
- data/doc/ep_flux/math-doc/document/img13.png +0 -0
- data/doc/ep_flux/math-doc/document/img130.png +0 -0
- data/doc/ep_flux/math-doc/document/img131.png +0 -0
- data/doc/ep_flux/math-doc/document/img132.png +0 -0
- data/doc/ep_flux/math-doc/document/img133.png +0 -0
- data/doc/ep_flux/math-doc/document/img134.png +0 -0
- data/doc/ep_flux/math-doc/document/img135.png +0 -0
- data/doc/ep_flux/math-doc/document/img136.png +0 -0
- data/doc/ep_flux/math-doc/document/img137.png +0 -0
- data/doc/ep_flux/math-doc/document/img138.png +0 -0
- data/doc/ep_flux/math-doc/document/img139.png +0 -0
- data/doc/ep_flux/math-doc/document/img14.png +0 -0
- data/doc/ep_flux/math-doc/document/img140.png +0 -0
- data/doc/ep_flux/math-doc/document/img141.png +0 -0
- data/doc/ep_flux/math-doc/document/img142.png +0 -0
- data/doc/ep_flux/math-doc/document/img143.png +0 -0
- data/doc/ep_flux/math-doc/document/img144.png +0 -0
- data/doc/ep_flux/math-doc/document/img145.png +0 -0
- data/doc/ep_flux/math-doc/document/img146.png +0 -0
- data/doc/ep_flux/math-doc/document/img147.png +0 -0
- data/doc/ep_flux/math-doc/document/img148.png +0 -0
- data/doc/ep_flux/math-doc/document/img149.png +0 -0
- data/doc/ep_flux/math-doc/document/img15.png +0 -0
- data/doc/ep_flux/math-doc/document/img150.png +0 -0
- data/doc/ep_flux/math-doc/document/img151.png +0 -0
- data/doc/ep_flux/math-doc/document/img152.png +0 -0
- data/doc/ep_flux/math-doc/document/img153.png +0 -0
- data/doc/ep_flux/math-doc/document/img154.png +0 -0
- data/doc/ep_flux/math-doc/document/img155.png +0 -0
- data/doc/ep_flux/math-doc/document/img156.png +0 -0
- data/doc/ep_flux/math-doc/document/img157.png +0 -0
- data/doc/ep_flux/math-doc/document/img158.png +0 -0
- data/doc/ep_flux/math-doc/document/img159.png +0 -0
- data/doc/ep_flux/math-doc/document/img16.png +0 -0
- data/doc/ep_flux/math-doc/document/img160.png +0 -0
- data/doc/ep_flux/math-doc/document/img161.png +0 -0
- data/doc/ep_flux/math-doc/document/img162.png +0 -0
- data/doc/ep_flux/math-doc/document/img163.png +0 -0
- data/doc/ep_flux/math-doc/document/img164.png +0 -0
- data/doc/ep_flux/math-doc/document/img165.png +0 -0
- data/doc/ep_flux/math-doc/document/img166.png +0 -0
- data/doc/ep_flux/math-doc/document/img167.png +0 -0
- data/doc/ep_flux/math-doc/document/img168.png +0 -0
- data/doc/ep_flux/math-doc/document/img169.png +0 -0
- data/doc/ep_flux/math-doc/document/img17.png +0 -0
- data/doc/ep_flux/math-doc/document/img170.png +0 -0
- data/doc/ep_flux/math-doc/document/img171.png +0 -0
- data/doc/ep_flux/math-doc/document/img172.png +0 -0
- data/doc/ep_flux/math-doc/document/img173.png +0 -0
- data/doc/ep_flux/math-doc/document/img174.png +0 -0
- data/doc/ep_flux/math-doc/document/img175.png +0 -0
- data/doc/ep_flux/math-doc/document/img176.png +0 -0
- data/doc/ep_flux/math-doc/document/img177.png +0 -0
- data/doc/ep_flux/math-doc/document/img178.png +0 -0
- data/doc/ep_flux/math-doc/document/img179.png +0 -0
- data/doc/ep_flux/math-doc/document/img18.png +0 -0
- data/doc/ep_flux/math-doc/document/img180.png +0 -0
- data/doc/ep_flux/math-doc/document/img181.png +0 -0
- data/doc/ep_flux/math-doc/document/img182.png +0 -0
- data/doc/ep_flux/math-doc/document/img183.png +0 -0
- data/doc/ep_flux/math-doc/document/img184.png +0 -0
- data/doc/ep_flux/math-doc/document/img185.png +0 -0
- data/doc/ep_flux/math-doc/document/img186.png +0 -0
- data/doc/ep_flux/math-doc/document/img187.png +0 -0
- data/doc/ep_flux/math-doc/document/img188.png +0 -0
- data/doc/ep_flux/math-doc/document/img189.png +0 -0
- data/doc/ep_flux/math-doc/document/img19.png +0 -0
- data/doc/ep_flux/math-doc/document/img190.png +0 -0
- data/doc/ep_flux/math-doc/document/img191.png +0 -0
- data/doc/ep_flux/math-doc/document/img192.png +0 -0
- data/doc/ep_flux/math-doc/document/img193.png +0 -0
- data/doc/ep_flux/math-doc/document/img194.png +0 -0
- data/doc/ep_flux/math-doc/document/img195.png +0 -0
- data/doc/ep_flux/math-doc/document/img196.png +0 -0
- data/doc/ep_flux/math-doc/document/img197.png +0 -0
- data/doc/ep_flux/math-doc/document/img198.png +0 -0
- data/doc/ep_flux/math-doc/document/img199.png +0 -0
- data/doc/ep_flux/math-doc/document/img2.png +0 -0
- data/doc/ep_flux/math-doc/document/img20.png +0 -0
- data/doc/ep_flux/math-doc/document/img200.png +0 -0
- data/doc/ep_flux/math-doc/document/img21.png +0 -0
- data/doc/ep_flux/math-doc/document/img22.png +0 -0
- data/doc/ep_flux/math-doc/document/img23.png +0 -0
- data/doc/ep_flux/math-doc/document/img24.png +0 -0
- data/doc/ep_flux/math-doc/document/img25.png +0 -0
- data/doc/ep_flux/math-doc/document/img26.png +0 -0
- data/doc/ep_flux/math-doc/document/img27.png +0 -0
- data/doc/ep_flux/math-doc/document/img28.png +0 -0
- data/doc/ep_flux/math-doc/document/img29.png +0 -0
- data/doc/ep_flux/math-doc/document/img3.png +0 -0
- data/doc/ep_flux/math-doc/document/img30.png +0 -0
- data/doc/ep_flux/math-doc/document/img31.png +0 -0
- data/doc/ep_flux/math-doc/document/img32.png +0 -0
- data/doc/ep_flux/math-doc/document/img33.png +0 -0
- data/doc/ep_flux/math-doc/document/img34.png +0 -0
- data/doc/ep_flux/math-doc/document/img35.png +0 -0
- data/doc/ep_flux/math-doc/document/img36.png +0 -0
- data/doc/ep_flux/math-doc/document/img37.png +0 -0
- data/doc/ep_flux/math-doc/document/img38.png +0 -0
- data/doc/ep_flux/math-doc/document/img39.png +0 -0
- data/doc/ep_flux/math-doc/document/img4.png +0 -0
- data/doc/ep_flux/math-doc/document/img40.png +0 -0
- data/doc/ep_flux/math-doc/document/img41.png +0 -0
- data/doc/ep_flux/math-doc/document/img42.png +0 -0
- data/doc/ep_flux/math-doc/document/img43.png +0 -0
- data/doc/ep_flux/math-doc/document/img44.png +0 -0
- data/doc/ep_flux/math-doc/document/img45.png +0 -0
- data/doc/ep_flux/math-doc/document/img46.png +0 -0
- data/doc/ep_flux/math-doc/document/img47.png +0 -0
- data/doc/ep_flux/math-doc/document/img48.png +0 -0
- data/doc/ep_flux/math-doc/document/img49.png +0 -0
- data/doc/ep_flux/math-doc/document/img5.png +0 -0
- data/doc/ep_flux/math-doc/document/img50.png +0 -0
- data/doc/ep_flux/math-doc/document/img51.png +0 -0
- data/doc/ep_flux/math-doc/document/img52.png +0 -0
- data/doc/ep_flux/math-doc/document/img53.png +0 -0
- data/doc/ep_flux/math-doc/document/img54.png +0 -0
- data/doc/ep_flux/math-doc/document/img55.png +0 -0
- data/doc/ep_flux/math-doc/document/img56.png +0 -0
- data/doc/ep_flux/math-doc/document/img57.png +0 -0
- data/doc/ep_flux/math-doc/document/img58.png +0 -0
- data/doc/ep_flux/math-doc/document/img59.png +0 -0
- data/doc/ep_flux/math-doc/document/img6.png +0 -0
- data/doc/ep_flux/math-doc/document/img60.png +0 -0
- data/doc/ep_flux/math-doc/document/img61.png +0 -0
- data/doc/ep_flux/math-doc/document/img62.png +0 -0
- data/doc/ep_flux/math-doc/document/img63.png +0 -0
- data/doc/ep_flux/math-doc/document/img64.png +0 -0
- data/doc/ep_flux/math-doc/document/img65.png +0 -0
- data/doc/ep_flux/math-doc/document/img66.png +0 -0
- data/doc/ep_flux/math-doc/document/img67.png +0 -0
- data/doc/ep_flux/math-doc/document/img68.png +0 -0
- data/doc/ep_flux/math-doc/document/img69.png +0 -0
- data/doc/ep_flux/math-doc/document/img7.png +0 -0
- data/doc/ep_flux/math-doc/document/img70.png +0 -0
- data/doc/ep_flux/math-doc/document/img71.png +0 -0
- data/doc/ep_flux/math-doc/document/img72.png +0 -0
- data/doc/ep_flux/math-doc/document/img73.png +0 -0
- data/doc/ep_flux/math-doc/document/img74.png +0 -0
- data/doc/ep_flux/math-doc/document/img75.png +0 -0
- data/doc/ep_flux/math-doc/document/img76.png +0 -0
- data/doc/ep_flux/math-doc/document/img77.png +0 -0
- data/doc/ep_flux/math-doc/document/img78.png +0 -0
- data/doc/ep_flux/math-doc/document/img79.png +0 -0
- data/doc/ep_flux/math-doc/document/img8.png +0 -0
- data/doc/ep_flux/math-doc/document/img80.png +0 -0
- data/doc/ep_flux/math-doc/document/img81.png +0 -0
- data/doc/ep_flux/math-doc/document/img82.png +0 -0
- data/doc/ep_flux/math-doc/document/img83.png +0 -0
- data/doc/ep_flux/math-doc/document/img84.png +0 -0
- data/doc/ep_flux/math-doc/document/img85.png +0 -0
- data/doc/ep_flux/math-doc/document/img86.png +0 -0
- data/doc/ep_flux/math-doc/document/img87.png +0 -0
- data/doc/ep_flux/math-doc/document/img88.png +0 -0
- data/doc/ep_flux/math-doc/document/img89.png +0 -0
- data/doc/ep_flux/math-doc/document/img9.png +0 -0
- data/doc/ep_flux/math-doc/document/img90.png +0 -0
- data/doc/ep_flux/math-doc/document/img91.png +0 -0
- data/doc/ep_flux/math-doc/document/img92.png +0 -0
- data/doc/ep_flux/math-doc/document/img93.png +0 -0
- data/doc/ep_flux/math-doc/document/img94.png +0 -0
- data/doc/ep_flux/math-doc/document/img95.png +0 -0
- data/doc/ep_flux/math-doc/document/img96.png +0 -0
- data/doc/ep_flux/math-doc/document/img97.png +0 -0
- data/doc/ep_flux/math-doc/document/img98.png +0 -0
- data/doc/ep_flux/math-doc/document/img99.png +0 -0
- data/doc/ep_flux/math-doc/document/index.html +101 -0
- data/doc/ep_flux/math-doc/document/internals.pl +258 -0
- data/doc/ep_flux/math-doc/document/labels.pl +265 -0
- data/doc/ep_flux/math-doc/document/next.png +0 -0
- data/doc/ep_flux/math-doc/document/next_g.png +0 -0
- data/doc/ep_flux/math-doc/document/node1.html +104 -0
- data/doc/ep_flux/math-doc/document/node10.html +164 -0
- data/doc/ep_flux/math-doc/document/node11.html +86 -0
- data/doc/ep_flux/math-doc/document/node12.html +166 -0
- data/doc/ep_flux/math-doc/document/node13.html +897 -0
- data/doc/ep_flux/math-doc/document/node14.html +1065 -0
- data/doc/ep_flux/math-doc/document/node15.html +72 -0
- data/doc/ep_flux/math-doc/document/node16.html +81 -0
- data/doc/ep_flux/math-doc/document/node2.html +82 -0
- data/doc/ep_flux/math-doc/document/node3.html +91 -0
- data/doc/ep_flux/math-doc/document/node4.html +149 -0
- data/doc/ep_flux/math-doc/document/node5.html +330 -0
- data/doc/ep_flux/math-doc/document/node6.html +99 -0
- data/doc/ep_flux/math-doc/document/node7.html +98 -0
- data/doc/ep_flux/math-doc/document/node8.html +83 -0
- data/doc/ep_flux/math-doc/document/node9.html +140 -0
- data/doc/ep_flux/math-doc/document/prev.png +0 -0
- data/doc/ep_flux/math-doc/document/prev_g.png +0 -0
- data/doc/ep_flux/math-doc/document/up.png +0 -0
- data/doc/ep_flux/math-doc/document/up_g.png +0 -0
- data/doc/ep_flux/math-doc/document.pdf +0 -0
- data/doc/ep_flux/math-doc/document.tex +2018 -0
- data/doc/gdir.html +412 -0
- data/doc/gdir_client.html +16 -0
- data/doc/gdir_connect_ftp-like.html +61 -0
- data/doc/gdir_server.html +45 -0
- data/doc/ggraph.html +1615 -0
- data/doc/gpcat.html +44 -0
- data/doc/gpcut.html +41 -0
- data/doc/gphys.html +532 -0
- data/doc/gphys_fft.html +324 -0
- data/doc/gphys_grads_io.html +69 -0
- data/doc/gphys_grib_io.html +82 -0
- data/doc/gphys_io.html +120 -0
- data/doc/gphys_io_common.html +18 -0
- data/doc/gphys_netcdf_io.html +283 -0
- data/doc/gplist.html +24 -0
- data/doc/gpmath.html +51 -0
- data/doc/gpmaxmin.html +31 -0
- data/doc/gpprint.html +34 -0
- data/doc/gpview.html +270 -0
- data/doc/grads2nc_with_gphys.html +21 -0
- data/doc/grads_gridded.html +307 -0
- data/doc/grib.html +144 -0
- data/doc/grid.html +212 -0
- data/doc/index.html +133 -0
- data/doc/index.rd +127 -0
- data/doc/netcdf_convention.html +136 -0
- data/doc/unumeric.html +176 -0
- data/doc/update +64 -0
- data/doc/varray.html +299 -0
- data/doc/varraycomposite.html +67 -0
- data/ext_coord.c +209 -0
- data/ext_init.c +7 -0
- data/extconf.rb +42 -0
- data/install.rb +130 -0
- data/interpo.c +497 -0
- data/lib/numru/dcl_mouse.rb +71 -0
- data/lib/numru/dclext_datetime_ax.rb +220 -0
- data/lib/numru/derivative.rb +348 -0
- data/lib/numru/ganalysis/covariance.rb +154 -0
- data/lib/numru/ganalysis/eof.rb +298 -0
- data/lib/numru/ganalysis/histogram.rb +252 -0
- data/lib/numru/ganalysis/met.rb +317 -0
- data/lib/numru/ganalysis/planet.rb +182 -0
- data/lib/numru/ganalysis.rb +7 -0
- data/lib/numru/gdir.rb +1038 -0
- data/lib/numru/gdir_connect_ftp-like.rb +149 -0
- data/lib/numru/ggraph.rb +5838 -0
- data/lib/numru/ggraph_on_merdional_section.rb +178 -0
- data/lib/numru/gphys/assoccoords.rb +359 -0
- data/lib/numru/gphys/attribute.rb +129 -0
- data/lib/numru/gphys/attributenetcdf.rb +80 -0
- data/lib/numru/gphys/axis.rb +963 -0
- data/lib/numru/gphys/coordmapping.rb +286 -0
- data/lib/numru/gphys/coordtransform.rb +209 -0
- data/lib/numru/gphys/derivative.rb +314 -0
- data/lib/numru/gphys/ep_flux.rb +868 -0
- data/lib/numru/gphys/gpcommon.rb +52 -0
- data/lib/numru/gphys/gphys.rb +1207 -0
- data/lib/numru/gphys/gphys_fft.rb +886 -0
- data/lib/numru/gphys/gphys_grads_io.rb +212 -0
- data/lib/numru/gphys/gphys_grib_io.rb +214 -0
- data/lib/numru/gphys/gphys_gtool3_io.rb +162 -0
- data/lib/numru/gphys/gphys_hdfeos5_io.rb +672 -0
- data/lib/numru/gphys/gphys_io.rb +452 -0
- data/lib/numru/gphys/gphys_io_common.rb +126 -0
- data/lib/numru/gphys/gphys_netcdf_io.rb +800 -0
- data/lib/numru/gphys/gphys_nusdas_io.rb +132 -0
- data/lib/numru/gphys/grads_gridded.rb +1638 -0
- data/lib/numru/gphys/grib.rb +2049 -0
- data/lib/numru/gphys/grib_params.rb +1465 -0
- data/lib/numru/gphys/grid.rb +723 -0
- data/lib/numru/gphys/gtool3.rb +771 -0
- data/lib/numru/gphys/interpolate.rb +854 -0
- data/lib/numru/gphys/narray_ext.rb +34 -0
- data/lib/numru/gphys/netcdf_convention.rb +406 -0
- data/lib/numru/gphys/subsetmapping.rb +332 -0
- data/lib/numru/gphys/unumeric.rb +522 -0
- data/lib/numru/gphys/varray.rb +1109 -0
- data/lib/numru/gphys/varraycomposite.rb +415 -0
- data/lib/numru/gphys/varraygrads.rb +225 -0
- data/lib/numru/gphys/varraygrib.rb +177 -0
- data/lib/numru/gphys/varraygtool3.rb +226 -0
- data/lib/numru/gphys/varrayhdfeos5.rb +451 -0
- data/lib/numru/gphys/varraynetcdf.rb +350 -0
- data/lib/numru/gphys/varraynusdas.rb +59 -0
- data/lib/numru/gphys.rb +9 -0
- data/lib/numru/htdir.rb +170 -0
- data/multibitIO.c +567 -0
- data/sample/cira86_to_nc.rb +122 -0
- data/sample/druby_cli1.rb +21 -0
- data/sample/druby_cli2.rb +34 -0
- data/sample/druby_serv1.rb +30 -0
- data/sample/druby_serv2.rb +64 -0
- data/sample/ep_flux/demo_NCEP_1.rb +48 -0
- data/sample/ep_flux/demo_NCEP_2.rb +57 -0
- data/sample/ep_flux/demo_NCEP_3.rb +81 -0
- data/sample/ggraph_latlon_labelling_dr002690.rb +159 -0
- data/sample/ggraph_mapfit-axes_dr002687.rb +131 -0
- data/sample/map_projection.rb +121 -0
- data/sample/ncep_theta_coord.rb +79 -0
- data/test/eof_slp.rb +28 -0
- data/test/mltbit.dat +0 -0
- data/test/test_ep_flux.rb +533 -0
- data/test/test_multibitIO.rb +19 -0
- data/testdata/T.jan.ctl +12 -0
- data/testdata/T.jan.dat +0 -0
- data/testdata/T.jan.grib +0 -0
- data/testdata/T.jan.nc +0 -0
- data/testdata/T.jan.packed.withmiss.nc +0 -0
- data/testdata/UV.jan.nc +0 -0
- data/testdata/assoc_crds.nc +0 -0
- data/testdata/cira86.dat +1332 -0
- metadata +621 -0
|
@@ -0,0 +1,963 @@
|
|
|
1
|
+
require "numru/gphys/varray"
|
|
2
|
+
require "numru/gphys/varraynetcdf"
|
|
3
|
+
require "numru/gphys/varraycomposite"
|
|
4
|
+
require "date"
|
|
5
|
+
|
|
6
|
+
=begin
|
|
7
|
+
=class NumRu::Axis
|
|
8
|
+
|
|
9
|
+
A class of to handle a descretized physical coordinate.
|
|
10
|
+
|
|
11
|
+
==Overview
|
|
12
|
+
|
|
13
|
+
An NumRu::Axis object is meant to represent a dimension in a NumRu::Grid
|
|
14
|
+
object, which is used in NumRu::Grid (Hereafter, NumRu:: is omitted).
|
|
15
|
+
An Axis has 1-dimensional data on grid-point posisions as a VArray.
|
|
16
|
+
In addition, it can have supplementary data (as VArray objects).
|
|
17
|
+
|
|
18
|
+
Three types of axes are supported in this class:
|
|
19
|
+
|
|
20
|
+
1. Simple (mostly point-sampled) axes
|
|
21
|
+
2. Cell-type axes. In this case, grid points are either
|
|
22
|
+
at cell boundaries or within the cells (oftern at the center).
|
|
23
|
+
3. Simple ("bare") indexing (without particular physical meaning)
|
|
24
|
+
|
|
25
|
+
In most applications, the 1st type would be enough, but
|
|
26
|
+
the 2nd type would be useful for some type of numerical
|
|
27
|
+
simulation. The 3rd is not physical and may not be considered as
|
|
28
|
+
"axes", but this could be convenient for some practical applications.
|
|
29
|
+
|
|
30
|
+
==Class Methods
|
|
31
|
+
---Axis.new(cell=false,bare_index=false,name=nil)
|
|
32
|
+
Constructor. The first two arguments are to specify one of the
|
|
33
|
+
types explained above.
|
|
34
|
+
|
|
35
|
+
ARGUMENTS
|
|
36
|
+
* cell (true or false)
|
|
37
|
+
* bare_index (true or false)
|
|
38
|
+
* name (String or nil): the default name (when nil) is "noname"
|
|
39
|
+
|
|
40
|
+
RETURN VALUE
|
|
41
|
+
* an Axis
|
|
42
|
+
|
|
43
|
+
---Axis.defined_operations
|
|
44
|
+
Returns the name of the methods defined in Axis to do
|
|
45
|
+
some operation along the axis.
|
|
46
|
+
|
|
47
|
+
RETURN VALUE
|
|
48
|
+
* an Array of String. Current default value is ["integrate","average"].
|
|
49
|
+
|
|
50
|
+
---Axis.humane_messaging = t_or_f
|
|
51
|
+
If false is given, the [] method is changed to return a naive
|
|
52
|
+
straightforward message if the axis is lost. -- By default,
|
|
53
|
+
it returns a fancy but sometimes unwanted message if the
|
|
54
|
+
axis is the time with since field in the form of yyyy-mm-dd....
|
|
55
|
+
|
|
56
|
+
==Instance Methods
|
|
57
|
+
---name=(nm)
|
|
58
|
+
Set a name.
|
|
59
|
+
|
|
60
|
+
ARGUMENTS
|
|
61
|
+
* name (String)
|
|
62
|
+
|
|
63
|
+
RETURN VALUE
|
|
64
|
+
* name (the argument)
|
|
65
|
+
---name
|
|
66
|
+
Returns the name.
|
|
67
|
+
|
|
68
|
+
RETURN VALUE
|
|
69
|
+
* a String
|
|
70
|
+
|
|
71
|
+
---cell?
|
|
72
|
+
Whether or not self is a cell-type axis.
|
|
73
|
+
|
|
74
|
+
RETURN VALUE
|
|
75
|
+
* true or false
|
|
76
|
+
|
|
77
|
+
---cell_center?
|
|
78
|
+
Whether or not self represents data points within the cells (which is
|
|
79
|
+
often, but not necessarily, the centers of the cells).
|
|
80
|
+
|
|
81
|
+
RETURN VALUE
|
|
82
|
+
* true, false, or nil (when the axis is not cell-type)
|
|
83
|
+
|
|
84
|
+
---cell_bounds?
|
|
85
|
+
Whether or not self represents data points at the cell bondaries.
|
|
86
|
+
|
|
87
|
+
RETURN VALUE
|
|
88
|
+
* true, false, or nil (when the axis is not cell-type)
|
|
89
|
+
|
|
90
|
+
---bare_index?
|
|
91
|
+
Whether or not self is of the bare-index type.
|
|
92
|
+
|
|
93
|
+
RETURN VALUE
|
|
94
|
+
* true or false.
|
|
95
|
+
|
|
96
|
+
---flatten
|
|
97
|
+
Returns the VArray objects in self as a flat Array. No cloning is made.
|
|
98
|
+
|
|
99
|
+
RETURN VALUE
|
|
100
|
+
* an Array of VArray objects.
|
|
101
|
+
|
|
102
|
+
---each_varray
|
|
103
|
+
Iterator for each VArray object in self (dependent on ((<flatten>)).
|
|
104
|
+
|
|
105
|
+
RETURN VALUE
|
|
106
|
+
* an Array of VArray objects (same as ((<flatten>))).
|
|
107
|
+
|
|
108
|
+
---copy
|
|
109
|
+
Make a deep clone onto memory.
|
|
110
|
+
All the VArray objects in the return value will be
|
|
111
|
+
of the root class of VArray.
|
|
112
|
+
|
|
113
|
+
RETURN VALUE
|
|
114
|
+
* an Axis
|
|
115
|
+
|
|
116
|
+
---collect
|
|
117
|
+
|
|
118
|
+
This method is like ((<copy>)), but it is the 'collect'
|
|
119
|
+
iterator for each VArray in self (block required).
|
|
120
|
+
|
|
121
|
+
RETURN VALUE
|
|
122
|
+
* an Axis
|
|
123
|
+
|
|
124
|
+
---pos=(pos)
|
|
125
|
+
Sets the grid-point positions (disretized coordinate values).
|
|
126
|
+
|
|
127
|
+
ARGUMENTS
|
|
128
|
+
* pos (a 1D VArray)
|
|
129
|
+
|
|
130
|
+
RETURN VALUE
|
|
131
|
+
* pos (the argument)
|
|
132
|
+
|
|
133
|
+
---set_pos(pos)
|
|
134
|
+
Sets the grid-point positions (disretized coordinate values).
|
|
135
|
+
|
|
136
|
+
ARGUMENTS
|
|
137
|
+
* pos (a 1D VArray)
|
|
138
|
+
|
|
139
|
+
RETURN VALUE
|
|
140
|
+
* self
|
|
141
|
+
|
|
142
|
+
---pos
|
|
143
|
+
Returns the grid-point positions (disretized coordinate values).
|
|
144
|
+
|
|
145
|
+
RETURN VALUE
|
|
146
|
+
* a VArray (no duplication is made)
|
|
147
|
+
|
|
148
|
+
---cell_center
|
|
149
|
+
|
|
150
|
+
When cell-type, returns the positions of grid points at cell centers.
|
|
151
|
+
|
|
152
|
+
RETURN VALUE
|
|
153
|
+
* a VArray (no duplication is made)
|
|
154
|
+
|
|
155
|
+
---cell_bounds
|
|
156
|
+
|
|
157
|
+
When cell-type, returns the positions of grid points at cell boundaries.
|
|
158
|
+
|
|
159
|
+
RETURN VALUE
|
|
160
|
+
* a VArray (no duplication is made)
|
|
161
|
+
|
|
162
|
+
---length
|
|
163
|
+
Returns the length of the axis.
|
|
164
|
+
|
|
165
|
+
RETURN VALUE
|
|
166
|
+
* an Integer
|
|
167
|
+
|
|
168
|
+
---set_cell(center, bounds, name=nil)
|
|
169
|
+
Set up cell-type axis, by giving both the cell centers and boundaries.
|
|
170
|
+
Completion of the set up is deferred until one of ((<set_pos_to_center>))
|
|
171
|
+
and ((<set_pos_to_bounds>)) is called.
|
|
172
|
+
|
|
173
|
+
ARGUMENTS
|
|
174
|
+
* center (a 1D VArray)
|
|
175
|
+
* bounds (a 1D VArray)
|
|
176
|
+
* name (String)
|
|
177
|
+
|
|
178
|
+
RETURN VALUE
|
|
179
|
+
* self
|
|
180
|
+
|
|
181
|
+
---set_cell_guess_bounds(center, name=nil)
|
|
182
|
+
Set up cell-type axis, by specifing only the cell centers
|
|
183
|
+
and deriving bounds with a naive assumption.
|
|
184
|
+
|
|
185
|
+
ARGUMENTS
|
|
186
|
+
* center (a 1D VArray)
|
|
187
|
+
* name (String)
|
|
188
|
+
|
|
189
|
+
RETURN VALUE
|
|
190
|
+
* self
|
|
191
|
+
|
|
192
|
+
---set_pos_to_center
|
|
193
|
+
Set the position of the current axis to the centers of the cells.
|
|
194
|
+
This or ((<set_pos_to_bounds>)) is needed to complete the set up
|
|
195
|
+
with set_cell_* methods.
|
|
196
|
+
|
|
197
|
+
---set_pos_to_bounds
|
|
198
|
+
Set the position of the current axis to the cell bondaries.
|
|
199
|
+
This or ((<set_pos_to_center>)) is needed to complete the set up
|
|
200
|
+
with set_cell_* methods.
|
|
201
|
+
|
|
202
|
+
---set_aux(name,vary)
|
|
203
|
+
Set auxiliary data
|
|
204
|
+
|
|
205
|
+
ARGUMENTS
|
|
206
|
+
* name (String) a tag to express the kind of the data
|
|
207
|
+
* vary (a VArray) the data
|
|
208
|
+
|
|
209
|
+
RETURN VALUE
|
|
210
|
+
* vary (the 2nd argument)
|
|
211
|
+
|
|
212
|
+
---get_aux(name)
|
|
213
|
+
|
|
214
|
+
Returns auxiliary data
|
|
215
|
+
|
|
216
|
+
ARGUMENTS
|
|
217
|
+
* name (String) a tag to express the kind of the data (see ((<set_aux>))).
|
|
218
|
+
|
|
219
|
+
RETURN VALUE
|
|
220
|
+
* a VArray
|
|
221
|
+
|
|
222
|
+
---aux_names
|
|
223
|
+
Returns a list of the names of auxiliary data
|
|
224
|
+
|
|
225
|
+
RETURN VALUE
|
|
226
|
+
* an Array of String
|
|
227
|
+
|
|
228
|
+
---to_gphys(datavary1d=nil)
|
|
229
|
+
To construct a GPhys object from an Axis.
|
|
230
|
+
|
|
231
|
+
ARGUMENTS
|
|
232
|
+
* datavary1d (nil or VArray) :
|
|
233
|
+
If nil, the position object of self becomes the main data object.
|
|
234
|
+
If a VArray, it is used as the main data object.
|
|
235
|
+
|
|
236
|
+
RETURN VALUE
|
|
237
|
+
* a GPhys
|
|
238
|
+
|
|
239
|
+
---[] (slicer)
|
|
240
|
+
Returns a subset. Its specification is the same as in NArray.
|
|
241
|
+
|
|
242
|
+
RETURN VALUE
|
|
243
|
+
* an Axis
|
|
244
|
+
|
|
245
|
+
---cut(coord_cutter)
|
|
246
|
+
Similar to ((<[]>)), but is based on the physical coordinate.
|
|
247
|
+
|
|
248
|
+
RETURN VALUE
|
|
249
|
+
* an Axis
|
|
250
|
+
|
|
251
|
+
---cut_rank_conserving(coord_cutter)
|
|
252
|
+
Similar to ((<cut>)), but is always rank-conserving. That is,
|
|
253
|
+
a subset specification like [i] is treated as [i..i]
|
|
254
|
+
|
|
255
|
+
RETURN VALUE
|
|
256
|
+
* an Axis
|
|
257
|
+
|
|
258
|
+
---integrate(ary,dim)
|
|
259
|
+
Does integration along the axis
|
|
260
|
+
|
|
261
|
+
ARGUMENTS
|
|
262
|
+
* ary (NArray or NArray-like multi-dimensional data class)
|
|
263
|
+
the data, whose dim-th dimension must have the same length as the axis.
|
|
264
|
+
* dim (Integer) : The dimension of ary, to which the operation is applied.
|
|
265
|
+
|
|
266
|
+
RETURN VALUE
|
|
267
|
+
* an obejct with the same class as ary, or of a Numeric
|
|
268
|
+
class if ary is 1D.
|
|
269
|
+
|
|
270
|
+
---integ_weight
|
|
271
|
+
Returns the integration weight (whose default is nil).
|
|
272
|
+
|
|
273
|
+
---integ_weight=(wgt)
|
|
274
|
+
Sets the integration weight (whose default is nil).
|
|
275
|
+
|
|
276
|
+
---average(ary,dim)
|
|
277
|
+
Similar to ((<integrate>)), but does averaging
|
|
278
|
+
|
|
279
|
+
ARGUMENTS
|
|
280
|
+
* see ((<integrate>))
|
|
281
|
+
|
|
282
|
+
RETURN VALUE
|
|
283
|
+
* see ((<integrate>))
|
|
284
|
+
|
|
285
|
+
---average_weight
|
|
286
|
+
Returns the integration weight (whose default is nil).
|
|
287
|
+
|
|
288
|
+
---average_weight=(wgt)
|
|
289
|
+
Sets the integration weight (whose default is nil).
|
|
290
|
+
|
|
291
|
+
---draw_positive
|
|
292
|
+
Returns the direction to plot the axis, which relies on the
|
|
293
|
+
VArray#axis_draw_positive method.
|
|
294
|
+
|
|
295
|
+
RETURN VALUE
|
|
296
|
+
* one of the following:
|
|
297
|
+
* true: axis should be drawn in the increasing order (to right/upward)
|
|
298
|
+
* false: axis should be drawn in the decreasing order
|
|
299
|
+
* nil: not specified
|
|
300
|
+
|
|
301
|
+
---cyclic?
|
|
302
|
+
Returns whether the axis is cyclic.
|
|
303
|
+
(Relies on the VArray#axis_cyclic? method.)
|
|
304
|
+
|
|
305
|
+
RETURN VALUE
|
|
306
|
+
* one of the following:
|
|
307
|
+
* true: cyclic
|
|
308
|
+
* false: not cyclic
|
|
309
|
+
* nil: not specified
|
|
310
|
+
|
|
311
|
+
---modulo
|
|
312
|
+
Returns the modulo of a cyclic axis
|
|
313
|
+
(Relies on the VArray#axis_modulo method.)
|
|
314
|
+
|
|
315
|
+
RETURN VALUE
|
|
316
|
+
* one of the following:
|
|
317
|
+
* Float if the modulo is defined
|
|
318
|
+
* nil if modulo is not found
|
|
319
|
+
|
|
320
|
+
---cyclic_extendible?
|
|
321
|
+
Returns whether the axis is cyclic and appropriate to extend.
|
|
322
|
+
(Relies on the VArray#axis_cyclic_extendible? method.)
|
|
323
|
+
|
|
324
|
+
RETURN VALUE
|
|
325
|
+
* true or false
|
|
326
|
+
|
|
327
|
+
=end
|
|
328
|
+
|
|
329
|
+
module NumRu
|
|
330
|
+
|
|
331
|
+
class Axis
|
|
332
|
+
|
|
333
|
+
@@humane_message = true # if true, [] returns a humane message when the
|
|
334
|
+
# axis is lost. if false, it returns a naive one
|
|
335
|
+
def self.humane_message=(t_or_f)
|
|
336
|
+
@@humane_message = t_or_f
|
|
337
|
+
end
|
|
338
|
+
|
|
339
|
+
@@strftime_fmt = nil # nil, or String to explicitly specify the format
|
|
340
|
+
# for strftime used in []
|
|
341
|
+
def self.strftime_fmt=(fmt)
|
|
342
|
+
@@strftime_fmt = fmt
|
|
343
|
+
end
|
|
344
|
+
def self.strftime_fmt
|
|
345
|
+
@@strftime_fmt
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
def initialize(cell=false,bare_index=false,name=nil)
|
|
349
|
+
@init_fin = false # true/false (true if initializatn finished)
|
|
350
|
+
@name = name # String
|
|
351
|
+
@pos = nil # VArray (to set it can be deferred if
|
|
352
|
+
# @cell to support mother axes)
|
|
353
|
+
@cell = cell # true/false
|
|
354
|
+
@cell_center = nil # VArray (defined if @cell)
|
|
355
|
+
@cell_bounds = nil # VArray (defined if @cell)
|
|
356
|
+
@bare_index = bare_index # true/false(if true @cell is meaningless)
|
|
357
|
+
@aux = nil # Hash of VArray (auxiliary quantities)
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def inspect
|
|
361
|
+
"<axis pos=#{@pos.inspect}>"
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def name=(nm)
|
|
365
|
+
@name=nm
|
|
366
|
+
end
|
|
367
|
+
def name
|
|
368
|
+
@name || "noname"
|
|
369
|
+
end
|
|
370
|
+
|
|
371
|
+
def cell?
|
|
372
|
+
@cell
|
|
373
|
+
end
|
|
374
|
+
def cell_center?
|
|
375
|
+
@cell && @pos.equal?(@cell_center)
|
|
376
|
+
end
|
|
377
|
+
def cell_bounds?
|
|
378
|
+
@cell && @pos.equal?(@cell_bounds)
|
|
379
|
+
end
|
|
380
|
+
def bare_index?
|
|
381
|
+
@bare_index
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
def flatten
|
|
385
|
+
# return VArrays contained in a flat array
|
|
386
|
+
out = Array.new
|
|
387
|
+
out.push(@pos) if @pos
|
|
388
|
+
out.push(@cell_center) if @cell_center && !cell_center?
|
|
389
|
+
out.push(@cell_bounds) if @cell_bounds && !cell_bounds?
|
|
390
|
+
if @aux
|
|
391
|
+
@aux.each{|k,v|
|
|
392
|
+
out.push(v)
|
|
393
|
+
}
|
|
394
|
+
end
|
|
395
|
+
out
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
def each_varray
|
|
399
|
+
self.flatten.each{|x| yield x}
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
def copy
|
|
403
|
+
# deep clone onto memory
|
|
404
|
+
out = Axis.new(cell?, bare_index?, name)
|
|
405
|
+
if cell?
|
|
406
|
+
out.set_cell( @cell_center.copy, @cell_bounds.copy )
|
|
407
|
+
if cell_center?
|
|
408
|
+
out.set_pos_to_center
|
|
409
|
+
elsif cell_bounds?
|
|
410
|
+
out.set_pos_to_bounds
|
|
411
|
+
end
|
|
412
|
+
else
|
|
413
|
+
out.set_pos( @pos.copy )
|
|
414
|
+
end
|
|
415
|
+
if @aux
|
|
416
|
+
@aux.each{|k,v|
|
|
417
|
+
out.set_aux(k, v.copy)
|
|
418
|
+
}
|
|
419
|
+
end
|
|
420
|
+
out
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
def collect
|
|
424
|
+
# This method is like ((<copy>)), but it is the 'collect'
|
|
425
|
+
# iterator for each VArray in self (block required).
|
|
426
|
+
out = Axis.new(cell?, bare_index?, name)
|
|
427
|
+
if cell?
|
|
428
|
+
out.set_cell( yield(@cell_center), yield(@cell_bounds) )
|
|
429
|
+
if cell_center?
|
|
430
|
+
out.set_pos_to_center
|
|
431
|
+
elsif cell_bounds?
|
|
432
|
+
out.set_pos_to_bounds
|
|
433
|
+
end
|
|
434
|
+
else
|
|
435
|
+
out.set_pos( yield(@pos) )
|
|
436
|
+
end
|
|
437
|
+
if @aux
|
|
438
|
+
@aux.each{|k,v|
|
|
439
|
+
out.set_aux(k, yield(v))
|
|
440
|
+
}
|
|
441
|
+
end
|
|
442
|
+
out
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
def pos=(pos)
|
|
446
|
+
if !@cell
|
|
447
|
+
if ! pos.is_a?(VArray)
|
|
448
|
+
raise ArgumentError,"arg not a VArray: #{pos.class}"
|
|
449
|
+
end
|
|
450
|
+
if pos.rank != 1
|
|
451
|
+
raise ArgumentError,"rank of #{pos.name} (#{pos.rank}) is not 1"
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
@pos=pos
|
|
455
|
+
@init_fin = true
|
|
456
|
+
if ! @name
|
|
457
|
+
@name = pos.name
|
|
458
|
+
end
|
|
459
|
+
else
|
|
460
|
+
raise "This method is not available for a cell axis. "+
|
|
461
|
+
"Use set_pos_to_center or set_pos_to_bounds instead."
|
|
462
|
+
end
|
|
463
|
+
pos
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
def set_pos(pos)
|
|
467
|
+
self.pos= pos
|
|
468
|
+
@name = pos.name
|
|
469
|
+
self
|
|
470
|
+
end
|
|
471
|
+
|
|
472
|
+
def pos
|
|
473
|
+
raise "pos has not been set" if !@pos
|
|
474
|
+
@pos
|
|
475
|
+
end
|
|
476
|
+
def cell_center
|
|
477
|
+
@cell_center
|
|
478
|
+
end
|
|
479
|
+
def cell_bounds
|
|
480
|
+
@cell_bounds
|
|
481
|
+
end
|
|
482
|
+
|
|
483
|
+
def length
|
|
484
|
+
if @pos
|
|
485
|
+
@pos.length
|
|
486
|
+
else
|
|
487
|
+
raise "length is not determined until pos is set"
|
|
488
|
+
end
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
def set_cell(center, bounds, name=nil)
|
|
492
|
+
# it is the user's obligation to ensure that center and bounds
|
|
493
|
+
# have the same units etc.
|
|
494
|
+
|
|
495
|
+
# < error check >
|
|
496
|
+
|
|
497
|
+
if ! @cell; raise "method not available for a non-cell axis"; end
|
|
498
|
+
|
|
499
|
+
if ! center.is_a?(VArray)
|
|
500
|
+
raise ArgumentError,"1st arg not a VArray: #{center.class}"
|
|
501
|
+
end
|
|
502
|
+
if center.rank != 1
|
|
503
|
+
raise ArgumentError,"center: rank of #{center.name} (#{center.rank}) is not 1"
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
if ! bounds.is_a?(VArray)
|
|
507
|
+
raise ArgumentError,"2nd arg not a VArray: #{bounds.class}"
|
|
508
|
+
end
|
|
509
|
+
if bounds.rank != 1
|
|
510
|
+
raise ArgumentError,"bounds: rank of #{bounds.name} (#{bounds.rank}) is not 1"
|
|
511
|
+
end
|
|
512
|
+
|
|
513
|
+
if( center.length != bounds.length-1 )
|
|
514
|
+
raise "center.length != bounds.length-1"
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
# < do the job >
|
|
518
|
+
|
|
519
|
+
@cell_center = center
|
|
520
|
+
@cell_bounds = bounds
|
|
521
|
+
if name
|
|
522
|
+
@name=name
|
|
523
|
+
end
|
|
524
|
+
@init_fin = true # To set @pos is deferred at this moment.
|
|
525
|
+
# use set_pos_to_(bounds|center) to make
|
|
526
|
+
# the object fully available
|
|
527
|
+
self
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
def set_aux(name,vary)
|
|
531
|
+
if !name.is_a?(String)
|
|
532
|
+
raise ArgumentError,"1nd arg: not a String"
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
if ! vary.is_a?(VArray)
|
|
536
|
+
raise ArgumentError,"2nd arg not a VArray: #{vary.class}"
|
|
537
|
+
end
|
|
538
|
+
if vary.rank != 1
|
|
539
|
+
raise ArgumentError,"rank of #{vary.name} (#{vary.rank}) is not 1"
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
if !@aux; @aux = Hash.new; end
|
|
543
|
+
|
|
544
|
+
@aux[name] = vary
|
|
545
|
+
self
|
|
546
|
+
end
|
|
547
|
+
def get_aux(name)
|
|
548
|
+
@aux[name]
|
|
549
|
+
end
|
|
550
|
+
def aux_names
|
|
551
|
+
@aux ? @aux.keys : []
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
def to_gphys(datavary1d=nil)
|
|
555
|
+
# To form a 1-dimensional GPhys
|
|
556
|
+
# (Dependent on GPhys&Grid, unlike other methods Axis,
|
|
557
|
+
# so the test program is in gphys.rb)
|
|
558
|
+
# Arguments
|
|
559
|
+
# * datavary1d (nil or VArray): 1D VArray with the same
|
|
560
|
+
# size as the axis. If omitted, @pos (coordinate variable
|
|
561
|
+
# of the variable) is used.
|
|
562
|
+
if !datavary1d
|
|
563
|
+
datavary1d = @pos.copy
|
|
564
|
+
else
|
|
565
|
+
if datavary1d.rank != 1 || datavary1d.length != length
|
|
566
|
+
raise ArgumentError, "Must be 1D and same size"
|
|
567
|
+
end
|
|
568
|
+
end
|
|
569
|
+
GPhys.new( Grid.new(self), datavary1d )
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
def [] (slicer)
|
|
573
|
+
if ! @pos
|
|
574
|
+
raise "pos has not been set. Forgot set_pos_to_(center|bounds)?"
|
|
575
|
+
end
|
|
576
|
+
|
|
577
|
+
case slicer
|
|
578
|
+
when Fixnum
|
|
579
|
+
pos=@pos[slicer]
|
|
580
|
+
cval = ( pos.val.is_a?(Numeric) ? pos.val : pos.val[0] )
|
|
581
|
+
units = pos.get_att('units')
|
|
582
|
+
info_lost = false
|
|
583
|
+
if @@humane_message
|
|
584
|
+
if units && /(.*) *since *(.*)/ =~ units
|
|
585
|
+
calendar = self.pos.get_att('calendar')
|
|
586
|
+
datetime = UNumeric[cval, units].to_datetime(0.1,calendar)
|
|
587
|
+
if datetime
|
|
588
|
+
if Units[units] =~ Units['days since 1-1-1'] # s,hour,day,..
|
|
589
|
+
info_lost = datetime.strftime(@@strftime_fmt || '%Y-%m-%d %H:%M:%S%z')
|
|
590
|
+
elsif Units[units] =~ Units['months since 1-1-1'] # year,month,pentad,..
|
|
591
|
+
if /mon/ =~ units.to_s || /year/ =~ units.to_s
|
|
592
|
+
info_lost = datetime.strftime(@@strftime_fmt || '%Y-%m')
|
|
593
|
+
else # maybe pentad
|
|
594
|
+
info_lost = datetime.strftime(@@strftime_fmt || '%Y-%m-%d')
|
|
595
|
+
end
|
|
596
|
+
end
|
|
597
|
+
end
|
|
598
|
+
info_lost_set = true
|
|
599
|
+
end
|
|
600
|
+
end
|
|
601
|
+
if !info_lost_set
|
|
602
|
+
sval = sprintf("%g",cval)
|
|
603
|
+
info_lost = "#{self.name}=#{sval}"
|
|
604
|
+
if (units) # substitution
|
|
605
|
+
info_lost += " "+units
|
|
606
|
+
end
|
|
607
|
+
end
|
|
608
|
+
return info_lost
|
|
609
|
+
when Range, true
|
|
610
|
+
# re-organize the range to support slicing of variables
|
|
611
|
+
# with a 1 larger / smaller length.
|
|
612
|
+
if true===slicer
|
|
613
|
+
range=0..-1
|
|
614
|
+
else
|
|
615
|
+
range = slicer
|
|
616
|
+
end
|
|
617
|
+
first = range.first
|
|
618
|
+
last = range.exclude_end? ? range.last-1 : range.last
|
|
619
|
+
if first < 0
|
|
620
|
+
first += self.length # first will be counted from the beginning
|
|
621
|
+
end
|
|
622
|
+
if last >= 0
|
|
623
|
+
last -= self.length # last will be counted from the end
|
|
624
|
+
end
|
|
625
|
+
slicer = first..last
|
|
626
|
+
newax=Axis.new(@cell,@bare_index)
|
|
627
|
+
when Hash
|
|
628
|
+
range = slicer.keys[0]
|
|
629
|
+
step = slicer[range]
|
|
630
|
+
range = 0..-1 if range==true
|
|
631
|
+
first = range.first
|
|
632
|
+
last = range.exclude_end? ? range.last-1 : range.last
|
|
633
|
+
if first < 0
|
|
634
|
+
first += self.length # first will be counted from the beginning
|
|
635
|
+
end
|
|
636
|
+
if last >= 0
|
|
637
|
+
last -= self.length # last will be counted from the end
|
|
638
|
+
end
|
|
639
|
+
slicer = { (first..last) => step }
|
|
640
|
+
newax=Axis.new(false,@bare_index) # always not a cell axis
|
|
641
|
+
when NArray, Array
|
|
642
|
+
newax=Axis.new(false,@bare_index) # always not a cell axis
|
|
643
|
+
else
|
|
644
|
+
raise ArgumentError, "Axis slicing with #{slicer.inspect} is not available"
|
|
645
|
+
end
|
|
646
|
+
|
|
647
|
+
if newax.bare_index? || !newax.cell?
|
|
648
|
+
pos=@pos[slicer]
|
|
649
|
+
newax.set_pos( pos )
|
|
650
|
+
elsif newax.cell?
|
|
651
|
+
center=@cell_center[slicer]
|
|
652
|
+
bounds=@cell_bounds[slicer]
|
|
653
|
+
newax.set_cell( center, bounds )
|
|
654
|
+
if self.cell_center?
|
|
655
|
+
newax.set_pos_to_center
|
|
656
|
+
elsif self.cell_bounds?
|
|
657
|
+
newax.set_pos_to_bounds
|
|
658
|
+
end
|
|
659
|
+
end
|
|
660
|
+
if @aux
|
|
661
|
+
@aux.each{ |name, vary|
|
|
662
|
+
# if (aux=vary[slicer]).rank != 0
|
|
663
|
+
newax.set_aux(name, vary[slicer])
|
|
664
|
+
# else
|
|
665
|
+
# print "WARNING #{__FILE__}:#{__LINE__} auxiliary VArray #{name} is eliminated\n"
|
|
666
|
+
# end
|
|
667
|
+
}
|
|
668
|
+
end
|
|
669
|
+
newax
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
def cut(coord_cutter)
|
|
673
|
+
_cut_(false, coord_cutter)
|
|
674
|
+
end
|
|
675
|
+
def cut_rank_conserving(coord_cutter)
|
|
676
|
+
_cut_(true, coord_cutter)
|
|
677
|
+
end
|
|
678
|
+
|
|
679
|
+
def _cut_(conserve_rank, coord_cutter)
|
|
680
|
+
|
|
681
|
+
# assume that the coordinates are monotonic (without checking)
|
|
682
|
+
|
|
683
|
+
slicer = Array.new
|
|
684
|
+
ax = self.pos.val
|
|
685
|
+
|
|
686
|
+
units = self.pos.get_att('units')
|
|
687
|
+
calendar = self.pos.get_att('calendar')
|
|
688
|
+
|
|
689
|
+
case coord_cutter
|
|
690
|
+
when true
|
|
691
|
+
slicer=true
|
|
692
|
+
when Range
|
|
693
|
+
# find the grid points included in the range
|
|
694
|
+
range = coord_cutter
|
|
695
|
+
range_ary = [range.first, range.last]
|
|
696
|
+
xmin = range_ary.min
|
|
697
|
+
xmax = range_ary.max
|
|
698
|
+
xmin = UNumeric.from_date(xmin,units,calendar).val if xmin.class <= Date
|
|
699
|
+
xmax = UNumeric.from_date(xmax,units,calendar).val if xmax.class <= Date
|
|
700
|
+
wh = ( (ax >= xmin) & (ax <= xmax) ).where
|
|
701
|
+
if wh.length == 0
|
|
702
|
+
raise "Range #{range} does not include any grid point in the axis '#{name}'"
|
|
703
|
+
end
|
|
704
|
+
idmin = wh.min
|
|
705
|
+
idmax = wh.max
|
|
706
|
+
slicer=idmin..idmax
|
|
707
|
+
when Numeric, Date, DateTime
|
|
708
|
+
# find the nearst point
|
|
709
|
+
pt = coord_cutter
|
|
710
|
+
pt = UNumeric.from_date(pt,units,calendar).val if pt.class <= Date
|
|
711
|
+
dx = (ax-pt).abs
|
|
712
|
+
minloc = _minloc_(dx)
|
|
713
|
+
if conserve_rank
|
|
714
|
+
slicer=minloc..minloc
|
|
715
|
+
else
|
|
716
|
+
slicer=minloc
|
|
717
|
+
end
|
|
718
|
+
when Array, NArray
|
|
719
|
+
# find the nearst points
|
|
720
|
+
ary = coord_cutter
|
|
721
|
+
slicer = ary.collect{ |pt|
|
|
722
|
+
pt = UNumeric.from_date(pt,units,calendar).val if pt.class <= Date
|
|
723
|
+
dx = (ax-pt).abs
|
|
724
|
+
minloc = _minloc_(dx)
|
|
725
|
+
}
|
|
726
|
+
else
|
|
727
|
+
raise TypeError, "(#{coord_cutter.inspect}) is not accepted as a coordinate selector"
|
|
728
|
+
end
|
|
729
|
+
|
|
730
|
+
[ self[slicer], slicer ]
|
|
731
|
+
end
|
|
732
|
+
private :_cut_
|
|
733
|
+
|
|
734
|
+
def _minloc_(a) # private to be used in _cut_
|
|
735
|
+
# Developper's MEMO: Such a method should be supported in NArray
|
|
736
|
+
minloc = 0 # initialization
|
|
737
|
+
for i in 0...(a.length-1) # here, do not assume monotonic
|
|
738
|
+
minloc = i+1 if a[i+1]<a[i]
|
|
739
|
+
end
|
|
740
|
+
minloc
|
|
741
|
+
end
|
|
742
|
+
private :_minloc_
|
|
743
|
+
|
|
744
|
+
def set_cell_guess_bounds(center, name=nil)
|
|
745
|
+
# derive bounds with a naive assumption (should be OK for
|
|
746
|
+
# an equally separated axis).
|
|
747
|
+
if ! center.is_a?(VArray) || center.rank != 1
|
|
748
|
+
raise ArgumentError, "1st arg: not a VArray, or its rank != 1"
|
|
749
|
+
end
|
|
750
|
+
vc = center.val
|
|
751
|
+
vb = NArray.float( vc.length + 1 )
|
|
752
|
+
vb[0] = vc[0] - (vc[1]-vc[0])/2 # Assume this!!
|
|
753
|
+
for i in 1...vb.length
|
|
754
|
+
vb[i] = 2*vc[i-1] - vb[i-1] # from vc[i-1] = (vb[i-1]+vb[i])/2
|
|
755
|
+
end
|
|
756
|
+
bounds = VArray.new(vb, center) # borrow attributes from center
|
|
757
|
+
set_cell(center, bounds, name)
|
|
758
|
+
end
|
|
759
|
+
|
|
760
|
+
def set_pos_to_center
|
|
761
|
+
raise "The method is not available for a non-cell axis" if ! @cell
|
|
762
|
+
@pos = @cell_center
|
|
763
|
+
if !@name
|
|
764
|
+
@name = @cell_center.name
|
|
765
|
+
end
|
|
766
|
+
self
|
|
767
|
+
end
|
|
768
|
+
|
|
769
|
+
def set_pos_to_bounds
|
|
770
|
+
raise "The method is not available for a non-cell axis" if ! @cell
|
|
771
|
+
@pos = @cell_bounds
|
|
772
|
+
if !@name
|
|
773
|
+
@name = @cell_bounds.name
|
|
774
|
+
end
|
|
775
|
+
self
|
|
776
|
+
end
|
|
777
|
+
|
|
778
|
+
def Axis.defined_operations
|
|
779
|
+
@@operations
|
|
780
|
+
end
|
|
781
|
+
|
|
782
|
+
@@operations = ["integrate","average"]
|
|
783
|
+
|
|
784
|
+
def integrate(ary,dim)
|
|
785
|
+
if !@integ_weight; _set_default_integ_weight; end
|
|
786
|
+
sh = (0...ary.rank).collect{|i| (i==dim) ? @integ_weight.length : 1 }
|
|
787
|
+
mn = sprintf("%g", ( UNumeric===(a=@pos.min) ? a.val : a) )
|
|
788
|
+
mx = sprintf("%g", ( UNumeric===(a=@pos.max) ? a.val : a) )
|
|
789
|
+
return [ ( ary * @integ_weight.reshape(*sh) ).sum(dim),
|
|
790
|
+
"integrated "+@name+":#{mn}..#{mx}" ]
|
|
791
|
+
end
|
|
792
|
+
|
|
793
|
+
def integ_weight; @integ_weight; end
|
|
794
|
+
def integ_weight=(wgt); @integ_weight=wgt; end
|
|
795
|
+
|
|
796
|
+
def average(ary,dim)
|
|
797
|
+
if !@avg_weight; _set_default_avg_weight; end
|
|
798
|
+
sh = (0...ary.rank).collect{|i| (i==dim) ? @avg_weight.length : 1 }
|
|
799
|
+
mn = sprintf("%g", ( UNumeric===(a=@pos.min) ? a.val : a) )
|
|
800
|
+
mx = sprintf("%g", ( UNumeric===(a=@pos.max) ? a.val : a) )
|
|
801
|
+
return [ ( ary * @avg_weight.reshape(*sh) ).sum(dim),
|
|
802
|
+
"averaged "+@name+":#{mn}..#{mx}" ]
|
|
803
|
+
end
|
|
804
|
+
|
|
805
|
+
def average_weight; @avg_weight; end
|
|
806
|
+
def average_weight=(wgt); @avg_weight=wgt; end
|
|
807
|
+
|
|
808
|
+
def draw_positive
|
|
809
|
+
# Returns the direction to plot the axis
|
|
810
|
+
# * true: axis should be drawn in the increasing order(to right/upward)
|
|
811
|
+
# * false: axis should be drawn in the decreasing order
|
|
812
|
+
# * nil: not specified (VArray's default if not overridden in
|
|
813
|
+
# subclasses)
|
|
814
|
+
@pos.axis_draw_positive
|
|
815
|
+
end
|
|
816
|
+
|
|
817
|
+
def cyclic?
|
|
818
|
+
@pos.axis_cyclic?
|
|
819
|
+
end
|
|
820
|
+
|
|
821
|
+
def modulo
|
|
822
|
+
@pos.axis_modulo
|
|
823
|
+
end
|
|
824
|
+
|
|
825
|
+
def cyclic_extendible?
|
|
826
|
+
@pos.axis_cyclic?
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
######### private methods ####################################
|
|
830
|
+
|
|
831
|
+
private
|
|
832
|
+
|
|
833
|
+
def _set_default_integ_weight
|
|
834
|
+
|
|
835
|
+
raise "Initialization is not completed" if ! @init_fin
|
|
836
|
+
if ! @pos
|
|
837
|
+
raise "pos has not been set. Call set_pos_to_(center|bounds)."
|
|
838
|
+
end
|
|
839
|
+
|
|
840
|
+
# < define numerical integration / averaging >
|
|
841
|
+
|
|
842
|
+
## 2005/09/12 DEVLOPMENT MEMO by horinout
|
|
843
|
+
## cyclic �ł��傤�ǂP�O���b�h�L������ modulo �ɒB����ꍇ
|
|
844
|
+
## �_�T���v����Z�������^�C�v�ł��T�C�N���b�N�p�d�݂�����
|
|
845
|
+
## �悤�ɂ������D
|
|
846
|
+
|
|
847
|
+
if( @bare_index )
|
|
848
|
+
@integ_weight = NArray.int(@pos.length).fill!(1)
|
|
849
|
+
#dist = weight.length
|
|
850
|
+
elsif ( !@cell || (@cell && @pos.equal?(@cell_bounds)) )
|
|
851
|
+
# --- use trapezoidal formula ---
|
|
852
|
+
posv = @pos.val
|
|
853
|
+
if posv.length == 1
|
|
854
|
+
raise "cannot define the default integration when length==1 and non-cell"
|
|
855
|
+
end
|
|
856
|
+
#dist = (posv[-1]-posv[0]).abs
|
|
857
|
+
@integ_weight = posv.dup
|
|
858
|
+
@integ_weight[0] = (posv[1]-posv[0]).abs/2
|
|
859
|
+
@integ_weight[-1] = (posv[-1]-posv[-2]).abs/2
|
|
860
|
+
@integ_weight[1..-2] = (posv[2..-1] - posv[0..-3]).abs/2
|
|
861
|
+
else
|
|
862
|
+
# --- assume that the center values represents the averages ---
|
|
863
|
+
bd = @cell_bounds.val
|
|
864
|
+
@integ_weight = (bd[1..-1] - bd[0..-2]).abs
|
|
865
|
+
#dist = (bd[-1]-bd[0]).abs
|
|
866
|
+
end
|
|
867
|
+
|
|
868
|
+
end
|
|
869
|
+
|
|
870
|
+
def _set_default_avg_weight
|
|
871
|
+
|
|
872
|
+
raise "Initialization is not completed" if ! @init_fin
|
|
873
|
+
if ! @pos
|
|
874
|
+
raise "pos has not been set. Call set_pos_to_(center|bounds)."
|
|
875
|
+
end
|
|
876
|
+
|
|
877
|
+
# < define numerical integration / averaging >
|
|
878
|
+
|
|
879
|
+
if( @bare_index )
|
|
880
|
+
@avg_weight = NArray.int(@pos.length).fill!(1)
|
|
881
|
+
dist = @avg_weight.length
|
|
882
|
+
@avg_weight /= dist
|
|
883
|
+
elsif ( !@cell || (@cell && @pos.equal?(@cell_bounds)) )
|
|
884
|
+
# --- use trapezoidal formula ---
|
|
885
|
+
posv = @pos.val
|
|
886
|
+
if posv.length == 1
|
|
887
|
+
@avg_weight = NArray[1]
|
|
888
|
+
else
|
|
889
|
+
dist = (posv[-1]-posv[0]).abs
|
|
890
|
+
@avg_weight = posv.dup
|
|
891
|
+
@avg_weight[0] = (posv[1]-posv[0]).abs/2
|
|
892
|
+
@avg_weight[-1] = (posv[-1]-posv[-2]).abs/2
|
|
893
|
+
@avg_weight[1..-2] = (posv[2..-1] - posv[0..-3]).abs/2
|
|
894
|
+
@avg_weight /= dist
|
|
895
|
+
end
|
|
896
|
+
else
|
|
897
|
+
# --- assume that the center values represents the averages ---
|
|
898
|
+
bd = @cell_bounds.val
|
|
899
|
+
@avg_weight = (bd[1..-1] - bd[0..-2]).abs
|
|
900
|
+
dist = (bd[-1]-bd[0]).abs
|
|
901
|
+
@avg_weight /= dist
|
|
902
|
+
end
|
|
903
|
+
|
|
904
|
+
end
|
|
905
|
+
|
|
906
|
+
#######
|
|
907
|
+
|
|
908
|
+
end
|
|
909
|
+
end
|
|
910
|
+
|
|
911
|
+
###################################################
|
|
912
|
+
## < test >
|
|
913
|
+
|
|
914
|
+
if $0 == __FILE__
|
|
915
|
+
include NumRu
|
|
916
|
+
xc = VArray.new( NArray.float(10).indgen! + 0.5 ).rename("x")
|
|
917
|
+
xb = VArray.new( NArray.float(11).indgen! ).rename("xb")
|
|
918
|
+
axpt = Axis.new().set_pos(xc)
|
|
919
|
+
axcel = Axis.new(true).set_cell(xc,xb)
|
|
920
|
+
axcel_c = axcel.dup.set_pos_to_center
|
|
921
|
+
axcel_b = axcel.dup.set_pos_to_bounds
|
|
922
|
+
axcel2 = Axis.new(true).set_cell_guess_bounds(xc)
|
|
923
|
+
p "axcel",axcel, "axcel2",axcel2
|
|
924
|
+
print "########\n"
|
|
925
|
+
p axpt.pos.val
|
|
926
|
+
p axcel_c.pos.val
|
|
927
|
+
p axcel_b.pos.val
|
|
928
|
+
z = VArray.new( NArray.float(xc.length, 2).random! )
|
|
929
|
+
w = VArray.new( NArray.float(xc.length).indgen! )
|
|
930
|
+
w2 = VArray.new( NArray.float(xb.length).indgen!-0.5 )
|
|
931
|
+
p z.val
|
|
932
|
+
p axpt.average(z,0), axcel_c.average(z,0)
|
|
933
|
+
p z.sum(0)/10
|
|
934
|
+
print "### avg/integ ###\n"
|
|
935
|
+
p axpt.average(w,0), axcel_c.average(w,0),
|
|
936
|
+
axpt.integrate(w,0), axcel_c.integrate(w,0),
|
|
937
|
+
axcel_b.integrate(w2,0)
|
|
938
|
+
axpt.integ_weight = NArray.sfloat(axpt.length).fill!(0.5)
|
|
939
|
+
p 'with artificial integ_weight:', axpt.integrate(w,0)
|
|
940
|
+
# axcel.set_default_algorithms # this is to fail
|
|
941
|
+
print "////////\n"
|
|
942
|
+
p axpt[1..3].pos.val
|
|
943
|
+
p axcel_c[1..3].cell_center.val, axcel_c[1..3].cell_bounds.val
|
|
944
|
+
p axcel_b[1..3].cell_center.val, axcel_b[1..3].cell_bounds.val
|
|
945
|
+
p axpt[1]
|
|
946
|
+
p axcel_b[5]
|
|
947
|
+
p axcel_b.cut(4.3)
|
|
948
|
+
axcut, slicer = axcel_c.cut(3.0..7.0)
|
|
949
|
+
p axcut.copy, slicer
|
|
950
|
+
p axcel_b.cut([3.2, 2.5, 6.9])
|
|
951
|
+
p axpt
|
|
952
|
+
axcel_c.set_aux('aux1',xc*4)
|
|
953
|
+
p axcel_c.flatten
|
|
954
|
+
p axcel_c.copy.flatten
|
|
955
|
+
print "##\n"
|
|
956
|
+
p axcel_c.each_varray{|va| p va}
|
|
957
|
+
axcl = axcel_c.collect{|va| va*2}
|
|
958
|
+
print "###\n"
|
|
959
|
+
p axcl.class, axcl.each_varray{|va| p va}
|
|
960
|
+
|
|
961
|
+
axpt.pos.set_att("units","days since 2001-01-01")
|
|
962
|
+
p axpt.cut(DateTime.new(2001,1,4,12,0))
|
|
963
|
+
end
|