2014年1月31日金曜日

今日やったこと

昨日HomeBrewでインストールしたはずのPyQtとPySideが使えなかった(pythonでimport PyQt4またはimport PySideとしたがエラー)ので代わりにこのサイトを参考にしてsudo port install py27-pyqt4でインストール完了。恐らく昨日インストールしたのは自分のpythonのバージョンと違うものだったので使えなかったのではないかと思う。

で、インストールできたけどこれまたダメ…このサイトでも述べられているように同じように苦しんでいる人もいるようだ。とりあえず今のところはpyncview.pyを使うのはあきらめることに。。。

FABM update: Depthは使えるがsurface_temperatureは使えなかったのでフォーラムに投稿完了。

続いてtkdiffというツールをHomeBrewを使ってインストール(→ターミナルでbrew install tkdiff


2014年1月30日木曜日

FABMモデルデベロプメントのためのプログラミングメモ

gitの基礎知識を「サルでもわかるgit入門」で勉強。

bin (binaryの略)フォルダをホームディレクトリに設置したがバイナリファイルを実行できなかったので原因を調べるとこのブログを参考にして.profileファイルに$HOME/binの$PATHを追加。

HomeBrewというMacPorts同様ソフトウェアやパーツのダウンロード・インストールを自動でやってくれる便利なツールをインストール。

上記のツールを使ってPyQtとPySideをインストールなう。参考にしたのはこのサイト

明日からはfabm_input.nmlの作成を行っていく。

2014年1月29日水曜日

FABMについてもっと習った

How to initialize & restore with measurements:
http://sourceforge.net/apps/mediawiki/fabm/index.php?title=Setting_up_a_simulation#Prescribing_biogeochemical_variables

"~/.profile" to export variables on log-in. <-- do this instead of creating "doit" executable in "src" directory.

Avoid having gotm-cases inside gotm-git.

Try to minimize editing the preexisting files to avoid conflicts.


"make distclean" to clean completely.

Add "pushurl" in ".git/config" to customize your git repository.

"git remote add model1 git://PATH2REPOSITORY" to add "model1" in your local.

git status
git pull --> update from remote to branch
git log
git remote --> list of added repositories in remote
git branch --> list of added repositories in local (branch)
git fetch

git checkout master --> switch the branch to "master"

git add --> add updates to branch
git commit --> update branch
git push --> update from branch to remote

The definitions of repository, branch, master, and origin are ambiguous here (currently learning...).

2014年1月26日日曜日

「gitについて習わんとな」の巻

gitはモデルを簡単にアップデートしてくれるので便利なツールだがカスタマイズされたサーバー上とは異なる内容の同一ファイルの管理方法がよくわからん。例えばさっきFABMモデルをアップデートしてみると:

$ git pull
remote: Counting objects: 702, done.
remote: Compressing objects: 100% (516/516), done.
remote: Total 589 (delta 421), reused 102 (delta 67)
Receiving objects: 100% (589/589), 202.05 KiB | 0 bytes/s, done.
Resolving deltas: 100% (421/421), completed with 83 local objects.
From git://fabm.git.sourceforge.net/gitroot/fabm/fabm
   75702b8..aa096ca  master     -> origin/master
Updating 75702b8..aa096ca
error: Your local changes to the following files would be overwritten by merge:
compilers/compiler.GFORTRAN
src/fabm_library.F90
src/models/Makefile
src/models/gotm/npzd/npzd.F90
Please, commit your changes or stash them before you can merge.
Aborting

こうなっていくつかのファイルがアップデートできなかったとなる。

GOTMは大丈夫だった。ほとんど何もいじってないから妥当か:

$ git pull
remote: Counting objects: 229, done.
remote: Compressing objects: 100% (182/182), done.
remote: Total 182 (delta 133), reused 0 (delta 0)
Receiving objects: 100% (182/182), 30.97 KiB | 0 bytes/s, done.
Resolving deltas: 100% (133/133), completed with 32 local objects.
From git://git.code.sf.net/p/gotm/code
   02338d5..744d4d8  master     -> origin/master
   7527471..ea5f858  ice        -> origin/ice
Updating 02338d5..744d4d8
Fast-forward
 doc/gotm_pub.bib                | 145 +++++++++++++++++++++-
 src/Rules.make                  |   4 -
 src/airsea/airsea.F90           |   4 +-
 src/airsea/airsea_variables.F90 |   3 +-
 src/extras/bio/bio.F90          |  29 ++++-
 src/fabm/gotm_fabm.F90          | 266 ++++++++++++++++++++++++++--------------
 src/fabm/gotm_fabm_output.F90   | 103 ++++++++++++----
 src/gotm/gotm.F90               |  42 +++++--
 src/meanflow/meanflow.F90       |   4 +-
 src/output/ncdfout.F90          |  18 ++-
 src/output/output.F90           |  40 +++---

 11 files changed, 487 insertions(+), 171 deletions(-)

→今週の課題はgitを理解すること。少なくともモデル開発の支障がない範囲の理解ができればいい。

2014年1月24日金曜日

How to autostart Dropbox on Ubuntu

I downloaded Dropbox on Ubuntu following these steps on the Dropbox website.

Unfortunately, there is no option to autostart Dropbox for the version I downloaded (usually, you can set this in "Preferences" but there is no such check box..).

Fortunately, you can set this manually using Ubuntu's "Startup Applications", as follows:

Dash home --> Startup Applications --> Add --> Then enter the information below:

Name: Dropbox
Command: ~/.dropbox-dist/dropboxd
Comment: Autostart Dropbox Application

***Note: "Name" and "Comment" can be anything.

--> Save --> Close

That's it. Log-out or restart your computer to see if Dropbox starts up automatically.

Reference: http://askubuntu.com/questions/315034/start-dropbox-on-startup

2014年1月23日木曜日

「netcdfとgfortranはマッチアップさせんといかん」の巻

netcdfが/opt/local内(/includeと/lib)にうまくインストールされたのでいざコンパイル!っとGOTMでやってみたが以下のエラーが…

use netcdf
             1
Fatal Error: Wrong module version '10' (expected '6') for file 'netcdf.mod' opened at (1)

調べた結果、どうやら自分がインストールしたnetcdfとこのパソコンにインストールされているgfortranのバージョンがマッチしないのが原因のよう。

GFortranのサイトのMacOSXインストール手順に従って、(1)現在インストールされているgfortranを削除→(2)Mavericks用(最新)のgfortranをインストールした。

するとうまくいった!!!

「netCDFを簡単にMacにインストールする」の巻


netCDFは海洋モデルで標準なファイルフォーマットなのでいつも扱っているが今まではずっと大学のパソコンを使っていたのでインストールとかしたことなくて自分のMacbook airにインストールしてみようとしてnetCDFの公式サイトのインストールガイドを参考してみるが苦戦…。

何か簡単な方法はないかとググってみると、こんなフォーラムを発見→http://www.unidata.ucar.edu/support/help/MailArchives/netcdf/msg11807.html


ここで記されている手順に従ってなんとか自分のMacbook Airにインストールすることができたので以下にメモ書き:

  1. App StoreでXcodeをダウンロードする。
  2. ダウンロードが完了したらXcodeを起動もしくはターミナルで以下のコマンドを入力してライセンスに同意する。
    sudo xcodebuild -license
  3. MacPortsをダウンロード&インストールする。
  4. ターミナルで以下のコマンド入力するとnetCDF-4とHDF5がインストールされる。
    sudo port install netcdf
  5. ターミナルで以下のコマンドを入力するとfortran API(fortranでnetcdfを扱えるようになる)がインストールされる。
    sudo port install netcdf-fortran
  6. 他のAPIをインストールしたい場合は上記のnetcdf-fortranの部分をPython APIの場合py-netcdf4、C++ legacy libraryの場合netcdf-cxx、C++ netCDF-4 libraryの場合netcdf-cxx4と入れ替える。
ターミナルでsudo port install netcdfとsudo port install netcdf-fortranを入力した結果例(インストール成功)。

2014年1月21日火曜日

久しぶりのODE

Climate Systemのクラスの宿題で1st order ODEを解く問題が出て苦戦。。

ODEを勉強したのは学部3年生の数学と数学物理ぐらいであとは研究でも解くことがない(モデラーは基本、数値解析なので紙と鉛筆を使って解く機会がないw)のでfirst order non-homogeneous differential equationひとつ解くのに大苦戦。

結局以下のHyper Physicsをお手本に解答できたよ。

http://hyperphysics.phy-astr.gsu.edu/hbase/math/deinhom.html

普段からもっと解く練習しておくべきかな。。

2014年1月19日日曜日

adamsbashforth.m

↓学部四年生のときにとった海洋モデリングの宿題。

%clear all;

dt=1;
dx=0.1;
dy=0.1;
du=0.1;
dv=0.1;
period=1000;
nmax=period/dt;
u0=0.05;
v0=0.05;
f=0.5*2*pi/24; % coriolis parameter at mid-latitude (i.e. at 45 deg.N)
u(1)=0.7;
v(1)=0;
x(1)=0;
y(1)=0;
%solve for u(2) and v(2) using forward scheme since we don't have it.
u(2)=u(1)*dt;
v(2)=v(1)*dt;
for n=2:nmax-1

u(n+1)=u(n)+f*dt*0.5*(3*v(n)-v(n-1));
v(n+1)=v(n)-f*dt*0.5*(3*u(n)-u(n-1));
end
for n=1:nmax-1
%euler forward
x(n+1)=x(n)+dt*(u0+u(n));
y(n+1)=y(n)+dt*(v0+v(n));
end


figure;plot(x,y);title 'Trajectory of the parcel';xlabel 'x(m)'; ylabel 'y(m)';

gen1d.f90

↓最近作ったプログラム(2012年夏)。

! This script extracts the 1-D data from 3-D offline dynamics.

program generate1d
implicit none
INCLUDE 'netcdf.inc'
integer,parameter::jpi=499,jpj=604,jpk=46,jpt=31
integer::ncid,ncfile,tempid,saliid,windid,wateid,swrnid,turbid,icecid,dim1,dim2,dim3,dim4,it,dtemp,dsali,dwind,dicec,dswrn,dturb,dwate
real,dimension(jpi,jpj,jpk,jpt)::temp,sali
real,dimension(jpi,jpj,jpt)::wind,wate,swrn,turb,icec
integer,dimension(3)::stnx,stny,dim1d
integer,dimension(4)::dim2d
real,dimension(3,1,jpk,jpt)::temp1,sali1
real,dimension(3,1,jpt)::wind1,wate1,swrn1,turb1,icec1

! Open the data file
ncfile=nf_open('Lab_T_94_07.nc',nf_nowrite,ncid)
! Inquire the variables
ncfile=nf_inq_varid(ncid,'votemper',tempid)
ncfile=nf_inq_varid(ncid,'vosaline',saliid)
ncfile=nf_inq_varid(ncid,'sowindsp',windid)
ncfile=nf_inq_varid(ncid,'sowaflcd',wateid)
ncfile=nf_inq_varid(ncid,'soshfldo',swrnid)
ncfile=nf_inq_varid(ncid,'somixhgt',turbid)
ncfile=nf_inq_varid(ncid,'soicecov',icecid)
! Extract 3D data
ncfile=nf_get_var_real(ncid,tempid,temp)
ncfile=nf_get_var_real(ncid,saliid,sali)
ncfile=nf_get_var_real(ncid,windid,wind)
ncfile=nf_get_var_real(ncid,wateid,wate)
ncfile=nf_get_var_real(ncid,swrnid,swrn)
ncfile=nf_get_var_real(ncid,turbid,turb)
ncfile=nf_get_var_real(ncid,icecid,icec)
! Close the data file
ncfile=nf_close(ncid)

stnx=(/ 282, 301, 350 /)
stny=(/ 382, 416, 500 /)
do it=1,3
 temp1(it,1,:,:)=temp(stnx(it),stny(it),:,:)
 sali1(it,1,:,:)=sali(stnx(it),stny(it),:,:)
 wind1(it,1,:)=wind(stnx(it),stny(it),:)
 wate1(it,1,:)=wate(stnx(it),stny(it),:)
 swrn1(it,1,:)=swrn(stnx(it),stny(it),:)
 turb1(it,1,:)=turb(stnx(it),stny(it),:)
 icec1(it,1,:)=icec(stnx(it),stny(it),:)
end do

ncfile=nf_create('Lab_T_1d_94_07.nc',nf_share,ncid)
ncfile=nf_def_dim(ncid,'nlon',3,dim1)
ncfile=nf_def_dim(ncid,'nlat',1,dim2)
ncfile=nf_def_dim(ncid,'ndepth',jpk,dim3)
ncfile=nf_def_dim(ncid,'ntime',jpt,dim4)
dim2d(1)=dim1
dim2d(2)=dim2
dim2d(3)=dim3
dim2d(4)=dim4
dim1d(1)=dim1
dim1d(2)=dim2
dim1d(3)=dim4
ncfile=nf_def_var(ncid,'nvotemper',nf_real,4,dim2d,dtemp)
ncfile=nf_def_var(ncid,'nvosaline',nf_real,4,dim2d,dsali)
ncfile=nf_def_var(ncid,'nsowindsp',nf_real,3,dim1d,dwind)
ncfile=nf_def_var(ncid,'nsoshfldo',nf_real,3,dim1d,dswrn)
ncfile=nf_def_var(ncid,'nsoicecov',nf_real,3,dim1d,dicec)
ncfile=nf_def_var(ncid,'nsowaflcd',nf_real,3,dim1d,dwate)
ncfile=nf_def_var(ncid,'nsomixhgt',nf_real,3,dim1d,dturb)
ncfile=nf_enddef(ncid)
ncfile=nf_put_var_real(ncid,dtemp,temp1)
ncfile=nf_put_var_real(ncid,dsali,sali1)
ncfile=nf_put_var_real(ncid,dwind,wind1)
ncfile=nf_put_var_real(ncid,dswrn,swrn1)
ncfile=nf_put_var_real(ncid,dicec,icec1)
ncfile=nf_put_var_real(ncid,dwate,wate1)
ncfile=nf_put_var_real(ncid,dturb,turb1)
ncfile=nf_close(ncid)

end program generate1d

subroutine handle_err(errcode)
        implicit none
        include 'netcdf.inc'
        integer errcode
       
        print *, 'Error: ', nf_strerror(errcode)
        stop 2
        end

divide_5day.f90

昔作ったプログラム、その参。

! This program divides 5day-mean data
! so that the file size does not exceed the memory size on stokes
! created by Hakase Hayashida on Jan.24.2012

! Replace the ones with "!" symbols to the appropriate ones
program dividenetcdfdata
implicit none
INCLUDE 'netcdf.inc'
integer,parameter::jpi=304,jpj=334,jpk=46,jpt=72
integer::ncid,ncfile,dim1,dim2,dim3,dim4,divider,dimtx(3)!,dimtx(4)
integer::tempid,deftemp1,deftemp2,deftemp3,deftemp4
integer::vartemp
real,dimension(jpi,jpj,jpt)::temp
real,dimension(jpi,jpj,18)::temp1,temp2,temp3,temp4
!real,dimension(jpi,jpj,jpk,jpt)::temp
!real,dimension(jpi,jpj,jpk,18)::temp1,temp2,temp3,temp4

!Opening netcdf data file from grid_t,v,u,w
ncfile=nf_open('grid_t29.nc',nf_nowrite,ncid) !
ncfile=nf_inq_varid(ncid,'sohefldo',tempid) !
ncfile=nf_get_var_real(ncid,tempid,temp)
ncfile=nf_close(ncid)

!Dividing the data
divider=18
temp1=temp(:,:,1:divider)
temp2=temp(:,:,divider+1:divider*2)
temp3=temp(:,:,1+divider*2:divider*3)
temp4=temp(:,:,1+divider*3:divider*4)

!Creating netcdf data file for temperature
ncfile=nf_create('lab29f.nc',nf_share,ncid) !
ncfile=nf_def_dim(ncid,'x',jpi,dim1)
ncfile=nf_def_dim(ncid,'y',jpj,dim2)
!ncfile=nf_def_dim(ncid,'deptht',jpk,dim3)
ncfile=nf_def_dim(ncid,'time_counter',divider,dim4)
dimtx(1)=dim1
dimtx(2)=dim2
!dimtx(3)=dim3
dimtx(3)=dim4
!dimtx(4)=dim4
ncfile=nf_def_var(ncid,'sohefldo1',nf_real,3,dimtx,deftemp1) !
ncfile=nf_def_var(ncid,'sohefldo2',nf_real,3,dimtx,deftemp2) !
ncfile=nf_def_var(ncid,'sohefldo3',nf_real,3,dimtx,deftemp3) !
ncfile=nf_def_var(ncid,'sohefldo4',nf_real,3,dimtx,deftemp4) !
ncfile=nf_enddef(ncid)
ncfile=nf_put_var_real(ncid,deftemp1,temp1)
ncfile=nf_put_var_real(ncid,deftemp2,temp2)
ncfile=nf_put_var_real(ncid,deftemp3,temp3)
ncfile=nf_put_var_real(ncid,deftemp4,temp4)
ncfile=nf_close(ncid)

end program dividenetcdfdata


subroutine handle_err(errcode)
      implicit none
      include 'netcdf.inc'
      integer errcode

      print *, 'Error: ', nf_strerror(errcode)
      stop 2
      end

convert5day2mm.f90

昔作ったプログラム、その弐。

program mmtest
! converts 5-day average data into monthly average data
implicit none
INCLUDE 'netcdf.inc'

integer,parameter::jpi=544,jpj=336,jptcon=1468,jpt=73
integer::i,jan(6),feb(6),mar(6),apr(6),may(6),jun(6)
integer::jul(6),aug(7),sep(6),oct(6),nov(6),dec(6)
character(2)::yrpar(10),monpar(12)
character(100)::filnam
character(5)::dirnam
character(8)::param
integer::ncfile,varid,value,ncid,ncid2,newvarid,r,rrr
! rgyr=regularyear(365days),lpyr=leapyear(366days)
integer::idvar,dim1,dim2,dim3,dim4,dimty(3)
real,dimension(jpi,jpj,46,jpt)::varhu
real,dimension(544,336,46)::janhu,febhu,marhu,aprhu,mayhu,junhu,julhu,sephu,octhu,novhu,dechu
real,dimension(544,336,46)::mmjan,mmfeb,mmmar,mmapr,mmmay,mmjun,mmjul,mmaug,mmsep,mmoct,mmnov,mmdec
real,dimension(544,336,46)::aughu
real,dimension(544,336,46,12)::mm
real,dimension(12,46,336,544)::mmyear_fixed

yrpar=(/'01','02','03','04','05','06','07','08','09','10'/)

jan=(/(i,i=1,6)/)
feb=(/(i,i=7,12)/)
mar=(/(i,i=13,18)/)
apr=(/(i,i=19,24)/)
may=(/(i,i=25,30)/)
jun=(/(i,i=31,36)/)
jul=(/(i,i=37,42)/)
aug=(/(i,i=43,49)/)
sep=(/(i,i=50,55)/)
oct=(/(i,i=56,61)/)
nov=(/(i,i=62,67)/)
dec=(/(i,i=68,73)/)

do rrr=1,10
!!!!!!!!!!!!!!!! change the three lines !!!!!!!!!!!!!!!!
dirnam='P/POS'
filnam='NAO_'//dirnam//'NAO_5d_00'//yrpar(rrr)//'0101_00'//yrpar(rrr)//'1231_grid_T.nc'
param='vosaline'
ncfile=nf_open(filnam,nf_nowrite,ncid)
ncfile=(nf_inq_varid(ncid,param,varid))
ncfile=(nf_get_var_real(ncid,varid,varhu))
ncfile=nf_close(ncid)

!dat1=varhu(:,:,:,1:6)
!janhu=sum(dat1,dim=4)

janhu=sum(varhu(:,:,:,jan),dim=4)
febhu=sum(varhu(:,:,:,feb),4)
marhu=sum(varhu(:,:,:,mar),4)
aprhu=sum(varhu(:,:,:,apr),4)
mayhu=sum(varhu(:,:,:,may),4)
junhu=sum(varhu(:,:,:,jun),4)
julhu=sum(varhu(:,:,:,jul),4)
aughu=sum(varhu(:,:,:,aug),4)
sephu=sum(varhu(:,:,:,sep),4)
octhu=sum(varhu(:,:,:,oct),4)
novhu=sum(varhu(:,:,:,nov),4)
dechu=sum(varhu(:,:,:,dec),4)

!end do

mm(:,:,:,1)=janhu/float(6)
mm(:,:,:,2)=febhu/float(6)
mm(:,:,:,3)=marhu/float(6)
mm(:,:,:,4)=aprhu/float(6)
mm(:,:,:,5)=mayhu/float(6)
mm(:,:,:,6)=junhu/float(6)
mm(:,:,:,7)=julhu/float(6)
mm(:,:,:,8)=aughu/float(7)
mm(:,:,:,9)=sephu/float(6)
mm(:,:,:,10)=octhu/float(6)
mm(:,:,:,11)=novhu/float(6)
mm(:,:,:,12)=dechu/float(6)

!mmyear=(/mmjan,mmfeb,mmmar,mmapr,mmmay,mmjun,mmjul,mmaug,mmsep,mmoct,mmnov,mmdec/)
!mmyear=reshape((/mmjan,mmfeb,mmmar,mmapr,mmmay,mmjun,mmjul,mmaug,mmsep,mmoct,mmnov,mmdec/),shape(mmyear))
monpar=(/'01','02','03','04','05','06','07','08','09','10','11','12'/)

do r=1,12

ncfile=nf_create('NAO_'//dirnam//'NAO_grid_'//param//'_year'//yrpar(rrr)//'_month' //monpar(r)//'.nc',nf_share,ncid2)
ncfile=nf_def_dim(ncid2,'x',544,dim1)
ncfile=nf_def_dim(ncid2,'y',336,dim2)
ncfile=nf_def_dim(ncid2,'z',46,dim3)
!ncfile=nf_def_dim(ncid2,'month',12,dim4)
dimty(1)=dim1
dimty(2)=dim2
dimty(3)=dim3
!dimty(4)=dim4
ncfile=nf_def_var(ncid2,param,nf_real,3,dimty,newvarid)
ncfile=nf_enddef(ncid2)
ncfile=nf_put_var_real(ncid2,newvarid,mm(:,:,:,r))
ncfile=nf_close(ncid2)

end do
end do
end program mmtest


subroutine h(status)
      integer::status
      INCLUDE 'netcdf.inc'
      if (status .ne. NF_NOERR) then
         print *, NF_STRERROR(status)
         stop 'stopped here'
      end if
      return
      end

convert_5day_to_month.f90

昔作ったフォートランプログラムをここに保存。

! This program extracts temperature data from grid_T file
! so that the file size does not exceed the memory size on stokes
! created by Hakase Hayashida on Jan.18.2012

program convertnetcdfdata
implicit none
INCLUDE 'netcdf.inc'
integer,parameter::jpi=304,jpj=334,jpk=46,jpt=72,nmonth=12
integer::ncid,ncfile,dim1,dim2,dim3,dim4,dimtx(4)
integer::tempid,saliid,meriid,vertid,deftemp,defsali,defmeri,defvert
integer::ind1,tt,vartemp,varsali,varmeri,varvert
real,dimension(jpi,jpj,jpk,jpt)::temp,sali,meri,vert
real,dimension(jpi,jpj,jpk,nmonth)::montemp,monsali,monmeri,monvert

!Opening netcdf data file from grid_t,v,w
ncfile=nf_open('grid_t28.nc',nf_nowrite,ncid)
ncfile=nf_inq_varid(ncid,'votemper',tempid)
ncfile=nf_inq_varid(ncid,'vosaline',saliid)
ncfile=nf_get_var_real(ncid,tempid,temp)
ncfile=nf_get_var_real(ncid,saliid,sali)
ncfile=nf_close(ncid)
ncfile=nf_open('grid_v28.nc',nf_nowrite,ncid)
ncfile=nf_inq_varid(ncid,'vomecrty',meriid)
ncfile=nf_get_var_real(ncid,meriid,meri)
ncfile=nf_close(ncid)
ncfile=nf_open('grid_w28.nc',nf_nowrite,ncid)
ncfile=nf_inq_varid(ncid,'vovecrtz',vertid)
ncfile=nf_get_var_real(ncid,vertid,vert)
ncfile=nf_close(ncid)


!Converting the 5day-mean data into monthly-mean data
ind1=1
do tt=1,12
 montemp(:,:,:,tt)=sum(temp(:,:,:,ind1:ind1+5),dim=4)/float(6)
 monsali(:,:,:,tt)=sum(sali(:,:,:,ind1:ind1+5),dim=4)/float(6)
 monmeri(:,:,:,tt)=sum(meri(:,:,:,ind1:ind1+5),dim=4)/float(6)
 monvert(:,:,:,tt)=sum(vert(:,:,:,ind1:ind1+5),dim=4)/float(6)
 ind1=ind1+6
end do

!Creating netcdf data file for temperature
ncfile=nf_create('lab28_mm_tsvw.nc',nf_share,ncid)
ncfile=nf_def_dim(ncid,'x',jpi,dim1)
ncfile=nf_def_dim(ncid,'y',jpj,dim2)
ncfile=nf_def_dim(ncid,'deptht',jpk,dim3)
ncfile=nf_def_dim(ncid,'time_counter',nmonth,dim4)
dimtx(1)=dim1
dimtx(2)=dim2
dimtx(3)=dim3
dimtx(4)=dim4
ncfile=nf_def_var(ncid,'votemper',nf_real,4,dimtx,deftemp)
ncfile=nf_def_var(ncid,'vosaline',nf_real,4,dimtx,defsali)
ncfile=nf_def_var(ncid,'vomecrty',nf_real,4,dimtx,defmeri)
ncfile=nf_def_var(ncid,'vovecrtz',nf_real,4,dimtx,defvert)
ncfile=nf_enddef(ncid)
ncfile=nf_put_var_real(ncid,deftemp,montemp)
ncfile=nf_put_var_real(ncid,defsali,monsali)
ncfile=nf_put_var_real(ncid,defmeri,monmeri)
ncfile=nf_put_var_real(ncid,defvert,monvert)
ncfile=nf_close(ncid)

end program convertnetcdfdata

subroutine handle_err(errcode)
      implicit none
      include 'netcdf.inc'
      integer errcode

      print *, 'Error: ', nf_strerror(errcode)
      stop 2
      end

ニシン

ニシン来たかとカモメに問えば~♫

でおなじみのニシン。

どんな魚か知らんかったけどherringという魚が近くのスーパーで売られていたので買って帰って辞書を引いてみるとこれがニシンということが判明。

どうやって食べるか…とりあえずオーブンで焼くことに。

1パック3尾入っていてひとつめの腸を取り除こうと包丁でメスを入れると中から小さな卵が大量にまとまって入っていた。

これは何というのか「ニシン メス 卵」でググってみると

「数の子」

っという答えが出てきた。なるほど、数の子とはニシンのメスの卵のことだったのかと納得。従って卵はキープすることに。

二尾目もメスで数の子をキープ。でも三尾目は違って数の子と同じような何かの塊なんだが卵ではない…なのでオスだろうと仮定して「ニシン オス」でググってみると

「白子(しらこ)」

だということがわかった。これはオスの精巣らしい。。食べられるらしいのでこれもキープ。

ニシンの本体をオーブン450°Fで焼いているうちに数の子と白子は小さな鍋に「水・醤油・塩・砂糖」と一緒にコトコト煮ることに。

適当に作ってみたがおいしかった。またHerringが売られていたら買ってみよう。
上:白子。下:数の子。どちらとも生(調理前)。

2014年1月14日火曜日

足が疲れた一日。

今日は一日中立ちっぱなし&歩き回った。おかげで稀に見る足の疲れでベッドからブログを更新する始末。立ち上がる気がしない。。

朝は六時起床。ファジル礼拝のためマスジドへ徒歩12分。っということは往復約30分。いいエクササイズ。

帰宅後シャワーを浴びてご飯食べて大学へ。朝一は指導教官とのミーティング。その後一年生のラボのTA約二時間。二回目なのでだいぶ落ちついて話せるようになったけど一人でペラペラしゃべるのはやはり違和感がある。その後すぐに三階へ上がりバイオジオケミカルモデリンググループミーティング。今日は自分の発表の番で修士課程の研究発表。かなりせからせてなんとか時間内二十分で終了。その後ハイパーダッシュで図書館地下へ。ウドゥ後速やかにズフル礼拝。なんとかセーフ。15分後に六人でアスル合同礼拝。学部へ戻ると今度は同僚の研究発表を聞くこと一時間。ようやく一日が終わるかとバスに乗りこもうとしたら先客が‥‥アジア系のおじいさんで空き缶や瓶でいっぱいのゴミ袋を抱えてバスに乗り込む。バスの運転手は特に気にすることもなくおじいさんは前の座席スペースをゴミ袋で埋める。。

マジかと思いながらバスに乗ると座席が空いてなかったので止むを得なくおじいさんの後ろの席へ座る‥‥

バスが走り出すと案の定空き缶、特にビール缶からであろうと思える異臭が漂い始めた。途中吐きそうになったので降りようかと思ったがなんとか持ちこたえて最寄りのバス停で降車、帰宅。

このおじいさんはおそらく集めた空き缶や空き瓶をリサイクルセンターへ持って行き換金して生活費を稼いでいるんだろうけど、ん~なんとかならんもんかね。。これから暖かくなってくるので匂いはさらに強く拡散されるはず(ーー;)

2014年1月12日日曜日

Vikesの試合観戦

昨日は大学の男子バスケットボールの試合を見てきた。バスケの試合を生で見るのは高校以来じゃないかな。

UVic Vikes(大学のチーム名)はアルバータ大学のBearsと対戦。序盤からBears優位の試合展開が続いたがハーフタイム直前に追いつき同点で前半を終えた。しかしまたBearsに試合の流れを持っていかれ引き離されるが最終クオーターにVikesがついにこの試合初のリードを奪う。しかしまたすぐに引き離され追いつきの試合展開で結局最後に力つき3点差、58−61(?)のロースコアゲームとなった。

でもやっぱりスポーツはテレビより実際に会場で見た方が面白いし盛り上がるね。そして常にあ〜自分もやりたい!と思ってさらに自分ならこうしてうまくやるのに〜という錯覚に陥る(笑)。

UVicのいいところは学生は皆Vikesの試合を無料で見に行けること。案の定、会場はほとんどの席が埋まっていた。これは他の大学も見習うべき。MUNは一年生だけ無料で二年生以降はみんな入場料を払わないといけない(今は知らないが少なくとも自分が在籍していたときはそうだった)。これでは観客も入らず盛り上がるわけがない。学費を納めるときに体育館使用料のレクレーション費の一部に含めればいい。

2014年1月11日土曜日

メモリアル大での研究のメモ

Dropboxを整理しておくといろんなものが出てくる。

中にNEMOモデルを使ってラブラドール海のモデルシミュレーションをやっていた頃の過程ノートがテキストファイルであったので削除する前にここに載せておく。

以下stn_note.txt

USE:
namelist_pisces
voddmavs or votkeavt
atcco2=280 (349ppm in 1987, but use 280 for equilibrium state)
nrdttrc=1
ln_pisdmp=true (relaxation) ---> currently works only with "orca" configuration and NOT 1D. Thus, this does nothing for my case.
nn_pisdmp=end of year
namelist_top
ln_trcdta=true
ln_trcdmp=true (damping)!
nn_hdmp_tr=89
namelist
rn_rdt<86400 (1day)
nn_msh=1 (mesh file)
ln_dynwzv=false (read w from file)
stn15/

case3+: dt=6hr
case3333&33333:no initialization
---> unrealistic value of NO3 (x2 greater)

case10+:dt=1day
10years simulation

10&10_1:no initialization
10:no damp or relax
10_1:damp & relax on every 365days (whole column)
10_2&10_3:seems to be the same...
10_3: same as 10_1 except initialization used.
10_4:same as 10_3 except constant & weak eddy diffusivity (10^-5)
10_5:same as 10_3 except no damping or relax.

case30+:30 years simulation
30_1:same as 10_3 except 280ppm & 30 years

Tracer damping or relaxation do not work in 1D...

DONE:
deleted: 10_2, 10_4,10_5


Above setups are all WRONG UP UNTIL NOW because the mesh_mask.nc was wrong.

case30_2: dt=1day; 30 years; 280ppm
case10_6: dt_1hr; 10 years; 280ppm (hopefully this will improve case30_2 since including diurnal cycle)


case1_1: dt=1hr; 1yr;
case1_2: dt=1hr; 2yr; <-- I want to see if model results improve after 1st year. --> can't see it very clearly :(
case1_3: dt=1hr; 10yr; --> it drifts away (same as case2_1).
case2_1: dt=1day; 10yr; <-- I want to see if model results improve with time resolution. --> no, rather it drifts away.

With the new physical data:

case3_1: dt=1hr; 2yr; (same as case2_1, but new physical data)

run0: This is the old physical data, which I might use?
run1: This is what I use for my thesis. conditions are:

280ppm
monthly-mean offline dynamics for 1987


damping???

以下LABSEA_note.txt

case1_3: new offline dynamics: NaN at kt=93; dt=1hr
case1_4: same as case1_3 except damping 1day

==========
beta2:
the model works with dt=100sec
instability at bottom left corner, as well as reduction of DIC in the whole domain (unrealistic)
suggesions: reduce horizontal eddy diffusivity (currently 2000)

beta3:
same as beta2 except reduced horizontal eddy diffusivity in namelist_top (changed to 90)
--> still instability. --> needs to modify the code to make it OBC instead of CBC.


20minutes work!
must use 32 CPUs.

一週間終えて

新学期一週目が終わった。さすがに三科目同時にとるとそれぞれのクラスでやらなければやらないことを整理するために頭の中がこんがらがってしまって均衡状態に戻すまでに時間がかかりそうだ。

今学期とってる科目をそれぞれ紹介:


  1. 気候力学
    英語でClimate Dynamics。気候について気水氷地生等全てを含んだシステムとして勉強していく。うちの学部の二回はCCCma(カナダ気候モデリングおよび解析センター)なのでそのモデルでシミュレーションされた結果を解析することも宿題としてやっていくらしい。ちなみにこの結果はIPCCの最新レポートでも使われているのでこのデータを授業科目として扱えるのはすごくラッキーなこと。
  2. 大気境界圏物理学
    英語でPhysics of Atmospheric Boundary Layer。大気の地上約1kmの力学を勉強する科目。自分にとってはDMSとして放出されたマリンエアロゾルがどうやって大気圏をさまようのかということを知る上で役に立つと思う。
  3. リサーチフロンティア
    英語でResearch Frontier。これはうちの学部の院生必須科目で毎週学部内外のゲスト研究者がやってきて地球海洋科学に関連のある様々な講義を聞き討論するというもの。毎週授業前に講義で扱われる論文を読んでおかなくてはいけない。自分の研究と全く関連のないものがほとんどなので理解するのが大変そう。

2014年1月8日水曜日

税金が戻ってきた

CRAから郵便アリ。

また税金の徴収かと思ったら逆で戻ってきた&もらった。

戻ってきたのはGST/HSTと呼ばれる消費税。

もらったのはBC climate action taxというブリティッシュコロンビア州独自の税金。

2012年度の収入ではどうやら自分が低収入者枠に入るらしい。

学生なのですごく助かる。

2014年1月7日火曜日

ジメチルスルフィドのシンポジウム紹介

ジメチルスルフィド(Dimethylsulfide)、通称DMSを研究している人はご存知かもしれませんが五月の最後の週にスペインのバルセロナで第六回ジメチルスルフィドシンポジウムが開催されます。確か4・5年(?)に1回しかない集まりでモデリング、観測、実験、他広範囲のDMS関連の研究者が世界中から参加するそうです。自分は今回が初参加となります。アブストラクトの提出期限は2月いっぱいです。詳しくは公式サイトをご覧ください→http://www.dmspsymposium.com/

早速アブストラクト作成に取り組もうっと。シンポジウムまでに海氷生態系DMSモデルが完成するといいが。

新学期始まる

昨日から新学期が始まりバスの中が朝からにぎやかになった。

今学期は三科目取ってる。一度にこんなに多くとるのは学部生以来。これまで大学院の授業は学部科目の倍の労力が要ると計算していたので6科目分?

どの科目も論文を読んで理解して授業中の議論に参加することが要求されるのでそれだけ各授業への準備が多く必要になる。その辺学部生の頃と比べると大変だがテストや試験がないので自分はこっちのほうが好きだ。

授業がいそが忙しくなりそうなので合気道は始められそうにない…夏も忙しくなりそうだしこりゃ9月から再開することになるかもしれん。一年間のブランクということになるが大丈夫だろうか。。

研究にも手がつかないってならんごとタイムマネージメントをうまくせんといかん。

写真はお母様から送られてきた誕生日プレゼントと一緒に入っていた梅干し。

2014年1月5日日曜日

家庭菜園を始めたい

冬休みも今日で終わり。

休みモードから仕事モードへ切り替えをスムーズにするために断食することにした。

ここ数日天気が異常に良い。真冬だというのに太陽がガンガン照ってるせいで部屋の中は暖房なしで20℃越え。

そして前から思っていたが最近確信した。。家庭菜園をやりたい。

今住んでるアパートには結構ゆとりのあるベランダがあり日当りもいいのでガーデニングには絶好なのではと思っている。

友達から入居祝いにもらった花が枯れてしまって残った鉢がひとつあるので早速種でもまいてみようかと思ったがこの町で種を売っている店を探すのは難しい…ウェブで調べると

Dig thisとかあるみたいだがダウンタウンの店舗は現在はないらしい。。

とりあえず歩ける範囲でCanadian tireに行ってみたがガーデニングコーナーはあるものの種は置いておらず…。

日本だとホームセンターとか行けばすぐ見つかるのに。。

もしや春頃になると売られるようになるかもな。

でもどうしても種が欲しいのでもうちょっと探してみるとAmazonに売ってある。真っ黒なストロベリーの種とかいう怪しそうなのもあるw

Amazonで購入する場合の欠点は商品より高い送料を払う必要があること(種$3に対して送料$5)。これじゃあぶが合わない。

でも他になさそうなのでAmazonで買うことを検討している。

その前にどんな野菜が育てられるか調べてみると素敵なサイトを見つけた

ベランダで出来る家庭菜園

もうちょっとこのサイトを見て勉強してから始めてみることにする。

2014年1月4日土曜日

年末年始あれこれ

休み中はクリスマス前後は友達が二人遊びに来てて観光地を案内していろいろ忙しかったけど正月前後はゆっくり妻とテレビや映画をみて過ごせた。勉強(読書)はあまりせんかったけどコード書き換えはそれなりに進めたのでよかった。

今年試してみようかと思うこと。。それはブログの更新する時間を毎日決まった時間内にすること。とりあえず1日15分で始めてめてみる予定。なんとなく一年間続いたこのブログ。初めは人の役にたつブログを書こうと思って頑張ってみたが結局そういうブログを書くためにはそれなりの労力が必要ということに気づいた。そして自分にはそれほど力を注ぐことができないと感じたのでタイトルを「THE・つろく(雑録)」に変更して個人的に活用していく方針へ。もちろんそれで誰かにプラスな情報を与えられればいいなと思ってる。Twitterを(Twilogを使って)メモ書きにしていたときもあったが短い文章で書くより長くだらだら書きたいように書くほうが自分に向いてるような気もしてきた。さらにTwitterだとメモ書きと関係ないことも発信しているし…これは呟きだから仕方ないこと。

この辺で15分経過!

っということで今年もよろしくお願いいたします。

↓下補足(これは昨夜書いたもの)↓

ライフマイル辞めた…
 ここ一ヶ月毎日デイリーチャンスで五ポイントずつ稼いで2700ポイントぐらい集めたんだが年明けて三日経ってからポイントを確認すると1000ポイント以上減っとって有効期限ちゅうもんがあることに気づいた。で、これじゃあ最低交換ポイントである3000には届きそうもないと思ったので辞めた。

カレイを刺身にして食べてみた
日本食料品・食堂「サクラ」へ寄った帰りに隣にあるthe market on Yatesへいってみたら新鮮な魚がいろいろ置いてあってそのなかでsoleという魚があって綺麗におろしてあったから三切れ買って帰った。辞書で調べると鰈(カレイ)だそうで養殖用がないので刺身としてはあまり食べられないとネットで書いてあった。ヒラメとこんがらがることも多いらしく、ヒラメの刺身と言っておきながら実際はカレイだったりすることもあるらしい。とにかく食べたことなかったしサーモンやマグロよりも新鮮そうだったので家に帰って寿司米と一緒に食べてみた。やっぱ魚は新鮮で臭みとかなくて美味しかった。食感がまたよかった。次もありだな。
カレイ