\documentclass[10pt,a4paper,fleqn]{jarticle}

% A4のサイズ => 297*210

% しおりが使えるようになる。
\usepackage{atbegshi}
\AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}}

\setlength{\textwidth}{164mm}       % テキストの幅
\setlength{\textheight}{240mm}      % テキストの高さ

\setlength{\oddsidemargin}{-0.3cm}     % 偶数ページの左マージン
\setlength{\evensidemargin}{-0.3cm}    % 奇数ページの左マージン
\setlength{\headheight}{0in}
\setlength{\footskip}{0.5in}

\usepackage{amsmath} %複雑な式を書くときによい。p142
\usepackage{amssymb}
\usepackage{ulem} %下線や波線が引ける。p64
\usepackage{lscape}
\usepackage{graphicx,color}
%\usepackage[dvipdfm,colorlinks=true]{hyperref} % リンクが使える様になる。
\usepackage[dvipdfm]{hyperref}
\usepackage{color}
\usepackage{colortbl}
%\usepackage{float}
%\usepackage[dvipdfmx]{graphicx,color}


% 数式番号の書式設定。 ex) (1) => (1.1)
\def\theequation{\thesection.\arabic{equation}}
\makeatletter
\@addtoreset{equation}{section}

% \textcompwordmark はリガチャを使わないコマンド
% \vspace p59

\setlength{\topmargin}{100mm}
\addtolength{\topmargin}{-1in}

\title{ \vspace{4cm}
{\Huge { Fortran 90を用いた } } \\ {\Huge { お手軽 grid model 構築ツール } }\\{\Huge { GMSマニュアル } }\vspace{3cm} }

\begin{document}
\setlength{\topmargin}{50mm}
\addtolength{\topmargin}{-2.1in}
\maketitle
\thispagestyle{empty}

\newpage

\pagenumbering{roman}
\tableofcontents

\newpage
\setcounter{page}{1}
\pagenumbering{arabic}

% ================================
% ========= SECTION 1 ============
% ================================

% =====================================================================
\part{Tutorial Document}

%===========================================================================================================
\section{はじめに}
お手軽グリッドモデル構築ツール(GMS)は, 中野満寿男さんが開発を始めたもので, 現在は福岡大学に所属している安部実希が引き継いでいます.  
我々は, このライブラリが多くの人に使われ, 地球流体力学の発展に寄与することを願っています. \\

近年, PCの低価格化, 高速化が進み, 数値モデルを用いた研究をお手軽に行えるようなりました.しかしながら, 数値モデルの構築は依然として難しいです.
また, 数値実験によってシミュレートされた現象の物理的解釈のためには, より簡単なモデルによる実験と比較しなければならないこともあり, そのために必要な数値モデルの改変をスムーズに行うためには, モデルのコードが高い可読性を備えている必要があります. \\

可読性の高い数値モデルを構築するためにはどのようにしたらよいでしょうか.
高い可読性のために解決すべき問題点として, まず配列添え字が挙げられます.
気象モデルでは変数配列に3つの添え字がついていることが多いです.この3つの添え字は, 3次元空間でどの格子の値であるのかを表しています.
この配列添え字は, たとえば DO ループを回す際に同じようなことを何度も記述する必要があり, 可動性を低くする一因となっていると考えられます.
次に考えられる問題点として, グリッド情報の管理が挙げられます.
気象モデルでは, 物理量を互い違いに配置する, いわゆる staggered grid がよく用いられます.
よって一般に, 同じ添え字を持つ個々の変数は3次元空間で別々の位置に配置されることになります.
数値モデルをコーディングする際には, 常にそのことを考える必要があり, しばしばバグのすみかになってしまいます.
ここで, 変数の添え字が3次元空間でどの位置の値を表しているのかという情報を「グリッド情報」と呼ぶことにします. \\

上記で挙げた問題点を解決すべく Fortran90 を用いて GMS(Grid Modeling System) の開発を進めています.その主な特徴は次の通りです.
まず, 変数の値を記憶する配列と, グリッド情報からなるデータ構造をGMS変数として構造体を使って定義することにより, 変数自体に自分がどの位置に配置されているのか
を含めることが可能となっています.
次に, GMS変数を返り値とする空間差分演算子, 空間平均演算子を定義することにより, 差分や平均の演算結果は半格子分ずれるという情報を返り値に含めることが可能となっています.
以上より, GMSを使ってコードを書くことで, 可読性の高いモデルをお手軽に構築することができます. \\

「おてがるGMS」では1次元浅水波モデルを例にして, GMSの使い方を解説しています.

%===========================================================================================================
\section{インストール}
以下のどちらの場合でもまず \textcolor{red}{dclf90}, \textcolor{red}{gtool5}, \textcolor{red}{netcdf-dev} をインストールしてください. dclf90 と gtool5 については, PPA の共有リポジトリにアップしています. また, 後のために \textcolor{red}{gave} もインストールしておいてください.
\begin{itemize}
 \item 共有リポジトリ \\
