顯示具有 GMT 標籤的文章。 顯示所有文章
顯示具有 GMT 標籤的文章。 顯示所有文章

2011年1月13日 星期四

Compilation and Installation of PSSAC on Linux

pssac是朱露培老師所寫的小程式,是一個特別設計跟gmt參數相同的程式,適合寫在GMT script裡直接繪出sac圖形的有用工具。一年多前嘗試想要編譯成功他,卻一直沒有成功。今年彷彿又聽到大家有使用pssac的需求,於是提筆寫信問朱教授。朱教授熱心的回應,使我終於成功編譯pssac。

首先,你的linux/unix主機必須有gcc任何的c編譯器。
第二,你需要先安裝好GMT;GMT的安裝請參考GMT簡易安裝筆記。新版的GMT已經到4.5.5,但是安裝form大致上是一樣的。
第三,請到朱教授的個人網站下載pssac的原始碼。如果你的GMT版本是4.5以上,還請多下載新的pssac.c取代原本tar裡的檔案。
假設我們安裝好的GMT路徑是/opt/GMT4.5.2,netcdf的路徑為/opt/netcdf-3.6.3:

tar xvf pssac.tar
cd pssac; mv pssac.c pssac-old.c
wget -c http://www.eas.slu.edu/People/LZhu/downloads/pssac.c
不過直接使用原本的Makefile編譯成功的機會恐怕很少。請修改Makefile成如下的樣子:
  1. CC = gcc
  2. GMT_INC = -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include
  3. GMT_LIBS = -L /opt/GMT4.5.2/lib -L /opt/netcdf-3.6.3/lib -lgmt -lgmtps -lpsl -lnetcdf -lm -s
  4. CFLAGS = -O2 ${GMT_INC}
  5.  
  6. pssac: pssac.o sacio.o
  7.     ${CC} -o $@ $@.o sacio.o ${GMT_LIBS} ${CFLAGS}
  8.  
  9. clean:
  10.     @rm -f pssac *.o

接著請執行make。如果你有確實的寫對GMT以及netcdf的函式庫位置以及headers的位置,你應該可以看到如下的輸出:

