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,220 @@
|
|
|
1
|
+
require "numru/dcl"
|
|
2
|
+
require "numru/misc"
|
|
3
|
+
require "date" # needs ruby >= 1.8 for DateTime class
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
module NumRu
|
|
7
|
+
module DCLExt
|
|
8
|
+
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
@@datetime_ax_options = Misc::KeywordOptAutoHelp.new(
|
|
12
|
+
['yax', false, 'true => y-axis, false => x-axis'],
|
|
13
|
+
['cside', nil, '"b", "t", "l", "r", nil (=>left/bottom), or false (=>right/top)'],
|
|
14
|
+
['dtick1', 1, 'small tick interval in hours'],
|
|
15
|
+
['dtick2', nil, 'large tick (with hour labels) interval in hours'],
|
|
16
|
+
['year', false, 'true => add year to date label'],
|
|
17
|
+
['month', true, 'true => add month to date label']
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
def datetime_ax(date_from, date_to, options=nil)
|
|
21
|
+
# date_from [a DateTime] : start on this date&time
|
|
22
|
+
# date_to [a DateTime] : end on this date&time
|
|
23
|
+
|
|
24
|
+
opt = @@datetime_ax_options.interpret(options)
|
|
25
|
+
|
|
26
|
+
yax = opt['yax']
|
|
27
|
+
xax = !yax
|
|
28
|
+
if xax
|
|
29
|
+
xy='x'
|
|
30
|
+
else
|
|
31
|
+
xy='y'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
if opt['cside']
|
|
35
|
+
cside = opt['cside']
|
|
36
|
+
elsif opt['cside'].nil?
|
|
37
|
+
if xax
|
|
38
|
+
cside='b'
|
|
39
|
+
else
|
|
40
|
+
cside='l'
|
|
41
|
+
end
|
|
42
|
+
else
|
|
43
|
+
if xax
|
|
44
|
+
cside='t'
|
|
45
|
+
else
|
|
46
|
+
cside='r'
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
if opt['year']
|
|
51
|
+
datefmt = '%Y/%m/%d'
|
|
52
|
+
elsif opt['month']
|
|
53
|
+
datefmt = '%m/%d'
|
|
54
|
+
else
|
|
55
|
+
datefmt = '%d'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# < window parameters >
|
|
59
|
+
|
|
60
|
+
ux1,ux2,uy1,uy2 = DCL.sgqwnd
|
|
61
|
+
if xax
|
|
62
|
+
u1, u2 = ux1, ux2
|
|
63
|
+
else
|
|
64
|
+
u1, u2 = uy1, uy2
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
loffset_save = DCL.uzpget('loffset')
|
|
68
|
+
xyfact_save = DCL.uzpget(xy+'fact')
|
|
69
|
+
xyoffset_save = DCL.uzpget(xy+'offset')
|
|
70
|
+
|
|
71
|
+
tu1 = date_from.day_fraction.to_f
|
|
72
|
+
range_day = date_to - date_from # time btwn start and end (in days)
|
|
73
|
+
tu2 = tu1 + range_day
|
|
74
|
+
|
|
75
|
+
# < axis in hours >
|
|
76
|
+
|
|
77
|
+
DCL.uzpset('loffset',true)
|
|
78
|
+
|
|
79
|
+
DCL.uzpset(xy+'fact',24.0)
|
|
80
|
+
DCL.uzpset(xy+'offset',(tu1-u1)*24)
|
|
81
|
+
|
|
82
|
+
dtick1 = opt['dtick1']
|
|
83
|
+
if opt['dtick2']
|
|
84
|
+
dtick2 = opt['dtick2']
|
|
85
|
+
else
|
|
86
|
+
if range_day >= 4
|
|
87
|
+
dtick2 = 24
|
|
88
|
+
elsif range_day >= 2
|
|
89
|
+
dtick2 = 12
|
|
90
|
+
elsif range_day >= 1
|
|
91
|
+
dtick2 = 6
|
|
92
|
+
elsif range_day >= 0.5
|
|
93
|
+
dtick2 = 3
|
|
94
|
+
elsif range_day >= 0.25
|
|
95
|
+
dtick2 = 2
|
|
96
|
+
else
|
|
97
|
+
dtick2 = 1
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
str_hour = (tu1*24).ceil
|
|
102
|
+
end_hour = (tu2*24).floor
|
|
103
|
+
tick1=Array.new
|
|
104
|
+
tick2=Array.new
|
|
105
|
+
labels=Array.new
|
|
106
|
+
h1 = str_hour + (-str_hour % dtick1)
|
|
107
|
+
(h1..end_hour).step(dtick1){|i| tick1.push(i)}
|
|
108
|
+
h2 = str_hour + (-str_hour % dtick2)
|
|
109
|
+
(h2..end_hour).step(dtick2) do |i|
|
|
110
|
+
tick2.push(i)
|
|
111
|
+
labels.push((i%24).to_s)
|
|
112
|
+
end
|
|
113
|
+
if xax
|
|
114
|
+
DCL.uxaxlb(cside, tick1, tick2, labels, 2)
|
|
115
|
+
else
|
|
116
|
+
irotl_save = DCL.uzpget('irotly'+cside)
|
|
117
|
+
icent_save = DCL.uzpget('icenty'+cside)
|
|
118
|
+
DCL.uzpset('irotly'+cside,1)
|
|
119
|
+
DCL.uzpset('icenty'+cside,0)
|
|
120
|
+
DCL.uyaxlb(cside, tick1, tick2, labels, 2)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# < labels in days >
|
|
124
|
+
|
|
125
|
+
if DCL.uzpget('label'+xy+cside)
|
|
126
|
+
DCL.uzpset(xy+'fact',1.0)
|
|
127
|
+
DCL.uzpset(xy+'offset',0.0)
|
|
128
|
+
|
|
129
|
+
str_day = tu1.floor
|
|
130
|
+
end_day = tu2.floor
|
|
131
|
+
pos=Array.new
|
|
132
|
+
labels=Array.new
|
|
133
|
+
(str_day..end_day).step(1) do |i|
|
|
134
|
+
u = i.to_f + 0.5 + (u1- tu1)
|
|
135
|
+
u = (u1+u+0.5)/2 if u < u1
|
|
136
|
+
u = (u2+u-0.5)/2 if u > u2
|
|
137
|
+
pos.push(u)
|
|
138
|
+
str = (date_from+i).strftime(datefmt)
|
|
139
|
+
str.sub!(/^0/,'') if !opt['year'] && opt['month']
|
|
140
|
+
labels.push(str)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
if xax
|
|
144
|
+
DCL.uxsaxz(cside,DCL.uzpget('roffx'+cside))
|
|
145
|
+
DCL.uxplbl(cside,1,pos,labels,10)
|
|
146
|
+
else
|
|
147
|
+
DCL.uysaxz(cside,DCL.uzpget('roffy'+cside))
|
|
148
|
+
DCL.uyplbl(cside,1,pos,labels,10)
|
|
149
|
+
# DCL.uzpset('irotly'+cside,irotl_save)
|
|
150
|
+
# DCL.uzpset('icenty'+cside,icent_save)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
if xax
|
|
156
|
+
else
|
|
157
|
+
DCL.uzpset('irotly'+cside,irotl_save)
|
|
158
|
+
DCL.uzpset('icenty'+cside,icent_save)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# < to finish >
|
|
162
|
+
|
|
163
|
+
DCL.uzpset('loffset',loffset_save)
|
|
164
|
+
DCL.uzpset(xy+'fact',xyfact_save)
|
|
165
|
+
DCL.uzpset(xy+'offset',xyoffset_save)
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
######## test program ######
|
|
173
|
+
|
|
174
|
+
if $0 == __FILE__
|
|
175
|
+
|
|
176
|
+
include NumRu
|
|
177
|
+
|
|
178
|
+
iws = (ARGV[0] || (puts ' WORKSTATION ID (I) ? ;'; DCL.sgpwsn; gets)).to_i
|
|
179
|
+
DCL.swpset('ldump',true) if iws==4
|
|
180
|
+
DCL.gropn iws
|
|
181
|
+
DCL.sldiv('y',2,1)
|
|
182
|
+
|
|
183
|
+
date_from = DateTime.parse('2005-06-30 17:00')
|
|
184
|
+
date_to = DateTime.parse('2005-07-01 5:00')
|
|
185
|
+
date_from2 = DateTime.parse('2005-06-29 17:00')
|
|
186
|
+
date_to2 = DateTime.parse('2005-07-02 5:00')
|
|
187
|
+
|
|
188
|
+
any_offst = 10
|
|
189
|
+
|
|
190
|
+
DCL.grfrm
|
|
191
|
+
DCL.grswnd(0.0, date_to-date_from, any_offst, date_to2-date_from2+any_offst)
|
|
192
|
+
DCL.grsvpt(0.2, 0.8, 0.2, 0.8)
|
|
193
|
+
DCL.grstrn(1)
|
|
194
|
+
DCL.grstrf
|
|
195
|
+
DCLExt.datetime_ax(date_from, date_to, 'year'=>true)
|
|
196
|
+
DCLExt.datetime_ax(date_from, date_to, 'cside'=>'t', 'year'=>true)
|
|
197
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true)
|
|
198
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true, 'cside'=>'r')
|
|
199
|
+
DCL.uxsttl('b','TIME AND DATE',0.0)
|
|
200
|
+
DCL.uysttl('l','TIME AND DATE',0.0)
|
|
201
|
+
|
|
202
|
+
DCL.grfrm
|
|
203
|
+
DCL.grswnd(0.0, date_to-date_from, 0, date_to2-date_from2)
|
|
204
|
+
DCL.grsvpt(0.2, 0.8, 0.2, 0.8)
|
|
205
|
+
DCL.grstrn(1)
|
|
206
|
+
DCL.grstrf
|
|
207
|
+
DCL.uzpset('inner',-1)
|
|
208
|
+
DCLExt.datetime_ax(date_from, date_to, 'dtick2'=>2)
|
|
209
|
+
DCLExt.datetime_ax(date_from, date_to, 'cside'=>'t', 'dtick2'=>2)
|
|
210
|
+
DCL.uzpset('inner',1)
|
|
211
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true,
|
|
212
|
+
'dtick1'=>2, 'dtick2'=>24)
|
|
213
|
+
DCLExt.datetime_ax(date_from2, date_to2, 'yax'=>true, 'cside'=>'r',
|
|
214
|
+
'dtick1'=>2, 'dtick2'=>24)
|
|
215
|
+
DCL.uxsttl('b','TIME AND DATE',0.0)
|
|
216
|
+
DCL.uysttl('l','TIME AND DATE',0.0)
|
|
217
|
+
|
|
218
|
+
DCL.grcls
|
|
219
|
+
|
|
220
|
+
end
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
require "narray"
|
|
2
|
+
|
|
3
|
+
############################################################
|
|
4
|
+
|
|
5
|
+
=begin
|
|
6
|
+
=module NumRu::Derivative in derivative.rb
|
|
7
|
+
|
|
8
|
+
==todo
|
|
9
|
+
* decide argument of b_expand_linear_ext is Symbol or Numeric.
|
|
10
|
+
* now is Numeric.
|
|
11
|
+
* it denpends the treatment of dRuby.
|
|
12
|
+
* support other boundary conditions.
|
|
13
|
+
|
|
14
|
+
==Index
|
|
15
|
+
* ((<module NumRu::Derivative>))
|
|
16
|
+
* ((<threepoint_O2nd_deriv>))
|
|
17
|
+
* First derivative (2nd Order difference use three point.)
|
|
18
|
+
* ((<cderiv>))
|
|
19
|
+
* First derivative (center difference use two point.)
|
|
20
|
+
* ((<b_expand_linear_ext>))
|
|
21
|
+
* return array extended boundaries with linear extention.
|
|
22
|
+
* ((<cdiff>))
|
|
23
|
+
* return difference. (center difference)
|
|
24
|
+
|
|
25
|
+
=module NumRu::Derivative
|
|
26
|
+
|
|
27
|
+
Module functions of Derivative Operater for NArray.
|
|
28
|
+
|
|
29
|
+
---threepoint_O2nd_deriv(z, x, dim, bc=LINEAR_EXT)
|
|
30
|
+
|
|
31
|
+
Derivate (({z})) respect to (({dim})) th dimension with 2nd Order difference.
|
|
32
|
+
return an NArray which result of the difference ((<z>)) divided difference
|
|
33
|
+
(({x})) (in other wards,
|
|
34
|
+
(s**2*z_{i+1} + (t**2 - s**2)*f_{i} - t**2*f_{i-1}) / (s*t*(s + t)):
|
|
35
|
+
now s represents (x_{i} - x_{i-1}) ,t represents (x_{i+1} - x_{i})
|
|
36
|
+
and _{i} represents the suffix of {i} th element in the ((<dim>)) th
|
|
37
|
+
dimension of array. ).
|
|
38
|
+
|
|
39
|
+
ARGUMENTS
|
|
40
|
+
* z (NArray): a NArray which you want to derivative.
|
|
41
|
+
* x (NArray): a NArray represents the dimension which derivative respect to.
|
|
42
|
+
z.rank must be 1.
|
|
43
|
+
* dim (Numeric): a Numeric represents the dimention which derivative respect to.
|
|
44
|
+
you can give number count backward (((<dim>))<0), but ((<z.rank ��dim>)) must be > 0.
|
|
45
|
+
* bc (Numeric) : a Numeric to represent boundary condition.
|
|
46
|
+
Supported conditions are expressed in terms of boundary extension
|
|
47
|
+
applied before differentiation:
|
|
48
|
+
* LINEAR_EXT(=1): default value. linear extension using two
|
|
49
|
+
grid points at the boundaries.
|
|
50
|
+
* CYCLIC_EXT(=2): cyclic extension as k,0,1,..,k,0 for indices 0,1,..,k
|
|
51
|
+
* MIRROR_A(=3): for indices 0,1,..,k, extends as 0,0,1,..,k,k
|
|
52
|
+
(good for cell interior values with the Neumann condition)
|
|
53
|
+
* MIRROR_B(=4): for indices 0,1,..,k, extends as 1,0,1,..,k,k-1
|
|
54
|
+
(good for cell boundary values with the Neumann condition)
|
|
55
|
+
|
|
56
|
+
RETURN VALUE
|
|
57
|
+
* O2nd_deriv_data (NArray): (s**2*z_{i+1} + (t**2 - s**2)*f_{i} - t**2*f_{i-1}) / (s*t*(s + t))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
---cderiv(z, x, dim, bc=LINEAR_EXT)
|
|
61
|
+
|
|
62
|
+
Derivate (({z})) respect to (({dim})) th dimension with center difference.
|
|
63
|
+
return an NArray which result of the difference ((<z>)) divided difference
|
|
64
|
+
(({x})) ( in other wards, (z_{i+1} - z_{i-1}) / (x_{i+1} - x_{i-1}):
|
|
65
|
+
now _{i} represents the suffix of {i} th element in the ((<dim>)) th
|
|
66
|
+
dimension of array. ).
|
|
67
|
+
|
|
68
|
+
ARGUMENTS
|
|
69
|
+
* z (NArray): a NArray which you want to derivative.
|
|
70
|
+
* x (NArray): a NArray represents the dimension which derivative respect
|
|
71
|
+
to. z.rank must be 1.
|
|
72
|
+
* dim (Numeric): a Numeric represents the dimention which derivative
|
|
73
|
+
respect to. you can give number count backward (((<dim>))<0), but
|
|
74
|
+
((<z.rank ��dim>)) must be > 0.
|
|
75
|
+
* bc (Numeric) : a Numeric to represent boundary condition.
|
|
76
|
+
See ((<threepoint_O2nd_deriv>)) for supported conditions.
|
|
77
|
+
|
|
78
|
+
RETURN VALUE
|
|
79
|
+
* cderiv_data (NArray): (z_{i+1} - z_{i-1}) / (x_{i+1} - x_{i-1})
|
|
80
|
+
|
|
81
|
+
---b_expand_linear_ext(z, dim)
|
|
82
|
+
|
|
83
|
+
expand boundary with linear value. extend array with 1 grid at each
|
|
84
|
+
boundary with ((<dim>)) th dimension, and assign th value which diffrential
|
|
85
|
+
value between a grid short of boundary and boundary grid in original array.
|
|
86
|
+
(on other wards, 2*z_{0}-z_{1} or 2*z_{n-1}-z_{n-2}: now _{i} represents the
|
|
87
|
+
suffix of {i} th element in the ((<dim>)) th dimension of array. ).
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
ARGUMENTS
|
|
91
|
+
* z (NArray): a NArray which you want to expand boundary.
|
|
92
|
+
* dim (Numeric): a Numeric represents the dimention which derivative
|
|
93
|
+
respect to. you can give number count backward (((<dim>))<0), but
|
|
94
|
+
((<z.rank ��dim>)) must be > 0.
|
|
95
|
+
|
|
96
|
+
RETURN VALUE
|
|
97
|
+
* expand_data (NArray):
|
|
98
|
+
|
|
99
|
+
---cdiff(x, dim)
|
|
100
|
+
|
|
101
|
+
Diffrence operater. return an NArray which a difference ((<x>))
|
|
102
|
+
( in other wards, (x_{i+1} - x_{i-1}): now _{i} represents the suffix of
|
|
103
|
+
{i} th element in the ((<dim>)) th dimension of array. ).
|
|
104
|
+
|
|
105
|
+
ARGUMENTS
|
|
106
|
+
* x (NArray): a NArray which you want to get difference.
|
|
107
|
+
* dim (Numeric): a Numeric representing the dimention which derivative
|
|
108
|
+
respect to. you can give number count backward (((<dim>))<0), but
|
|
109
|
+
((<z.rank ��dim>)) must be > 0.
|
|
110
|
+
|
|
111
|
+
RETURN VALUE
|
|
112
|
+
* cdiff_data (NArray): (x_{i+1} - x_{i-1})
|
|
113
|
+
|
|
114
|
+
=end
|
|
115
|
+
############################################################
|
|
116
|
+
|
|
117
|
+
module NumRu
|
|
118
|
+
|
|
119
|
+
module Derivative
|
|
120
|
+
|
|
121
|
+
module_function
|
|
122
|
+
|
|
123
|
+
#<<module constant>>
|
|
124
|
+
LINEAR_EXT = 1
|
|
125
|
+
CYCLIC_EXT = 2
|
|
126
|
+
MIRROR_A = 3
|
|
127
|
+
MIRROR_B = 4
|
|
128
|
+
|
|
129
|
+
def threepoint_O2nd_deriv(z, x, dim, bc=LINEAR_EXT)
|
|
130
|
+
dim += z.rank if dim<0
|
|
131
|
+
if dim < 0 || dim >= z.rank
|
|
132
|
+
raise ArgumentError,"dim value(#{dim}) must be between 0 and (#{z.rank-1}"
|
|
133
|
+
end
|
|
134
|
+
raise ArgumentError,"rank of x (#{x.rank}) must be 1" if x.rank != 1
|
|
135
|
+
# <<expand boundaries>>
|
|
136
|
+
ze = b_expand(z,dim,bc)
|
|
137
|
+
xe = b_expand_linear_ext(x,0) # always linear extention
|
|
138
|
+
# <<differenciation>>
|
|
139
|
+
to_rankD = [1]*dim + [true] + [1]*(ze.rank-1-dim) # to exand 1D to rank D
|
|
140
|
+
dx = xe[1..-1] - xe[0..-2] # x_{i} - x_{i-1} (for i=0..n-2)
|
|
141
|
+
dx2 = dx**2
|
|
142
|
+
s = dx[0..-2] # x_{i} - x_{i-1} (for i=0..n-3)
|
|
143
|
+
t = dx[1..-1] # x_{i+1} - x_{i} (for i=0..n-3)
|
|
144
|
+
s2 = dx2[0..-2].reshape(*to_rankD) # s**2
|
|
145
|
+
t2 = dx2[1..-1].reshape(*to_rankD) # t**2
|
|
146
|
+
numerator = ze[ *([true]*dim+[2..-1,false]) ] * s2\
|
|
147
|
+
+ ze[ *([true]*dim+[1..-2,false]) ] * (t2-s2) \
|
|
148
|
+
- ze[ *([true]*dim+[0..-3,false]) ] * t2
|
|
149
|
+
denominator = (s*t*(s+t)).reshape(*to_rankD)
|
|
150
|
+
dzdx = numerator / denominator
|
|
151
|
+
return dzdx
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def cderiv(z, x, dim, bc=LINEAR_EXT)
|
|
156
|
+
dim += z.rank if dim<0
|
|
157
|
+
raise ArgumentError,"dim value (#{dim}) must be smaller than z.rank and >= 0" if dim >= z.rank || dim<0
|
|
158
|
+
raise ArgumentError,"rank of x (#{x.rank}) must be 1" if x.rank != 1
|
|
159
|
+
# <<expand boundary>>
|
|
160
|
+
ze = b_expand(z,dim,bc)
|
|
161
|
+
xe = b_expand_linear_ext(x,0) # expand boundary of axis.
|
|
162
|
+
# <<difference operation>>
|
|
163
|
+
dz = cdiff(ze,dim)
|
|
164
|
+
dx = cdiff(xe,0)
|
|
165
|
+
if dx.rank != dz.rank # make dx.rank == dz.rank
|
|
166
|
+
dx = dx.reshape(*([1]*dim + [true] + [1]*(dz.rank-1-dim)))
|
|
167
|
+
end
|
|
168
|
+
dzdx = dz/dx
|
|
169
|
+
return dzdx
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def b_expand(z,dim,bc)
|
|
173
|
+
case bc
|
|
174
|
+
when LINEAR_EXT
|
|
175
|
+
ze = b_expand_linear_ext(z,dim) # linear extention
|
|
176
|
+
when CYCLIC_EXT
|
|
177
|
+
ze = b_expand_cyclic(z,dim)
|
|
178
|
+
when MIRROR_A
|
|
179
|
+
ze = b_expand_mirror_A(z,dim)
|
|
180
|
+
when MIRROR_B
|
|
181
|
+
ze = b_expand_mirror_B(z,dim)
|
|
182
|
+
else
|
|
183
|
+
raise ArgumentError,"unsupported boundary condition: #{bc}."
|
|
184
|
+
end
|
|
185
|
+
ze
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def b_expand_linear_ext(z,dim)
|
|
189
|
+
raise ArgumentError,"Len of #{dim}th dim (#{z.shape[dim]}) must be >= 2" if z.shape[dim] < 2
|
|
190
|
+
|
|
191
|
+
val0 = z[*([true]*dim + [0] + [false])] # first
|
|
192
|
+
val1 = z[*([true]*dim + [1] + [false])] # second
|
|
193
|
+
valm1 = z[*([true]*dim + [-1] + [false])] # last
|
|
194
|
+
valm2 = z[*([true]*dim + [-2] + [false])] # one before last
|
|
195
|
+
|
|
196
|
+
# expand boundary
|
|
197
|
+
ze = z[*([true]*dim + [[0,0..(z.shape[dim]-1),0]] + [false])]
|
|
198
|
+
ze[*([true]*dim + [0] + [false])] = 2*val0-val1
|
|
199
|
+
ze[*([true]*dim + [-1] + [false])] = 2*valm1-valm2
|
|
200
|
+
return ze
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def b_expand_cyclic(z,dim)
|
|
204
|
+
k = z.shape[dim]-1
|
|
205
|
+
z[*([true]*dim + [[k,0..k,0]] + [false])]
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def b_expand_mirror_A(z,dim)
|
|
209
|
+
k = z.shape[dim]-1
|
|
210
|
+
z[*([true]*dim + [[0,0..k,k]] + [false])]
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def b_expand_mirror_B(z,dim)
|
|
214
|
+
raise ArgumentError,"Len of #{dim}th dim (#{z.shape[dim]}) must be >= 2" if z.shape[dim] < 2
|
|
215
|
+
k = z.shape[dim]-1
|
|
216
|
+
z[*([true]*dim + [[1,0..k,k-1]] + [false])]
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def cdiff(z,dim)
|
|
220
|
+
z1 = z[*([true]*dim + [2..-1] + [false])]
|
|
221
|
+
z2 = z[*([true]*dim + [0..-3] + [false])]
|
|
222
|
+
cz = z1-z2 # cz[i] = cz[n+1] - cz[n-1]
|
|
223
|
+
return cz
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
######################################################
|
|
231
|
+
## < test >
|
|
232
|
+
if $0 == __FILE__
|
|
233
|
+
|
|
234
|
+
include NumRu
|
|
235
|
+
include NMath
|
|
236
|
+
|
|
237
|
+
def test1(x1)
|
|
238
|
+
f1 = sin(x1)
|
|
239
|
+
dfdx1 = Derivative::cderiv(f1, x1, 0)
|
|
240
|
+
dfdx2 = cos(x1)
|
|
241
|
+
p(dfdx1) if $VERBOSE
|
|
242
|
+
diff = (dfdx1 - dfdx2)[1..-2].abs
|
|
243
|
+
err = diff.mean
|
|
244
|
+
print "dfdx - kaiseki_kai (except boundary): "
|
|
245
|
+
print err, "\t", diff.max,"\n"
|
|
246
|
+
err
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def test2(x1)
|
|
250
|
+
f1 = sin(x1)
|
|
251
|
+
dfdx1 = Derivative::threepoint_O2nd_deriv(f1, x1, 0)
|
|
252
|
+
dfdx2 = cos(x1)
|
|
253
|
+
p(dfdx1) if $VERBOSE
|
|
254
|
+
diff = (dfdx1 - dfdx2)[1..-2].abs
|
|
255
|
+
err = diff.mean
|
|
256
|
+
print "dfdx - kaiseki_kai (except boundary): "
|
|
257
|
+
print err, "\t", diff.max,"\n"
|
|
258
|
+
err
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
def test3
|
|
262
|
+
nx = 21
|
|
263
|
+
x = 2*PI*NArray.float(nx).indgen!/nx
|
|
264
|
+
f = sin(2*PI*NArray.float(nx,nx,nx).indgen!/nx)
|
|
265
|
+
dfdx1 = Derivative::cderiv(f, x, 0)
|
|
266
|
+
dfdx2 = Derivative::threepoint_O2nd_deriv(f, x, 0)
|
|
267
|
+
diff = (dfdx1 - dfdx2).abs
|
|
268
|
+
print "cderiv - o2deriv: "
|
|
269
|
+
print diff.mean, "\t", diff.max,"\n"
|
|
270
|
+
dfdx1 = Derivative::cderiv(f, x, 1)
|
|
271
|
+
dfdx2 = Derivative::threepoint_O2nd_deriv(f, x, 1)
|
|
272
|
+
diff = (dfdx1 - dfdx2).abs
|
|
273
|
+
print "cderiv - o2deriv: "
|
|
274
|
+
print diff.mean, "\t", diff.max,"\n"
|
|
275
|
+
dfdx1 = Derivative::cderiv(f, x, 2)
|
|
276
|
+
dfdx2 = Derivative::threepoint_O2nd_deriv(f, x, 2)
|
|
277
|
+
diff = (dfdx1 - dfdx2).abs
|
|
278
|
+
print "cderiv - o2deriv: "
|
|
279
|
+
print diff.mean, "\t", diff.max,"\n"
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def test4
|
|
283
|
+
x = NArray.to_na([-1.0, 0.0, 2.0, 3.0])
|
|
284
|
+
f = NArray.to_na([1.0, 0.0, 4.0, 4.0])
|
|
285
|
+
dfdx = Derivative::threepoint_O2nd_deriv(f, x, 0)
|
|
286
|
+
dfdx_anal = NArray.to_na([-1.0, 0.0, 2.0/3.0, 0.0])
|
|
287
|
+
print "o2deriv - analytic: "
|
|
288
|
+
diff = (dfdx - dfdx_anal).abs
|
|
289
|
+
print diff.mean, "\t", diff.max,"\n"
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def test5(x1)
|
|
293
|
+
f1 = sin(x1)
|
|
294
|
+
dfdx1 = Derivative::cderiv(f1, x1, 0, Derivative::CYCLIC_EXT)
|
|
295
|
+
dfdx2 = cos(x1)
|
|
296
|
+
p(dfdx1) if $VERBOSE
|
|
297
|
+
diff = (dfdx1 - dfdx2).abs
|
|
298
|
+
err = diff.mean
|
|
299
|
+
print "dfdx - kaiseki_kai: "
|
|
300
|
+
print err, "\t", diff.max,"\n"
|
|
301
|
+
err
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
def gen_x(nx)
|
|
305
|
+
2*PI*NArray.float(nx).indgen!/(nx-1)
|
|
306
|
+
end
|
|
307
|
+
def gen_xc(nx)
|
|
308
|
+
2*PI*NArray.float(nx).indgen!/nx
|
|
309
|
+
end
|
|
310
|
+
def gen_x2(nx)
|
|
311
|
+
2*PI*exp(-NArray.float(nx).indgen!/(nx-1))
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
print "**** single-D ****\n"
|
|
316
|
+
|
|
317
|
+
print "**** equally spaced grid ****\n"
|
|
318
|
+
er1 = test1( gen_x(11) )
|
|
319
|
+
er2 = test1( gen_x(21) )
|
|
320
|
+
print "error change from nx=11->21: ", er2/er1,"\n"
|
|
321
|
+
|
|
322
|
+
print "**** equally spaced grid ****\n"
|
|
323
|
+
er1 = test2( gen_x(11) )
|
|
324
|
+
er2 = test2( gen_x(21) )
|
|
325
|
+
print "error change from nx=11->21: ", er2/er1,"\n"
|
|
326
|
+
|
|
327
|
+
print "**** equally spaced grid (cyclic) ****\n"
|
|
328
|
+
er1 = test1( gen_xc(80) )
|
|
329
|
+
er1 = test5( gen_xc(80) )
|
|
330
|
+
|
|
331
|
+
print "**** multi-D ****\n"
|
|
332
|
+
test3
|
|
333
|
+
|
|
334
|
+
print "**** non-uniform grid ****\n"
|
|
335
|
+
p 'x(11):',gen_x2(11),'x(21):',gen_x2(21)
|
|
336
|
+
er1 = test1( gen_x2(11) )
|
|
337
|
+
er2 = test1( gen_x2(21) )
|
|
338
|
+
print "error change from nx=11->21: ", er2/er1,"\n"
|
|
339
|
+
|
|
340
|
+
print "**** non-uniform grid (2nd order) ****\n"
|
|
341
|
+
er1 = test2( gen_x2(11) )
|
|
342
|
+
er2 = test2( gen_x2(21) )
|
|
343
|
+
print "error change from nx=11->21: ", er2/er1,"\n"
|
|
344
|
+
|
|
345
|
+
print "**** non-uniform grid (analytic test) ****\n"
|
|
346
|
+
test4
|
|
347
|
+
|
|
348
|
+
end
|