　\textcolor{blue}{deb http://ppa.launchpad.net/gfd-dennou/ppa/ubuntu CODENAME main} \\
　\textcolor{blue}{deb-src http://ppa.launchpad.net/gfd-dennou/ppa/ubuntu CODENAME main} \\
\end{itemize}
\vspace{-1zw}
　\textcolor{blue}{CODENAME} は \textcolor{blue}{lucid} や \textcolor{blue}{maverick} などの Ubuntu でのリリース名とする. 詳しくは \href{http://ruby.gfd-dennou.org/index-j.htm}{電脳Rubyプロジェクトホームページ}の ubuntu ページを見てください.
\subsection{gms パッケージがある場合}
最低でも Ubuntu 環境では作成する予定です. もしできたら, 以下のコマンドでインストールできるようにします. 作ったら上記の PPA リポジトリにアップする予定です. \\

\colorbox[named]{SkyBlue}{
\begin{picture}
(458,14)
\end{picture}
}

\vspace{-2zw}
　\$ sudo apt-get install gms

\subsection{gms パッケージがない場合}
\label{no-gms-install}
サイトにあるgmsのtarボール(gms\_latest.tar.gz)をダウンロードする必要があります. 
\begin{itemize}
 \item[1)] ダウンロードしたtarボールを展開し, できたディレクトリに入る. \\
\colorbox[named]{SkyBlue}{
\begin{picture}
(400,28)
\end{picture}
}

\vspace{-4zw}
			　\$ tar zxvf gms\_latest.tar.gz \\
			　\$ cd gms/ 

 \item[2)] libgms.a をインストール \\
			コンパイラがgfortranの場合を例に挙げて説明する. \\
\colorbox[named]{SkyBlue}{
\begin{picture}
(400,10)
\end{picture}
}

\vspace{-2.2zw}
			　\$ cd gms/source \\
			必要ならば、source ディレクトリ内にある mklib-gfr の中を修正する. \\
			・FC : Fortran コンパイラを指定. ex) FC=gfortran \\
			・OPT : 指定した Fortran コンパイラのオプション指定. ex) OPT="-wX -c" \\
			・35行目 - 36行目 : mod ファイルとライブラリの移動先を指定. \\
			　ex) mv *.mod /usr/local/gms-gfortran/include/ \\
			　ex) mv libgms.a /usr/local/gms-gfortran/lib/ \\
			注) mod ファイルとライブラリの移動先をこの時点で作成しておく. \\
\colorbox[named]{SkyBlue}{
\begin{picture}
(400,10)
\end{picture}
}

\vspace{-2.2zw}
			　\$ sudo ./mklib-gfr

% \item[3)] libgms02.a (安部ver. のライブラリ) をインストール \\
%			2) で libgms.a をインストールした時と同様に, mklib2 を利用してインストールを行う.

 \item[3)] gmsfrt をインストール \\
			gms を用いたモデルのコンパイルは, gms/bin/gmsfrt を使う. \\
\colorbox[named]{SkyBlue}{
\begin{picture}
(400,10)
\end{picture}
}

\vspace{-2.2zw}
			　\$ cd gms/bin/gmsfrt \\
			必要ならば、gmsfrt の編集する. \\
			・fc : Fortran コンパイラを指定. ex) fc="gfortran" \\
			・linker : fc と同じものを指定. ex) linker="gfortran" \\
			・mods : mod ファイルの指定. gms を使用するには, gtool5, dcl-f90, gms の mod ファイルが必要. \\
			　ex) mods="-I/usr/lib/gtool5/include -I/usr/local/gms-gfortran/include -I/usr/local/dcl-f90/include" \\
			・fflags : fc のオプション. \\
			・libs : ライブラリファイルの指定. gms を使用するには, gtool5, dcl-f90, gms の ライブラリファイルが必要. \\
			　ex) libs="-L/usr/lib/gtool5/lib -lgtool5 -L/usr/local/gms-gfortran/lib -lgms02 -lgms \\
			　　　　　-L/usr/local/dcl-f90/lib -lf90dcl" \\
			・ldflags, ldlibs : ここでは, netcdf のフラグとライブラリパスを記入. \\
			　ex) ldflags="-L/usr/netcdf/lib  -L/usr/lib " \\
			　ex) ldlibs="-lnetcdf  -lnetcdff -lgfortran" \\
 			gmsfrt のインストール. インストール先が /usr/local/gms-gfortran/bin の場合. \\ 
\colorbox[named]{SkyBlue}{
\begin{picture}
(400,10)
\end{picture}
}

\vspace{-2.2zw}
			　\$ sudo cp gmsfrt /usr/local/gms-gfortran/bin/ \\
			注) 上記のライブラリパスやインクルードパスは上記の PPA リポジトリからインストールした場合の例なので, 各自環境に合わせて変えるべし.

 \item[4)] gmsfrt のパスを通す \\
			\~/.bashrc に, 以下を追記する. \\
			PATH=\$PATH:/usr/local/gms-gfortran/bin \\
			export=PATH

 \item[5)] ちゃんとインストールできたか確認 \\
\colorbox[named]{SkyBlue}{
\begin{picture}
(400,60)
\end{picture}
}

\vspace{-7zw}
			　\$ cd gms/sample/ \\
			　\$ gmsfrt shallow1d.f90 \\
			　\$ ./a.out \\
			　\$ gave test.nc \\
			ここで図(例. 図\ref{frame1})が正しく表示されたらＯＫ.
\end{itemize}

%===========================================================================================================
\section{おてがるGMS}
GMSの基本的な使い方と概念について, 例題を用いて具体的に説明を行います.
ここでは, UNIX システムに GMS をマニュアル通りにインストールしていることを前提としています. 
そうでない環境で GMS を学び始めようという方は, まず, 基本操作のどこが違うか身近な先達に直接尋ねてみて下さい. 
ここで紹介する FORTRAN プログラム自体は, どんな環境でも同じように動くようになっています.

\subsection{まずは1次元浅水波モデル}
GMSを用いると, 可読性の高いコードで数値モデルを作ることができます.
最初の例題として, 数値モデルの中でも比較的簡単な1次元浅水波モデルをつくってみましょう.

\subsubsection{gms を用いて作った1次元浅水波モデル}
FORTRAN プログラムは, 次のページに載せている gms\_shallow1d です.
時間積分は Leap-Frog 法を用いています.  \\
プログラム自体は sample ディレクトリの中にあります.

\newpage

\colorbox[named]{GreenYellow}{
\begin{picture}
(458,679)
\end{picture}
}