gcc -O2 -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include -c -o pssac.o pssac.c
gcc -O2 -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include -c -o sacio.o sacio.c
gcc -o pssac pssac.o sacio.o -L /opt/GMT4.5.2/lib -L /opt/netcdf-3.6.3/lib -lgmt -lgmtps -lpsl -lnetcdf -lm -s -O2 -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include
然而當你想要試著執行他的時候卻出現錯誤訊息:
./pssac: error while loading shared libraries: libnetcdf.so.4: cannot open shared object file: No such file or directory
可知pssac執行時期需要libnetcdf.so.4這個函式,利用find指令可以發現這個檔案就在/etc/netcdf-3.6.3/lib裡。原來是系統並不認識他,趕快加進來吧(別忘了切到root身份)!
echo "/opt/netcdf-3.6.3/lib" > /etc/ld.so.conf.d/libnetcdf.conf
echo "/opt/GMT4.5.2/lib" > /etc/ld.so.conf.d/libgmt.conf
ldconfig
此時再執行pssac試試看:
Usage: pssac standardGMToptions [SACfiles] [-C[t1/t2]] [-E(k|d|a|n|b)(t[n]|vel)] [-Gr/g/b/c] [-I] [-Msize[/alpha]] [-Q] [-r] [-Sshift] [-V]

    pssac plots SAC traces. If no SAC file names is provided in the command line, it expects (sacfile,[x,[y [pen]]) from stdin.
       -C only plot data between t1 and t2
       -E option determines
         (1) profile type:
   a: azimuth profile
   b: back-azimuth profiel
   d: epicentral distance (in degs.) profile
   k: epicentral distance (in km.) profile
   n: traces are numbered from 1 to N in y-axis
         (2) time alignment:
   tn: align up with time mark tn in SAC head
              default is the reference time. Others are
       n= -5(b), -3(o), -2(a), 0-9 (t0-t9)
   vel: use reduced velocity
       -G paint amplitudes larger than c with color r/g/b
       -I integrate the trace before plotting
       -M multiple traces
   size: each trace will normalized to size (in y-unit)
   size/alpha: if alpha<0, use same scale for all traces
       else plot absolute amplitude multiplied by size*r^alpha
       where r is the distance range in km
       -Q square the trace
       -r remove the mean value in the trace
       -S shift traces by shift seconds
       -V plot traces vertically
確定可以執行後,把他放到/usr/local/bin裡,這樣所有使用者都可以使用這隻程式啦!

再次感謝朱老師的熱心幫忙!

Share

2009年10月20日 星期二

GMT簡易安裝筆記

GMT(Generic Mapping Tools)是一套open source的軟體,用來繪製精細的、各式各樣的地理圖形或是xy,xyz軸的分佈圖;我想地球科學領域的同好幾乎都用過他。兩位主要的作者Paul WesselWalter H. F. Smith是超強的unix/C/地震學家,在筆者的心目中,那簡直就是神的境界!!!

儘管不是用java寫成的,但是作者還是非常貼心的提供各種平台的版本(Unix, Linux, Mac, OS/2以及Windows)供大家安裝。安裝的方法大致上有兩種:到GMT網頁上去下載安裝,或是利用Linux內建的套件管理程式安裝。本文主要針對Linux以及MacOS上安裝GMT所做的筆記。

一、至GMT首頁下載安裝

點選頁面上GMT的圖示連到首頁,並且點左側DOWNLOAD連結。我們用Automated install的安裝方式,首先請確定是否可以解bzip2:

which bzip2
如果有顯示,就表示可以繼續下一步;沒顯示的話,運氣不好,自己想想辦法吧@_@|||
其次,請確定你能夠正常的使用bash。不過bash是linux的default shell,debian的dash也是可以的。
第三,假設你要把GMT安裝到/opt/gmt裡,請確定你有/opt/gmt的讀寫權限。如果沒有也沒關係,用root去安裝他即可。
第四,請確定你的系統裡有gcc跟make:
For Debian users:
aptitude install gcc make
For OpenSuSE users:
zypper in gcc make
For Fedora/CentOS users:
yum install gcc make
For MacOSX users:
請放入Application的光碟片,把xcodes安裝起來,這樣就會有gcc跟make了。
最後,下載安裝的script檔,並且把他變成可執行:
wget -c ftp://ftp.soest.hawaii.edu/gmt/install_gmt chmod +x install_gmt
接著,請連結到INSTALL_FORM填寫一些表格。

A. Basic requirement:

  1. Select default units in GMT:
    我們習慣公制單位,因此選擇SI units (cm)。
  2. Select default PostScript output format for GMT:
    PS比EPS具有更多的頁面列印的彈性設定,因此我們放心的選擇PS。
  3. Select POSIX Advisory File Locking:
    選擇"YES. Use file locking"。
    我們如果想要把gmt的指令當成管線再傳給下一個gmt指令,最好將.gmtcommands這個檔案鎖定寫入。在舊的solaris(< 5.7)或是linux核心<2.4的機器上,存取NFS檔案時會有問題。不過我們的機器都遠比這來得新,所以不必考慮這個問題。

B. NetCDF Setup

  1. Select the appropriate netCDF library option:
    如果你不知道或不確定你有沒有netcdf的話,點選"Please get and install the latest netCDF 3.6.x"即可。

C. GMT Setup

  1. Select the FTP site nearest you:
    選擇Japan或是Australia都可以。(真希望以後有台灣的mirror,而且是在地球所裡面!)
  2. Select passive [Default] or active ftp transmission:
    你可能要了一下你的網路架構。通常主機架在防火牆內部,你必須要選擇passive的方式。如果不是,選擇active。
  3. Select the components you want (bzip2 sizes indicated):
    反正硬碟都夠大,全勾選吧!
  4. Select which triangulation algorithm to use:
    選擇Watson's algorithm。原因是Watson的演算法是GNU的,但是Shewchuk's algorithm卻不是GNU的。雖然不能如此自由的使用,但他還是免費的,如果你有需要,是需要自己編譯的。
  5. Select library build type:
    static跟shared的差別是,gmt要不要跟其他應用程式共用函式庫。如果共用的話,可以節省空間,不過可能會被愚蠢的系統管理員搞砸而無法正常使用;static是自己擁有自己的函式庫;缺點是佔用更多的硬碟空間,優點是不會被愚蠢的管理員惡搞而無法使用。
    要選擇哪一個都無所謂,自己決定吧!
  6. Select the C compiler you want to use:
    選擇gcc吧!除非你還有裝其他的C compiler!
  7. Select the make program you want to use:
    選擇make吧!除非你還有其他make工具。
  8. Select GMT final destination directories:
    除非你想要自訂每個目錄的位置,否則放置subdir的地方預設就會是你執行install_gmt的目錄。假設你想要在/opt/gmt裡執行install_gmt,那麼第一行就填入"/opt/gmt"吧!sundir就可以不用管他了。
  9. Select alternative GMT_SHAREDIR directory:
    shared directory會放置一些比較大型的檔案,除非你有硬碟空間上的考量,否則可以略過他!
  10. Alternative coastline directories:
    同樣的,如果你有硬碟空間上的考量,否則可以略過他!
  11. Select supplemental packages to install:
    您可以全部勾選!!
  12. Additional information for MEX (Matlab or Octave):
    octave是一套linux下的matlab的替代方案,他比起matlab僅稍稍遜色一些,不過由於沒有圖形介面且參考資料較少,其實懂得使用octave的人少之又少;
    假設您沒有在GMT下呼叫matlab或是octave的函數的需求,此處留空白或是填入位置都是沒有效果的。
  13. Complete the operation:
    恭喜你,填完表格了!你可以選擇裝完成後刪除所有下載下來的檔案,也可以執行測試的script看看gmt有沒有安裝成功!
點選"GET PARAMETERS",就可以得到我們剛剛所有選項的設定檔的頁面;請把他另存成一個檔案,假設叫做param.list;也假設你要安裝gmt的位置在/opt/GMT:
cd /opt/GMT
./install_gmt param.list
就讓這個script幫我把netcdf以及gmt自動安裝完成!結束之後,您應該會看到有一個類似這樣提示設定:
這樣,就輕鬆完成自訂安裝囉!

二、使用linux的套件管理程式安裝

使用各家linux所提供的套件管理程式來安裝GMT是最快樂不過的事情了!因為他又快又簡單!
For Debian/Ubuntu users:

aptitude install gmt gmt-examples gmt-tutorial-pdf gmt-tutorial gmt-doc-pdf gmt-doc-ps
不過,debian裡竟然沒有自動幫我們把GMT的環境變數給設定上去!我們只好手動設定!
GMTHOME="/usr/lib/gmt"
export PATH=$PATH:$GMTHOME/bin
往後,我們可以到/usr/share/doc/gmt/html/index.html來翻閱手冊以及文件。
For Fedora/CentOS users:
yum install gmt gmt-examples
For OpenSuSE users:
請加入science repos:
zypper install gmt gmt-examples
For MaxOS users:
如果你沒有fink或是沒有聽過fink,請到這裡選擇你的cpu架構並安裝他(假設你已經知道如何安裝fink了!)。安裝完畢後請更新fink套件管理的cache:
fink scanpackages && fink index
apt-get install gmt gmt-shlibs gmt-docs
你沒看錯,fink就是看上linux裡最強的套件管理系統:apt-get,所以他的操作模式就跟debian使用的經驗幾乎相同;透過他你也可以在mac輕易的安裝許多gnu的程式!

三、下載高解析度海岸線檔

如果你用的是第一個方法,也就是到GMT官方網站去安裝GMT的話,你應該就有高解析度的海岸線檔案了。請檢查/usr/share/gmt/coast(放置海岸線檔案的資料料夾),看看這些cdf檔是否有binned_border_h.cdf、binned_GSHHS_h.cdf、binned_river_h.cdf這幾個高解析度的檔案。如果沒有的話,我們就只好手動來新增:

wget -c ftp://ftp.iris.washington.edu/pub/gmt/GSHHS2.0.1_full.tar.bz2
wget -c ftp://ftp.iris.washington.edu/pub/gmt/GSHHS2.0.1_high.tar.bz2
tar jxvf GSHHS2.0.1_full.tar.bz2 -C /tmp
rsync -av /tmp/share/coast/ $GMTHOME/share/coast/
rm -r /tmp/share
tar jxvf GSHHS2.0.1_high.tar.bz2 -C /tmp
rsync -av /tmp/share/coast/ $GMTHOME/share/coast/
rm -r /tmp/share
這樣無論是用哪一種方法安裝GMT,都可以畫出美麗的圖啦!剩下就憑自己的功力囉!

Share