ºîÀ®: 2003ǯ8·î
ºÇ½ª²þÄû: 2006ǯ8Æü
OPeNDAP/DODS¤òÍѤ¤¤¿±ó³Ö¥Ç¡¼¥¿¥¢¥¯¥»¥¹
GPhys¤È¤Ï, ʪÍýÎ̤Υǡ¼¥¿¤ò°·¤¦¤¿¤á¤Î¥¯¥é¥¹¤Ç¤¢¤ë. ¤³¤³¤ÇÁÛÄꤷ¤Æ¤¤ ¤ë¤Î¤Ï, ³Ê»Ò¾õ¤ËÎ¥»¶²½¤µ¤ì¤¿Ï¢Â³ÂΤÎʪÍýÎ̤Ç, ³Ê»ÒÅÀ¤Ë´Ø¤¹¤ë½ô¾ðÊó¤È³Æ ÅÀ¤Ë¤ª¤±¤ëʪÍýÎ̤ÎÃÍ, ¤µ¤é¤Ë¤½¤ÎʪÍýÎ̤˴ؤ¹¤ëÉÕ²ÃŪ¤Ê¾ðÊ󤫤é¤Ê¤ë. ¾ÜºÙ¤ÏÄɤ¤Äɤ¤ÀâÌÀ¤¹¤ë¤È¤·¤Æ, GPhys ¤Ï¤³¤ó¤Ê»þ¤ËÊØÍø¤Ç¤¢¤ë.
GPhys ¤¬°·¤¨¤ë¥Õ¥¡¥¤¥ë·Á¼°¤Ïº£¤Î¤È¤³¤í NetCDF, GrADS, grib ¤Î3¤Ä¤Ç¤¢¤ë. grib ¤Î¥µ¥Ý¡¼¥È¤Ï GPhys 0.4.0 ¤«¤é¤È¤Ê¤ë. ¾ÍèŪ¤Ë¤Ï¥µ¥Ý¡¼¥È¤¹¤ë·Á¼°¤òÁý¤ä¤·¤¿¤¤¤È¹Í¤¨¤Æ¤¤¤ë.
ËÜ¥Á¥å¡¼¥È¥ê¥¢¥ë¤Ç¤Ï, 2ÈÖÌܤΥ·¥ß¥å¥ì¡¼¥·¥ç¥ó¤Ë¤Ï¿¨¤ì¤º, ²Ä»ë²½¤òÃæ¿´¤Ë, ´û¤Ë¥Õ¥¡¥¤¥ë¤Ë¤Ê¤Ã¤Æ¤¤¤ë¥Ç¡¼¥¿¤Î°·¤¤¤Ë½¸Ã椹¤ë¤³¤È¤Ë¤¹¤ë. ¥Ç¡¼¥¿¤Ï´ðËÜŪ¤Ë¥í¡¼¥«¥ë¥Û¥¹¥È¤Ë¸ºß¤¹¤ë¤â¤Î¤ò°·¤¦¤¬, ±ó³Ö¥Û¥¹¥È¤Ë¸ºß¤¹¤ë¥Ç¡¼¥¿¤Ë¥¢¥¯¥»¥¹¤¹¤ë, ¤´¤¯´Êñ¤Ê¥µ¡¼¥Ð¡¼¤È¥¯¥é¥¤¥¢¥ó¥È¤ÎÎã¤â¼¨¤¹.
°Ê²¼¤Ç¤Ï GPhys ¤ËÉÕ°¤ÎÉÁ²è¥é¥¤¥Ö¥é¥ê¡¼ GGraph ¤ò»È¤Ã¤¿Î㤬¿¤¯½Ð¤Æ¤¯¤ë. ¤·¤«¤·, GGraph ¤Ï, ¤¢¤¯¤Þ¤Ç GPhys ¤ÎÍøÍÑÎã¤Î°ì¤Ä¤È¤¤¤¦Î©¾ì¤Ë¤Ê¤Ã¤Æ¤ª¤ê, GPhys ¤Îɬ¿Ü¹½À®Í×ÁǤǤϤʤ¤. ¤³¤Î¤¿¤á, GPhys ¼«ÂÎ¤Ï GGraph ¤È¤½¤Î²¼ÀÁ¤±¤Î RubyDCL ¤¬¤Ê¤¯¤Æ¤âưºî¤¹¤ë(¤½¤Î¾ì¹ç¤Ï ¤³¤³ ¤Ë½ñ¤¤¤¿¤è¤¦¤Ë, require "numru/gphys" ¤È¤¤¤¦·Á¤Ç»È¤¦). GPhys ¤ÎÍøÍѼԤÏ, GGraph ¤È¤ÏÆÈΩ¤Ë, ¼«Ê¬¼«¿È¤Î ÉÁ²è¥é¥¤¥Ö¥é¥ê¡¼¤ò³«È¯¤¹¤ë¤³¤È¤¬¤Ç¤¤ë. Î㤨¤Ð¥°¥é¥Õ¥£¥«¥ë¥æ¡¼¥¶¡¼¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î gave ¤Ï, GGraph ¤òÍѤ¤¤Æ¤¤¤Ê¤¤.
ËÜ¥Á¥å¡¼¥È¥ê¥¢¥ë¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤Ï, GPhys-0.4.0 ¤Ç¼Â¹Ô¡¦³Îǧ¤·¤¿¤¬¡¤°ìÉô¤Ï GPhys-0.5.0 ¤Î¿·µ¡Ç½¤ò»È¤Ã¤Æ¤ª¤ê¡¤0.5.0 ¤Ç³Îǧ¤·¤¿¡Ê´Ø·¸¤¹¤ë¤Î¤Ï GDir ¤Ë´Ø¤ï¤ë²Õ½ê ¤Ç¤¢¤ê¡¤ËÜÊ¸Ãæ¤ËÌÀ¼¨¤·¤Æ¤¢¤ë¡Ë¡¥¤Þ¤¿¡¤Â¿¤¯¤Î¥×¥í¥°¥é¥à¤Ï 0.3.5 ¤Ç¤âưºî¤¹¤ë.
GPhys ¤Î¥ì¥Õ¥¡¥ì¥ó¥¹¥Þ¥Ë¥å¥¢¥ë¤Ï¤³¤³¤Ë¤¢¤ë¡§
¸½ºß¤Î¤È¤³¤íÉôʬŪ¤Ë¤·¤«ºîÀ®¤µ¤ì¤Æ¤¤¤Ê¤¤¤¬, ¸å½Ò¤¹¤ëÉÁ²è¥é¥¤¥Ö¥é¥ê¡¼ GGraph ¤Î¥Þ¥Ë¥å¥¢¥ë¤ÏÀ°È÷¤µ¤ì¤Æ¤¤¤ë.
´ö¤Ä¤«¤ÎOS¤Ë¤ª¤¤¤Æ¤Ï, °Í¸¥é¥¤¥Ö¥é¥ê¡¼¤â´Þ¤á¤Æ¼«Æ°¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤³¤È¤¬¤Ç¤¤ë. ÅÅǾRubyÆüËܸì¥Û¡¼¥à¥Ú¡¼¥¸ ¤Î¡Ö¥¤¥ó¥¹¥È¡¼¥ë¥¬¥¤¥É¡×¥³¡¼¥Ê¡¼¤ò»²¾È¤Î¤³¤È.
°Ê²¼, GPhys ¤Î¥Ð¡¼¥¸¥ç¥ó¤Ï 0.3.0 ¤Ç¤¢¤ë¤È¤¹¤ë. GPhys ¤Ï Ruby ¤À¤±¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¤Î¤Ç, ¥¤¥ó¥¹¥È¡¼¥ë¤ÏŬÅö¤Ê¥Ñ¥¹¤Ë¥³ ¥Ô¡¼¤¹¤ë¤À¤±¤Ç¤¢¤ë. °Ê²¼¤Ï¤½¤ì¤ò¹Ô¤¦¡§
% tar xvzf gphys-0.4.0.tar.gz % cd gphys-0.4.0 % ruby install.rb |
¤¿¤À¤·, ¤½¤ÎÁ°¤Ë¤¤¤í¤¤¤í¥¤¥ó¥¹¥È¡¼¥ë¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤â¤Î¤¬¤¢¤ë. ¾Ü¤·¤¯¤Ï GPhys¥Û¡¼¥à¥Ú¡¼¥¸¤ò»²¾È¤µ¤ì¤¿¤¤. ɬÍ×¤Ê¤Î¤Ï NArray, NArrayMiss, RubyNetCDF, RubyDCL ¤Ç¤¢¤ë. FFT¤Îµ¡Ç½¤ÎÃæ¤Ë¤Ï RubyFFTW3 ¤òÍפ¹¤ë¤â¤Î¤â¤¢¤ë. ¾å½Ò¤Î¤è¤¦¤Ë, ²Ä»ë²½¤·¤Ê¤¤¤Ê¤é RubyDCL ¤Ï¤Ê¤¯¤Æ¤â¤è¤¤.
GPhys ¤ÎÇÛÉۥѥ屡¼¥¸¤Ë¤Ï¥Æ¥¹¥ÈÍѤË, T.jan.nc¤È¤¤¤¦ NetCDF¥Õ¥¡¥¤¥ë¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¤Î¤Ç, ¤½¤ì¤ò»È¤¦¤³¤È¤Ë¤¹¤ë (testdata¤È¤¤¤¦¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¤Ë¤¢¤ë). Ʊ¤¸¤â¤Î¤Ï, ¤³¤³¤«¤é¤â¥À¥¦¥ó¥í¡¼¥É½ÐÍè¤ë. Ãæ¿È¤Ï NCEP ºÆ²òÀϤˤè¤ë, Á´µå¤Îµ¤²¹¤Î1·î¤Îµ¤¸õÃͤǤ¢¤ë. ¤³¤Î¥Õ¥¡¥¤¥ë¤òºî¶ÈÍѤΥǥ£¥ì¥¯¥È¥ê¡¼¤Ë¥³¥Ô¡¼¤·, °Ê²¼¤Î¥á¥Ë¥å¡¼¤Ï ¤½¤³¤Ç¼Â¹Ô¤¹¤ë¤â¤Î¤È¤¹¤ë.
¤Þ¤º¤Ï, ¤³¤Î¥Õ¥¡¥¤¥ë¤Î³µÍפò¸«¤è¤¦. NetCDFÉÕ°¤Î¥³¥Þ¥ó¥É ncdump ¤òÍѤ¤¤ë.
% ncdump -c T.jan.nc
netcdf T.jan {
dimensions:
lon = 36 ;
lat = 19 ;
level = 9 ;
variables:
float lon(lon) ;
lon:units = "degrees_east" ;
lon:long_name = "Longitude" ;
lon:actual_range = 0.f, 357.5f ;
float lat(lat) ;
lat:units = "degrees_north" ;
lat:actual_range = 90.f, -90.f ;
lat:long_name = "Latitude" ;
float level(level) ;
level:units = "millibar" ;
level:long_name = "Level" ;
level:positive = "down" ;
level:GRIB_id = 100s ;
level:GRIB_name = "hPa" ;
level:actual_range = 10.f, 1000.f ;
float T(level, lat, lon) ;
T:long_name = "Monthly Mean Air temperature" ;
T:actual_range = -72.66724f, -24.35f ;
T:units = "degC" ;
T:add_offset = 0.f ;
T:scale_factor = 1.f ;
T:missing_value = -9.96921e+36f ;
..ÃæÎ¬..
data:
lon = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150,
160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290,
300, 310, 320, 330, 340, 350 ;
lat = 90, 80, 70, 60, 50, 40, 30, 20, 10, 0, -10, -20, -30, -40, -50, -60,
-70, -80, -90 ;
level = 1000, 850, 600, 400, 250, 150, 70, 30, 10 ;
}
|
¥ª¥ê¥¸¥Ê¥ë¤Î NCEP ¥Ç¡¼¥¿¤Ï¿åÊ¿¤Ë 2.5 ÅÙ¤Îʬ²òǽ¤Ç¤¢¤ë¤¬, ¤³¤³¤Ç¤ÏÁƤ¯¤·¤Æ¥Ç¡¼¥¿¥µ¥¤¥º¤ò²¡¤¨¤Æ¤¢¤ë. ±ôľÊý¸þ¤Ë¤â¥Ç¡¼¥¿¤ò´Ö°ú¤¤¤Æ¤¢¤ë. µ¤²¹ T ¤Ï·ÐÅÙ, °ÞÅÙ, °µÎϤΣ³¼¡¸µ¥Ç¡¼¥¿¤Ç, ¤â¤Ã¤È¤â¡Ö®¤¯¤Þ¤ï¤ë¡×¤Î¤Ï ·ÐÅÙ¼´¤Ç¤¢¤ë. ncdump ¤Î¼¡¸µ¤Îɽ¼¨¤Ï C ¸À¸ì¤Î¥¹¥¿¥¤¥ë¤Ç¤¢¤ë¤Î¤Ç, T(level, lat, lon) ¤Ç¤¢¤ë¤¬, Ruby ¤Î¿¼¡¸µ¥Ç¡¼¥¿¤Ç¤Ï ¤½¤ÎµÕ¤Ë lon, lat, level ¤Î½çÈ֤Ǽ¡¸µ¤òÊÂ¤Ù¤ë ¡Ê¤³¤ì¤Ï NArray ¤Î¥¹¥¿¥¤¥ë¤Ç¤¢¤ê, RubyNetCDF ¤ä GPhys Åù, Á´¤Æ¤Î¿¼¡¸µ¥Ç¡¼¥¿¥é¥¤¥Ö¥é¥ê¡¼¤¬½¾¤Ã¤Æ¤¤¤ë. ¤è¤Ã¤Æ, Fortran¤ÈƱ¤¸Ê¤ÙÊý¤Ç¤¢¤ë¤¬, ÇÛÎóź»ú¤Ï Ruby ¤Î Array ¥¯¥é¥¹¤Ë¹ç¤ï¤»¤Æ¤¢¤ê, ¾ï¤Ë¥¼¥í¤«¤é»Ï¤Þ¤ë¡Ë. ·ÐÅÙ, °ÞÅÙ, ¹âÅ٤γʻÒÅÀÃͤÏ, ¼¡¸µÌ¾¤ÈƱ¤¸Ì¾Á°¤ò»ý¤Ä°ì¼¡¸µÊÑ¿ô lon, lat, level ¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ë.
¾åµ¤Î NetCDF ¥Ç¡¼¥¿¤È´ðËÜŪ¤ËƱ¤¸ÆâÍÆ¤Î¤â¤Î¤ò GrADS ·Á¼°¤Ç¤âÍѰդ·¤Æ¤¢¤ë. ¤³¤ì¤â GPhys ¤ÎÇÛÉۥѥ屡¼¥¸¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë. GrADS ¤Î¾ì¹ç, ¥Æ¥¥¹¥È·Á¼°¤Î¥³¥ó¥È¥í¡¼¥ë¥Õ¥¡¥¤¥ë¤È, ¥Ð¥¤¥Ê¥ê¡¼¤Î¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Ëʬ¤«¤ì¤Æ¤¤¤ë. ¸å½Ò¤Î¤è¤¦¤ËÆÉ¤ß¹þ¤ß¤Î¤¿¤á¤Î¥Ö¡¼¥È¥¹¥È¥é¥Ã¥×¤Ë»È¤¦¤Î¤Ï¥³¥ó¥È¥í¡¼¥ë¥Õ¥¡ ¥¤¥ë¤Î¤Û¤¦¤Ç¤¢¤ë. ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤ÏƱ¤¸¥Ç¥£¥ì¥¯¥È¥ê¡¼¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¤ª¤¯É¬ÍפϤ¢¤ë¤¬, °Ê¸å¤Ï¥Õ¥¡¥¤¥ë̾¤Ï˺¤ì¤Æ¤¤¤¤.
¾åµ¤Î NetCDF ¥Ç¡¼¥¿¤È´ðËÜŪ¤ËƱ¤¸ÆâÍÆ¤Î¤â¤Î¤ò grib (ver.1) ·Á¼°¤Ç¤âÍѰդ·¤Æ¤¢¤ë. ¤³¤ì¤â GPhys ¤ÎÇÛÉۥѥ屡¼¥¸¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë. grib ·Á¼°¤ËÂбþ¤·¤Æ¤¤¤ë¤Î¤Ï GPhys 0.4.0 °Ê¹ß¤Ç¤¢¤ë. grib ver.2 ¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤Ê¤¤. ¼ÂºÝÌäÂê¤È¤·¤Æ¤Ï, º£¤Î¤È¤³¤í grib 2 ¤Ï¤¢¤Þ¤ê»È¤ï¤ì¤Æ¤ª¤é¤º, ¿¤¯¤Î¥½¥Õ¥È¤¬Âбþ¤·¤Æ¤Ê¤¤.
Áᮿޤò½ñ¤¤¤Æ¤ß¤è¤¦. GPhys ÇÛÉۥѥ屡¼¥¸¤Ë¤Ï, GPhys²Ä»ë²½ÍѤΠ¥°¥é¥Õ¥£¥Ã¥¯¥é¥¤¥Ö¥é¥ê¡¼ GGraph ¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¤Î¤Ç, ¤½¤ì¤òÍѤ¤¤ë¤³¤È¤Ë¤¹¤ë. GGraph ¤Ï¥â¥¸¥å¡¼¥ë¤È¤Ê¤Ã¤Æ¤ª¤ê, ÉÁ²è¥á¥½¥Ã¥É¤ò¥â¥¸¥å¡¼¥ë´Ø¿ô¤È¤·¤ÆÄó ¶¡¤¹¤ë. Î㤨¤Ð¥³¥ó¥¿¡¼¿Þ¤ò½ñ¤¯¥á¥½¥Ã¥É(¥â¥¸¥å¡¼¥ë´Ø¿ô)¤Ï GGraph::contour ¤Ç¤¢¤ë. ¤Ê¤ª, GPhys ¤â GGraph ¤â, ¾¤Î ÅÅǾ Ruby ¥é¥¤¥Ö¥é¥ê¡¼Æ±ÍÍ, NumRu ¤È¤¤¤¦¥â¥¸¥å¡¼¥ë¤ËÆþ¤ì¤Æ ̾Á°¶õ´Ö¤òÊݸ¤Æ¤¢¤ë. ¤è¤Ã¤Æ, ¥Õ¥ë¥Í¡¼¥à¤Ï NumRu::GPhys, NumRu::GGraph ¤Ê¤É¤È¤Ê¤ë.
GGraph¤Ë¤ª¤±¤ë£²¼¡¸µÉÁ²è¥á¥½¥Ã¥É(contour, tone) ¤Ç¤Ï, Í¿¤¨¤é¤ì¤¿¥Ç¡¼¥¿¤¬£³¼¡¸µ°Ê¾å¤Ê¤é, 3,4,..¼¡¸µÌܤˤĤ¤¤Æ¤Ï ºÇ½é¤Î³Ê»ÒÅÀ¤ò¼«Æ°Åª¤ËÁª¤Ö¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë. ½¾¤Ã¤Æ, °Ê²¼¤Î¥×¥í¥°¥é¥à¤Ï, 3¼¡¸µÌܤκǽé¤Î³Ê»ÒÅÀ¡áºÇ²¼ÁØ(1000hPa)¤Îµ¤²¹¤òɽ¼¨¤¹¤ë (¹ÔÈÖ¹æ¤ÏÀâÌÀ¤ÎÊØ¤Î¤¿¤á¤ËÉÕ¤±¤Æ¤¢¤ë. ¼ÂºÝ¤Ë¤Ï´Þ¤Þ¤ì¤Ê¤¤).
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.nc', 'T')
4: DCL.gropn(1)
5: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7)
6: GGraph.contour( gphys )
7: DCL.grcls
|
°Ê²¼¤Î¤è¤¦¤Ë¼Â¹Ô¤¹¤ë.
% ruby contour1000mb_1.rb
|
¤¹¤ë¤È, ¼¡¤Î¿Þ¤¬²èÌ̤Ëɽ¼¨¤µ¤ì¤ë.
¾åµ¥×¥í¥°¥é¥à¤ÎÂè1, 2¹ÔÌܤÏËè²ó¸Æ¤Ö¤ª¤Þ¤¸¤Ê¤¤¤Ç¤¢¤ë. ºÇ½é¤Îrequire "numru/ggraph" ¤ÏɬÍפʥ饤¥Ö¥é¥ê¡¼¤ò Á´¤Æ¥í¡¼¥É¤¹¤ë. ¼¡¤Îinclude NumRu ¤Ï¤·¤Ê¤¯¤Æ¤â¤è¤¤¤¬, ¤½¤Î¾ì¹ç GGraph¤ä DCL ¤Ï¤¹¤Ù¤Æ ¥Õ¥ë¥Í¡¼¥à, ¤Ä¤Þ¤ê NumRu::GGraph ¤ä NumRu::DCL ¤Ç¸Æ¤Ð¤Í¤Ð¤Ê¤é¤Ê¤¤.
Âè3¹ÔÌÜ gphys = GPhys::IO.open('T.jan.nc', 'T') ¤Ç¤Ï, ¥Õ¥¡¥¤¥ë T.jan.nc Ãæ¤ÎÊÑ¿ô T ¤ËÂФ·, GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ò¹½À®¤·, ÊÑ¿ô̾ gphys ¤ò³ä¤êÅö¤Æ¤Æ¤¤¤ë. GPhys::IO.open ¤Ï¥Õ¥¡¥¤¥ë¤Î¼ïÎà¤ò¼«Æ°È½Ê̤·, ¤½¤ì¤¾¤ì¤ËÂбþ¤·¤¿¥â¥¸¥å¡¼¥ë¤Ë½èÍý¤òÅꤲ¤ë. º£²ó¤Ï NetCDF ¤Ç¤¢¤ë¤¿¤á, ¼ÂºÝ¤Ë¤Ï GPhys::NetCDF_IO.open ¤¬¸Æ¤Ð¤ì¤ë. ¤³¤³¤Ç, ¥â¥¸¥å¡¼¥ë GPhys::NetCDF_IO ¤Ï NetCDF ¥Õ¥¡¥¤¥ë¤Î²ò¼á¤ò»Ê¤ë. ¥æ¡¼¥¶¡¼¤¬ÆÃ¤Ë»ØÄꤷ¤Ê¤¤¸Â¤ê, NetCDF¥æ¡¼¥¶¡¼¥º¥¬¥¤¥É¤Ë½¾¤Ã¤¿¥³¥ó¥Ù¥ó¥·¥ç¥ó²ò¼á¤¬¹Ô¤ï¤ì¤ë. ¨¤Á, ¼¡¸µÌ¾¡áÊÑ¿ô̾¤Î¥ë¡¼¥ë¤Ë§¤Ã¤ÆºÂɸÊÑ¿ô(lon, lat, level)¤â²ò¼á¤µ¤ì, GPhys ¥ª¥Ö¥¸¥§¥¯¥È (¤³¤³¤Ç¤ÏÊÑ¿ô̾gphys) Æâ¤Ë»²¾È¤¬ÊÝ»ý¤µ¤ì¤ë. ¥Ç¡¼¥¿·ç»¤Ë¤Ä¤¤¤Æ¤â²ò¼á¤¬¹Ô¤ï¤ì, °À valid_range ¤ä missing_value ¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç, ·ç»¤Î¸ºß¤ò¹Íθ¤¹¤ë. ¶ñÂÎŪ¤Ë¤ÏÃͤò¼è½Ð¤¹ºÝ¡Ê¸å½Ò¡Ë¤Ï·ç»ÃÍÉդΠNArray ¤¿¤ë NArrayMiss ¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬ÊÖ¤ë¤è¤¦¤Ë¤Ê¤ë.
Âè4¹ÔÌÜ DCL.gropn(1) ¤Ï, DCL ¤Î¥°¥é¥Õ¥£¥Ã¥¯ÁõÃÖ½é´ü²½¤Ç¤¢¤ë. °ú¿ô¤¬ 1 ¤Î¾ì¹ç, üËö²èÌ̤Ëɽ¼¨¤µ¤ì¤ë. Âè5¹ÔÌܤÏÄ̾ïɬÍפʤ¤¤¬, ¤³¤³¤Ç¤ÏÀ©¸æÊ¸»ú¤Î ²ò¼á¤òÍÞÀ©¤·(DCL.sgpset('lcntl', false) ¥¢¥ó¥À¡¼¥¹¥³¥¢¡¼ Åù¤¬ÆÃ¼ìʸ»ú¤È¤·¤Æ²ò¼á¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤¹¤ë), ºÂɸ¼´¤Ë¤Ä¤±¤ëʸ»ú¤ÎÂ礤µ¤ò 0.7 Çܤˤ·¤Æ¤¤¤ë (DCL.uzfact(0.7)).
Âè6¹ÔÌܤǤ¤¤è¤¤¤èÉÁ²è¤Ç¤¢¤ë. GGraph.contour(gphys) ¤Ï, °ú¿ô¤ËÍ¿¤¨¤é¤ì¤¿ GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥Ç¡¼¥¿¤òÅù¹âÀþɽ¼¨¤¹¤ë. Á°½Ò¤Î¤è¤¦¤Ë, £³¼¡¸µÌܰʹߤ˴ؤ·¤Æ¤Ï¼«Æ°Åª¤ËºÇ½é¤ÎÅÀ¤¬Áª¤Ð¤ì¤ë¤Î¤Ç, 1000 mb ¤Ë¤ª¤±¤ë¿åʿʬÉۤΥץí¥Ã¥È¤È¤Ê¤ë. 1000 mb ¤¬Áª¤Ð¤ì¤¿¤³¤È¤Ï, ¿Þ¤Î±¦¾å¤ÎÏȳ°¤Ëɽ¼¨¤µ¤ì¤¿ level=1000 milibar¤Îɽ¼¨¤«¤é¤ï¤«¤ë. ¿Þ¤«¤é¤ï¤«¤ë¤è¤¦¤Ë, GGraph.contour ¤Ï¼«Æ°Åª¤ËºÂɸ¼´Åù¤Î²ò¼á¤ò¹Ô¤¦¡Êx¼´, y¼´¤¬Àµ¤·¤¯½ñ¤«¤ì¤Æ¤¤¤ë¤³¤È¤ËÃí°Õ¡Ë. ¼Â¤Ï, Âè5¹ÔÌܤÇÀ©¸æÊ¸»ú²ò¼á¤òÍÞÀ©¤·¤¿¤Î¤Ï, ɽ¼¨¤µ¤ì¤ë x, y ¼´¤Îñ°Ì¤Ë ¥¢¥ó¥À¡¼¥¹¥³¥¢¡¼¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¢¤ë.
Âè7¹ÔÌÜ¤Ï DCL ¤Î½ªÎ»½èÍý¤Ç¤¢¤ë.
°Ê¾å, ɬ¤º¤·¤âɬÍפʤ¤Âè5¹ÔÌܤò½ü¤±¤Ð, Á´Éô¤Ç6¹Ô¤Ç¥Õ¥¡¥¤¥ë¤Î¥ª¡¼ ¥×¥ó¤«¤é²Ä»ë²½, ½ªÎ»½èÍý¤Þ¤Ç¤¬¹Ô¤¨¤ë. ¿Þ¤ò¥«¥¹¥¿¥Þ¥¤¥º¤¹¤ëÊýË¡¤Ï¸å¤Ç½Ò¤Ù¤ë. ¤½¤ÎºÝ, ¥×¥í¥°¥é¥à¤¬µÞ¤ËŤ¯¤Ê¤Ã¤¿¤ê¤·¤Ê¤¤¤Î¤¬¥Ý¥¤¥ó¥È¤Ç¤¢¤ë.
Ʊ¤¸Í×ÎΤÇÀÞ¤ìÀþ¤òÉÁ¤¤¤Æ¤ß¤è¤¦. ¾å¤Î¥×¥í¥°¥é¥à¤Ç 6 ¹ÔÌܤΠGGraph.contour(gphys) ¤ò GGraph.line(gphys) ¤ËÊѤ¨¤ì¤Ð¤è¤¤. ⤷¤½¤ì¤À¤È£²¼¡¸µÌÜ(°ÞÅÙ)¤Ë´Ø¤·, ºÇ½é¤Î³Ê»ÒÅÀ ¡Ê¤Ä¤Þ¤êË̶ˡˤ¬Áª¤Ð¤ì¤Æ¤·¤Þ¤¤ÌÌÇò¤¯¤Ê¤¤. ¤½¤³¤Ç, ÆüËÜÉÕ¶á¤Î ±ôľ¥×¥í¥Õ¥¡¥¤¥ë¤òÉÁ¤¤¤Æ¤ß¤è¤¦. GPhys¤Î¥á¥½¥Ã¥É cut ¤Ï¼Â¶õ´Ö¤Ç¤ÎÀÚ¤ê½Ð¤·¤ò¹Ô¤¦. ¤³¤ì¤Ï¼¡¸µ¤ò½çÈ֤˻ØÄꤹ¤ëÊýË¡¤È, ¼¡¸µ¤ò̾Á°¤Ç»ØÄꤹ¤ëÊýË¡¤Î£²Ä̤ê¤Î»È¤¤Êý¤¬¤Ç¤¤ë. °Ê²¼¤Î2¹Ô¤ÏÁ´¤¯Æ±¤¸·ë²Ì¤È¤Ê¤ë.
gp_jpn = gphys.cut(135,35,true)
gp_jpn = gphys.cut('lon'=>135,'lat'=>35)
|
ºÇ½é¤Î¾ì¹ç¤Î°ú¿ô¤Î»ØÄêÊýË¡¤Ï NArray ¤Î [] ¥á¥½¥Ã¥É¤ÈƱÍͤǤ¢¤ë. ½¾¤Ã¤Æ, ̾Á°¤Ç»ØÄꤷ¤¿¾ì¹ç¤ÈƱÍͤˣ²¼¡¸µ°Ê¾åǤ°Õ¤Î¼¡¸µ¿ô(rank)¤Î¥Ç¡¼¥¿ ¤ËÂбþ¤¹¤ë¤Ë¤Ï, ²¼µ¤Î¤è¤¦¤Ë true ¤Ç¤Ê¤¯ false ¤Ë¤è¤ë¡Ö¥é¥Ð¡¼¼¡¸µ¡×¤ò»È¤¨¤ÐÎɤ¤. ¥é¥Ð¡¼¼¡¸µ¤ÏǤ°Õ¸Ä¤Î true (Á´ÈϰϤλØÄê) ¤ËÁêÅö¤¹¤ë.
gp_jpn = gphys.cut(135,35,false) |
¡Ê;Ã̤À¤¬ yorick ¤È¤¤¤¦¸À¸ì¤Ç¤Ï¥é¥Ð¡¼¼¡¸µ¤Ï .. ¤Èɽ¤»¤ë. ¤Ä¤Þ¤ê (135,35,..) ¤Ê¤É. ¤³¤ÎÊý¤¬¸«¤¿Ìܤ狼¤ê¤ä¤¹¤¤¤¬, Ruby ¤Ç¤Ï .. ¤òÆÈΩ¤µ¤»¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¤Î¤Ç»È¤¨¤Ê¤¤. ¡Ë
¤Ç¤Ï, ¿Þ¤òÉÁ¤¤¤Æ¤ß¤è¤¦.
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.nc', 'T')
4: DCL.gropn(1)
5: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7)
6: GGraph.line( gphys.cut(135,35,false) )
7: DCL.grcls
|
·ë²Ì¤Ï¤³¤¦¤Ê¤ë¡§
±¦¾åÏȳ°¤Ë¤Ï, "lon=130.0 degrees_east", "lat=40.0 degress_north" ¤Èɽ ¼¨¤µ¤ì¤ë. cut ¤Ï°ìÈֶᤤ³Ê»ÒÅÀ¤òÁª¤Ö¤è¤¦¤Ë¤Ê¤Ã¤Æ¤ª¤ê, ¤Á¤ç¤¦¤É¿¿¤óÃæ ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¤è¤ê³Ê»ÒÅÀÈÖ¹æ¤Î¾®¤µ¤¤Êý¤¬Áª¤Ð¤ì¤ë. ·ÐÅÙ¤ÏÅ좪À¾, °ÞÅÙ¤ÏËÌ¢ªÆî¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç, ¤³¤Î¤è¤¦¤Ê°ÞÅÙ¡¦·ÐÅÙ¤¬Áª¤Ð¤ì¤ë¤Î¤Ç¤¢¤ë.
¤µ¤Æ, ±ôľºÂɸ¤Ç¤¢¤ë°µÎϤ¬²£¼´¤ËÍè¤ë¤È, ¤É¤¦¤â±ôľ¥×¥í¥Õ¥¡¥¤¥ë¤Ç¤¢¤ë¤è¤¦¤Êµ¤¤¬¤·¤Ê¤¤. ¤½¤³¤Ç, ½Ä¼´¤È²£¼´¤òÆþ¤ìÂØ¤¨, °µÎϼ´¤ÏÂпô¥¹¥±¡¼¥ë¤Çɽ¼¨¤·¤Æ¤ß¤è¤¦. ¤Ä¤¤¤Ç¤Ë, Ïȳ°±¦¾å¤Î¾ðÊó¤¬ÀÚ¤ì¤Ê¤¤¤è¤¦Á´²èÌÌɽ¼¨¤Ë¤·¤è¤¦ (DCL.sgpset('lfull',true)).
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.nc', 'T')
4: DCL.gropn(1)
5: DCL.sgpset('isub', 96) # control character of subscription: '_' --> '`'
6: DCL.sgpset('lfull',true) ; DCL.uzfact(0.6)
7: GGraph.set_fig( 'itr'=> 2, 'viewport'=>[0.25,0.7,0.15,0.6] )
8: GGraph.line( gphys.cut(135,35,false), true, 'exchange'=>true )
9: DCL.grcls
|
¾å¤Î¥×¥í¥°¥é¥à¤Ç¤Ï, ½Ä¼´¤òÂпô¥¹¥±¡¼¥ê¥ó¥°¤Ë¤¹¤ë¤¿¤á, Âè6¹ÔÌÜ¤Ç GGraph.fig ¤Î¥ª¥×¥·¥ç¥ó itr ¤òÀßÄꤷ¤Æ¤¤¤ë (GGraph¥Þ¥Ë¥å¥¢¥ë»²¾È). ¤³¤Î¾ì¹ç, ¥³¥ó¥È¥í¡¼¥ëʸ»ú¤ò̵¸ú¤Ë¤¹¤ë¤È, ¼´¤Ë¤Ä¤±¤ë¥é¥Ù¥ë¤¬¤¢¤Þ¤êÈþ¤·¤¯¤Ê¤¯¤Ê¤ë¤Î¤Ç, DCL.sgpset('lcntl', false) ¤Ç̵¸ú¤Ë¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯, 5¹ÔÌܤΠDCL.sgpset('isub', 96) ¤Ç, ²¼¤Ä¤¤ò¼¨¤¹»ú¤ò '_' ¤«¤é '`' ¤ËÊѹ¹¤·¤¿. ¤µ¤é¤Ë, Á´²èÌÌɽ¼¨¤Ë¸Æ±þ¤·¤Æ, viewport ¤òÊѤ¨¤Æ¤¤¤ë¡Ê¥Ç¥Õ¥©¥ë¥ÈÃÍ¤Ï [0.2,0.8,0.2,0.8]¡Ë. GGraph.fig ¤Ï¿·¤·¤¤¿Þ¤ÎÏȤòÄêµÁ¤¹¤ë¥á¥½¥Ã¥É¤Ç¤¢¤ê, GGraph.line ¤ÎÂ裲°ú¿ô¤¬ true ¤Î¤È¤¸Æ¤Ð¤ì¤ë. Â裲°ú¿ô¤Ï¾Êά²Äǽ¤Ç true ¤Ï¥Ç¥Õ¥©¥ë¥ÈÃͤǤ¢¤ë. Âè7¹ÔÌÜ¤Ï GGraph.line ¤ò¸Æ¤ó¤Ç¤¤¤ë¤¬, GGraph.line ¤Î¥ª¥×¥·¥ç¥ó¤ÏÂ裳°ú ¿ô(°Ê¹ß)¤Ç¤¢¤ë¤Î¤Ç, Âè2°ú¿ô¤Î true ¤òÍÛ¤ËÀßÄꤷ¤Æ¤¤¤ë¡Ê´Ö°ã¤¨¤ä¤¹¤¤¤Î ¤ÇÂè2°ú¿ô¤¬ true/false °Ê³°¤Ê¤éÎã³°¤Ë¤è¤ê¥æ¡¼¥¶¡¼¤ËÄÌÃΤ¹¤ë¡Ë. ¤½¤·¤Æ, ¥ª¥×¥·¥ç¥ó¤È¤·¤Æ 'exchange'=>true ¤ò»ØÄꤷ¤Æ¤¤¤ë. ¤³¤ì¤Ë¤è¤ê, ¥Ç¥Õ¥©¥ë¥È¤ÈµÕ¤Ë, ºÂɸ¤ò½Ä¼´, ¥Ç¡¼¥¿¤ò²£¼´¤Ë½ñ¤¯¤è¤¦¤Ë¤Ê¤ë. ¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Ï¤Þ¤¿¸å¤Ç²òÀ⤹¤ë.
GPhys ¤Ç¤Ï NetCDF, GrADS, grib ·Á¼°¤Î¥Õ¥¡¥¤¥ë¤òƱ¤¸¤è¤¦¤Ë
°·¤¦¤³¤È¤¬½ÐÍè¤ë. ⤷º£¤Î¤È¤³¤í GrADS ·Á¼°¤Ç¤Î½ñ¤½Ð¤·¤Ï¥µ¥Ý¡¼¥È¤·¤Ê¤¤.
¥Õ¥¡¥¤¥ë·Á¼°¤ÎȽÊÌ
GPhys::IO.open(file, varname) ¤Ë¤ª¤¤¤Æ, file ¤Ïʸ»úÎó¤Çɽ¤·¤¿¥Ñ¥¹, ¤Þ¤¿¤Ï NumRu::NetCDF Åù¥Õ¥¡¥¤¥ë¤òľÀÜÂåɽ¤¹¤ë¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò¼è¤ì¤ë. ¥Ñ¥¹¤Î¾ì¹ç, ¥Õ¥¡¥¤¥ë¤Î¼ïÎà¤Ï¼«Æ°Åª¤ËȽÊ̤µ¤ì¤ë. ¤½¤Î¥ë¡¼¥ë¤Ï²¼µ¤ÎÄ̤ê¤Ç¤¢¤ë.
¥Õ¥¡¥¤¥ë·Á¼°¤òÍۤ˻ØÄꤷ¤ÆÆÉ¤ß¹þ¤à¤³¤È¤â¤Ç¤¤ë. ¤½¤ì¤¾¤ì,
GPhys::NetCDF_IO.open, GPhys::GrADS_IO.open,
GPhys::Grib_IO.open ¤òÍѤ¤¤ë.
GrADS,grib¥Õ¥¡¥¤¥ëÉÁ²èÎã
¼¡¤Î¥×¥í¥°¥é¥à¤Ï, ¾åµ¤Î contour1000mb_1.rb ¤Î3¹ÔÌܤǥե¡¥¤¥ë̾¤À¤±¤ò T.jan.nc ¤«¤é T.jan.ctl ¤ËÊѤ¨¤¿¤À¤±¤Î¤â¤Î¤Ç¤¢¤ë. ¤½¤ì°Ê³°¤ÏÁ´¤¯Æ±¤¸¥×¥í¥°¥é¥à¤Ç GrADS ·Á¼°¤Î¥Ç¡¼¥¿¤òÉÁ²è¤Ç¤¤ë.
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.ctl', 'T')
4: DCL.gropn(1)
5: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7)
6: GGraph.contour( gphys )
7: DCL.grcls
|
ƱÍͤË, ¼¡¤Î¥×¥í¥°¥é¥à¤Ï grib ¥Õ¥¡¥¤¥ë¤Î¥Ç¡¼¥¿¤òÉÁ²è¤¹¤ë. ¼Â¹Ô¤Ë¤Ï, GPhys 0.4.0 °Ê¾å¤¬É¬ÍפǤ¢¤ë.
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.grib', 'TMP')
4: DCL.gropn(1)
5: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7)
6: GGraph.contour( gphys )
7: DCL.grcls
|
¾å¤Ç¤Ï, ÊÑ¿ô̾¤¬¤³¤ì¤Þ¤Ç¤Î 'T' ¤Ç¤Ê¤¯ 'TMP' ¤È¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ËÃí°Õ.
grib¥Õ¥¡¥¤¥ëÃæ¤Ç¤ÏÊÑ¿ô¤Ï̾Á°¤ò»ý¤¿¤º, ÊÑ¿ô¤Î¼ïÎà¤Ë±þ¤¸¤Æ·è¤Þ¤Ã¤¿ÈÖ¹æ
¤¬¤¢¤ë¤À¤±¤Ç¤¢¤ë. GPhys::Grib_IO ¤Ë¤ª¤¤¤Æ¤Ï¤½¤ÎÈÖ¹æ¤Ë
wgrib
¤Ç»È¤ï¤ì¤Æ¤¤¤ë̾Á°¤ò³ä¤êÅö¤Æ¤Æ¤¤¤ë. ¤½¤ì¤¬, µ¤²¹¤Ë´Ø¤·¤Æ¤Ï
'TMP' ¤Ê¤Î¤Ç¤¢¤ë. ⤷,
wgrib ¤Ç¤ÏƱ¤¸ÊÑ¿ô¤Ç¤â°Û¤Ê¤ëÊ£¿ô¤Î̾Á°¤¬»È¤ï¤ì¤Æ¤¤¤ë¤³¤È¤¬¤¢¤ë¤Î¤Ç,
wgrib ¥³¥Þ¥ó¥É¤Î¼ÂºÝ¤Î½ÐÎÏ¤È GPhys::Grib_IO
¤Ë¤ª¤±¤ëÊÑ¿ô̾¤Ïɬ¤º¤·¤â°ìÃפ·¤Ê¤¤.
¤Ç¤Ï¤É¤¦¤¹¤ì¤ÐÎɤ¤¤«¤Ë¤Ä¤¤¤Æ¤Ï¼¡¤ò»²¾È¤Î¤³¤È.
¥Õ¥¡¥¤¥ëÃæ¤ÎÊÑ¿ô̾¤ÎÄ´¤ÙÊý
NetCDF¥Õ¥¡¥¤¥ë¤Ç¤¢¤ì¤Ð, ¾åµ¤Î¤è¤¦¤Ë¥³¥Þ¥ó¥É¥é¥¤¥ó¤Ç ncdump ¥³¥Þ¥ó¥É¤ÇÄ´¤Ù¤é¤ì¤ë. GrADS¥Õ¥¡¥¤¥ë¤Ç¤¢¤ì¤Ð, ¥³¥ó¥È¥í¡¼¥ë¥Õ¥¡¥¤¥ë¤Ï¥Æ¥¥¹¥È¤Ê¤Î¤Ç¤½¤ì¤ò¸«¤ì¤Ð¤è¤¤. ¤·¤«¤·, GPhys ¤òÍѤ¤¤ì¤Ð, ¥Õ¥¡¥¤¥ë¤Î¼ïÎà¤Ë°Í¸¤»¤ºÆ±¤¸ÊýË¡¤ÇÄ´¤Ù¤é¤ì¤ë.
1: require "numru/gphys"
2: p NumRu::GPhys::IO.var_names('T.jan.grib')
3: p NumRu::GPhys::IO.var_names('T.jan.ctl')
4: p NumRu::GPhys::IO.var_names('T.jan.nc')
|
·ë²Ì¤Ï²¼µ¤ÎÄ̤ê¤Ç¤¢¤ë.
% ruby inspect_varnames.rb
["TMP"]
["T"]
["lon", "lat", "level", "T"]
|
grib¥Õ¥¡¥¤¥ë¤Ë¤Ï "TMP", GrADS, NetCDF ¥Õ¥¡¥¤¥ë¤Ë¤Ï "T" ¤È¤¤¤¦ÊÑ¿ô¤¬¤¢¤ë¤³¤È¤¬¤ï¤«¤ë. NetCDF¥Õ¥¡¥¤¥ë¤Ç¤Ï¾¤Ë¡¡"lon", "lat", "level" ¤È¤¤¤¦ÊÑ¿ô̾¤â¤Ç¤ë¤¬, NetCDF ¤Ç¤Ï¤³¤ì¤éºÂɸÊÑ¿ô¤â¼«Ê¬¼«¿È¤òºÂɸÊÑ¿ô¤È¤¹¤ë GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ GPhys::IO.open ¤Ç³«¤¯¤³¤È¤¬¤Ç¤¤ë. ¤·¤«¤·, ¤³¤ì¤À¤±¤Î¤¿¤á¤Ë¥×¥í¥°¥é¥à¤ò¥Õ¥¡¥¤¥ë¤Ë¤¹¤ë¤Î¤ÏÌÌÅݤÀ¤È»×¤ï¤ì¤è¤¦. ¼¡¤Ë, ÂÐÏÃŪ¤ÊÍøÍÑË¡¤ò¾Ò²ð¤¹¤ë.
Ruby ¤Ëɸ½àźÉդΠirb ¤È¤¤¤¦¥³¥Þ¥ó¥É¤Ï, ÂÐÏÃŪ¤Ê¥»¥Ã¥·¥ç¥ó¤Ë¤ª¤¤¤Æ ruby ¤Î¥×¥í¥°¥é¥à¤ò¹Ôñ°Ì¤Ç²ò¼á¤·¼Â¹Ô¤¹¤ë shell ¤Î¤è¤¦¤Ê¤â¤Î¤Ç¤¢¤ë. ¾¤Ë, emacs ¾å¤Ç¼Â¹Ô¤¹¤ë irb-shell ¤È¤¤¤¦¤â¤Î¤â¤¢¤ë. °Ê²¼¤Ï, ¾åµ¤ÎÊÑ¿ô̾Ĵ¤Ù¤ò irb ¤Ç¹Ô¤Ã¤¿·ë²Ì¤ò¥«¥Ã¥È¥¢¥ó¥É¥Ú¡¼¥¹¥È¤·¤¿¤â¤Î¤Ç¤¢¤ë. irb(main):001:0> Åù¤Ï irb ¤Î¥×¥í¥ó¥×¥È, ¡É=>¡É °Ê²¼¤Ï³Æ¹Ô¤Î¼Â¹Ô·ë²Ì¤Î½ÐÎϤǤ¢¤ë.
% irb irb(main):001:0> require "numru/gphys" => true irb(main):002:0> include NumRu => Object irb(main):003:0> GPhys::IO.var_names('T.jan.grib') => ["TMP"] irb(main):004:0> GPhys::IO.var_names('T.jan.ctl') => ["T"] irb(main):005:0> GPhys::IO.var_names('T.jan.nc') => ["lon", "lat", "level", "T"] |
Âè1¹ÔÌÜ¤ÎÆþÎϤÏ, ¤³¤ì¤Þ¤Ç¤Î require "numru/ggraph" ¤È°ã¤¤, require "numru/gphs" ¤È¤Ê¤Ã¤Æ¤¤¤ë. ¤³¤¦¤¹¤ë¤È GPhys ËÜÂΤÀ¤±¤¬ÆÉ¤ß¹þ¤Þ¤ì, ¥°¥é¥Õ¥£¥Ã¥¯¥é¥¤¥Ö¥é¥ê¡¼ GGraph ¤ÏÆÉ¤ß¹þ¤Þ¤ì¤Ê¤¤. (ÌÞÏÀ¿Þ¤ò½ñ¤«¤Ê¤¤¾ì¹ç¤Ç¤â require "numru/ggraph" ¤Ç¹½¤ï¤Ê¤¤¤¬, ¤³¤Î¤Û¤¦¤¬¼ã´³Î©¤Á¾å¤²¤¬Áᤤ¤Ç¤¢¤í¤¦.)
irb ¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥³¥Þ¥ó¥É¤Î¼Â¹Ô·ë²Ì¤ò p ¤Çɽ¼¨¤¹¤ë¤Î¤Ç,
¾åµ¤Î¥×¥í¥°¥é¥à¤È°Û¤Ê¤ê,
ÍÛ¤Ë¤Ï p ¤ò¤Ä¤±¤Æ¤Ê¤¤.
¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÍøÍÑ(1)
irb ¤Î¥»¥Ã¥·¥ç¥ó³«»Ï»þ¤ËËè²ó require "numru/gphys", include NumRu ¤Ê¤É¤Î¡Ö¤ª¤Þ¤¸¤Ê¤¤¡×¤ò¸Æ¤Ö¤Î¤ÏÌÌÅݤʤΤÇ, ¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÍøÍѤ·¤Æ¼«Æ°²½¤¹¤ë¤ÈÎɤ¤.
É®¼Ô¤Ï£²¤ÎÊýË¡¤ò¼è¤Ã¤Æ¤¤¤ë. °Ê²¼¤ËξÊý¤Î¶ñÂÎÎã¤ò¤·¤á¤¹.
GPhys ¤ÏÍøÍѤ¹¤ë¤¬, GGraph ¤ÏÍøÍѤ·¤Ê¤¤¾ì¹ç.
% cat ~/.irbrc require "numru/gphys" include NumRu % irb irb(main):001:0> GPhys::IO.var_names('T.jan.grib') => ["TMP"] irb(main):002:0> GPhys::IO.var_names('T.jan.ctl') => ["T"] irb(main):003:0> GPhys::IO.var_names('T.jan.nc') => ["lon", "lat", "level", "T"] |
GGraph ¤âÍøÍѤ¹¤ë¾ì¹ç¤ÎÎã.
% cat ~/.irbrc
require "numru/ggraph"
include NumRu
include GGraph
DCL.swpset('iwidth',700) # image width
DCL.swpset('iheight',700) # image height
DCL.swpset('lwait',false) # don't wait mouse click to show the next page
DCL.gropn(1)
DCL.sgpset('isub', 96) # control character of subscription: '_' --> '`'
DCL.sgpset('lfprop',true) # to use the propotional font
|
¤³¤Î¤è¤¦¤Ë, require "numru/gphys", include NumRu ¤Ë²Ã¤¨¤Æ, ºî¿Þ¤ò¤¹¤ë¾å¤Ç¶¦Ä̤˸ƤÖÌ¿Îá¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤ª¤¯¤ÈÎɤ¤. ¤Ê¤ª, ¾å¤Ç¤Ï²èÌ̤Υǥե©¥ë¥È¥µ¥¤¥º¤ò 700¡ß700 ¤Ë¤·, ÉÁ²è»þ¤ÎÂÔ¤Á¤ò¤Ê¤¯¤·¤Æ¥Þ¥¦¥¹¥¯¥ê¥Ã¥¯¤Ê¤·¤Ç¼¡¤Î¥Ú¡¼¥¸¤¬É½¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤·, ¤·¤¿¤Ä¤Åº»ú¤òɽ¤¹¤¿¤á¤Î¥³¥ó¥È¥í¡¼¥ëʸ»ú¤ò _ ¤«¤é ` ¤ËÊѹ¹¤¹¤ë¤Ê¤É¤·¤Æ¤¤¤ë. ¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤µ¤¨ÀßÄꤷ¤Æ¤ª¤±¤Ð, ¼¡¤Î¤è¤¦¤Ë irb µ¯Æ°¸å¤Ë£²¹ÔÆþÎϤ¹¤ë¤À¤±¤Ç¿Þ¤¬½Ð¤»¤ë. ¤Ê¤ª, html ¤ÎÅÔ¹ç¾å, ¤«¤®³ç¸Ì¤ÏÁ´³Ñ¤Ë¤·¤Æ¤¢¤ë.
% irb *** MESSAGE (SWDOPN) *** GRPH1 : STARTED / IWS = 1. irb(main):001:0> gphys = GPhys::IO.open('T.jan.nc', 'T') => <GPhys grid=<3D grid <axis pos=<'lon' in 'T.jan.nc' sfloat[36]>> <axis pos=<'lat' in 'T.jan.nc' sfloat[19]>> <axis pos=<'level' in 'T.jan.nc' sfloat[9]>>> data=<'T' in 'T.jan.nc' sfloat[36, 19, 9]>> irb(main):002:0> contour( gphys.mean(0) ) => nil |
¤³¤³¤Ç, gphys = GPhys::IO.open('T.jan.nc', 'T') ¤Î·ë²Ì¤Î½ÐÎϤθ«Êý¤Ï¸å¤Ç²òÀ⤹¤ë. 2¹ÔÌÜ¤ÎÆþÎϤˤª¤±¤ë mean(0) ¤ÏºÇ½é¤Î¼¡¸µ(¡á·ÐÅÙ)¤Ë´Ø¤¹¤ëÊ¿¶Ñ¤Ç¤¢¤ë. ¾Ü¤·¤¯¤Ï¤³¤Á¤é¤ò»²¾È¤Î¤³¤È.
¾åµ¤Î irb ¥»¥Ã¥·¥ç¥ó¼Â¹Ô·ë²Ì ²¼µ¤Î¤è¤¦¤Ë, irb ¤Î¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤È¤·¤Æ¤Ïǧ¼±¤µ¤ì¤Ê¤¤
̾Á°¤Î¥Õ¥¡¥¤¥ë¤Ë¼Â¹Ô¤¹¤ë¥³¡¼¥É¤ò½ñ¤¥¨¥ê¥¢¥¹¤Çµ¯Æ°¤¹¤ë¤è¤¦¤Ë¤¹¤ë.
°Ê²¼¤Î alias ¤Ï .cshrc ¤Ê¤É¤Ë½ñ¤¹þ¤ó¤Ç¤ª¤¯¤ÈÎɤ¤.

.irbrc ¤òÍøÍѤ·¤Ê¤¤Îã (ÊýË¡£²)
% alias irb_ggraph 'irb -r ~/.irbrc_ggraph' % cat ~/.irbrc_ggraph.rb require "numru/ggraph" include NumRu include GGraph DCL.swpset('iwidth',700) # image width DCL.swpset('iheight',700) # image height DCL.swpset('lwait',false) # don't wait mouse click to show the next page DCL.gropn(1) DCL.sgpset('isub', 96) # control character of subscription: '_' --> '`' DCL.sgpset('lfprop',true) # to use the propotional font |
¤³¤Î¤è¤¦¤Ë¤¹¤ë¤È, GGraph ¤Î¥»¥Ã¥·¥ç¥óÍѤΠirb ¤¬ irb_ggraph ¤È¤¤¤¦Ì¾Á°¤ÇÀßÄꤵ¤ì¤ë. ¤ä¤Ï¤ê²¼µ¤Î¤è¤¦¤Ë2¹Ô¤Çºî¿Þ¤Ç¤¤ë.
% irb_ggraph *** MESSAGE (SWDOPN) *** GRPH1 : STARTED / IWS = 1. irb(main):001:0> gphys = GPhys::IO.open('T.jan.nc', 'T') => <GPhys grid=<3D grid <axis pos=<'lon' in 'T.jan.nc' sfloat[36]>> <axis pos=<'lat' in 'T.jan.nc' sfloat[19]>> <axis pos=<'level' in 'T.jan.nc' sfloat[9]>>> data=<'T' in 'T.jan.nc' sfloat[36, 19, 9]>> irb(main):002:0> contour( gphys.mean(0) ) => nil |
É®¼Ô¤Ï¤³¤ÎÊýË¡¤ò°¦ÍѤ·¤Æ¤¤¤ë.
¿Þ¤ò½ñ¤«¤º¤Ë¥Ç¡¼¥¿¤ÎÃæ¿È¤ò´Êñ¤ËÄ´¤Ù¤ëÊýË¡¤òÀâÌÀ¤¹¤ë. ¾å¤Ç¾Ò²ð¤·¤¿ Ruby ¤ÎÂÐÏÃ¥·¥§¥ë irb ¤ò»È¤¦¤³¤È¤Ë¤·¤è¤¦. ¥Á¥å¡¼¥È¥ê¥¢¥ë¤È¤·¤Æ¤ÎÈÆÍÑÀ¤Î¤¿¤á, ¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ï»È¤ï¤Ê¤¤¤â¤Î¤È¤¹¤ë. »È¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ï ºÇ½é¤Î¿ô¹Ô¤òŬµ¹¾Êά¤¹¤ì¤ÐÎɤ¤. °Ê²¼¤Ï kterm ¤Î²èÌ̤ò¥«¥Ã¥È¥¢¥ó¥É¥Ú¡¼¥¹¥È¤·¤¿¤â¤Î¤Ç¤¢¤ë¤¬, html ¤ÎÅÔ¹ç¾å, ¤«¤®³ç¸Ì¤ÏÁ´³Ñ¤Ë¤·¤Æ¤¢¤ë.
% irb irb(main):001:0> require "numru/gphys" => true irb(main):002:0> include NumRu => Object irb(main):003:0> T ¢« ¤³¤³¤Ç¤Ï T ¤ÈÆþ¤ì¤Æ¥¿¥Ö¤ò£²²óÆþÎÏ (²¼¤Î¤è¤¦¤Ë¥Õ¥¡¥¤¥ë̾¤¬½Ð¤Ê¤¤¥±¡¼¥¹¤â¤¢¤ë) T.jan.ctl T.jan.dat T.jan.grib T.jan.nc ToDo irb(main):003:0> GPhys::IO.var_names('T.jan.nc') # for GPhys >= 0.4.0 => ["lon", "lat", "level", "T"] irb(main):004:0> gphys = GPhys::IO.open('T.jan.nc', 'T') => <GPhys grid=<3D grid <axis pos=<'lon' in 'T.jan.nc' sfloat[36]>> <axis pos=<'lat' in 'T.jan.nc' sfloat[19]>> <axis pos=<'level' in 'T.jan.nc' sfloat[9]>>> data=<'T' in 'T.jan.nc' sfloat[36, 19, 9]>> irb(main):005:0> |
irb ¤Ï³Æ¹Ô¤ò¼Â¹Ô¤·¤¿·ë²Ì¤ò, ¤ªÇ¤¤»É½¼¨´Ø¿ô p ¤ò»È¤Ã¤ÆÉ¸½à½ÐÎϤ˽ÐÎϤ¹¤ë. p ¤Ë¤è¤ëɽ¼¨¤Ïɬ¤º¤·¤âåºÎï¤È¤Ï¸Â¤é¤Ê¤¤¤¬, ÊØÍø¤Ç¤¢¤ë. 1,2¹ÔÌÜ¤ÎÆþÎÏ(001,002)¤Ï¤¤¤Ä¤â¤Î¤ª¤Þ¤¸¤Ê¤¤¤Ç¤¢¤ë. 3¹ÔÌÜ¤Ç¤Ï T ¤Ë³¤¤¤Æ TAB ¥¡¼¤ò2²óÆþÎϤ·¤Æ¤ß¤è¤¦. ¿¤¯¤Î¥±¡¼¥¹¤Ç T ¤«¤é»Ï¤Þ¤ë¥Õ¥¡¥¤¥ë̾¤Î¥ê¥¹¥È¤¬É½¼¨¤µ¤ì¤ë¤Ï¤º¤Ç¤¢¤ë. ¤³¤ì¤Ï¶²¤é¤¯ irb ¼«ÂΤε¡Ç½¤Ç¤Ê¤¯, ¥¡¼ÆþÎϤò»Ê¤ë readline ¤È¤¤¤¦¥é¥¤¥Ö¥é¥ê¡¼¤Îµ¡Ç½¤Ê¤Î¤Ç, ¤³¤¦¤Ê¤é¤Ê¤¤¥±¡¼¥¹¤â¤¢¤ë. ³¤¤¤Æ¤ä¤êľ¤·¤Ë¤Ê¤ë¼ÂºÝ¤Î3¹ÔÌÜ¤ÎÆþÎÏ (£²ÅÙÌܤÎ003) ¤Ï, GPhys 0.4.0 ¤Ç¥µ¥Ý¡¼¥È¤µ¤ì¤¿´Ø¿ô GPhys::IO.var_names ¤òÍѤ¤¤Æ¥Õ¥¡¥¤¥ëÃæ¤Î GPhys ²½²Äǽ¤ÊÊÑ¿ô̾¤òɽ¼¨¤¹¤ë. ¤½¤·¤Æ£´¹ÔÌÜ¤ÎÆþÎϤǤÏÊÑ¿ô 'T' ¤Ë´Ø¤· GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤¹¤ë (gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')). ¤½¤Î·ë²Ì¤¬ p ¤Çɽ¼¨¤µ¤ì¤¿¤â¤Î¤Ï£´¹Ô¤Ë¤ï¤¿¤Ã¤Æ¤¤¤ë. ¾¯¤·¸«¤Ë¤¯¤¤¤¬, lon, lat, level ¤Î£³¼¡¸µ¥Ç¡¼¥¿ T ¤È¤Ê¤Ã¤Æ¤ª¤ê, ¤½¤ì¤¾¤ì¤¬¥Õ¥¡¥¤¥ë T.jan.nc ¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬¸«¤Æ¼è¤ì¤ë. ¿ôÃÍ·¿¤ä³Æ¼¡¸µ¤ÎŤµ¤â ɽ¼¨¤µ¤ì¤Æ¤¤¤ë. ¼¡¸µ¤ÎʤÙÊý¤Ï Fortran ¤ÈƱÍͤÇ, ¡Ö°ìÈÖ®¤¯¤Þ¤ï¤ë¡×¼¡¸µ¤¬ºÇ½é¤ËÍè¤ë(¤³¤³¤ò»²¾È).
¤Ç¤Ï, ¼¡¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤è¤¦.
1: require "numru/gphys"
2: include NumRu
3: p gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
4: p 'name = '+gphys.name, 'rank:',gphys.rank, 'shape:', gphys.shape
5: print '[1st dim] name:', gphys.coord(0).name,
6: ' long_name:',gphys.coord(0).get_att('long_name'),
7: ' units:',gphys.coord(0).get_att('units'),
8: " min,max:#{gphys.coord(0).min},#{gphys.coord(0).max}\n"
9: prs = gphys.coord(2).val
10: t_jpn = gphys.cut(135,35,true).val
11: print "\n#{gphys.coord(0).name}\t#{gphys.name}\n"
12: for i in 0...prs.length do
13: print prs[i], "\t", t_jpn[i], "\n"
14:end
|
º£ÅÙ¤Ï irb ¤ò»È¤ï¤Ê¤¤¤Î¤Ç p ¤ÏÍۤ˸ƤФʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤ (3¹ÔÌÜ etc). °Ê²¼¤Ë¼Â¹Ô·ë²Ì¤ò¼¨¤¹.
% ruby inspect.rb
<GPhys grid=<3D grid <axis pos=<'lon' in 'T.jan.nc' sfloat[36]>>
<axis pos=<'lat' in 'T.jan.nc' sfloat[19]>>
<axis pos=<'level' in 'T.jan.nc' sfloat[9]>>>
data=<'T' in 'T.jan.nc' sfloat[36, 19, 9]>>
"name = T"
"rank:"
3
"shape:"
[36, 19, 9]
[1st dim] name:lon long_name:Longitude units:degrees_east min,max:0.0 degrees_east,350.0 degrees_east
lon T
1000.0 -5.50255870819092
850.0 -13.0088624954224
600.0 -23.8766059875488
400.0 -41.1900672912598
250.0 -52.6089935302734
150.0 -51.7955780029297
70.0 -55.255916595459
30.0 -51.0108757019043
10.0 -43.6157722473145
|
¥×¥í¥°¥é¥à¤Î 4 ¹ÔÌܰʹߤò²òÀ⤷¤è¤¦.
4 ¹ÔÌÜ:
p 'name = '+gphys.name, 'rank:',gphys.rank, 'shape:', gphys.shape
¤Ï GPhys ¥ª¥Ö¥¨¥¸¥§¥¯¥È¤Î̾Á°(name), ¼¡¸µ¿ô(rank), ³Æ¼¡¸µ¤ÎŤµ(shape)¤òɽ¼¨¤¹¤ë.
5¡Á8 ¹ÔÌÜ:
print '[1st dim] name:', gphys.coord(0).name,
' long_name:',gphys.coord(0).get_att('long_name'),
' units:',gphys.coord(0).get_att('units'),
" min,max:#{gphys.coord(0).min},#{gphys.coord(0).max}\n"
¤Ï°ì³¤¤ÎÌ¿Îá¤Ç¤¢¤ë. Âè 5,6,7 ¹Ô¤¬¥³¥ó¥Þ¤Ç½ª¤ë¤¿¤á, ·Ñ³¤ÎɬÍפ¬ÌÀ¤é¤«¤À¤«¤é¤½¤¦²ò¼á¤µ¤ì¤ë. gphys.coord(idim) ¤Ï, idimÈÖÌܤμ¡¸µ (0¤«¤é¿ô¤¨¤ë) ¤ÎºÂɸÃͤò³ÊǼ¤¹¤ë¥Ç¡¼¥¿¤òÊÖ¤¹¡Ê¤Ê¤ª, GPhys ¤ÏºÂɸÃͰʳ°¤Ë¤â³Æ¼¡¸µ¤Ë´Ø¤¹¤ë¾ðÊó¤òÀ°Íý¤·¤Æ´ÉÍý¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë. ³Æ¼¡¸µ¤Ë´Ø¤¹¤ë¾ðÊó¤Ï gphys.axis(idim) ¤ÇÆÀ¤é¤ì, ºÂɸÃͤϤ½¤ì¤Ë pos ¥á¥½¥Ã¥É¤òŬÍѤ¹¤ë¤³¤È¤Ç¤âÆÀ¤é¤ì¤ë. ¤Ä¤Þ¤ê, gphys.axis(idim).pos ¤Ï gphys.coord(idim) ¤ÈƱ¤¸·ë²Ì¤òÊÖ¤¹. ¤³¤³¤Ç¤Ï´Êñ¤Î¤¿¤á¤³¤ì°Ê¾å¤Î²òÀâ¤Ï¤·¤Ê¤¤¡Ë. ºÂɸÃͤÏ, VArray (¡áVirtual Array) ¤È¤¤¤¦, ¿¼¡¸µÇÛÎó¤È´ðËÜŪ¤Ë¤ÏƱ¤¸µ¡Ç½¤ò»ý¤Ä¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹. VArray ¤Ï, ¿¼¡¸µ¤Î¿ôÃͥǡ¼¥¿¤Ë²Ã¤¨¤Æ, ̾Á°¤ÈǤ°Õ¸Ä¤Î¡Ö°À¡× ¤ò»ý¤Ä¤³¤È¤¬½ÐÍè¤ë. °À¤È¤ÏǤ°Õ¤Î̾Á°(ʸ»úÎó)¤ÈÃͤÎÁȤÇ, ÃͤλÅÍÍ¤Ï NetCDF ¤ÈƱÍͤǤ¢¤ë(¿ôÃͤÎ1¼¡¸µÇÛÎó¤Þ¤¿¤Ïʸ»úÎó). VArray ¤Î¥Ç¡¼¥¿ËÜÂÎ¤Ï NArray ¤Ç¤â¤è¤¤¤·, NetCDF ¥Õ¥¡¥¤¥ëÃæ¤ÎÊÑ¿ô¤Ç¤â¤è¤¤. ¤³¤³¤Ç¤Ï¸å¼Ô¤Ç¤¢¤ë. ¤³¤Î¾ì¹ç, ɬÍפˤʤë¤Þ¤Ç¥Ç¡¼¥¿¤ÎÆÉ¤ß¹þ¤ß¤Ï¹Ô¤ï¤ì¤Ê¤¤. ¤è¤Ã¤Æ, µðÂç¤Ê¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤ò³«¤¯¤³¤È¤¬Ä¾¤Á¤Ë¥á¥â¥ê¡¼¤ò°µÇ÷¤¹¤ë¤³¤È¤Ë¤Ï¤Ê¤é¤Ê¤¤. ¥×¥í¥°¥é¥à¤Î 5¡Á8 ¹ÔÌܤȽÐÎϤò¸«Èæ¤Ù¤ë¤È, gphys.coord(0).name ¤Ï̾Á°¤ò, gphys.coord(0).get_att('long_name') ¤Ï°À long_name ¤ò gphys.coord(0).max ¤ÏºÂɸÃͤκÇÂçÃͤòÊÖ¤¹¤³¤È¤Ê¤É¤¬¤ï¤«¤ë¤Ç¤¢¤í¤¦. ¸ºß¤·¤Ê¤¤Â°À¤òÆÉ¤ß¹þ¤â¤¦¤È¤¹¤ë¤È, ÊÖ¤êÃÍ¤Ï nil ¤È¤Ê¤ë (Îã³°¤ÏȯÀ¸¤·¤Ê¤¤).
9¹ÔÌÜ(prs = gphys.coord(2).val)¤Ç¤Ï, (¥¼¥í¤«¤é¿ô¤¨¤Æ)Âè2¼¡¸µ, ¨¤Á°µÎÏ (ÊÑ¿ô̾level) ¤ÎÃͤòÆÉ¤ß¹þ¤à. VArray ¤Î¥á¥½¥Ã¥É val ¤Ï ¥Ç¡¼¥¿¤ÎÃͤò NArray ¤ÇÊÖ¤¹. ½¾¤Ã¤Æ¤³¤³¤Ç¤Ï (¤³¤³¤Ç½é¤á¤Æ) ¥Õ¥¡¥¤¥ë¤«¤é¤ÎÊÑ¿ôÃÍ¤ÎÆÉ¤ß¹þ¤ß¤¬È¯À¸¤¹¤ë.
10¹ÔÌÜ(t_jpn = gphys.cut(135,35,true).val)¤Ç¤Ï, ÆüËÜÉÕ¶á¤Î£±±ôľ¥×¥í¥Õ¥¡¥¤¥ë¤òÁª¤ó¤À¾å¤Ç, ¥Ç¡¼¥¿¤òÆÉ¤ß¹þ¤à. ¥Ç¡¼¥¿ÆÉ¤ß¹þ¤ß¤Î»ÅÍͤˤĤ¤¤Æ¤Ï, ¼¡¤ÎÀá¤Ç²òÀ⤹¤ë.
11¹ÔÌܤϤ½¤ì¤¾¤ì¤Î̾Á°(name)¤òɽ¼¨¤·¤Æ, 12¡Á14 ¹ÔÌܤdzƳʻÒÅÀ¤Ç¤Î°µÎϤȵ¤²¹¤ÎÃͤò½ñ½Ð¤¹.
GPhys-0.5.0 ¤è¤ê¡¤GPhys ÍѤ˥ե¡¥¤¥ë¥·¥¹¥Æ¥àÃæ¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òÂåɽ¤¹ ¤ë¥¯¥é¥¹ GDir ¤¬Æ³Æþ¤µ¤ì¤¿¡¥Ruby ÁȤ߹þ¤ß¤Î Dir ¤ÈƱÍͤǤ¢¤ë¤¬¡¤ºÇÂç¤Î °ã¤¤¤Ï
¤³¤È¤Ç¤¢¤ë¡¥Â¨¤Á¡¤NetCDF ¤Ê¤É¤Î¥Õ¥¡¥¤¥ë¤Ë "cd" ¤·¡¤ÊÑ¿ô¤ò "ls" ¤¹¤ë¤³ ¤È¤¬½ÐÍè¤ë¡¥¤Ê¤ª¡¤¾Íè, HDF ¤ä NetCDF-4 ¤Ê¤É¡¤¥Õ¥¡¥¤¥ëÃæ¤Ë¥Ç¥£ ¥ì¥¯¥È¥ê¡¼¹½Â¤¤ò¤È¤ì¤ë·Á¼°¤ò¥µ¥Ý¡¼¥È¤¹¤ëºÝ¤Ë¤Ï¡¤¤½¤ì¤â GDir ¥ª¥Ö¥¸¥§¥¯ ¥È¤Ë½ÐÍè¤ë¤è¤¦¤Ë¤¹¤ëͽÄê¤Ç¤¢¤ë¡¥
¾åµ°Ê³°¤Î¼ç¤Ê°ã¤¤¤Ë¤Ï¼¡¤Î¤è¤¦¤Ë¤Ê¤ë¡¥
¾Ü¤·¤¯¤Ï
Gdir¤Î¥ª¥ó¥é¥¤¥ó¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤Î¤³¤È¡¥
GDirÍøÍÑÎã(1)
GDir ¤Ï irb ¤òÍѤ¤¤¿ÂÐÏÃÍøÍѤËŬ¤·¤Æ¤¤¤ë¡¥ÍøÍѤ˺ݤ·¤Æ¤Ï¡¤ ¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤Ë¤Æ½àÈ÷¤¹¤ë ¤ÈÊØÍø¤Ç¤¢¤ë¤¬¡¤¤³¤³¤Ç¤Ï¥³¥Ô¡¼¡õ¥Ú¡¼¥¹¥È¤À¤±¤ÇÍøÍѤǤ¤ë¤è¤¦¤Ë À¸¤Î irb ¤Ë¤ª¤±¤ëÍøÍÑË¡¤ò¼¨¤¹¡¥
% pwd /hogehoge/TUTORIAL % irb irb(main):001:0> require "numru/gphys" => true irb(main):002:0> include NumRu => Object irb(main):003:0> GDir.top => "/" # ¥Ç¥Õ¥©¥ë¥È¤Î¥È¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê¡¼ irb(main):004:0> GDir.top = Dir.pwd # ¥È¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ò¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ËÊѹ¹ => "/hogehoge/TUTORIAL" irb(main):005:0> GDir.pwd => "/" # ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¡¼¤Î¥Ç¥Õ¥©¥ë¥È¤Ï¥È¥Ã¥×¡Ê¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¥ë¡¼¥È¤È¤Ï°ã¤¦¡Ë irb(main):006:0> GDir.ls Directories: 'T.jan.ctl/' # GPhys ²½²Äǽ¤ÊÊÑ¿ô¤ò¼ý¤á¤¿¥Õ¥¡¥¤¥ë¤Ï 'T.jan.grib/' # ¥Ç¥£¥ì¥¯¥È¥ê¤È¤·¤ÆÉ½¼¨¤µ¤ì¤ë 'T.jan.nc/' 'testdir/' # ¤³¤ì¤Ï¤Û¤ó¤È¤Ë¥Ç¥£¥ì¥¯¥È¥ê Text files?: # ¥É¥¥å¥á¥ó¥ÈÅù¸«¤é¤ì¤ë¤è¤¦¤Ë¡¤¥Æ¥¥¹¥È¥Õ¥¡¥¤¥ë¤é¤· 'ToDo' # ¤¤â¤Î¤Ïɽ¼¨¤µ¤ì¤ë¡¥¤½¤Î¾¤Î¥Õ¥¡¥¤¥ë¤Ï̵»ë¤µ¤ì¤ë irb(main):007:0> GDir.ls_l # ¤è¤ê¾Ü¤·¤¯É½¼¨ Directories: 423 Sep 16 2003 T.jan.ctl/ # ¥Õ¥¡¥¤¥ë¥µ¥¤¥º¡¤¹¹¿·Æü»þ¡¤Ì¾Á° 13167 Mar 10 13:03 T.jan.grib/ 26664 Aug 28 2003 T.jan.nc/ 512 Jul 21 13:13 testdir/ Text files?: 206 Mar 23 2004 ToDo => nil irb(main):008:0> GDir.cd 'T.jan.nc' => /T.jan.nc/ irb(main):009:0> GDir.ls Data: # Data: ¤È¤·¤ÆÉ½¼¨¤µ¤ì¤ë¤Î¤Ï¡¤GPhys²½²Äǽ¤ÊÊÑ¿ô 'lon' # NetCDF ¤Î¾ì¹ç¡¤ºÂɸÊÑ¿ô¤â¤½¤ì¼«¿È¤òºÂɸ¤Ë¤â¤Ä GPhys 'lat' # ¤È¤·¤Æ³«¤±¤ë¤Î¤Ç¡¤Ì¾Á°¤¬É½¼¨¤µ¤ì¤ë¡¥ 'level' 'T' => nil irb(main):010:0> GDir.ls_l # ¤è¤ê¾Ü¤·¤¯ Data: lon [lon=36] 'Longitude' (degrees_east) lat [lat=19] 'Latitude' (degrees_north) level [level=9] 'Level' (millibar) T [lon=36,lat=19,level=9] 'Temperature' (degC) => nil irb(main):022:0> temp = GDir.data 'T' # ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ÎÊÑ¿ô¤ò³«¤¯ => <GPhys grid=<3D grid <axis pos=<'lon' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[36]>> <axis pos=<'lat' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[19]>> <axis pos=<'level' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[9]>>> data=<'T' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[36, 19, 9]>> |
¤³¤Î¤è¤¦¤Ë¡¤¥Õ¥¡¥¤¥ë¤â´Þ¤á¥Ç¥£¥ì¥¯¥È¥ê¡¼¤È¤·¤Æ°·¤¦¤³¤È¤Ç¡¤
³¬ÁØÅª¤ËÀ°Íý¤µ¤ì¤¿¥Ç¡¼¥¿¥»¥Ã¥È¤«¤é½ê˾¤ÎÊÑ¿ô¤òõ¤·¡¤
GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ³«¤¯¤³¤È¤¬¤Ç¤¤ë¡¥
GDirÍøÍÑÎã(2)
¾å¤ÎÎã¤Ç¤Ï¡¤GDir ¤Î¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¡¼¡ÊGDir¤Î¥¯¥é¥¹ÊÑ¿ô¤Ë¤Ê¤Ã¤Æ¤¤ ¤ë¡Ë¤Î¤ß¤òÍѤ¤¤¿¤Î¤Ç¡¤GDir ¥ª¥Ö¥¸¥§¥¯¥È¤ÏÍۤˤϸ½¤ì¤Ê¤«¤Ã¤¿¡¥º£Å٤ϡ¤ GDir ¥ª¥Ö¥¸¥§¥¯¥È¤ò°·¤¦Îã¤ò¼¨¤¹¡¥
% irb irb(main):001:0> require "numru/gphys" => true irb(main):002:0> include NumRu => Object irb(main):003:0> GDir.top = Dir.pwd # ¥È¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ò¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ËÊѹ¹ => "/hogehoge/TUTORIAL" irb(main):004:0> dir = GDir.cwd # ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ò¼èÆÀ => / irb(main):005:0> dir.class => NumRu::GDir # dir ¤Ï GDir ¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë irb(main):006:0> dir.ls Directories: 'T.jan.ctl/' 'T.jan.grib/' 'T.jan.nc/' 'testdir/' Text files?: 'ToDo' => nil irb(main):007:0> dir2 = dir.dir('T.jan.grib/') => /T.jan.grib/ irb(main):008:0> dir2.ls_l Data: TMP [lon=36,lat=19,level=9] 'Temperature' (K) => nil irb(main):009:0> temp = dir2.data('TMP') => <GPhys grid=<3D grid <axis pos=<'lon' in 'TMP' 36>> <axis pos=<'lat' in 'TMP' 19>> <axis pos=<'level' in 'TMP' 9>>> data=<'TMP' in '/hogehoge/TUTORIAL/T.jan.grib' [36, 19, 9]>> |
¤³¤ÎÎã¤Ç¤Ï¡¤GDir ¤Î¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¡¼¤Ï¥È¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê¡¼¤Î¤Þ¤Þ¡¤ ¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¡¼¤ò GDir ¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ³«¤¡ÊÊÑ¿ô̾ dir2¡Ë¡¤¤½¤Î Ãæ¤Î¥Ç¡¼¥¿¤ò GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ³«¤¤¤¿¡¥
Á°½Ò¤Î irb ÆÉ¤ß¹þ¤ßÍÑ¥Õ¥¡¥¤¥ë .irbrc_ggraph ¤Ë GDir ¤Ë´Ø¤¹¤ëÀßÄê¤òÄɲ䷤ơ¤shell ¤Î¤è¤¦¤Ë irb ¤ò»È¤¨¤ë¤è¤¦¤Ë¤¹¤ë¡¥¡Öshell ¤Î¤è¤¦¤Ë¡×¤È¤Ï¡¤ls ¤ä ls_l ¤ÈÂǤÁ¹þ¤á ¤Ð¥Ç¥£¥ì¥¯¥È¥ê¡¼¤äÊÑ¿ô¤¬¥ê¥¹¥È¤µ¤ì¡¤cd ¤Ç¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òÊѤ俤ꡤ ´Êñ¤Ë GPhys ÊÑ¿ô¤¬³«¤±¤¿¤ê¡Ê¥³¥Þ¥ó¥É̾¤Ï open ¤È¤¹¤ë¡Ë¤¹¤ë¤È¤¤¤¦¤³¤È ¤Ç¤¢¤ë¡¥
% alias irb_ggraph 'irb -r ~/.irbrc_ggraph' % cat ~/.irbrc_ggraph.rb print "Start interactive GGraph session\n" require "numru/ggraph" include NumRu include GGraph #<< GDir Setting >> GDir.top='/' GDir.cd(Dir.pwd) def cwd; GDir.cwd; end # returns the current working directory of GDir def pwd; GDir.pwd; end # prints the current working directory of GDir def ls(path=nil); GDir.cwd.ls(path); end # listing def ls_l(path=nil); GDir.cwd.ls_l(path); end # verbose listing alias dir ls_l def cd(path); GDir.cd(path); end def open_all_data; GDir.cwd.open_all_data; end # --> Hash of GPhys objs in cwd def data(path); GDir.cwd.data(path); end # --> GPhys alias open data #<< Graphic Setting >> DCL.swpset('iwidth',700) # window width DCL.swpset('iheight',700) # window height ###DCL.swpset('ldump',true) # dump image files DCL.swpset('lwait',false) # do not wait mouse click to show the next page ###DCL.swpset('lalt',true) # background plot DCL.sgscmn(10) # change colomap (see below) ###DCL.sgscmn(5) # change colomap (see below) DCL.gropn(1) DCL.sgpset('lfprop',true) # to use the propotional font DCL.sgpset('lcorner',false) # do not show the corner mark DCL.sgpset('isub', 96) # control character of subscription: '_' --> '`' DCL.glpset('lmiss',true) # handle data missing =begin ¥«¥é¡¼¥Þ¥Ã¥×ÈÖ¹æ 1: dcl_original 2: black-orange-yellow-white 3: black-blue-cyan-white 4: blue-cyan-white-yellow-red 5: gray_scale 6: pastel_rainbow 7: black-rainbow-black 8: white_yellow_red 9: white_blue_black 10: short_green_original 11: black-rainbow-white 12: pink-rainbow-pink =end |
¤Ç¤Ï¡¤¤³¤ì¤ò»È¤Ã¤Æ¥Ç¡¼¥¿¤òÉÁ²è¤·¤Æ¤ß¤è¤¦¡¥¥³¥Þ¥ó¥É̾¤Ï¡¤ ¾å¤Ç¤Î alias ¤Ë¤è¤ê¡¤irb_ggraph ¤Ç¤¢¤ë¡¥
% irb_ggraph Start interactive GGraph session *** MESSAGE (SWDOPN) *** GRPH1 : STARTED / IWS = 1. irb(main):001:0> ls Directories: 'T.jan.ctl/' 'T.jan.grib/' 'T.jan.nc/' 'testdir/' Text files?: 'ToDo' => nil irb(main):002:0> cd 'T.jan.nc/' => /hogehoge/TUTORIAL/T.jan.nc/ irb(main):003:0> ls Data: 'lon' 'lat' 'level' 'T' => nil irb(main):004:0> temp = open 'T' => <GPhys grid=<3D grid <axis pos=<'lon' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[36]>> <axis pos=<'lat' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[19]>> <axis pos=<'level' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[9]>>> data=<'T' in '/hogehoge/TUTORIAL/T.jan.nc' sfloat[36, 19, 9]>> irb(main):005:0> tone temp => nil |
¤³¤Î¤è¤¦¤Ë shell ¤Î¤è¤¦¤Ë¥Ç¥£¥ì¥¯¥È¥ê¡¼¤òõ¤ê¤Ê¤¬¤é¡¤¥Ç¡¼¥¿¤Î¿Þ¼¨¤ä ²òÀϤ¬¤Ç¤¤ë¡¥
¤³¤³¤Ç, GPhys
¤Ë¤ª¤±¤ë¥Ç¡¼¥¿Áàºî¤Î´ðÁäòÀ°Íý¤·¤Æ¤ª¤³¤¦.
µðÂç¤Ê¥Ç¡¼¥¿¤ò°·¤¦ºÝ¤Ëµ¤¤Ë¤¹¤Ù¤, ¥Ç¡¼¥¿ÆÉ¤ß¹þ¤ß¤Ë´Ø¤¹¤ëÃí°Õ¤â½Ò¤Ù¤ë.
ÀÚ¤ê½Ð¤·
¾å¤Ç¤Ï, ¥á¥½¥Ã¥É cut ¤Ë¤è¤ê GPhys ¤ÎÀÚ¤ê½Ð¤·¤¬¹Ô¤¨¤ë¤³¤È¤ò½Ò¤Ù¤¿. GPhys ¤Î¥Ç¡¼¥¿ÀÚ¤ê½Ð¤·¥á¥½¥Ã¥É¤Ë¤Ï cut ¤È [] ¤Î2¼ïÎब¤¢¤ë. cut ¤ÏʪÍýŪ¤ÊºÂɸ¤ò»ØÄꤷ¤Æ¤ÎÀÚ¤ê½Ð¤·¤ò¹Ô¤¤, [] ¤Ï¥Ç¡¼¥¿¤Î³Ê»ÒÅÀ ¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¡Ê¡áÇÛÎó¤È¤·¤Æ¤Îź»ú¡Ë¤Ë´ð¤Å¤¤¤¿ÀÚ¤ê½Ð¤·¤ò¹Ô¤¦. ¤Þ¤º¤Ï¤½¤ì¤¾¤ì¤Î»ÅÍͤòÎã¤Ç¼¨¤¹.
require "numru/gphys"
include NumRu
gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
print "gphys: rank=#{gphys.rank} shape=#{gphys.shape.inspect}\n"
gp135 = gphys.cut('lon'=>0..90) # lon ¤È¤¤¤¦Ì¾Á°¤Î¼´¤ò 0¡Á90 ÅÙ¤Þ¤Ç
print "gp135: rank=#{gp135.rank} shape=#{gp135.shape.inspect}\n"
gprg1 = gphys.cut( 100.0..150.0, 30..50, 850) # 1,2¼¡¸µÌܤÏÈϰÏ, 3¼¡¸µÌܤÏÃͤÇ
print "gprg1 rank=#{gprg1.rank} shape=#{gprg1.shape.inspect}",
" 0th dim: #{gprg1.coord(0).min} .. #{gprg1.coord(0).max}\n"
gprg2 = gphys[ 0..3, -3..-1, 0] # ¾å¤ÈƱÍͤÀ¤¬ÇÛÎóź»ú¤Ç»ØÄê
print "gprg2 rank=#{gprg2.rank} shape=#{gprg2.shape.inspect}",
" 0th dim: #{gprg2.coord(0).min} .. #{gprg2.coord(0).max}\n"
p gprg2 # ¤ª¤Þ¤«¤»É½¼¨
|
°Ê²¼¤Ï¼Â¹Ô·ë²Ì¡§
% ruby -Ke kiridashi.rb
gphys: rank=3 shape=[36, 19, 9]
gp135: rank=3 shape=[10, 19, 9]
gprg1 rank=2 shape=[6, 3] 0th dim: 100.0 degrees_east .. 150.0 degrees_east
gprg2 rank=2 shape=[4, 3] 0th dim: 0.0 degrees_east .. 30.0 degrees_east
<GPhys grid=<2D grid <axis pos=<'lon' shape=[4] subset of a NumRu::VArrayNetCDF>>
<axis pos=<'lat' shape=[3] subset of a NumRu::VArrayNetCDF>>>
data=<'T' shape=[4, 3] subset of a NumRu::VArrayNetCDF>>
|
ºÇ¸å¤Î¹Ô¤Î p ¤Ë¤è¤ë¤ªÇ¤¤»É½¼¨ (p gprg2) ¤Î·ë²Ì¤Ï, 'lon', 'lat', 'T' ¤Î¥Ç¡¼¥¿¤¬¤¤¤º¤ì¤â "subset of a NumRu::VArrayNetCDF" ¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Æ ¤¤¤ë (VArrayNetCDF¤ÏNetCDFÊÑ¿ô¤ò¤¢¤¿¤«¤â ÇÛÎó¤Î¤è¤¦¤Ë¸«¤»¤ë¤¿¤á¤Î¥½¥±¥Ã¥È¤Î¤è¤¦¤Ê¥¯¥é¥¹¤Ç¤¢¤ë). ¼Â¤Ï, GPhys ¤Ë¤ª¤±¤ë¡ÖÀÚ¤ê½Ð¤·¡×¤ÏÁ´¤Æ, ¸µ¤Î¥Ç¡¼¥¿¤Ø¤ÎÈϰϤò ¸Â¤Ã¤¿»²¾È¤òÄêµÁ¤¹¤ë¤À¤±¤Ê¤Î¤Ç¤¢¤ë. ¤µ¤é¤Ë, ¤³¤ÎÎã¤Î¤è¤¦¤Ë NetCDF ¥Õ¥¡¥¤¥ëÃæ¤Î¥Ç¡¼¥¿¤Ë´Ø¤·¤Æ GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤òÄêµÁ¤·¤¿¾ì¹ç, ¼õ¤±»®¤È¤Ê¤ë VArrayNetCDF ¤Ï, ÆâÉô¥Ç¡¼¥¿¤È¤·¤Æ¤Ï NetCDF ÊÑ¿ô¤Ø¤Î»²¾È¤·¤«»ý¤¿¤Ê¤¤. ¤è¤Ã¤Æ, ¾åµ¤Î kiridashi.rb ¤ò¼Â¹Ô¤·¤¿¤À¤±¤Ç¤Ï, ÊÑ¿ô¤ÎÃÍ¤ÏÆÉ¤ß¹þ¤Þ¤ì¤Ê¤¤¡Ê¤¿¤À¤·Â°À¤ÏɬÍפ˱þ¤¸¤ÆÆÉ¤ß¹þ¤Þ¤ì¤ë¡Ë. ÃÍ¤ÎÆÉ¤ß¹þ¤ß¤Ï, ²Ä»ë²½¤Ê¤É¤Î¤¿¤á¤Ë¼ÂºÝ¤ËɬÍפˤʤë¤Þ¤Ç¹Ô¤ï¤ì¤Ê¤¤¤Î¤Ç¤¢¤ë.
²Ä»ë²½¤ÎºÇ½é¤ÎÎã¤Ë¤ª¤±¤ë GGraph.contour( gphys ) ¤Ç¤Ï, À褺ºÇ½é¤Ë£²¼¡¸µ¤Î¥µ¥Ö¥»¥Ã¥È(ºÇ²¼Áإǡ¼¥¿)¤ÎÀÚ¤ê½Ð¤·¤¬¹Ô¤ï¤ì, ¤½¤Î¸å¿Þ¼¨¤ËɬÍפʥǡ¼¥¿¤Î¤ß¤òÆÉ¤ß¹þ¤à. ½¾¤Ã¤Æ, ²¾¤Ë¸µ¤Î¥Ç¡¼¥¿ ¤¬¿ô100MB¤Î£´¼¡¸µ¥Ç¡¼¥¿¤À¤Ã¤¿¤È¤·¤Æ¤âÌäÂê¤Ê¤¤.
¤µ¤Æ, ÀÚ¤ê½Ð¤·¤Ï»²¾È¤Ç¤¢¤ë¤«¤é, ¤â¤·¤â¾åµ¤Î gprg2 ¤ËÃͤò½ñ¤¹þ¤á¤Ð gphys, ¤½¤·¤ÆÂ縵¤Î NetCDF ¥Õ¥¡¥¤¥ë¤ËÊѹ¹¤¬È¿±Ç¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ë. ¤·¤«¤·, ¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï¥Õ¥¡¥¤¥ë¤Ï Read-only ¤Ç¥ª¡¼¥×¥ó¤µ¤ì¤ë¤Î¤Ç, ÉÔÍѰդ˥ե¡¥¤¥ë¤òÊѹ¹¤¹¤ë¿´ÇۤϤ¤¤é¤Ê¤¤. ¼Â¤Ï, GPhys::NetCDF_IO.open ¤ÎÂè°ì°ú¿ô¤Ï, NetCDF ¥ª¥Ö¥¸¥§¥¯¥È¤Þ¤¿¤Ï ʸ»úÎó¤ò¼õ¤±¼è¤ë¤³¤È¤Ë¤Ê¤Ã¤Æ¤¤¤ë. ¤½¤·¤Æ, ¤â¤·Ê¸»úÎó¤Ê¤éÆâÉô¤Ç read-only ¤Î NetCDF ¥ª¥Ö¥¸¥§¥¯¥È ¤ò¥ª¡¼¥×¥ó¤·¤Æ»È¤¦.
½ñ¤¹þ¤ß¤òµö¤·¤¿¤±¤ì¤Ð, °Ê²¼¤Î¤è¤¦¤Ë, ͽ¤á½ñ¤¹þ¤ß²Äǽ¤È¤·¤Æ¥ª¡¼¥×¥ó¤·¤¿ NetCDF ¥ª¥Ö¥¸¥§¥¯¥È¤ò GPhys::NetCDF_IO.open ¤ËÍ¿¤¨¤ëɬÍפ¬¤¢¤ë.
file = NetCDF.open('T.jan.nc', 'a') # 'a' ¤Ï¥Õ¥¡¥¤¥ë¤ÎÊÔ½¸¤òµö¤¹¥â¡¼¥É
gphys = GPhys::NetCDF_IO.open(file, 'T')
|
NetCDF.open ¤Î°ú¿ô¤Ï, ¥Õ¥¡¥¤¥ë̾¤ÈÆþ½ÐÎϥ⡼¥É¡Ê¾Êά²Ä¡Ë¤Ç¤¢¤ë. Æþ½ÐÎϥ⡼¥É¤Ï Ruby ¤ËÁȤ߹þ¤ß¤Î File ¥¯¥é¥¹¤Î»ÅÍÍ¤ÈÆ±¤¸¤Ç¤¢¤ë (¤½¤·¤Æ¤½¤ì¤Ï C ¸À¸ì¤Î»ÅÍÍ¤ÈÆ±¤¸¤Ç¤¢¤ë). ⤷, NetCDF¤Ï¾ï¤Ë¥Ð¥¤¥Ê¥ê¡¼¤Ç¤¢¤ë¤¿¤á 'b' ¤ÏɬÍפ¯, ¤Þ¤¿¤É¤Î¥â¡¼¥É¤Ç¤âÆÉ¤ß¹þ¤ß¤Ï²Äǽ¤Ç¤¢¤ë.
GPhys ¥Ç¡¼¥¿¤ÏÀÚ¤ê½Ð¤¹¤À¤±¤Ç¤Ê¤¯, Ê¿¶Ñ¤ò¼è¤Ã¤¿¤ê ¿ô³Ø±é»»¤äÅý·×Áàºî¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë. ÀÚ¤ê½Ð¤·¤Þ¤Ç¤Ï¥Ç¡¼¥¿¤Ë´Ø¤¹¤ë±é»»¤¬ÉÔÍפǤ¢¤ë¤Î¤Ç, GPhys¥ª¥Ö¥¸¥§¥¯¥È¤Ï NetCDF ¥Õ¥¡¥¤¥ëÃæ¤ÎÊÑ¿ô ¤Ø¤Î»²¾È¤òÊÝ»ý¤·¤Æ¤¤¤ë¤À¤±¤À¤Ã¤¿¤¬, Ê¿¶Ñ¤ò¤È¤ë¤Ê¤É¤È¤Ê¤ì¤Ð¼ÂºÝ¤Î¥Ç¡¼¥¿¤ÎÆÉ¤ß½Ð¤·¤È±é»»¤¬¹Ô¤ï¤ì¤ë¤³¤È¤Ë¤Ê¤ë. ¥Ç¡¼¥¿¤Ï¤â¤Ï¤ä¥Õ¥¡¥¤¥ë¤òÎ¥¤ì, ¥á¥â¥ê¡¼¾å¤ËÊÝ»ý¤µ¤ì¤ë. ¤·¤«¤·, GPhys ¤Ë¤ª¤¤¤Æ¤Ï, ¥á¥â¥ê¡¼¾å¤Î¥Ç¡¼¥¿¤â, ¥Õ¥¡¥¤¥ëÃæ¤Ë¤¢¤ë¥Ç¡¼¥¿¤ÈÁ´¤¯Æ±ÍÍ¤Ë °·¤ï¤ì¤ë. ½¾¤Ã¤Æ, ÍøÍѼԤÏξ¼Ô¤ò¶èÊ̤¹¤ëɬÍפϤʤ¤. ⤷, µðÂç¤Ê ¥Ç¡¼¥¿¤ò°·¤Ã¤Æ¤¤¤ëºÝ¤Ë¤Ï, ¥á¥â¥ê¡¼¤ò°µÇ÷¤·¤Ê¤¤¤è¤¦, ɬÍפÊÉôʬ¤òÀÚ¤ê½Ð ¤·¤Æ¤«¤é±é»»¤¹¤ë¤³¤È¤Ï¿´³Ý¤±¤¿¤Û¤¦¤¬Îɤ¤.
¼ÂºÝ, ¥¯¥é¥¹ GPhys ¤Ï, ¥Ç¡¼¥¿¤¬¥Õ¥¡¥¤¥ëÃæ¤Ë¤¢¤ë¤Î¤« NArray Ãæ¤Ë¤¢¤ë¤Î¤«¤ò, ľÀܤˤÏÁ´¤¯ÃΤé¤Ê¤¤. ¤³¤Î°ã¤¤¤Ï, GPhys ÇÛ²¼¤Î VArray (= Virtual Array)¤¬µÛ¼ý¤¹¤ë. Î㤨¤ÐÁ°½Ò¤Î VArrayNetCDF ¤Ï, VArray ¤Î¥µ¥Ö¥¯¥é¥¹¤Ç¤¢¤ë. ¡Ê¤è¤Ã¤Æ, ̤¥µ¥Ý¡¼¥È¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ø¤ÎÂбþ¤Ï, Âбþ¤¹¤ë VArray ¤òºî¤ë¤³¤È¤¬¼ç¤Ê»Å»ö¤È¤Ê¤ë. ¡Ë
¤µ¤Æ, ²¼¤Î¥×¥í¥°¥é¥à¤Ï, Á´µåÊ¿¶Ñµ¤²¹¤Î±ôľ¥×¥í¥Õ¥¡¥¤¥ë¤òɽ¼¨¤¹¤ë. ¥½¡¼¥¹¤Ï line_2.rb ¤È¤Û¤È¤ó¤ÉÊѤé¤Ê¤¤¤³¤È¤ËÃí°Õ¤»¤è.
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.nc', 'T')
4: DCL.gropn(1)
5: DCL.sgpset('isub', 96)
6: DCL.sgpset('lfull',true)
7: DCL.uzfact(0.6)
8: GGraph.set_fig( 'itr'=> 2, 'viewport'=>[0.25,0.7,0.15,0.6] )
9: GGraph.line( gphys.mean(0,1), true, 'exchange'=>true )
10: DCL.grcls
|
·ë²Ì¤Î¿Þ¤Ï²¼. Ïȳ°±¦¾å¤Î¾ðÊó¤¬Ê¿¶Ñ¤òɽ¤¹¤â¤Î¤ËÊѤäƤ¤¤ë¤³¤È¤ËÃí°Õ.
¤³¤³¤Ç¤Ï, mean(0,1)¤ÇÂè 1,2 ¼¡¸µÌܤÎÊ¿¶Ñ¤ò¼è¤Ã¤Æ¤¤¤ë. ÇÛÎóÍ×ÁÇÆ±ÍÍ, ¼¡¸µ¤â 0 ¤«¤é¿ô¤¨¤ë¤Î¤Ç¤¢¤ë. GPhys¤Î¥á¥½¥Ã¥É mean ¤Ï³Æ³Ê»ÒÅÀ¤Î½Å¤ß¤¬Åù¤·¤¤Ã±½ãÊ¿¶Ñ¤ò¹Ô¤¦. ÍøÍÑË¡¤Ï NArray ¤Î¥á¥½¥Ã¥É mean ¤ÈƱ¤¸¤Ç¤¢¤ë¡Ê¤½¤·¤Æ, ƱÍÍ¤Ë sum, max, min, stddev ¤Ê¤É¤Î¥á¥½¥Ã¥É¤¬¤¢¤ë¡Ë.
¤µ¤Æ, ¼ÂºÝ¤Ë¤Ï, ¥Ç¡¼¥¿¤Ï 90N-90S ¤ÇÎ¥»¶Åª¤Ë¥µ¥ó¥×¥ë¤µ¤ì¤â¤Î¤¬ Æþ¤Ã¤Æ¤¤¤ë¤ï¤±¤À¤«¤é, Ê¿¶Ñ¤Ï¤à¤·¤í, Âæ·Á¸ø¼°¤ä¥·¥ó¥×¥½¥ó¸ø¼°Åù¤ÇÀÑʬ¤·¤¿¾å¤Ç, Ťµ¤Ç³ä¤ë¤Î¤¬¼«Á³¤Ç¤¢¤ë. ¤³¤Î¤è¤¦¤Ê¼Â¶õ´Ö¤Ç¤ÎÊ¿¶Ñ¤Ï¥á¥½¥Ã¥É average ¤Ç¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë¡§
9: GGraph.line( gphys.average(1).average(0), true, 'exchange'=>true ) |
¤³¤Î¤è¤¦¤Ê, ¼Â¶õ´Ö¤Ë¤ª¤±¤ëÁàºî¤ò¹Ô¤¦¥á¥½¥Ã¥É¤Ï, ¸½ºß¤Î¤È¤³¤í average ¤È integrate ¤Î£²¤Ä¤Ç¤¢¤ë. ¶¦¤Ë¥Ç¥Õ¥©¥ë¥È¤ÎÀÑʬ¥¢¥ë¥´¥ê¥º¥à¤Ï Âæ·Á¸ø¼°¤Ç¤¢¤ë¡Ê¼ÂºÝ¤Ë¤Ï³Ê»Ò¤ÎÀ³Ê¤Ë¤è¤Ã¤Æ¥¢¥ë¥´¥ê¥º¥à¤¬ÊѤ뤬, NetCDF¤Î¥æ¡¼¥¶¡¼¥º¥¬¥¤¥É¤Î¤ß¤ò²ò¼á¤·¤Æ¤¤¤ë¾ì¹ç, ³Ê»Ò¤ÎÀ³Ê¤ÏÃΤêÆÀ¤Ê¤¤ ¤Î¤Ç¤½¤¦¤Ê¤ë¡Ë. ¤³¤ì¤é¤Ï³Æ¼¡¸µËè¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ë¤Î¤Ç, average(1).average(0) ¤È½Å¤Í¤Æ¸Æ¤ó¤Ç¤¤¤ë. ¤Ê¤ª, ¤³¤Î¾ì¹ç¤Ç¤â, ¶ËÉÕ¶á¤Î³Ê»ÒÅÀ¤Î·ÐÅÙ´Ö³Ö¤¬Ã»¤¤¤³¤È¤ò¹Íθ¤·¤¿Ê¿¶Ñ¤Ë¤Ï¤Ê¤é¤Ê¤¤¤³¤È¤ËÃí°Õ. ¾ÍèŪ¤Ë¤Ï, µåºÂɸ¤Ê¤É¤¤¤Ã¤¿ºÂɸ·Ï¤òÀßÄꤷ, ²ò¼á¤µ¤»¤é¤ì¤ë¤è¤¦¤Ë¤¹¤ëͽÄê¤Ç¤¢¤ë.
VArray, GPhys ¤Ï, ʪÍýÎ̤Îñ°Ì¤òǧ¼±¤¹¤ë.
ñ°Ì¤Ï°À "units" ¤Ç»ØÄꤵ¤ì, ¤½¤Î±é»»¤Ï NumRu::Units ¤¬¹Ô¤¦. ¤³¤ì¤Ë¤è¤ê, Î㤨¤Ð VAray ¤ä GPhys ¤Î³Ý¤±»»¤ò ¹Ô¤¦¤È, ñ°Ì¤Î³Ý¤±»»¤â¹Ô¤ï¤ì¤ë. ¤Þ¤¿, Äê¿ôÇÜ and/or ¥ª¥Õ¥»¥Ã¥Èʬ¤Î°ã¤¤ ¤¬¤¢¤ëñ°Ì¤ò»ý¤Ä¥Ç¡¼¥¿¤ÎÏ¡¦º¹¤Ï, Â裲¹à¤òÂ裱¹à¤Îñ°Ì¤Ë¹ç¤ï¤»¤ë´¹»»¤ò ¹Ô¤Ã¤Æ¤«¤é¹Ô¤¦¡ÊÎ㤨¤Ð, km ¤È m ¤ä degree_C ¤È K ¤Î´Ö¤Î´¹»»¤Ê¤É¡Ë.
¤µ¤é¤Ë, GPhys ¤Î¥Ñ¥Ã¥±¡¼¥¸Æâ¤Ë¤Ï, ¤³¤ì¤òÍѤ¤¤¿ NumRu::UNumeric ¤È¤¤¤¦, ñ°ÌÉդοôÃÍ(¥¹¥«¥é¡¼)¤Î¥¯¥é¥¹¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë. GPhys, VArray, UNumeric ¤Ï¼«Í³¤Ë£²¹à±é»»¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë. ¡Ê·ë²Ì¤Î¥¯¥é¥¹¤Ï GPhys, VArray, UNumeric ¤Î½ç¤Ë¹ç¤ï¤µ¤ì¤ë. Î㤨¤Ð UNumric ¤È GPhys ¤Î±é»»·ë²Ì¤Ï GPhys. ¡Ë
1: require "numru/gphys"
1: include NumRu
2: temp = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
3: p( temp.data.get_att('units') )
4: p( (temp*temp).data.get_att('units') )
5: p( (temp*temp).units.to_s )
6:
7: R = UNumeric[ 287.04, 'J.K-1.kg-1' ] # Gas const of dry air
8: p( (R*temp).data.get_att('units') ) # Bad, because temperature should be in K
9: zeroK = UNumeric[ 0.0, 'K' ]
10: tempK = zeroK + temp
11: p( (R*tempK).data.get_att('units') )
|
°Ê²¼¤Ï¼Â¹Ô·ë²Ì¡§
% ruby op_units.rb
"degC"
"degC2"
"degC2"
"J.K^(-1.0).degC.kg-1"
"J.kg-1"
|
Â裴¹ÔÌܤΠ(temp*temp) ¤Î·ë²Ì¤È¤·¤Æ, µ¤²¹¤Îñ°Ì "degC" ¤¬2¾è¤µ¤ì¤Æ "degC2" ¤È¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤ë. £·¹ÔÌܤǤÏ, µ¤ÂÎÄê¿ô R = 287.04 [J.kg-1.K-1] ¤ò½àÈ÷¤·, £¸¹ÔÌܤǤϵ¤²¹¤È³Ý¤±¹ç¤ï¤µ¤ì¤ë. ¤½¤Î·ë²Ì¤Îñ°Ì¤Ï "J.K^(-1.0).degC.kg-1" ¤È¤Ê¤Ã¤¿. K ¤È degC ¤¬¥¥ã¥ó¥»¥ë¤·¤Æ¤Ê¤¤¤Î¤Ç¾¯¤·¸«¤Ë¤¯¤¤¤¬, ¤·¤«¤·, Îɤ¯¹Í¤¨¤ë¤Èµ¤ÂÎÄê¿ô¤Ë³Ý¤±¤Æ°ÕÌ£¤¬¤¢¤ë¤Î¤Ï, Ä̾ï¤ÏÀäÂв¹Å٤Ǥ¢¤ë¤³¤È¤ò»×¤¤½Ð¤¹¤Ç¤¢¤í¤¦¡Ê¤¿¤Ö¤ó¡Ë. ¤½¤³¤Ç, 9,10¹ÔÌܤǤÏ, ¤·»»¤Î·ë²Ì¤Îñ°Ì¤¬Âè°ì¹à¤Ë¹ç¤ï¤µ¤ì¤ë¤³¤È¤òÍøÍѤ·¤Æ, Kelvin ¤ËÊÑ´¹¤¹¤ë¡§
zeroK = UNumeric[ 0.0, 'K' ]
tempK = zeroK + temp
¤³¤Î·ë²Ì¤Ë R ¤ò³Ý¤±¤ë¡Ê11¹ÔÌܡˤÈ, ·ë²Ì¤Îñ°Ì¤Ï "J.kg-1" ¤È½Ð¤¿.
GPhys ¤òÍøÍѤ¹¤ë¤È¼«¸Êµ½ÒŪ¤Ê¥Õ¥¡¥¤¥ë¤Î½ñ¤½Ð¤·¤¬Íưפ˹Ԥ¨¤ë.
À褺ºÇ½é¤Ë NetCDF ¤Ê¤É, ¤¹¤Ç¤Ë¼«¸Êµ½ÒŪ¤Ê¥Ç¡¼¥¿¤ò GPhys
¤È¤·¤ÆÆÉ¤ß¹þ¤ó¤Ç¤«¤é¡ÊɬÍפ˱þ¤¸¤Æ²Ã¹©¤Î¾å¡Ë¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤ¹¤ë
¥±¡¼¥¹¤ò°·¤¦. ¸å¤Ç¼¨¤¹¤è¤¦¤Ë¥Õ¥¡¥¤¥ë¤Î·¿ÊÑ´¹¤âÍÆ°×¤Ç¤¢¤ë.
¤Ä¤¤¤Ç, È󼫸ʵ½ÒŪ¤Ê¥Ç¡¼¥¿Åù¤ò¤â¤È¤Ë°ì¤«¤é
GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ò¹½À®¤·¤¿¾å¤Ç¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤¹Îã¤ò¼¨¤¹.
¸½ºß¤Î¤È¤³¤í½ñ½Ð¤¹¥Õ¥¡¥¤¥ë·Á¼°¤Ï NetCDF ¤Þ¤¿¤Ï grib ¤À¤±¤Ç,
GrADS ¤Î½ñ½Ð¤·¤Ï¤Þ¤À¥µ¥Ý¡¼¥È¤·¤Æ¤Ê¤¤.
GPhys¥Ç¡¼¥¿¤Î½ñ½Ð¤·
GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÁ´ÂΤò, ¼«¸Êµ½ÒÀ¤òÊݤ俤ޤÞ, ¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤¹¤³¤È¤¬¤Ç¤¤ë. ¼¡¤ÎÎã¤Ç¤Ï, NetCDF ¥Õ¥¡¥¤¥ë¤òÆÉ¤ß¹þ¤ó¤Ç, Îΰè¤ò¸Â¤Ã¤¿°ìÉôʬ¤ò NetCDF ¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤¹. ½ñ½Ð¤¹Îΰè¤ËÂбþ¤·¤ÆºÂɸÊÑ¿ô¤âÀµ¤·¤¯ÀÚ¤ê½Ð¤µ¤ì¤ë.
1: require "numru/gphys"
2: include NumRu
3: gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
4: outfile = NetCDF.create('tmp.nc')
5: GPhys::NetCDF_IO.write( outfile, gphys.cut('level'=>1000..250).mean(0) )
6: GPhys::NetCDF_IO.write( outfile, gphys.cut('level'=>1000..250).mean(0,1).rename('T00') )
7: outfile.close
|
% ruby ncwrite1.rb % ncdump -c tmp.nc netcdf tmp { dimensions: lat = 19 ; level = 5 ; variables: float lat(lat) ; lat:units = "degrees_north" ; lat:actual_range = 90.f, -90.f ; lat:long_name = "Latitude" ; float level(level) ; ...(ÃæÎ¬)... float T(level, lat) ; ...(ÃæÎ¬)... float T00(level) ; ...(ÃæÎ¬)... // global attributes: :history = "2004-03-19 19:40:17 JST horinout> NumRu::GPhys::NetCDF_IO.write T" ; data: lat = 90, 80, 70, 60, 50, 40, 30, 20, 10, 0, -10, -20, -30, -40, -50, -60, -70, -80, -90 ; level = 1000, 850, 600, 400, 250 ; } |
¥½¡¼¥¹¤ÎÂè 5,6 ¹ÔÌܤΤ褦¤Ë,
GPhys::NetCDF_IO.write ¤ò·«¤êÊÖ¤·¤Æ, °ì¤Ä¤Î¥Õ¥¡¥¤¥ë¤ËÊ£¿ô¸Ä¤ÎÊÑ¿ô¤ò
½ñ¤¯¤³¤È¤¬½ÐÍè¤ë.
⤷, NetCDF ¤ÎÀ©Ìó¤ÇƱ¤¸Ì¾Á°¤ÎÊÑ¿ô¤Ï°ì¤Ä¤·¤«½ñ¤±¤Ê¤¤¤Î¤Ç,
¤³¤³¤Ç¤Ï2ÈÖÌܤ˽ñ¤¯¥Ç¡¼¥¿¤ò 'T00' ¤È²þ̾¤·¤Æ¤¤¤ë.
²þ̾¤·¤Ê¤±¤ì¤Ðξ¥Ç¡¼¥¿¤Î̾Á°¤ÏƱ¤¸¤Ê¤Î¤ÇÎã³°¤¬È¯À¸¤¹¤ë.
°ìÊý, ºÂɸÊÑ¿ô¤Î¾ì¹ç¤Ï, Ê£¿ô¤Î GPhys ¤Ç¶¦Í¤·¤Æ¤ë¾ì¹ç¤¬Â¿¤¤¤Î¤Ç,
´û¸¤ÎƱ̾¤Î¤â¤Î¤¬¤¢¤ë¾ì¹ç¤Ï¼¡¸µ¤È¥µ¥¤¥º(shape)¤ò¥Á¥§¥Ã¥¯¤·,
°ìÃפ¹¤ì¤ÐƱ¤¸¤â¤Î¤È¸«¤Ê¤·½ñ¤¹þ¤ß¤ò¾Êά¤¹¤ë.
°ìÃפ·¤Ê¤¤¾ì¹ç¤ÏÎã³°¤¬È¯À¸¤¹¤ë.
¾å¤ÎÎã¤Ç¤Ï, level¤È¤¤¤¦ºÂɸÊÑ¿ô¤¬¶¦Í¤µ¤ì¤Æ¤¤¤ë.
¥Õ¥¡¥¤¥ë·Á¼°¤ÎÊÑ´¹
GPhys¤ò²ð¤¹¤ë¤³¤È¤Ç, ¥Õ¥¡¥¤¥ë¤Î·¿ÊÑ´¹¤ò´Êñ¤Ë¹Ô¤¦¤³¤È¤¬¤Ç¤¤ë.
1: require "numru/gphys"
2: include NumRu
3:
4: usage = "\nUSAGE:\n % #{$0} in_file out_file\n"
5: ifpath = ARGV.shift || raise(usage)
6: ofpath = ARGV.shift || raise(usage)
7:
8: raise "File #{ofpath} present. Delete it if needed." if File.exist?(ofpath)
9: case ofpath
10: when /\.nc$/
11: ofile = NetCDF.create(ofpath)
12: when /\.grib$/
13: ofile = Grib.create(ofpath)
14: else
15: raise "unsupported file type (judged by suffix): "+ofpath
16: end
17:
18: GPhys::IO.var_names_except_coordinates( ifpath ).each do |varname|
19: GPhys::IO.write(ofile, GPhys::IO.open(ifpath, varname) )
20: end
21:
22: ofile.close
|
¤³¤Î¥×¥í¥°¥é¥à¤Ç¤Ï, ÊÑ´¹Àè¤Î¥Õ¥¡¥¤¥ë¤Î·¿¤ò, ¥µ¥Õ¥£¥Ã¥¯¥¹ (.nc ¤« .grib) ¤Ë±þ¤¸¤Æ·è¤á¤Æ¤¤¤ë. ÆþÎÏ¥Õ¥¡¥¤¥ë¤Î·¿¤Ï¼«Æ°È½Ê̤µ¤ì¤ë¤Î¤Ç, ÆÃ¤Ë²¿¤â¤·¤Ê¤¯¤Æ¤è¤¤. ¤Ê¤ª, 19 ¹ÔÌÜ¤Ç¤ÏÆþÎϤ¹¤ë¥Õ¥¡¥¤¥ëÃæ¤ÎÊÑ¿ô¤ò°ìöÁ´Éô¥á¥â¥ê¡¼¤Ë ÆÉ¤ß¹þ¤ó¤Ç¤«¤é¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤¹¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç, µðÂç¥Ç¡¼¥¿¤Î°·¤¤¤Ë¤ÏÁê±þ¤·¤¯¤Ê¤¤. µðÂç¥Ç¡¼¥¿¤Î¼è¤ê°·¤¤ÊýË¡¤Ï¸å½Ò¤¹¤ë. ¤Ê¤ª, GPhys 0.4.0 ¤Ç¤Ï¥Ð¥°¤Î¤¿¤á, ¾åµ¥×¥í¥°¥é¥à¤Ë¤è¤ë grib ¥Õ¥¡¥¤¥ë¤Ø¤ÎÊÑ´¹¤¬¹Ô¤¨¤Ê¤¤. º£¸å¥ê¥ê¡¼¥¹¤µ¤ì¤ë 0.4.1 °Ê¹ß¤¬É¬Íפˤʤë.
¼Â¹ÔÎã (⤷, 3ÈÖÌÜ¤Î¤Ï GPhys 0.4.0 ¤Ç¤ÏÀµ¾ï¤Ë¼Â¹Ô¤Ç¤¤Ê¤¤):
% ruby convert.rb T.jan.grib tmp1.nc % ruby convert.rb T.jan.ctl tmp2.nc % ruby convert.rb T.jan.nc tmp.grib % ls tmp* tmp.grib tmp1.nc tmp2.nc |
½ÐÍ褿¥Õ¥¡¥¤¥ë¤Î³Îǧ:
% ncdump -h tmp1.nc
netcdf tmp1 {
dimensions:
lon = 36 ;
lat = 19 ;
level = 9 ;
variables:
float lon(lon) ;
lon:long_name = "longitude" ;
lon:units = "degrees_east" ;
lon:short_name = "lon" ;
float lat(lat) ;
lat:long_name = "latitude" ;
lat:units = "degrees_north" ;
lat:short_name = "lat" ;
long level(level) ;
level:long_name = "isobaric level" ;
level:units = "hPa" ;
double TMP(level, lat, lon) ;
TMP:time = "0000-01-01 00:00:0.0" ;
TMP:long_name = "Temperature" ;
TMP:units = "K" ;
TMP:standard_name = "air_temperature" ;
// global attributes:
:history = "2005-03-21 18:06:19 JST horinout> NumRu::GPhys::NetCDF_IO.write TMP" ;
}
|
% wgrib tmp.grib
1:0:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=1000:TR=1:P1=0:P2=0:TimeU=0:1000 mb:anl:NAve=0
2:1463:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=850:TR=1:P1=0:P2=0:TimeU=0:850 mb:anl:NAve=0
3:2926:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=600:TR=1:P1=0:P2=0:TimeU=0:600 mb:anl:NAve=0
4:4389:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=400:TR=1:P1=0:P2=0:TimeU=0:400 mb:anl:NAve=0
5:5852:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=250:TR=1:P1=0:P2=0:TimeU=0:250 mb:anl:NAve=0
6:7315:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=150:TR=1:P1=0:P2=0:TimeU=0:150 mb:anl:NAve=0
7:8778:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=70:TR=1:P1=0:P2=0:TimeU=0:70 mb:anl:NAve=0
8:10241:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=30:TR=1:P1=0:P2=0:TimeU=0:30 mb:anl:NAve=0
9:11704:d=00010100:TMP:kpds5=11:kpds6=100:kpds7=10:TR=1:P1=0:P2=0:TimeU=0:10 mb:anl:NAve=0
|
(by À¾ß·À¿Ìé, ²þ: ËÙÇ·Æâ)
°ì¤«¤éNetCDF¥Õ¥¡¥¤¥ë¤ò½ñ¤½Ð¤¹ºÝ¤Ë¤âGPhys¤ò»È¤¦¤È´Êñ¤Ë½ñ¤¯¤³¤È¤¬¤Ç¤¤ë.
°Ê²¼¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¥Õ¥¡¥¤¥ë¤ÏÆÉ¤ß¹þ¤ó¤Ç¤ª¤é¤º, ºÂɸ¾ðÊó¤â´Þ¤á°ì¤«¤é GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ò¹½À®¤·, ¤½¤ì¤ò NetCDF ¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤ¹¤ë. °ìö GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ò·Ðͳ¤¹¤ë¤³¤È¤Ç, RubyNetCDF ¤Î¥á¥½¥Ã¥É¤òľÀܰ·¤ï¤º¤ËºÑ¤ß, ¥×¥í¥°¥é¥à¤¬´Êñ¤Ë¤Ê¤ë.
require "numru/gphys"
include NumRu
nlon = 36
nlat = 18
lon_a = VArray.new( NArray.sfloat(nlon).indgen(0,360.0/nlon),
{"long_name"=>"longitude", "units"=>"degrees_east"},
"lon" )
lon = Axis.new.set_pos(lon_a)
lat_a = VArray.new( NArray.sfloat(nlat).indgen(0,180/nlat),
{"long_name"=>"latitude","units"=>"degrees_north"},
"lat" )
lat = Axis.new.set_pos(lat_a)
data = VArray.new( NArray.sfloat(nlon,nlat).indgen,
{"long_name"=>"temperature", "units"=>"K"},
"T" )
gphys = GPhys.new( Grid.new(lon,lat), data )
file = NetCDF.create("tmp.nc")
GPhys::NetCDF_IO.write(file,gphys)
file.close
|
¾åµ¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·, ½ÐÍè¤ë¥Õ¥¡¥¤¥ë tmp.nc ¤ÎÃæ¿È¤ò³Îǧ¤·¤è¤¦¡§
% ruby ncwrite2.rb % ncdump -c tmp.nc netcdf tmp { dimensions: lon = 36 ; lat = 18 ; variables: float lon(lon) ; lon:long_name = "longitude" ; lon:units = "degrees_east" ; float lat(lat) ; lat:long_name = "latitude" ; lat:units = "degrees_north" ; float T(lat, lon) ; T:long_name = "temperature" ; T:units = "K" ; // global attributes: :history = "2004-04-19 12:02:36 JST horinout> NumRu::GPhys::NetCDF_IO.write T" ; data: lon = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350 ; lat = 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170 ; } |
°ìÊÑ¿ô¤¬¿ô100MB°Ê¾å¤Î¥Ç¡¼¥¿¤ò°·¤¦¾ì¹ç,
°ìÅÙ¤ËÆÉ¤ß¹þ¤à¤È·×»»µ¡¤Î¥á¥â¥ê¡¼¤ò°µÇ÷¤¹¤ë¤Ç¤¢¤í¤¦.
GPhys ¤Ç¤Ï¤½¤ì¤òÈò¤±¤ë¤¿¤á¤Î¹©Éפ¬´ö¤Ä¤«¤¢¤ë.
GPhys¤Ë¤ª¤±¤ë¥µ¥Ö¥»¥Ã¥È¤È¥¯¥í¡¼¥Ë¥ó¥°
¤½¤ÎÂè°ì¤Ï, ¡ÖɬÍפˤʤé¤Ê¤¤¸Â¤ê¥Ç¡¼¥¿¤ÏÆÉ¤ß¹þ¤Þ¤Ê¤¤¡×¤È¤¤¤¦ GPhys ¤ÎÀß·×Êý¿Ë¤Ç¤¢¤ë. Î㤨¤Ð, [] ¤ä cut ¤Ë¤è¤ë¥µ¥Ö¥»¥Ã¥ÈÀÚ¼è¤Ç¤Ï¥Õ¥¡¥¤¥ë¤ÎÆÉ¤ß¹þ¤ß¤ÏȯÀ¸¤·¤Ê¤¤. ²¼µ¤ÎÎã¤ò¸«¤ÆÌ㤤¤¿¤¤.
% irb irb(main):001:0> require "numru/gphys" => true irb(main):002:0> include NumRu => Object irb(main):003:0> gphys = GPhys::IO.open('T.jan.nc','T') => <GPhys grid=<3D grid <axis pos=<'lon' in 'T.jan.nc' sfloat[36]>> <axis pos=<'lat' in 'T.jan.nc' sfloat[19]>> <axis pos=<'level' in 'T.jan.nc' sfloat[9]>>> data=<'T' in 'T.jan.nc' sfloat[36, 19, 9]>> irb(main):004:0> sub = gphys.cut('lon'=>0,'lat'=>10..60) => <GPhys grid=<2D grid <axis pos=<'lat' shape=[6] subset of a NumRu::VArrayNetCDF>> <axis pos=<'level' shape=[9] subset of a NumRu::VArrayNetCDF>>> data=<'T' shape=[6, 9] subset of a NumRu::VArrayNetCDF>> |
sub = gphys.cut('lon'=>0,'lat'=>10..60) ¤Î·ë²Ì¤Îɽ¼¨¤Ë¤ª¤¤¤Æ, 'lat', 'T' ¤Ë¤Ä¤¤¤Æ¤Ï subset of a NumRu::VArrayNetCDF ¤Èɽ¼¨¤µ¤ì¤Æ¤¤¤ë. ¤³¤ì¤Ï, VArray ¤Ë¤ª¤¤¤Æ¥µ¥Ö¥»¥Ã¥ÈºîÀ®¤¹¤ëºÝ, ¿·¥ª¥Ö¥¸¥§¥¯¥È¤ÏÃͤò¥³¥Ô¡¼¤·¤ÆÊÝ»ý¤¹¤ë¤Î¤Ç¤Ê¤¯, ¸µ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î»²¾È¤È¥µ¥Ö¥»¥Ã¥È¤Î¼ÌÁüÊýË¡¤òÊÝ»ý¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤é¤Ç¤¢¤ë. ¾åµ¤Î²Ä»ë²½¤ÎÎã¤Ç¤â, ²Ä»ë²½¤¹¤ë¥Ç¡¼¥¿¤ÎÀÚ¤ê½Ð¤·¤Ï [] ¤ä cut ¤Ç¹Ô¤¦¤¿¤á, ¥Õ¥¡¥¤¥ë¤«¤éÆÉ¤ß¹þ¤Þ¤ì¤ë¥Ç¡¼¥¿¤Ïºî²è¤Ë»È¤ï¤ì¤ëʬ¤Î¤ß¤Ç¤¢¤ë. ¤è¤Ã¤Æ, ñ¤Ë¿Þ¼¨¤¹¤ë¤À¤±¤Ê¤é, µðÂç¤Ê¥Ç¡¼¥¿¤ÎÁ´ÂΤòÁê¼ê¤Ë GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Æ¹½¤ï¤Ê¤¤.
¤Ê¤ª, ¤â¤·¤âÃÍ¤ÎÆÉ¤ß¹þ¤ó¤Ç¥³¥Ô¡¼¤òºîÀ®¤·¤¿¤±¤ì¤Ð copy ¥á¥½¥Ã¥É¤òÍѤ¤¤ì¤Ð¤è¤¤. ¤³¤ì¤Ï¿·¥ª¥Ö¥¸¥§¥¯¥È¤¬µì¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î»²¾È¤ò´Þ¤Þ¤Ê¤¤, ¤¤¤ï¤æ¤ë deep clone ¤òºîÀ®¤¹¤ë (¥ª¥Ö¥¸¥§¥¯¥È¥Ä¥ê¡¼¤ò¤Þ¤ë¤´¤ÈÊ£À½¤¹¤ë). ¼¡¤ò»²¾È¤Î¤³¤È.
¾åµ irb ¥»¥Ã¥·¥ç¥ó¤Î³¤:
irb(main):005:0> csub = sub.copy
=> <GPhys grid=<2D grid <axis pos=<'lat' sfloat[6] val=[60.0,50.0,40.0,30.0,...]>>
<axis pos=<'level' sfloat[9] val=[1000.0,850.0,600.0,400.0,...]>>>
data=<'T' sfloat[6, 9]
val=[4.25522947311401,4.68513584136963,9.936279296875,14.2176637649536,...]>>
|
º£ÅÙ¤ÏÃͤΰìÉô¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ë. ¥Ç¡¼¥¿¤ÏÆÉ¤ß¹þ¤Þ¤ì¤Æ, NArray ¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¥á¥â¥ê¡¼¾å¤ËÊÝ»ý¤µ¤ì¤Æ¤¤¤ë.
¤µ¤Æ, ¾å¤Ç¡ÖɬÍפˤʤé¤Ê¤¤¸Â¤ê¥Ç¡¼¥¿¤ÏÆÉ¤ß¹þ¤Þ¤Ê¤¤¡×¥Ý¥ê¥·¡¼¤òÀâÌÀ¤·¤¿¤¬, ¤½¤Î¡ÖɬÍספϤ·¤Ð¤·¤Ð¤ä¤Ã¤Æ¤¯¤ë. Î㤨¤Ð gphys.mean(0) ¤ä gphys3 = gphys1 + gphys2 ¤Î¤è¤¦¤Ë±é»»¤ò¹Ô¤¦¾ì¹ç¤Ï¤½¤¦¤Ç¤¢¤ë. ¤Þ¤¿, ¥Õ¥¡¥¤¥ë·Á¼°¤ÎÊÑ´¹ ¤ÎÀá¤Ç½Ò¤Ù¤¿¤è¤¦¤Ë, ¥Õ¥¡¥¤¥ë¤òÆÉ¤ó¤Ç½ñ½Ð¤¹ºÝ¤Ë¤â, °ìöÆÉ¤ß¹þ¤ß¤¬È¯À¸¤¹¤ë.
¤³¤Î¤è¤¦¤Ê¾ì¹ç, ÆÉ¤ß¹þ¤ß¤ò¾¯¤·¤º¤Ä¹Ô¤¦¤³¤È¤Ç ¥á¥â¥ê¡¼¤ò°µÇ÷¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤¬¹Í¤¨¤é¤ì¤ë. Î㤨¤Ð¼¡¤Î¤è¤¦¤Ë (¤³¤ì¤ÏÈ󼫯°²½Îã. ¤½¤Î¼¡¤Ë¼«Æ°²½Îã¤ò¼¨¤¹).
1: require "numru/gphys"
2: include NumRu
3:
4: gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
5:
6: #< all at once >
7: print "Case 1: all at once\n"
8: p gphys.mean(0,1).val
9:
10: #< iterate over the last dimension >
11: print "\nCase 2: iterated\n"
12: nz = gphys.axis(2).length
13: for i in 0...nz
14: p gphys[false,i].mean(0,1).val
15: end
|
% ruby iterate_over_dim_1.rb
Case 1: all at once
NArrayMiss.sfloat(9):
[ 5.058, -0.5645, -14.03, -32.75, -49.6, -57.47, -61.5, -53.99, -42.25 ]
Case 2: iterated
5.05842492176078
-0.564510100069102
-14.0251893160636
-32.7455883360746
-49.5988384046053
-57.4673908077485
-61.4999143366228
-53.9931640625
-42.247435809576
|
¤·¤«¤·, ¾å¤ÎÎã¤Ç¤Ï°ìÊդˤ¹¤ë¾ì¹ç¤È, ¥¤¥Æ¥ì¡¼¥¿¡¼¤ò»È¤¦¾ì¹ç¤Ç, ÆÀ¤é¤ì¤ë·ë²Ì¤Ï Ruby ¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ¤ÏƱ¤¸¤Ç¤Ï¤Ê¤¤. Á°¼Ô¤Ï°ì¤Ä¤Î£±¼¡¸µ¥Ç¡¼¥¿¤Ç¤¢¤ë¤Î¤ËÂФ·, ¸å¼Ô¤ÏÊ£¿ô¤Î¥¼¥í¼¡¸µ¤Ç¤¢¤ë¤«¤é.
GPhys¤Ë¤Ï, µðÂç¥Ç¡¼¥¿¤ËÂФ¹¤ë±é»»¤òʬ³ä¤·¤Æ¹Ô¤¦¤³¤È¤ò»Ù±ç¤¹¤ë¥¤¥Æ¥ì¡¼¥¿¡¼¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë. ¤½¤ì¤Ï¼¡¤Î¤è¤¦¤ËÍѤ¤¤ë.
1: require "numru/gphys"
2: include NumRu
3: gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
4:
5: # < all at once >
6: ofile1 = NetCDF.create('tmp1.nc')
7: gp10 = gphys*10
8: GPhys::NetCDF_IO.write(ofile1, gp10)
9: ofile1.close
10:
11: #< iterate over the last dimension >
12: ofile2 = NetCDF.create('tmp2.nc')
13: GPhys::NetCDF_IO.each_along_dims_write(gphys, ofile2, -1) do |sub|
14: sub10 = sub*10
15: [sub10]
16: end
17: ofile2.close
|
Á°È¾¤Ç¤Ï, ¥Ç¡¼¥¿¤ÎÃͤò10Çܤ·¤Æ, "tmp1.nc" ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤¹¤Î¤ÏÌÀÇò¤Ç¤¢¤í¤¦. ¸åȾ¤Ïʬ¤«¤ê¤Ë¤¯¤¤¤«¤â¤·¤ì¤Ê¤¤¤¬, ¼Â¤ÏÁ´¤¯Æ±¤¸·×»»¤ò¤·¤Æ, "tmp2.nc" ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤·¤¹. ¤¿¤À¤·, ¤½¤ÎºÝ, ºÇ¸å¤Î¼¡¸µ¤Ë´Ø¤·¤Æ¥ë¡¼¥×¤ò²ó¤¹. GPhys::NetCDF_IO.each_along_dims_write ¤Ï, 1ÈÖÌܤΰú¿ô¤Ç»ØÄꤷ¤¿ GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ò, 3ÈÖÌܤΰú¿ô¤Ç»ØÄꤷ¤¿¼¡¸µ¤Ë¤½¤Ã¤ÆÊ¬³ä¤·¤Æ¥Ö¥í¥Ã¥¯¤Î°ú¿ô¤È¤· (¾å¤ÎÎã¤Ç¤ÏÊÑ¿ô sub), ¥Ö¥í¥Ã¥¯¤ÎÊÖ¤êÃÍ (¾å¤Ç¤Ï15¹ÔÌܤΠ[sub10]) ¤ò 2 ÈÖÌܤΰú¿ô¤Ç»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤Ë½ñ¤¹þ¤à. ¥Õ¥¡¥¤¥ë¤Ë½ñ¤¤¿¤¤¥Ç¡¼¥¿¤Ï°ì¤Ä¤È¤Ï¸Â¤é¤Ê¤¤¤Î¤Ç, ÊÖ¤êÃÍ¤Ï GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇÛÎó¤È¤¹¤ë. ¤½¤ÎºÝÊÖ¤êÃͤÏÁ´ÂΤΥµ¥Ö¥»¥Ã¥È¤Ç¤¢¤ë¤Ï¤º¤Ç¤¢¤ë¤«¤é, Àµ¤·¤¯Á´ÂΤòÉü¸µ¤·¤¿¾å¤Ç½ñ¤¹þ¤ß¤ò¹Ô¤¦. ¤³¤ÎºÇ¸å¤ÎÅÀ¤¬¥Ý¥¤¥ó¥È¤Ç, ¸Î¤ËÁ°È¾¤ÎÎã¤ÈƱÍͤË, ·ë²Ì¤Ïʬ³ä½èÍý¤ò¹Ô¤ï¤Ê¤«¤Ã¤¿¾ì¹ç¤ÈƱ¤¸¤Ë¤Ê¤ë¤Î¤Ç¤¢¤ë.
¾å¤Ç¤Ï sub ¤Ï, ºÇ¸å¤Î¼¡¸µ¤ÎŤµ¤¬£±¤Ë¤Ê¤ë. Â绨ÇĤ˸À¤¨¤Ð, °Ê²¼¤Î¥ë¡¼¥×¤ò¼Â¹Ô¤·¤Æ¤¤¤ë¤è¤¦¤Ê¤â¤Î¤Ç¤¢¤ë.
for i in 0...gphys.shape[-1] sub = gphys[false, i..i] # i..i ¤Ë¤è¤ê, ºÇ¸å¤Î¼¡¸µ¤ò¾Ã¤µ¤ºÄ¹¤µ£±¤Ë¤¹¤ë. ... end |
Á´ÂΤÎÉü¸µ¤Î¤¿¤á, ¥Ö¥í¥Ã¥¯¤ÎÌá¤êÃͤˤª¤¤¤Æ¤Ï, ʬ³ä¤µ¤ì¤¿¼¡¸µ¤¬¾Ã¤¨¤Æ¤¤¤Æ¤Ï¤Ê¤é¤Ê¤¤.
¤Ê¤ª, GPhys::NetCDF_IO.each_along_dims_write ¤ÎÂè°ì°ú¿ô¤Ï°ì¤Ä¤Î GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤â, Ê£¿ô¤Î GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤òÆþ¤ì¤¿ÇÛÎó¤Ç¤â¤è¤¤. ÆþÎϤΠGPhys ¥ª¥Ö¥¸¥§¥¯¥È¤Î¿ô¤Ë±þ¤¸¤Æ, ¥Ö¥í¥Ã¥¯¤Î°ú¿ô¤Î¿ô¤âÁý¤¨¤ë. ¤Þ¤¿, ¼¡¸µ¤ÏÈÖ¹æ¤Ç¤Ê¤¯Ì¾Á°¤Ç»ØÄꤹ¤ë¤³¤È¤â¤Ç¤¤ë. ¼¡¤Ï¤½¤ÎÎã:
GPhys::NetCDF_IO.each_along_dims_write([gp1,gp2,gp3], ofile2, 'level') do
|sub1, sub2, sub3|
....
|
¤³¤³¤Ç¤Ï gp1, gp2, gp3 ¤¬¶¦Ä̤μ´ 'level' ¤Ë±è¤Ã¤ÆÊ¬³ä¤µ¤ì¤ë. ¤â¤Á¤í¤óÁ´¤Æ¤¬ 'level' ¤È¤¤¤¦¼´¤ò»ý¤Ã¤Æ¤¤¤Æ, ¤½¤ÎŤµ¤¬Åù¤·¤¤¤Î¤Ç¤Ê¤±¤ì¤Ð¥¨¥é¡¼¤Ë¤Ê¤ë.
½ÐÎϤ¹¤ë¥Õ¥¡¥¤¥ë¤âÊ£¿ô»ØÄꤷ¤Æ¹Ô¤Àè¤òʬ¤±¤ë¤³¤È¤â¤Ç¤¤ë. ¤Þ¤¿Ê¬³ä¤Ë»È¤¦¼¡¸µ¤òÊ£¿ô»ØÄꤹ¤ë¤³¤È¤â½ÐÍè¤ë:
GPhys::NetCDF_IO.each_along_dims_write(gp, [ofile1, ofile2], 'lat', 'level') do
|sub|
....
[res1, res2]
end
|
¤³¤³¤Ç¤Ï res1 ¤Ï ofile1, res2 ¤Ï ofile2 ¤Ë½ñ¤«¤ì¤ë. ÊÖ¤êÃͤθĿô¤¬¥Õ¥¡¥¤¥ë¿ô¤è¤êÂ礤¤¾ì¹ç¤Ï, Ê£¿ô¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬¤Þ¤È¤á¤Æ(»ØÄꤷ¤¿ºÇ¸å¤Î)½ÐÎÏ¥Õ¥¡¥¤¥ë¤ËÆþ¤ë.
GPhys::NetCDF_IO.each_along_dims_write ¤Ï·ë²Ì¤ò NetCDF ¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤¹. ¾ÍèŪ¤Ë¤Ï, ¥Õ¥¡¥¤¥ë¤Ë½ñ½Ð¤µ¤Ê¤¤ GPhys::each_along_dims ¤È¤¤¤¦¥á¥½¥Ã¥É¤âºîÀ®¤¹¤ëͽÄê¤Ç¤¢¤ë. ¤³¤ì¤ÏÆþÎϥǡ¼¥¿¤ÏµðÂç¤À¤¬, ½èÍý¤Î·ë²Ì¤Ï¾®¤µ¤¤¤È¤¤¤¦¾ì¹ç¤ËÍÍѤǤ¢¤í¤¦. (·ë²Ì¤âµðÂç¤Ê¤é¥Õ¥¡¥¤¥ë¤Ë½Ð¤µ¤¶¤ë¤òÆÀ¤Ê¤¤¤Î¤Ç, ¤Þ¤º¤½¤Á¤é¤ò¼ÂÁõ¤·¤¿¤Î¤Ç¤¢¤ë.)
GPhys ¤Ï¤¢¤ë¥Ç¡¼¥¿¤Î¥µ¥Ö¥»¥Ã¥È¤ò, ¤¢¤¿¤«¤âÁ´ÂΤǤ¢¤ë¤¬¤´¤È¤¯°·¤¨¤ë¤³¤È¤Ï´û¤ËÀâÌÀ¤·¤¿. ¤½¤ì¤È¤ÏµÕ¤Ë, ¼ÂºÝ¤Ë¤Ï°ì¤Ä¤Î¥Ç¡¼¥¿¤¬Ê£¿ô¤Î¥Õ¥¡¥¤¥ë¤Ëʬ³ä¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤â°·¤¦¤³¤È¤¬½ÐÍè¤ë. ⤷, ¸½ºß¤³¤Îµ¡Ç½¤Ï NetCDF ¤Î¤ß¤Ë´Ø¤·¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë.
Î㤨¤Ð, ÆüÊ¿¶Ñ¤Îµ¤²¹¤Î¥Ç¡¼¥¿¤¬Ç¯¤´¤È¤Ë T.2001.nc, T.2002.nc, T.2003.nc ¤Èʬ¤«¤ì¤Æ¤¤¤ë¤È¤·¤è¤¦. ¤³¤Î£³Ç¯Ê¬¤Î¥Ç¡¼¥¿¤ÎÊ¿¶Ñ¤ò¤È¤ë¤È¤« 2001 ǯ 11 ·î¤«¤é 2002 ǯ 2 ·î¤Þ¤Ç¤ÎÊ¿¶Ñ¤ò¼è¤í¤¦¤È»×¤¦¤È (µ¤¾Ý´Ø·¸¤Î¿Í¤ÏÎɤ¯¤¢¤ê¤Þ¤¹¤Í?), Ä̾ï¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ç¤Ï, ¤Þ¤º¤³¤ì¤é¤Î¥Õ¥¡¥¤¥ë¤ò¤¯¤Ã¤Ä¤±¤ëɬÍפ¬¤¢¤ë¤À¤¢¤í¤¦. ¤·¤«¤·, GPhys ¤Ç¤Ï, °Ê²¼¤Î¤è¤¦¤Ë¤¹¤ì¤ÐÎɤ¤
gphys = GPhys::IO.open(['T.2001.nc','T.2002.nc','T.2002.nc'], 'T') |
¤Þ¤¿¤Ï
gphys = GPhys::IO.open( /T.(\d\d\d\d).nc/, 'T') |
Á°¼Ô¤Ï¥Õ¥¡¥¤¥ë¤ò°ì¼¡¸µ¤ÎÇÛÎó¤Ë¼ý¤á¤ë¤³¤È¤Ç, °ì¼¡¸µ¤Îʬ³ä¤Ç¤¢¤ë¤³¤È¤ò GPhys::IO.open ¤Ë¶µ¤¨¤Æ¤¤¤ë. 2¼¡¸µÊ¬³ä¤Ê¤é2¼¡¸µÇÛÎó¤òÍѤ¤¤ë. ¸å¼Ô¤Ï, Àµµ¬É½¸½¤Ç¥Õ¥¡¥¤¥ë¤ò»ØÄꤷ¤Æ¤¤¤ë. ¤³¤³¤Ç¤Ï¥Õ¥¡¥¤¥ë¤Ë¤è¤Ã¤ÆÊѲ½¤¹¤ë¥Ñ¥¿¡¼¥ó¤ò³ç¸Ì¤Ç°Ï¤à¤³¤È¤¬É¬ÍפǤ¢¤ë. ³ç¸Ì¤¬°ì¤Ä¤Ç¤¢¤ì¤Ð°ì¼¡¸µÊ¬³ä¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë.
¤Ç¤Ï, ¤³¤ì¤Þ¤Ç¤ÈƱ¤¸¥Ç¡¼¥¿¤ò»È¤Ã¤Æ, ʬ³ä¥Õ¥¡¥¤¥ë¤ÎÆÉ¤ß¹þ¤ß¤Î¥Ç¥â¤ò¤·¤è¤¦. ¤Þ¤º»Ï¤á¤Ë¥Õ¥¡¥¤¥ë¤òʬ³ä¤·, ²þ¤á¤Æ¤½¤ì¤òÆÉ¤ß¿Þ¤òÉÁ¤¯¤³¤È¤Ë¤¹¤ë.
1: require "numru/ggraph"
2: include NumRu
3: gp = GPhys::IO.open('T.jan.nc', 'T')
4:
5: # < create test files: divide into 4 files (2 by 2) >
6:
7: GPhys::IO.write( f=NetCDF.create('tmp00.nc'), gp[0..17,0..9,{0..6,6}] )
8: f.close
9: GPhys::IO.write( f=NetCDF.create('tmp01.nc'), gp[0..17,10..-1,{0..6,6}])
10: f.close
11: GPhys::IO.write( f=NetCDF.create('tmp10.nc'), gp[18..-1,0..9,{0..6,6}])
12: f.close
13: GPhys::IO.write( f=NetCDF.create('tmp11.nc'), gp[18..-1,10..-1,{0..6,6}])
14: f.close
15:
16: # < open two-dimentionally divided data >
17:
18: files = /tmp(\d)(\d).nc/
19: p gpcompo = GPhys::IO.open( files, 'T' )
20:
21: # < test graphics >
22:
23: DCL.gropn(1)
24: DCL.sgpset('lcntl', false) ; DCL.uzfact(0.7)
25: DCL.sldiv('y',2,1)
26: GGraph.contour( gpcompo )
27: GGraph.contour( gpcompo[false,1] )
28: DCL.grcls
29:
30: # < clean up >
31:
32: File.unlink('tmp00.nc')
33: File.unlink('tmp01.nc')
34: File.unlink('tmp10.nc')
35: File.unlink('tmp11.nc')
|
¾å¤Ç¤Ï·ÐÅÙ¡¦°ÞÅ٤˴ؤ·¤Æ¤½¤ì¤¾¤ì¥Ç¡¼¥¿¤ò£²Ê¬³ä¤·, tmp00.nc, tmp01.nc, tmp10.nc, tmp11.nc ¤È¤¤¤¦£´¤Ä¤Î¥Õ¥¡¥¤¥ë¤Ë¼ý¤á¤Æ¤¤¤ë. ¤½¤ì¤ò, Àµµ¬É½¸½¤ò»È¤Ã¤Æ /tmp(\d)(\d).nc/ ¤È¤¤¤¦·Á¤Ç»ØÄꤷ, GPhys ¥ª¥Ö¥¸¥§¥¯¥È gpcompo ¤ò³«¤¤¤Æ¤¤¤ë. ¤½¤Î·ë²Ì¤ò¿Þ¼¨¤¹¤ë¤È²¼¤Î¤è¤¦¤ËÁ´µå¤Î²¹ÅÙʬÉÛ¤¬É½¼¨¤µ¤ì¤ë. ¤Ê¤ª, Âè3¼¡¸µÌÜ(°µÎÏ)¤Ë´Ø¤·¤Æ¤ÏºÇ²¼ÁØÊ¤Ӥ˲¼¤«¤é 7ÈÖÌܤÎÁؤÀ¤±¤òÀÚ¤ê½Ð¤·¤Æ¤¤¤ë. ²¼¤Î¿Þ¤Î2ËçÌÜ¤Ï 70 mb ¤Î¿Þ¤È¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ËÃí°Õ. ¥×¥í¥°¥é¥à¤ÎºÇ¸å¤Ç, ºîÀ®¤·¤¿¥Õ¥¡¥¤¥ë tmp??nc ¤ò¾Ã¤·¤Æ¤¤¤ë.
ºÆ¤Ó²Ä»ë²½¤ÎÏÃÂê¤ËÌá¤ë.
ÆÉ¤ß¹þ¤ß¥Õ¥¡¥¤¥ë¤Î³èÍÑ
¾å½Ò¤Î GGraph ÍÑ irb ¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë ¤ÎÍøÍÑ¤Ï irb ¤Î¤ß¤Ë¸Â¤ëɬÍפϤʤ¤. ²¼¤Î¤è¤¦¤ËÄ̾ï¥×¥í¥°¥é¥à¤Ë¤ª¤¤¤Æ¤â, GGraph ÍøÍÑ»þ¤Î½èÍý¤ò¤Þ¤È¤á¤¿¤â¤Î¤È¤·¤ÆÍѤ¤¤ë¤³¤È¤¬¤Ç¤¤ë. ⤷, ¥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤ÎÃæ¿È¤ò½ñ¤´¹¤¨¤ë¤È¼Â¹ÔÆâÍÆ¤¬ÊѤë¤Î¤Ç, Ť¯¼è¤Ã¤Æ¤ª¤¯¥×¥í¥°¥é¥à¤ËÍøÍѤ¹¤ë¤³¤È¤ÏÁ¦¤á¤Ê¤¤. ¤Þ¤¿, ÂÐÏýèÍý¤È¥×¥í¥°¥é¥à¼Â¹Ô¤Ç¤Ï°Û¤Ê¤ëÀßÄ꤬¹¥¤Þ¤·¤¤¾ì¹ç¤â¤¢¤ë¤À¤í¤¦¤«¤é (Î㤨¤Ð DCL ¤Î¥Ñ¥é¥á¥¿¡¼ 'lwait' ¤Ï, Ä̾ï¤ÏÊѹ¹¤·¤Ê¤¤¤Î¤¬¤è¤«¤í¤¦), ¼ÂºÝ¤Ë¤Ï irb ÍѤΤȤÏÊ̤˥¹¥¿¡¼¥È¥¢¥Ã¥×¥Õ¥¡¥¤¥ë¤òÍѰդ¹¤ë¤Î¤¬Îɤ¤¤À¤í¤¦.
1: require File.expand_path("~/.irbrc_ggraph.rb") # irbÍѤΤòήÍÑ
2: gphys = GPhys::IO.open('T.jan.nc', 'T')
3: GGraph.contour( gphys )
4: DCL.grcls
|
¤³¤³¤Ç File.expand_path ¤Ï ~
¤ò¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¡¼¤È¤·¤ÆÅ¸³«¤¹¤ë¤¿¤á¤ËÍѤ¤¤Æ¤¤¤ë.
ÉÁ²è¥ª¥×¥·¥ç¥ó
¤È¤ê¤¢¤¨¤º, ¾å¤Ç½ñ¤¤¤¿ÀÞ¤ìÀþ¤Ë¤ª¤¤¤Æ, ±¦¾åÏȳ°¤Î¥á¥Ã¥»¡¼¥¸¡Ê"lon=130.0 degrees_east" Åù¡Ë ¤òɽ¼¨¤·¤Ê¤¤¤è ¤¦¤Ë¤·¤Æ¤ß¤è¤¦. ¤½¤¦¤¹¤ì¤Ðɽ¼¨¤¹¤ëʸ»ú¤Ë¥¢¥ó¥À¡¼¥¹¥³¥¢¡¼¤¬´Þ¤Þ¤ì¤Ê¤¯¤Ê¤ë¤Î¤Ç, À©¸æÊ¸»ú²ò¼á¤òÍÞÀ©¤·¤Ê¤¯¤Æ¤âÎɤ¤¡§
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.nc', 'T')
4: DCL.gropn(1)
5: DCL.uzfact(0.7)
6: GGraph.set_fig( 'itr'=> 2 )
7: GGraph.line( gphys.cut(135,35,false), true, 'exchange'=>true, 'annot'=>false )
8: DCL.grcls
|
¤³¤³¤Ç¤Ï¥ª¥×¥·¥ç¥ó 'annotate' ¤ò false ¤Ë¤·¤¿. ¥ª¥×¥·¥ç¥ó̾¤Ï, Á°Êý°ìÃ×¤Ç¸å ¤í¤ò¾Êά¤Ç¤¤ë(ÌÞÏÀ2¤Ä°Ê¾å¤Î¥ª¥×¥·¥ç¥ó̾¤Ë¥Þ¥Ã¥Á¤¹¤ë¤è¤¦¤Ê¾Êά¤Ï¤Ç¤¤Ê¤¤).
line_4.rb¼Â¹Ô·ë²Ì
ÉÁ²è¥á¥½¥Ã¥É¤Î¥ª¥×¥·¥ç¥ó¤Î»ÅÁȤß
¤³¤ì¤Þ¤Ç, ÉÁ²è¥á¥½¥Ã¥É¤Î¥ª¥×¥·¥ç¥ó¤¬´ö¤Ä¤«½Ð¤Æ¤¤¿¤¬, 'exchange'=>true ¤È¤¤¤Ã¤¿½ñ¼°¤Ë¸ÍÏǤ俤«¤â¤·¤ì¤Ê¤¤¤Î¤Ç, ²òÀ⤹¤ë. ¾å¤Î¥×¥í¥°¥é¥à¤Ë¤ª¤±¤ë
GGraph.line( gphys.cut(135,35,false), true, 'exchange'=>true, 'annot'=>false ) |
¤Ï,
GGraph.line( gphys.cut(135,35,false), true, {'exchange'=>true, 'annot'=>false})
|
¤Î¾Êά·Á¤Ç¤¢¤ë(Ruby¤Îʸˡ¾å¤½¤¦¤Ê¤Ã¤Æ¤¤¤ë). ¤½¤·¤Æ,
{'exchange'=>true, 'annot'=>false}
|
¤Ï, Ï¢ÁÛÇÛÎó(Hash)¤ÎÄêµÁ¤ò°ÕÌ£¤¹¤ë. ¤Ä¤Þ¤ê, °ú¿ô¤ÎºÇ¸å¤Ë key => value ¤òÏ¢¤Í¤¿¤â¤Î¤Ï, Ï¢ÁÛÇÛÎó¤ÎÄêµÁ¤È ¸«¤Ê¤µ¤ì¤ë¤Î¤Ç¤¢¤ë. ¾å¤ÎÎã¤Ç¤Ï, ʸ»úÎó 'exchange' ¤ËÂФ· true ¤ò, ʸ»úÎó 'annot' ¤ËÂФ· false ¤ò³ä¤êÅö¤Æ¤ëÏ¢ÁÛÇÛÎ󤬺î¤é¤ì¤ë. ¤È¤¤¤¦¤ï¤±¤Ç, ²¼¤Î¤è¤¦¤Ëʬ²ò¤¹¤ë¤Èʬ¤«¤ê¤ä¤¹¤¤¤Ç¤¢¤í¤¦.
hash = {'exchange'=>true, 'annot'=>false}
GGraph.line( gphys.cut(135,35,false), true, hash )
|
GGraph.line( gphys.cut(135,35,false), true, 'exchange'=>true, 'annot'=>false ) |
Ï¢ÁÛÇÛÎó Hash ¤Ë¤ª¤¤¤Æ¤Ï, ¡Ö¥¡¼¡×¤Ï´°Á´°ìÃפǤʤ±¤ì¤Ð¤Ê¤é¤Ê¤¤¤¬,
GGraph ¤Ç¤ÏÁ°Êý°ìÃפǺѤà¤è¤¦¹©Éפ·¤Æ¤¤¤ë. ¤½¤ì¤ò»Ù¤¨¤ë¤Î¤Ï,
GPhys ËÜÂΤǤϤʤ¯
Misc ¥é¥¤¥Ö¥é¥ê¡¼ ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤ë, KeywordOpt ʤӤˤ½¤Î¥µ¥Ö¥¯¥é¥¹
¤Ç¤¢¤ë KeywordOptAutoHelp ¤Ç¤¢¤ë. Misc¥é¥¤¥Ö¥é¥ê¡¼¤Ï, Ruby¥×¥í¥°¥é¥ß¥ó
¥°Á´È̤ò»Ù±ç¤¹¤ë, °ìÈÌÀ¤Î¹â¤¤¥é¥¤¥Ö¥é¥ê¡¼¤ò½¸¤á¤¿¤â¤Î¤Ç¤¢¤ë.
¥ª¥×¥·¥ç¥ó¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤòÃΤë
³Æ¥á¥½¥Ã¥É¤Î¥ª¥×¥·¥ç¥ó¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤÏ, GGraph ¥Þ¥Ë¥å¥¢¥ë¤ËºÜ¤Ã¤Æ¤¤¤ë¤¬, °Ê²¼¤Î¤è¤¦¤Ë¤âÄ´¤Ù¤é¤ì¤ë. ¤³¤³¤Ç¤Ï, Ruby ¤ÎÂÐÏÃ¥·¥§¥ë irb ¤ò»È¤ª¤¦. °Ê²¼¤Ç irb(main):001:0> Åù¤Ï irb ¤Î¥×¥í¥ó¥×¥È¤Ç¤¢¤ë. ¥×¥í¥ó¥×¥È¤Î¤Ê¤¤¹Ô¤Ï, irb ¤Ë¤è¤ë½ÐÎϤǤ¢¤ë.
% irb irb(main):001:0> require "numru/ggraph" => true irb(main):002:0> include NumRu => Object irb(main):003:0> GGraph.line( nil, true, 'help'=>true ) << Description of options >> option name default value # description: "title" nil # Title of the figure(if nil, internally # determined) "annotate" true # if false, do not put texts on the right # margin even when newframe==true "exchange" false # whether to exchange x and y axes "index" 1 # line/mark index "type" 1 # line type "label" nil # if a String is given, it is shown as the label "max" nil # maximam data value "min" nil # minimam data value "help" false # show help message if true Current values={"annotate"=>true, "help"=>true, "title"=>nil, "type"=>1, "max"=>nil, "exchange"=>false, "index"=>1, "min"=>nil, "label"=>nil} NumRu::Misc::HelpMessagingException: ** help messaging done ** from /usr/local/lib/ruby/site_ruby/1.8/numru/misc/keywordopt.rb:343:in `interpret' from /usr/local/lib/ruby/site_ruby/1.8/numru/ggraph.rb:2389:in `line' from (irb):3 irb(main):004:0> |
¾å¤Ç¤Ï, ¤Þ¤º¤ªÌó«¤Î£²¹Ô¡Êrequire "numru/ggraph" ¤È include NumRu¡Ë¤òÂǤÁ¹þ¤ó¤À¸å, GGraph.line ¤ò ¥ª¥×¥·¥ç¥ó 'help'=>true ¤ò»ØÄꤷ¤Æ¼Â¹Ô¤·¤Æ¤¤¤ë. ¤¹¤ë¤È, ¤½¤Î²¼¤Î¤Ë¼¨¤µ¤ì¤¿¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤ë. ¤³¤Î¤È¤¼Â¹Ô¤ÏÃæÃǤµ¤ì, ÉÁ²è¤Ï¹Ô¤ï¤ì¤Ê¤¤¤Î¤Ç, ¥Ç¡¼¥¿¤Ï¥À¥ß¡¼¤ÇÎɤ¤. ¾å¤Ç¤Ï, nil ¤òÍ¿¤¨¤Æ¤¤¤ë (GGraph.line¤ÎÂ裱°ú¿ô).
¤½¤ì¤Ç¤Ï°ú¤Â³¤, ¾¤ÎÉÁ²è¥á¥½¥Ã¥É¤Î¥ª¥×¥·¥ç¥ó¤òɽ¼¨¤·¤Æ¤ß¤è¤¦.
irb(main):004:0> GGraph.contour( nil, true, 'help'=>true )
<< Description of options >>
option name default value # description:
"title" nil # Title of the figure(if nil, internally
# determined)
"annotate" true # if false, do not put texts on the right
# margin even when newframe==true
"transpose" false # if true, exchange x and y axes
"min" nil # minimum contour value
"max" nil # maximum contour value
"nlev" nil # number of levels
"interval" nil # contour interval
"nozero" nil # delete zero contour
"coloring" false # set color contours with ud_coloring
"clr_min" 13 # (if coloring) minimum color id
"clr_max" 100 # (if coloring) maximum color id
"help" false # show help message if true
"levels" nil # contour levels (Array/NArray of Numeric)
"index" nil # (if levels) line index(es) (Array/NArray of
# integers, Integer, or nil)
"line_type" nil # (if levels) line type(s) (Array/NArray of
# integers, Integer, or nil)
"label" nil # (if levels) contour label(s) (Array/NArray of
# String, String, true, false, nil). nil is
# recommended.
"label_height" nil # (if levels) label height(s) (Array/NArray
# of Numeric, Numeric, or nil). nil is recommended.
Current values={"label_height"=>nil, "annotate"=>true, "help"=>true, "title"=>nil, "coloring"=>false, "transpose"=>false, "max"=>nil, "nlev"=>nil, "line_type"=>nil, "min"=>nil, "clr_max"=>100, "index"=>nil, "levels"=>nil, "interval"=>nil, "nozero"=>nil, "label"=>nil, "clr_min"=>13}
NumRu::Misc::HelpMessagingException: ** help messaging done **
from /usr/local/lib/ruby/site_ruby/1.6/numru/misc/keywordopt.rb:343:in `interpret'
from /usr/local/lib/ruby/site_ruby/1.6/numru/ggraph.rb:1350:in `contour'
from (irb):4
irb(main):005:0>
|
¤³¤Î·ë²Ì¤«¤é¤ï¤«¤ë¤è¤¦¤Ë, ¼Â¹ÔÃæÃÇ¤Ï NumRu::Misc::HelpMessagingException ¤È¤¤¤¦Îã³°¤ò¾å¤²¤ë¤³¤È¤Ç¹Ô¤ï¤ì¤ë. irb ¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç, Îã³°¤¬¾å¤¬¤ë¤È À©¸æ¤¬¥æ¡¼¥¶¡¼¤ËÌá¤ê¼¡¤Î¥×¥í¥ó¥×¥È¤¬É½¼¨¤µ¤ì¤ë. ¥×¥í¥°¥é¥à¤ò¥Õ¥¡¥¤¥ë¤Ë ¤¹¤ë¾ì¹ç, Ä̾ï¤ÏÎã³°¤¬¾å¤¬¤ë¤È¼Â¹Ô¤¬ÃæÃǤ¹¤ë. ÃæÃǤµ¤»¤¿¤¯¤Ê¤¤¾ì¹ç, ²¼¤Î¤è¤¦¤Ë begin ¡Á rescure ¡Á end Àá¤ÇÊݸ¤ì¤Ð¤è¤¤.
require "numru/ggraph" include NumRu begin print "\n** optoions of GGraph.line **\n" GGraph.line( nil, true, 'help'=>true ) rescue end begin print "\n** optoions of GGraph.contour **\n" GGraph.contour( nil, true, 'help'=>true ) rescue end |
¼Â¹Ô·ë²Ì¤Ï irb ¤Î¾ì¹ç¤ÈƱÍͤʤΤǾÊά¤¹¤ë. help¥ª¥×¥·¥ç¥ó¤òÉÕ¤±¤é¤ì¤ë¤½¤Î¾¤Î¥á¥½¥Ã¥É¤Ï, GGraph.fig, GGraph.axes, GGraph.mark, GGraph.tone ¤Ç¤¢¤ë.
¾åµ¤Î help ¥á¥Ã¥»¡¼¥¸É½¼¨¤Çʬ¤«¤ë¤è¤¦¤Ë,
GGraph ¤ÎÉÁ²è¥á¥½¥Ã¥É¤Ë¤ÏÍÍ¡¹¤Ê¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë.
¥ª¥×¥·¥ç¥ó¤Ë¤è¤ë»ØÄê¤Ï¤½¤Î»þ¤Ë¸Â¤ê¤À¤¬,
¥Ç¥Õ¥©¥ë¥ÈÃͤòÊѤ¨¤ë¤³¤È¤Ç, ¤½¤Î¸å¤º¤Ã¤È͸ú¤ÊÀßÄê¤â¤Ç¤¤ë.
°Ê²¼¤ËÎã¤ò¼¨¤¹.
¥³¥ó¥¿¡¼¡¿¥È¡¼¥ó (¥ì¥Ù¥ë¼«Æ°À¸À®)
1: require "numru/ggraph"
1: include NumRu
2: gphys = GPhys::IO.open('T.jan.nc', 'T')
3:
4: #< DCL¤Î¥ª¡¼¥×¥ó¤ÈÀßÄê >
5: DCL.gropn(1)
6: DCL.sldiv('y',2,2) # 2x2¤Ë²èÌÌʬ³ä, 'y'=yoko: º¸¾å¢ª±¦¾å¢ªº¸²¼...
7: DCL.sgpset('lcntl', false) # À©¸æÊ¸»ú¤ò²ò¼á¤·¤Ê¤¤
8: DCL.sgpset('lfull',true) # Á´²èÌÌɽ¼¨
9: DCL.uzfact(0.75) # ºÂɸ¼´¤Îʸ»úÎó¥µ¥¤¥º¤ò 0.75 ÇÜ
10: DCL.sgpset('lfprop',true) # ¥×¥í¥Ý¡¼¥·¥ç¥Ê¥ë¥Õ¥©¥ó¥È¤ò»È¤¦
11:
12: #< GGraph ¤Ë¤è¤ë ÉÁ²è >
13: GGraph.set_fig('viewport'=>[0.15,0.75,0.15,0.6]) # set_*: ¤º¤Ã¤È͸ú¤ÊÀßÄê
14: # 1ËçÌÜ
15: GGraph.contour( gphys )
16: GGraph.tone( gphys, false, 'ltone'=>false ) # ¥¼¥í°Ê²¼¤Ë¥·¥§¡¼¥Ç¥£¥ó¥°
17: # 2ËçÌÜ
18: GGraph.next_fig('itr'=>2 ) # next_*: ¼¡¤À¤±Í¸ú¤ÊÀßÄê
19: GGraph.contour( gphys.average(0), true, 'color'=>true ) # Æú¿§¥³¥ó¥¿¡¼
20: # 3ËçÌÜ
21: GGraph.set_axes('xunits'=>'','yunits'=>'') # ¶õʸ»úÎó --> ¼´¤Îñ°Ì¤Ï½ñ¤«¤Ê¤¤
22: GGraph.tone( gphys.cut(true,true,70) ) # tone ¤Î¥Ç¥Õ¥©¥ë¥È¤Ï¥«¥é¡¼É½¼¨
23: GGraph.contour( gphys.cut(true,true,70), false ) # Âè2°ú¿ô false -> ½Å¤Í½ñ¤
24: # 4ËçÌÜ
25: GGraph.set_linear_contour_options( 'min'=>0, 'nlev'=>20 )
26: # contour¤Î¥Ç¥Õ¥©¥ë¥ÈÊѹ¹. ¼¡²ó¤Î¤ß͸ú¤Ênext_linear..¤â¤¢¤ë
27: GGraph.contour( gphys.average(0) )
28:
29: #< ¤ª¤·¤Þ¤¤ >
30: DCL.grcls
|
¼Â¹Ô¤¹¤ë¤È, ²¼¤Î¤è¤¦¤Ë¥³¥ó¥¿¡¼µÚ¤Ó¿§Åɤê¤Î¿Þ¤¬4Ëçɽ¼¨¤µ¤ì¤ë¤Ï ¤º¤Ç¤¢¤ë. ³Æ¹Ô¤Î²òÀâ¤Ï¥×¥í¥°¥é¥àÃæ¤Ë½ñ¤¤¤Æ¤¢¤ë¤Î¤Ç¤¢¤Þ¤êɬÍפʤ«¤í¤¦. ¤³¤³¤Ç¤Ï°ìÉô¤À¤±²òÀ⤹¤ë. Âè16¹ÔÌÜ¤Ç¤Ï 'ltone'=>false ¤Ë¤è¤ê, Ãͤ¬¥¼¥í°Ê²¼¤ÎÎΰè¤ËÂФ¹¤ë¥·¥§¡¼¥Ç¥£¥ó¥°¤È¤Ê¤ë. ¤³¤ì¤Ï DCL ¤Î¥È¡¼¥ó¥é¥¤¥Ö¥é¥ê¡¼ UEPACK ¤Î¥ª¥×¥·¥ç¥ó¤½¤Î¤Þ¤Þ¤Ç¤¢¤ë. ⤷, UEPACK ¤Ç¤Ï 'ltone' == false ¤¬¥Ç¥Õ¥©¥ë¥È¤Ç¤¢¤ë¤Î¤ËÂФ·, GGraph ¤Ç¤Ï 'ltone' == true ¤ò¥Ç¥Õ¥©¥ë¥È¤Ë¤·¤Æ¤¤¤ë.
¤µ¤é¤Ë, Á´È̤ˤ«¤«¤ï¤ë¤³¤È¤òÊ䤹¤ë. GGraph¤Ç¤Ï, °ìÈ̤ËÉÁ²è¥á¥½¥Ã¥É hogehoge ¤ËÂФ·, ¥ª¥×¥·¥ç¥ó¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤòÊѹ¹¤¹¤ë set_hogehoge ¤¬Â¸ºß¤¹¤ë. ¤Þ¤¿, ¥ª¥×¥·¥ç¥ó¤È¤¹¤ë¤Ë¤Ï Ť¹¤®¤¿¤ê, ¤¢¤ë¤¤¤Ï¥ª¥×¥·¥ç¥ó¤ò»È¤¦¤³¤È¼«ÂΤ¬¹¥¤ß¤Ç¤Ê¤¤¿Í¤Î¤¿¤á¤Ë, next_hogehoge ¤È¤¤¤¦¥á¥½¥Ã¥É¤¬ÍѰդ·¤Æ¤¢¤ê, ¼¡²ó¤Î hogehoge ¤Î¤ß¤Ë±Æ¶Á¤òÍ¿¤¨¤ë ¡Ê¤Ä¤Þ¤ê·ë²Ì¤Ï hogehoge ¤Ë¥ª¥×¥·¥ç¥ó¤òÍ¿¤¨¤ë¤Î¤ÈƱ¤¸¡Ë. ¤¿¤À¤·, contour¤Î¾ì¹ç, ¼«Æ°¥ì¥Ù¥ëÀ¸À®¤Ë´Ø¤ï¤ë (set|next)_linear_contour_options ¤È, ¥ì¥Ù¥ë¤òÍۤ˻ØÄꤹ¤ë (set|next)_contour_levels ¤Ëʬ¤«¤ì¤Æ¤¤¤ë. ¿§Åɤ꡿¥·¥§¡¼¥Ç¥£¥ó¥° ¤ò¹Ô¤¦ tone ¤Ë¤Ä¤¤¤Æ¤âƱÍÍ.
contour ¤Ç¤Ï, ¥ª¥×¥·¥ç¥ó coloring¤òÀßÄꤹ¤ë¤È, ¥«¥é¡¼¥³¥ó¥¿¡¼¤òÀ¸À®¤¹¤ë. ¤½¤Î¾ì¹ç, ¥ª¥×¥·¥ç¥ó¤Ç¥³¥ó¥¿¡¼¤ÎºÇ¾®ÃͤȺÇÂçÃͤ˳ä¤êÅö¤Æ¤ë¿§¤ò»ØÄê¤Ç¤¤ë (clr_min ¤È clr_max).
¥³¥ó¥¿¡¼¡¿¥È¡¼¥ó¥ì¥Ù¥ë¤Ï, ¼¡¹à¤ÇÀâÌÀ¤¹¤ëÌÀ¼¨Åª¤Ê¥ì¥Ù¥ë»ØÄê¤ò¹Ô¤ï¤Ê¤±¤ì¤Ð, Åù´Ö³Ö¤ËÀ¸À®¤µ¤ì¤ë. ¤½¤ÎºÝ, ´°Á´¤ªÇ¤¤»¤â½ÐÍè¤ë¤·, (1)ºÇ¾®ÃÍ(min), (2)ºÇÂçÃÍ(max), (3)´Ö³Ö(interval)¤Þ¤¿¤ÏËÜ¿ô (nlev), ¤Î£³¤Ä¤Î¥Ñ¥é¥á¥¿¡¼¤Î ¤¦¤ÁǤ°Õ¸Ä¤ò»ØÄꤷ¤ÆÀ©¸æ¤¹¤ë¤³¤È¤â¤Ç¤¤ë. ´Ö³Ö¤ÈËÜ¿ô¤ÎξÊý¤ò»ØÄꤹ¤ë¤È, ¸å¼Ô¤Ï̵»ë¤µ¤ì¤ë. ºÇ½ªÅª¤ÊÀ¸À®¤Ï DCL.udgcl[ab], DCL.uegtl[ab] ¤ËǤ¤µ¤ì¤ë¤Î¤Ç, »ØÄꤷ¤¿ºÇÂç¡¿ºÇ¾®ÃͤÏÀÚ¤ê¤Î¤è¤¤ÃͤËÊÑ´¹¤µ¤ì¤ë. ÅöÁ³, icycle ¤Ê¤É¤Î (UD|UE)PACK ¤Î¥Ñ¥é¥á¥¿¡¼¤â²ò¼á¤µ¤ì¤ë. tone ¤Ë¤ª¤¤¤Æ¥·¥§¡¼¥Ç¥£¥ó¥°¤ò¹Ô¤¦¤¿¤á¤Ë, ¥ª¥×¥·¥ç¥ó ltone ¤ò false ¤Ë¤¹¤ë¤È, ñ¤Ë¥ì¥Ù¥ëÀ¸À®¤ò¤ä¤á¤ë¤À¤± ¤Ê¤Î¤Ç, ¼Â¤Ï¤â¤·¤â UEPACK ¤Î¥Ñ¥é¥á¥¿¡¼ ltone ¤¬ true ¤Ë¤Ê¤Ã¤Æ¤¤¤ì¤Ð, ¤ä¤Ï¤ê¥«¥é¡¼¥È¡¼¥ó¤¬É½¼¨¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ë ¡Ê¤È¤¤¤¦Ãí°Õ¤ò´µ¯¤¹¤ë¤¿¤á, ¤¢¤¨¤Æ¤³¤Îʬ¤«¤ê¤Ë¤¯¤¤Ì¾Á°¤ò¤½¤Î¤Þ¤ÞºÎÍÑ ¤·¤Æ¤¤¤ë¡Ë. contour ¤Ë¸Â¤ê, Ãͤ¬¥¼¥í¤Î¥³¥ó¥¿¡¼¤ò¼è¤ê½ü¤¯¥ª¥×¥·¥ç¥ó¤¬¤¢¤ë (nozero).
GGraph.coloar_bar ¤ÏľÁ°¤Î tone ÉÁ²è¤Ë´Ø¤¹¤ë¥«¥é¡¼¥Ð¡¼¤òɽ¼¨¤¹¤ë (ľÁ°¤Î¤òÍѤ¤¤º, Íۤ˥ì¥Ù¥ë¤È¥Ñ¥¿¡¼¥ó¤ò»ØÄꤹ¤ë¤³¤È¤â¤Ç¤¤ë¤¬, ¤¢¤Þ¤ê»È¤ï¤Ê¤¤¤À¤í¤¦). ²¼¤Ë¥«¥é¡¼¥Ð¡¼¤ÎÉÁ²èÎã¤ò¼¨¤¹. ¿ºÌ¤Ê»ØÄ꤬½ÐÍè¤ë¤³¤È¤¬Ê¬¤«¤ë¤Ç¤¢¤í¤¦.
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.nc', 'T')
4:
5: #< DCL¤Î¥ª¡¼¥×¥ó¤ÈÀßÄê >
6: DCL.gropn(1)
7: DCL.sldiv('y',2,2) # 2x2¤Ë²èÌÌʬ³ä, 'y'=yoko: º¸¾å¢ª±¦¾å¢ªº¸²¼...
8: DCL.sgpset('isub', 96) # ²¼ÉÕ¤ò¼¨¤¹À©¸æÊ¸»úÊѹ¹: '_' --> '`'
9: DCL.sgpset('lfull',true) # Á´²èÌÌɽ¼¨
10: DCL.uzfact(0.75) # ºÂɸ¼´¤Îʸ»úÎó¥µ¥¤¥º¤ò 0.75 ÇÜ
11: DCL.sgpset('lfprop',true) # ¥×¥í¥Ý¡¼¥·¥ç¥Ê¥ë¥Õ¥©¥ó¥È¤ò»È¤¦
12:
13: #< GGraph ¤Ë¤è¤ë ÉÁ²è >
14: GGraph.set_fig('viewport'=>[0.15,0.7,0.2,0.6]) # set_*: ¤º¤Ã¤È͸ú¤ÊÀßÄê
15: # 1ËçÌÜ
16: GGraph.tone( gphys.cut(true,true,850) )
17: GGraph.contour( gphys.cut(true,true,850), false )
18: GGraph.color_bar # ¥«¥é¡¼¥Ð¡¼ (¥Ç¥Õ¥©¥ë¥È¤Ï½Ä)
19:
20: # 2ËçÌÜ
21: GGraph.next_fig('viewport'=>[0.2,0.75,0.2,0.6])
22: GGraph.tone( gphys.cut(true,true,850) )
23: GGraph.contour( gphys.cut(true,true,850), false )
24: GGraph.color_bar('left'=>true,'labelintv'=>1) # º¸Â¦¤Ëɽ¼¨, Á´Éô¥é¥Ù¥ë(¢è1¸Ä¤ª¤)
25:
26: # 3ËçÌÜ
27: GGraph.next_fig('itr'=>2 )
28: GGraph.tone( gphys.mean(0), true, 'int'=>4)
29: GGraph.color_bar('vlength'=>0.5,"landscape"=>true,'tickintv'=>0)
30: # Ťµ»ØÄê, ²£¤Ëɽ¼¨, tick mark¤Ê¤·(0¤Î¾ì¹ç¤ÎÆÃÎã)
31:
32: # 4ËçÌÜ
33: GGraph.next_fig('itr'=>2 )
34: rmiss = DCL.glpget('rmiss')
35: GGraph.tone( gphys.mean(0), true, 'levels'=>
36: [rmiss,-70,-60,-50,-40,-30,-20,-10,0,10,20,rmiss] )
37: GGraph.color_bar("voff"=>0.04) # ¤Á¤ç¤Ã¤È;ʬ¤Ë²£¤ËÎ¥¤¹
38: # ¡Þ̵¸ÂÂç¤Ï GrADS É÷¤Ë»°³Ñ¤Ë¤Ê¤ë
39:
40: #< ¤ª¤·¤Þ¤¤ >
41: DCL.grcls
|
DCL ¤Ë¤ÏÃÏ¿ÞÅê±Æµ¡Ç½¤¬¤¢¤ë¡¥ GGraph ¤Ç¤Ï¡¤¤½¤ì¤ò»È¤¤¤ä¤¹¤¤·Á¤Ë¥é¥Ã¥×¤·¤ÆÄ󶡤¹¤ë¡¥ Åê±ÆË¡¤Ï¡¤ºÂɸÊÑ´¹ÈÖ¹æ¤Ç»ØÄꤹ¤ë¡¥ GGraph ¤Ç¤ÎÃÏ¿ÞÅê±Æ¼ÂÁ©¤ÎÁ°¤Ë¡¤¤Þ¤º¤Ï¡¤DCL¤Ë¤ª¤±¤ëÃÏ¿ÞÅê±ÆË¡¤Î²òÀâ ¤ò°ìÆÉ¤µ¤ì¤¿¤¤¡¥
DCL¤¬¥µ¥Ý¡¼¥È¤¹¤ëÃÏ¿ÞÅê±ÆË¡¤Ï²¼µ¤Ç¤¢¤ë¡¥
| ÈÖ¹æ | ¿Þ Ë¡ | ÀµÀÑ | Àµ³Ñ | Àµµ÷ |
| 10 | Àµµ÷±ßÅû¿ÞË¡ | ¡ß | ¡ß | ·ÐÀþ |
| 11 | ¥á¥ë¥«¥È¡¼¥ë¿ÞË¡ | ¡ß | ¡û | ¡ß |
| 12 | ¥â¥ë¥ï¥¤¥Ç¿ÞË¡ | ¡û | ¡ß | ¡ß |
| 13 | ¥Ï¥ó¥á¥ë¿ÞË¡ | ¡û | ¡ß | ¡ß |
| 14 | ¥¨¥Ã¥±¥ë¥ÈÂè6¿ÞË¡ | ¡û | ¡ß | ¡ß |
| 15 | ËÌÅÄÂʱ߿ÞË¡ | ¡û | ¡ß | ¡ß |
| ÈÖ¹æ | ¿Þ Ë¡ | ÀµÀÑ | Àµ³Ñ | Àµµ÷ |
| 20 | Àµµ÷±ß¿í¿ÞË¡ | ¡ß | ¡ß | ·ÐÀþ |
| 21 | ¥é¥ó¥Ù¥ë¥ÈÀµÀѱ߿í¿ÞË¡ | ¡û | ¡ß | ¡ß |
| 22 | ¥é¥ó¥Ù¥ë¥ÈÀµ³Ñ±ß¿í¿ÞË¡ | ¡ß | ¡û | ¡ß |
| 23 | ¥Ü¥ó¥Ì¿ÞË¡ | ¡û | ¡ß | ¡ß |
| ÈÖ¹æ | ¿Þ Ë¡ | ÀµÀÑ | Àµ³Ñ | Àµµ÷ |
| 30 | Àµ¼Í¿ÞË¡ | ¡ß | ¡ß | ¡ß |
| 31 | ¥Ý¡¼¥é¡¼¥¹¥Æ¥ì¥ª¿ÞË¡ | ¡ß | ¡û | ¡ß |
| 32 | Àµµ÷Êý°Ì¿ÞË¡ | ¡ß | ¡ß | Êý°ÌÀþ |
| 33 | ¥é¥ó¥Ù¥ë¥ÈÀµÀÑÊý°Ì¿ÞË¡ | ¡û | ¡ß | ¡ß |
GGraph ¤Ç¤Ï¤½¤ì¤¾¤ì¤ËÂФ·¡¤¡Ö¤è¤¤Ë·×¤é¤¦¡×¥Ç¥Õ¥©¥ë¥ÈÀßÄê¤òÍÑ°Õ ¤·¤Æ¤¢¤ë¡¥¤Þ¤º¤Ï´Êñ¤Ê¥×¥í¥°¥é¥à¤Ç¡¤¤¤¤¯¤Ä¤«¤ÎÅê±ÆË¡¤ÇÉÁ²è¤·¤Æ¤ß¤è¤¦¡¥
1: itr = ARGV[0] ? ARGV[0].to_i : 10
2:
3: require "numru/ggraph"
4: include NumRu
5: gphys = GPhys::IO.open('T.jan.nc', 'T')
6: DCL.gropn(1)
7: DCL.sgpset('lcntl', false)
8: DCL.sgpset('lclip', true)
9: DCL.uzfact(0.7)
10: DCL.sgpset('lfull',true)
11: GGraph.set_fig 'itr'=>itr, 'viewport'=>[0.15,0.85,0.1,0.6]
12: GGraph.set_map 'coast_world'=>true
13: GGraph.tone( gphys )
14: DCL.grcls
|
% ruby map_proj1.rb 10 % ruby map_proj1.rb 20 % ruby map_proj1.rb 30 |
¤½¤ì¤¾¤ì¤Î·ë²Ì¤ò¼¨¤¹¡¥
![]() ruby map_proj1.rb 10 ¼Â¹Ô·ë²Ì |
|
![]() ruby map_proj1.rb 20 ¼Â¹Ô·ë²Ì |
![]() ruby map_proj1.rb 30 ¼Â¹Ô·ë²Ì |
¥Ý¡¼¥é¡¼¥¹¥Æ¥ì¥ª¿ÞË¡(ÈÖ¹æ31)¤Î¾ì¹ç¡¤¥Ç¥Õ¥©¥ë¥È¤Ç¤Ï²èÌÌÁ´ÂΤ˺î¿Þ¤µ¤ì¤ë ¡ÊÄêµÁÈϰϤ¬Ìµ¸Â±ó¤Þ¤Ç¡Ë¡¥¥Ó¥å¡¼¥Ý¡¼¥È¤ËÉÁ²è¤òǼ¤á¤ë¤¿¤á¤Ë¤Ï¡¤
DCL.sgpset('lclip', true)
|
Àµµ÷±ßÅû¿ÞË¡¡ÊÈÖ¹æ10¡Ë¤Ï¡¤¤¤¤ï¤æ¤ë°ÞÅÙ·ÐÅÙºÂɸ¤Ç¤¢¤ë¡¥¤³¤Î¾ì¹ç¡¤ linear-linearľ¸òºÂɸ¡ÊÈÖ¹æ10¡ËÍѤκÂɸ¼´¤ò½ñ¤¯¤³¤È¤¬¤Ç¤¤ë¡¥ GGraph ¤Î¥á¥½¥Ã¥É contour, tone, line ¤Ë¤ª¤¤¤Æ¡¤¥ª¥×¥·¥ç¥ó 'map_axes' ¤ò true ¤Ë»ØÄꤹ¤ë¡¥
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::IO.open('T.jan.nc', 'T')
4: DCL.gropn(1)
5: DCL.sgpset('lcntl', false)
6: DCL.sgpset('lclip', true)
7: DCL.uzfact(0.7)
8: DCL.sgpset('lfull',true)
9: GGraph.set_fig 'itr'=>10, 'viewport'=>[0.15,0.85,0.1,0.6]
10: GGraph.set_map 'coast_japan'=>true
11: GGraph.tone( gphys.cut('lon'=>120..150,'lat'=>20..50), true, 'map_axes'=>true )
12: DCL.grcls
|
ÃÏ¿ÞÅê±Æ´Ø·¸¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¤GGraph::fig ¤È GGraph::map ¤Ë¤¢¤ë¡¥ GGraph::fig¤ÎÃϿ޴ط¸¥ª¥×¥·¥ç¥ó¤Ï²¼µ¡§
GGraph::map¤Î¼ç¤Ê¥ª¥×¥·¥ç¥ó¤Ï²¼µ¡§
¾Ü¤·¤¯¤Ï¡¤²¼¤Î¤è¤¦¤Ë¥ª¥×¥·¥ç¥ó help ¤Çɽ¼¨¤µ¤ì¤ë¡¥
>> require "numru/ggraph" => true >> NumRu::GGraph.fig nil, nil, 'help'=>true << Description of options >> option name default value # description: "new_frame" true # whether to define a new frame by DCL.grfrm # (otherwise, DCL.grfig is called) "itr" 1 # coordinate transformation number "viewport" [0.2, 0.8, 0.2, 0.8] # [vxmin, vxmax, vymin, vymax] "window" nil # (for itr<10,>50) [uxmin, uxmax, uymin, uymax]. # each element allowd nil (only for itr<5,>50) "xreverse" "positive:down,units:hPa" # (for itr<10,>50) Assign # max value to UXMIN and min value to UXMAX if # condition is satisfied (nil:never, true:always, # String: when an attibute has the value specified # ("key:value,key:value,..") "yreverse" "positive:down,units:hPa" # (for itr<10,>50) Assign # max value to UYMIN and min value to UYMAX if # condition is satisfied (nil:never, true:always, # String: when an attibute has the value specified # ("key:value,key:value,..") "similar" nil # 3-element float array for similar # transformation in a rectangular curvilinear # coordinate, which is fed in # DCL:grssim:[simfac,vxoff,vyoff], where simfac # and [vxoff,vyoff] represent scaling factor and # origin shift, respectively. "map_axis" nil # (for all map projections) 3-element float # array to be fed in DCL::umscnt: [uxc, uxy, rot], # where [uxc, uyc] represents the tangential point # (or the pole at top side for cylindrical # projections), and rot represents the rotation # angle. If nil, internally determined. (units: # degrees) "map_radius" nil # (for itr>=20: conical/azimuhal map # projections) raidus around the tangential point. # (units: degrees) "map_fit" nil # (Only for itr=10(cylindrical) and 11 # (Mercator)) true: fit the plot to the data window # (overrides map_window and map_axis); false: do # not fit (then map_window and map_axis are used); # nil: true if itr==10, false if itr==11 "map_window" [-180, 180, -75, 75] # (for itr<20: cylindrical # map projections) lon-lat window [lon_min, # lon_max, lat_min, lat_max ] to draw the map # (units: degres) "help" false # show help message if true Current values={"map_window"=>[-180, 180, -75, 75], "help"=>true, "similar"=>nil, "map_axis"=>nil, "window"=>nil, "new_frame"=>true, "itr"=>1, "map_fit"=>nil, "yreverse"=>"positive:down,units:hPa", "viewport"=>[0.2, 0.8, 0.2, 0.8], "xreverse"=>"positive:down,units:hPa", "map_radius"=>nil} NumRu::Misc::HelpMessagingException: ** help messaging done ** from /usr/local/lib/ruby/site_ruby/1.8/numru/misc/keywordopt.rb:386:in `interpret' from /usr/local/lib/ruby/site_ruby/1.8/numru/ggraph.rb:2261:in `fig' from (irb):5 >> NumRu::GGraph.map 'help'=>true << Description of options >> option name default value # description: "lim" true # draw map lim (t or f) "grid" true # draw map grid (t or f) "vpt_boundary" false # draw viewport boundaries (f, t or # 1,2,3.., representing the line width) "wwd_boundary" false # draw worksation window boundaries (f, t # or 1,2,3.., representing the line width) "fill" false # fill the map if coast_world or coast_japan is # true (t or f) "coast_world" false # draw world coast lines (t or f) "border_world" false # draw nation borders (t or f) "plate_world" false # draw plate boundaries (t or f) "state_usa" false # draw state boundaries of US (t or f) "coast_japan" false # draw japanese coast lines (t or f) "pref_japan" false # draw japanese prefecture boundaries (t or # f) "dgridmj" nil # the interval between the major lines of # latitudes and longitudes. If nil, internally # determined. (units: degrees) (this is a UMPACK # parameter, which is nullified when uminit or # grfrm is called) "dgridmn" nil # the interval between the minor lines of # latitudes and longitudes. If nil, internally # determined. (units: degrees) (this is a UMPACK # parameter, which is nullified when uminit or # grfrm is called) "help" false # show help message if true Current values={"dgridmn"=>nil, "help"=>true, "border_world"=>false, "lim"=>true, "wwd_boundary"=>false, "fill"=>false, "coast_japan"=>false, "dgridmj"=>nil, "vpt_boundary"=>false, "coast_world"=>false, "plate_world"=>false, "grid"=>true, "state_usa"=>false, "pref_japan"=>false} NumRu::Misc::HelpMessagingException: ** help messaging done ** from /usr/local/lib/ruby/site_ruby/1.8/numru/misc/keywordopt.rb:386:in `interpret' from /usr/local/lib/ruby/site_ruby/1.8/numru/ggraph.rb:2546:in `map' from (irb):6 |
¤³¤Î¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à ¤òÁö¤é¤¹¤È¡¤²¼¤Î£µËç¤Î¿Þ¤¬ÆÀ¤é¤ì¤ë¡¥¤Û¤·¤¤µ¡Ç½¤ò»È¤Ã¤Æ¤¤¤½¤¦¤ÊÉôʬ¤¬ ¤¢¤ì¤Ð»²¹Í¤Ë¤µ¤ì¤¿¤¤¡¥
![]() 1ËçÌÜ |
![]() 2ËçÌÜ |
![]() 3ËçÌÜ |
![]() 4ËçÌÜ |
![]() 5ËçÌÜ |
°µÎϤϳΤ«¤ËÂ礤¤¤Û¤É¹âÅÙ¤¬Ä㤤¤Î¤Ç, ¤½¤¦¤Ê¤ë¤È¹¥ÅÔ¹ç¤Ç¤Ï¤¢¤ë¤¬, ²¿¤â»ØÄꤷ¤Ê¤¤¤Î¤Ë¤½¤¦¤Ê¤ë¤Î¤Ï²¿¤«ÉÔÆ©ÌÀ¤ÊÁàºî¤¬¹Ô¤ï¤ì¤Æ¤¤¤ë¤«¤é¤Ç¤¢¤í¤¦¤«¡© ¼Â¤Ï, ¤½¤¦¤¹¤Ù¤¤È¤¤¤¦¤³¤È¤Ï, ¸µ¤Î NetCDF ¥Õ¥¡¥¤¥ë¤Ë½ñ¤¤¤Æ¤¢¤ë¤Î¤Ç, ¤½¤ì¤ò²ò¼á¤·¤Æ¤¤¤ë¤Þ¤Ç¤Ç¤¢¤ë. T.jan.nc ¤Î ncdump ¤Ë¤è¤ëɽ¼¨¤ò¤ß¤ë¤È, ÊÑ¿ô level ¤Ë¤À¤±, positive °À¤¬¤¢¤ê, Ãͤ¬ "down" ¤È¤Ê¤Ã¤Æ¤¤¤ë. ¤³¤ì¤Ï, NetCDF ¥æ¡¼¥¶¡¼¥¬¥¤¥É¤Ë¤³¤½¤Ê¤¤¤â¤Î¤Î, ¿¤¯¤Î¥³¥ó¥Ù¥ó¥·¥ç¥ó¤Çɸ½àŪ¤Ê°À¤È¤Ê¤Ã¤Æ¤¤¤ë (gtool4 NetCDF µ¬Ìó¤ò»²¾È¤Î¤³¤È).
¤Ç¤Ï, positive °À¤òÉÕ¤±¤Æ¤¤¤Ê¤¤¥Ç¡¼¥¿¤Ï¤É¤¦¤¹¤ì¤Ð¤¤ ¤¤¤Î¤À¤í¤¦¤«. GGraph ¤Ï¤½¤ì¤âÇÛθ¤·¤Æºî¤é¤ì¤Æ¤¤¤ë¤Î¤ÇÂç¾æÉפǤ¢¤ë. ¶ñÂÎŪ¤Ë¤Ï, ¥á¥½¥Ã¥É fig ¤Î¥Ñ¥é¥á¥¿¡¼¤Î¥Ç¥Õ¥©¥ë¥ÈÃͤòÊѤ¨¤ì¤Ð¤è¤¤.
¤Þ¤º¤Ï¼¡¤Î, ¤¿¤Ã¤¿2¹Ô¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤Æ¤ß¤è¤¦. ¡Ê¤ï¤¶¤ï¤¶¥Õ¥¡¥¤¥ë¤Ë¤·¤Ê¤¯¤Æ¤â irb ¤Ç½½Ê¬¤Ç¤¢¤ë¡Ë
require "numru/ggraph" NumRu::GGraph.fig( nil, true, 'help'=>true ) |
¤¹¤ë¤È, °Ê²¼¤Î¤è¤¦¤Ë¥ª¥×¥·¥ç¥ó¤Î¥á¥Ë¥å¡¼¤¬É½¼¨¤µ¤ì¤ë.
% ruby fig_help.rb
<< Description of options >>
option name default value # description:
"new_frame" true # whether to define a new frame by DCL.grfrm
# (otherwise, DCL.grfig is called)
"itr" 1 # coordinate transformation number
"viewport" [0.2, 0.8, 0.2, 0.8] # [vxmin, vxmax, vymin, vymax]
"window" nil # (for itr<10,>50) [uxmin, uxmax, uymin, uymax].
# each element allowd nil (only for itr<5,>50)
"xreverse" "positive:down,units:hPa" # (for itr<10,>50) Assign
# max value to UXMIN and min value to UXMAX if
# condition is satisfied (nil:never, true:always,
# String: when an attibute has the value specified
# ("key:value,key:value,..")
"yreverse" "positive:down,units:hPa" # (for itr<10,>50) Assign
# max value to UYMIN and min value to UYMAX if
# condition is satisfied (nil:never, true:always,
# String: when an attibute has the value specified
# ("key:value,key:value,..")
"similar" nil # 3-element float array for similar
# transformation in a rectangular curvilinear
# coordinate, which is fed in
# DCL:grssim:[simfac,vxoff,vyoff], where simfac
# and [vxoff,vyoff] represent scaling factor and
# origin shift, respectively.
"map_axis" nil # (for all map projections) 3-element float
# array to be fed in DCL::umscnt: [uxc, uxy, rot],
# where [uxc, uyc] represents the tangential point
# (or the pole at top side for cylindrical
# projections), and rot represents the rotation
# angle. If nil, internally determined. (units:
# degrees)
"map_radius" nil # (for itr>=20: conical/azimuhal map
# projections) raidus around the tangential point.
# (units: degrees)
"map_lat_range" nil # (for itr<20: cylindrical map projections)
# latitudinal range to draw the map. By default
# (nil), the map is drawn between 75E and 75S.
# (units: degres)
"help" false # show help message if true
Current values={"help"=>true, "similar"=>nil, "map_axis"=>nil, "window"=>nil, "new_frame"=>true, "itr"=>1, "map_lat_range"=>nil, "yreverse"=>"positive:down,units:hPa", "viewport"=>[0.2, 0.8, 0.2, 0.8], "xreverse"=>"positive:down,units:hPa", "map_radius"=>nil}
/usr/local/lib/ruby/site_ruby/1.8/numru/misc/keywordopt.rb:343:in `interpret': ** help messaging done ** (NumRu::Misc::HelpMessagingException)
from /usr/local/lib/ruby/site_ruby/1.8/numru/ggraph.rb:2083:in `fig'
from fig_help.rb:2
|
¿Þ¤Îº¸±¦¾å²¼¤Îü¤ÎºÂɸÃÍ (uxmin, uxmax, uymin, uymax) ¤Ï¥ª¥×¥·¥ç¥ó window ¤Ç·è¤Þ¤ë¤Î¤Ç, ºÂɸ¼´¤Îº¸±¦¡¿¾å²¼¤òÆþ¤ìÂØ ¤¨¤¿¤±¤ì¤Ð, ¤³¤ì¤òÍÛ¤ËÀßÄꤹ¤ë¤È¤¤¤¦¤Î¤¬°ìË¡¤Ç¤¢¤ë. ¤·¤«¤·, ¤½¤ì¤Ç¤ÏÍÍ¡¹¤Ê¿Þ¤ò½ñ¤¤¿¤¤¾ì¹ç¤ÏÉÔÊØ¤Ç¤¢¤ë. ¤½¤³¤Ç, window ¤òÀßÄꤻ¤º¤Ë, ¼«Æ°È½ÃǤε¬Â§¤òÊѤ¨¤è¤¦. ¤½¤ì¤ò¹Ô¤¦¤Î¤¬, ¥ª¥×¥·¥ç¥ó xreverse, yreverse ¤Ç¤¢¤ë. ¾å¤Î½ÐÎϤ«¤é, ¥Ç¥Õ¥©¥ë¥ÈÃͤ¬¤È¤â¤Ë "positive:down,units:hPa" ¤È¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤ë. ¤³¤ì¤Ï, °À positive ¤¬Â¸ºß¤· ¤Æ¤½¤ÎÃͤ¬ "down" ¤Ç¤¢¤ë¤«, ¤Þ¤¿¤Ï °À units ¤¬Â¸ºß¤·¤Æ¤½¤ÎÃͤ¬ "hPa" ¤Ç¤¢¤ë¾ì¹ç¤Ï, º¸±¦¤Þ¤¿¤Ï¾å²¼¤òµÕ¤Ë¤¹¤ë¤È¤¤¤¦°ÕÌ£¤Ç¤¢¤ë. ¤È¤¦¤³¤È¤Ç, ¼Â¤Ï¤ä¤Ã¤Ñ¤ê°µÎϤòÆÃḚ̂·¤¤¤·¤Æ¤¤¤¿¤Î¤Ç¤¢¤ë¤¬, º£²óÍѤ¤¤¿¥Ç¡¼¥¿¤Ç¤Ï level ¤Îñ°Ì¤Ï hPa ¤Ç¤Ê¤¯ milibar¤È¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç, ¤½¤ì¤¬¸¶°ø¤Ç¤Ï¤Ê¤¤.
¥Ç¥Õ¥©¥ë¥ÈÃͤòÎ㤨¤Ð "units:mb,units:hPa,units:milibar" ¤ËÊѤ¨¤ì¤Ð, °À units ¤¬ "mb", "hPa", "milibar" ¤Î¤¤¤º¤ì¤«¤Î¾ì¹ç¤Ë°ú¤Ã¤¯¤êÊÖ¤¹¤È ¤¤¤¦ÀßÄê¤Ë¤Ê¤ë¡§
GGraph.set_fig( "xrev"=>"units:mb,units:hPa,units:milibar",
"yrev"=>"units:mb,units:hPa,units:milibar")
|
°ìÊý, °µÎϤòÆÃÊ̻뤻¤º, ½ã¿è¤Ë postive ¤À¤±¤Ç¾¡É餷¤¿¤±¤ì¤Ð, "positive:down" ¤È¤¹¤ì¤ÐÎɤ¤. ¤Ê¤ª, xreverse, yreverse ¤Ë nil ¤òÀßÄꤹ¤ì¤Ð¾ï¤Ë°ú¤Ã¤¯¤êÊÖ¤·¤ò¹Ô¤ï¤º, true ¤È¤¹¤ì¤Ð¾ï¤Ë°ú¤Ã¤¯¤êÊÖ¤¹. ¤È¤¤¤Ã¤Æ¤âÌÞÏÀ window ¤¬Íۤ˻ØÄꤵ¤ì¤ì¤Ð, ¤½¤ì¤Ë½¾¤¦.
GGraph¤Ç¤Ï, ¥³¥ó¥¿¡¼¤ä¥È¡¼¥ó(¿§Åɤê)¤Î¥ì¥Ù¥ë¤òÇÛÎó¤ÇÍۤ˻ØÄꤹ¤ë¤³¤È¤¬½ÐÍè¤ë.
¥È¡¼¥ó¤Ï¥ì¥Ù¥ë¤È¥Ñ¥¿¡¼¥óÈÖ¹æ¤Ç»ØÄꤵ¤ì¤ë. ¥Ñ¥¿¡¼¥óÈÖ¹æ¤Ï¿§¤È¥È¡¼¥ó¥Ñ¥¿¡¼ ¥ó¤òƱ»þ¤Ë»ØÄꤹ¤ë. ¤½¤Î»ÅÍÍ¤Ï RubyDCL¤Î¥Þ¥Ë¥å¥¢¥ë (GRPH1¤Î¡Ö³µÍס×)¤ò»²¾È¤Î¤³¤È. GGraph ¤Ç¤Ï, ¥È¡¼¥ó¤Ï GGraph.set_tone_levels ¤ÇÀßÄꤹ¤ë¤«(°Ê¸å·Ñ³Ū¤ËÍѤ¤¤ë¾ì¹ç), GGraph.tone ¤Î¥ª¥×¥·¥ç¥ó 'levels' ¤È 'patterns' ¤Ë¤è¤ê»ØÄꤹ¤ë(¤½¤Î¾ì¸Â¤ê). ¡Ê¤Ê¤ª, ¸½ºß¤Î¼ÂÁõ¤Ç¤Ï, ¸å¼Ô¤ò»È¤¦¤È¤½¤ì°ÊÁ°¤Î GGraph.set_tone_levels ¤Ï̵¸ú¤Ë¤Ê¤ë¤¬, ¤½¤¦¤Ê¤é¤Ê¤¤¤è¤¦¤Ë²þÄû¤¹¤ëͽÄê¡Ë
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
4:
5: #< DCL¤Î¥ª¡¼¥×¥ó¤ÈÀßÄê >
6: DCL.gropn(1)
7: DCL.sldiv('y',2,2) # 2x2¤Ë²èÌÌʬ³ä, 'y'=yoko: º¸¾å¢ª±¦¾å¢ªº¸²¼...
8: DCL.sgpset('lcntl', false) # À©¸æÊ¸»ú¤ò²ò¼á¤·¤Ê¤¤
9: DCL.sgpset('lfull',true) # Á´²èÌÌɽ¼¨
10: DCL.sgpset('lfprop',true) # ¥×¥í¥Ý¡¼¥·¥ç¥Ê¥ë¥Õ¥©¥ó¥È¤ò»È¤¦
11:
12: #< GGraph ¤Ë¤è¤ë ÉÁ²è >
13: GGraph.set_fig('viewport'=>[0.15,0.82,0.15,0.6])
14: # 1ËçÌÜ
15: GGraph.set_tone_levels( 'levels'=>[-20,-15,-10,-5,0],
16: 'patterns'=>[10999,20999,30999,40999] )
17: GGraph.tone( gphys )
18: # 2ËçÌÜ
19: GGraph.tone( gphys, true, 'lev'=>[-20,0,20], # ¥ì¥Ù¥ë¡õ¥Ñ¥¿¡¼¥ó¤òÍۤ˻ØÄê
20: 'pat'=>[20999,40999,70999,80999] ) # ¥Ñ¥¿¥ó¤ÎÊý¤¬1¤Ä¿¢ª¡Þ¡ç¤Þ¤Ç
21: GGraph.contour( gphys, false, 'lev'=>[-20,0,20], 'index'=>3 ) # »²¹Í¤Þ¤Ç
22: # 3ËçÌÜ
23: GGraph.tone( gphys, true, 'lev'=>[-20,0,20],
24: 'pat'=>[40999,70999,80999] ) # ¥ì¥Ù¥ë¤ÈƱ¿ô¢ª¡Ü¡ç¤Þ¤Ç³ÈÄ¥
25: # 4ËçÌÜ
26: GGraph.tone( gphys, true, 'lev'=>[-20,0,20],
27: 'pat'=>[40999,70999] ) # ¥Ñ¥¿¥ó¤Î¤Û¤¦¤¬1¤Ä¾¯¢ª´Ö¤òÅɤë
28: #< ¤ª¤·¤Þ¤¤ >
29: DCL.grcls
|
15¹ÔÌܤè¤ê²òÀ⤹¤ë. 15¡Á16¹ÔÌܤǤÏ, ¥È¡¼¥ó¤Î¥ì¥Ù¥ë¤È¥Ñ¥¿¡¼¥óÈÖ¹æ¤òÀßÄꤷ¤Æ¤¤¤ë. GGraph.set_tone_levels ¤Ç¤Ï, 'levels' ¤È 'patterns' ¤ÎξÊý¤Î¥Ñ¥é¥á¥¿¡¼¤òÇÛÎó¤Ç»ØÄꤹ¤ë. GGraph.tone ¤ä¸å½Ò¤¹¤ë¥³¥ó¥¿¡¼¤Î¾ì¹ç¤È·Á¼°¤È¤¢¤ï¤»¤ë¤¿¤á¥ª¥×¥·¥ç¥ó¤Î·Á¤ò¼è¤Ã¤Æ¤¤¤ë¤¬, ξÊý¤È¤â¾Êά½ÐÍè¤Ê¤¤¡Ê¤Ä¤Þ¤êËÜÅö¤Ï¥ª¥×¥·¥ç¥ó¤Ç¤Ï¤Ê¤¤¡Ë. ¥ì¥Ù¥ë¤òÀßÄꤹ¤ë¤Ê¤é¿§¤âƱ»þ¤Ë»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤. 17¹ÔÌܤÏ, ľÁ°¤ÎÀßÄê¤Ë½¾¤Ã¤Æ1ËçÌܤοޤòÉÁ²è¤¹¤ë. 19¡Á20¹ÔÌܤǤÏ, ¥ì¥Ù¥ë¤È¥Ñ¥¿¡¼¥ó¤ò GGraph.tone ¤Î¥ª¥×¥·¥ç¥ó¤È¤·¤Æ Íۤ˻ØÄꤷ, £²ËçÌܤòÉÁ²è¤·¤Æ¤¤¤ë. »ØÄꤷ¤¿¥Ñ¥¿¡¼¥ó¤Ï¥ì¥Ù¥ë¤è¤êÍ×ÁǤ¬£±¤Ä¿¤¤¤¬, ¤½¤Î¾ì¹ç, ¡Ý¡ç, levels[0], levels[1], .., levels[-1], ¡Ü¡ç ¤Î´Ö¤¬Åɤé¤ì¤ë. ¥ª¥×¥·¥ç¥ó̾¤Î¸å¤í¤¬¾Êά½ÐÍè¤ë¤Î¤Ï´û¤Ë½Ò¤Ù¤¿Ä̤ê. ¤Ê¤ª, ¥È¡¼¥ó¥ì¥Ù¥ë¤¬Ê¬¤«¤ê¤ä¤¹¤¤¤è¤¦¥³¥ó¥¿¡¼¤ò ½Å¤Í½ñ¤¤·¤¿. ¥³¥ó¥¿¡¼¤Î¥ì¥Ù¥ëÀßÄê¤Ë¤Ä¤¤¤Æ¤Ï¸å½Ò¤¹¤ë. 23¡Á24¹ÔÌܤϣ³ËçÌܤòÉÁ²è¤¹¤ë. ¥ì¥Ù¥ë¤È¥Ñ¥¿¡¼¥ó¤ÎÍ×ÁÇ¿ô¤¬Åù¤·¤¤¤¬, ¤³¤Î¾ì¹ç levels[0], levels[1], .., levels[-1], ¡Ü¡ç ¤Î´Ö¤¬Åɤé¤ì¤ë. 26¡Á27¹ÔÌܤÎ4ËçÌܤǤÏ, ¥Ñ¥¿¡¼¥ó¤Î¤Û¤¦¤¬£±¤ÄÍ×ÁǤ¬¾¯¤Ê¤¤¤Î¤Ç, levels ¤Î´Ö¤¬Åɤé¤ì¤ë. ¥ì¥Ù¥ë¤È¥Ñ¥¿¡¼¥ó¤ÎÍ×ÁÇ¿ô¤Î´Ø·¸¤¬ ¤³¤ì¤é°Ê³°¤Î¾ì¹ç¤ÏÎã³°¤¬È¯À¸¤¹¤ë.
¥³¥ó¥¿¡¼¥ì¥Ù¥ë¤òÇÛÎó¤ÇÍۤ˻ØÄꤹ¤ëÊýË¡¤òÀâÌÀ¤¹¤ë. ¥³¥ó¥¿¡¼¤Î¾ì¹ç¤Ï, £±ËÜ£±ËܤËÀþ¤ÎÂÀ¤µÅù, ÍÍ¡¹¤Ê¥Ñ¥é¥á¥¿¡¼¤¬¤¢¤ê, ¤½¤ì¤é¤â·è¤á¤Í¤Ð¤Ê¤é¤Ê¤¤¤¬, GGraph ¤Ç¤Ï, ÍøÍѼԤÎÊØ¤ò¹Í¤¨¤Æ²Äǽ¤Ê¸Â¤ê¾Êά¤Þ¤¿¤Ï´Êά²½¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë. ¥È¡¼¥ó¤Î¾ì¹ç¤ÈƱÍÍ, ¥ì¥Ù¥ë¤ÎÀßÄê¤Ï GGraph.set_contour_levels ¤ÇÀßÄꤹ¤ë¾ì¹ç(°Ê¸å·Ñ³Ū¤ËÍѤ¤¤ë¾ì¹ç)¤È, GGraph.contour ¤Î¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤹ¤ë¾ì¹ç (¤½¤Î¾ì¸Â¤ê) ¤Î£²Ä̤꤬¤¢¤ë. »ØÄꤹ¤ë¥Ñ¥é¥á¥¿¡¼¤Ï, ɬ¤ºÉ¬Í×¤Ê 'levels' ¤Ë²Ã¤¨¤Æ, ¥ª¥×¥·¥ç¥ó¤Ç 'index', 'line_type', 'label', 'label_height' ¤Ç¤¢¤ë. ¡Ê¤³¤ì¤é¤Ï DCL.udsclv ¤Î¥Ñ¥é¥á¥¿¡¼¤Ç¤¢¤ë. GGraph ¤Ï, ¾Êά¤µ¤ì¤¿¤â¤Î¤ò°Ê²¼¤Î¤è¤¦¤Ëµ¬Â§¤Ë§¤Ã¤Æ·èÄꤷ, DCL.udsclv ¤ò¸Æ¤Ö. ¡Ë
¤½¤ì¤Ç¤Ï, °Ê²¼¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤è¤¦.
1: require "numru/ggraph"
2: include NumRu
3: gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
4:
5: #< DCL¤Î¥ª¡¼¥×¥ó¤ÈÀßÄê >
6: DCL.gropn(1)
7: DCL.sldiv('y',2,2) # 2x2¤Ë²èÌÌʬ³ä, 'y'=yoko: º¸¾å¢ª±¦¾å¢ªº¸²¼...
8: DCL.sgpset('lcntl', false) # À©¸æÊ¸»ú¤ò²ò¼á¤·¤Ê¤¤
9: DCL.sgpset('lfull',true) # Á´²èÌÌɽ¼¨
10: DCL.sgpset('lfprop',true) # ¥×¥í¥Ý¡¼¥·¥ç¥Ê¥ë¥Õ¥©¥ó¥È¤ò»È¤¦
11:
12: #< GGraph ¤Ë¤è¤ë ÉÁ²è >
13: GGraph.set_fig('viewport'=>[0.15,0.82,0.15,0.6])
14: levels = 5*( NArray.float(7).indgen! ) # NArray: [0,5,10,...]
15: mj = DCL.udpget('indxmj')
16: mn = DCL.udpget('indxmn')
17: # 1ËçÌÜ
18: GGraph.set_contour_levels( 'levels'=>levels, 'index'=>mj ) # ¥³¥ó¥¿¡¼ÀßÄê
19: GGraph.contour( gphys )
20: # 2ËçÌÜ
21: GGraph.contour( gphys, true, 'lev'=>levels,
22: 'index'=>[mj,mn], 'line_type'=>[1,2,2,2] )
23: # 3ËçÌÜ
24: GGraph.contour( gphys, true, 'lev'=>levels,
25: 'index'=>mn, 'label'=>true )
26: # 4ËçÌÜ
27: GGraph.contour( gphys, true, 'lev'=>levels,
28: 'index'=>mn, 'label'=>['A','B','C','D'],
29: 'label_height'=>[0.015,0.02,0.025,0.03] )
30: #< ¤ª¤·¤Þ¤¤ >
31: DCL.grcls
|
14¹ÔÌܤǤÏ, Ãæ¿È¤¬ [0,5,10,...] ¤Ç¤¢¤ë NArray ¤Î1¼¡¸µÇÛÎó¤òÀ¸À®¤·¤Æ¤¤¤ë. indgen! ¤ÏÃæ¿È¤ò [0,1,2,..] ¤ÇÃÖ¤´¹¤¨¤ë¥á¥½¥Ã¥É¤Ç, NArray ¤Ç¤ÏÎɤ¯»È¤ï¤ì¤ë. ¥³¥ó¥¿¡¼¤Ë¥é¥Ù¥ë¤ò½ñ¤¯¤«¤É¤¦¤«¤Ï, ¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÀþ¤ÎÂÀ¤µ (index) ¤¬, UDPACK ¤Î¥Ñ¥é¥á¥¿¡¼ 'indxmj' ¤ËÅù¤·¤¤¤«¤É¤¦¤«¤ÇȽÃǤ·¤Æ¤¤¤ë (½é´üÃͤÏ3). 18¹ÔÌܤǤϥª¥×¥·¥ç¥ó 'index' ¤Ë¤½¤ì¤ò»ØÄꤷ¤Æ¤ë¤Î¤Ç, 19¹ÔÌܤǽñ¤«¤ì¤ë¥³¥ó¥¿¡¼¤Ë¤Ï, ¥³¥ó¥¿¡¼¥ì¥Ù¥ëÃͤò¼¨¤¹¥é¥Ù¥ë¤¬ÉÕ¤¤¤Æ¤¤¤ë. 'index' Åù¤Î¥ª¥×¥·¥ç¥ó¤Ç¤Ï, ¥¹¥«¥é¡¼¤¬»ØÄꤵ¤ì¤ì¤ÐÁ´¤Æ¤Î¥³¥ó¥¿¡¼ ¤Ë¤½¤ÎÃͤòŬÍѤ¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë.
2ËçÌܤοްʹߤÏ, contour ¤Î¥ª¥×¥·¥ç¥ó¤ÇÍۤ˥ì¥Ù¥ëÅù¤ò»ØÄꤷ¤ÆÉÁ²è ¤·¤Æ¤¤¤ë. 2ËçÌܤǤÏ, index ¤Ï [mj, mn] ¤ÈÇÛÎó¤ÇÍ¿¤¨¤é¤ì¤Æ¤¤¤ë. ¤½¤Î¾ì¹ç, [mj, mn, mj, mn,...] ¤È¤¤¤¦·«¤êÊÖ¤·¤È²ò¼á¤µ¤ì¤ë. ¾¤Î¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤âƱÍͤǤ¢¤ë. line_type ¤Ï [1,2,2,2] ¤Ê¤Î¤Ç, [1,2,2,2, 1,2,2,2,..] ¤È²ò¼á¤µ¤ì¤ë. 3ËçÌܤοޤǤÏ, label ¤ò true ¤È»ØÄꤷ¤Æ¤ë¤Î¤Ç, Á´¤Æ¤Î¥³¥ó¥¿¡¼¤Ë¥é¥Ù¥ë ¤ò½ñ¤¯. 4ËçÌܤǤϥé¥Ù¥ë¤Îʸ»úÎó¤òÍۤ˻ØÄꤷ¤Æ¤¤¤ë (label¤Ï true ¤Ê¤é¥³¥ó¥¿¡¼¥ì¥Ù¥ë¤òɽ¤¹Ê¸»úÎó¤òÆâÉô¤ÇÀ¸À®¤·¤Æ½ñ¤¯¤¬, ʸ»úÎó¤¬Í¿¤¨¤é¤ì¤¿¾ì¹ç¤Ï¤½¤ì¤ò»È¤¦). 4ËçÌܤǤÏ, label_height ¤Ë¤è¤ê ʸ»úÎó¤ÎÂ礤µ¤ò¸Ä¡¹¤ËÀßÄꤷ¤Æ¤¤¤ë. ¤·¤«¤·, ÉáÄ̤ϰìΧ¤ËÊѤ¨¤¿¤¤¤À¤í¤¦. ¤½¤Î¾ì¹ç label_height ¤ò»È¤ï¤º, UDPACK ¤Î¥Ñ¥é¥á¥¿¡¼ RSIZEL ¤òÊѤ¨¤ë¤³¤È¤ò´«¤á¤ë.
Åê¹ÆÏÀʸ¤Ë½Ð¤¹À¶½ñÍѤοޤǤÏ, ¥ì¥¤¥¢¥¦¥È¤Ë¶Å¤ê¤¿¤¤¤À¤í¤¦. GGraph¤Ï, DCL¤Î¶¯ÎϤʥ쥤¥¢¥¦¥Èµ¡Ç½¤ò³è¤«¤·°×¤¤¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë.
¼¡¤ÎÎã¤Ç¤Ï, Ê£¿ô¤Î¥Ñ¥Í¥ë¤«¤éɬÍפʤ¤ºÂɸ¼´¥¿¥¤¥È¥ë¡õ¥é¥Ù¥ë¤ò Í¤Æ¤¹¤Ã¤¤ê¤µ¤», ¤Þ¤¿¥¹¥Ú¡¼¥¹¤òÀáÌ󤹤ë. ¥¹¥Ú¡¼¥¹ÀáÌó¤Ï, DCL.sldiv ¤ò»È¤ï¤º, 1¥Õ¥ì¡¼¥àÃæ¤ËÊ£¿ô¤Î¿Þ¤òÇÛÃÖ¤¹¤ë¤³¤È¤Ç¹Ô¤¦. ¤½¤Î¤¿¤á¤Ë³Æ¿Þ¤Î¥Ó¥å¡¼¥Ý¡¼¥È¤òÍÛ¤ËÀßÄꤷ, ¤µ¤é¤Ë¥¿¥¤¥È¥ë¤Î½ñ¤Êý¤âºÙ¤«¤¯Ä´À°¤·¤Æ¤¤¤ë¤Î¤Ç, ¥½¡¼¥¹¤ÏŤ¯¤Ê¤Ã¤Æ¤¤¤ë. ³Æ¡¹¤Î¥³¥Þ¥ó¥É¤Ë´Ø¤·¤Æ¤Ï RubyDCL ¤Î¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤Î¤³¤È.
require "numru/ggraph"
include NumRu
gphys = GPhys::NetCDF_IO.open('T.jan.nc', 'T')
DCL.gropn(1)
DCL.sgpset('lcntl', false) # À©¸æÊ¸»ú¤ò²ò¼á¤·¤Ê¤¤
DCL.sgpset('lfull',true) # Á´²èÌÌɽ¼¨
DCL.sgpset('lcorner',false) # ¥³¡¼¥Ê¡¼¥Þ¡¼¥¯¤ò½ñ¤«¤Ê¤¤
DCL.uzfact(0.35) # ºÂɸ¼´¤Îʸ»úÎó¥µ¥¤¥º¤òÄê¿ôÇÜ
DCL.sgpset('lfprop',true) # ¥×¥í¥Ý¡¼¥·¥ç¥Ê¥ë¥Õ¥©¥ó¥È¤ò»È¤¦
DCL.udpset('lmsg',false) # ¥³¥ó¥¿¡¼´Ö³ÖÈóɽ¼¨
vpt = NArray[0.05, 0.45, 0.05, 0.25] # ¥Ó¥å¡¼¥Ý¡¼¥È¥µ¥¤¥º (2:1)
vpt00 = ( vpt + ([0.050]*2 + [0.32]*2) ).to_a # x,yÊý¸þ¤Ë¤º¤é¤·¤ÆArray²½
vpt01 = ( vpt + ([0.474]*2 + [0.32]*2) ).to_a # x,yÊý¸þ¤Ë¤º¤é¤·¤ÆArray²½
vpt10 = ( vpt + ([0.050]*2 + [0.10]*2) ).to_a # x,yÊý¸þ¤Ë¤º¤é¤·¤ÆArray²½
vpt11 = ( vpt + ([0.474]*2 + [0.10]*2) ).to_a # x,yÊý¸þ¤Ë¤º¤é¤·¤ÆArray²½
GGraph.set_fig('viewport'=>vpt00)
GGraph.set_axes('xunits'=>'','yunits'=>'','xtitle'=>'')
DCL.uzpset('labelxb',false)
GGraph.contour( gphys.cut(true,true,1000), true, 'annot'=>false, 'titl'=>'' )
DCL.uzpset('pad1',0.2) ; DCL.uxsttl('t','1000 hPa',-1) ; DCL.uzpset('pad1',0.7)
GGraph.set_fig('viewport'=>vpt01, 'new_frame'=>false)
GGraph.set_axes('ytitle'=>'')
DCL.uzpset('labelyl',false)
GGraph.contour( gphys.cut(true,true,250), true, 'annot'=>false, 'titl'=>'' )
DCL.uzpset('pad1',0.2) ; DCL.uxsttl('t','250 hPa',-1) ; DCL.uzpset('pad1',0.7)
GGraph.set_fig('viewport'=>vpt10, 'new_frame'=>false)
GGraph.set_axes('ytitle'=>nil,'xtitle'=>nil)
DCL.uzpset('labelyl',true); DCL.uzpset('labelxb',true)
GGraph.contour( gphys.cut(true,true,70), true, 'annot'=>false, 'titl'=>'' )
DCL.uzpset('pad1',0.2) ; DCL.uxsttl('t','70 hPa',-1) ; DCL.uzpset('pad1',0.7)
GGraph.set_fig('viewport'=>vpt11, 'new_frame'=>false)
GGraph.set_axes('ytitle'=>'')
DCL.uzpset('labelyl',false)
GGraph.contour( gphys.cut(true,true,10), true, 'annot'=>false, 'titl'=>'' )
DCL.uzpset('pad1',0.2) ; DCL.uxsttl('t','10 hPa',-1) ; DCL.uzpset('pad1',0.7)
DCL::sgtxzv(0.5,vpt00[3]+0.028,'January Monthly Mean Temperature',
1.15*DCL.uzpget('rsizec2'),0,0,3)
DCL.grcls
print "\n** PRESSURE LEVELS ** " ; p gphys.coord(2).val
|
GGraph ¤ÏºÂɸ¼´ÉÁ²è¤ò DCL ¤Î USPACK ¤ËǤ¤»¤ë¡ÊDCL.usxaxs, DCL.usyaxs¤ò¸Æ¤Ö¡Ë. ¤Ç¤Ï, ÆüÉÕ¼´¤òÉÕ¤±¤¿¤ê¡ÊUCPACK¤òÍøÍÑ¡Ë, U[XY]PACK ¤ò»È¤Ã¤Æ¤è¤êºÙ¤«¤¯ºÂɸ¼´¤òÀ©¸æ¤¹¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤¤¤¤¤Î¤À¤í¤¦¤«¡© ¤½¤ÎÅú¤¨¤Ï, º£¤Î¤È¤³¤í, GGraph ¤Ë½ñ¤«¤»¤º¼«Ê¬¤Ç½ñ¤¯, ¤Ç¤¢¤ë. GGraph ¤Ç¼´¤ò½ñ¤¯¥á¥½¥Ã¥É axes ¤¬ÉÁ¤¯¼´¤Ï, °Ê²¼¤Î¤è¤¦¤Ë¥ª¥×¥·¥ç¥ó 'xside', 'yside' ¤ÇÀ©¸æ¤Ç¤¤ë. Î㤨¤Ð X ¼´¤ò²¼¤À¤±ÉÁ¤¯¤Ê¤é, 'xside'=>'b' ¤Ç¤¢¤ë. ¥Ç¥Õ¥©¥ë¥È¤Î½é´üÃÍ¤Ï 'xside'=>'tb', 'yside'=>'lr'.
require "numru/ggraph"
include NumRu
gphys = GPhys::IO.open('T.jan.nc', 'T')
DCL.gropn(1)
DCL.sgpset('lfull',true) ; DCL.uzfact(0.6)
GGraph.set_fig( 'itr'=> 2, 'viewport'=>[0.25,0.7,0.15,0.6] )
GGraph.set_axes( 'xside'=>'b', 'yside'=>'l' )
GGraph.line( gphys.mean(0,1), true, 'exchange'=>true, 'annot'=>false )
DCL.grcls
|
GGraph ¤ò»È¤Ã¤Æ½ñ¤«¤Ê¤«¤Ã¤¿¤È¤³¤í¤Ë UCPACK Åù¤Ç¸å¤«¤éºÂɸ¼´¤ò½ñ¤±¤ÐÎɤ¤.
GPhys ¤Ï, ¥í¡¼¥«¥ë¤Ê¥Ç¥£¥¹¥¯¾å¤Î¥Õ¥¡¥¤¥ë¤À¤±¤Ç¤Ê¤¯, ±ó³Ö¥µ¡¼¥Ð¡¼¤Ë ÃÖ¤¤¤¿¥Ç¡¼¥¿¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤ÎÏÈÁȤߺî¤ê¤ËÌò¤À¤Ä¤è¤¦¤Ë½ÐÍè¤Æ¤¤¤ë. °Ê²¼¤Ç¤Ï, OPeNDAP/DODS ¤È¤¤¤¦ cgi ¤Ë¤è¤ë±ó³Ö¥ª¥Ö¥¸¥§¥¯¥ÈÄó¶¡¡¤ÊÂ¤Ó¤Ë dRuby ¤È¤¤¤¦ Ruby ¤Ë¤ª¤±¤ëʬ»¶¥ª¥Ö¥¸¥§¥¯¥È¥é¥¤¥Ö¥é¥ê¡¼¤òÍøÍѤ¹¤ëÎã¤ò¼¨¤¹.
¡ÖdRuby¤ò»È¤Ã¤¿¥¯¥é¥¤¥¢¥ó¥È¡õ¥µ¡¼¥Ð¡¼¡×¤Î ¼«ºîÊÔ¤½¤Î£±, ¼«ºîÊÔ¤½¤Î £² ¤Ç¤Ï¡¤±ó³ÖÄ󶡤¹¤ë GPhys ¥ª¥Ö¥¸¥§¥¯¥È¤ò¸ÇÄꤷ¤¿´Êñ¤ÊÎã¤òÍѤ¤¤Æ »ÅÁȤߤòÀâÌÀ¤¹¤ë¡¥»ÅÁȤߤϤȤ⤫¤¯»È¤¤¤¿¤¤¾ì¹ç¤Ï¤È¤Ð¤·¤Æ¡¤ GDir¤ò»È¤Ã¤¿¤ª¤Þ¤«¤»ÊÔ ¤Ë¿Ê¤à¤È Îɤ¤¡¥GDir ¤ò»È¤Ã¤Æ¥Ç¥£¥ì¥¯¥È¥ê¡¼¥Ä¥ê¡¼¤Ë±ó³Ö¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Î GPhys ÁȤ߹þ¤ß¥é¥¤¥Ö¥é¥ê¡¼ gphys-remote ¤Ë¤Ä¤¤¤ÆÀâÌÀ¤¹¤ë¡¥
º£¸å¤Ï¡¤CGI ¤ä¥ê¥ì¡¼¥·¥ç¥Ê¥ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎÍøÍÑ¡¤¥¦¥§¥Ö¥µ¡¼¥Ó¥¹ ¤Ë¤Ä¤¤¤Æ¤â½ñ¤¯Í½Äê¤Ç¤¢¤ë¡¥
OPeNDAP/DODS ¤Ï¡¤CGI ¤Ë¤è¤ë ±ó³Ö¥Ç¡¼¥¿Äó¶¡¥µ¡¼¥Ó¥¹¤Ç¤¢¤ë¡¥°·¤¦¥Ç¡¼¥¿¤Ï NetCDF Åù¤Î¥Õ¥¡¥¤¥ë¤Ë¼ý¤Þ¤Ã ¤¿ÊªÍýÎ̤οôÃͥǡ¼¥¿¤Ç¡¤ÍÍ¡¹¤Ê¥µ¡¼¥Ð¡¼¤ÇÍѤ¤¤é¤ì¤Æ¤¤¤ë¡¥ Åö½é¤Ï³¤ÍγؼԤ¬³«È¯¤ò¤Ï¤¸¤á¤¿¤â¤Î¤Ç¤¢¤ê(DODS=Distributed Ocean Data Sytem)¤Ç¥Ö¥¤Åù¤Î¥¹¥Æ¡¼¥·¥ç¥ó¥Ç¡¼¥¿¤È¡¤³Ê»ÒÅÀ¥Ç¡¼¥¿¤òǰƬ¤Ë¤ª¤¤¤Æ ³«È¯¤µ¤ì¤Æ¤¤¤ë¡¥GPhys ¤ÈƱÍͤʰÕÌ£¤Ç¤Î¥Ç¡¼¥¿¹½Â¤¤ÎÃê¾Ý²½¤ò¹Ô¤¦¤³¤È¤Ç¡¤ Ê£¿ô¤Î¥Õ¥¡¥¤¥ë·Á¼°¤òÆ©²áŪ¤Ë¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ë¡¥
OPeNDAP/DODS ¤Ï "Grid" ¤È¸Æ¤Ö¥Ç¡¼¥¿¹½Â¤(¥¯¥é¥¹)¤Ë¤è¤ê¡¤ºÂɸÃÍ¤È³Ê »ÒÅÀÃͤ«¤é¤Ê¤ë GPhys ¤ÈƱÍͤʥª¥Ö¥¸¥§¥¯¥È²½¤ò¹Ô¤¦¡¥OPeNDAP/DODS ¥µ¡¼¥Ð¡¼ ¤Ë¾è¤Ã¤¿ NetCDF ¥Õ¥¡¥¤¥ë¤Ç¤¢¤ì¤Ð¡¤¼«Æ°Åª¤ËºÂɸÊÑ¿ô¤Î²ò¼á¤ò¹Ô¤¤ Grid ¥ª¥Ö¥¸¥§¥¯¥È¤ò·ÁÀ®¤¹¤ë¡¥
¤Þ¤¿¡¤OPeNDAP/DODS Âбþ¤Î NetCDF ¥¯¥é¥¤¥¢¥ó¥È¥é¥¤¥Ö¥é¥ê¡¼¤¬ Ä󶡤µ¤ì¤Æ¤ª¤ê¡¤¤³¤ì¤òÍѤ¤¤ë¤È NetCDF ¤Î¥Õ¥¡¥¤¥ë̾¤ÎÂå¤ï¤ê¤Ë OPeNDAP/DODS ¤Î URL ¤òÍ¿¤¨¤ë¤³¤È¤Ç¡¤±ó³Ö¥Ç¡¼¥¿¤ò¥À¥¦¥ó¥í¡¼¥É¤¹¤ë¤³¤È¤Ê ¤¯Ä¾ÀÜÆÉ¤à¤³¤È¤¬¤Ç¤¤ë¡¥¤½¤ÎºÝ¡¤¥µ¡¼¥Ð¡¼Â¦¤Ë¤¢¤ë¥Õ¥¡¥¤¥ë¤Ï NetCDF ¤Ç¤Ê ¤¯¤Æ¤âÎɤ¤¤¬¡¤NetCDF Ū¤Ê¥Ç¡¼¥¿¹½Â¤¤ò»ý¤Ã¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¡¥¥¹¥Æ¡¼¥·¥ç ¥ó¥Ç¡¼¥¿¤ä HDF ¥Ç¡¼¥¿¤Î¿¤¯¤Ï¤³¤ì¤Ë½¾¤ï¤Ê¤¤¡¥
GPhys ¤Î²¼ÀÁ¤Ç¤¢¤ë Ruby/NetCDF ¤Ï¡¤OPeNDAP/DODS Âбþ¤Î NetCDF ¥¯¥é¥¤¥¢¥ó¥È¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¡¤ ¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¤½¤Á¤é¤ò¥ê¥ó¥¯¤¹¤ë¤è¤¦¤ÊÀßÄê¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡¥Vine ¤ä Debian ÍѤΥХ¤¥Ê¥ê¡¼¥Ñ¥Ã¥±¡¼¥¸¤Ç¤â¡¤¤½¤¦¤Ê¤Ã¤Æ¤¤¤ë¡¥¤³¤Î¾ì¹ç¡¤ ¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ OPeNDAP/DODS URL ¤òÍ¿¤¨¤ë¤À¤±¤Ç¡¤¥í¡¼¥«¥ë¤Ê NetCDF ¥Õ¥¡¥¤¥ë¤ÈƱÍÍ¤ÎÆÉ¤ß½ñ¤¤¬¤Ç¤¤ë¡¥
¤½¤ì¤Ç¤Ï¥Ç¡¼¥¿¤Ë¥¢¥¯¥»¥¹¤·¤Æ¤ß¤è¤¦¡¥¤³¤³¤Ç¤Ï ÅÅǾ¶æ³ÚÉô¥Ç¡¼¥¿¥µ¡¼¥Ð¡¼ ¾å¤Îµ¤¾ÝģͽÊó¥Ç¡¼¥¿¤òÍѤ¤¤ë¡¥OPeNDAP/DODS ¤Ç¤Ï¡¤¥Ç¥£¥ì¥¯¥È¥ê¡¼ ¡Ê¥Û¥ë¥À¡¼¡Ë¤ÏÄ̾ï¤Î html ¥µ¡¼¥Ð¡¼¤ÈƱÍͤ˥֥饦¥º¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡§ ºÇ¶á£±½µ´Ö¤Ö¤ó¤Î¥Ç¡¼¥¿¡¥ ¥¢¥¸¥¢°è¥â¥Ç¥ë RSM ¤ÎºÇ¿·¤ÎͽÊó¥Ç¡¼¥¿¤Îµ¤°µÌ̥ǡ¼¥¿¤Î ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Î¾ðÊó ¤Ë¥¢¥¯¥»¥¹¤·¤Æ¤ß¤è¤¦¡¥Ç¼¤á¤é¤ì¤Æ¤¤¤ë NetCDF ¥Õ¥¡¥¤¥ë¤Î¥Ø¥Ã¥À¡¼¾ðÊó¤ò html ²½¤·¤¿¤â¤Î¤¬É½¼¨¤µ¤ì¤ë¤Ï¤º¤À¡¥ ÊÑ¿ô̾¤Ë¤Ï temp ¤Ê¤É¤¬¤¢¤ë¤³¤È¤¬¤ï¤«¤ë¡¥
¤Ç¤Ï¡¤¤³¤ì¤ò²Ä»ë²½¤·¤è¤¦¡¥¡Ö¥¹¥¿¡¼¥È¥¢¥Ã ¥×¥Õ¥¡¥¤¥ë¤ÎÍøÍÑ(2) -- GDir ¤ÎÍøÍѡפǾҲ𤷤¿ irbrc_ggraph ¤òÍѤ¤¡¤ÂÐÏÃŪ¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤Ë¤¹¤ë¡¥
% irb_ggraph --simple-prompt Start interactive GGraph session *** MESSAGE (SWDOPN) *** GRPH1 : STARTED / IWS = 1. >> GPhys::IO.var_names('http://davis-dods.rish.kyoto-u.ac.jp/cgi-bin/nph-dods/jmadata/gpv/latest/gpv/latest/RSM_P_latest.nc') => ["lon", "lat", "p", "time", "ref_time", "z", "u", "v", "temp", "rh", "omega"] >> temp = GPhys::IO.open('http://davis-dods.rish.kyoto-u.ac.jp/cgi-bin/nph-dods/jmadata/gpv/latest/gpv/latest/RSM_P_latest.nc', 'temp') => <GPhys grid=<4D grid <axis pos=<'lon' in 'http://davis-dods.rish.kyoto-u.ac.jp/cgi-bin/nph-dods/jmadata/gpv/latest/gpv/latest/RSM_P_latest.nc' sfloat[60]>> <axis pos=<'lat' in 'http://davis-dods.rish.kyoto-u.ac.jp/cgi-bin/nph-dods/jmadata/gpv/latest/gpv/latest/RSM_P_latest.nc' sfloat[75]>> <axis pos=<'p' in 'http://davis-dods.rish.kyoto-u.ac.jp/cgi-bin/nph-dods/jmadata/gpv/latest/gpv/latest/RSM_P_latest.nc' sfloat[16]>> <axis pos=<'time' in 'http://davis-dods.rish.kyoto-u.ac.jp/cgi-bin/nph-dods/jmadata/gpv/latest/gpv/latest/RSM_P_latest.nc' sfloat[18]>>> data=<'temp' in 'http://davis-dods.rish.kyoto-u.ac.jp/cgi-bin/nph-dods/jmadata/gpv/latest/gpv/latest/RSM_P_latest.nc' sfloat[60, 75, 16, 18]>> >> set_fig 'itr'=>10 => {"itr"=>1} >> set_map 'coast_japan'=>true => {"coast_japan"=>false} >> tone temp => nil >> contour temp, false => nil |
°Ê¾å¤Ç¡¤²¼¤Î¤è¤¦¤Ê¿Þ¤¬¤«¤±¤ë¡¥
¼Â¹Ô·ë²Ì

dRuby¤ò»È¤Ã¤¿¥¯¥é¥¤¥¢¥ó¥È¡õ¥µ¡¼¥Ð¡¼¡Ê¼«ºîÊÔ¤½¤Î£±¡Ë
Ãí°Õ¡§¼ê¤Ã¼è¤êÁ᤯»È¤¦¤Ë¤Ï¡¤¤³¤³¤ÏÈô¤Ð¤·¤Æ GDir¤ò»È¤Ã¤¿¤ª¤Þ¤«¤»ÊÔ ¤Ë¿Ê¤à¤ÈÎɤ¤¡¥
dRuby ¤Ï, Ruby¤Î¥á¥½¥Ã¥É¸Æ½Ð¤·¤ò³ÈÄ¥¤·, ¥Í¥Ã¥È¥ï¡¼¥¯±Û¤·¤Ë¥á¥½¥Ã¥É¸Æ½Ð¤· ¤ò¹Ô¤¨¤ë¤è¤¦¤Ë¤·¤¿¥é¥¤¥Ö¥é¥ê¡¼¤Ç¤¢¤ë. Ruby 1.8 ¤Ë¤Ï, ɸ½àźÉÕ¤µ¤ì ¤Æ¤¤¤ë. Ruby 1.6 ¤Þ¤Ç¤Ç¤â¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ì¤ÐÎɤ¤. dRuby ¤ò»È¤¦¤È¥ê¥â¡¼¥È¥×¥í¥»¥¹¾å¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥¢¥¯¥»¥¹¤¬, ¥í¡¼¥«¥ë¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥¢¥¯¥»¥¹¤ÈƱ¤¸¤è¤¦¤Ë¤Ç¤¤ë. ÄÌ¿®Áê¼ê¤¬Æ°¤¤¤Æ¤¤¤ë¥Þ¥·¥ó¤Î OS Åù¤¬°Û¤Ê¤Ã¤Æ¤âÌäÂê¤Ê¤¤. ...¤Ê¤É¤È¸À¤ï¤ì¤Æ¤â, ¤É¤¦Ìò¤ËΩ¤Ä¤Î¤«¥Ô¥ó¤ÈÍè¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¤Î¤Ç, Îã¤Ç¼¨¤¹.
°Ê²¼¤Ï¤´¤¯´Êñ¤Ê¥µ¡¼¥Ð¡¼¥×¥í¥°¥é¥à¤Ç¤¢¤ë. ¤³¤ì¤Þ¤Ç»È¤Ã¤Æ¤¤¿ T.jan.nc Ãæ¤Îµ¤²¹¥Ç¡¼¥¿¤ò¥ê¥â¡¼¥È¥×¥í¥»¥¹¤ËÄ󶡤¹¤ë. ¤â¤·¤â¼ÂÍÑŪ¤Ê¥µ¡¼¥Ð¡¼¤òºî¤ë¤Ê¤é, Ê£¿ô¤Î¥Ç¡¼¥¿¤òÄ󶡤·, ¤Þ¤º¤É¤ì¤ò»È¤¦¤«¤òÁª¤Ð¤»¤ë¤Ç¤¢¤í¤¦¤¬, ¤³¤³¤Ç¤Ï dRuby ¤Î²ÄǽÀ¤ò¼¨¤¹¤³¤È¤ò¼ç´ã¤Ë, ¥Ç¡¼¥¿·è¤áÂǤÁ¤Î´Êñ¤ÊÎã¤È¤¹¤ë.
1: require "drb/drb"
2: require "numru/gphys"
3: include NumRu
4: gp = GPhys::IO.open("T.jan.nc","T")
5: DRb.start_service(nil, gp)
6: puts 'URI: '+DRb.uri
7: puts '[return] to exit'
8: gets
|
1¹ÔÌÜ¤Ï dRuby ¤Î¥í¡¼¥É¤Ç¤¢¤ë. 2¡Á4¹ÔÌܤϤªÆëÀ÷. ¤³¤³¤Ç¤Ï, ¥Õ¥¡¥¤¥ë T.jan.nc Ãæ¤ÎÊÑ¿