\vspace{-70zw}
　1:　program gms\_shallow1d \\
　　2:　!---描画にはgtool5を用いる. \\
　　3:　　use dcl \\
　　4:　　use gtool\_history \\
　　5:　!--- gms ライブラリ \\
　　6:　!--- これを書かなきゃgmsが使えない. \\
　　7:　　use gms
　　8:　　implicit none \\
　　9:　!---モデルに使うパラメタ \\
　　10:　　　integer, parameter :: nx = 100 \\
　　11:　　　integer, parameter :: nloop = 1000 \\
　　12:　　　real, parameter :: fdump = 1000.0 \\
　　13:　　　real(8), parameter :: delta\_x = 2000.0D0 \\
　　14:　　　real(8),parameter :: xmax  = delta\_x * nx, xmin = 0.0D0 \\
　　15:　　　real(8), parameter :: depth = 1.0D0, grav=9.8D0, dt = 100.0D0 \\
　　16:　　　real(8), parameter :: pi = 3.14159265358979D0 \\
　　17:　　　integer :: i \\
　　18:　　　real :: time=0.0 \\
　　19:　　　external initfunc \\
　　20:　　　real(8)::initfunc \\

　21:　!---糊代の数と糊代を含んだ配列の最小・最大 \\
　　22:　　　integer, parameter :: margin = 1 \\
　　23:　　　integer, parameter :: lbx = -margin, ubx = nx+margin \\

　24:　!---GMS変数 宣言 \\
　　25:　　　type(var\_x) :: u, u\_a, u\_b \\
　　26:　　　type(var\_x) :: h, h\_a, h\_b \\

　27:　!---GMSに必要な情報を与える \\
　　28:　　　call set\_grid\_num\_x(nx) !格子点数 \\
　　29:　　　call set\_margin\_x(margin)     !糊代の長さ \\
　　30:　　　call set\_real\_min\_x(xmin)           !x軸の最小座標値 \\
　　31:　　　call gms\_set\_interval\_x(delta\_x)    !dx \\
　　32:　　　call dump\_gms\_modelparm \\

　33:　!---work領域の大きさ \\
　　34:　　　call allocate\_work\_area\_x(20) \\

　35:　!---GMS変数にグリッド情報を与える \\
　　36:　　　call def\_var(u,   on\_none\_none\_grid) \\
　　37:　　　call def\_var(u\_a, on\_none\_none\_grid) \\
　　38:　　　call def\_var(u\_b, on\_none\_none\_grid) \\
　　39:　　　call def\_var(h,   off\_none\_none\_grid) \\

\colorbox[named]{GreenYellow}{
\begin{picture}
(458,679)
\end{picture}
}

\vspace{-70zw}

　40:　　　call def\_var(h\_a, off\_none\_none\_grid) \\
　　41:　　　call def\_var(h\_b, off\_none\_none\_grid) \\

　42:　!---作成するNetCDFファイルの設定 \\
　　43: 　　　  call gt4init(h, "test.nc", fdump, "h", "displacement", "m") \\

　44:　!---変数 h の初期状態設定 \\
　　45:　　　call input\_func\_var(initfunc, h\_b) \\
　　46:　　　u\_b = 0.0D0 \\

　47:　!---境界条件設定 \\
　　48:　　　call cyclic\_boundary\_x(u\_b) \\
　　49:　　　call cyclic\_boundary\_x(h\_b) \\

　50:　!---Euler法による時間積分(1ステップ分) \\
　　51:　　　h = h\_b -   depth * d\_x(u\_b) * dt \\ 
　　52:　　　u = u\_b  -   grav * d\_x(h\_b) * dt \\

　53:　　　call cyclic\_boundary\_x(u) \\
　　54:　　　call cyclic\_boundary\_x(h) \\

　55:　!---Leap Frog法による時間積分 \\
　　56: 　　do i = 0, nloop \\

　57:　　　　time = real(dt) * i \\

　58:　　　　　h\_a = h\_b - depth * d\_x(u) * 2.0D0 * dt \\
　　59:　　　　　u\_a = u\_b -  grav * d\_x(h) * 2.0D0 * dt \\

　60:　　　　　call cyclic\_boundary\_x(u\_a) \\
　　61:　　　　　call cyclic\_boundary\_x(h\_a) \\

　62:　!---タイムフィルター \\
　　63:　　　　　u = u + 0.1D0 * (u\_a - 2.0D0 * u + u\_b) \\
　　64:　　　　　h = h + 0.1D0 * (h\_a - 2.0D0 * h + h\_b) \\

　65:　!---NetCDFに書き出し \\
　　66:　　　　　if ( mod(time, fdump) == 0.0 ) then \\
　　67:　　　　　　call gt4\_timeout("t", time) \\
　　68:　　　　　　call gt4\_varout("h", h) \\
　　69:　　　　　end if \\

　70:　!---次のステップ \\

\colorbox[named]{GreenYellow}{
\begin{picture}
(458,679)
\end{picture}
}

\vspace{-70zw}

　71:　　　　　u\_b = u \\
　　72:　　　　　h\_b = h \\
　　73:　　　　　h   = h\_a \\
　　74:　　　　　u   = u\_a \\

　75:　　end do \\

　76:　!---NetCDFへの書き出し終了 \\
　　77:　　call gt4end \\

　78: contain \\

　79:　subroutine gt4init(var, fname, ndump, vname, lname, vunit) \\
　　80:　　type(var\_x), intent(in) :: var \\
　　81:　　character(*), intent(in):: fname, vname, lname, vunit \\
　　82:　　real        , intent(in)::ndump \\
    
　83:　　　call HistoryCreate("test.nc", "gms\_test", "gms\_shallow1d", "masuo", \& \\
　　84:　　　　　　　　　　　\& (/'x', 't'/), (/size\_x(var),0/), \& \\
　　85:　　　　　　　　　　　　(/"x-coordinate","time        "/), (/"m","s"/), 0.0, ndump) \\

　86:　　　call HistoryPut('x', pos\_x(var)) \\

　87:　　　call HistoryAddVariable( \&                                ! 変数定義 \\
　　88:　　　　　　　　varname=vname, dims=(/'x','t'/), \& \\ 
　　89:　　　　　　　　longname=lname, units=vunit, xtype='double') \\

　90:　end subroutine gt4init \\

　91:　subroutine gt4\_varout(vname, var) \\
　　92:　　character(*), intent(in) :: vname \\
　　93:　　type(var\_x), intent(in)  ::var \\

