溶存酸素(Dissolved Oxygen:DO)は、海洋観測においてはCTDに次いで重要な要素です。海面付近の海水は大気から酸素を吸収しているため、ほぼ飽和状態の酸素量となります。その海水が沈み込むと酸素の供給がなくなり、生物により消費され続けていきます。したがって溶存酸素量が少ない海水というのは、長く海水中を漂っていることを示しています。
単位は溶存酸素飽和度の場合は「%」、溶存酸素量の場合は「mg/L」や「µmol/L」などを用います。飽和度100%は、1気圧大気下で酸素が水に溶け込む最大値を表します。通常100%というとそれが上限となりますが、溶存酸素には過飽和という現象があります。植物プランクトンの光合成により酸素の排出量が増えると、溶存酸素飽和度は200%に達することもあるのです。
また過飽和とは逆に、貧酸素(ひんさんそ)という溶存酸素量が著しく低い状態もあります。これは海底の窪地や内湾など水の流れが滞りやすい場所で発生しやすいものです。貧酸素水塊が発生すると生物の大量死が発生し、漁業や養殖業といった水産業において壊滅的な打撃をもたらします。その反面、海底に溜まっている金属や栄養分が水中に溶けだすなど良い面もあります。しかし基本的には悪い面が勝っており、水温上昇・酸性化と合わせて、海の生態系への三大ストレスの1つといわれています。
- 酸性化は貝やサンゴ、エビやカニなど石灰化生物の生存に関わる問題です。
飽和溶存酸素量の計算式
Weissの式
昔から海洋観測でよく使われてきたのが、このWeissの式1です。水温を$T$ [℃]、塩分を$S$とすると、飽和溶存酸素量$O$ [mL/L]は下記式により求められます。
$ \begin{aligned}
\ln O &= A_{1} + A_{2} \cdot \frac{ 100 }{ T_{S} } + A_{3} \cdot \ln \left( \frac{ T_{S} }{ 100 } \right) + A_{4} \cdot \frac{ T_{S} }{ 100 } + S \cdot \left\{ B_{1} + B_{2} \cdot \frac{ T_{S} }{ 100 } + B_{3} \cdot \left( \frac{ T_{S} }{ 100 } \right)^{2} \right\} \\
T_{S} &= 273.15 + T
\end{aligned} $
上記計算式で使用する係数は下記のとおりです。
$A_{1} = -173.4292$、$A_{2} = 249.6339$、$A_{3} = 143.3483$、$A_{4} = -21.8492$
$B_{1} = -0.033096$、$B_{2} = 0.014259$、$B_{3} = -0.0017$
なお上記式は水温$T$が-2~40℃、塩分$S$が0~40の範囲で有効です。
$T$ [℃] | $S$ | $O$ [mL/L] |
---|---|---|
0 | 0 | 10.21803 |
0 | 30 | 8.32458 |
25 | 30 | 4.86310 |
Benson and Krauseの式
工場排水試験法(JIS K 0102:2016)にて新たに採用されたのが、このBenson and Krauseの式2です。水温を$T$ [℃]、塩分を$S$とすると、飽和溶存酸素量$O$ [µmol/L]は下記式により求められます。
$ \begin{aligned}
\ln O &= A_{0} + \frac{ A_{1} }{ T_{S} } + \frac{ A_{2} }{ T_{S}^{2} } + \frac{ A_{3} }{ T_{S}^{3} } + \frac{ A_{4} }{ T_{S}^{4} } – S \cdot \left( B_{0} + \frac{ B_{1} }{ T_{S} } + \frac{ B_{2} }{ T_{S}^{2} } \right) \\
T_{S} &= 273.15 + T
\end{aligned} $
上記計算式で使用する係数は下記のとおりです。
$A_{0} = -135.90205$、$A_{1} = 1.575701 \times 10^{5}$、$A_{2} = -6.642308 \times 10^{7}$、$A_{3} = 1.243800 \times 10^{10}$、$A_{4} = -8.621949 \times 10^{11}$
$B_{0} = 0.017674$、$B_{1} = -10.754$、$B_{2} = 2140.7$
なお上記式は水温$T$が0~45℃、塩分$S$が0~50の範囲で有効です。
$T$ [℃] | $S$ | $O$ [µmol/L] |
---|---|---|
0 | 0 | 456.91961 |
0 | 30 | 370.42518 |
25 | 30 | 217.74102 |
単位換算式
溶存酸素は下記式により単位換算できます。
$ \begin{aligned}
O_{mg} \ {\rm [mg/L]} &= 1.42903 \cdot O \ {\rm [mL/L]} \\
O_{mol} \ [{\rm \mu mol/L]} &= 44.660 \cdot O \ {\rm [mL/L]} \\
O_{mg} \ {\rm [mg/L]} &= 31.9988 \times 10^{-3} \cdot O \ [{\rm \mu mol/L]}
\end{aligned} $
換算式の係数は下記から求めれた値です。
$ \begin{aligned}
1.42903 &\fallingdotseq \frac{ 酸素分子量 [\mathrm{g/mol}] }{ 標準状態における酸素1 \mathrm{mol} の体積 [\mathrm{L/mol}] } = \frac{ 31.9988 }{ 22.392 } [\mathrm{g/L}] \\
44.660 &\fallingdotseq \frac{ 10^{3} }{ 標準状態における酸素1\ \mathrm{mol} の体積 [\mathrm{L/mol}] } = \frac{ 10^{3} }{ 22.392 } [\mathrm{mol/L}]
\end{aligned} $
サンプルコード
[do.c]
/**
* @file do.c
* @brief 飽和溶存酸素量の計算
*/
//------------------------------------------------------------------------------
// include
//------------------------------------------------------------------------------
#include <math.h>
#include "do.h"
/** ----------------------------------------------------------------------------
* @brief Weiss
* @details Weiss (1970) @n
* "The solubility of nitrogen, oxygen and argon in water and seawater"
*
* @param temp : 水温[℃] [-2 - 40]
* @param sal : 塩分 [0 - 40]
* @return 飽和溶存酸素量[mL/L]
*/
double Calc_DO_Weiss(double temp, double sal)
{
static const double a[4] = {-173.4292, 249.6339, 143.3483, -21.8492};
static const double b[3] = {-0.033096, 0.014259, -0.0017};
double o2;
double t, t2;
double aa, bb;
// 入力確認
if (sal < DBL_EPSILON) {
sal = 0.0;
}
t = (temp + 273.15) / 100.0;
if (t < DBL_EPSILON) {
return 0.0;
}
t2 = t * t;
aa = a[0] + a[1] / t + a[2] * log(t) + a[3] * t;
bb = b[0] + b[1] * t + b[2] * t2;
o2 = aa + sal * bb;
o2 = exp(o2);
return o2;
}
/** ----------------------------------------------------------------------------
* @brief Benson and Krause
* @details Bruce B. Benson and Daniel Krause, Jr. (1984) @n
* "The concentration and isotopic fractionation of oxygen dissolved in freshwater and seawater in equilibrium with the atmosphere"
*
* @param temp : 水温[℃] [0 - 40]
* @param sal : 塩分 [0 - 40]
* @return 飽和溶存酸素量[µmol/L]
*/
double Calc_DO_BensonKrause(double temp, double sal)
{
static const double a[5] = {-135.90205, 1.575701e5, -6.642308e7, 1.243800e10, -8.621949e11};
static const double b[3] = {0.017674, -10.754, 2140.7};
double o2;
double t, t2, t3, t4;
double aa, bb;
// 入力確認
if (sal < DBL_EPSILON) {
sal = 0.0;
}
t = 273.15 + temp;
if (t < DBL_EPSILON) {
return 0.0;
}
t2 = t * t;
t3 = t2 * t;
t4 = t3 * t;
aa = a[0] + a[1] / t + a[2] / t2 + a[3] / t3 + a[4] / t4;
bb = b[0] + b[1] / t + b[2] / t2;
o2 = aa - sal * bb;
o2 = exp(o2);
return o2;
}
[do.h]
#ifndef DOH
#define DOH
#ifdef __cplusplus
extern "C" {
#endif
//---------------------------------------------------------------------------
// function
//---------------------------------------------------------------------------
double Calc_DO_Weiss(double temp, double sal);
double Calc_DO_BensonKrause(double temp, double sal);
#ifdef __cplusplus
}
#endif
#endif
サンプルコードの使用例
使用例代わりに、CppUTestによるテストコードを掲載しておきます。
#include "CppUTest/TestHarness.h"
#include "do.h"
// clang-format off
TEST_GROUP(dom){
TEST_SETUP(){
}
TEST_TEARDOWN(){
}
};
// clang-format on
TEST(dom, Test_weiss)
{
double sdo;
sdo = Calc_DO_Weiss(0.0, 0.0);
DOUBLES_EQUAL(sdo, 10.21803, 5e-6);
sdo = Calc_DO_Weiss(0.0, 30.0);
DOUBLES_EQUAL(sdo, 8.32458, 5e-6);
sdo = Calc_DO_Weiss(25.0, 30.0);
DOUBLES_EQUAL(sdo, 4.86310, 5e-6);
}
TEST(dom, Test_benson_and_krause)
{
double sdo;
sdo = Calc_DO_BensonKrause(0.0, 0.0);
DOUBLES_EQUAL(sdo, 456.91961, 5e-6);
sdo = Calc_DO_BensonKrause(0.0, 30.0);
DOUBLES_EQUAL(sdo, 370.42518, 5e-6);
sdo = Calc_DO_BensonKrause(25.0, 30.0);
DOUBLES_EQUAL(sdo, 217.74102, 5e-6);
}
脚注
- Weiss (1970) “The solubility of nitrogen, oxygen and argon in water and seawater” Deep-Sea Res 17 ↩︎
- Bruce B. Benson and Daniel Krause, Jr.(1984)”The concentration and isotopic fractionation of oxygen dissolved in freshwater and seawater in equilibrium with the atmosphere” Limnology and Oceanography, 29(3) ↩︎
コメント