2013年7月27日土曜日

修士卒論提出過程

昨日、ようやく卒論を提出しました。冬学期が終わってから本格的に書き始めて約3ヶ月。長いようですが、毎週金曜日がやってくるのがかなり早く感じられる日々が続きました。

メモリアル大学で修士卒論を提出して卒業するためのことをまとめておきます。気をつけておきたいのが卒論を提出したらすぐ卒業できるということではないということです。場合によっては1年延期されることもあります(←以下参照)。だから時間に余裕をもって提出できるようにしましょう。僕のようにのんびりと書くのではなくて。。

以下は物理・海洋物理学科の担当の方が作成してくれた修士論文チェックリストをもとに語訳しながら「卒論提出→卒業」の過程を書いていきます。これは学部学科によって生徒側がやらなくてはいけないことが若干違ってくると思うで細かいことは所属学科の担当の人に聞いてください。

タイムライン

  1. 所属学科が卒論を読んでくれる見込みのある教授にコンタクトをとって査定することの承諾を得る。(かかる期間目安:2〜3週間)
  2. 大学院課(SGS)に卒論を提出して査定してくれる教授(うちの学科は3名)に読んでもらう(かかる期間目安:6週間)
  3. 卒論の訂正。これは論文によりかかる時間が異なる。マイナーな訂正が必要な場合は6ヶ月以内、メジャーな訂正が必要と判断された場合は最高1年間の訂正期間が与えられる。
  4. 訂正した卒論提出。これで正式に卒業可能となる。
以上のことを踏まえて、最低でも卒業希望する時期の2ヶ月前には卒論を提出したほうがいいようです。

論文に加えて提出する必要のあるものは:

  • 卒論提出フォーム(2通)
  • 著作権のあるものを卒論内で使用する場合はその使用許可をリクエストするためのフォーム(1通)
  • 卒論を大学側に複製させる権利を与えることを許可するフォーム(3通)
  • 卒論をハードカバー(堅表紙)で印刷するための費用($20をregisters officeで支払いレシートを提出)
  • 以下は物理・海洋物理学科の場合は担当者が用意してくれるが学科によっては自分で揃えなければいけない可能性もあるもの:
    • 査定してくれるみこみのある教授を推薦し学長から許可(サイン)をもらう
    • スーパバイザリー許可フォーム(よくわからないがこれも学長からサインをもらう)
    • 修士過程受諾を推薦することを学長から得る(サインをもらう)