　94:　　　call HistoryPut(vname, get(var) ) \\

　95:　end subroutine gt4\_varout \\

　96:　subroutine gt4\_timeout(vname, time) \\
　　97:　　character(*), intent(in) :: vname \\
　　98:　　real, intent(in)  ::time \\

　99:　　　call HistoryPut(vname, time ) \\

　100:　end subroutine gt4\_timeout \\

\colorbox[named]{GreenYellow}{
\begin{picture}
(458,214)
\end{picture}
}

\vspace{-22zw}

　101:　subroutine gt4end \\
　　102:　　call HistoryClose \\
　　103:　end subroutine gt4end \\

　104:　end program gms\_shallow1d \\ 

　105:　!---初期条件 \\
　　106:　　　real(8) function initfunc(x) \\
　　107:　　　　real(8), intent(in) :: x \\
　　108:　　　　real(8), parameter ::pi = 3.14159265358979D0 \\
　　109:　　　　initfunc = sin( 2.0D0 * pi * x / 2.0D5 ) \\
　　110:　　　　write(*,*) x, initfunc \\
\\
\\
UNIX システムに GMS をマニュアル通りにインストールしている場合には,  \\  

\colorbox[named]{SkyBlue}{
\begin{picture}
(458,14)
\end{picture}
}

\vspace{-2zw}
　\$ gmsfrt -o shallow gms\_shallow1d.f90 \\

によって shallow という実行ファイルが作られます. そして, \\

\colorbox[named]{SkyBlue}{
\begin{picture}
(458,14)
\end{picture}
}

\vspace{-2zw}
　\$ ./shallow  \\

とすると, 「test.nc」というNetCDFファイルが作成されます. ここで出力には gave を使うことにします. \\

\colorbox[named]{SkyBlue}{
\begin{picture}
(458,14)
\end{picture}
}

\vspace{-2zw}
　\$ gave test.nc \\

　として, Contour＆Toneで描画するとframe1が出力されます.

\begin{figure}[h]
			\begin{center}
 				\includegraphics[width=60mm]{shallow1d.eps}
			\end{center}
			\caption{frame1}
			\label{frame1}
%		\end{minipage}
\end{figure} 

\subsubsection{gms を用いて作った1次元浅水波モデルの説明}
プログラム gms\_shallow1d の最初から48行目までは, モデルの初期設定を行っています.
それに次いで, NetCDFの設定, 浅水波方程式の計算, という順でコードが書かれています. \\

まず, 2行目から7行目までは, 利用するモジュールを指定しています.
dclとgtool\_historyは描画のときに使われるモジュールです.
次のgmsとgms02がGMSライブラリです. \\

次の9行目から20行目までは, モデルで使うパラメタです.
これについてはここでは詳しく説明しません. \\

そして21行目から41行目までの部分で, GNSの初期設定を行っています. 
\begin{itemize}
 \item 21行目 - 23行目 \\
 margin : [糊代の数] \\
 lbx, ubx : [配列の最小値と最大値] \\
 糊代の数と糊代を含んだ配列の最小・最大.

 \item \hyperlink{datatype}{24行目 - 26行目：GMS変数 宣言} \\
 type(var\_$<$dim$>$) :: value \\
　　GMS変数の型宣言. $<$dim$>$：次元(ex. x や xz), value：GMS型変数として扱う変数 \\

 下の図2（2次元X-Y平面）を例に考えると, 変数Ａ・Ｂ・Ｃは次の様に書ける. \\
　　$type(var\_xy)$ $::$ $A$, $B$, $C$

 \begin{figure}[h]
			\begin{center}
 				\includegraphics[width=60mm]{grid-info.eps}
			\end{center}
			\caption{frame2}
			\label{frame2}
%		\end{minipage}
 \end{figure} 

 \item \hyperlink{model-info}{27行目 - 32行目}：GMSに必要な情報を与える \\
 set\_grid\_num\_$<$dir$>$($<$dir$>$\_number) \\
 　格子点の数を設定. $<$dir$>$：方向(ex. x や y), $<$dir$>$\_number：格子点数 \\
 set\_margin\_$<$dir$>$(margin) \\
 　糊代の数を設定. $<$dir$>$：方向(ex. x や y) \\
 set\_real\_min\_$<$dir$>$(minimum) \\
 　最小座標の設定. $<$dir$>$：方向(ex. x や y), minimum：最小座標 \\
 gms\_set\_interval\_$<$dir$>$(delta\_$<$dim$>$) \\
 　グリッド幅の設定. $<$dir$>$：方向(ex. x や y), delta\_$<$dim$>$：グリッド幅 \\
 dump\_gms\_modelparm \\
 　設定したことを表示

 \item \hyperlink{mem-manager}{33行目 - 34行目}：work領域の大きさを設定 \\
 allocate\_work\_area\_$<$dim$>$(work\_number) \\
 　使用するメモリ領域の数を指定.

 \item \hyperlink{def-var}{35行目 - 41行目}：GMS変数にグリッド情報を与える \\
 def\_var(value, grid1\_grid2\_grid3\_grid) \\
　 GMS変数にグリッド情報を与える. value：GMS型変数, grid1, grid2, grid3：onかoffを入力. \\
　 on：座標軸上に変数を配置するとき. \\
 　off：座標軸上に変数を配置しないとき.

 ・図2（2次元X-Y平面）を例に考えると, 変数Ａ・Ｂ・Ｃは次の様に書ける. \\
　　$call$ $def\_var(Ａ, on\_off\_none\_grid)$ \\
　　$call$ $def\_var(Ｂ, off\_on\_none\_grid)$ \\
　　$call$ $def\_var(Ｃ, off\_off\_none\_grid)$ \\

 \item 42行目 - 43行目：作成する NetCDF ファイルの設定 \\
