Uses a linear dispersion relationship to compute wave-frequency from wave-number

You're viewing an older version of this page (#70). View the current version.

View versions (1)

Interface

#include <codecogs/engineering/fluid_mechanics/waves/dispersion.h>

using namespace Engineering::Fluid_Mechanics::Waves;

Overview

This function solves the linear dispersion equation, w^2 = g k tanh(k d), to obtain wave-frequency from a given wave-number, using a very simple rearrangement

w = \sqrt { g k tanh(k d) }
(1)

where w is wave-frequency, k is wave-number and g is gravity. In deep water (represented with d<=0), this solution reduces to

w = \sqrt { g k }
(2)

The opposite of this function is dispersion_w

Worked example #114 not found.

Parameters

k
(2\;\mathrm{\pi/m}) is wave-number. [rad/m]
depth
the depth of the water to mean sea level. A value of zero or less corresponds to deep water. [m]
gravity
(default 9.8066). [m/s\^2]

Returns

wave-frequency (2\;\mathrm{\pi/s}). [rad/s]
GPL Licence — free for non commercial use. See Licence details.

FUNCTION

k_to_w

This function solves a 2nd order dispersion relationship to more accurately compute the relationship between wave-frequency and wave-number for the specified wave amplitude a. The solution is based on work by Dalrymple, who derived:

w^2 = g k (1 + f_1 \epsilon^2 D) tanh(k d + f_2 \epsilon)
(3)
This part is only visible to registered users. Sign in to see it.

In deep water(represented with d<=0), this solution reduces to

w = \sqrt { g k }
(4)

As in the linear dispersion relationship.

Example 1
Problem

Compute the second order Wave Number from Wave Frequency in water of depth 2m.

Workings
#include <stdio.h>
#include <codecogs/engineering/fluid_mechanics/waves/dispersion.h>
using namespace Engineering::Fluid_Mechanics::Waves;

int main()
{
  double amp=3;  // 3 meters
  printf("   k         w ");
  for(double k=0.01; k<1;k+=0.1)
  {
    printf("\n %.6lf", k);
    double w=k_to_w(amp,k,2);
    printf("  %.3lf", w);
  }
}

Parameters

a
amplitude of component with wavenumber k. [m]
k
wave-number of component (2\;\mathrm{\pi/m}). [rad/m]
depth
the depth of the water to mean sea level. A value of zero or less corresponds to deep water. [m]
gravity
(default 9.8066\;\mathrm{m/s^2}). [m/s\^2]

Returns

wave-frequency (2\;\mathrm{\pi/s}). [rad/s]

Interactive Calculator

a
k
depth
gravity
Result

FUNCTION

w_to_k

Finds the wave-number associated with a particular wave-frequency, using this 1st order dispersion equation, w^2 = g k tanh(k d) to obtain wave-number from a given wave-frequency.

In Deep water, this equations reduces to w^2 = g k, which can obviously solved directly.

For shallow water, an iterative approach must be used. For each iteration, we calculate the residual error:

\epsilon = \frac{w^2}{g} -  k tanh(k d)
(5)

where w is wave-frequency, k is wave-number and g is gravity.

We then seek to minimise ε using the first derivative \partial \epsilon / \partial k.

This convergence of this error function is fairly rapid, with poorest conversion, 8 iterations in water 2m deep (for 6dp precision) occurring when w is small i.e. w<=0.1. When w=1.5 only 4 iterations are needed, while w>3.5 needs only 2 iterations. Shallow water naturally requires more iteration. If your doing many calculation in either shallow water or very long wave periods (>30s), then you might want to consider fine tuning this function.

This relationship can me use to move from the wave-period (2\pi / w) to the wave-length (2\pi/k) of a water wave. This is also shown graphically in the following figure: \graph w=0:4 depth=1:5:3 The opposite of this function is dispersion_k

Example 1 [metric]
Problem

Compute Wave Frequency from Wave Number in water of depth 2m.

Workings
#include <stdio.h>
#include <codecogs/engineering/fluid_mechanics/waves/dispersion.h>
using namespace Engineering::Fluid_Mechanics::Waves;

int main()
{
  printf("   k         w  recalculated k");
  for(double k=0.01; k<1;k+=0.1)
  {
    printf("\n %.6lf", k);
    double w=k_to_w(k,2);
    double k2=k_to_k(w,2);
    printf("  %.3lf  %.6lf", w, k2);
  }
  return 0;
}
Solution
k         w  recalculated k
0.010000  0.044  0.010000
0.110000  0.483  0.110000
0.210000  0.904  0.210000
0.310000  1.294  0.310000
0.410000  1.648  0.410000
0.510000  1.962  0.510000
0.610000  2.241  0.610000
0.710000  2.489  0.710000
0.810000  2.710  0.810000
0.910000  2.910  0.910000

Example 1

Parameters

w
(2\;\mathrm{\pi/s}) is wave-frequency, usually written using \omega (omega).
depth
(m) define the depth of the water to mean sea level. A value of zero or less corresponds to deep water.
gravity
(default 9.8066\;\mathrm{m/s^2}).

Returns

wave-number (2\;\mathrm{\pi/m}).

Interactive Calculator

w
depth
gravity
Result