地球は46億年前に誕生したのが定説となっています。地球の誕生から現在に至るまでには、例えば白亜紀の恐竜の大量絶滅など環境の変動によって、その時代に地球に生息する生物や動物に大きな影響を与えてきました。近年でも地球温暖化が人間の影響によって引き起こされたと話題になっていますが、もちろん、人間によって大気に排出されたCO2は産業革命後は産業革命以前と比べて急速に増加しており、人間によって地球温暖化が加速的に進行しているという説は有力です。しかし、地球の46億年という膨大な歴史を紐解くと地球の温度が低下した時期(氷期)と温度が氷期と比べ相対的に上昇した時期(間氷期)のサイクルが存在することが分かります。このサイクルはミランコビッチ・サイクルと呼ばれ地球が太陽の周りを公転する軌道の変動によって、地球の環境が変化していることを根拠としています。このように過去に地球環境がどのような理由(根拠)によってどのように変動(海水温が上昇した・下降したなど)したのかを解明するということは地球の未来を考察する上で重要となります。
古気候モデルは過去の気候変動をパソコン上で数値シミュレーションすることによって表現することができます。
LOVECLIMはベルギーで開発されているEMIC (Earth System Model of Intermdiate Complexity)です。EMICは古気候の研究によく使われ1万年以上の積分をパソコン上でフリーで行うことができます。
日本では気象庁の気象研究所で EMIC は開発・運用されていますが、ライセンスが必要となるため個人では手が出せません。
そこでフリーで提供されているLOVECLIMについてLinux環境でインストールし、主に海洋分野でよく使われる描写ソフトGrADSを用いて可視化する工程を説明していきたいと思います。
LOVECLIMの公式サイトからLOVECLIM1.3.tar.gz、NetCDF-4.1.3.tar、udunits-1.12.11.tar、HDFグループの公式サイトのSource-Gzipのリンクからhdf5-1.10.4.tar.gzをダウンロードします。
(LOVECLIMを解凍すると作成されるLoveclim_V1.3ディレクトリ内のREADMEには他にも必要なライブラリが記載されていますが、今回はこの3つのライブラリを例に取り上げます。)
NetCDFやudunits、hdf5はライブラリと呼ばれ、LOVECLIMを実行する際に必要となる関数などを集積したファイルです。
次にホームディレクトリなどにLOVECLIMの作業ディレクトリを作成し、そこにLOVECLIM1.3.tar.gzを解凍したLoveclim_V1.3をmvコマンドなどで移動させます。
ダウンロードしたNetCDF-4.1.3.tar、udunits-1.12.11.tar、hdf5-1.10.4.tar.gzを解凍し、ホームディレクトリにlibディレクトリを作成し、netcdf-4.1.3、udunits-1.12.11、hdf5-1.10.4を移動させます。
(今回は私がスーパーユーザーになれない状況でインストールを行ったのでmacportsやhomebrewなどのパッケージ管理ソフトがインストールされている場合はそちらでもインストールできると思います。)
ではライブラリのインストールですが、udunits-1.12.11を例に取り上げて説明をしていきます。
libディレクトリに移動させたudunits-1.12.11の以下のsrcディレクトリ内で作業を進めていきます。
まず最初の手順としてconfigureの編集を行います。インストールされているエディターソフト(viやemacs、geditなど)でconfigureを開き、prefixという文字列を検索します。
ac_default_prefix=/usr/local
上記の箇所がひっかかると思います。ここの=以下の/usr/localを先ほど作成した/home/lib/udunits-1.12.11へ編集します。ここを編集することで、インストールされるディレクトリの指定をすることができます。
次にconfigureを保存して閉じ、実行をします。実行コマンドはLoveclim_V1.3内のREADMEに詳しく書かれていますが、udunits-1.12.11の場合は以下のコマンドです。
CC=icc CFLAGS='-Df2cFortran -fPIC' ./configure --prefix=/opt/udunits
ここでのprefixも先ほどと同じように=/opt/localを=/home/lib/udunits-1.12.11に書き換えて実行をします。
実行後、無事終了したことを確認したら、コマンドライン上でmake、make installと順に実行し、srcディレクトリと同じ階層に以下のディレクトリが作成されていればインストールは完了です。
udunits-1.12.11]$ ls
bin etc include lib man src
netcdf-4.1.3、hdf5-1.10.4も同様にして実行すればインストールできると思います。
全てのライブラリのインストールが終了したら、次にLOVECLIMの整備を行っていきます。
最初にホームディレクトリからLoveclim_V1.3内のrefディレクトリに移動します。
home/Loveclim_V1.3/RUN/V1.3/expdir/ref
ここでmake.macrosをエディターソフトで開き、編集をします。ここからの編集のイメージとしては先ほどインストールしたudunitsなどの場所を指定すると考えれば分かりやすいと思います。
編集する場所はmake.macrosを開くと下の方にある以下で示す2箇所です。
# NETCDFINCLUDE = -I/opt/netcdf/include
# NETCDFLIB = -L/opt/netcdf/lib -lnetcdf -lnetcdff
#UDUNITSINCLUDE = -I/opt/udunits/include
#UDUNITSLIB = -L/opt/udunits/lib -ludunits
この2箇所について上段はnetcdf-4.1.3のインストールで作成されたincludeディレクトリ、libディレクトリの場所を home/lib/netcdf-4.1.3/include、home/lib/netcdf-4.1.3/lib などとして指定をします。下段も同様にインストールしたudunitsのincludeディレクトリ、libディレクトリの場所を指定します。
次にexpdirディレクトリに移動します。
home/Loveclim_V1.3/RUN/V1.3/expdir
ここでexp.peramをエディターソフトで開き、編集をします。このファイルはLOVECLIMを実行する際のパラメータの調整をすることができます。具体的には以下の3箇所を編集します。
Experiment Name ということで実験名です。今回の実験の結果をアウトプットするディレクトリを指定します。何でもいいですが、私はnycというディレクトリにしました。
############### Experiment Name ################
texp=nyc
# texp=control
次に以下に示すScratch directoryですが、後に必要となる実行ファイルのアウトプット先を指定します。
Scratchdir=/home/Loveclim_V1.3/RUN/V1.3/scratchとします。
次にLocation for saving of outputs files, parameters and initial conditionsですが、結果のアウトプット先ディレクトリの指定なので、分かりやすいようにresultとして指定します。
SavingPath=/home/Loveclim_V1.3/result
Location where eco binary can be foundとLocation where cdo binary can be foundは、インストールしたhdf5-1.10.4とudunits-1.12.11のライブラリの場所を指定します。
ncodir="/home/lib/hdf-5.10.4/lib"
cdodir="/home/lib/udunits-1.12.11/lib"
################# DIRECTORIES ##################
#Scratch directory
Scratchdir=/scratch/${USER}
#Location for saving of outputs files, parameters and initial conditions"
SavingPath=/storage/${USER}/STORAGE
#Location where nco binary can be found
ncodir="/opt/nco/bin"
#Location where cdo binary can be found
cdodir="/opt/cdo/bin"
最後に各パラメータの設定です。今回の実験で変更したのは Number of years and daysです。
lengthInDays=36000としました。他にも多くのパラメータを調整することができます。例えばStarting year and dayを変更してあげれば実験を開始する年を設定することができます。
################ RUN PARAMETER #################
#Starting year and day
start_y=1950; start_d=1
initdate=0
#Number of years and days (1yr=360days 1500yr=540000days)
lengthInDays=36000
#Number of run
NbRun=AUTO
#Multi simulations (Number of members)
iens=0
## debug mode = 1 -> scratch stay in place after run
debug_mode=1
ここまでの編集が終了したらexp.peramを保存して閉じ、./newexp exp.peram のコマンドで実行します。
ジョブが無事終了するとexp.peramと同じ階層に先ほど指定したnycディレクトリが作成されます。次にnycディレクトリに移動し、ディレクトリ内にあるlaunch_r1を ./launch_r1で実行します。
ジョブが無事に終了すると先ほど指定したscratchディレクトリに移動します。
home/Loveclim_V1.3/RUN/V1.3/scratch/LOVECLIM1.3/nyc/repo
このディレクトリにemic.xという実行ファイルが作成されていればLoveclimの整備は完了です。
ここまでの作業でエラーが発生した場合は、おおかたパスの設定がうまくいっておらず、プログラムがライブラリなどをを見つけられていないことによるエラーだと思われます。もう一度編集箇所を確認してみてください。また、LD_LIBRARY_PATHがうまく指定されていない可能性もあります。
echo $LD_LIBRARY_PATHとコマンドを入力して確認をしてください。
LD_LIBRARY_PATHでのライブラリの指定に間違いがある場合は、ホームディレクトリから.bashrcをエディターで開き以下のように編集をしてください。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/local/bin/lib(例):$HOME/lib/netcdf-4.1.3/lib (こちらが重要)
ここまでの整備でemic.xファイルが作成されていれば、./emic.x で実行をすることで結果がresultディレクトリに作成されますが、GrADSでは1年の日数の違いから結果のファイルを開くことができません。
そこで、LOVECLIMの設定を1箇所編集します。以下のLoveclim_V1.3内のsourcesディレクトリへ移動します。
/Loveclim_V1.3/LOVECLIM/V1.3/clio/sources
このディレクトリにあるocean_outp.fというファイルをエディターソフトで開きます。編集箇所は以下の場所です。
c time
status=nf_def_var(ncid,'time',NF_DOUBLE,1,start,varid)
status=nf_put_att_text(ncid,varid,'calendar',7,'360_day')
status=nf_put_att_text(acid,varid,'calendar',7,'360_day')という書き込みの360_daysを365_daysに編集します。
status=nf_put_att_text(acid,varid,'calendar',7,'365_day')
編集後先ほど作成したscratchディレクトリにあるemic.xを ./emic.x で実行します。
問題がなければ指定したresultディレクトリに実験結果がアウトプットされるはずです。以下の2つの.ncファイルがアウトプットされた結果です。2つのファイルについてはCLI03a〜は1年毎の値という意味でのannualの略です。CLI03m〜は1ヶ月ごとの値という意味でmonthlyの略です。
/Loveclim_V1.3/result/LOVECLIM1.3/nyc/repo/output/ocean
$ ls
CLIO3a.001950_001.nc CLIO3m.001950_001.nc
主に海洋物理学の分野で広く使われるGrADSですが、広く使われる一番の理由はGrADSは図の描写についてシンプルで比較的精度の高い図を簡単に作成できることです。GrADSのインストールに関してはここでは詳しくは書きませんが公式サイトから.gzファイルをダウンロードしてインストールを行ってください。
実験で作成した.ncファイルについてですが、そのままではGrADSで読むことができません。通常GrADS上でnetCDFファイルを読み込む場合はsdfopenコマンドを使用しますが以下のようにエラーが出ます。
ga-> sdfopen CLIO3a.001950_001.nc
Scanning self-describing file: CLIO3a.001950_001.nc
SDF Error: 365 day calendars are no longer supported by sdfopen.
To open this file with GrADS, use a descriptor file with
a complete TDEF entry and OPTIONS 365_day_calendar.
Documentation is at http://iges.org/grads/gadoc/SDFdescriptorfile.html
エラー内容が書かれていますが、とにかくファイル形式が対応していないとのことです。そこでncdumpコマンドを使用してCLI03a.001950_001.ncファイルの中身を開いてみます。
$ ncdump CLIO3a.001950_001.nc |less
dimensions:
ptlon = 120 ;
pulon = 120 ;
ptlat = 65 ;
pulat = 65 ;
tdepth = 20 ;
wdepth = 21 ;
wedges = 22 ;
corners = 4 ;
sflat = 57 ;
sfdepth = 22 ;
sfedges = 23 ;
basidx = 4 ;
ptlonp = 121 ;
pulonp = 121 ;
ptlatp = 66 ;
pulatp = 66 ;
time = UNLIMITED ; // (29 currently)
variables:
double ptlon(ptlon) ;
ptlon:units = "degrees_east" ;
ptlon:long_name = "pseudo tracer grid longitude" ;
ptlon:modulo = "m" ;
ptlon:topology = "circular" ;
double pulon(pulon) ;
pulon:units = "degrees_east" ;
pulon:long_name = "pseudo momentum grid longitude" ;
pulon:modulo = "m" ;
pulon:topology = "circular" ;
.ncファイルの中身を見ることができ、データの次元 (dimension) を知ることができました。
ファイルの構成を知ることができたので、GrADSのコントロールファイルを作成していきます。
GrADSでnetCDFファイルを読み込む場合は前述した通り、sdfopenコマンドを使用します。sdfopenで開けるファイルの中身をエディターソフトで参照すると、ヘッダー部分(ファイルを開いた時の上部)に内包しているデータについての詳細 (例えばx方向の値や深さの値、時間の値など)が記入されています。GrADSはこのデータをもとにして図を描写しているのです。この情報が記入されているヘッダー部分は単独のファイルとしても存在することができます。このファイルを.ctl (コントロールファイル) と言います。この場合はGrADS上でopenコマンドを使用して.ctl ファイルを開きます。この時に .ctlファイルに指定されている .nc ファイルなどのnetCDFファイルをデータとして読み込むのです。.xctlファイルはGrADSがコントロールファイルを読む際に最低限の情報のみで動きますので、今回は .xctlファイルを作成します。
それでは図を描写するために .xctlファイルを作成していきます。
記入する項目としては、DSET(読み込むデータ)、TITLE(タイトル)、DTYPE(データの形式)、UNDEF(データの存在しない点)、XDEF(x軸の変数)、YDEF(y軸の変数)、ZDEF(z軸の変数)、TDEF(時間スケール)です。これらの情報を指定してあげればGrADSはデータを正しく読むことができます。さきほどのncdumpコマンドで開いたデータの中身からこれらの情報を拾います。
なお、 こちらに私が使用した .xctlファイルをアップロードしています。ファイル名はdclio-taxpypzp.xctlです。
dclio-taxpypzp.xctl
File Edit Options Buffers Tools Help
DSET ^CLIO3a.%ch_001.nc
TITLE tracer-related quantities in the original coordinates of CLIO
* Type 'xdfopen dclio-taxpypzp.xctl' from Grads prompt
* For details, try the following commands:
* q file
* q dims
* q ctlinfo
*
DTYPE netcdf
*
OPTIONS 365_day_calendar TEMPLATE
CHSUB 1 100 001950
CHSUB 101 200 002050
CHSUB 201 300 002150
CHSUB 301 400 002250
CHSUB 401 500 002350
CHSUB 501 600 002450
CHSUB 601 700 002550
CHSUB 701 800 002650
CHSUB 801 900 002750
CHSUB 901 1000 002850
*
UNDEF -1.0e+32 missing_value _FillValue
XDEF ptlon
YDEF ptlat
ZDEF tdepth
TDEF time 99999 LINEAR 01JAN1950 1yr
作成した.xctlファイルをGrADSで開いてみます。
GrADSを起動したら xdfopenコマンドで .xctlファイルを開きます。以下のようにset gxout shaded、d sst とコマンドを打ち込むと図を作成することができます。 SSTは海水の表面温度 (Sea Surface Temperature)の略で海洋学では基本的な物理量になります。
ga-> xdfopen ファイル名.xctl
Scanning Descriptor File: ファイル名.xctl
SDF file CLIO3a.001950_001.nc is open as file 1
LON set to 0 360
LAT set to -79.5 112.5
LEV set to -5126.18 -5126.18
Time values set: 1950:1:1:0 1950:1:1:0
E set to 1 1
ga-> set gxout shaded
ga-> d sst
Contouring: -0 to 30 interval 3
ga->
作成した図が次の図になります。
図の作成は無事にすることができましたが、60°Nのあたりから違和感があります。
そこで、データに組み込まれている緯度と経度を重ねて描写してみます。コマンドはd tlon、d tlatです。
この図からモデルによる結果と描写しているグリッド間で相違があることがわかります。
では次の章でこの相違の修正を施していきます。
描写グリッドの修正についてですが、モデル結果のデータには上記の図で示すようにSSTの値と緯度・経度のデータは内包されているので、イメージとしてはデータに内包されている緯度経度を全球マップの正しい場所に配置してあげれば良いのです。
ではそのプログラムをfortranで行っていきます。作成したスクリプトはアップロードしますので、ポイントを説明していきます。
プログラム名はmkpdefとして、まず .ncファイルのtlon, tlat, angleを読み込みます。
program mkpdef
implicit none
include 'netcdf.inc'
! original model grid in the netcdf output of CLIO
real(8),dimension(1:120,1:65) :: ntlon, ntlat, nurot
! same as above except for attachment of cyclic buffers
real(4),dimension(0:121,1:65) :: mtlon, mtlat, murot
! mapping information from original- and target-grid sets
real(4),dimension(1:120,1:57) :: gi,gj,gd,gr
real(4) :: dist, mindist, lon, lat, a, b, clat, clon, crot
integer :: i,j, ii, jj, ci,cj
integer :: err, id_file, id_tlon, id_tlat, id_urot
err = nf_open('CLIO3a.001950_001.nc', NF_NOWRITE, id_file)
write(*,*) 'step 1', err, id_file
err = nf_inq_varid(id_file, 'tlon', id_tlon)
write(*,*) 'step 2', err, id_tlon
err = nf_inq_varid(id_file, 'tlat', id_tlat)
write(*,*) 'step 3', err, id_tlat
err = nf_inq_varid(id_file, 'angle', id_urot)
write(*,*) 'step 4', err, id_urot
err = nf_get_var_double(id_file, id_tlon, ntlon)
write(*,*) 'step 5', err, ntlon(1,1), ntlon(120,1), ntlon(1,65), ntlon(120,65)
err = nf_get_var_double(id_file, id_tlat, ntlat)
write(*,*) 'step 6', err, ntlat(1,1), ntlat(120,1), ntlat(1,65), ntlat(120,65)
err = nf_get_var_double(id_file, id_urot, nurot)
write(*,*) 'step 7', err, nurot(1,1), nurot(120,1), nurot(1,65), nurot(120,65)
次に正しい位置への転換ですが、モデル結果の緯度、経度(探索点)と射影先グリッドの緯度、経度(目的点)との距離(dist)を計算することで行います。ここでのポイントですが、モデル結果のグリッドで探索点をはじき出す際に、10倍細かいグリッドを指定しています。これは単純に精度を上げるための処理です。
do jj = 1, 57 射影先の球グリッド(緯度)
do ii = 1, 120 射影先の球グリッド(経度)
lon = (ii-1)*3.0e0+1.5 射影先の球座標の細かさ (目的点)
lat = (jj-1)*3.0e0-79.5e0 射影先の球座標の細かさ (目的点)
mindist = 400.0d0
do j = 1, 641 モデル結果のグリッド(緯度、探索点)
do i = 1, 1200 モデル結果のグリッド (経度、探索点)
ci = int(1 + (i-1)*0.1) モデル結果のグリッドの整数化 (四方囲い原点)
cj = int(1 + (j-1)*0.1) モデル結果のグリッドの整数化 (四方囲い原点)
a = (i-1)*0.1-int((i-1)*0.1)
b = (j-1)*0.1-int((j-1)*0.1)
clon = mtlon(ci,cj)*(1.0-a)*(1.0-b) + mtlon(ci+1,cj)*a*(1.0-b) + & 球座標での探索点
mtlon(ci,cj+1)*(1.0-a)*b + mtlon(ci+1,cj+1)*a*b
clat = mtlat(ci,cj)*(1.0-a)*(1.0-b) + mtlat(ci+1,cj)*a*(1.0-b) + & 球座標での探索点
mtlat(ci,cj+1)*(1.0-a)*b + mtlat(ci+1,cj+1)*a*b
crot = murot(ci,cj)*(1.0-a)*(1.0-b) + murot(ci+1,cj)*a*(1.0-b) + &
murot(ci,cj+1)*(1.0-a)*b + murot(ci+1,cj+1)*a*b
dist = min((clon-lon)**2+(clat-lat)**2, &
(clon-lon-360.0d0)**2+(clat-lat)**2) 目的点と探索点の距離 (近さ)
if (dist < mindist) then
mindist = dist
gi(ii,jj) = 1 + (i-1)*0.1e0
gj(ii,jj) = 1 + (j-1)*0.1e0
gr(ii,jj) = crot
gd(ii,jj) = mindist
endif
if(gi(ii,jj) == 120.0e0) then
gi(ii,jj) = 119.9999e0
endif
enddo
enddo
write(*,*) ii,jj, gi(ii,jj), gj(ii,jj), gd(ii,jj), gr(ii,jj)
enddo
enddo
では、fortranプログラムの概要についてはこのあたりにして、実際に実行して修正していきます。
使用したfortranプログラムはこちら。実行コマンドはMakefileに記述されているので、モデル結果の .ncファイルと同じディレクトリに移動させたら、make execpで実行させてください。
その際の注意点としては、fortranはifortを使用していること(学生であればフリーでインストールできます)、netcdfの位置を編集することです。
Makefileをエディターソフトで開きます。以下の項目のMYINC、MYLIBをそれぞれ該当の箇所に編集します。
MYINC = /home/lib/netcdf-4.1.3/include
MYLIB = /home/lib/netcdf-4.1.3/lib
# change MYINC and MYLIB depending on your unix environment
MYINC = /opt/local/include
MYLIB = /opt/local/lib
make execpを実行させ、execpという実行ファイルが作成されたら、 ./execp で実行します。すると、新しいファイルdclio-xpyp.pdef が作成されます。このファイルがモデル結果から緯度、経度を正しい配置に置き換えたデータファイルとなります。
それでは、作成した .pdef ファイルをGrADSで描写していきます。
使用するコントロールファイルは先ほど作成した .xctl ではなく、z方向の変数を圧力(p)に置き換え、.pdefファイルに対応させたものを使用します。使用した .ctlファイルはこちら。
dclio-taxpypzp.ctl
DSET ^CLIO3a.%ch_001.nc
*
TITLE tracer-related quantities mapped onto standard lat-lon coordinates
* Type 'open dclio-taxpypzp.ctl' from Grads prompt
* For details, try the following commands:
* q file
* q dims
* q ctlinfo
*
DTYPE netcdf
PDEF 120 65 bilin stream binary-big ^dclio-xpyp.pdef
*
OPTIONS TEMPLATE
CHSUB 1 100 001950
CHSUB 101 200 002050
CHSUB 201 300 002150
CHSUB 301 400 002250
CHSUB 401 500 002350
CHSUB 501 600 002450
CHSUB 601 700 002550
CHSUB 701 800 002650
CHSUB 801 900 002750
CHSUB 901 1000 002850
*
UNDEF -1.0e+32 missing_value _FillValue
XDEF 120 LINEAR 1.5000 3
YDEF 57 LINEAR -79.5000 3
ZDEF 20 LEVELS -5126.18 -4385.22 -3661.11 -2963.25 -2307.36 -1717.9 -1225.11 -850.19 -588.88 -415.07 -299.29 -219.86 -163.28 -121.52 -89.75 -64.96 -45.2 -29.17 -15.98 -5
TDEF 99999 LINEAR 01JAN1950 1yr
vars 26
tlon=>tlon 0 y,x longitude
tlat=>tlat 0 y,x latitude
dxs1=>dxs1 0 y,x zonal length of grid box sides
dxs2=>dxs2 0 y,x meridional length of grid box sides
dxc1=>dxc1 0 y,x zonal width at grid box centres
dxc2=>dxc2 0 y,x meridional width at grid box centres
area=>area 0 y,x surface area of tracer grid box
tmask=>tmask 0 y,x horizontal tracer grid mask
h=>h 0 y,x bathymetry on tracer gridpoints
temp=>temp 20 t,z,y,x averaged potential temperature
salt=>salt 20 t,z,y,x averaged salinity
ssh=>ssh 0 t,y,x averaged sea surface height
sst=>sst 0 t,y,x averaged SST
sss=>sss 0 t,y,x averaged sea surface salinity
shflx=>shflx 0 t,y,x averaged surface heat flux
sfflx=>sfflx 0 t,y,x averaged surface freshwater flux
zmix=>zmix 0 t,y,x averaged depth of ocean surface mixed layer
zcnv=>zcnv 0 t,y,x averaged depth of convection
msl=>msl 0 t,y,x averaged G-M slope
hice=>hice 0 t,y,x averaged ice thickness
hicp=>hicp 0 t,y,x averaged ice production
albq=>albq 0 t,y,x averaged lead fraction
hsn=>hsn 0 t,y,x averaged snow thickness
snow=>snow 0 t,y,x averaged snow precipitation
tice=>tice 0 t,y,x averaged ice temperature
fb=>fb 0 t,y,x averaged heat flux at ice base
endvars
.ctlファイルを準備できたら、GrADS上でopenコマンドで開きます。その後コマンドをset gxout shaded、d sst と続けて行くと以下の図が作成されます。
説明の最初に示した図の作成ができました。
確認として、緯度と経度をd tlon d tlat のコマンドで重ねて表現してみましょう。
60°N以北についても正しく配置されています。
これでLOVECLIMを使用したGrADSでのSSTの表現方法についての紹介は終わりとなります。
今後もこのように海洋学に関係して興味を持った事柄を紹介していきたいと思います。