　・お絵描きをする gms 型変数 が 1 つの場合 \\
　call gt4init(var1, "fname", fdump, "vname1", "lname1", "vunit1") \\
　　var1 : gms 型変数,  "fname" : NetCDF ファイル名. 拡張子は nc, fdump : 出力間隔,  \\
　　"vname1" : 変数の名前. この名前がグラフに出力される, "lname1" : 変数の長い名前,  \\
　　"vunit1" : 変数の単位 \\

\end{itemize}

44行目以降は, モデルの計算です.
\begin{itemize}
 \item \hyperlink{input-func-var}{44行目 - 46行目} : 初期値の設定 \\
 call input\_func\_var(initfunc, var) \\
　　gms 型変数 var に, 内部関数で計算した initfunc を代入している. モデルでは \\
　　79から85行目である.

 \item \hyperlink{cyclic}{47行目 - 64行目} : 境界条件の設定や, 計算 \\
 ・call cyclic\_boundary\_$<$dir$>$(var) \\
　　gms 型変数 var の境界を周期的条件で設定する. \\
 ・式中の \hyperlink{derivative}{d\_x} \\
　　d\_x(var) : gms 型変数 var の x 方向の 1 次精度後方差分をする.

 \item 65行目 - 69行目 : NetCDF に書き出し \\
 ・call gt4\_timeout("t", time) \\
　　グラフに出力する時間の設定. " " の部分が出力される変数名, time の部分が出力される変数. \\

 ・call gt4\_varout("h",h) \\
　　グラフに出力する gms 型変数. " " の部分が出力される変数名, h の部分が出力される変数. 

\end{itemize}

70行目から75行目は省略. \\

76行目 - 77行目 : NetCDF への書き出しを終了. \\

79行目 - 103行目 : NetCDF への書き出しの設定を行っている. この部分の書き方は \href{http://www.gfd-dennou.org/library/gtool/gt5tutorial/}{gtool5} を参考にしてください. \\
　(この時↑の注意)　参考URL : \href{http://www.gfd-dennou.org/library/gtool/gtool5/gtool5_current/doc/tutorial/gthist_desc.htm}{gtool5 のサブルーチンの説明} \\
　HistoryCreate の設定を行う時, dimsize では \hyperlink{size}{size} 関数を用う. \\
　また, HistoryPut の設定の時は, array 部分は \hyperlink{position}{position} 関数を用いる. \\
　ex) call HistoryCreate(fname,"title","source","institution",dims,(/size\_x(var),0/), … \\
　ex) call HistoryPut('x', pos\_x(var)) \\
\\
\\
以上で説明を終わります. 各関数, サブルーチンの詳細は, Reference をご覧ください.


\newpage
\setcounter{section}{0}

% ==============================================================
\part{Reference}

\section{概要}

%% ===================================================================

% MATH 数式処理パッケージ =============
\section{MATH 数学処理パッケージ} % ==
% ====================================
中野 ver.
% === MATh\_bAR ========================
\hypertarget{bar}{\subsection{bar}}
\begin{itemize}
 \item 機能 \\
　grid 間での平均を取る.
 \item 書式 \\
　output = bar\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) output = bar\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_CMEAN ========================
\hypertarget{cmean}{\subsection{cmean}}
\begin{itemize}
 \item 機能 \\
　一方向一列分の平均を取る. mean とは違って, 変数の位置を考慮に入れていない. 変数が軸上にない場合のみを定義している.
 \item 書式 \\
　output = cmean\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) output = cmean\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_DERIVATIVE ========================
\hypertarget{derivative}{\subsection{derivative}}
\begin{itemize}
 \item 機能 \\
　差分を計算する.
 \item 書式 \\
　output = d\_$<$num+dir$>$(var) \\
　　$<$num+dir$>$ について \\
　　　num : 差分の取り方の指定. \\
　　　なし → 1つ後ろの値を, 2 → 1つ前と1つ後ろの値を, 4 → 2つ前と2つ後ろの値を使う \\
　　　dir : 方向. x or y or z \\
　ex) output = d\_2x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_DIVIDE ========================
\hypertarget{divide}{\subsection{divide}}
\begin{itemize}
 \item 機能 \\
　四則演算のひとつ. gms 型変数同士, または gms 型変数と実数の割り算を定義している.
 \item 書式 \\
　gms 型変数 / gms 型変数 \\
　gms 型変数 / 実数 (順序逆も可) \\
　ex) output = var1/var2　(計算では何も考えずに左記の様に書いてよい)
 \item 引数 \\
　なし
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_FUNCTION ========================
\hypertarget{function}{\subsection{function}}
\begin{itemize}
 \item 機能 \\
　gms 関数に対して組み込み関数が使えるように定義している.
 \item 書式 \\
  \begin{enumerate}
   \item 引数が1つのもの： \\
　output = abs(var) \\
　　他：acos, aint, anint, asin, atan, cosh, exp, log, log10, sin, sinh, sqrt, tan, tanh
   \item 引数が2つのもの： \\
　output = atan2(var1, var2) \\
　　他：max, min, mod, modulo, sign
 \end{enumerate}
　機能は Fortran90 の組み込み関数と同じである. 
 \item 引数 \\
　var, var1, var2 : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_MEAN ========================
\hypertarget{mean}{\subsection{mean}}
\begin{itemize}
 \item 機能 \\
　一方向一列分の平均を取る. cmean とは違って, 変数の位置を考慮に入れて定義してある.
 \item 書式 \\
　output = cmean\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) output = cmean\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_MINUS ========================
\hypertarget{minus}{\subsection{minus}}
\begin{itemize}
 \item 機能 \\
　四則演算のひとつ. gms 型変数同士, または gms 型変数と実数の引き算を定義している. また, ただ gms 型変数にマイナス(-)をつけることができる.
 \item 書式 \\
　gms 型変数 - gms 型変数 \\
　gms 型変数 - 実数 (順序逆も可) \\
　- gms 型変数 \\
　ex) output = var1 - var2　(計算では何も考えずに左記の様に書いてよい)
 \item 引数 \\
　なし
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_PLUS ========================
\hypertarget{plus}{\subsection{plus}}
\begin{itemize}
 \item 機能 \\