詳しくは大学院課のウェブサイト(https://www.mun.ca/sgs/masters_examinations.pdf)に載っています。修士過程を始める際にこういう書類には目を通しておくべきだったと今は実感しています。

海洋大図鑑が欲しい。

家族ゲームを見てふと目についた「海洋大図鑑」という文字。たしか、長男の部屋の本棚にあったんですがそんな本本当にあるのかと思ってググってみたらありました。

海洋大図鑑
海洋大図鑑
著者:ジョン・スパークス
価格:9,975円(税込、送料込)
楽天ブックスで詳細を見る

しかもこの本、著者はファビエン・クストーじゃないですか。あの(クルアーンの海に関する記述に感銘を受けた海洋学者の)ジャック・クストーの孫です。実はちょうど昨夜、彼のTwitterアカウント見つけたところでした。これも何かの巡り合わせ。英語だと、amazon.caでpaperback(紙表紙)だと$20とかなり手頃な価格で手に入るようです。引っ越したら早速買おう。

WebmailからMUNmailに切り替えて容量アップ!

メモリアル大学のEメールにはwebmailとMUNmailの二種類あります。

最初にもらえるのがwebmail(http://www.mun.ca/cc/services/email/emailaccountsforall.php)でMUNmailというのに切り替えることもできます(http://www.mun.ca/cc/munmail/)。

MUNmailはGmailベースのメールクライアントを採用していて使いやすいですし標準のwebmailと比べて以下の利点があります:

  • 容量がかなり大きい(30GB)。webmailは確か100MBのはず。
  • Gmailでも使える機能がいくつか使える。把握しているものでは:
    • Google Calendar
    • Google Sites
    • Google Drive
webmailとMUNmail両方とも卒業後も使えます。一年間ログインしていなかったら自動的に削除されるそうですが。

つまり30GBのクラウドストレージを大学のドメインで半永久的に使用することができるということです。Gmail(5GB)より6倍お得です。

僕はMUNで研究ことを紹介するページをGoogle Sitesで作って公開する予定です(とりあえずドメインは取得しました☞https://sites.google.com/a/mun.ca/hayashida/

入学したら速攻MUNmailに切り替えることをおすすめします。

Dealing with HDF format in Matlab (SeaWiFS application)

Ocean color(SeaWiFS)のデータは全てHDFで保存されているので、一昨日論文提出ギリギリでなんとかClimatologyなクロロフィルデータのきれいな図を作りたかったので以下のフォーラム&MatlabのHDF4の説明を参考に以下のスクリプトを作った。
http://oceancolor.gsfc.nasa.gov/forum/oceancolor/topic_show.pl?tid=3285

clear all;

file={'win' 'spr' 'sum' 'aut'};
abc='abcdefg';
figure;
for it=1:4
    subplot(2,2,it);
    data=hdfread(file{it},'l3m_data' );
    k=find(eq(data,-32767));
    data(k)=NaN;
    data=flipud(data);
    [h1 h2]=contourf(data(1640:1850,1450:1630),80);
    set(h2,'edgecolor','none');
    %caxis([0 1]);
    colorbar('SouthOutside');
    set(gca,'XTick',[]);
    set(gca,'YTick',[]);
    title(abc(it));

end

2013年7月22日月曜日

bashでのseqによる問題

以前、sensitvity analysisをbashのスクリプトでやっていて小数点によるseqの問題が解決されていなかったんだが小数点ではなく整数でseqを取り扱って、forループのなかで小数点の入った数字を扱うことにした。

なぜかplacentiaのbashでは:

「seq 2.7 0.03 3.3」の答えが…

2.7
2.73
2.76
2.79
2.82
2.85
2.88
2.91
2.94
2.97
3
3.03
3.06
3.09
3.12
3.15
3.18
3.21
3.24
3.27

…となる。最後の数字(3.3)が抜けているのである。これを自分のmacbook airでやると問題なく計算される。

placentiaの人にbashのバージョンアップをしてくれと問い合わせてみたがそこが問題ではないと言われ、小数点を使わない方法を勧められたが自分が求めているものは見つからず。

結局、今日考えついたのが、seqをループで出したい数字の合計(上記の場合だと21)として使いそのループ内で足し算しながら各ステップで上記の数字を求めていくことにする:

for it in `seq 0 20`; do echo "scale=2;$number+3/100*$it" | bc; done

2.70
2.73
2.76
2.79
2.82
2.85
2.88
2.91
2.94
2.97
3.00
3.03
3.06
3.09
3.12
3.15
3.18
3.21
3.24
3.27
3.30

これで3.30までちゃんと求められるようになった。

2013年7月19日金曜日

sensitivity analysis (再)

sensitivityanalysis.shをまた使うときが来た。よかった〜スクリプト作っといて。でも使ってみてちょこちょこtypoがあったのでまたここに載せておくことに…

sensitivityanalysis.sh(最新版)

# Sensitivity Analysis of PISCES model parameters

# INSTRUCTIONS
#
# The value before the exponent (E) in namelist_pisces for all PISCES parameters has to be an integer. If it involves a number after the decimal place, you have to rewrite it using E. This is to avoid floating precision errors involved in Bash.
# For Example, If a1 = 0.034E-5, rewrite it as a1 = 34.E-7. If a2 = 99.9, rewrite it as a2 = 999.E-1. etc...
#
#END of INSTRUCTIONS

# Start of Input. Modify below #

# set of names of parameters to analyze.
set_parnam="wsbio xkmort ferat3 wsbio2 conc0 conc1 conc2 conc2m conc3 conc3m xsizedia xsizephy concnnh4 concdnh4 xksi1 xksi2 xkdoc concfebac qnfelim qdfelim caco3r pislope pislope2 excret excret2 bresp chlcnm chlcdm chlcmin fecnm fecdm grosip wchl wchld mprat mprat2 mpratm part2 grazrat2 resrat2 mzrat2 xprefc xprefp xprefz xprefpoc xthresh2zoo xthresh2dia xthresh2phy xthresh2poc xthresh2 xkgraz2 epsher2 sigma2 unass2 grazflux part grazrat resrat mzrat xpref2c xpref2p xpref2d xthreshdia xthreshphy xthreshpoc xthresh xkgraz epsher sigma1 unass xremik xremip nitrif xsirem xsiremlab xsilab xlam1 oxymin ligand kdca nca"

# set of the corresponding values to the above set (excluding exponents (E) if there are any).
set_stdval="2. 2. 10. 30. 1. 8. 1. 3. 3. 8. 1. 1. 1. 8. 2. 333. 417. 1. 7. 7. 16. 2. 2. 5. 5. 333. 33. 5. 33. 40. 40. 151. 1. 2. 1. 1. 1. 75. 7. 5. 3. 1. 3. 1. 3. 1. 1. 1. 1. 2. 20. 3. 6. 3. 2. 5. 3. 3. 1. 1. 1. 5. 1. 1. 1. 2. 20. 3. 6. 3. 25. 25. 5. 3. 25. 31. 5. 1. 6. 6. 1."

# End of Input. Do NOT modify below #

parnam=($set_parnam)
stdval=($set_stdval)
count=${#parnam[@]}
floats=1 # Number of float precision
for it in `seq 1 $count`
do
 para=0
 echo $para >> SA_stat.txt
 grep "${parnam[$it-1]} " namelist_pisces >> SA_stat.txt
 for newnum in $(seq `echo "scale=${floats};${stdval[$it-1]}/2" | bc` `echo "scale=${floats};${stdval[$it-1]}/10" | bc` `echo "scale=${floats};${stdval[$it-1]}/2+${stdval[$it-1]}" | bc`)
 do
  sed -i -r "s/${parnam[$it-1]}\s+=\s+[0-9]+\.*[0-9]*/${parnam[$it-1]}  =  ${newnum}/" namelist_pisces
  ./opa
  para=$((${para}+1))
  echo $para >> SA_stat.txt
  grep "${parnam[$it-1]} " namelist_pisces >> SA_stat.txt
  mv LABSEA_*_T.nc ../MY_SRC/SA/${parnam[$it-1]}${para}.nc
  rm LABSEA_*restart*.nc
 done
 echo "end of run for ${parnam[$it-1]}" >> SA_stat.txt
 sed -i -r "s/${parnam[$it-1]} += +[0-9]+\.*[0-9]*/${parnam[$it-1]}  =  ${stdval[$it-1]}/" namelist_pisces
done

これを

nohup ./sensitivityanalysis.sh > output.txt &

とすればよい。

1994年のデータを使って6月間だけやり直そうとしたら5分も経たずに終わった☆



以下は下書きのまま保存していたBioChemデータに関するメモ:

データをいじってるとだんだん量が増えてきて短期間でも使っていなかったデータの情報は忘れてしまうものです。なのでメモしておかなければ…。

BIOのBioChemを使ってモデルのvalidationを行うんですがmod_BioChem.csvには全期間のデータが含まれていてデータ分布が拡散しているのでもうちょっとフィルターをつけることに。新しくmod_BioChem.csvというのを作りました。こっちにはmod_BioChem.csvから5〜7月間のデータのみを抜き出してあります。毎年この時期にハリファックスからグリーンランドまでラブラドール海のAR7Wラインを横断する船(ハドソン号)が出ているのでこの時期のデータが一番多く収納されています。

ちなみに自分が今回リクエストしたデータは古いものは1962年からある。

2013年7月17日水曜日

for, mv, echo, sedを使って複数のファイル名変更

やりたかったこと:

月別にまとめられたデータファイルの名前をMATLABで解析しやすいようにBASHスクリプトで変更する。手動で「名前の変更」をしていたら数にきりがないので。

やったこと:

残念ながらコード一つで、とはいかなかったが比較的簡単なコードを使って名前の変換することに成功。

以下手順&結果(「$」は自分が打ったコマンド):

$ ls

LABSEA_1d_00010101_00010131_diad_T.nc LABSEA_1d_00010701_00010731_diad_T.nc
LABSEA_1d_00010101_00010131_ptrc_T.nc LABSEA_1d_00010701_00010731_ptrc_T.nc
LABSEA_1d_00010201_00010228_diad_T.nc LABSEA_1d_00010801_00010831_diad_T.nc
LABSEA_1d_00010201_00010228_ptrc_T.nc LABSEA_1d_00010801_00010831_ptrc_T.nc
LABSEA_1d_00010301_00010331_diad_T.nc LABSEA_1d_00010901_00010930_diad_T.nc
LABSEA_1d_00010301_00010331_ptrc_T.nc LABSEA_1d_00010901_00010930_ptrc_T.nc
LABSEA_1d_00010401_00010430_diad_T.nc LABSEA_1d_00011001_00011031_diad_T.nc
LABSEA_1d_00010401_00010430_ptrc_T.nc LABSEA_1d_00011001_00011031_ptrc_T.nc
LABSEA_1d_00010501_00010531_diad_T.nc LABSEA_1d_00011101_00011130_diad_T.nc
LABSEA_1d_00010501_00010531_ptrc_T.nc LABSEA_1d_00011101_00011130_ptrc_T.nc
LABSEA_1d_00010601_00010630_diad_T.nc LABSEA_1d_00011201_00011231_diad_T.nc
LABSEA_1d_00010601_00010630_ptrc_T.nc LABSEA_1d_00011201_00011231_ptrc_T.nc

$ for it in *.nc; do mv ${it} `echo ${it} | sed 's/*_1d_*_0001/daily/'`;done

$ ls

LABSEA_1d_00010101_00010131_diad_T.nc LABSEA_1d_00010701_00010731_diad_T.nc
LABSEA_1d_00010101_00010131_ptrc_T.nc LABSEA_1d_00010701_00010731_ptrc_T.nc
LABSEA_1d_00010201_00010228_diad_T.nc LABSEA_1d_00010801_00010831_diad_T.nc
LABSEA_1d_00010201_00010228_ptrc_T.nc LABSEA_1d_00010801_00010831_ptrc_T.nc
LABSEA_1d_00010301_00010331_diad_T.nc LABSEA_1d_00010901_00010930_diad_T.nc
LABSEA_1d_00010301_00010331_ptrc_T.nc LABSEA_1d_00010901_00010930_ptrc_T.nc
LABSEA_1d_00010401_00010430_diad_T.nc LABSEA_1d_00011001_00011031_diad_T.nc
LABSEA_1d_00010401_00010430_ptrc_T.nc LABSEA_1d_00011001_00011031_ptrc_T.nc
LABSEA_1d_00010501_00010531_diad_T.nc LABSEA_1d_00011101_00011130_diad_T.nc
LABSEA_1d_00010501_00010531_ptrc_T.nc LABSEA_1d_00011101_00011130_ptrc_T.nc
LABSEA_1d_00010601_00010630_diad_T.nc LABSEA_1d_00011201_00011231_diad_T.nc
LABSEA_1d_00010601_00010630_ptrc_T.nc LABSEA_1d_00011201_00011231_ptrc_T.nc

$ for it in *.nc; do mv ${it} `echo ${it} | sed 's/LABSEA_1d_0001...._0001/daily/'`;done

$ ls

daily0131_diad_T.nc daily0531_diad_T.nc daily0930_diad_T.nc
daily0131_ptrc_T.nc daily0531_ptrc_T.nc daily0930_ptrc_T.nc
daily0228_diad_T.nc daily0630_diad_T.nc daily1031_diad_T.nc
daily0228_ptrc_T.nc daily0630_ptrc_T.nc daily1031_ptrc_T.nc
daily0331_diad_T.nc daily0731_diad_T.nc daily1130_diad_T.nc
daily0331_ptrc_T.nc daily0731_ptrc_T.nc daily1130_ptrc_T.nc
daily0430_diad_T.nc daily0831_diad_T.nc daily1231_diad_T.nc
daily0430_ptrc_T.nc daily0831_ptrc_T.nc daily1231_ptrc_T.nc
haqq:8 hakase$ ls
daily0131_diad_T.nc daily0531_diad_T.nc daily0930_diad_T.nc
daily0131_ptrc_T.nc daily0531_ptrc_T.nc daily0930_ptrc_T.nc
daily0228_diad_T.nc daily0630_diad_T.nc daily1031_diad_T.nc
daily0228_ptrc_T.nc daily0630_ptrc_T.nc daily1031_ptrc_T.nc
daily0331_diad_T.nc daily0731_diad_T.nc daily1130_diad_T.nc
daily0331_ptrc_T.nc daily0731_ptrc_T.nc daily1130_ptrc_T.nc
daily0430_diad_T.nc daily0831_diad_T.nc daily1231_diad_T.nc
daily0430_ptrc_T.nc daily0831_ptrc_T.nc daily1231_ptrc_T.nc

$ for it in daily*; do mv ${it} `echo ${it} | sed 's/[0-9][0-9]//2'`;done

$ ls

daily01_diad_T.nc daily05_diad_T.nc daily09_diad_T.nc
daily01_ptrc_T.nc daily05_ptrc_T.nc daily09_ptrc_T.nc
daily02_diad_T.nc daily06_diad_T.nc daily10_diad_T.nc
daily02_ptrc_T.nc daily06_ptrc_T.nc daily10_ptrc_T.nc
daily03_diad_T.nc daily07_diad_T.nc daily11_diad_T.nc
daily03_ptrc_T.nc daily07_ptrc_T.nc daily11_ptrc_T.nc
daily04_diad_T.nc daily08_diad_T.nc daily12_diad_T.nc
daily04_ptrc_T.nc daily08_ptrc_T.nc daily12_ptrc_T.nc

$ for it in daily*; do mv ${it} `echo ${it} | sed 's/y0/y/'`;done

$ ls

daily10_diad_T.nc daily2_diad_T.nc daily6_diad_T.nc
daily10_ptrc_T.nc daily2_ptrc_T.nc daily6_ptrc_T.nc
daily11_diad_T.nc daily3_diad_T.nc daily7_diad_T.nc
daily11_ptrc_T.nc daily3_ptrc_T.nc daily7_ptrc_T.nc
daily12_diad_T.nc daily4_diad_T.nc daily8_diad_T.nc
daily12_ptrc_T.nc daily4_ptrc_T.nc daily8_ptrc_T.nc
daily1_diad_T.nc daily5_diad_T.nc daily9_diad_T.nc
daily1_ptrc_T.nc daily5_ptrc_T.nc daily9_ptrc_T.nc

参考にしたサイト

変数内で使える#,##,%,%%の意味(今回は使わなかったけど便利なので)

AR7W Stations (Geographical Coordinates)

 ラブラドール海の海洋データで有名なのがAR7Wというラブラドールからグリーンランドまでの直線上で収集しているラインがあります。確か60年代ごろから不定期ですが船で横断しながら26ある観測ポイントで物理的なデータ(水温、塩分など)から化学や生物学関連のデータ(プランクトン、アルカリ性、酸素、ケイ素、硝酸塩など) まで集めます。近年ではハリファックスにあるBIO、bedford institute of oceanographyが毎年5月の終わりごろから6月にかけて船を出してデータを集めているようです。データはDFO、departmetn of fisheries and oceansのウェブサイトから入手できます(ユーザー登録する必要あり。無料):http://www.meds-sdmm.dfo-mpo.gc.ca/biochemQuery/main.do?lang=en

この観測プログラムに関する情報はこちらにあります(http://www.bio.gc.ca/science/monitoring-monitorage/azomp-pmzao/labrador/labrador-eng.php)。26ある観測ポイントの位置の情報がウェブサイトやメジャーなところではあまり記述がないのでここにまとめておきます。情報は1993年6月の航海のデータから引用しました。なぜかこのデータには経緯度に対する観測ポイントの情報が入っていました。データ入力してくれたのが親切な方だったのでしょうか。とにかくAR7Wの位置情報が入ったラブラドール海の地図の作成をしたかった自分としては助かりました。

データを確認したい人はCDIACのCARINAデータベース(http://cdiac3.ornl.gov/waves/discrete/)から18HU19930617を入手して確認ください(直接のリンクはこちら☞http://cdiac.ornl.gov/ftp/oceans/CARINA/Hudson/18HU93019/18HU19930617.exc.csv

Bloggerにはテーブルを作成するボタンがないのでHTMLコードを以下のサイトからいただきました:http://blogknowhow.blogspot.ca/2011/01/how-add-table-blogger-blogspot-post.html

Station Longitude Latitude
1 -55.992 53.8587
2 -55.544 53.678
3 -55.443 53.7933
4 -55.252 53.9908
5 -55.025 54.2212
6 -54.755 54.492
7 -54.485 54.7575
8 -54.262 54.9648
9 -54.133 55.1042
10 -53.97 55.2477
11 -53.828 55.4167
12 -53.617 55.6067
13 -53.393 55.846
14 -53.129 56.1165
15 -52.687 56.5517
16 -52.231 56.9643
17 -51.79 57.376
18 -51.345 57.7897
19 -50.89 58.2212
20 -50.408 58.6492
21 -49.947 59.0592
22 -49.474 59.4803
23 -49.176 59.7515
24 -48.892 59.9655
25 -48.675 60.1785
26 -48.555 60.2962

2013年7月15日月曜日

model data comparison (BioChem)

今日は最終的な(卒論で使われる)モデル結果(daily94)をBIOのデータと比べるためのmatlab scriptを書くことに。


mod_biochem3.csvと名付ける。1990-1994 (period of NAO+)のデータが入ってる。 NAO indexはこちらから
Station 8: June 5 - July 9
Station 15: May 30 - July 8
Station 25: May 30 - July 6

中身:

DEPTH

O2
Silicate


Phosphate
Nitrate


CO2_total



そしてもう一つはmod_biochem4.csvと名付ける。これは1994年のデータのみ入ってる。

Station 8: June 5
Station 15: June 2
Station 25: May 30

データを実際に見てみて不自然なことに気づいた。同じ深さで観測が一度以上行われている。そしてそれらの数値が同じ時間帯に観測したのにも関わらずかなり変動していた。

よくよく考えてみると各観測地のデータは3つのstationのデータが合わさったものとして自分でダウンロードしていたことを忘れていた。一つのstationだけでデータを集めようとするとサンプル数が少なかったので隣り合わせのstationを集めたんだった。例えば、station 8はstation7とstation9のデータも含まれている。


そしてモデルのほうはオフラインダイナミックスのデータ移動が終わったようなので8月以降のシミュレーションをすることに。そのためにdailyrun.shを少し書き換える必要があった:

tstep=(744 744 720 744 720 744) #672 744 720 744 720 744 744)
for month in 08 09 10 11 12 #02 03 04 05 06 07
do
replace "${tstep[10#${month}-8]}" "${tstep[10#${month}-7]}" -- namelist namelist_top
if test ${month} -gt 10; then
  replace "01`echo "${month}-1"| bc`01" "01${month}01" -- namelist
elif test ${month} -le 10; then
  replace "010`echo "${month}-1" | bc`01" "01${month}01" -- namelist
fi
for it in T U V W
do
ln -fs Lab_${it}_94_m${month}.nc Lab_${it}_94.nc
done
mv LABSEA_*_*T.nc ../MY_SRC/daily94/
cp LABSEA_*_restart_trc.nc ../MY_SRC/daily94/restart_trc_${month}.nc
mv -f LABSEA_*_restart_trc.nc restart_trc.nc
./opa
done   

太字のところが書き換えたところ。書き換えた理由は、${tstep[${month}-8]}だとなぜか

value too great for base

っというエラーが表示される。

理由はよくわからないがインデックスが8以上のとき起こるっぽい?

まぁとにかくここで解決策(10#を加える)を見つけたのであまり深追いしないことにする。

2013年7月13日土曜日

ザカートについて

恥ずかしながら今日までザカート(喜捨)の間違った理解をしていたことに気づいた。

毎年ラマダン期間中になるとモスクで

「今年のザカートは一人当たり〇〇ドルです。イード(断食月明け祝祭)まで受け付けています。」

というお知らせがあるので自分は今までこれをザカートだと思っていた。

そして今日友達に「ザカートって今年は誰に払えばいいのかな?」と聞いてみると

「ザカートってどのザカート?」っという質問がかえってきたので

「毎年ラマダン期間中に払うファルド(義務)のほうだよ」っと答えると…

「ラマダン期間中に払うザカートは誰に払えばいいのか知らないけどザカートは自分の収入に3%ぐらいだと思うよ」っという返事。

まさか?と思い帰ってWikipedia(英語)で調べてみるとザカートにはzakatとzakat-ul-fitrというものがあること、そして両方とも支払える人には支払う義務があることを知った。

自分はてっきりモスクで毎年ラマダン期間に支払うように呼びかけられてる金額が学生や収入のない(少ない)人たちが納める最低金額だと理解してこれをzakatとして今まで払っていた。

しかし調べてみると、どうやらzakatのほうは収入の2.5%を年一回、そしてzakat-ul-fitrはラマダン期間中に支払う義務のようだ。後者の金額や物資量(食べ物を納めてもよいとされている)についてはいろんな意見があるようだが基本的にはモスクや機関が設定してくれるのでその額を納めればいい。

ザカートはイスラームの五行のひとつなのにそれを正しく理解していなかったのは恥ずべきことだ。でも礼拝や断食のように日常的にやってることよりも注意されてないような気がした。

インシャアッラー、アッラーのお許しを願いこれからもっと勉強していこうと思う。そして早いうちに今年のザカートを払っておこう。

こちらのサイトにはザカート=フィトルについて分かりやすく書いてありました
ザカートの計算の目安がこちらのページにのっていましたが最低限相当の収入に達していない人には支払う義務はないのかどうかわかりません。

こちらのサイト(英語)によると、zakatはある一定のnisab(財産wealthのようなもの?)を超えた人に支払う義務があり、従ってnisabは収入とは違うようだ。ここで言われているzakatが義務づけられるnisabの最低額は金87.48g、金額にして約850ユーロらしい。nisabとされるものは金銀宝石などの他に土地や預金も含まれるみたい。そしてそれらのnisabが一年間継続して保持された時に初めてzakatとして支払う義務が求められるので預金など変動するものは自分で計算する必要がある。do your bestということで。


とりあえずもうちょっと調べたり周りの人に聞いたりしてみよう…。

2013年7月12日金曜日

simulate PISCES monthly 続き

スクリプトをいくつか編集してシミュレーションをしやすくした。手順は以下の通り

一月はスクリプトを使わずに手動で行う。確認することは:

  • 大気co2濃度設定
  • namelist_topでの初期値設定:
    • ln_rsttr      = .true.   !  start from a restart file (T) or not (F)
一月が終わったらln_rsttrを.true.に変更してあとは何も変えずに./dailyrun.shを実行して完了。

dailyrun.shには新しくreplaceコマンドとarray(列)を取り入れた:


tstep=(744 672 744 720 744 720 744 744) #January to August
for month in 02 03 04 05 06 07
do
replace "${tstep[${month}-2]}" "${tstep[${month}-1]}" -- namelist namelist_top
replace "010`echo "${month}-1" | bc`01" "01${month}01" -- namelist
for it in T U V W
do
ln -fs Lab_${it}_94_m${month}.nc Lab_${it}_94.nc
done
mv LABSEA_*_*T.nc ../MY_SRC/daily94/
cp LABSEA_*_restart_trc.nc ../MY_SRC/daily94/restart_trc_${month}.nc
mv -f LABSEA_*_restart_trc.nc restart_trc.nc
./opa
done


replaceは便利なコマンド。

例: file1とfile2内のabcをedfに書き換える

replace "abc" "edf" -- file1 file2

これにarrayを使って月別のタイムステップを各ループで自動変更させることにした。これで毎月ごとのシミュレーションを手動でせんでよかごとなったけんまぁだいぶ楽にはなったなぁ。

monthly simulation in offline version of PISCES

昨日の問題が解決した!

以下のエラー文を参考にわかったことは、1月のシミュレーションをするのに12月(先月)のデータが必要なのは最初の計算に必要だから。

                     iom_nf90_open ~~~ open existing file: ./Lab_T_94_m02.nc in READ mode
                    ---> ./Lab_T_94_m02.nc OK
                     iom_nf90_open ~~~ open existing file: ./Lab_T_94_m01.nc in READ mode
                    ---> ./Lab_T_94_m01.nc OK
           read sowaflcd (rec:   31) in ./Lab_T_94_m01.nc ok
fld_init : time-interpolation for sowaflcd read previous record =   31 at time =   30.50 days
                     iom_close ~~~ close file: ./Lab_T_94_m01.nc ok

未だにLab_T_94.ncが必要な理由がわからないがオフラインダイナミックスはちゃんと月データから読み込んでるのでシミュレーション自体には支障なし。ということで今回のランはdaily94と名づけることにする。

月ごとにシミュレートしていくためにdailyrun.shというスクリプト作成:

 month=07

for it in T U V W
do
ln -fs Lab_${it}_94_m${month}.nc Lab_${it}_94.nc
done
mv LABSEA_*_*T.nc ../MY_SRC/daily94/
cp LABSEA_*_restart_trc.nc ../MY_SRC/daily94/restart_trc_${month}.nc
mv -f LABSEA_*_restart_trc.nc restart_trc.nc
./opa

シミュレーションが終わったらこのスクリプトを走らせる前に以下のことをする:
  • namelist & namelist_pisces内のタイムステップ数を各月の日数に応じて変更(昨日の日記参照)。
  • namelist内のnn_date0を各月の一日に変更。(一年一月一日 = 010101)

2013年7月11日木曜日

一月分のデータだけが含まれたファイルを使ってのシミュレーションができない…

まとめ:NEMOで一ヶ月分(例えば一月分)のoffline dynamicsを使ってオフラインでPISCESをシミュレートしたいんだがうまくいかなかった。データが一ヶ月分しか含まれていないということの認識はできているようだがsowaflcdやsoicecovなどの2次元空間のデータが正しく読み込まれていないようだ。とりあえず本日のところは未解決。

日平均のデータを使って一ヶ月ずつシミュレーションをするように言われたのでそのメモ。

time resolution = 1hour (3600sec)

24 hours in 1 day

24 time steps per day

24*31 = 744 time sptes
24*30 = 720 time steps
24*28 = 672 time steps (February)

1994年のラブラドール海をシミュレーションした物理モデルデータなので大気中二酸化炭素濃度は360ppmに設定。

オフラインデータの情報もnamelist内で編集。
   sn_tem  = 'Lab_T_94_01' ,   24           , 'votemper' ,  .true.    , .true. ,   'yearly'  , ''       , ''

そしてシミュレーションスタート!っとすぐにストップ!
ocean.outputを見てみると原因がよくわからんエラーが。。。

===>>> : E R R O R
         ===========

           iom_get_123d, file: ./Lab_T_94_01.nc, var: votemper
 start and count too big regarding to the size of the data,
 (istart(4) + icnt(4) - 1) =   365                                                                                                                            
オフラインのデータは一ヶ月分あるからそれを使って一ヶ月間のシミュレーションはできるはずなんだがな〜。

少し原因を調べてみるとわかったことがひとつ。
namelistでオフラインデータを定義するときの'yearly'という情報があることに気づいた。どうやらこれはオフラインデータは一年間分のデータです、ということを定義しているみたいだ。だからこれを'monthly'というオプションに変えてシミュレート再スタート。

すると今度のエラーはこちら:
===>>> : W A R N I N G
         ===============                                                        
 previous year/month/week/day file: ./Lab_T_94_01_m12 not present -> back to current year/month/week/day

 ===>>> : E R R O R
         ===========
 
                     iom_open ~~~                                                File ./Lab_T_94_01_m01.nc* not found
fld_init : time-interpolation for votemper read previous record =    1 at time =   -0.50 days

Lab_T_94_01.ncというファイル名を定義したのに語尾が_m01.ncになったファイルを勝手に読み込もうとしているみたい。多分月単位のデータはm01を一月、m02を二月、というふうに定義するように設定されているみたいだ。

だったらファイル名をLab_T_94_m01.ncに変更して読み込めるようにしようじゃないかとやってみたら次のエラーはこちら…

===>>> : E R R O R
         ===========

           iom_get_123d, file: ./Lab_T_94_m01.nc, var: somixhgt
 The file has only 2 spatial dimension
 it is impossible to read a 3D array from this file...

 ===>>> : E R R O R
         ===========

           iom_get_123d, file: ./Lab_T_94_m01.nc, var: somixhgt
 start and count too big regarding to the size of the data,
 (istart(3) + icnt(3) - 1) =    46                                                                                                                                                                                                                
  is larger than idimsz(3) =    31                                                                                                                                                                                                                
fld_init : time-interpolation for somixhgt read previous record =    1 at time =   -0.50 days

最初の次元に関するエラー文は理解できない(ファイルの空間次元数は2だが3は必要ないのでこのエラーはおかしい)。次のエラー文の46というのはZ-coordinateのことをさしてるのでまたどこかでデータの読み込みが正しくされてないみたい。

明日教授に聞いてみよう。

2013年7月7日日曜日

USTREAMを久しぶりに訪れたら…

ニュースをネット中継している番組って最近増えてきましたね。例えば、aljazeeraとかだとテレビでやってる世界向けの報道をネットで生中継で気軽に見られたりします。以下はal jazeeraの放送を埋め込みました。でも埋め込めるのは中継じゃないみたい?中継はサイトから直接見ないといけないのかな?

日本語で24時間やってるのはないかとちょっと探してみましたがなさそうでした。でも、USTREAMでいい感じのラジオ番組を見つけました。熊本のラジオ局で日本時間で平日の午前中に中継されているみたいです。以下にソースを埋め込みました。


こういうのがもっともっと増えると国外に住んでいる人や家にネットしかない人にも便利になりますね。あと、こうやって埋め込めると自分のサイトとかに好きな番組を全て埋め込んでおけば容易に視聴することができますね。

2013年7月3日水曜日

LaTeX LaTeX LaTeX...

卒論最終段階突入!pdfファイルと.texファイルを見比べて編集中。そのうちに新しく学んだTeXコマンドなどを以下にメモしておくことに:

\protect\footnotemark for footnoting in the figure caption

現在使っているメモリアル大学卒論用のLaTeXのテンプレートは\munepsfigureというコマンドで図を扱うことができるのだがfootnote(補足)が従来の\footnotemarkだけではエラーが起き扱うことができなかった(図表中にfootnoteを取り込む方法☞http://tex.stackexchange.com/questions/10181/using-footnote-in-a-figures-caption)。しかし、\protect\footnotemarkと表記することで問題は解消された。\protectに関してはこちら(macros - What is the purpose of \protect? - TeX - LaTeX Stack Exchange)でまとめられている。

\text for writing alphabets with normal font in the equation

式の中の文字はデフォルトでは斜体(italic)になっています。普通のフォントを使いたい場合は\text{}を使います。他にも\textrm{}が同じことをやってくれるみたい(違いは\textrm{}は空白(スペース)が自動で作られないので\textのほうが使いやすい?)だが両方とも{}内にコマンドを打つと理解してくれないのでA×B=Cは\text{A \times B = C}と表記できずに\text{A} \times \text{B = C}と\textを分けて表記しなければいけない。ちょっとめんどくさいが現状はこれでやっていくことに。