% 表題: 負のモル数の回避
%
% 履歴: 2004-06-02 杉山耕一朗

\chapter{負のモル数の回避}


\section{モル数の決め方}

\Deqref{rand-1} -- \Deqref{rand-3} 式を連立することによって, 平衡状態に
近い物質存在量 $n^{\phi}_{i}$ が求まる. しかしこの方程式系を導出する際に, 
%
\begin{eqnarray}
 n_{i}^{\phi} > 0
\end{eqnarray}
%
という, 化学種のモル数が常に正であるという条件は用いられていない. 
そのため得られた $n^{\phi}_{i}$ は負になる可能性がある. 

そこで oboro では, 計算から得られた存在量 $n^{\phi}_{i}$ が負となった場
合にはその化学種のモル数を計算開始時の組成の $\lambda$ 倍とし, それと辻
褄があうように他の化学種のモル数を決めるという操作を行っている.  具体的
には以下の式より得られる $n_{i}^{\phi *}$ をより平衡状態に近い物質存在量
とみなすことにする.
%
\begin{eqnarray}
n_{i}^{\phi *} = m^{\phi}_{i} + \lambda \{n^{\phi}_{i} - m^{\phi}_{i}\}.
\Deqlab{20010129-51}
\end{eqnarray}
%
ここで $\lambda (> 0)$ は定数で, 以下のように定義する. 
%
\begin{eqnarray}
 \lambda = {\rm maxval}(\lambda_{i}). 
\end{eqnarray}
%
ここで $\lambda_{i}$ は
%
\begin{eqnarray}
\lambda_{i} \equiv  
\left\{
\begin{array}{ll}
 \frac{m^{\phi}_{i}}{m^{\phi}_{i} - n^{\phi}_{i}} \times C
  & (n_{i}^{\phi} \leq 0) \\
 1  & (n_{i}^{\phi} > 0)
\end{array}
\right.
\Deqlab{lambda}
\end{eqnarray}
%
である. ただし, $C$ は 1 より小さい定数である. 


なお, \Deqref{20010129-51} 式の $n_{i}^{\phi *}$ は 
元素数の保存式
%
\begin{eqnarray}
\sum_{\phi}\sum_{i} a_{ie}^{\phi} n_{i}^{\phi} = B_{e}  \Deqlab{2} \\
n_{i}^{\phi} \geq 0   \Deqlab{1-1} 
\end{eqnarray}
%
を満たす. 


\section{定数 $C$ の決め方}


\Deqref{lambda} 式の定数 $C$ は, 最も負となった化学種のモル数が反復計算
の 1 ステップ前のモル数の $(1 - C)$ 倍とするような定数である. この定数を
限りなく 1 に近付けると負になった化学種のモル数を一気にゼロに近付けるこ
ととなる. しかし 1 に近付けすぎると, 後ろの章で議論する化学種の打ちきり
条件に引っかかったり, 溶液のような場合には水溶液濃度が変化しすぎるために
計算が不安定になったりすることが経験的に知られている. 

現在の oboro の計算では, $C = 0.9$ とし, \Deqref{lambda} 式を以下のよう
に利用している. 
%
\begin{eqnarray}
\lambda_{i} \equiv  
\left\{
\begin{array}{ll}
 \frac{m^{\phi}_{i}}{m^{\phi}_{i} - n^{\phi}_{i}} \times 0.9
  & (n_{i}^{\phi} \leq 0) \\
 1  & (n_{i}^{\phi} > 0)
\end{array}
\right.
\end{eqnarray}
%


\section{定数 $C$ に関するパラメタスタディ}

本節では $C$ の値をパラメタとして変化させた時の例を示す. $C = 0.5, 0.9,
0.99$ に設定した場合での, 水溶液を形成する化学種のモル数を示す.
\Dfigref{lambda} からわかるように, $C = 0.99$ では水溶液のモル数が非常に
不安定になっていることがわかる. これは反復計算においてモル数が負となった
溶質が急速にゼロに近付き, 化学種の打ちきり条件より系から除外されてしまっ
たことを示す. 

計算時間の短縮のためにはできるだけ $C$ の大きさは大きい方が良いが, $C$ 
を大きくしすぎると偽の平衡状態が現われてしまう. 実用的には $C=0.9$ は妥
当な設定のように見える.



\begin{tabular}{|c|c|c|c|c|} \hline
計算時間  &  $C = 0.5$ & $C = 0.9$ & $C = 0.99$ & $C = 0.999$  \\ \hline
          &   分  秒 & 11 分 26 秒 &  分 秒 &  5 分  55 秒 \\ \hline
\end{tabular}