　四則演算のひとつ. gms 型変数同士, または gms 型変数と実数の足し算を定義している. また, ただ gms 型変数にプラス(+)をつけることができる.
 \item 書式 \\
　gms 型変数 + gms 型変数 \\
　gms 型変数 + 実数 (順序逆も可) \\
　+ gms 型変数 \\
　ex) output = var1 + var2　(計算では何も考えずに左記の様に書いてよい)
 \item 引数 \\
　なし
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_POWER ========================
\hypertarget{power}{\subsection{power}}
\begin{itemize}
 \item 機能 \\
　gms 型変数のべき乗, または実数を gms 型変数でべき乗する時の定義をしている.
 \item 書式 \\
　gms 型変数 ** gms 型変数 \\
　gms 型変数 ** 実数 \\
　実数 ** gms 型変数 \\
　ex) var1 ** var2　($= var1^{var2}$)
 \item 引数 \\
　なし
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MATH_TIMES ========================
\hypertarget{times}{\subsection{times}}
\begin{itemize}
 \item 機能 \\
　四則演算のひとつ. gms 型変数同士, または gms 型変数と実数のかけ算を定義している.
 \item 書式 \\
　gms 型変数 * gms 型変数 \\
　gms 型変数 * 実数 (順序逆も可) \\
　ex) output = var1 * var2
 \item 引数 \\
　なし
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% GRPH 図形処理パッケージ =============
\section{GRPH 図形処理パッケージ} % ==
% ====================================

安部 ver.

% === DRAW_GRAPH ========================
\hypertarget{draw-graph}{\subsection{draw\_graph}}
\begin{itemize}
 \item 機能 \\
　とにかくデータを NetCDF ファイルにはき出すためのサブルーチン. gms 型変数5つ分までサポートしている.
 \item 書式 \\
　描画する変数の数が1つの場合. \\
　call gt4init$<$1$>$\_$<$dim$>$(var1, "fname", ndump, "vname1", "lname1", "vunit1", dt) \\
　call gt4\_varout$<$1$>$\_$<$dim$>$("vname1", var1) \\
　　$<$1$>$ : 描画する変数の数を記入. 1から5まで. \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) call gt4init1\_x(var1, "test.nc", ndump, "vname1", "lname1", "vunit1", dt) \\
　ex) call gt4\_varout1\_x("vname1", var1)
 \item 引数 \\
　var1 : 描画したい gms 型変数. \\
　fname : ファイル名. 拡張子を .nc にする. \\
　ndump : 出力間隔. \\
　vname1 : 変数名. これがグラフに出力される. \\
　lname1 : 正式な変数名. \\
　vunit1 : 単位. グラフに出力される. \\
　dt : 時間ステップ幅
 \item 備考 \\
　fname, vname1, lname1, nunit1 は " " に挟んで書く. \\
　自分で定義してお絵描きしたい場合は, \href{http://www.gfd-dennou.org/library/gtool/gt5tutorial/}{gtool5} を自分で勉強してください. \\
　(この時↑の注意)　参考URL : \href{http://www.gfd-dennou.org/library/gtool/gtool5/gtool5_current/doc/tutorial/gthist_desc.htm}{gtool5 のサブルーチンの説明} \\
　HistoryCreate の設定を行う時, dimsize では \hyperlink{size}{size} 関数を用う. \\
　また, HistoryPut の設定の時は, array 部分は \hyperlink{position}{position} 関数を用いる. \\
　ex) call HistoryCreate(fname,"title","source","institution",dims,(/size\_x(var),0/), … \\
　ex) call HistoryPut('x', pos\_x(var)) \\
\\
 \ref{no-gms-install}節で gms のインストール方法を記載したが、その方法ではこの draw-graph はインストールされない. \\
 Fortran Compiler が gfortran ではなく、gmsfrt でなくてはならない. このモジュールを使用する方法は、要望があれば書く予定.
 \item 関連項目
 \begin{itemize}
  \item 関連ルーチン(\hyperlink{position}{position}, \hyperlink{size}{size})
 \end{itemize}
\end{itemize}

% その他のパッケージ =============
\section{その他のパッケージ} % ==
% ===============================

中野 ver.

% === ASSIGN ========================
\hypertarget{assign}{\subsection{assign}}
\begin{itemize}
 \item 機能 \\
　gms 型変数を含んだ計算において, 左辺と右辺をイコールでつなげられるように定義している. \\
　また, 左辺と右辺でグリッドの位置が等しいかを評価している.
 \item 書式 \\
　gms 型変数 = gms 型変数 \\
　ex) var1 = var2　(計算では何も考えずに左記の様に書いてよい)
 \item 引数 \\
　なし
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === ASYM2 ========================
\hypertarget{assign2}{\subsection{assign2}}
\begin{itemize}
 \item 機能 \\
　gms 型変数に実数を代入することができるように定義している.
 \item 書式 \\
　gms 型変数 = 実数 \\
　ex) var1 = real\_num　(計算では何も考えずに左記の様に書いてよい)
 \item 引数 \\
　なし
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === ASYM ========================
\hypertarget{asym}{\subsection{asym}}
\begin{itemize}
 \item 機能 \\
　境界条件に関するサブルーチン. 境界を挟んで反対称的な条件にする. ex) 粘着壁条件
 \item 書式 \\
　call asym\_boundary\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) call asym\_boundary\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === CYCLIC ========================
\hypertarget{cyclic}{\subsection{cyclic}}
\begin{itemize}
 \item 機能 \\
　境界を周期的条件に定義する.
 \item 書式 \\
　call cyclic\_boundary\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) call cyclic\_boundary\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === DATATYPE ========================
\hypertarget{datatype}{\subsection{datatype}}
\begin{itemize}
 \item 機能 \\
　gms 型変数の構造体を定義している.
 \item 書式 \\
　type(var\_$<$dim$>$) :: var \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) type(var\_x) :: var
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
　なし
\end{itemize}

