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,854 @@
|
|
|
1
|
+
require "numru/gphys/gphys"
|
|
2
|
+
require "numru/dcl" # math1/gt2dlib is used for pure-2D interpolation
|
|
3
|
+
require "numru/dcl_mouse" # for mouse_cut, mouse_cut_repeat
|
|
4
|
+
require "narray_miss"
|
|
5
|
+
|
|
6
|
+
if $0 == __FILE__
|
|
7
|
+
require "numru/gphys" # for test
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module NumRu
|
|
11
|
+
class GPhys
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@@interpo_previous_cutter = nil
|
|
15
|
+
@@interpo_previous_modifier = nil
|
|
16
|
+
@@interpo_missval = -1e30
|
|
17
|
+
|
|
18
|
+
# = Makes a subset interactively by specifying a (poly-)line on the DCL viewport
|
|
19
|
+
#
|
|
20
|
+
# ARGUMENTS
|
|
21
|
+
# * dimx {String] : name of number (0,1,..) of the dimension
|
|
22
|
+
# corresponding to the X coordinate in the current window of DCL
|
|
23
|
+
# * dimy {String] : name of number (0,1,..) of the dimension
|
|
24
|
+
# corresponding to the Y coordinate in the current window of DCL
|
|
25
|
+
# * num {Integer] : the number of points along the (poly-)line
|
|
26
|
+
# (2 or greater -- if 2, a single line segment; if 3 or more, a
|
|
27
|
+
# poly-line)
|
|
28
|
+
#
|
|
29
|
+
# RETURN VALUE
|
|
30
|
+
# * a GPhys
|
|
31
|
+
def mouse_cut(dimx, dimy, num=2)
|
|
32
|
+
|
|
33
|
+
# < preparation >
|
|
34
|
+
|
|
35
|
+
dimx = dim_index(dimx)
|
|
36
|
+
dimy = dim_index(dimy)
|
|
37
|
+
|
|
38
|
+
rundef = DCL.glpget("rundef")
|
|
39
|
+
line = nil
|
|
40
|
+
while(true)
|
|
41
|
+
puts "\n*** Waiting for mouse click. Click #{num} points in the current viewport."
|
|
42
|
+
line = DCLMouseLine.new(num)
|
|
43
|
+
if line.ux.include?(rundef)
|
|
44
|
+
puts "** The points specified include one(s) outside the U window. Do it again."
|
|
45
|
+
else
|
|
46
|
+
break
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
line.draw
|
|
50
|
+
vx = line.vx
|
|
51
|
+
vy = line.vy
|
|
52
|
+
ux = line.ux
|
|
53
|
+
uy = line.uy
|
|
54
|
+
len = ux.length
|
|
55
|
+
kx = Array.new
|
|
56
|
+
ky = Array.new
|
|
57
|
+
cut = [true]*rank
|
|
58
|
+
for i in 0...len
|
|
59
|
+
cut[dimx] = ux[i]
|
|
60
|
+
cut[dimy] = uy[i]
|
|
61
|
+
dummy, sl = grid.cut(*cut)
|
|
62
|
+
kx[i] = sl[dimx]
|
|
63
|
+
ky[i] = sl[dimy]
|
|
64
|
+
end
|
|
65
|
+
ndiv = Array.new
|
|
66
|
+
ndsum = [0]
|
|
67
|
+
for i in 0...len-1
|
|
68
|
+
ndiv[i] = Math.sqrt( (kx[i+1]-kx[i])**2 + (ky[i+1]-ky[i])**2).to_i
|
|
69
|
+
ndsum.push ndsum[-1] + ndiv[i] # 0, ndiv[0], ndiv[0]+ndiv[1], ...
|
|
70
|
+
end
|
|
71
|
+
ndtot = ndsum[-1]
|
|
72
|
+
vxdiv = NArray.float(ndtot)
|
|
73
|
+
vydiv = NArray.float(ndtot)
|
|
74
|
+
for i in 0...len-1
|
|
75
|
+
a = NArray.float(ndiv[i]).indgen / ndiv[i]
|
|
76
|
+
vxdiv[ndsum[i]...ndsum[i+1]] = (1.0-a)*vx[i] + a*vx[i+1]
|
|
77
|
+
vydiv[ndsum[i]...ndsum[i+1]] = (1.0-a)*vy[i] + a*vy[i+1]
|
|
78
|
+
end
|
|
79
|
+
uxdiv = NArray.float(ndtot)
|
|
80
|
+
uydiv = NArray.float(ndtot)
|
|
81
|
+
for i in 0...ndtot
|
|
82
|
+
uxdiv[i], uydiv[i] = DCL.stitrf(vxdiv[i], vydiv[i])
|
|
83
|
+
end
|
|
84
|
+
cx = coord(dimx)
|
|
85
|
+
xcrd = VArray.new(uxdiv, cx, cx.name)
|
|
86
|
+
cy = coord(dimy)
|
|
87
|
+
ycrd = VArray.new(uydiv, cy, cy.name)
|
|
88
|
+
if (vxdiv[-1]-vxdiv[0]).abs > (vydiv[-1]-vydiv[0]).abs
|
|
89
|
+
cutter = [xcrd,ycrd] # x will be the main coord var if not map proj
|
|
90
|
+
crd = xcrd
|
|
91
|
+
else
|
|
92
|
+
cutter = [ycrd,xcrd] # x will be the main coord var if not map proj
|
|
93
|
+
crd = ycrd
|
|
94
|
+
end
|
|
95
|
+
axnm = crd.name
|
|
96
|
+
itr = DCL.sgqtrn
|
|
97
|
+
if itr>=10 and itr<=40
|
|
98
|
+
newcrd = __sp_dist(xcrd,ycrd)
|
|
99
|
+
modifier = Proc.new{|gp|
|
|
100
|
+
newax = Axis.new.set_pos(newcrd)
|
|
101
|
+
gp.grid.set_axis(axnm,newax)
|
|
102
|
+
g = Grid.new( newax )
|
|
103
|
+
gxcrd = GPhys.new(g,xcrd)
|
|
104
|
+
gycrd = GPhys.new(g,ycrd)
|
|
105
|
+
gp.set_assoc_coords([gxcrd, gycrd])
|
|
106
|
+
gp
|
|
107
|
+
}
|
|
108
|
+
else
|
|
109
|
+
modifier = nil
|
|
110
|
+
end
|
|
111
|
+
@@interpo_previous_cutter = cutter
|
|
112
|
+
@@interpo_previous_modifier = modifier
|
|
113
|
+
|
|
114
|
+
# < do the job >
|
|
115
|
+
|
|
116
|
+
gpnew = interpolate(cutter)
|
|
117
|
+
gpnew = modifier[gpnew] if modifier
|
|
118
|
+
[gpnew, line]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# = Interpolation onto grid points specified by the previous call of GPhys#mouse_cut
|
|
122
|
+
def mouse_cut_repeat
|
|
123
|
+
if @@interpo_previous_cutter.nil?
|
|
124
|
+
raise("You must first use GPhys#mouse_cut. This method repeats it")
|
|
125
|
+
end
|
|
126
|
+
gpnew = interpolate(@@interpo_previous_cutter)
|
|
127
|
+
gpnew = @@interpo_previous_modifier[gpnew] if @@interpo_previous_modifier
|
|
128
|
+
gpnew
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def __sp_dist(lon,lat)
|
|
132
|
+
x = lon.val * (Math::PI/180.0) # lon in rad
|
|
133
|
+
y = Math::PI/2 - lat.val*(Math::PI/180.0) # rad from a pole
|
|
134
|
+
cos_a = NMath::cos(y[1..-1])
|
|
135
|
+
sin_a = NMath::sin(y[1..-1])
|
|
136
|
+
cos_b = NMath::cos(y[0..-2])
|
|
137
|
+
sin_b = NMath::sin(y[0..-2])
|
|
138
|
+
cos_C = NMath::cos(x[1..-1]-x[0..-2])
|
|
139
|
+
cos_c= cos_a*cos_b + sin_a*sin_b*cos_C # from Spherical trigonometry
|
|
140
|
+
mask = cos_c.gt(1.0)
|
|
141
|
+
cos_c[mask] = 1.0 # to deal with round error
|
|
142
|
+
c = NMath::acos(cos_c)
|
|
143
|
+
cs = c.cumsum * (180.0/Math::PI)
|
|
144
|
+
cumdist = NArray.float(lon.length)
|
|
145
|
+
cumdist[1..-1] = cs
|
|
146
|
+
|
|
147
|
+
VArray.new(cumdist,
|
|
148
|
+
{"long_name"=>"distance along great circle","units"=>"degrees"},
|
|
149
|
+
"dist")
|
|
150
|
+
end
|
|
151
|
+
private :__sp_dist
|
|
152
|
+
|
|
153
|
+
# = Interpolate to conform the grid to a target GPhys object
|
|
154
|
+
#
|
|
155
|
+
# ARGUMENTS
|
|
156
|
+
# * to [GPhys] : the target gphys
|
|
157
|
+
#
|
|
158
|
+
# RETURN VALUE
|
|
159
|
+
# * a GPhys
|
|
160
|
+
#
|
|
161
|
+
def regrid(to)
|
|
162
|
+
coords = to.axnames.collect{|nm| to.coord(nm)}
|
|
163
|
+
interpolate(*coords)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# = Wide-purpose multi-dimensional linear interpolation
|
|
167
|
+
#
|
|
168
|
+
# This method supports interpolation regarding combinations of
|
|
169
|
+
# 1D and 2D coordinate variables. For instance, suppose self is
|
|
170
|
+
# 4D with coordinates named ["x", "y", "z", "t"] and associated
|
|
171
|
+
# coordinates "sigma"["z"] ("sigma" is 1D and its axis is "z"),
|
|
172
|
+
# "p"["x","y"], "q"["x","y"] ("p" and "q" are 2D having the
|
|
173
|
+
# coordinates "x" and "y"). You can make interpolation by
|
|
174
|
+
# specifying 1D VArrays whose names are among "x", "y", "z", "t",
|
|
175
|
+
# "sigma", "p", "q". You can also use a Hash like {"z" => 1.0}
|
|
176
|
+
# to specify a single point along the "x" coordinate.
|
|
177
|
+
#
|
|
178
|
+
# If the units of the target coordinate and the current coordinate
|
|
179
|
+
# are different, a converstion was made so that slicing is
|
|
180
|
+
# made correctly, as long as the two units are comvertible;
|
|
181
|
+
# if the units are not convertible, it is just warned.
|
|
182
|
+
#
|
|
183
|
+
# If you specify only "x", "y", and "t" coordinates
|
|
184
|
+
# for interpolation, the remaining coordinates "z" is simply
|
|
185
|
+
# retained. So the result will be 4 dimensional
|
|
186
|
+
# with coordinates named ["x", "y", "z", "t"], but the
|
|
187
|
+
# lengths of "x", "y", and "t" dimensions are changed according
|
|
188
|
+
# to the specification. Note that the result could
|
|
189
|
+
# be 3-or-smaller dimensional -- see below.
|
|
190
|
+
#
|
|
191
|
+
# Suppose you have two 1D VArrays, xnew and ynew, having
|
|
192
|
+
# names "x" and "y", respectively, and the lengths of xnew and
|
|
193
|
+
# the ynew are the same. Then, you can give an array of
|
|
194
|
+
# the two, [xnew, ynew], for coord0 as
|
|
195
|
+
#
|
|
196
|
+
# gp_int = gp_org.interpolate( [xnew, ynew] )
|
|
197
|
+
#
|
|
198
|
+
# (Here, gp_org represents a GPhys object, and the return value
|
|
199
|
+
# pointed by gp_int is also a GPhys.) In this case,
|
|
200
|
+
# the 1st dimension of the result (gp_int) will be sampled
|
|
201
|
+
# at the points [xnew[0],ynew[0]], [xnew[1],ynew[1]], [xnew[2],ynew[2]],
|
|
202
|
+
# ..., while the 2nd and the third dimensions are "z" and "t" (no
|
|
203
|
+
# interpolation). This way, the rank of the result will be reduced
|
|
204
|
+
# from that of self.
|
|
205
|
+
#
|
|
206
|
+
# If you instead give xnew to coord0 and ynew to coord1 as
|
|
207
|
+
#
|
|
208
|
+
# gp_int = gp_org.interpolate( xnew, ynew )
|
|
209
|
+
#
|
|
210
|
+
# The result will be 4-dimensional with the first coordinate
|
|
211
|
+
# sampled at xnew[0], xnew[1], xnew[2],... and the second
|
|
212
|
+
# coordinate sampled at ynew[0], ynew[1], ynew[2],...
|
|
213
|
+
#
|
|
214
|
+
# You can also cut regarding 2D coordinate variable as
|
|
215
|
+
#
|
|
216
|
+
# gp_int = gp_org.interpolate( pnew, qnew )
|
|
217
|
+
# gp_int = gp_org.interpolate( xnew, qnew )
|
|
218
|
+
# gp_int = gp_org.interpolate( [pnew, qnew] )
|
|
219
|
+
# gp_int = gp_org.interpolate( [xnew, qnew] )
|
|
220
|
+
#
|
|
221
|
+
# In any case, the desitination VArrays such as xnew ynew pnew qnew
|
|
222
|
+
# must be one-dimensional.
|
|
223
|
+
#
|
|
224
|
+
# Note that
|
|
225
|
+
#
|
|
226
|
+
# gp_int = gp_org.interpolate( qnew )
|
|
227
|
+
#
|
|
228
|
+
# fails (exception raised), since it is ambiguous. If you tempted to
|
|
229
|
+
# do so, perhaps what you want is covered by the following special
|
|
230
|
+
# form:
|
|
231
|
+
#
|
|
232
|
+
# As a special form, you can specify a particular dimension
|
|
233
|
+
# like this:
|
|
234
|
+
#
|
|
235
|
+
# gp_int = gp_org.interpolate( "x"=>pnew )
|
|
236
|
+
#
|
|
237
|
+
# Here, interpolation along "x" is made, while other axes are
|
|
238
|
+
# retained. This is useful if pnew corresponds to a multi-D
|
|
239
|
+
# coordinate variable where there are two or more corresponding axes
|
|
240
|
+
# (otherwise, this special form is not needed.)
|
|
241
|
+
#
|
|
242
|
+
# See the test part at the end of this file for more examples.
|
|
243
|
+
#
|
|
244
|
+
# LIMITATION
|
|
245
|
+
#
|
|
246
|
+
# Currently associated coordinates expressed by 3D or greater
|
|
247
|
+
# dimensional arrays are not supported.
|
|
248
|
+
#
|
|
249
|
+
# Computational efficiency of pure two-dimensional coordinate
|
|
250
|
+
# support should be improved by letting C extensions cover deeper
|
|
251
|
+
# and improving the search algorithm for grid (which is usually
|
|
252
|
+
# ordered quasi-regularly).
|
|
253
|
+
#
|
|
254
|
+
# COVERAGE
|
|
255
|
+
#
|
|
256
|
+
# Extrapolation is covered for 1D coordinates, but only
|
|
257
|
+
# interpolation is covered for 2D coordinates (which is
|
|
258
|
+
# limited by gt2dlib in DCL -- exception will be raised
|
|
259
|
+
# if you specify a grid point outside the original 2D grid points.).
|
|
260
|
+
#
|
|
261
|
+
# MATHEMATICAL SPECIFICATION
|
|
262
|
+
#
|
|
263
|
+
# The multi-dimensional linear interpolation is done by
|
|
264
|
+
# supposing a (hyper-) "rectangular" grid, where each
|
|
265
|
+
# dimension is independently sampled one-dimensionally. In case
|
|
266
|
+
# of interpolation along two dimensional coordinates such as "p"
|
|
267
|
+
# and "q" in the example above, a mapping from a rectangular grid
|
|
268
|
+
# is assumed, and the corresponding points in the rectangular grid
|
|
269
|
+
# is solved inversely (currently by using gt2dlib in DCL).
|
|
270
|
+
#
|
|
271
|
+
# For 1D and 2D cases, linear interpolations may be expressed as
|
|
272
|
+
#
|
|
273
|
+
# 1D: zi = (1-a)*z0 + a*z1
|
|
274
|
+
# 2D: zi = (1-a)*(1-b)*z00 + a*(1-b)*z10 + (1-a)*b*z01 + a*b*z11
|
|
275
|
+
#
|
|
276
|
+
# This method is extended to arbitrary number of dimensions. Thus,
|
|
277
|
+
# if the number of dimensions to interpolate is S, then 2**S grid
|
|
278
|
+
# points are used for each interpolation (8 points for 3D, 16 points
|
|
279
|
+
# for 4D,...). Thus, the linearity of this interpolation is only along
|
|
280
|
+
# each dimension, not over the whole dimensionality.
|
|
281
|
+
#
|
|
282
|
+
# USAGE
|
|
283
|
+
# interpolate(coord0, coord1, ...)
|
|
284
|
+
#
|
|
285
|
+
# ARGUMENTS
|
|
286
|
+
# * coord0, coord1,... [ 1D VArray, or Array of 1D VArray,
|
|
287
|
+
# or a 1-element Hash as
|
|
288
|
+
# {coordinate_name(String) => slice_loc_value(Numeric)} ] :
|
|
289
|
+
# locations to which interpolation is made. Names of
|
|
290
|
+
# all the VArray's in the arguments must exist among
|
|
291
|
+
# the names of the coordinates of self (including associated
|
|
292
|
+
# coordinates), since the dimension
|
|
293
|
+
# finding is made in terms of coordinate names.
|
|
294
|
+
# If an argument is an Array of VArray's, the first
|
|
295
|
+
# VArray will become the main coordinate variable,
|
|
296
|
+
# and the rest will be associated coordinates.
|
|
297
|
+
# * [SPECIAL CASE]
|
|
298
|
+
# You can specfify a one-element Hash as the only argument
|
|
299
|
+
# such as
|
|
300
|
+
# gphys.interpolate("x"=>varray)
|
|
301
|
+
# where varray is a coordinate onto which interpolation is made.
|
|
302
|
+
# This is espcially useful if varray is multi-D. If varray's
|
|
303
|
+
# name "p" (name of a 2D coordnate var), for example,
|
|
304
|
+
# you can interpolate only regarding "x" by retaining other
|
|
305
|
+
# axes. If varray is 1-diemnsional, the same thing can
|
|
306
|
+
# be done simply by
|
|
307
|
+
# gphys.interpolate(varray)
|
|
308
|
+
# since the corresponding 1D coordinate is found aotomatically.
|
|
309
|
+
#
|
|
310
|
+
# RETURN VALUE
|
|
311
|
+
# * a GPhys
|
|
312
|
+
#
|
|
313
|
+
def interpolate(*coords)
|
|
314
|
+
coords, org_coords, org_dims, newgrid = _interpo_match_coords(coords)
|
|
315
|
+
crdmap = _interpo_reorder_2crdmap(coords, org_coords, org_dims)
|
|
316
|
+
idxmap = _interpo_find_position(crdmap)
|
|
317
|
+
|
|
318
|
+
z = val
|
|
319
|
+
if z.is_a?(NArrayMiss)
|
|
320
|
+
missval = ( (a=get_att('_FillValue')) ? a[0] : nil ) ||
|
|
321
|
+
( (a=get_att('missing_value')) ? a[0] : nil ) ||
|
|
322
|
+
@@interpo_missval
|
|
323
|
+
z = z.to_na(missval)
|
|
324
|
+
else
|
|
325
|
+
missval = nil
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
na = c_interpo_do(newgrid.shape, idxmap, z, missval) # [C-extension]
|
|
329
|
+
|
|
330
|
+
if missval
|
|
331
|
+
mask = na.ne(missval)
|
|
332
|
+
na = NArrayMiss.to_nam_no_dup(na,mask)
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
va = VArray.new(na, data, name)
|
|
336
|
+
|
|
337
|
+
ret = GPhys.new(newgrid, va)
|
|
338
|
+
ret.grid.set_lost_axes(self.lost_axes)
|
|
339
|
+
ret
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
private
|
|
343
|
+
|
|
344
|
+
def _interpo_find_position(crdmap)
|
|
345
|
+
idxmap = Array.new
|
|
346
|
+
crdmap.each do|m|
|
|
347
|
+
od = m[0] # original dim(s): can be a Numeric or an Array of Numerics
|
|
348
|
+
if od.is_a?(Numeric)
|
|
349
|
+
mp = m[1]
|
|
350
|
+
cd = mp[0] # current dimension to be treated in the new grid
|
|
351
|
+
if mp.length==1
|
|
352
|
+
idxmap.push( [m[0], cd] ) # simple copying
|
|
353
|
+
elsif cd.is_a?(Numeric) && mp[1].is_a?(NArray)
|
|
354
|
+
xto = mp[1] # 1-D new coordinate var
|
|
355
|
+
xfrom = mp[2] # 1-D original coordinate var
|
|
356
|
+
ids, f = c_interpo_find_loc_1D(xto,xfrom) # [C-extension]
|
|
357
|
+
idxmap.push( [ m[0], cd, nil, ids, f ] ) # mapping from 1D
|
|
358
|
+
else
|
|
359
|
+
# partially 2D case
|
|
360
|
+
cdims = mp[2]
|
|
361
|
+
xto = mp[3] # 1-D new coordinate var
|
|
362
|
+
xfrom = mp[4] # multi-D original coordinate var
|
|
363
|
+
dimc = nil
|
|
364
|
+
for i in 0...cdims.length
|
|
365
|
+
if cdims[i] == od
|
|
366
|
+
dimc = i
|
|
367
|
+
break
|
|
368
|
+
end
|
|
369
|
+
end
|
|
370
|
+
ids, f = c_interpo_find_loc_1D_MD(xto,xfrom,dimc) # [C-extension]
|
|
371
|
+
|
|
372
|
+
dims_covd = mp[1] #dimensions covered by the coordinate variable(orig)
|
|
373
|
+
idxmap.push( [ od, cd, dims_covd, ids, f ] ) # mapping from 2D
|
|
374
|
+
#^^
|
|
375
|
+
#will be removed : see (***) below
|
|
376
|
+
end
|
|
377
|
+
else
|
|
378
|
+
# Full 2D mapping
|
|
379
|
+
txi = m[1][0][1].to_type(NArray::SFLOAT)
|
|
380
|
+
txg = m[1][0][2].to_type(NArray::SFLOAT)
|
|
381
|
+
tyi = m[1][1][1].to_type(NArray::SFLOAT)
|
|
382
|
+
tyg = m[1][1][2].to_type(NArray::SFLOAT)
|
|
383
|
+
uxg = NArray.sfloat(txg.shape[0]).indgen!
|
|
384
|
+
uyg = NArray.sfloat(txg.shape[1]).indgen!
|
|
385
|
+
DCL.g2sctr(uxg,uyg, txg,tyg)
|
|
386
|
+
if m[1][0][0] == m[1][1][0]
|
|
387
|
+
len = txi.length
|
|
388
|
+
ids1 = NArray.int(len)
|
|
389
|
+
f1 = NArray.float(len)
|
|
390
|
+
ids2 = NArray.int(len)
|
|
391
|
+
f2 = NArray.float(len)
|
|
392
|
+
for j in 0...len
|
|
393
|
+
## [�J������] (������) ���̃��[�v��C�ɂ����ق��������i1D�Ȃ̂ł܂��������ǁC����2D�̂�����Ȃ�ꏏ�Ɂj�D���̍ہCg2ictr �͒T�������������ĂȂ��̂ŁCinterpo_find_loc_1D ��2D�ł̒T����������� g2ibl2 �ڌĂԕ��������D
|
|
394
|
+
uxi, uyi = DCL.g2ictr(txi[j], tyi[j])
|
|
395
|
+
ids1[j] = [ [uxi.floor,0].max, uxg.length-2 ].min
|
|
396
|
+
ids2[j] = [ [uyi.floor,0].max, uyg.length-2 ].min
|
|
397
|
+
f1[j] = uxi - ids1[j]
|
|
398
|
+
f2[j] = uyi - ids2[j]
|
|
399
|
+
end
|
|
400
|
+
idxmap.push( [ od[0], m[1][0][0], nil, ids1, f1] ) # mapping from 1D
|
|
401
|
+
idxmap.push( [ od[1], m[1][0][0], nil, ids2, f2] ) # mapping from 1D
|
|
402
|
+
#^^^^
|
|
403
|
+
#will be removed : see (***) below
|
|
404
|
+
else
|
|
405
|
+
lenx = txi.length
|
|
406
|
+
leny = tyi.length
|
|
407
|
+
ids1 = NArray.int(lenx,leny)
|
|
408
|
+
f1 = NArray.float(lenx,leny)
|
|
409
|
+
ids2 = NArray.int(lenx,leny)
|
|
410
|
+
f2 = NArray.float(lenx,leny)
|
|
411
|
+
for k in 0...leny
|
|
412
|
+
for j in 0...lenx
|
|
413
|
+
## [�J������] (������) ���̃��[�v��C�ɂ����ق�������(2D��������)�D���̍ہCg2ictr �͒T�������������ĂȂ��̂ŁCinterpo_find_loc_1D ��2D�ł̒T����������� g2ibl2 �ڌĂԕ��������D
|
|
414
|
+
uxi, uyi = DCL.g2ictr(txi[j], tyi[k])
|
|
415
|
+
ids1[j,k] = [ [uxi.floor,0].max, uxg.length-2 ].min
|
|
416
|
+
ids2[j,k] = [ [uyi.floor,0].max, uyg.length-2 ].min
|
|
417
|
+
f1[j,k] = uxi - ids1[j,k]
|
|
418
|
+
f2[j,k] = uyi - ids2[j,k]
|
|
419
|
+
end
|
|
420
|
+
end
|
|
421
|
+
idxmap.push( [ od[0], m[1][0][0], [m[1][1][0]], ids1, f1] ) # mapping from 2D
|
|
422
|
+
idxmap.push( [ od[1], m[1][0][0], [m[1][1][0]], ids2, f2] ) # mapping from 2D
|
|
423
|
+
#^^^^
|
|
424
|
+
#will be removed : see (***) below
|
|
425
|
+
end
|
|
426
|
+
end
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
if idxmap.length != rank
|
|
430
|
+
raise "Something is wrong: a BUG, or possibly overly specified?"
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
idxmap.sort!
|
|
434
|
+
|
|
435
|
+
idxmap.each_with_index do |m,i|
|
|
436
|
+
d = m.shift # the first element is removed (***)
|
|
437
|
+
if d!=i
|
|
438
|
+
raise "Something is wrong: a BUG, or possibly overly specified? #{d}"
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
idxmap
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
# put the coorinate mapping into a data structure good for
|
|
446
|
+
# algorithm implementation
|
|
447
|
+
#
|
|
448
|
+
# RETURN VALUE
|
|
449
|
+
# * crdmap : info regarding mapping from dimensions of self
|
|
450
|
+
# to those of the new grid. Ordered as [ pure 1D interpolations..,
|
|
451
|
+
# multi-D interpolations that can be reduced to 1D interpolations,...
|
|
452
|
+
# pure multi-D (actually 2D) interpolations,...]
|
|
453
|
+
def _interpo_reorder_2crdmap(coords, org_coords, org_dims)
|
|
454
|
+
cids = Array.new # array (whose length is the rank of newgrid) of ids
|
|
455
|
+
cf = Array.new # array (whose length is the rank of newgrid) of f
|
|
456
|
+
crdmap1D = Array.new
|
|
457
|
+
crdmap2D = Array.new
|
|
458
|
+
for ic in 0...org_coords.length
|
|
459
|
+
if coords[ic].nil? # simple copying
|
|
460
|
+
crdmap1D.push( [ org_dims[ic], ic ] )
|
|
461
|
+
else
|
|
462
|
+
for j in 0...coords[ic].length
|
|
463
|
+
xto = coords[ic][j].val
|
|
464
|
+
xfrom = org_coords[ic][j].val
|
|
465
|
+
xto = xto.to_na if !xto.is_a?(NArray)
|
|
466
|
+
# missing in the coordinate, if any, is ignored
|
|
467
|
+
xfrom = xfrom.to_na if !xfrom.is_a?(NArray)
|
|
468
|
+
# missing in the coordinate, if any, is ignored
|
|
469
|
+
if org_dims[ic][j].length == 1
|
|
470
|
+
crdmap1D.push( [ org_dims[ic][j][0], ic, xto,
|
|
471
|
+
xfrom] )
|
|
472
|
+
else
|
|
473
|
+
crdmap2D.push( [ org_dims[ic][j], ic, xto,
|
|
474
|
+
xfrom, coords[ic][j].name] )
|
|
475
|
+
end
|
|
476
|
+
end
|
|
477
|
+
end
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
crdmap1D.sort! # sort by the original dimension ids
|
|
481
|
+
for i in 0...(crdmap1D.length-1)
|
|
482
|
+
d = crdmap1D[i][0]
|
|
483
|
+
if (d == crdmap1D[i+1][0])
|
|
484
|
+
raise("Coordinates to interpolate are overly specified for #{axis(d).name}(#{d})")
|
|
485
|
+
end
|
|
486
|
+
end
|
|
487
|
+
|
|
488
|
+
odim_covrd = crdmap1D.collect{|m| m[0]}
|
|
489
|
+
|
|
490
|
+
crdmapH = Hash.new
|
|
491
|
+
crdmap1D.each do |m|
|
|
492
|
+
crdmapH[m[0]] = m[1..-1]
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
crdmap = crdmapH.to_a.sort!
|
|
496
|
+
|
|
497
|
+
pure2D = Array.new
|
|
498
|
+
crdmap2D.each do |m|
|
|
499
|
+
indep = m[0] - odim_covrd
|
|
500
|
+
if indep.length == 0 # over-determined
|
|
501
|
+
raise("Coordinates to interpolate are overly specified: Unnecesary 2D spec exists")
|
|
502
|
+
elsif indep.length == 1 # partially determined (except for one dim)
|
|
503
|
+
od = indep[0]
|
|
504
|
+
odcov = (m[0] - indep)#[0]
|
|
505
|
+
dims_covd = odcov.collect{|d| crdmapH[d][0]}
|
|
506
|
+
oc_covd_int_needed = Array.new
|
|
507
|
+
ocrd = m[3]
|
|
508
|
+
odcov.each do |d|
|
|
509
|
+
a = crdmapH[d]
|
|
510
|
+
if a[2]
|
|
511
|
+
va = coords[d][0]
|
|
512
|
+
oc_covd_int_needed.push(va)
|
|
513
|
+
end
|
|
514
|
+
end
|
|
515
|
+
if oc_covd_int_needed.length > 0
|
|
516
|
+
cname = m[4]
|
|
517
|
+
cmd = self.assoc_coord_gphys(cname)
|
|
518
|
+
ocrd = cmd.interpolate(*oc_covd_int_needed).val # interpolate the multi-D coord first
|
|
519
|
+
end
|
|
520
|
+
crdmap.push(xxx=[od, [ m[1], dims_covd, m[0], m[2], ocrd ] ])
|
|
521
|
+
odim_covrd.push(od) # covered this time
|
|
522
|
+
else
|
|
523
|
+
if m[0].length >= 3
|
|
524
|
+
raise(ArgumentError,"Pure multi-D interpolation is limited upto 2D #{m[0]}")
|
|
525
|
+
end
|
|
526
|
+
pure2D.push(m)
|
|
527
|
+
end
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
pure2D.sort!
|
|
531
|
+
while (pure2D.length > 0)
|
|
532
|
+
m1 = pure2D.shift
|
|
533
|
+
m2 = pure2D.shift
|
|
534
|
+
if ( m2.nil? || m1[0] != m2[0] )
|
|
535
|
+
raise("Insufficient specification of 2D slicing: Pair needed")
|
|
536
|
+
end
|
|
537
|
+
crdmap.push( [m1[0], [m1[1..-1],m2[1..-1]]] )
|
|
538
|
+
m1[0].each{|x| odim_covrd.push(x)}
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
if odim_covrd.length != rank
|
|
542
|
+
raise("[BUG] Sorry. Something is wrong. Should be a bug.")
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
crdmap
|
|
546
|
+
end
|
|
547
|
+
|
|
548
|
+
def _interpo_match_coords(coords)
|
|
549
|
+
|
|
550
|
+
if coords[0].is_a?(Hash) && coords[0].length==1 # a special case
|
|
551
|
+
dimname, varray = coords[0].to_a[0]
|
|
552
|
+
coords = [ varray ]
|
|
553
|
+
dim = dim_index(dimname) or raise("dimension #{dimname} does not exist")
|
|
554
|
+
nochange_dims = Array.new
|
|
555
|
+
(rank-1).downto(0){|i| nochange_dims.push(i) if i!=dim}
|
|
556
|
+
else
|
|
557
|
+
nochange_dims = nil
|
|
558
|
+
end
|
|
559
|
+
|
|
560
|
+
#< to Array of Arrays if not for easiness of treatment >
|
|
561
|
+
|
|
562
|
+
coords.collect! do |x|
|
|
563
|
+
x.is_a?(Array) ? x : [x]
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
#< check the array contents and modify them if desirable >
|
|
567
|
+
|
|
568
|
+
coords.each do |a|
|
|
569
|
+
a.collect! do |x|
|
|
570
|
+
if x.is_a?(Hash) and
|
|
571
|
+
( k,v = x.to_a[0]; k.is_a?(String) && v.is_a?(Numeric) )
|
|
572
|
+
na = NArray[v]
|
|
573
|
+
x = VArray.new( na, coord(k), k )
|
|
574
|
+
elsif !(x.is_a?(VArray) and x.rank==1)
|
|
575
|
+
raise(ArgumentError, "Arguments must consist only of 1D VArrays or 1-element Hashs to specify coordinate name (String) and slicing location (Numeric).")
|
|
576
|
+
end
|
|
577
|
+
x
|
|
578
|
+
end
|
|
579
|
+
end
|
|
580
|
+
|
|
581
|
+
#< investigate the correspondence >
|
|
582
|
+
org_dims = coords.collect do |a|
|
|
583
|
+
a.collect do |va|
|
|
584
|
+
ids = grid.coord_dim_indices(va.name)
|
|
585
|
+
if ids.nil?
|
|
586
|
+
raise(ArgumentError, "'#{va.name}' is not in the coordiantes #{coordnames.inspect}")
|
|
587
|
+
end
|
|
588
|
+
if ids.length > 4
|
|
589
|
+
raise(ArgumentError, "coord whose rank is greater than 4 is not supported : #{va.name} mapped to dims: #{ids.inspect}")
|
|
590
|
+
end
|
|
591
|
+
ids
|
|
592
|
+
end
|
|
593
|
+
end
|
|
594
|
+
|
|
595
|
+
if !nochange_dims
|
|
596
|
+
nochange_dims = (0...rank).collect{|i| i}.reverse - org_dims.flatten
|
|
597
|
+
end
|
|
598
|
+
|
|
599
|
+
#< corresponding original coordinates >
|
|
600
|
+
org_coords = Array.new
|
|
601
|
+
coords.each do |a|
|
|
602
|
+
oa = Array.new
|
|
603
|
+
org_coords.push(oa)
|
|
604
|
+
a.each do |va|
|
|
605
|
+
crd = coord(va.name)
|
|
606
|
+
units_to = va.units
|
|
607
|
+
units_orig = crd.units
|
|
608
|
+
if ( units_to =~ units_orig )
|
|
609
|
+
crd = crd.convert_units(units_to)
|
|
610
|
+
else
|
|
611
|
+
$stderr.print("WARNING: incompatible units (#{va.name}): #{units_orig} - #{units_to}\n")
|
|
612
|
+
end
|
|
613
|
+
oa.push( crd )
|
|
614
|
+
end
|
|
615
|
+
end
|
|
616
|
+
|
|
617
|
+
#< prepare the new grid >
|
|
618
|
+
|
|
619
|
+
axes = coords.collect do |a|
|
|
620
|
+
Axis.new().set_pos(a.first)
|
|
621
|
+
end
|
|
622
|
+
|
|
623
|
+
#insdims = Array.new
|
|
624
|
+
gaxes = axes.dup
|
|
625
|
+
irank = org_dims.length
|
|
626
|
+
nochange_dims.each do |nd|
|
|
627
|
+
(org_dims.length-1).downto(0) do |id|
|
|
628
|
+
x = org_dims[id]
|
|
629
|
+
d = x.is_a?(Integer) ? x : (x.flatten - nochange_dims).max
|
|
630
|
+
if d < nd
|
|
631
|
+
gaxes.insert(id+1, axis(nd)) # insert after id
|
|
632
|
+
coords.insert(id+1, nil)
|
|
633
|
+
org_coords.insert(id+1, nil)
|
|
634
|
+
org_dims.insert(id+1, nd)
|
|
635
|
+
break
|
|
636
|
+
elsif id==0
|
|
637
|
+
gaxes.insert(id, axis(nd)) # unshift
|
|
638
|
+
coords.insert(id, nil)
|
|
639
|
+
org_coords.insert(id, nil)
|
|
640
|
+
org_dims.insert(id, nd)
|
|
641
|
+
end
|
|
642
|
+
end
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
newgrid = Grid.new(*gaxes)
|
|
646
|
+
|
|
647
|
+
assoc = Array.new
|
|
648
|
+
coords.each_with_index do |a,i|
|
|
649
|
+
if !a.nil? && a.length > 1
|
|
650
|
+
ax = axes[i]
|
|
651
|
+
axgrd = Grid.new(ax)
|
|
652
|
+
a[1..-1].each do |va|
|
|
653
|
+
if va.length != ax.length
|
|
654
|
+
raise("coord size mismatch: #{va.inspect} - #{ax.pos.inspect}")
|
|
655
|
+
end
|
|
656
|
+
assoc.push( GPhys.new(axgrd, va) )
|
|
657
|
+
end
|
|
658
|
+
end
|
|
659
|
+
end
|
|
660
|
+
|
|
661
|
+
if assoc.length > 0
|
|
662
|
+
newgrid.set_assoc_coords(assoc)
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
[coords, org_coords, org_dims, newgrid]
|
|
666
|
+
end
|
|
667
|
+
end
|
|
668
|
+
end
|
|
669
|
+
|
|
670
|
+
#######################################
|
|
671
|
+
## < test >
|
|
672
|
+
if $0 == __FILE__
|
|
673
|
+
require "numru/ggraph"
|
|
674
|
+
include NumRu
|
|
675
|
+
include NMath
|
|
676
|
+
|
|
677
|
+
module NumRu
|
|
678
|
+
class VArray
|
|
679
|
+
def to_g1D
|
|
680
|
+
ax = Axis.new().set_pos(self)
|
|
681
|
+
grid = Grid.new(ax)
|
|
682
|
+
GPhys.new(grid,self)
|
|
683
|
+
end
|
|
684
|
+
end
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
#< prepare a GPhys object with associated coordinates >
|
|
688
|
+
|
|
689
|
+
nx = 10
|
|
690
|
+
ny = 8
|
|
691
|
+
# nx = 20
|
|
692
|
+
# ny = 16
|
|
693
|
+
nz = 2
|
|
694
|
+
x = (NArray.sfloat(nx).indgen! + 0.5) * (2*PI/nx)
|
|
695
|
+
y = NArray.sfloat(ny).indgen! * (2*PI/(ny-1))
|
|
696
|
+
|
|
697
|
+
z = NArray.sfloat(nz).indgen!
|
|
698
|
+
vx = VArray.new( x, {"units"=>"m"}, "x")
|
|
699
|
+
vy = VArray.new( y, {"units"=>"m"}, "y")
|
|
700
|
+
vz = VArray.new( z, {"units"=>"m"}, "z")
|
|
701
|
+
xax = Axis.new().set_pos(vx)
|
|
702
|
+
yax = Axis.new().set_pos(vy)
|
|
703
|
+
zax = Axis.new().set_pos(vz)
|
|
704
|
+
xygrid = Grid.new(xax, yax)
|
|
705
|
+
xyzgrid = Grid.new(xax, yax, zax)
|
|
706
|
+
|
|
707
|
+
sqrt2 = sqrt(2.0)
|
|
708
|
+
|
|
709
|
+
p = NArray.sfloat(nx,ny)
|
|
710
|
+
q = NArray.sfloat(nx,ny)
|
|
711
|
+
for j in 0...ny
|
|
712
|
+
p[true,j] = NArray.sfloat(nx).indgen!(2*j,1)*sqrt2
|
|
713
|
+
q[true,j] = NArray.sfloat(nx).indgen!(2*j,-1)*sqrt2
|
|
714
|
+
end
|
|
715
|
+
vp = VArray.new( p, {"units"=>"mm"}, "p")
|
|
716
|
+
vq = VArray.new( q, {"units"=>"mm"}, "q")
|
|
717
|
+
gp = GPhys.new(xygrid, vp)
|
|
718
|
+
gq = GPhys.new(xygrid, vq)
|
|
719
|
+
|
|
720
|
+
r = NArray.sfloat(nz).indgen! * 2
|
|
721
|
+
vr = VArray.new( r ).rename("r")
|
|
722
|
+
gr = GPhys.new( Grid.new(zax), vr )
|
|
723
|
+
|
|
724
|
+
d = sin(x.newdim(1,1)) * cos(y.newdim(0,1)) + z.newdim(0,0)
|
|
725
|
+
vd = VArray.new( d ).rename("d")
|
|
726
|
+
gd = GPhys.new(xyzgrid, vd)
|
|
727
|
+
|
|
728
|
+
gx = vx.to_g1D
|
|
729
|
+
ga = gd + gx
|
|
730
|
+
ga.name = "a"
|
|
731
|
+
|
|
732
|
+
gd.set_assoc_coords([gp,gq,gr,ga])
|
|
733
|
+
|
|
734
|
+
print "GPhys with associated coordinates:\n"
|
|
735
|
+
p gd
|
|
736
|
+
|
|
737
|
+
|
|
738
|
+
DCL.swpset('iwidth',700)
|
|
739
|
+
DCL.swpset('iheight',700)
|
|
740
|
+
#DCL.sgscmn(4) # set colomap
|
|
741
|
+
DCL.gropn(1)
|
|
742
|
+
DCL.glpset("lmiss",true)
|
|
743
|
+
DCL.sldiv("y",2,2)
|
|
744
|
+
GGraph::set_fig "viewport"=>[0.15,0.85,0.15,0.85]
|
|
745
|
+
GGraph::tone gd
|
|
746
|
+
GGraph::color_bar
|
|
747
|
+
GGraph::tone gd[true,ny/2,true]
|
|
748
|
+
GGraph::color_bar
|
|
749
|
+
|
|
750
|
+
#< prepare coordinates to interpolate >
|
|
751
|
+
|
|
752
|
+
xi = NArray[1.0, 2.0, 3.0, 4.0, 5.0]
|
|
753
|
+
# yi = NArray[1.0, 4.0, 5.0]
|
|
754
|
+
yi = NArray[-0.1, 2.5, 4.0, 5.5, 6.8] # test of extrapolation
|
|
755
|
+
vxi = VArray.new( xi, {"units"=>"m"}, "x") # "0.5m" to test unit conversion
|
|
756
|
+
vyi = VArray.new( yi, {"units"=>"m"}, "y") # "0.5m" to test unit conversion
|
|
757
|
+
|
|
758
|
+
# pi = NArray[10.0, 13.0, 15.0, 17.0, 20.0]
|
|
759
|
+
# qi = NArray[0.0, 3.0, 5.0, 7.0, 10.0]
|
|
760
|
+
# pi = NArray.float(23).indgen!*0.5+8
|
|
761
|
+
# qi = NArray.float(23).indgen!*0.5-3
|
|
762
|
+
pi = NArray.float(6).indgen!*2+10
|
|
763
|
+
qi = NArray.float(6).indgen!*2
|
|
764
|
+
vpi = VArray.new( pi, {"units"=>"mm"}, "p")
|
|
765
|
+
vqi = VArray.new( qi, {"units"=>"mm"}, "q")
|
|
766
|
+
|
|
767
|
+
ai = NArray[2.0, 4.0]
|
|
768
|
+
vai = VArray.new( ai ).rename("a")
|
|
769
|
+
|
|
770
|
+
#< test of interpolate >
|
|
771
|
+
|
|
772
|
+
gxi = vxi.to_g1D
|
|
773
|
+
gyi = vyi.to_g1D
|
|
774
|
+
gp = GPhys.new(xygrid,vp)
|
|
775
|
+
gq = GPhys.new(xygrid,vq)
|
|
776
|
+
|
|
777
|
+
gi = gd.interpolate(vxi,vyi,{"z"=>0.5})
|
|
778
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
779
|
+
|
|
780
|
+
###gd.interpolate(vxi,vyi,vr,vz) # nust fail by over-determination
|
|
781
|
+
|
|
782
|
+
gi = gd.interpolate([vxi,vyi])
|
|
783
|
+
#p gi.max, gi.min
|
|
784
|
+
GGraph::tone gd,true,"min"=>-1.2,"max"=>1.2,"int"=>0.1
|
|
785
|
+
GGraph::scatter gxi, gyi, false,"type"=>4,"size"=>0.027,"index"=>3
|
|
786
|
+
GGraph::color_scatter gxi, gyi, gi, false,"min"=>-1.2,"max"=>1.2,"int"=>0.1,"type"=>10,"size"=>0.029
|
|
787
|
+
GGraph::color_bar
|
|
788
|
+
|
|
789
|
+
gi = gd.interpolate(vyi,vxi)
|
|
790
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
791
|
+
|
|
792
|
+
#GGraph::tone gp,true,"color_bar"=>true
|
|
793
|
+
|
|
794
|
+
GGraph::tone gq,true
|
|
795
|
+
GGraph::contour gq,false
|
|
796
|
+
GGraph::color_bar
|
|
797
|
+
|
|
798
|
+
gi = gd.interpolate(vxi,vqi)
|
|
799
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
800
|
+
##gi = gd.interpolate(vx,vqi)
|
|
801
|
+
|
|
802
|
+
gi = gd.interpolate("y"=>vqi)
|
|
803
|
+
#GGraph::tone gi,true,"color_bar"=>true
|
|
804
|
+
|
|
805
|
+
#p "###",gd.coordnames
|
|
806
|
+
#gi = gd.interpolate(vxi,vyi,vai)
|
|
807
|
+
gi = gd.interpolate("y"=>vai)
|
|
808
|
+
GGraph::tone gi[2,false],true,"color_bar"=>true
|
|
809
|
+
|
|
810
|
+
GGraph::tone gp,true
|
|
811
|
+
GGraph::contour gp,false
|
|
812
|
+
GGraph::color_bar
|
|
813
|
+
gi = gd.interpolate("x"=>vpi)
|
|
814
|
+
GGraph::tone gd
|
|
815
|
+
GGraph::tone gi,true,"color_bar"=>true,"exchange"=>true,"min"=>-1,"max"=>1
|
|
816
|
+
|
|
817
|
+
gi = gd.interpolate([vpi,vqi])
|
|
818
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
819
|
+
|
|
820
|
+
GGraph::tone gd
|
|
821
|
+
GGraph::tone gd.cut("p"=>vpi.min.to_f..vpi.max.to_f,"q"=>vqi.min.to_f..vqi.max.to_f),true
|
|
822
|
+
|
|
823
|
+
gi = gd.interpolate(vpi,vqi)
|
|
824
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
825
|
+
|
|
826
|
+
gi = gd.interpolate(vqi,vpi)
|
|
827
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
828
|
+
|
|
829
|
+
gi2 = gd.regrid(gi[false,0])
|
|
830
|
+
p "regriding test (should be true):", gi.val == gi2.val
|
|
831
|
+
|
|
832
|
+
gi = gd.interpolate(vqi,vpi,{"z"=>0.5})
|
|
833
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
834
|
+
|
|
835
|
+
###gd.interpolate(vpi) # must fail by insufficient specification
|
|
836
|
+
=begin
|
|
837
|
+
=end
|
|
838
|
+
|
|
839
|
+
|
|
840
|
+
mask=d.lt(0.7)
|
|
841
|
+
missv = -999.0
|
|
842
|
+
d[mask.not] = missv
|
|
843
|
+
p d[false,0]
|
|
844
|
+
dm = NArrayMiss.to_nam(d, mask )
|
|
845
|
+
vdm = VArray.new( dm, {"missing_value"=>NArray[missv]}, "d")
|
|
846
|
+
gdm = GPhys.new(xyzgrid, vdm)
|
|
847
|
+
gi = gdm.interpolate(vpi,vqi)
|
|
848
|
+
# gi = gdm.interpolate(vxi,vyi)
|
|
849
|
+
GGraph::tone gi,true,"color_bar"=>true
|
|
850
|
+
|
|
851
|
+
|
|
852
|
+
#< finish >
|
|
853
|
+
DCL.grcls
|
|
854
|
+
end
|