圧力と深度 | 海洋観測

海洋観測では距離(メートル)を直接測定することは困難なため、圧力で代用します。なお海洋観測では慣習的に圧力の単位に「dbar」を用いること、また海面の圧力を0dbarとするのが特徴です。海面は1気圧ではないのです。

  • 1MPa = 100dbar ≒ 100m
目次

深さによる区分

海は深さによっていくつかに区分されています。この区切り方に決まった定義はありませんが、おおむね次のように区切られます。

  • 0~200m:表層
  • 200~1000m:中層
  • 1000~3000m:漸深層
  • 3000~6000m:深海層
  • 6000m~:超深海層

ここで一般的に、200mより深い海域を深海、浅い海域を表層と呼びます。水深200mにもなると真っ暗闇ですが、可視光以外の光は水深1000mほどまで届いており、光合成が可能といわれています。なお最深部はマリアナ海溝のチャレンジャー海淵で、その深さは1万920メートルとなります。

圧力から深度への換算式

圧力から深度(海面からの垂直距離)へ換算する計算式を紹介します。

淡水の場合

淡水の場合の、圧力から深度への換算は容易です。圧力を$P$ [dbar]とすると、深度$D$ [m]は下記式により求められます。

$D = 1.019716 \cdot P$

海水の場合

計算式

圧力を$P$ [dbar]、緯度を$L$ [°]とすると、深度$D$ [m]は下記式1により求められます。

$ \begin{aligned}
D &= \frac{ C_{1} \cdot P + C_{2} \cdot P^{2} + C_{3} \cdot P^{3} + C_{4} \cdot P^{4} }{ g +\displaystyle\frac{1}{2} \cdot \gamma’ \cdot P } + \frac{ \Delta D }{ 9.8 } \\
g &= 9.780318 \times \left( 1.0 + 5.2788 \times 10^{-3} \cdot x^{2} + 2.36 \times 10^{-5} \cdot x^{4}\right) \\
x &= \sin \left( \frac{L}{57.29578} \right)
\end{aligned} $

ここで$\Delta D$の項目は通常省略します。また上記計算式で使用する係数は、下記のとおりです。

$C_{1} = 9.72659$、$C_{2} = -2.2512 \times 10^{-5}$、$C_{3} = 2.279 \times 10^{-10}$、$C_{4} = -1.82 \times 10^{-15}$
$\gamma’ = 2.184 \times 10^{-6}$

計算例
スクロールできます
$P$ [dbar]$L$ [°]
030456090
1000992.12990.81989.50988.19986.88
50004915.044908.564902.084895.604889.13
100009725.479712.659699.849687.039674.23

サンプルコード

[pressure.c]

/**
 * @file pressure.c
 * @brief 圧力計算
 * @brief 1MPa = 100dbar
 */

//------------------------------------------------------------------------------
// include
//------------------------------------------------------------------------------
#include <float.h>
#include <math.h>

#include "pressure.h"

/** ----------------------------------------------------------------------------
 * @brief 圧力から深度への換算 (淡水仕様)
 *
 * @param press : 圧力[dbar]
 * @return 深度[m]
 */
double PressToDepth_Freshwater(double press)
{
  double depth;

  depth = press * 1.019716;

  return depth;
}

/** ----------------------------------------------------------------------------
 * @brief 圧力から深度への換算 (海水仕様)
 * @details UNESCO (1983) "Pressure to Depth Conversion"
 *
 * @param press : 圧力[dbar]
 * @param g : 重力加速度[m/s2] (Calc_GravityVariationで計算)
 * @return 深度[m]
 */
double PressToDepth_Seawater(double press, double g)
{
  static const double c[5]  = {0.0, 9.72659, -2.2512e-5, 2.279e-10, -1.82e-15};
  static const double kGamma = 2.184e-6;

  double depth;
  double p, p2, p3, p4;
  double cc;
  double tmp;

  if (g < DBL_EPSILON) {
    return 0.0;
  }

  p  = press;
  p2 = p * p;
  p3 = p2 * p;
  p4 = p3 * p;

  cc = c[1] * p + c[2] * p2 + c[3] * p3 + c[4] * p4;

  tmp = g + kGamma * p / 2.0;
  if (fabs(tmp) < DBL_EPSILON) {
    depth = 0.0;
  } else {
    depth = cc / tmp;
  }

  return depth;
}

/** ----------------------------------------------------------------------------
 * @brief 重力加速度の計算
 *
 * @param latitude : 緯度[°]
 * @return 重力加速度[m/s2]
 */
double Calc_GravityVariation(double latitude)
{
  double g;
  double x, x2, x4;

  x  = sin(latitude / 57.29578);
  x2 = x * x;
  x4 = x2 * x2;
  g  = 9.780318 * (1.0 + 5.2788e-3 * x2 + 2.36e-5 * x4);

  return g;
}

[pressure.h]

#ifndef PRESSURE_H
#define PRESSURE_H

#ifdef __cplusplus
extern "C" {
#endif

//------------------------------------------------------------------------------
// function
//------------------------------------------------------------------------------
double PressToDepth_Freshwater(double press);
double PressToDepth_Seawater(double press, double g);
double Calc_GravityVariation(double latitude);

#ifdef __cplusplus
}
#endif

#endif

サンプルコードの使用例

使用例代わりに、CppUTestによるテストコードを掲載しておきます。

#include "CppUTest/TestHarness.h"

#include "pressure.h"

// clang-format off
TEST_GROUP(pressure){
  TEST_SETUP(){
  }

  TEST_TEARDOWN(){
  }
};
// clang-format on

TEST(pressure, Test_freshwater)
{
  double depth;

  depth = PressToDepth_Freshwater(100.0);
  DOUBLES_EQUAL(depth, 101.9716, 5e-5);
}

TEST(pressure, Test_seawater)
{
  double depth, g;

  g     = Calc_GravityVariation(0.0);
  depth = PressToDepth_Seawater(500.0, g);
  DOUBLES_EQUAL(depth, 496.65, 5e-3);

  g     = Calc_GravityVariation(45.0);
  depth = PressToDepth_Seawater(500.0, g);
  DOUBLES_EQUAL(depth, 495.34, 5e-3);

  g     = Calc_GravityVariation(90.0);
  depth = PressToDepth_Seawater(500.0, g);
  DOUBLES_EQUAL(depth, 494.03, 5e-3);

  g     = Calc_GravityVariation(0.0);
  depth = PressToDepth_Seawater(10000.0, g);
  DOUBLES_EQUAL(depth, 9725.47, 5e-3);

  g     = Calc_GravityVariation(90.0);
  depth = PressToDepth_Seawater(10000.0, g);
  DOUBLES_EQUAL(depth, 9674.23, 5e-3);
}

脚注

  1. UNESCO (1983) “Pressure to Depth Conversion” Unesco technical papers in marine science No.44 ↩︎

コメント

コメントする

CAPTCHA


目次