% === def\_var ========================
\hypertarget{def-var}{\subsection{def\_var}}
\begin{itemize}
 \item 機能 \\
　変数に grid 情報を与える.
 \item 書式 \\
　call def\_var\_$<$dim$>$(var, gridinfo) \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) call def\_var\_x(var, on\_none\_none\_grid)
 \item 引数 \\
　var : gms 型変数 \\
　gridinfo : grid 情報. 記述の仕方は "grid\_info" を参照. 
 \item 備考 \\
　grid 情報の記述方法は関連ルーチンのものを使う.
 \item 関連項目
 \begin{itemize}
  \item 関連ルーチン(\hyperlink{grid-info}{grid\_info})
 \end{itemize}
\end{itemize}

% === GET ========================
\hypertarget{get}{\subsection{get}}
\begin{itemize}
 \item 機能 \\
　gms 型変数を配列型変数に変換する.
 \item 書式 \\
　output = get\_$<$dim$>$(var) \\
　　output : 得られた配列型変数 \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) output = get\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　物理空間のみ変換される. output にあらかじめ配列を与えておく必要がある. 
 \item 関連項目 \\
\end{itemize}

% === INPUT_FUNC_VAR ========================
\hypertarget{input-func-var}{\subsection{input\_func\_var}}
\begin{itemize}
 \item 機能 \\
　関数によって定義した値を gms 型変数に値を放り込む.
 \item 書式 \\
　call input\_func\_var\_$<$dim$>$(func, var) \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) call input\_func\_var\_x(func, var)
 \item 引数 \\
　func : 関数によって定義した値. これは内・外関数などで自分で定義する必要がある. \\
　var : 値を放り込まれる gms 型変数.
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === INPUT_VAR ========================
\hypertarget{input-var}{\subsection{input\_var}}
\begin{itemize}
 \item 機能 \\
　配列型変数を gms 型変数に変換する.
 \item 書式 \\
　call input\_var\_$<$dim$>$(input, var) \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) call input\_var\_x(input, var)
 \item 引数 \\
　input : 配列型変数
　var : gms 型変数
 \item 備考 \\
　物理空間のみ変換される. input と var の配列個数が一致してないといけない(このことは get も同様).
 \item 関連項目 \\
\end{itemize}

% === POSITION ========================
\hypertarget{position}{\subsection{position}}
\begin{itemize}
 \item 機能 \\
　gms 変数の座標位置を配列型変数, または gms 型変数として求める.
 \item 書式 \\
　output1 = pos\_$<$dir$>$(var) \\
　output2 = pos\_var\_$<$dir$>$(var) \\
　　output1 : 配列型変数 \\
　　output2 : gms 型変数 \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) output1 = pos\_x(var) \\
　ex) output2 = pos\_var\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　物理空間のみ求められる.
 \item 関連項目 \\
\end{itemize}

% === SIZE ========================
\hypertarget{size}{\subsection{size}}
\begin{itemize}
 \item 機能 \\
　gms 型変数のサイズを求める.
 \item 書式 \\
　output = size\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) output = size\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　物理空間のみ求められる.
 \item 関連項目 \\
\end{itemize}

% === SYM ========================
\hypertarget{sym}{\subsection{sym}}
\begin{itemize}
 \item 機能 \\
　境界条件に関するサブルーチン. 境界を挟んで対称的な条件にする. ex) すべり壁条件, 断熱条件
 \item 書式 \\
　call sym\_boundary\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) call sym\_boundary\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === MEM_MANAGER ========================
\hypertarget{mem-manager}{\subsection{mem\_manager}}
\begin{itemize}
 \item 機能
 \begin{enumerate}
  \item 使用する gms 型変数が必要となるメモリ(work area)を確保する. 
  \item work area上で計算結果に対応する値が入っているアドレスに印を付ける. 一番最初はユーザーがこれを行わないといけない. これは, def\_var で変数に grid 情報を与える時に自動的になされる.
  \item work area 上のあいてるアドレスを問い合わせる. 計算結果をメモリに書き出すモジュールで自動的に問い合わせるようになっている.
  \item work areaにつけられている計算結果の印を新しい場所に付け替える
  \item ゴミ集め. やってるのは Address counter を 1 にリセットするだけ.
 \end{enumerate}
　*) 上記の 1. 以外はユーザーが定義する必要はない.
 \item 書式 \\
　work area の確保 \\
　call allocate\_work\_area\_$<$dir$>$(num) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) call allocate\_work\_area\_x(10)
 \item 引数 \\
　num : 使用する gms 型変数の数
 \item 備考 \\
　num は使用する数より少し多めに取っておくとよい.
 \item 関連項目 \\
%\begin{itemize}
% \item 関連ルーチン(def\_var, math 系, input\_var, position, assign)
%\end{itemize}
\end{itemize}
　
% === MODEL_INFO ========================
\hypertarget{model-info}{\subsection{model\_info}}
\begin{itemize}
 \item 機能 \\
　モデルの情報を設定するモジュール. 格子点数, 糊代の数, グリッドの大きさ(dxなど), 物理空間での座標最小値, そして以上の設定をプログラム実行時に端末に表示する.
 \item 書式 \\
　call set\_grid\_num\_$<$dir$>$(num) \\
　call set\_margin\_$<$dir$>$(margin) \\
　call gms\_set\_interval\_$<$dir$>$(grid\_size) \\
　call set\_real\_min\_$<$dir$>$(min) \\
　call dump\_gms\_modelparm \\
　　$<$dir$>$ : 方向. x or y or z
　ex) call set\_grid\_num\_x(num) \\
　ex) call set\_margin\_x(margin) \\
　ex) call gms\_set\_interval\_x(dx) \\
　ex) call set\_real\_min\_x(min) \\
　ex) call dump\_gms\_modelparm
 \item 引数 \\
　num : 格子点数 \\
　margin : 糊代の数 \\
　grid\_size : グリッドの大きさ(dxなど) \\
　min : 物理空間での座標最小値 \\
　以上はすべてユーザー定義.
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

\vspace{1cm}
ここから安部 ver.

% === GET_ALL ========================
\hypertarget{get-all}{\subsection{get\_all}}
\begin{itemize}
 \item 機能 \\
　gms 型変数を配列型変数に変換する.
 \item 書式 \\
　output = get\_all\_$<$dim$>$(var) \\
　　output : 得られた配列型変数 \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) output = get\_all\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　get と違うところ : 糊代も含めたデータを扱う.
 \item 関連項目
 \begin{itemize}
  \item 関連ルーチン(\hyperlink{get}{get})
 \end{itemize}
\end{itemize}

% === GRID_INFO ========================
\hypertarget{grid-info}{\subsection{grid\_info}}
\begin{itemize}
 \item 機能 \\
　変数に与えるグリッド情報群. 変数の位置がグリッド境界上なら「on」, 半グリッドずれたところなら「off」と表現する. 考えない次元に対しては「none」と表現する.
 \item 書式 \\
　def\_var を用いて使用例を示す. \\
　call def\_var\_$<$dim$>$(var, grid1\_grid2\_grid3\_grid) \\
　　$<$dim$>$ : 変数の次元. x や xz など \\
　ex) gms 型変数 var が2次元変数で, 位置についてはx軸に対してはグリッドの境界上に,  \\
　　　y軸に対しては半グリッドずれている場合. \\
　　　　call def\_var\_xy(var, on\_off\_none\_grid)
 \item 引数 \\
　var : gms 型変数 \\
　grid1, grid2, grid3 : on or off or none を代入. \\
 \item 備考 \\
　on には "0", off には "1" というグリッド情報が与えられる. これにより, スタッガード格子点配列の変数についてサポートしている.
 \item 関連項目
 \begin{itemize}
  \item 関連ルーチン(\hyperlink{def-var}{def\_var})
 \end{itemize}
\end{itemize}

% === POSITION_ALL ========================
\hypertarget{position-all}{\subsection{position\_all}}
\begin{itemize}
 \item 機能 \\
　gms 変数の座標位置を配列型変数, または gms 型変数として求める.
 \item 書式 \\
　output1 = pos\_all\_$<$dir$>$(var) \\
　output2 = pos\_var\_all\_$<$dir$>$(var) \\
　　output1 : 配列型変数 \\
　　output2 : gms 型変数 \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) output1 = pos\_all\_x(var) \\
　ex) output2 = pos\_var\_all\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　糊代を含む.
 \item 関連項目 \\
\end{itemize}

% === SIZE_ALL ========================
\hypertarget{size-all}{\subsection{size\_all}}
\begin{itemize}
 \item 機能 \\
　gms 型変数の物理空間でのグリッド数
 \item 書式 \\
　output = size\_all\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) output = size\_all\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　size と違うところ : 糊代も含めたデータを扱う.
 \item 関連項目 \\
\end{itemize}

% === LOWER_BOUNDARY_NOSLIP ========================
\hypertarget{low-bound-noslip}{\subsection{lower\_boundary\_noslip}}
\begin{itemize}
 \item 機能 \\
　境界条件に関するサブルーチン. 境界の中でも最小座標の部分を粘着壁条件にする.
 \item 書式 \\
　call lower\_boundary\_noslip\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　ex) call lower\_boundary\_noslip\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　asym と違うところ : asym は最大・最小座標両方の定義をしている. 
 \item 関連項目 \\
\end{itemize}

% === LOWER_BOUNDARY_NOSLIP ========================
\hypertarget{low-bound-slip}{\subsection{lower\_boundary\_slip}}
\begin{itemize}
 \item 機能 \\
　境界条件に関するサブルーチン. 境界の中でも最小座標の部分をすべり条件にする. 温度については断熱壁になる.
 \item 書式 \\
　call lower\_boundary\_slip\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　call lower\_boundary\_slip\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　sym と違うところ : sym は最大・最小座標両方の定義をしている.
 \item 関連項目 \\
\end{itemize}

% === LOWER_BOUNDARY_NOSLIP ========================
\hypertarget{same-bound}{\subsection{same\_value\_boundary}}
\begin{itemize}
 \item 機能 \\
　境界条件に関するサブルーチン. 境界の最小・最大座標それぞれに値を代入する. 等値境界条件. 等温壁にすることができる. 
 \item 書式 \\
　call same\_value\_boundary\_$<$dir$>$(var, input1, input2) \\
　　$<$dir$>$ : 方向. x or y or z \\
　call same\_value\_boundary\_x(var, input1, input2)
 \item 引数 \\
　var : gms 型変数 \\
　input1 : 境界の最小座標での値 \\
　input2 : 境界の最大座標での値
 \item 備考 \\
　なし
 \item 関連項目 \\
\end{itemize}

% === UPPER_BOUNDARY_NOSLIP ========================
\hypertarget{up-bound-noslip}{\subsection{upper\_boundary\_noslip}}
\begin{itemize}
 \item 機能 \\
　境界条件に関するサブルーチン. 境界の中でも最大座標の部分を粘着条件にする.
 \item 書式 \\
　call upper\_boundary\_noslip\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　call upper\_boundary\_noslip\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　asym と違うところ : asym は最大・最小座標両方の定義をしている. 
 \item 関連項目 \\
\end{itemize}

% === UPPER_BOUNDARY_SLIP ========================
\hypertarget{up-bound-slip}{\subsection{upper\_boundary\_slip}}
\begin{itemize}
 \item 機能 \\
　境界条件に関するサブルーチン. 境界の中でも最大座標の部分をすべり条件にする. 温度については断熱壁になる.
 \item 書式 \\
　call upper\_boundary\_slip\_$<$dir$>$(var) \\
　　$<$dir$>$ : 方向. x or y or z \\
　call upper\_boundary\_slip\_x(var)
 \item 引数 \\
　var : gms 型変数
 \item 備考 \\
　sym と違うところ : sym は最大・最小座標両方の定義をしている.
 \item 関連項目 \\
\end{itemize}

以上で説明を終わります.


\end{document}
