Class wa_zonal_module
In: libsrc/wa_module/wa_zonal_module.f90
libsrc/wa_zonal_module/wa_zonal_module.f90

wa_zonal_module

Authors:Shin-ichi Takehiro, Youhei SASAKI
Version:$Id: wa_zonal_module.f90 590 2013-08-19 08:48:21Z uwabami $
Copyright&License:See COPYRIGHT

概要

 spml/wa_zonal_module モジュールは球面上での経度方向に一様な帯状的
 1 次元流体運動をルジャンドル多項式を用いたスペクトル法によって
 数値計算するための Fortran90 関数を提供する.

 球面上の 1 層モデル用 w_zonal_module モジュールを多層モデル用に
 拡張したものであり, 同時に複数個のスペクトルデータ, 格子点データに
 対する変換が行える.

 内部で l_module/la_module を用いている. 最下部ではルジャンドル
 多項式変換のエンジンとして ISPACK の Fortran77 サブルーチンを
 用いている.

 wa_zonal_modulde で提供される関数・サブルーチンは 2 次元的流体運動を扱う
 wa_module モジュールで用いられているものと名前およびインターフェースが
 共通になるように設計してある. したがって, wa_module を用いて構成された
 2 次元モデルを帯状方向に一様な 1 次元軸対称モデルへと改造するには
 次の手順が必要となる.

 1. use 文での wa_module の引用を wa_zonal_module に変更する.
 2. 配列の大きさを経度方向格子点数 im -> 1 に,
    水平波数を (nm+1)**2 -> nm+1 に変更する.
 3. DO 文で水平波数に関してループを回しているところを
    (nm+1)**2 -> nm+1 に変更する.
 4. gtool 出力の次元変数変更する.

関数・変数の名前と型について

w_zonal_module でのものに追加される関数・変数の名前と型についてのみ 説明する. w_zonal_module での関数・変数の名前と型については w_zonal_module の該当項を参照されたい.

命名法

  • 関数名の先頭 (wa_, nma_, na_, xya_, xa_, ya_, w_, xy_, x_, y_, a_) は, 返す値の形を示している.
    wa_ :水平スペクトルデータの並んだ 2 次元配列(スペクトルデータの 並びは LTPACK/ISPACK に従ったもの)
    nma_ :スペクトルデータの並んだ 3 次元配列 (スペクトルデータの並びは 全波数 n, 帯状波数 m で指定される 2 次元配列)
    na_ :スペクトルデータの並んだ 2 次元配列 (スペクトルデータの並びは 全波数 n で指定される 1 次元配列)
    xya_ :2 次元格子点データの並んだ 3 次元配列
    xa_ :経度方向 1 次元格子点データの並んだ 2 次元配列
    ya_ :緯度方向 1 次元格子点データの並んだ 2 次元配列
  • 関数名の間の文字列(DLon, GradLat, GradLat, DivLon, DivLat, Lapla, LaplaInv, Jacobian)は, その関数の作用を表している.
  • 関数名の最後 (_wa_wa, _wa, _xya, _xa, _ya, _w_w, _w, _xy, _x, _y) は, 入力変数の形スペクトルデータおよび格子点データであることを示している.
    _wa :スペクトルデータの並んだ 2 次元配列
    _wa_wa :2 つのスペクトルデータの並んだ 2 次元配列
    _xya :2 次元格子点データの並んだ 3 次元配列
    _xa :経度方向 1 次元格子点データの並んだ 2 次元配列
    _ya :緯度方向 1 次元格子点データの並んだ 2 次元配列

各データの種類の説明

  • xya : 2 次元格子点データの並んだ 3 次元配列.
    • 変数の種類と次元は real(8), dimension(0:im-1,1:jm,:).
    • im, jm はそれぞれ経度, 緯度座標の格子点数であり, サブルーチン wa_Initial にてあらかじめ設定しておく.
    • 扱う第 3 次元の大きさの最大値を wa_Initial で設定しておく.
  • wa : スペクトルデータの並んだ 2 次元配列.
    • 変数の種類と次元は real(8), dimension(nm+1,:).
    • nm は球面調和函数の最大全波数であり, サブルーチン wa_Initial にて あらかじめ設定しておく.
    • スペクトルデータの格納のされ方は関数 l_nm, nm_l によって 調べることができる.
    • 扱う第 3 次元の大きさの 最大値を wa_Initial で設定しておく.
  • xa, ya : 経度, 緯度方向 1 次元格子点データ.
    • 変数の種類と次元はそれぞれ real(8), dimension(0:im-1,:) および real(8), dimension(1:jm,:).
  • nma : スペクトルデータの並んだ 3 次元配列.
    • 変数の種類と次元は real(8), dimension(0:nm,-nm:nm,:).
    • 第 1 次元が水平全波数, 第 2 次元が帯状波数を表す.
    • nm は球面調和函数の最大全波数であり, サブルーチン wa_Initial にてあらかじめ設定しておく.
  • na : スペクトルデータの並んだ 2 次元配列.
    • 変数の種類と次元は real(8), dimension(0:nm,:).
    • 第 1 次元が水平全波数を表す.nm は球面調和函数の最大全波数であり, サブルーチン wa_Initial にてあらかじめ設定しておく.
  • wa_ で始まる関数が返す値はスペクトルデータの並んだ 2 次元配列に同じ.
  • nma_ で始まる関数が返す値はスペクトルデータの並んだ 3 次元配列に同じ.
  • na_ で始まる関数が返す値はスペクトルデータの並んだ 2 次元配列に同じ.
  • xya_ で始まる関数が返す値は 2 次元格子点データの並んだ 3 次元配列に 同じ.
  • xa_, ya_ で始まる関数が返す値は 1 次元格子点データの並んだ 2 次元 配列に同じ.
  • スペクトルデータに対する微分等の作用とは, 対応する格子点データに 微分などを作用させたデータをスペクトル変換したものことである.

変数・手続き群の要約

初期化

wa_Initial :スペクトル変換の格子点数, 波数, 領域の大きさ,
           :: および同時に計算するデータの個数の最大値設定

終了処理

wa_Finalize :モジュールの終了処理(割り付け配列の解放)をおこなう.

座標変数

x_Lon, y_Lat :格子点座標(緯度, 経度座標)を格納した 1 次元配列
x_Lon_Weight, y_Lat_Weight :重み座標を格納した 1 次元配列
xy_Lon, xy_Lat :格子点データの経度・緯度座標(X,Y) (格子点データ型 2 次元配列)

基本変換

xya_wa, xy_w :スペクトルデータから格子データへの変換(多層, 1 層用)
wa_xya, w_xy :格子データからスペクトルデータへの変換(多層, 1 層用)
l_nm, nm_l :スペクトルデータの格納位置と全波数・帯状波数の変換

微分

wa_Lapla_wa, w_Lapla_w :スペクトルデータにラプラシアンを 作用させる(多層, 1 層用)
rn :スペクトルデータのラプラシアンを 計算するための係数
irm :経度微分演算用配列
wa_LaplaInv_wa, w_LaplaInv_w :スペクトルデータにラプラシアンの逆変換を 作用させる(多層, 1 層用)
wa_DLon_wa, w_DLon_w :スペクトルデータに 経度微分∂/∂λを作用させる(多層, 1 層用)
xya_GradLon_wa, xy_GradLon_w :スペクトルデータに 勾配型経度微分 1/cosφ・∂/∂λ を 作用させる(多層, 1 層用)
xya_GradLat_wa, xy_GradLat_w :スペクトルデータに 勾配型緯度微分 ∂/∂φ を作用させる (多層, 1 層用)
wa_DivLon_xya, w_DivLon_xy :格子データに 発散型経度微分 1/cosφ・∂/∂λを 作用させる(多層, 1 層用)
wa_DivLat_xya, w_DivLat_xy :格子データに 発散型緯度微分 1/cosφ・∂(g cosφ)/∂φを 作用させる (多層, 1 層用)
wa_Div_xya_xya, w_Div_xy_xy :ベクトル成分である 2 つの格子データに 発散を作用させる(多層, 1 層用)
wa_Jacobian_wa_wa,w_Jacobian_w_w :2 つのスペクトルデータからヤコビアンを 計算する(多層, 1 層用)
w_StreamPotential2Vector :流線ポテンシャルから速度場計算
w_Vector2VorDiv :速度場から渦度発散を計算
w_VectorCosLat2VorDiv :速度場から渦度発散を計算
wa_StreamPotential2Vector :流線ポテンシャルから速度場計算
wa_Vector2VorDiv :速度場から渦度発散を計算
wa_VectorCosLat2VorDiv :速度場から渦度発散を計算

微分(λ,μ=sinφ 座標)

xya_GradLambda_wa,xy_GradLambda_w :スペクトルデータに 勾配型経度微分∂/∂λを 作用させる(多層, 1 層用)
xya_GradMu_wa,xy_GradMu_w :スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μを作用させる (多層, 1 層用)
wa_DivLambda_xya,w_DivLambda_xy :格子データに発散型経度微分 1 /(1-μ^2)・∂/∂λを作用させる (多層, 1 層用)
wa_DivMu_xya,w_DivMu_xy :格子データに発散型緯度微分 ∂/∂μを作用させる(多層, 1 層用)

補間計算

a_Interpolate_wa, Interpolate_w :スペクトルデータから任意の点の 関数値を計算する.

積分・平均

a_IntLonLat_xya, a_AvrLonLat_xya :2 次元格子点データの 全領域積分および平均(多層用)
IntLonLat_xy, AvrLonLat_xy :2 次元格子点データの 全領域積分および平均(1 層用)
ya_IntLon_xya, ya_AvrLon_xya :2 次元格子点データの 経度方向積分および平均(多層用)
y_IntLon_xy, y_AvrLon_xy :2 次元格子点データの 経度方向積分および平均(1 層用)
a_IntLon_xa, a_AvrLon_xa :1 次元(X)格子点データの 経度方向積分および平均(多層用)
IntLon_x, AvrLon_x :1 次元(X)格子点データの 経度方向積分および平均(1 層用)
xa_IntLat_xya, x_AvrLat_xy :2 次元格子点データの 緯度方向積分および平均(多層用)
x_IntLat_xy, x_AvrLat_xy :2 次元格子点データの 緯度方向積分および平均(1 層用)
a_IntLat_ya, a_AvrLat_ya :1 次元(Y)格子点データの 緯度方向積分および平均(多層用)
IntLat_y, AvrLat_y :1 次元(Y)格子点データの 緯度方向積分および平均(1 層用)

スペクトル解析

nma_EnergyFromStreamfunc_wa,nm_EnergyFromStreamfunc_w :: 流線関数からエネルギースペクトルを計算する (水平全波数 n, 帯状波数 m 空間)(多層, 1 層用)

na_EnergyFromStreamfunc_wa,n_EnergyFromStreamfunc_w :: 流線関数からエネルギースペクトルを計算する (水平全波数 n 空間) (多層, 1 層用)

nma_EnstrophyFromStreamfunc_wa,nm_EnstrophyFromStreamfunc_w :: 流線関数からエンストロフィースペクトルを計算する (水平全波数 n, 帯状波数 m 空間)(多層, 1 層用)

na_EnstrophyFromStreamfunc_wa,n_EnstrophyFromStreamfunc_w :: 流線関数からエンストロフィースペクトルを計算する(水平全波数 n 空間) (多層, 1 層用)

w_spectrum_VMiss :欠損値

Methods

AvrLat_y   AvrLat_y   AvrLat_y   AvrLat_y   AvrLat_y   AvrLat_y   AvrLonLat_xy   AvrLonLat_xy   AvrLonLat_xy   AvrLon_x   AvrLon_x   AvrLon_x   IntLat_y   IntLat_y   IntLat_y   IntLat_y   IntLat_y   IntLat_y   IntLonLat_xy   IntLonLat_xy   IntLonLat_xy   IntLon_x   IntLon_x   IntLon_x   Interpolate_w   Interpolate_w   Interpolate_w   a_AvrLat_ya   a_AvrLat_ya   a_AvrLat_ya   a_AvrLonLat_xya   a_AvrLonLat_xya   a_AvrLon_xa   a_AvrLon_xa   a_IntLat_ya   a_IntLat_ya   a_IntLat_ya   a_IntLonLat_xya   a_IntLonLat_xya   a_IntLon_xa   a_IntLon_xa   a_Interpolate_wa   a_Interpolate_wa   irm   irm   irm   l_nm   l_nm   l_nm   l_nm   l_nm   l_nm   l_nm   l_nm   l_nm   l_nm   l_nm   l_nm   n_EnergyFromStreamfunc_w   n_EnergyFromStreamfunc_w   n_EnergyFromStreamfunc_w   n_EnstrophyFromStreamfunc_w   n_EnstrophyFromStreamfunc_w   n_EnstrophyFromStreamfunc_w   na_EnergyFromStreamfunc_wa   na_EnergyFromStreamfunc_wa   na_EnstrophyFromStreamfunc_wa   na_EnstrophyFromStreamfunc_wa   nm_EnergyFromStreamfunc_w   nm_EnergyFromStreamfunc_w   nm_EnergyFromStreamfunc_w   nm_EnstrophyFromStreamfunc_w   nm_EnstrophyFromStreamfunc_w   nm_EnstrophyFromStreamfunc_w   nm_l   nm_l   nm_l   nm_l   nm_l   nm_l   nma_EnergyFromStreamfunc_wa   nma_EnergyFromStreamfunc_wa   nma_EnstrophyFromStreamfunc_wa   nma_EnstrophyFromStreamfunc_wa   rn   rn   rn   w_DLon_w   w_DLon_w   w_DLon_w   w_DivLambda_xy   w_DivLambda_xy   w_DivLambda_xy   w_DivLat_xy   w_DivLat_xy   w_DivLat_xy   w_DivLon_xy   w_DivLon_xy   w_DivLon_xy   w_DivMu_xy   w_DivMu_xy   w_DivMu_xy   w_Div_xy_xy   w_Div_xy_xy   w_Div_xy_xy   w_Jacobian_w_w   w_Jacobian_w_w   w_Jacobian_w_w   w_LaplaInv_w   w_LaplaInv_w   w_LaplaInv_w   w_Lapla_w   w_Lapla_w   w_Lapla_w   w_StreamPotential2Vector   w_StreamPotential2Vector   w_StreamPotential2Vector   w_Vector2VorDiv   w_Vector2VorDiv   w_Vector2VorDiv   w_VectorCosLat2VorDiv   w_VectorCosLat2VorDiv   w_VectorCosLat2VorDiv   w_spectrum_VMiss   w_spectrum_VMiss   w_spectrum_VMiss   w_xy   w_xy   w_xy   wa_DLon_wa   wa_DLon_wa   wa_DivLambda_xya   wa_DivLambda_xya   wa_DivLat_xya   wa_DivLat_xya   wa_DivLon_xya   wa_DivLon_xya   wa_DivMu_xya   wa_DivMu_xya   wa_Div_xya_xya   wa_Div_xya_xya   wa_Finalize   wa_Finalize   wa_Finalize   wa_Initial   wa_Initial   wa_Jacobian_wa_wa   wa_Jacobian_wa_wa   wa_LaplaInv_wa   wa_LaplaInv_wa   wa_LaplaInv_wa   wa_Lapla_wa   wa_Lapla_wa   wa_Lapla_wa   wa_StreamPotential2Vector   wa_StreamPotential2Vector   wa_Vector2VorDiv   wa_Vector2VorDiv   wa_VectorCosLat2VorDiv   wa_VectorCosLat2VorDiv   wa_spectrum_VMiss   wa_spectrum_VMiss   wa_xya   wa_xya   x_AvrLat_xy   x_AvrLat_xy   x_AvrLat_xy   x_IntLat_xy   x_IntLat_xy   x_IntLat_xy   x_Lon   x_Lon   x_Lon   x_Lon_Weight   x_Lon_Weight   x_Lon_Weight   xa_AvrLat_xya   xa_AvrLat_xya   xa_IntLat_xya   xa_IntLat_xya   xy_GradLambda_w   xy_GradLambda_w   xy_GradLambda_w   xy_GradLat_w   xy_GradLat_w   xy_GradLat_w   xy_GradLon_w   xy_GradLon_w   xy_GradLon_w   xy_GradMu_w   xy_GradMu_w   xy_GradMu_w   xy_Lat   xy_Lat   xy_Lat   xy_Lon   xy_Lon   xy_Lon   xy_w   xy_w   xy_w   xya_GradLambda_wa   xya_GradLambda_wa   xya_GradLat_wa   xya_GradLat_wa   xya_GradLon_wa   xya_GradLon_wa   xya_GradMu_wa   xya_GradMu_wa   xya_wa   xya_wa   y_AvrLon_xy   y_AvrLon_xy   y_AvrLon_xy   y_IntLon_xy   y_IntLon_xy   y_IntLon_xy   y_Lat   y_Lat   y_Lat   y_Lat   y_Lat   y_Lat   y_Lat_Weight   y_Lat_Weight   y_Lat_Weight   y_Lat_Weight   y_Lat_Weight   y_Lat_Weight   ya_AvrLon_xya   ya_AvrLon_xya   ya_IntLon_xya   ya_IntLon_xya  

Included Modules

dc_message w_zonal_module la_module

Public Instance methods

AvrLat_y( y_data ) result(AvrLat_y)
Function :
AvrLat_y :real(8)
: (out) 平均値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度格子点データ

1 次元(Y)格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is la_module#AvrLat_y

AvrLat_y( y_data ) result(AvrLat_y)
Function :
AvrLat_y :real(8)
: (out) 平均値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度格子点データ

1 次元(Y)格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is la_module#AvrLat_y

AvrLat_y( y_data ) result(AvrLat_y)
Function :
AvrLat_y :real(8)
: (out) 平均値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度格子点データ

1 次元(Y)格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is la_module#AvrLat_y

AvrLat_y( y_data ) result(AvrLat_y)
Function :
AvrLat_y :real(8)
: (out) 平均値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度格子点データ

1 次元(Y)格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLat_y

AvrLat_y( y_data ) result(AvrLat_y)
Function :
AvrLat_y :real(8)
: (out) 平均値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度格子点データ

1 次元(Y)格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLat_y

AvrLat_y( y_data ) result(AvrLat_y)
Function :
AvrLat_y :real(8)
: (out) 平均値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度格子点データ

1 次元(Y)格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLat_y

AvrLonLat_xy( xy_data ) result(AvrLonLat_xy)
Function :
AvrLonLat_xy :real(8)
: (out) 平均値
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ

2 次元緯度経度格子点データの全領域平均(1 層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLonLat_xy

AvrLonLat_xy( xy_data ) result(AvrLonLat_xy)
Function :
AvrLonLat_xy :real(8)
: (out) 平均値
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ

2 次元緯度経度格子点データの全領域平均(1 層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLonLat_xy

AvrLonLat_xy( xy_data ) result(AvrLonLat_xy)
Function :
AvrLonLat_xy :real(8)
: (out) 平均値
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ

2 次元緯度経度格子点データの全領域平均(1 層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLonLat_xy

AvrLon_x( x_data ) result(AvrLon_x)
Function :
AvrLon_x :real(8)
: (out) 平均値
x_data(0:im-1) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データ

1 次元(X)格子点データの経度(X)方向平均(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLon_x

AvrLon_x( x_data ) result(AvrLon_x)
Function :
AvrLon_x :real(8)
: (out) 平均値
x_data(0:im-1) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データ

1 次元(X)格子点データの経度(X)方向平均(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLon_x

AvrLon_x( x_data ) result(AvrLon_x)
Function :
AvrLon_x :real(8)
: (out) 平均値
x_data(0:im-1) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データ

1 次元(X)格子点データの経度(X)方向平均(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#AvrLon_x

IntLat_y( y_data ) result(IntLat_y)
Function :
IntLat_y :real(8)
: (out) 積分値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度(Y)格子点データ

1 次元緯度(Y)格子点データの Y 方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is la_module#IntLat_y

IntLat_y( y_data ) result(IntLat_y)
Function :
IntLat_y :real(8)
: (out) 積分値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度(Y)格子点データ

1 次元緯度(Y)格子点データの Y 方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is la_module#IntLat_y

IntLat_y( y_data ) result(IntLat_y)
Function :
IntLat_y :real(8)
: (out) 積分値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度(Y)格子点データ

1 次元緯度(Y)格子点データの Y 方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is la_module#IntLat_y

IntLat_y( y_data ) result(IntLat_y)
Function :
IntLat_y :real(8)
: (out) 積分値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度(Y)格子点データ

1 次元緯度(Y)格子点データの Y 方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#IntLat_y

IntLat_y( y_data ) result(IntLat_y)
Function :
IntLat_y :real(8)
: (out) 積分値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度(Y)格子点データ

1 次元緯度(Y)格子点データの Y 方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#IntLat_y

IntLat_y( y_data ) result(IntLat_y)
Function :
IntLat_y :real(8)
: (out) 積分値
y_data(1:jm) :real(8), intent(in)
: (in) 1 次元緯度(Y)格子点データ

1 次元緯度(Y)格子点データの Y 方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#IntLat_y

IntLonLat_xy( xy_data ) result(IntLonLat_xy)
Function :
IntLonLat_xy :real(8)
: (out) 積分値
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの全領域積分(1 層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.

Original external subprogram is w_zonal_module#IntLonLat_xy

IntLonLat_xy( xy_data ) result(IntLonLat_xy)
Function :
IntLonLat_xy :real(8)
: (out) 積分値
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの全領域積分(1 層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.

Original external subprogram is w_zonal_module#IntLonLat_xy

IntLonLat_xy( xy_data ) result(IntLonLat_xy)
Function :
IntLonLat_xy :real(8)
: (out) 積分値
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの全領域積分(1 層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.

Original external subprogram is w_zonal_module#IntLonLat_xy

IntLon_x( x_data ) result(IntLon_x)
Function :
IntLon_x :real(8)
: (out) 積分値
x_data(0:im-1) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データ

1 次元経度(X)格子点データの X 方向積分(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#IntLon_x

IntLon_x( x_data ) result(IntLon_x)
Function :
IntLon_x :real(8)
: (out) 積分値
x_data(0:im-1) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データ

1 次元経度(X)格子点データの X 方向積分(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#IntLon_x

IntLon_x( x_data ) result(IntLon_x)
Function :
IntLon_x :real(8)
: (out) 積分値
x_data(0:im-1) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データ

1 次元経度(X)格子点データの X 方向積分(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#IntLon_x

Interpolate_w( w_data, alon, alat ) result(Interpolate_w)
Function :
Interpolate_w :real(8)
: 補間した値
w_data(nm+1) :real(8), intent(IN)
: スペクトルデータ
alon :real(8), intent(IN)
: 補間する位置(経度)
alat :real(8), intent(IN)
: 補間する位置(緯度)

Original external subprogram is w_zonal_module#Interpolate_w

Interpolate_w( w_data, alon, alat ) result(Interpolate_w)
Function :
Interpolate_w :real(8)
: 補間した値
w_data(nm+1) :real(8), intent(IN)
: スペクトルデータ
alon :real(8), intent(IN)
: 補間する位置(経度)
alat :real(8), intent(IN)
: 補間する位置(緯度)

Original external subprogram is w_zonal_module#Interpolate_w

Interpolate_w( w_data, alon, alat ) result(Interpolate_w)
Function :
Interpolate_w :real(8)
: 補間した値
w_data(nm+1) :real(8), intent(IN)
: スペクトルデータ
alon :real(8), intent(IN)
: 補間する位置(経度)
alat :real(8), intent(IN)
: 補間する位置(緯度)

Original external subprogram is w_zonal_module#Interpolate_w

a_AvrLat_ya( ya_data ) result(a_AvrLat_ya)
Function :
a_AvrLat_ya(size(ya_data,2)) :real(8)
: (out) 平均値
ya_data(:,:) :real(8), intent(in)
: (in) 緯度鉛直格子点データ(1:jm,:)

2 次元緯度鉛直格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is la_module#a_AvrLat_ya

a_AvrLat_ya( ya_data ) result(a_AvrLat_ya)
Function :
a_AvrLat_ya(size(ya_data,2)) :real(8)
: (out) 平均値
ya_data(:,:) :real(8), intent(in)
: (in) 緯度鉛直格子点データ(1:jm,:)

2 次元緯度鉛直格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is la_module#a_AvrLat_ya

a_AvrLat_ya( ya_data ) result(a_AvrLat_ya)
Function :
a_AvrLat_ya(size(ya_data,2)) :real(8)
: (out) 平均値
ya_data(:,:) :real(8), intent(in)
: (in) 緯度鉛直格子点データ(1:jm,:)

2 次元緯度鉛直格子点データの緯度(Y)方向平均.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is la_module#a_AvrLat_ya

Function :
a_AvrLonLat_xya(size(xya_data,3)) :real(8)
: (out) 平均値の並び(*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの全領域平均(多層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.

[Source]

    function a_AvrLonLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの全領域平均(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた
      ! 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in)   :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8) :: a_AvrLonLat_xya(size(xya_data,3))
      !(out) 平均値の並び(*)

      a_AvrLonLat_xya = a_AvrLon_xa(xa_AvrLat_xya(xya_data))

    end function a_AvrLonLat_xya
Function :
a_AvrLonLat_xya(size(xya_data,3)) :real(8)
: (out) 平均値の並び(*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの全領域平均(多層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.

[Source]

    function a_AvrLonLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの全領域平均(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた
      ! 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in)   :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8) :: a_AvrLonLat_xya(size(xya_data,3))
      !(out) 平均値の並び(*)

      a_AvrLonLat_xya = a_AvrLon_xa(xa_AvrLat_xya(xya_data))

    end function a_AvrLonLat_xya
Function :
a_AvrLon_xa(size(xa_data,2)) :real(8)
: (out) 平均値の並び(*)
xa_data(0:,:) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データの並び(0:im-1,*)

経度平均

1 次元(X)格子点データの経度(X)方向平均(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

[Source]

    function a_AvrLon_xa(xa_data)          ! 経度平均
      !
      ! 1 次元(X)格子点データの経度(X)方向平均(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, 
      ! x_X_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in) :: xa_data(0:,:)
      !(in)  1 次元経度(X)格子点データの並び(0:im-1,*)

      real(8)             :: a_AvrLon_xa(size(xa_data,2))
      !(out) 平均値の並び(*)

      a_AvrLon_xa = a_IntLon_xa(xa_data)/sum(x_Lon_Weight)

    end function a_AvrLon_xa
Function :
a_AvrLon_xa(size(xa_data,2)) :real(8)
: (out) 平均値の並び(*)
xa_data(0:,:) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データの並び(0:im-1,*)

経度平均

1 次元(X)格子点データの経度(X)方向平均(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

[Source]

    function a_AvrLon_xa(xa_data)          ! 経度平均
      !
      ! 1 次元(X)格子点データの経度(X)方向平均(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, 
      ! x_X_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in) :: xa_data(0:,:)
      !(in)  1 次元経度(X)格子点データの並び(0:im-1,*)

      real(8)             :: a_AvrLon_xa(size(xa_data,2))
      !(out) 平均値の並び(*)

      a_AvrLon_xa = a_IntLon_xa(xa_data)/sum(x_Lon_Weight)

    end function a_AvrLon_xa
a_IntLat_ya( ya_data ) result(a_IntLat_ya)
Function :
a_IntLat_ya(size(ya_data,2)) :real(8)
: (out) 積分値
ya_data(:,:) :real(8), intent(in)
: (in) 緯度鉛直格子点データ(1:jm,:)

2 次元緯度鉛直格子点データの緯度方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is la_module#a_IntLat_ya

a_IntLat_ya( ya_data ) result(a_IntLat_ya)
Function :
a_IntLat_ya(size(ya_data,2)) :real(8)
: (out) 積分値
ya_data(:,:) :real(8), intent(in)
: (in) 緯度鉛直格子点データ(1:jm,:)

2 次元緯度鉛直格子点データの緯度方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is la_module#a_IntLat_ya

a_IntLat_ya( ya_data ) result(a_IntLat_ya)
Function :
a_IntLat_ya(size(ya_data,2)) :real(8)
: (out) 積分値
ya_data(:,:) :real(8), intent(in)
: (in) 緯度鉛直格子点データ(1:jm,:)

2 次元緯度鉛直格子点データの緯度方向積分.

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is la_module#a_IntLat_ya

Function :
a_IntLonLat_xya(size(xya_data,3)) :real(8)
: (out) 積分されたデータの並び(*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの全領域積分(多層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.

[Source]

    function a_IntLonLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの全領域積分(多層用). 
      !
      ! 実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた
      ! 総和を計算している. 
      !
      real(8), intent(in)   :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
      real(8) :: a_IntLonLat_xya(size(xya_data,3))
      !(out) 積分されたデータの並び(*)

      a_IntLonLat_xya = a_IntLon_xa(xa_IntLat_xya(xya_data))

    end function a_IntLonLat_xya
Function :
a_IntLonLat_xya(size(xya_data,3)) :real(8)
: (out) 積分されたデータの並び(*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの全領域積分(多層用).

実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.

[Source]

    function a_IntLonLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの全領域積分(多層用). 
      !
      ! 実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた
      ! 総和を計算している. 
      !
      real(8), intent(in)   :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
      real(8) :: a_IntLonLat_xya(size(xya_data,3))
      !(out) 積分されたデータの並び(*)

      a_IntLonLat_xya = a_IntLon_xa(xa_IntLat_xya(xya_data))

    end function a_IntLonLat_xya
Function :
a_IntLon_xa(size(xa_data,2)) :real(8)
: (out) 積分値の並び(*)
xa_data(0:,:) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データの並び(0:im-1,*)

経度積分

1 次元経度(X)格子点データの X 方向積分(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

[Source]

    function a_IntLon_xa(xa_data)          ! 経度積分
      !
      ! 1 次元経度(X)格子点データの X 方向積分(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している. 
      !
      real(8), intent(in) :: xa_data(0:,:)
      !(in)  1 次元経度(X)格子点データの並び(0:im-1,*)
      real(8)             :: a_IntLon_xa(size(xa_data,2))
      !(out) 積分値の並び(*)
      integer :: i

      a_IntLon_xa = 0.0D0
      do i=0,im-1
         a_IntLon_xa = a_IntLon_xa + xa_data(i,:) * x_Lon_Weight(i)
      enddo

    end function a_IntLon_xa
Function :
a_IntLon_xa(size(xa_data,2)) :real(8)
: (out) 積分値の並び(*)
xa_data(0:,:) :real(8), intent(in)
: (in) 1 次元経度(X)格子点データの並び(0:im-1,*)

経度積分

1 次元経度(X)格子点データの X 方向積分(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

[Source]

    function a_IntLon_xa(xa_data)          ! 経度積分
      !
      ! 1 次元経度(X)格子点データの X 方向積分(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している. 
      !
      real(8), intent(in) :: xa_data(0:,:)
      !(in)  1 次元経度(X)格子点データの並び(0:im-1,*)
      real(8)             :: a_IntLon_xa(size(xa_data,2))
      !(out) 積分値の並び(*)
      integer :: i

      a_IntLon_xa = 0.0D0
      do i=0,im-1
         a_IntLon_xa = a_IntLon_xa + xa_data(i,:) * x_Lon_Weight(i)
      enddo

    end function a_IntLon_xa
Function :
a_Interpolate_wa(size(wa_data,2)) :real(8)
: 補間した値
wa_data(:,:) :real(8), intent(IN)
: スペクトルデータ
alon :real(8), intent(IN)
: 補間する位置(経度)
alat :real(8), intent(IN)
: 補間する位置(緯度)

緯度 alon, 経度 alat における関数値を その球面調和変換係数 wa_data から補間計算する

[Source]

    function a_Interpolate_wa(wa_data,alon,alat)
      !
      ! 緯度 alon, 経度 alat における関数値を
      ! その球面調和変換係数 wa_data から補間計算する
      !
      real(8), intent(IN) :: wa_data(:,:)             ! スペクトルデータ
      real(8), intent(IN) :: alon                     ! 補間する位置(経度)
      real(8), intent(IN) :: alat                     ! 補間する位置(緯度)
      real(8) :: a_Interpolate_wa(size(wa_data,2))    ! 補間した値

      integer :: k

      do k=1,size(wa_data,2)
         a_Interpolate_wa(k) = Interpolate_w(wa_data(:,k),alon,alat)
      enddo

    end function a_Interpolate_wa
Function :
a_Interpolate_wa(size(wa_data,2)) :real(8)
: 補間した値
wa_data(:,:) :real(8), intent(IN)
: スペクトルデータ
alon :real(8), intent(IN)
: 補間する位置(経度)
alat :real(8), intent(IN)
: 補間する位置(緯度)

緯度 alon, 経度 alat における関数値を その球面調和変換係数 wa_data から補間計算する

[Source]

    function a_Interpolate_wa(wa_data,alon,alat)
      !
      ! 緯度 alon, 経度 alat における関数値を
      ! その球面調和変換係数 wa_data から補間計算する
      !
      real(8), intent(IN) :: wa_data(:,:)             ! スペクトルデータ
      real(8), intent(IN) :: alon                     ! 補間する位置(経度)
      real(8), intent(IN) :: alat                     ! 補間する位置(緯度)
      real(8) :: a_Interpolate_wa(size(wa_data,2))    ! 補間した値

      integer :: k

      do k=1,size(wa_data,2)
         a_Interpolate_wa(k) = Interpolate_w(wa_data(:,k),alon,alat)
      enddo

    end function a_Interpolate_wa
irm
Variable :
irm(:,:) :integer, allocatable

Original external subprogram is w_zonal_module#irm

irm
Variable :
irm(:,:) :integer, allocatable

Original external subprogram is w_zonal_module#irm

irm
Variable :
irm(:,:) :integer, allocatable

Original external subprogram is w_zonal_module#irm

l_nm( n, m ) result(l_nm_array00)
Function :
l_nm_array00 :integer
: (out) スペクトルデータの格納位置
n :integer, intent(in)
: (in) 全波数
m :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m,ダミー)からそのスペクトルデータの格納位置を返す.

引数 n,m がともに整数値の場合, 整数値を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( n, m ) result(l_nm_array00)
Function :
l_nm_array00 :integer
: (out) スペクトルデータの格納位置
n :integer, intent(in)
: (in) 全波数
m :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m,ダミー)からそのスペクトルデータの格納位置を返す.

引数 n,m がともに整数値の場合, 整数値を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( n, m ) result(l_nm_array00)
Function :
l_nm_array00 :integer
: (out) スペクトルデータの格納位置
n :integer, intent(in)
: (in) 全波数
m :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m,ダミー)からそのスペクトルデータの格納位置を返す.

引数 n,m がともに整数値の場合, 整数値を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( n, marray ) result(l_nm_array01)
Function :
l_nm_array01(size(marray)) :integer
: (out) スペクトルデータ位置
n :integer, intent(in)
: (in) 全波数
marray(:) :integer, intent(in)
: (in) 帯状波数

スペクトルデータの格納位置

全波数(n)と東西波数(m, ダミー)からそのスペクトルデータの格納位置を返す.

第 1 引数 n が整数, 第 2 引数 marray が整数 1 次元配列の場合, marray と同じ大きさの 1 次元整数配列を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( n, marray ) result(l_nm_array01)
Function :
l_nm_array01(size(marray)) :integer
: (out) スペクトルデータ位置
n :integer, intent(in)
: (in) 全波数
marray(:) :integer, intent(in)
: (in) 帯状波数

スペクトルデータの格納位置

全波数(n)と東西波数(m, ダミー)からそのスペクトルデータの格納位置を返す.

第 1 引数 n が整数, 第 2 引数 marray が整数 1 次元配列の場合, marray と同じ大きさの 1 次元整数配列を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( n, marray ) result(l_nm_array01)
Function :
l_nm_array01(size(marray)) :integer
: (out) スペクトルデータ位置
n :integer, intent(in)
: (in) 全波数
marray(:) :integer, intent(in)
: (in) 帯状波数

スペクトルデータの格納位置

全波数(n)と東西波数(m, ダミー)からそのスペクトルデータの格納位置を返す.

第 1 引数 n が整数, 第 2 引数 marray が整数 1 次元配列の場合, marray と同じ大きさの 1 次元整数配列を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( narray, m ) result(l_nm_array10)
Function :
l_nm_array10(size(narray)) :integer
: (out) スペクトルデータ位置
narray(:) :integer, intent(in)
: (in) 全波数
m :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m,ダミー)からそのスペクトルデータの格納位置を返す.

第 1 引数 narray が整数 1 次元配列, 第 2 引数 m が整数の場合, narray と同じ大きさの 1 次元整数配列を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( narray, m ) result(l_nm_array10)
Function :
l_nm_array10(size(narray)) :integer
: (out) スペクトルデータ位置
narray(:) :integer, intent(in)
: (in) 全波数
m :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m,ダミー)からそのスペクトルデータの格納位置を返す.

第 1 引数 narray が整数 1 次元配列, 第 2 引数 m が整数の場合, narray と同じ大きさの 1 次元整数配列を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( narray, m ) result(l_nm_array10)
Function :
l_nm_array10(size(narray)) :integer
: (out) スペクトルデータ位置
narray(:) :integer, intent(in)
: (in) 全波数
m :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m,ダミー)からそのスペクトルデータの格納位置を返す.

第 1 引数 narray が整数 1 次元配列, 第 2 引数 m が整数の場合, narray と同じ大きさの 1 次元整数配列を返す.

Original external subprogram is w_zonal_module#l_nm

l_nm( narray, marray ) result(l_nm_array11)
Function :
l_nm_array11(size(narray)) :integer
: (out) スペクトルデータ位置
narray(:) :integer, intent(in)
: (in) 全波数
marray(:) :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.

第 1,2 引数 narray, marray がともに整数 1 次元配列の場合, narray, marray と同じ大きさの 1 次元整数配列を返す. narray, marray は同じ大きさでなければならない.

Original external subprogram is w_zonal_module#l_nm

l_nm( narray, marray ) result(l_nm_array11)
Function :
l_nm_array11(size(narray)) :integer
: (out) スペクトルデータ位置
narray(:) :integer, intent(in)
: (in) 全波数
marray(:) :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.

第 1,2 引数 narray, marray がともに整数 1 次元配列の場合, narray, marray と同じ大きさの 1 次元整数配列を返す. narray, marray は同じ大きさでなければならない.

Original external subprogram is w_zonal_module#l_nm

l_nm( narray, marray ) result(l_nm_array11)
Function :
l_nm_array11(size(narray)) :integer
: (out) スペクトルデータ位置
narray(:) :integer, intent(in)
: (in) 全波数
marray(:) :integer, intent(in)
: (in) 帯状波数

全波数(n)と東西波数(m)からそのスペクトルデータの格納位置を返す.

第 1,2 引数 narray, marray がともに整数 1 次元配列の場合, narray, marray と同じ大きさの 1 次元整数配列を返す. narray, marray は同じ大きさでなければならない.

Original external subprogram is w_zonal_module#l_nm

n_EnergyFromStreamfunc_w( w_Strfunc ) result(n_EnergyFromStreamfunc_w)
Function :
n_EnergyFromStreamfunc_w :real(8), dimension(0:nm)
: (out) エネルギースペクトル (水平全波数 n 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用).

 * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
   と計算される.

 * 全てのエネルギースペクトル成分の和に 4πをかけたものが
   球面上での全エネルギーに等しい.

Original external subprogram is w_zonal_module#n_EnergyFromStreamfunc_w

n_EnergyFromStreamfunc_w( w_Strfunc ) result(n_EnergyFromStreamfunc_w)
Function :
n_EnergyFromStreamfunc_w :real(8), dimension(0:nm)
: (out) エネルギースペクトル (水平全波数 n 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用).

 * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
   と計算される.

 * 全てのエネルギースペクトル成分の和に 4πをかけたものが
   球面上での全エネルギーに等しい.

Original external subprogram is w_zonal_module#n_EnergyFromStreamfunc_w

n_EnergyFromStreamfunc_w( w_Strfunc ) result(n_EnergyFromStreamfunc_w)
Function :
n_EnergyFromStreamfunc_w :real(8), dimension(0:nm)
: (out) エネルギースペクトル (水平全波数 n 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用).

 * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
   と計算される.

 * 全てのエネルギースペクトル成分の和に 4πをかけたものが
   球面上での全エネルギーに等しい.

Original external subprogram is w_zonal_module#n_EnergyFromStreamfunc_w

n_EnstrophyFromStreamfunc_w( w_Strfunc ) result(n_EnstrophyFromStreamfunc_w)
Function :
n_EnstrophyFromStreamfunc_w :real(8), dimension(0:nm)
: (out) エンストロフィースペクトル(水平全波数 n 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用)

  • 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
  • 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが 球面上での全エンストフィーに等しい.

Original external subprogram is w_zonal_module#n_EnstrophyFromStreamfunc_w

n_EnstrophyFromStreamfunc_w( w_Strfunc ) result(n_EnstrophyFromStreamfunc_w)
Function :
n_EnstrophyFromStreamfunc_w :real(8), dimension(0:nm)
: (out) エンストロフィースペクトル(水平全波数 n 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用)

  • 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
  • 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが 球面上での全エンストフィーに等しい.

Original external subprogram is w_zonal_module#n_EnstrophyFromStreamfunc_w

n_EnstrophyFromStreamfunc_w( w_Strfunc ) result(n_EnstrophyFromStreamfunc_w)
Function :
n_EnstrophyFromStreamfunc_w :real(8), dimension(0:nm)
: (out) エンストロフィースペクトル(水平全波数 n 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(1 層用)

  • 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
  • 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが 球面上での全エンストフィーに等しい.

Original external subprogram is w_zonal_module#n_EnstrophyFromStreamfunc_w

Function :
na_EnergyFromStreamfunc_wa :real(8), dimension(0:nm,size(wa_Strfunc,2))
: (out) エネルギースペクトル (水平全波数 n 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用).

 * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
   と計算される.

 * 全てのエネルギースペクトル成分の和に 4πをかけたものが
   球面上での全エネルギーに等しい.

[Source]

    function na_EnergyFromStreamfunc_wa(wa_Strfunc)
      !
      ! 流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
      ! 計算する(多層用).
      !
      !  * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
      !    エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2 
      !    と計算される.
      !
      !  * 全てのエネルギースペクトル成分の和に 4πをかけたものが
      !    球面上での全エネルギーに等しい.
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,size(wa_Strfunc,2)) :: na_EnergyFromStreamfunc_wa
      !(out) エネルギースペクトル (水平全波数 n 空間) 

      integer :: n

      do n=0,nm
         na_EnergyFromStreamfunc_wa(n,:) = 0.5 * n*(n+1) * wa_StrFunc(l_nm(n,0),:)**2
      enddo

    end function na_EnergyFromStreamfunc_wa
Function :
na_EnergyFromStreamfunc_wa :real(8), dimension(0:nm,size(wa_Strfunc,2))
: (out) エネルギースペクトル (水平全波数 n 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用).

 * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2
   と計算される.

 * 全てのエネルギースペクトル成分の和に 4πをかけたものが
   球面上での全エネルギーに等しい.

[Source]

    function na_EnergyFromStreamfunc_wa(wa_Strfunc)
      !
      ! 流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
      ! 計算する(多層用).
      !
      !  * 全波数 n の流線関数のスペクトル成分ψ(n,m) から
      !    エネルギースペクトルはΣ[m=-nm]^nm(1/2)n(n+1)ψ(n,m)^2 
      !    と計算される.
      !
      !  * 全てのエネルギースペクトル成分の和に 4πをかけたものが
      !    球面上での全エネルギーに等しい.
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,size(wa_Strfunc,2)) :: na_EnergyFromStreamfunc_wa
      !(out) エネルギースペクトル (水平全波数 n 空間) 

      integer :: n

      do n=0,nm
         na_EnergyFromStreamfunc_wa(n,:) = 0.5 * n*(n+1) * wa_StrFunc(l_nm(n,0),:)**2
      enddo

    end function na_EnergyFromStreamfunc_wa
Function :
na_EnstrophyFromStreamfunc_wa :real(8), dimension(0:nm,size(wa_Strfunc,2))
: エンストロフィースペクトル (out) エンストロフィースペクトル(水平全波数 n 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用)

  • 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
  • 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが 球面上での全エンストフィーに等しい.

[Source]

    function na_EnstrophyFromStreamfunc_wa(wa_Strfunc)  ! 
      !
      ! 流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
      ! 計算する(多層用)
      !
      ! * 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー
      !   スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
      !    
      ! * 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが
      !   球面上での全エンストフィーに等しい.
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,size(wa_Strfunc,2)) :: na_EnstrophyFromStreamfunc_wa      ! エンストロフィースペクトル
      !(out) エンストロフィースペクトル(水平全波数 n 空間)

      integer :: n

      do n=0,nm
         na_EnstrophyFromStreamfunc_wa(n,:) = 0.5 * n**2 * (n+1)**2 * wa_StrFunc(l_nm(n,0),:)**2
      enddo

    end function na_EnstrophyFromStreamfunc_wa
Function :
na_EnstrophyFromStreamfunc_wa :real(8), dimension(0:nm,size(wa_Strfunc,2))
: エンストロフィースペクトル (out) エンストロフィースペクトル(水平全波数 n 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を 計算する(多層用)

  • 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
  • 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが 球面上での全エンストフィーに等しい.

[Source]

    function na_EnstrophyFromStreamfunc_wa(wa_Strfunc)  ! 
      !
      ! 流線関数のスペクトルデータから各全波数のエネルギー成分(スペクトル)を
      ! 計算する(多層用)
      !
      ! * 全波数 n の流線関数のスペクトル成分ψ(n,m) からエンストロフィー
      !   スペクトルはΣ[m=-nm]^nm(1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
      !    
      ! * 全てのエネルギースペクトル成分の和に 4π/R^2 をかけたものが
      !   球面上での全エンストフィーに等しい.
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,size(wa_Strfunc,2)) :: na_EnstrophyFromStreamfunc_wa      ! エンストロフィースペクトル
      !(out) エンストロフィースペクトル(水平全波数 n 空間)

      integer :: n

      do n=0,nm
         na_EnstrophyFromStreamfunc_wa(n,:) = 0.5 * n**2 * (n+1)**2 * wa_StrFunc(l_nm(n,0),:)**2
      enddo

    end function na_EnstrophyFromStreamfunc_wa
nm_EnergyFromStreamfunc_w( w_Strfunc ) result(nm_EnergyFromStreamfunc_w)
Function :
nm_EnergyFromStreamfunc_w :real(8), dimension(0:nm,-nm:nm)
: (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(1 層用).

 * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.

 * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
   全エネルギーに等しい.

 * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
   欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる
   (初期値は -999.0)

Original external subprogram is w_zonal_module#nm_EnergyFromStreamfunc_w

nm_EnergyFromStreamfunc_w( w_Strfunc ) result(nm_EnergyFromStreamfunc_w)
Function :
nm_EnergyFromStreamfunc_w :real(8), dimension(0:nm,-nm:nm)
: (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(1 層用).

 * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.

 * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
   全エネルギーに等しい.

 * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
   欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる
   (初期値は -999.0)

Original external subprogram is w_zonal_module#nm_EnergyFromStreamfunc_w

nm_EnergyFromStreamfunc_w( w_Strfunc ) result(nm_EnergyFromStreamfunc_w)
Function :
nm_EnergyFromStreamfunc_w :real(8), dimension(0:nm,-nm:nm)
: (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(1 層用).

 * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.

 * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
   全エネルギーに等しい.

 * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
   欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる
   (初期値は -999.0)

Original external subprogram is w_zonal_module#nm_EnergyFromStreamfunc_w

nm_EnstrophyFromStreamfunc_w( w_Strfunc ) result(nm_EnstrophyFromStreamfunc_w)
Function :
nm_EnstrophyFromStreamfunc_w :real(8), dimension(0:nm,-nm:nm)
: エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(1 層用).

  • 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
     エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
    
  • 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが 球面上での全エンストロフィーに等しい. ここで R は球面の半径である.
  • データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. 欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる (初期値は -999.0)

Original external subprogram is w_zonal_module#nm_EnstrophyFromStreamfunc_w

nm_EnstrophyFromStreamfunc_w( w_Strfunc ) result(nm_EnstrophyFromStreamfunc_w)
Function :
nm_EnstrophyFromStreamfunc_w :real(8), dimension(0:nm,-nm:nm)
: エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(1 層用).

  • 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
     エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
    
  • 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが 球面上での全エンストロフィーに等しい. ここで R は球面の半径である.
  • データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. 欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる (初期値は -999.0)

Original external subprogram is w_zonal_module#nm_EnstrophyFromStreamfunc_w

nm_EnstrophyFromStreamfunc_w( w_Strfunc ) result(nm_EnstrophyFromStreamfunc_w)
Function :
nm_EnstrophyFromStreamfunc_w :real(8), dimension(0:nm,-nm:nm)
: エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)
w_Strfunc(:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(1 層用).

  • 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
     エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
    
  • 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが 球面上での全エンストロフィーに等しい. ここで R は球面の半径である.
  • データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. 欠損値の値はモジュール変数 w_spectrum_VMiss によって設定できる (初期値は -999.0)

Original external subprogram is w_zonal_module#nm_EnstrophyFromStreamfunc_w

nm_l( l ) result(nm_l_int)
Function :
nm_l_int(2) :integer
: (out) 全波数, 帯状波数
l :integer, intent(in)
: (in) スペクトルデータの格納位置

スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.

引数 l が整数値の場合, 対応する全波数と帯状波数を 長さ 2 の 1 次元整数値を返す. nm_l(1) が全波数, nm_l(2) が帯状波数である.

Original external subprogram is w_zonal_module#nm_l

nm_l( l ) result(nm_l_int)
Function :
nm_l_int(2) :integer
: (out) 全波数, 帯状波数
l :integer, intent(in)
: (in) スペクトルデータの格納位置

スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.

引数 l が整数値の場合, 対応する全波数と帯状波数を 長さ 2 の 1 次元整数値を返す. nm_l(1) が全波数, nm_l(2) が帯状波数である.

Original external subprogram is w_zonal_module#nm_l

nm_l( l ) result(nm_l_int)
Function :
nm_l_int(2) :integer
: (out) 全波数, 帯状波数
l :integer, intent(in)
: (in) スペクトルデータの格納位置

スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.

引数 l が整数値の場合, 対応する全波数と帯状波数を 長さ 2 の 1 次元整数値を返す. nm_l(1) が全波数, nm_l(2) が帯状波数である.

Original external subprogram is w_zonal_module#nm_l

nm_l( larray ) result(nm_l_array)
Function :
nm_l_array(size(larray),2) :integer
: (in) スペクトルデータの格納位置
larray(:) :integer, intent(in)
: (out) 全波数, 帯状波数

スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.

引数 larray が整数 1 次元配列の場合, larray に対応する n, m を格納した 2 次元整数配列を返す. nm_l_array(:,1) が全波数, nm_l_array(:,2) が帯状波数である.

Original external subprogram is w_zonal_module#nm_l

nm_l( larray ) result(nm_l_array)
Function :
nm_l_array(size(larray),2) :integer
: (in) スペクトルデータの格納位置
larray(:) :integer, intent(in)
: (out) 全波数, 帯状波数

スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.

引数 larray が整数 1 次元配列の場合, larray に対応する n, m を格納した 2 次元整数配列を返す. nm_l_array(:,1) が全波数, nm_l_array(:,2) が帯状波数である.

Original external subprogram is w_zonal_module#nm_l

nm_l( larray ) result(nm_l_array)
Function :
nm_l_array(size(larray),2) :integer
: (in) スペクトルデータの格納位置
larray(:) :integer, intent(in)
: (out) 全波数, 帯状波数

スペクトルデータの格納位置(l)から全波数(n)と東西波数(m)を返す.

引数 larray が整数 1 次元配列の場合, larray に対応する n, m を格納した 2 次元整数配列を返す. nm_l_array(:,1) が全波数, nm_l_array(:,2) が帯状波数である.

Original external subprogram is w_zonal_module#nm_l

Function :
nma_EnergyFromStreamfunc_wa :real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2))
: (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(多層用).

 * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.

 * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
   全エネルギーに等しい.

 * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
   欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる
   (初期値は -999.0)

[Source]

    function nma_EnergyFromStreamfunc_wa(wa_Strfunc)
      ! 
      ! 流線関数のスペクトルデータからエネルギーの球面調和函数成分
      ! (スペクトル)を計算する(多層用).
      !
      !  * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
      !    エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.
      !
      !  * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
      !    全エネルギーに等しい.
      !
      !  * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
      !    欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる
      !    (初期値は -999.0)
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2)) :: nma_EnergyFromStreamfunc_wa
      !(out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)

      integer :: n, m

      nma_EnergyFromStreamfunc_wa = wa_spectrum_VMiss

      do n=0,nm
         do m=1,n
            nma_EnergyFromStreamfunc_wa(n,m,:)  = 0.0D0
            nma_EnergyFromStreamfunc_wa(n,-m,:) = 0.0D0
         enddo
         nma_EnergyFromStreamfunc_wa(n,0,:) = 0.5 * n*(n+1) * wa_Strfunc(l_nm(n,0),:)**2
      enddo

    end function nma_EnergyFromStreamfunc_wa
Function :
nma_EnergyFromStreamfunc_wa :real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2))
: (out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエネルギーの球面調和函数成分 (スペクトル)を計算する(多層用).

 * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
   エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.

 * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
   全エネルギーに等しい.

 * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
   欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる
   (初期値は -999.0)

[Source]

    function nma_EnergyFromStreamfunc_wa(wa_Strfunc)
      ! 
      ! 流線関数のスペクトルデータからエネルギーの球面調和函数成分
      ! (スペクトル)を計算する(多層用).
      !
      !  * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
      !    エネルギースペクトルは (1/2)n(n+1)ψ(n,m)^2 と計算される.
      !
      !  * 全てのエネルギースペクトル成分の和に4πをかけたものが球面上での
      !    全エネルギーに等しい.
      !
      !  * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
      !    欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる
      !    (初期値は -999.0)
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2)) :: nma_EnergyFromStreamfunc_wa
      !(out) エネルギースペクトル(水平全波数 n, 帯状波数 m 空間)

      integer :: n, m

      nma_EnergyFromStreamfunc_wa = wa_spectrum_VMiss

      do n=0,nm
         do m=1,n
            nma_EnergyFromStreamfunc_wa(n,m,:)  = 0.0D0
            nma_EnergyFromStreamfunc_wa(n,-m,:) = 0.0D0
         enddo
         nma_EnergyFromStreamfunc_wa(n,0,:) = 0.5 * n*(n+1) * wa_Strfunc(l_nm(n,0),:)**2
      enddo

    end function nma_EnergyFromStreamfunc_wa
Function :
nma_EnstrophyFromStreamfunc_wa :real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2))
: エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(多層用).

  • 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
     エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
    
  • 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが 球面上での全エンストロフィーに等しい. ここで R は球面の半径である.
  • データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. 欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる (初期値は -999.0)

[Source]

    function nma_EnstrophyFromStreamfunc_wa(wa_Strfunc)  ! 
      !
      ! 流線関数のスペクトルデータからエンストロフィーの球面調和函数成分
      ! (スペクトル)を計算する(多層用). 
      !
      ! * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
      !    エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
      !
      ! * 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが
      !   球面上での全エンストロフィーに等しい. ここで R は球面の半径である.
      !
      ! * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
      !   欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる
      !   (初期値は -999.0)
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2)) :: nma_EnstrophyFromStreamfunc_wa
      ! エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)

      integer :: n, m

      nma_EnstrophyFromStreamfunc_wa = wa_spectrum_VMiss

      do n=0,nm
         do m=1,n
            nma_EnstrophyFromStreamfunc_wa(n,m,:) = 0.0
            nma_EnstrophyFromStreamfunc_wa(n,-m,:) = 0.0
         enddo
         nma_EnstrophyFromStreamfunc_wa(n,0,:) = 0.5 * n**2 * (n+1)**2 * wa_Strfunc(l_nm(n,0),:)**2
      enddo

    end function nma_EnstrophyFromStreamfunc_wa
Function :
nma_EnstrophyFromStreamfunc_wa :real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2))
: エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)
wa_Strfunc(:,:) :real(8), intent(in)
: (in) 流線関数(スペクトルデータ)

流線関数のスペクトルデータからエンストロフィーの球面調和函数成分 (スペクトル)を計算する(多層用).

  • 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
     エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
    
  • 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが 球面上での全エンストロフィーに等しい. ここで R は球面の半径である.
  • データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される. 欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる (初期値は -999.0)

[Source]

    function nma_EnstrophyFromStreamfunc_wa(wa_Strfunc)  ! 
      !
      ! 流線関数のスペクトルデータからエンストロフィーの球面調和函数成分
      ! (スペクトル)を計算する(多層用). 
      !
      ! * 全波数 n, 帯状波数 m の流線関数のスペクトル成分ψ(n,m) から
      !    エンストロフィースペクトルは (1/2)n^2(n+1)^2ψ(n,m)^2 と計算される.
      !
      ! * 全てのエンストロフィースペクトル成分の和に4π/R^2をかけたものが
      !   球面上での全エンストロフィーに等しい. ここで R は球面の半径である.
      !
      ! * データの存在しない全波数 n, 帯状波数 m の配列には欠損値が格納される.
      !   欠損値の値はモジュール変数 wa_spectrum_VMiss によって設定できる
      !   (初期値は -999.0)
      !
      real(8), intent(in)   :: wa_Strfunc(:,:)
      !(in) 流線関数(スペクトルデータ)

      real(8), dimension(0:nm,-nm:nm,size(wa_Strfunc,2)) :: nma_EnstrophyFromStreamfunc_wa
      ! エンストロフィースペクトル (水平全波数 n, 帯状波数 m 空間)

      integer :: n, m

      nma_EnstrophyFromStreamfunc_wa = wa_spectrum_VMiss

      do n=0,nm
         do m=1,n
            nma_EnstrophyFromStreamfunc_wa(n,m,:) = 0.0
            nma_EnstrophyFromStreamfunc_wa(n,-m,:) = 0.0
         enddo
         nma_EnstrophyFromStreamfunc_wa(n,0,:) = 0.5 * n**2 * (n+1)**2 * wa_Strfunc(l_nm(n,0),:)**2
      enddo

    end function nma_EnstrophyFromStreamfunc_wa
rn
Variable :
rn(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#rn

rn
Variable :
rn(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#rn

rn
Variable :
rn(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#rn

w_DLon_w( w_data ) result(w_DLon_w)
Function :
w_DLon_w(nm+1) :real(8)
: (out) スペクトルデータの経度微分
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに経度微分 ∂/∂λ を作用させる(1 層用).

スペクトルデータの経度微分とは, 対応する格子点データに 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_DLon_w

w_DLon_w( w_data ) result(w_DLon_w)
Function :
w_DLon_w(nm+1) :real(8)
: (out) スペクトルデータの経度微分
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに経度微分 ∂/∂λ を作用させる(1 層用).

スペクトルデータの経度微分とは, 対応する格子点データに 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_DLon_w

w_DLon_w( w_data ) result(w_DLon_w)
Function :
w_DLon_w(nm+1) :real(8)
: (out) スペクトルデータの経度微分
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに経度微分 ∂/∂λ を作用させる(1 層用).

スペクトルデータの経度微分とは, 対応する格子点データに 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_DLon_w

w_DivLambda_xy( xy_data ) result(w_DivLambda_xy)
Function :
w_DivLambda_xy(nm+1) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLambda_xy

w_DivLambda_xy( xy_data ) result(w_DivLambda_xy)
Function :
w_DivLambda_xy(nm+1) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLambda_xy

w_DivLambda_xy( xy_data ) result(w_DivLambda_xy)
Function :
w_DivLambda_xy(nm+1) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLambda_xy

w_DivLat_xy( xy_data ) result(w_DivLat_xy)
Function :
w_DivLat_xy(nm+1) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLat_xy

w_DivLat_xy( xy_data ) result(w_DivLat_xy)
Function :
w_DivLat_xy(nm+1) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLat_xy

w_DivLat_xy( xy_data ) result(w_DivLat_xy)
Function :
w_DivLat_xy(nm+1) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLat_xy

w_DivLon_xy( xy_data ) result(w_DivLon_xy)
Function :
w_DivLon_xy(nm+1) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLon_xy

w_DivLon_xy( xy_data ) result(w_DivLon_xy)
Function :
w_DivLon_xy(nm+1) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLon_xy

w_DivLon_xy( xy_data ) result(w_DivLon_xy)
Function :
w_DivLon_xy(nm+1) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivLon_xy

w_DivMu_xy( xy_data ) result(w_DivMu_xy)
Function :
w_DivMu_xy(nm+1) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivMu_xy

w_DivMu_xy( xy_data ) result(w_DivMu_xy)
Function :
w_DivMu_xy(nm+1) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivMu_xy

w_DivMu_xy( xy_data ) result(w_DivMu_xy)
Function :
w_DivMu_xy(nm+1) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(1 層用).

Original external subprogram is w_zonal_module#w_DivMu_xy

w_Div_xy_xy( xy_u, xy_v ) result(w_Div_xy_xy)
Function :
w_Div_xy_xy(nm+1) :real(8)
: (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
xy_u(0:im-1,1:jm) :real(8), intent(in)
: (in) ベクトル経度成分の格子点データ
xy_v(0:im-1,1:jm) :real(8), intent(in)
: (in) ベクトル緯度成分の格子点データ

2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(1 層用).

Original external subprogram is w_zonal_module#w_Div_xy_xy

w_Div_xy_xy( xy_u, xy_v ) result(w_Div_xy_xy)
Function :
w_Div_xy_xy(nm+1) :real(8)
: (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
xy_u(0:im-1,1:jm) :real(8), intent(in)
: (in) ベクトル経度成分の格子点データ
xy_v(0:im-1,1:jm) :real(8), intent(in)
: (in) ベクトル緯度成分の格子点データ

2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(1 層用).

Original external subprogram is w_zonal_module#w_Div_xy_xy

w_Div_xy_xy( xy_u, xy_v ) result(w_Div_xy_xy)
Function :
w_Div_xy_xy(nm+1) :real(8)
: (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
xy_u(0:im-1,1:jm) :real(8), intent(in)
: (in) ベクトル経度成分の格子点データ
xy_v(0:im-1,1:jm) :real(8), intent(in)
: (in) ベクトル緯度成分の格子点データ

2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(1 層用).

Original external subprogram is w_zonal_module#w_Div_xy_xy

w_Jacobian_w_w( w_a, w_b ) result(w_Jacobian_w_w)
Function :
w_Jacobian_w_w(nm+1) :real(8)
: (out) 2 つのスペクトルデータのヤコビアン
w_a(nm+1) :real(8), intent(in)
: (in) 1つ目の入力スペクトルデータ
w_b(nm+1) :real(8), intent(in)
: (in) 2つ目の入力スペクトルデータ

2 つのスペクトルデータにヤコビアン

  J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
         = ∂f/∂λ・1/cosφ・∂g/∂φ
            - ∂g/∂λ・1/cosφ・∂f/∂φ

を作用させる(1 層用).

Original external subprogram is w_zonal_module#w_Jacobian_w_w

w_Jacobian_w_w( w_a, w_b ) result(w_Jacobian_w_w)
Function :
w_Jacobian_w_w(nm+1) :real(8)
: (out) 2 つのスペクトルデータのヤコビアン
w_a(nm+1) :real(8), intent(in)
: (in) 1つ目の入力スペクトルデータ
w_b(nm+1) :real(8), intent(in)
: (in) 2つ目の入力スペクトルデータ

2 つのスペクトルデータにヤコビアン

  J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
         = ∂f/∂λ・1/cosφ・∂g/∂φ
            - ∂g/∂λ・1/cosφ・∂f/∂φ

を作用させる(1 層用).

Original external subprogram is w_zonal_module#w_Jacobian_w_w

w_Jacobian_w_w( w_a, w_b ) result(w_Jacobian_w_w)
Function :
w_Jacobian_w_w(nm+1) :real(8)
: (out) 2 つのスペクトルデータのヤコビアン
w_a(nm+1) :real(8), intent(in)
: (in) 1つ目の入力スペクトルデータ
w_b(nm+1) :real(8), intent(in)
: (in) 2つ目の入力スペクトルデータ

2 つのスペクトルデータにヤコビアン

  J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
         = ∂f/∂λ・1/cosφ・∂g/∂φ
            - ∂g/∂λ・1/cosφ・∂f/∂φ

を作用させる(1 層用).

Original external subprogram is w_zonal_module#w_Jacobian_w_w

w_LaplaInv_w( l_data ) result(l_LaplaInv_l)
Function :
l_LaplaInv_l(0:nn) :real(8)
: (out) スペクトルデータの逆ラプラシアン
l_data(0:nn) :real(8), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータに逆ラプラシアン

   ▽^{-2}
     =[1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}

を作用する.

スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_LaplaInv_w

w_LaplaInv_w( l_data ) result(l_LaplaInv_l)
Function :
l_LaplaInv_l(0:nn) :real(8)
: (out) スペクトルデータの逆ラプラシアン
l_data(0:nn) :real(8), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータに逆ラプラシアン

   ▽^{-2}
     =[1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}

を作用する.

スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_LaplaInv_w

w_LaplaInv_w( l_data ) result(l_LaplaInv_l)
Function :
l_LaplaInv_l(0:nn) :real(8)
: (out) スペクトルデータの逆ラプラシアン
l_data(0:nn) :real(8), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータに逆ラプラシアン

   ▽^{-2}
     =[1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}

を作用する.

スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_LaplaInv_w

w_Lapla_w( l_data ) result(l_Lapla_l)
Function :
l_Lapla_l(0:nn) :real(8)
: (out) 入力スペクトルデータのラプラシアン
l_data(0:nn) :real(8), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータにラプラシアン

   ▽^2 = 1/cosφ・∂/∂φ(cosφ∂/∂φ)

を作用する.

スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_Lapla_w

w_Lapla_w( l_data ) result(l_Lapla_l)
Function :
l_Lapla_l(0:nn) :real(8)
: (out) 入力スペクトルデータのラプラシアン
l_data(0:nn) :real(8), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータにラプラシアン

   ▽^2 = 1/cosφ・∂/∂φ(cosφ∂/∂φ)

を作用する.

スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_Lapla_w

w_Lapla_w( l_data ) result(l_Lapla_l)
Function :
l_Lapla_l(0:nn) :real(8)
: (out) 入力スペクトルデータのラプラシアン
l_data(0:nn) :real(8), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータにラプラシアン

   ▽^2 = 1/cosφ・∂/∂φ(cosφ∂/∂φ)

を作用する.

スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is w_zonal_module#w_Lapla_w

w_StreamPotential2Vector( w_Psi, w_Chi, xy_U, xy_V )
Subroutine :
w_Psi(nm+1) :real(8), intent(in)
: (in) 流線関数
w_Chi(nm+1) :real(8), intent(in)
: (in) 速度ポテンシャル
xy_U(0:im-1,1:jm) :real(8), intent(out)
: (out) 速度経度成分
xy_V(0:im-1,1:jm) :real(8), intent(out)
: (out) 速度緯度成分
  u cosφ = - cosφ∂ψ/∂φ の計算

流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に (逆)変換する(1 層用)

  u cosφ =      ∂χ/∂λ - cosφ∂ψ/∂φ,
  v cosφ = cosφ∂χ/∂φ +      ∂ψ/∂λ

Original external subprogram is w_zonal_module#w_StreamPotential2Vector

w_StreamPotential2Vector( w_Psi, w_Chi, xy_U, xy_V )
Subroutine :
w_Psi(nm+1) :real(8), intent(in)
: (in) 流線関数
w_Chi(nm+1) :real(8), intent(in)
: (in) 速度ポテンシャル
xy_U(0:im-1,1:jm) :real(8), intent(out)
: (out) 速度経度成分
xy_V(0:im-1,1:jm) :real(8), intent(out)
: (out) 速度緯度成分
  u cosφ = - cosφ∂ψ/∂φ の計算

流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に (逆)変換する(1 層用)

  u cosφ =      ∂χ/∂λ - cosφ∂ψ/∂φ,
  v cosφ = cosφ∂χ/∂φ +      ∂ψ/∂λ

Original external subprogram is w_zonal_module#w_StreamPotential2Vector

w_StreamPotential2Vector( w_Psi, w_Chi, xy_U, xy_V )
Subroutine :
w_Psi(nm+1) :real(8), intent(in)
: (in) 流線関数
w_Chi(nm+1) :real(8), intent(in)
: (in) 速度ポテンシャル
xy_U(0:im-1,1:jm) :real(8), intent(out)
: (out) 速度経度成分
xy_V(0:im-1,1:jm) :real(8), intent(out)
: (out) 速度緯度成分
  u cosφ = - cosφ∂ψ/∂φ の計算

流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に (逆)変換する(1 層用)

  u cosφ =      ∂χ/∂λ - cosφ∂ψ/∂φ,
  v cosφ = cosφ∂χ/∂φ +      ∂ψ/∂λ

Original external subprogram is w_zonal_module#w_StreamPotential2Vector

w_Vector2VorDiv( xy_U, xy_V, w_Vor, w_Div )
Subroutine :
xy_U(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度経度成分
xy_V(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度緯度成分
w_Vor(nm+1) :real(8), intent(out)
: (out) 流線関数
w_Div(nm+1) :real(8), intent(out)
: (out) 速度ポテンシャル
  ζ =  - 1/cosφ ∂(u cosφ)/∂φ の計算

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

Original external subprogram is w_zonal_module#w_Vector2VorDiv

w_Vector2VorDiv( xy_U, xy_V, w_Vor, w_Div )
Subroutine :
xy_U(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度経度成分
xy_V(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度緯度成分
w_Vor(nm+1) :real(8), intent(out)
: (out) 流線関数
w_Div(nm+1) :real(8), intent(out)
: (out) 速度ポテンシャル
  ζ =  - 1/cosφ ∂(u cosφ)/∂φ の計算

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

Original external subprogram is w_zonal_module#w_Vector2VorDiv

w_Vector2VorDiv( xy_U, xy_V, w_Vor, w_Div )
Subroutine :
xy_U(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度経度成分
xy_V(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度緯度成分
w_Vor(nm+1) :real(8), intent(out)
: (out) 流線関数
w_Div(nm+1) :real(8), intent(out)
: (out) 速度ポテンシャル
  ζ =  - 1/cosφ ∂(u cosφ)/∂φ の計算

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

Original external subprogram is w_zonal_module#w_Vector2VorDiv

w_VectorCosLat2VorDiv( xy_UCosLat, xy_VCosLat, w_Vor, w_Div )
Subroutine :
xy_UCosLat(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度経度成分 * cos(lat)
xy_VCosLat(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度緯度成分 * cos(lat)
w_Vor(nm+1) :real(8), intent(out)
: (out) 流線関数
w_Div(nm+1) :real(8), intent(out)
: (out) 速度ポテンシャル
  ζ =  - 1/cosφ ∂(u cosφ)/∂φ の計算

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

Original external subprogram is w_zonal_module#w_VectorCosLat2VorDiv

w_VectorCosLat2VorDiv( xy_UCosLat, xy_VCosLat, w_Vor, w_Div )
Subroutine :
xy_UCosLat(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度経度成分 * cos(lat)
xy_VCosLat(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度緯度成分 * cos(lat)
w_Vor(nm+1) :real(8), intent(out)
: (out) 流線関数
w_Div(nm+1) :real(8), intent(out)
: (out) 速度ポテンシャル
  ζ =  - 1/cosφ ∂(u cosφ)/∂φ の計算

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

Original external subprogram is w_zonal_module#w_VectorCosLat2VorDiv

w_VectorCosLat2VorDiv( xy_UCosLat, xy_VCosLat, w_Vor, w_Div )
Subroutine :
xy_UCosLat(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度経度成分 * cos(lat)
xy_VCosLat(0:im-1,1:jm) :real(8), intent(in)
: (in) 速度緯度成分 * cos(lat)
w_Vor(nm+1) :real(8), intent(out)
: (out) 流線関数
w_Div(nm+1) :real(8), intent(out)
: (out) 速度ポテンシャル
  ζ =  - 1/cosφ ∂(u cosφ)/∂φ の計算

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(1 層用)

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

Original external subprogram is w_zonal_module#w_VectorCosLat2VorDiv

w_spectrum_VMiss
Variable :
w_spectrum_VMiss = -999.000 :real(8)
: 欠損値初期値

Original external subprogram is w_zonal_module#w_spectrum_VMiss

w_spectrum_VMiss
Variable :
w_spectrum_VMiss = -999.000 :real(8)
: 欠損値初期値

Original external subprogram is w_zonal_module#w_spectrum_VMiss

w_spectrum_VMiss
Variable :
w_spectrum_VMiss = -999.000 :real(8)
: 欠損値初期値

Original external subprogram is w_zonal_module#w_spectrum_VMiss

w_xy( xy_data, [ipow], [iflag] ) result(w_xy)
Function :
w_xy(nm+1) :real(8)
: (out) スペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 格子点データ
ipow :integer, intent(in), optional
: (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 1/cosφ・∂(f cos^2φ)/∂φ を作用させた正変換
  -1 : 緯度微分を作用させた正変換
   2 : sinφを作用させた正変換
 省略時は 0.

格子データからスペクトルデータへ(正)変換する(1 層用).

Original external subprogram is w_zonal_module#w_xy

w_xy( xy_data, [ipow], [iflag] ) result(w_xy)
Function :
w_xy(nm+1) :real(8)
: (out) スペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 格子点データ
ipow :integer, intent(in), optional
: (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 1/cosφ・∂(f cos^2φ)/∂φ を作用させた正変換
  -1 : 緯度微分を作用させた正変換
   2 : sinφを作用させた正変換
 省略時は 0.

格子データからスペクトルデータへ(正)変換する(1 層用).

Original external subprogram is w_zonal_module#w_xy

w_xy( xy_data, [ipow], [iflag] ) result(w_xy)
Function :
w_xy(nm+1) :real(8)
: (out) スペクトルデータ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 格子点データ
ipow :integer, intent(in), optional
: (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 1/cosφ・∂(f cos^2φ)/∂φ を作用させた正変換
  -1 : 緯度微分を作用させた正変換
   2 : sinφを作用させた正変換
 省略時は 0.

格子データからスペクトルデータへ(正)変換する(1 層用).

Original external subprogram is w_zonal_module#w_xy

Function :
wa_DLon_wa(nm+1,size(wa_data,2)) :real(8)
: (out) スペクトルデータの経度微分
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに経度微分 ∂/∂λ を作用させる(多層用).

スペクトルデータの経度微分とは, 対応する格子点データに 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.

[Source]

    function wa_DLon_wa(wa_data)
      !
      ! スペクトルデータに経度微分 ∂/∂λ を作用させる(多層用).
      !
      ! スペクトルデータの経度微分とは, 対応する格子点データに
      ! 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.
      ! 
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: wa_DLon_wa(nm+1,size(wa_data,2))
      !(out) スペクトルデータの経度微分

      wa_DLon_wa = 0.0D0

    end function wa_DLon_wa
Function :
wa_DLon_wa(nm+1,size(wa_data,2)) :real(8)
: (out) スペクトルデータの経度微分
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに経度微分 ∂/∂λ を作用させる(多層用).

スペクトルデータの経度微分とは, 対応する格子点データに 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.

[Source]

    function wa_DLon_wa(wa_data)
      !
      ! スペクトルデータに経度微分 ∂/∂λ を作用させる(多層用).
      !
      ! スペクトルデータの経度微分とは, 対応する格子点データに
      ! 経度微分∂/∂λを作用させたデータのスペクトル変換のことである.
      ! 
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: wa_DLon_wa(nm+1,size(wa_data,2))
      !(out) スペクトルデータの経度微分

      wa_DLon_wa = 0.0D0

    end function wa_DLon_wa
Function :
wa_DivLambda_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLambda_xya(xya_data)
      !
      ! 格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) 
      ! を作用させてスペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivLambda_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型経度微分したスペクトルデータ

      wa_DivLambda_xya = wa_xya(xya_data,ipow=2,iflag=-1)

    end function wa_DivLambda_xya
Function :
wa_DivLambda_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) を作用させてスペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLambda_xya(xya_data)
      !
      ! 格子点データに発散型経度微分 1/(1-μ^2)・∂/∂λ (μ=sinφ) 
      ! を作用させてスペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivLambda_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型経度微分したスペクトルデータ

      wa_DivLambda_xya = wa_xya(xya_data,ipow=2,iflag=-1)

    end function wa_DivLambda_xya
Function :
wa_DivLat_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLat_xya(xya_data)
      !
      ! 格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivLat_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型緯度微分したスペクトルデータ

      wa_DivLat_xya = wa_xya(xya_data,ipow=1,iflag=1)

    end function wa_DivLat_xya
Function :
wa_DivLat_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLat_xya(xya_data)
      !
      ! 格子点データに発散型緯度微分 1/cosφ・∂(f cosφ)/∂φ を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivLat_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型緯度微分したスペクトルデータ

      wa_DivLat_xya = wa_xya(xya_data,ipow=1,iflag=1)

    end function wa_DivLat_xya
Function :
wa_DivLon_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLon_xya(xya_data)
      !
      ! 格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivLon_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型経度微分したスペクトルデータ

      wa_DivLon_xya = wa_xya(xya_data,ipow=1,iflag=-1)

    end function wa_DivLon_xya
Function :
wa_DivLon_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型経度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivLon_xya(xya_data)
      !
      ! 格子点データに発散型経度微分 1/cosφ・∂/∂λ を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivLon_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型経度微分したスペクトルデータ

      wa_DivLon_xya = wa_xya(xya_data,ipow=1,iflag=-1)

    end function wa_DivLon_xya
Function :
wa_DivMu_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivMu_xya(xya_data)
      !
      ! 格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivMu_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型緯度微分したスペクトルデータ

      wa_DivMu_xya = wa_xya(xya_data,ipow=2,iflag=1)

    end function wa_DivMu_xya
Function :
wa_DivMu_xya(nm+1,size(xya_data,3)) :real(8)
: (out) 格子点データを発散型緯度微分したスペクトルデータ
xya_data(0:,:,:) :real(8), intent(in)
: (in) 入力格子点データ

格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて スペクトルデータに変換して返す(多層用).

[Source]

    function wa_DivMu_xya(xya_data)
      !
      ! 格子点データに発散型緯度微分 ∂/∂μ (μ=sinφ)を作用させて
      ! スペクトルデータに変換して返す(多層用).
      !
      real(8), intent(in)  :: xya_data(0:,:,:)
      !(in) 入力格子点データ
      real(8)              :: wa_DivMu_xya(nm+1,size(xya_data,3))
      !(out) 格子点データを発散型緯度微分したスペクトルデータ

      wa_DivMu_xya = wa_xya(xya_data,ipow=2,iflag=1)

    end function wa_DivMu_xya
Function :
wa_Div_xya_xya(nm+1,size(xya_u,3)) :real(8)
: (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
xya_u(0:,:,:) :real(8), intent(in)
: (in) ベクトル経度成分の格子点データ
xya_v(0:,:,:) :real(8), intent(in)
: (in) ベクトル緯度成分の格子点データ

2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(多層用).

[Source]

    function wa_Div_xya_xya(xya_u,xya_v)
      !
      ! 2 つの入力格子点データをベクトル成分とする発散を計算し, 
      ! スペクトルデータとして返す(多層用).
      !
      real(8), intent(in)  :: xya_u(0:,:,:)
      !(in) ベクトル経度成分の格子点データ
      real(8), intent(in)  :: xya_v(0:,:,:)
      !(in) ベクトル緯度成分の格子点データ
      real(8)              :: wa_Div_xya_xya(nm+1,size(xya_u,3))
      !(out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ

      wa_Div_xya_xya = wa_DivLon_xya(xya_u) + wa_DivLat_xya(xya_v)

    end function wa_Div_xya_xya
Function :
wa_Div_xya_xya(nm+1,size(xya_u,3)) :real(8)
: (out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ
xya_u(0:,:,:) :real(8), intent(in)
: (in) ベクトル経度成分の格子点データ
xya_v(0:,:,:) :real(8), intent(in)
: (in) ベクトル緯度成分の格子点データ

2 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(多層用).

[Source]

    function wa_Div_xya_xya(xya_u,xya_v)
      !
      ! 2 つの入力格子点データをベクトル成分とする発散を計算し, 
      ! スペクトルデータとして返す(多層用).
      !
      real(8), intent(in)  :: xya_u(0:,:,:)
      !(in) ベクトル経度成分の格子点データ
      real(8), intent(in)  :: xya_v(0:,:,:)
      !(in) ベクトル緯度成分の格子点データ
      real(8)              :: wa_Div_xya_xya(nm+1,size(xya_u,3))
      !(out) 2 つの入力格子点データをベクトル成分とする発散のスペクトルデータ

      wa_Div_xya_xya = wa_DivLon_xya(xya_u) + wa_DivLat_xya(xya_v)

    end function wa_Div_xya_xya
wa_Finalize( )
Subroutine :

モジュールの終了処理(割り付け配列の解放)をおこなう.

解像度を変更する際にはこのサブルーチンを呼んで終了処理を おこなったのちに再度 w_Initial で初期設定しなければ ならない.

Original external subprogram is w_zonal_module#w_Finalize

wa_Finalize( )
Subroutine :

モジュールの終了処理(割り付け配列の解放)をおこなう.

解像度を変更する際にはこのサブルーチンを呼んで終了処理を おこなったのちに再度 w_Initial で初期設定しなければ ならない.

Original external subprogram is w_zonal_module#w_Finalize

wa_Finalize( )
Subroutine :

モジュールの終了処理(割り付け配列の解放)をおこなう.

解像度を変更する際にはこのサブルーチンを呼んで終了処理を おこなったのちに再度 w_Initial で初期設定しなければ ならない.

Original external subprogram is w_zonal_module#w_Finalize

Subroutine :
n_in :integer,intent(in)
: 切断波数
i_in :integer,intent(in)
: 格子点数(東西)
j_in :integer,intent(in)
: 格子点数(南北)
k_in :integer,intent(in)
: 最大データ数(層数)
np_in :integer,intent(in), optional
: OPENMP での最大スレッド数

スペクトル変換の格子点数, 波数, 最大データ数(層数)および OPENMP 使用時の最大スレッド数を設定する.

他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を しなければならない.

最大データ層数は wa_module との互換性のためにおいている. 実際にはこの設定以上の層数のデータも正しく取り扱える.

np_in は wa_module との互換性のためにおいているだけである. OPENMP 計算は実装されていない.

[Source]

    subroutine wa_Initial(n_in,i_in,j_in,k_in,np_in)
      !
      ! スペクトル変換の格子点数, 波数, 最大データ数(層数)および 
      ! OPENMP 使用時の最大スレッド数を設定する.
      !
      ! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
      ! しなければならない. 
      !
      ! 最大データ層数は wa_module との互換性のためにおいている. 
      ! 実際にはこの設定以上の層数のデータも正しく取り扱える. 
      !
      ! np_in は wa_module との互換性のためにおいているだけである. 
      ! OPENMP 計算は実装されていない. 
      !
      integer,intent(in) :: i_in                ! 格子点数(東西)
      integer,intent(in) :: j_in                ! 格子点数(南北)
      integer,intent(in) :: n_in                ! 切断波数
      integer,intent(in) :: k_in                ! 最大データ数(層数)
      integer,intent(in), optional :: np_in     ! OPENMP での最大スレッド数

      call w_Initial(n_in,i_in,j_in)
      call la_Initial(n_in,j_in,l_init=.false.)

      nm = n_in 
       im = i_in 
       jm = j_in 
       km = k_in

      call MessageNotify('M','wa_initial', 'wa_zonal_module (2013/02/24) is initialized')

    end subroutine wa_Initial
Subroutine :
n_in :integer,intent(in)
: 切断波数
i_in :integer,intent(in)
: 格子点数(東西)
j_in :integer,intent(in)
: 格子点数(南北)
k_in :integer,intent(in)
: 最大データ数(層数)
np_in :integer,intent(in), optional
: OPENMP での最大スレッド数

スペクトル変換の格子点数, 波数, 最大データ数(層数)および OPENMP 使用時の最大スレッド数を設定する.

他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を しなければならない.

最大データ層数は wa_module との互換性のためにおいている. 実際にはこの設定以上の層数のデータも正しく取り扱える.

np_in は wa_module との互換性のためにおいているだけである. OPENMP 計算は実装されていない.

[Source]

    subroutine wa_Initial(n_in,i_in,j_in,k_in,np_in)
      !
      ! スペクトル変換の格子点数, 波数, 最大データ数(層数)および 
      ! OPENMP 使用時の最大スレッド数を設定する.
      !
      ! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
      ! しなければならない. 
      !
      ! 最大データ層数は wa_module との互換性のためにおいている. 
      ! 実際にはこの設定以上の層数のデータも正しく取り扱える. 
      !
      ! np_in は wa_module との互換性のためにおいているだけである. 
      ! OPENMP 計算は実装されていない. 
      !
      integer,intent(in) :: i_in                ! 格子点数(東西)
      integer,intent(in) :: j_in                ! 格子点数(南北)
      integer,intent(in) :: n_in                ! 切断波数
      integer,intent(in) :: k_in                ! 最大データ数(層数)
      integer,intent(in), optional :: np_in     ! OPENMP での最大スレッド数

      call w_Initial(n_in,i_in,j_in)
      call la_Initial(n_in,j_in,l_init=.false.)

      nm = n_in 
       im = i_in 
       jm = j_in 
       km = k_in

      call MessageNotify('M','wa_initial', 'wa_zonal_module (2013/02/24) is initialized')

    end subroutine wa_Initial
Function :
wa_Jacobian_wa_wa(nm+1,size(wa_a,2)) :real(8)
: (out) 2 つのスペクトルデータのヤコビアン
wa_a(:,:) :real(8), intent(in)
: (in) 1つ目の入力スペクトルデータ
wa_b(:,:) :real(8), intent(in)
: (in) 2つ目の入力スペクトルデータ

2 つのスペクトルデータにヤコビアン

  J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
         = ∂f/∂λ・1/cosφ・∂g/∂φ
            - ∂g/∂λ・1/cosφ・∂f/∂φ

を作用させる(多層用).

[Source]

    function wa_Jacobian_wa_wa(wa_a,wa_b)
      ! 2 つのスペクトルデータにヤコビアン
      !
      !   J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
      !          = ∂f/∂λ・1/cosφ・∂g/∂φ
      !             - ∂g/∂λ・1/cosφ・∂f/∂φ
      !
      ! を作用させる(多層用).
      !
      real(8), intent(in) :: wa_a(:,:)
      !(in) 1つ目の入力スペクトルデータ
      real(8), intent(in) :: wa_b(:,:)
      !(in) 2つ目の入力スペクトルデータ
      real(8)             :: wa_Jacobian_wa_wa(nm+1,size(wa_a,2))
      !(out) 2 つのスペクトルデータのヤコビアン
      integer :: k

      do k=1,size(wa_a,2)
         wa_Jacobian_wa_wa(:,k) = w_Jacobian_w_w(wa_a(:,k),wa_b(:,k))
      end do
    end function wa_Jacobian_wa_wa
Function :
wa_Jacobian_wa_wa(nm+1,size(wa_a,2)) :real(8)
: (out) 2 つのスペクトルデータのヤコビアン
wa_a(:,:) :real(8), intent(in)
: (in) 1つ目の入力スペクトルデータ
wa_b(:,:) :real(8), intent(in)
: (in) 2つ目の入力スペクトルデータ

2 つのスペクトルデータにヤコビアン

  J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
         = ∂f/∂λ・1/cosφ・∂g/∂φ
            - ∂g/∂λ・1/cosφ・∂f/∂φ

を作用させる(多層用).

[Source]

    function wa_Jacobian_wa_wa(wa_a,wa_b)
      ! 2 つのスペクトルデータにヤコビアン
      !
      !   J(f,g) = ∂f/∂λ・∂g/∂μ - ∂g/∂λ・∂f/∂μ
      !          = ∂f/∂λ・1/cosφ・∂g/∂φ
      !             - ∂g/∂λ・1/cosφ・∂f/∂φ
      !
      ! を作用させる(多層用).
      !
      real(8), intent(in) :: wa_a(:,:)
      !(in) 1つ目の入力スペクトルデータ
      real(8), intent(in) :: wa_b(:,:)
      !(in) 2つ目の入力スペクトルデータ
      real(8)             :: wa_Jacobian_wa_wa(nm+1,size(wa_a,2))
      !(out) 2 つのスペクトルデータのヤコビアン
      integer :: k

      do k=1,size(wa_a,2)
         wa_Jacobian_wa_wa(:,k) = w_Jacobian_w_w(wa_a(:,k),wa_b(:,k))
      end do
    end function wa_Jacobian_wa_wa
wa_LaplaInv_wa( la_data ) result(la_LaplaInv_la)
Function :
la_LaplaInv_la(0:nm,size(la_data,2)) :real(8)
: (out) スペクトルデータの逆ラプラシアン
la_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ(0:nm,:)

入力スペクトルデータに逆ラプラシアン

   ▽^{-2}
     =[1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}

を作用する(多層用).

スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is la_module#la_LaplaInv_la

wa_LaplaInv_wa( la_data ) result(la_LaplaInv_la)
Function :
la_LaplaInv_la(0:nm,size(la_data,2)) :real(8)
: (out) スペクトルデータの逆ラプラシアン
la_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ(0:nm,:)

入力スペクトルデータに逆ラプラシアン

   ▽^{-2}
     =[1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}

を作用する(多層用).

スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is la_module#la_LaplaInv_la

wa_LaplaInv_wa( la_data ) result(la_LaplaInv_la)
Function :
la_LaplaInv_la(0:nm,size(la_data,2)) :real(8)
: (out) スペクトルデータの逆ラプラシアン
la_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ(0:nm,:)

入力スペクトルデータに逆ラプラシアン

   ▽^{-2}
     =[1/cosφ・∂/∂φ(cosφ∂/∂φ)]^{-1}

を作用する(多層用).

スペクトルデータの逆ラプラシアンとは, 対応する格子点データに 逆ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is la_module#la_LaplaInv_la

wa_Lapla_wa( la_data ) result(la_Lapla_la)
Function :
la_Lapla_la(0:nm,size(la_data,2)) :real(8)
: (out) 入力スペクトルデータのラプラシアン
la_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ(0:nm,:)

入力スペクトルデータにラプラシアン

   ▽^2 = 1/cosφ・∂/∂φ(cosφ∂/∂φ)

を作用する(多層用).

スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is la_module#la_Lapla_la

wa_Lapla_wa( la_data ) result(la_Lapla_la)
Function :
la_Lapla_la(0:nm,size(la_data,2)) :real(8)
: (out) 入力スペクトルデータのラプラシアン
la_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ(0:nm,:)

入力スペクトルデータにラプラシアン

   ▽^2 = 1/cosφ・∂/∂φ(cosφ∂/∂φ)

を作用する(多層用).

スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is la_module#la_Lapla_la

wa_Lapla_wa( la_data ) result(la_Lapla_la)
Function :
la_Lapla_la(0:nm,size(la_data,2)) :real(8)
: (out) 入力スペクトルデータのラプラシアン
la_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ(0:nm,:)

入力スペクトルデータにラプラシアン

   ▽^2 = 1/cosφ・∂/∂φ(cosφ∂/∂φ)

を作用する(多層用).

スペクトルデータのラプラシアンとは, 対応する格子点データに ラプラシアンを作用させたデータのスペクトル変換のことである.

Original external subprogram is la_module#la_Lapla_la

Subroutine :
wa_Psi(:,:) :real(8), intent(in)
: (in) 流線関数((nm+1)*(nm+1),:)
wa_Chi(:,:) :real(8), intent(in)
: (in) 速度ポテンシャル((nm+1)*(nm+1),:)
xya_U(0:im-1,1:jm,size(wa_Psi,2)) :real(8), intent(out)
: (out) 速度経度成分(0:im-1,1:jm,:)
xya_V(0:im-1,1:jm,size(wa_Psi,2)) :real(8), intent(out)
: (out) 速度緯度成分(0:im-1,1:jm,:)

流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に (逆)変換する(多層用)

スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.

  u cosφ =      ∂χ/∂λ - cosφ∂ψ/∂φ,
  v cosφ = cosφ∂χ/∂φ +      ∂ψ/∂λ

[Source]

    subroutine wa_StreamPotential2Vector(wa_Psi, wa_Chi, xya_U, xya_V)
      !
      ! 流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に
      ! (逆)変換する(多層用)
      !
      ! スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ. 
      !
      !   u cosφ =      ∂χ/∂λ - cosφ∂ψ/∂φ, 
      !   v cosφ = cosφ∂χ/∂φ +      ∂ψ/∂λ 
      !
      real(8), intent(in)   :: wa_Psi(:,:)
      !(in) 流線関数((nm+1)*(nm+1),:)

      real(8), intent(in)   :: wa_Chi(:,:)
      !(in) 速度ポテンシャル((nm+1)*(nm+1),:)

      real(8), intent(out)   :: xya_U(0:im-1,1:jm,size(wa_Psi,2))
      !(out) 速度経度成分(0:im-1,1:jm,:)

      real(8), intent(out)   :: xya_V(0:im-1,1:jm,size(wa_Psi,2))
      !(out) 速度緯度成分(0:im-1,1:jm,:)

      integer :: k

      do k=1,size(wa_Psi,2)
         call w_StreamPotential2Vector ( wa_Psi(:,k), wa_Chi(:,k), xya_U(:,:,k), xya_V(:,:,k) )
      enddo

    end subroutine wa_StreamPotential2Vector
Subroutine :
wa_Psi(:,:) :real(8), intent(in)
: (in) 流線関数((nm+1)*(nm+1),:)
wa_Chi(:,:) :real(8), intent(in)
: (in) 速度ポテンシャル((nm+1)*(nm+1),:)
xya_U(0:im-1,1:jm,size(wa_Psi,2)) :real(8), intent(out)
: (out) 速度経度成分(0:im-1,1:jm,:)
xya_V(0:im-1,1:jm,size(wa_Psi,2)) :real(8), intent(out)
: (out) 速度緯度成分(0:im-1,1:jm,:)

流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に (逆)変換する(多層用)

スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.

  u cosφ =      ∂χ/∂λ - cosφ∂ψ/∂φ,
  v cosφ = cosφ∂χ/∂φ +      ∂ψ/∂λ

[Source]

    subroutine wa_StreamPotential2Vector(wa_Psi, wa_Chi, xya_U, xya_V)
      !
      ! 流線・ポテンシャル(スペクトルデータ)から速度場(格子データ)に
      ! (逆)変換する(多層用)
      !
      ! スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ. 
      !
      !   u cosφ =      ∂χ/∂λ - cosφ∂ψ/∂φ, 
      !   v cosφ = cosφ∂χ/∂φ +      ∂ψ/∂λ 
      !
      real(8), intent(in)   :: wa_Psi(:,:)
      !(in) 流線関数((nm+1)*(nm+1),:)

      real(8), intent(in)   :: wa_Chi(:,:)
      !(in) 速度ポテンシャル((nm+1)*(nm+1),:)

      real(8), intent(out)   :: xya_U(0:im-1,1:jm,size(wa_Psi,2))
      !(out) 速度経度成分(0:im-1,1:jm,:)

      real(8), intent(out)   :: xya_V(0:im-1,1:jm,size(wa_Psi,2))
      !(out) 速度緯度成分(0:im-1,1:jm,:)

      integer :: k

      do k=1,size(wa_Psi,2)
         call w_StreamPotential2Vector ( wa_Psi(:,k), wa_Chi(:,k), xya_U(:,:,k), xya_V(:,:,k) )
      enddo

    end subroutine wa_StreamPotential2Vector
Subroutine :
xya_U(0:,:,:) :real(8), intent(in)
: (in) 速度経度成分(0:im-1,1:jm,:)
xya_V(0:,:,:) :real(8), intent(in)
: (in) 速度緯度成分(0:im-1,1:jm,:)
wa_Vor(nm+1,size(xya_U,3)) :real(8), intent(out)
: (out) 流線関数
wa_Div(nm+1,size(xya_U,3)) :real(8), intent(out)
: (out) 速度ポテンシャル

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(多層用)

スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

[Source]

    subroutine wa_Vector2VorDiv(xya_U, xya_V, wa_Vor, wa_Div)
      !
      ! 速度場(格子データ)から渦度・発散(スペクトルデータ)に
      ! (正)変換する(多層用)
      ! 
      ! スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ. 
      !
      !   ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ 
      !    D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
      !
      real(8), intent(in)   :: xya_U(0:,:,:)
      !(in) 速度経度成分(0:im-1,1:jm,:)

      real(8), intent(in)   :: xya_V(0:,:,:)
      !(in) 速度緯度成分(0:im-1,1:jm,:)

      real(8), intent(out)   :: wa_Vor(nm+1,size(xya_U,3))
      !(out) 流線関数
      real(8), intent(out)   :: wa_Div(nm+1,size(xya_U,3))
      !(out) 速度ポテンシャル

      integer :: k

      do k=1,size(xya_U,3)
         call w_Vector2VorDiv (xya_U(:,:,k), xya_V(:,:,k), wa_Vor(:,k), wa_Div(:,k))
      enddo
    end subroutine wa_Vector2VorDiv
Subroutine :
xya_U(0:,:,:) :real(8), intent(in)
: (in) 速度経度成分(0:im-1,1:jm,:)
xya_V(0:,:,:) :real(8), intent(in)
: (in) 速度緯度成分(0:im-1,1:jm,:)
wa_Vor(nm+1,size(xya_U,3)) :real(8), intent(out)
: (out) 流線関数
wa_Div(nm+1,size(xya_U,3)) :real(8), intent(out)
: (out) 速度ポテンシャル

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(多層用)

スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

[Source]

    subroutine wa_Vector2VorDiv(xya_U, xya_V, wa_Vor, wa_Div)
      !
      ! 速度場(格子データ)から渦度・発散(スペクトルデータ)に
      ! (正)変換する(多層用)
      ! 
      ! スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ. 
      !
      !   ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ 
      !    D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
      !
      real(8), intent(in)   :: xya_U(0:,:,:)
      !(in) 速度経度成分(0:im-1,1:jm,:)

      real(8), intent(in)   :: xya_V(0:,:,:)
      !(in) 速度緯度成分(0:im-1,1:jm,:)

      real(8), intent(out)   :: wa_Vor(nm+1,size(xya_U,3))
      !(out) 流線関数
      real(8), intent(out)   :: wa_Div(nm+1,size(xya_U,3))
      !(out) 速度ポテンシャル

      integer :: k

      do k=1,size(xya_U,3)
         call w_Vector2VorDiv (xya_U(:,:,k), xya_V(:,:,k), wa_Vor(:,k), wa_Div(:,k))
      enddo
    end subroutine wa_Vector2VorDiv
Subroutine :
xya_UCosLat(0:,:,:) :real(8), intent(in)
: (in) 速度経度成分 * cos(lat) (0:im-1,1:jm,:)
xya_VCosLat(0:,:,:) :real(8), intent(in)
: (in) 速度緯度成分 * cos(lat) (0:im-1,1:jm,:)
wa_Vor(nm+1,size(xya_UCosLat,3)) :real(8), intent(out)
: (out) 流線関数
wa_Div(nm+1,size(xya_UCosLat,3)) :real(8), intent(out)
: (out) 速度ポテンシャル

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(多層用)

スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

[Source]

    subroutine wa_VectorCosLat2VorDiv(xya_UCosLat, xya_VCosLat, wa_Vor, wa_Div)
      !
      ! 速度場(格子データ)から渦度・発散(スペクトルデータ)に
      ! (正)変換する(多層用)
      ! 
      ! スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ. 
      !
      !   ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ 
      !    D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
      !
      real(8), intent(in)   :: xya_UCosLat(0:,:,:)
      !(in) 速度経度成分 * cos(lat) (0:im-1,1:jm,:)

      real(8), intent(in)   :: xya_VCosLat(0:,:,:)
      !(in) 速度緯度成分 * cos(lat) (0:im-1,1:jm,:)

      real(8), intent(out)   :: wa_Vor(nm+1,size(xya_UCosLat,3))
      !(out) 流線関数
      real(8), intent(out)   :: wa_Div(nm+1,size(xya_UCosLat,3))
      !(out) 速度ポテンシャル

      integer :: k

      do k=1,size(xya_UCosLat,3)
         call w_VectorCosLat2VorDiv (xya_UCosLat(:,:,k), xya_VCosLat(:,:,k), wa_Vor(:,k), wa_Div(:,k))
      enddo
    end subroutine wa_VectorCosLat2VorDiv
Subroutine :
xya_UCosLat(0:,:,:) :real(8), intent(in)
: (in) 速度経度成分 * cos(lat) (0:im-1,1:jm,:)
xya_VCosLat(0:,:,:) :real(8), intent(in)
: (in) 速度緯度成分 * cos(lat) (0:im-1,1:jm,:)
wa_Vor(nm+1,size(xya_UCosLat,3)) :real(8), intent(out)
: (out) 流線関数
wa_Div(nm+1,size(xya_UCosLat,3)) :real(8), intent(out)
: (out) 速度ポテンシャル

速度場(格子データ)から渦度・発散(スペクトルデータ)に (正)変換する(多層用)

スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ.

  ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ
   D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ

[Source]

    subroutine wa_VectorCosLat2VorDiv(xya_UCosLat, xya_VCosLat, wa_Vor, wa_Div)
      !
      ! 速度場(格子データ)から渦度・発散(スペクトルデータ)に
      ! (正)変換する(多層用)
      ! 
      ! スペクトル変換を用いず微分を計算するために, 変換回数が 2 回ですむ. 
      !
      !   ζ = 1/cosφ∂v/∂λ - 1/cosφ ∂(u cosφ)/∂φ 
      !    D = 1/cosφ∂u/∂λ + 1/cosφ ∂(v cosφ)/∂φ
      !
      real(8), intent(in)   :: xya_UCosLat(0:,:,:)
      !(in) 速度経度成分 * cos(lat) (0:im-1,1:jm,:)

      real(8), intent(in)   :: xya_VCosLat(0:,:,:)
      !(in) 速度緯度成分 * cos(lat) (0:im-1,1:jm,:)

      real(8), intent(out)   :: wa_Vor(nm+1,size(xya_UCosLat,3))
      !(out) 流線関数
      real(8), intent(out)   :: wa_Div(nm+1,size(xya_UCosLat,3))
      !(out) 速度ポテンシャル

      integer :: k

      do k=1,size(xya_UCosLat,3)
         call w_VectorCosLat2VorDiv (xya_UCosLat(:,:,k), xya_VCosLat(:,:,k), wa_Vor(:,k), wa_Div(:,k))
      enddo
    end subroutine wa_VectorCosLat2VorDiv
wa_spectrum_VMiss
Variable :
wa_spectrum_VMiss = -999.000 :real(8)
: 欠損値初期値
wa_spectrum_VMiss
Variable :
wa_spectrum_VMiss = -999.000 :real(8)
: 欠損値初期値
Function :
wa_xya(nm+1,size(xya_data,3)) :real(8)
: (out) スペクトルデータ(nm+1,:)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 格子点データ(0:im-1,1:jm,:)
ipow :integer, intent(in), optional
: (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: 変換の種類
   0 : 通常の正変換
  -1 : 経度微分を作用させた正変換
   1 : 緯度微分を作用させた正変換
   2 : sinφを作用させた正変換
 省略時は 0.

格子点 -> 球面調和関数スペクトル

格子データからスペクトルデータへ(正)変換する(多層用).

[Source]

    function wa_xya(xya_data,ipow,iflag) ! 格子点 -> 球面調和関数スペクトル
      !
      ! 格子データからスペクトルデータへ(正)変換する(多層用).
      !
      real(8), intent(in)   :: xya_data(0:,:,:)
      !(in) 格子点データ(0:im-1,1:jm,:)

      real(8)               :: wa_xya(nm+1,size(xya_data,3))
      !(out) スペクトルデータ(nm+1,:)

      integer, intent(in), optional  :: ipow
      !(in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.

      integer, intent(in), optional  :: iflag
      ! 変換の種類
      !    0 : 通常の正変換
      !   -1 : 経度微分を作用させた正変換
      !    1 : 緯度微分を作用させた正変換
      !    2 : sinφを作用させた正変換
      !  省略時は 0.

      integer, parameter  :: ipow_default  = 0    ! スイッチデフォルト値
      integer, parameter  :: iflag_default = 0    ! スイッチデフォルト値

      integer ipval, ifval

      real(8)             :: xya_work(0:im-1,1:jm,size(xya_data,3))
      ! 格子点データ作業配列

      if (present(ipow)) then
         ipval = ipow
      else
         ipval = ipow_default
      endif

      if (present(iflag)) then
         ifval = iflag
      else
         ifval = iflag_default
      endif

      xya_work = xya_data/spread(cos(xy_Lat)**ipval,3,size(xya_data,3))

      if ( ifval == -1 ) then                         ! 経度微分は 0 
         wa_xya = 0.0D0        
      else if ( ifval == 1 ) then                     ! 緯度微分
         xya_work = xya_work * spread(cos(xy_Lat),3,size(xya_data,3))
         wa_xya = wa_DivLat_ya(xya_work(0,:,:))
      else if ( ifval == 2 ) then                     ! sinφ をかけた正変換
         xya_work = xya_work * spread(sin(xy_Lat),3,size(xya_data,3))
         wa_xya = wa_ya(xya_work(0,:,:))
      else
         wa_xya = wa_ya(xya_work(0,:,:))
      endif
      
    end function wa_xya
Function :
wa_xya(nm+1,size(xya_data,3)) :real(8)
: (out) スペクトルデータ(nm+1,:)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 格子点データ(0:im-1,1:jm,:)
ipow :integer, intent(in), optional
: (in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: 変換の種類
   0 : 通常の正変換
  -1 : 経度微分を作用させた正変換
   1 : 緯度微分を作用させた正変換
   2 : sinφを作用させた正変換
 省略時は 0.

格子点 -> 球面調和関数スペクトル

格子データからスペクトルデータへ(正)変換する(多層用).

[Source]

    function wa_xya(xya_data,ipow,iflag) ! 格子点 -> 球面調和関数スペクトル
      !
      ! 格子データからスペクトルデータへ(正)変換する(多層用).
      !
      real(8), intent(in)   :: xya_data(0:,:,:)
      !(in) 格子点データ(0:im-1,1:jm,:)

      real(8)               :: wa_xya(nm+1,size(xya_data,3))
      !(out) スペクトルデータ(nm+1,:)

      integer, intent(in), optional  :: ipow
      !(in) 変換時に同時に作用させる 1/cosφ の次数. 省略時は 0.

      integer, intent(in), optional  :: iflag
      ! 変換の種類
      !    0 : 通常の正変換
      !   -1 : 経度微分を作用させた正変換
      !    1 : 緯度微分を作用させた正変換
      !    2 : sinφを作用させた正変換
      !  省略時は 0.

      integer, parameter  :: ipow_default  = 0    ! スイッチデフォルト値
      integer, parameter  :: iflag_default = 0    ! スイッチデフォルト値

      integer ipval, ifval

      real(8)             :: xya_work(0:im-1,1:jm,size(xya_data,3))
      ! 格子点データ作業配列

      if (present(ipow)) then
         ipval = ipow
      else
         ipval = ipow_default
      endif

      if (present(iflag)) then
         ifval = iflag
      else
         ifval = iflag_default
      endif

      xya_work = xya_data/spread(cos(xy_Lat)**ipval,3,size(xya_data,3))

      if ( ifval == -1 ) then                         ! 経度微分は 0 
         wa_xya = 0.0D0        
      else if ( ifval == 1 ) then                     ! 緯度微分
         xya_work = xya_work * spread(cos(xy_Lat),3,size(xya_data,3))
         wa_xya = wa_DivLat_ya(xya_work(0,:,:))
      else if ( ifval == 2 ) then                     ! sinφ をかけた正変換
         xya_work = xya_work * spread(sin(xy_Lat),3,size(xya_data,3))
         wa_xya = wa_ya(xya_work(0,:,:))
      else
         wa_xya = wa_ya(xya_work(0,:,:))
      endif
      
    end function wa_xya
x_AvrLat_xy( xy_data ) result(x_AvrLat_xy)
Function :
x_AvrLat_xy(im) :real(8)
: (out) 平均された 1 次元経度(X)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの緯度(Y)方向平均(1 層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#x_AvrLat_xy

x_AvrLat_xy( xy_data ) result(x_AvrLat_xy)
Function :
x_AvrLat_xy(im) :real(8)
: (out) 平均された 1 次元経度(X)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの緯度(Y)方向平均(1 層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#x_AvrLat_xy

x_AvrLat_xy( xy_data ) result(x_AvrLat_xy)
Function :
x_AvrLat_xy(im) :real(8)
: (out) 平均された 1 次元経度(X)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの緯度(Y)方向平均(1 層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#x_AvrLat_xy

x_IntLat_xy( xy_data ) result(x_IntLat_xy)
Function :
x_IntLat_xy(0:im-1) :real(8)
: (out) 積分された 1 次元経度(X)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの緯度(Y)方向積分(1 層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#x_IntLat_xy

x_IntLat_xy( xy_data ) result(x_IntLat_xy)
Function :
x_IntLat_xy(0:im-1) :real(8)
: (out) 積分された 1 次元経度(X)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの緯度(Y)方向積分(1 層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#x_IntLat_xy

x_IntLat_xy( xy_data ) result(x_IntLat_xy)
Function :
x_IntLat_xy(0:im-1) :real(8)
: (out) 積分された 1 次元経度(X)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの緯度(Y)方向積分(1 層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#x_IntLat_xy

x_Lon
Variable :
x_Lon(:) :real(8), allocatable
: 経度経度

Original external subprogram is w_zonal_module#x_Lon

x_Lon
Variable :
x_Lon(:) :real(8), allocatable
: 経度経度

Original external subprogram is w_zonal_module#x_Lon

x_Lon
Variable :
x_Lon(:) :real(8), allocatable
: 経度経度

Original external subprogram is w_zonal_module#x_Lon

x_Lon_Weight
Variable :
x_Lon_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is w_zonal_module#x_Lon_Weight

x_Lon_Weight
Variable :
x_Lon_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is w_zonal_module#x_Lon_Weight

x_Lon_Weight
Variable :
x_Lon_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is w_zonal_module#x_Lon_Weight

Function :
xa_AvrLat_xya(0:im-1,size(xya_data,3)) :real(8)
: (out) 平均された 1 次元経度(X)格子点データの並び(im,*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの緯度(Y)方向平均(多層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

[Source]

    function xa_AvrLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの緯度(Y)方向平均(多層用).
      !
      ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, 
      ! y_Y_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8)             :: xa_AvrLat_xya(0:im-1,size(xya_data,3))
      !(out) 平均された 1 次元経度(X)格子点データの並び(im,*)

      xa_AvrLat_xya = xa_IntLat_xya(xya_data)/sum(y_Lat_Weight)

    end function xa_AvrLat_xya
Function :
xa_AvrLat_xya(0:im-1,size(xya_data,3)) :real(8)
: (out) 平均された 1 次元経度(X)格子点データの並び(im,*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの緯度(Y)方向平均(多層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.

[Source]

    function xa_AvrLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの緯度(Y)方向平均(多層用).
      !
      ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, 
      ! y_Y_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8)             :: xa_AvrLat_xya(0:im-1,size(xya_data,3))
      !(out) 平均された 1 次元経度(X)格子点データの並び(im,*)

      xa_AvrLat_xya = xa_IntLat_xya(xya_data)/sum(y_Lat_Weight)

    end function xa_AvrLat_xya
Function :
xa_IntLat_xya(0:im-1,size(xya_data,3)) :real(8)
: (out) 積分された 1 次元経度(X)格子点データの並び
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの緯度(Y)方向積分(多層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

[Source]

    function xa_IntLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの緯度(Y)方向積分(多層用).
      !
      ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
      real(8)             :: xa_IntLat_xya(0:im-1,size(xya_data,3))
      !(out) 積分された 1 次元経度(X)格子点データの並び
      Integer :: j

      xa_IntLat_xya = 0.0D0
      do j=1,jm
         xa_IntLat_xya = xa_IntLat_xya + xya_data(:,j,:) * y_Lat_Weight(j)
      enddo

    end function xa_IntLat_xya
Function :
xa_IntLat_xya(0:im-1,size(xya_data,3)) :real(8)
: (out) 積分された 1 次元経度(X)格子点データの並び
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの緯度(Y)方向積分(多層用).

実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.

[Source]

    function xa_IntLat_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの緯度(Y)方向積分(多層用).
      !
      ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)
      real(8)             :: xa_IntLat_xya(0:im-1,size(xya_data,3))
      !(out) 積分された 1 次元経度(X)格子点データの並び
      Integer :: j

      xa_IntLat_xya = 0.0D0
      do j=1,jm
         xa_IntLat_xya = xa_IntLat_xya + xya_data(:,j,:) * y_Lat_Weight(j)
      enddo

    end function xa_IntLat_xya
xy_GradLambda_w( w_data ) result(xy_GradLambda_w)
Function :
xy_GradLambda_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(1 層用).

Original external subprogram is w_zonal_module#xy_GradLambda_w

xy_GradLambda_w( w_data ) result(xy_GradLambda_w)
Function :
xy_GradLambda_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(1 層用).

Original external subprogram is w_zonal_module#xy_GradLambda_w

xy_GradLambda_w( w_data ) result(xy_GradLambda_w)
Function :
xy_GradLambda_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(1 層用).

Original external subprogram is w_zonal_module#xy_GradLambda_w

xy_GradLat_w( w_data ) result(xy_GradLat_w)
Function :
xy_GradLat_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradLat_w

xy_GradLat_w( w_data ) result(xy_GradLat_w)
Function :
xy_GradLat_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradLat_w

xy_GradLat_w( w_data ) result(xy_GradLat_w)
Function :
xy_GradLat_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradLat_w

xy_GradLon_w( w_data ) result(xy_GradLon_w)
Function :
xy_GradLon_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradLon_w

xy_GradLon_w( w_data ) result(xy_GradLon_w)
Function :
xy_GradLon_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradLon_w

xy_GradLon_w( w_data ) result(xy_GradLon_w)
Function :
xy_GradLon_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradLon_w

xy_GradMu_w( w_data ) result(xy_GradMu_w)
Function :
xy_GradMu_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradMu_w

xy_GradMu_w( w_data ) result(xy_GradMu_w)
Function :
xy_GradMu_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradMu_w

xy_GradMu_w( w_data ) result(xy_GradMu_w)
Function :
xy_GradMu_w(0:im-1,1:jm) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(1 層用).

Original external subprogram is w_zonal_module#xy_GradMu_w

xy_Lat
Variable :
xy_Lat(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#xy_Lat

xy_Lat
Variable :
xy_Lat(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#xy_Lat

xy_Lat
Variable :
xy_Lat(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#xy_Lat

xy_Lon
Variable :
xy_Lon(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#xy_Lon

xy_Lon
Variable :
xy_Lon(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#xy_Lon

xy_Lon
Variable :
xy_Lon(:,:) :real(8), allocatable

Original external subprogram is w_zonal_module#xy_Lon

xy_w( w_data, [ipow], [iflag] ) result(xy_w)
Function :
xy_w(0:im-1,1:jm) :real(8)
: (out) 格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) スペクトルデータ
ipow :integer, intent(in), optional
: (in) 作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: (in) 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
  -1 : 経度微分を作用させた逆変換
   2 : sinφを作用させた逆変換(非実装)
   省略時は 0.

スペクトルデータから格子データへ変換する(1 層用).

Original external subprogram is w_zonal_module#xy_w

xy_w( w_data, [ipow], [iflag] ) result(xy_w)
Function :
xy_w(0:im-1,1:jm) :real(8)
: (out) 格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) スペクトルデータ
ipow :integer, intent(in), optional
: (in) 作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: (in) 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
  -1 : 経度微分を作用させた逆変換
   2 : sinφを作用させた逆変換(非実装)
   省略時は 0.

スペクトルデータから格子データへ変換する(1 層用).

Original external subprogram is w_zonal_module#xy_w

xy_w( w_data, [ipow], [iflag] ) result(xy_w)
Function :
xy_w(0:im-1,1:jm) :real(8)
: (out) 格子点データ
w_data(nm+1) :real(8), intent(in)
: (in) スペクトルデータ
ipow :integer, intent(in), optional
: (in) 作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: (in) 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
  -1 : 経度微分を作用させた逆変換
   2 : sinφを作用させた逆変換(非実装)
   省略時は 0.

スペクトルデータから格子データへ変換する(1 層用).

Original external subprogram is w_zonal_module#xy_w

Function :
xya_GradLambda_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(多層用).

[Source]

    function xya_GradLambda_wa(wa_data)
      !
      ! スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradLambda_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型経度微分した格子点データ

      xya_GradLambda_wa = xya_wa(wa_data,ipow=0,iflag=-1)

    end function xya_GradLambda_wa
Function :
xya_GradLambda_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(多層用).

[Source]

    function xya_GradLambda_wa(wa_data)
      !
      ! スペクトルデータに勾配型経度微分 ∂/∂λ を作用する(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradLambda_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型経度微分した格子点データ

      xya_GradLambda_wa = xya_wa(wa_data,ipow=0,iflag=-1)

    end function xya_GradLambda_wa
Function :
xya_GradLat_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(多層用).

[Source]

    function xya_GradLat_wa(wa_data)
      !
      ! スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて
      ! 格子点データに変換して返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradLat_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型緯度微分した格子点データ

      xya_GradLat_wa = xya_wa(wa_data,ipow=1,iflag=1)

    end function xya_GradLat_wa
Function :
xya_GradLat_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて 格子点データに変換して返す(多層用).

[Source]

    function xya_GradLat_wa(wa_data)
      !
      ! スペクトルデータに勾配型緯度微分 ∂/∂φ を作用させて
      ! 格子点データに変換して返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradLat_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型緯度微分した格子点データ

      xya_GradLat_wa = xya_wa(wa_data,ipow=1,iflag=1)

    end function xya_GradLat_wa
Function :
xya_GradLon_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(多層用).

[Source]

    function xya_GradLon_wa(wa_data)
      !
      ! スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を
      ! 作用させた格子点データを返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradLon_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型経度微分した格子点データ

      xya_GradLon_wa = xya_wa(wa_data,ipow=1,iflag=-1)

    end function xya_GradLon_wa
Function :
xya_GradLon_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型経度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を 作用させた格子点データを返す(多層用).

[Source]

    function xya_GradLon_wa(wa_data)
      !
      ! スペクトルデータに勾配型経度微分 1/cosφ・∂/∂λ を
      ! 作用させた格子点データを返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradLon_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型経度微分した格子点データ

      xya_GradLon_wa = xya_wa(wa_data,ipow=1,iflag=-1)

    end function xya_GradLon_wa
Function :
xya_GradMu_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(多層用).

[Source]

    function xya_GradMu_wa(wa_data)
      !
      ! スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ  (μ=sinφ)
      ! を作用させて格子点データに変換して返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradMu_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型緯度微分した格子点データ

      xya_GradMu_wa = xya_wa(wa_data,ipow=0,iflag=1)

    end function xya_GradMu_wa
Function :
xya_GradMu_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) スペクトルデータを勾配型緯度微分した格子点データ
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ (μ=sinφ) を作用させて格子点データに変換して返す(多層用).

[Source]

    function xya_GradMu_wa(wa_data)
      !
      ! スペクトルデータに勾配型緯度微分 (1-μ^2)∂/∂μ  (μ=sinφ)
      ! を作用させて格子点データに変換して返す(多層用).
      !
      real(8), intent(in)  :: wa_data(:,:)
      !(in) 入力スペクトルデータ
      real(8)              :: xya_GradMu_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) スペクトルデータを勾配型緯度微分した格子点データ

      xya_GradMu_wa = xya_wa(wa_data,ipow=0,iflag=1)

    end function xya_GradMu_wa
Function :
xya_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) 格子点データ(0:im-1,1:jm,:)
wa_data(:,:) :real(8), intent(in)
: (in) スペクトルデータ(nm+1,:)
ipow :integer, intent(in), optional
: (in) 作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: (in) 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
  -1 : 経度微分を作用させた逆変換
   2 : sinφを作用させた逆変換(非実装)
   省略時は 0.

スペクトルデータから格子データへ変換する(多層用).

[Source]

    function xya_wa(wa_data,ipow,iflag)
      !
      ! スペクトルデータから格子データへ変換する(多層用).
      !
      real(8), intent(in)   :: wa_data(:,:)
      !(in) スペクトルデータ(nm+1,:)
      !
      real(8)               :: xya_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) 格子点データ(0:im-1,1:jm,:)

      integer, intent(in), optional  :: ipow      
      !(in) 作用させる 1/cosφ の次数. 省略時は 0. 

      integer, intent(in), optional  :: iflag
      !(in) 変換の種類
      !    0 : 通常の正変換
      !    1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
      !   -1 : 経度微分を作用させた逆変換
      !    2 : sinφを作用させた逆変換(非実装)
      !    省略時は 0.
      !
      integer, parameter  :: ipow_default  = 0
      integer, parameter  :: iflag_default = 0

      integer ipval, ifval, i

      if (present(ipow)) then
         ipval = ipow
      else
         ipval = ipow_default
      endif

      if (present(iflag)) then
         ifval = iflag
      else
         ifval = iflag_default
      endif

      if ( ifval == -1 ) then                        ! 経度微分は 0 
         xya_wa = 0.0D0        
      else if ( ifval == 1 ) then                    ! 緯度微分
         do i=0,im-1
            xya_wa(i,:,:) = ya_GradLat_wa(wa_data) * spread(cos(y_Lat),2,size(wa_data,2))
         enddo
      else if ( ifval == 2 ) then                     ! sinφ をかけた逆変換
         do i=0,im-1
            xya_wa(i,:,:) = ya_wa(wa_data)
         enddo
         xya_wa = xya_wa * spread(sin(xy_Lat),3,size(wa_data,2))
      else
         do i=0,im-1
            xya_wa(i,:,:) = ya_wa(wa_data)
         enddo
      endif

      if ( ipval /= 0 ) then
         xya_wa = xya_wa/spread(cos(xy_Lat)**ipval,3,size(wa_data,2))
      end if

    end function xya_wa
Function :
xya_wa(0:im-1,1:jm,size(wa_data,2)) :real(8)
: (out) 格子点データ(0:im-1,1:jm,:)
wa_data(:,:) :real(8), intent(in)
: (in) スペクトルデータ(nm+1,:)
ipow :integer, intent(in), optional
: (in) 作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: (in) 変換の種類
   0 : 通常の正変換
   1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
  -1 : 経度微分を作用させた逆変換
   2 : sinφを作用させた逆変換(非実装)
   省略時は 0.

スペクトルデータから格子データへ変換する(多層用).

[Source]

    function xya_wa(wa_data,ipow,iflag)
      !
      ! スペクトルデータから格子データへ変換する(多層用).
      !
      real(8), intent(in)   :: wa_data(:,:)
      !(in) スペクトルデータ(nm+1,:)
      !
      real(8)               :: xya_wa(0:im-1,1:jm,size(wa_data,2))
      !(out) 格子点データ(0:im-1,1:jm,:)

      integer, intent(in), optional  :: ipow      
      !(in) 作用させる 1/cosφ の次数. 省略時は 0. 

      integer, intent(in), optional  :: iflag
      !(in) 変換の種類
      !    0 : 通常の正変換
      !    1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
      !   -1 : 経度微分を作用させた逆変換
      !    2 : sinφを作用させた逆変換(非実装)
      !    省略時は 0.
      !
      integer, parameter  :: ipow_default  = 0
      integer, parameter  :: iflag_default = 0

      integer ipval, ifval, i

      if (present(ipow)) then
         ipval = ipow
      else
         ipval = ipow_default
      endif

      if (present(iflag)) then
         ifval = iflag
      else
         ifval = iflag_default
      endif

      if ( ifval == -1 ) then                        ! 経度微分は 0 
         xya_wa = 0.0D0        
      else if ( ifval == 1 ) then                    ! 緯度微分
         do i=0,im-1
            xya_wa(i,:,:) = ya_GradLat_wa(wa_data) * spread(cos(y_Lat),2,size(wa_data,2))
         enddo
      else if ( ifval == 2 ) then                     ! sinφ をかけた逆変換
         do i=0,im-1
            xya_wa(i,:,:) = ya_wa(wa_data)
         enddo
         xya_wa = xya_wa * spread(sin(xy_Lat),3,size(wa_data,2))
      else
         do i=0,im-1
            xya_wa(i,:,:) = ya_wa(wa_data)
         enddo
      endif

      if ( ipval /= 0 ) then
         xya_wa = xya_wa/spread(cos(xy_Lat)**ipval,3,size(wa_data,2))
      end if

    end function xya_wa
y_AvrLon_xy( xy_data ) result(y_AvrLon_xy)
Function :
y_AvrLon_xy(1:jm) :real(8)
: (out) 平均された 1 次元緯度(Y)格子点
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの経度(X)方向平均(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#y_AvrLon_xy

y_AvrLon_xy( xy_data ) result(y_AvrLon_xy)
Function :
y_AvrLon_xy(1:jm) :real(8)
: (out) 平均された 1 次元緯度(Y)格子点
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの経度(X)方向平均(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#y_AvrLon_xy

y_AvrLon_xy( xy_data ) result(y_AvrLon_xy)
Function :
y_AvrLon_xy(1:jm) :real(8)
: (out) 平均された 1 次元緯度(Y)格子点
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの経度(X)方向平均(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

Original external subprogram is w_zonal_module#y_AvrLon_xy

y_IntLon_xy( xy_data ) result(y_IntLon_xy)
Function :
y_IntLon_xy(1:jm) :real(8)
: (out) 積分された 1 次元緯度(Y)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの経度(X)方向積分(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#y_IntLon_xy

y_IntLon_xy( xy_data ) result(y_IntLon_xy)
Function :
y_IntLon_xy(1:jm) :real(8)
: (out) 積分された 1 次元緯度(Y)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの経度(X)方向積分(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#y_IntLon_xy

y_IntLon_xy( xy_data ) result(y_IntLon_xy)
Function :
y_IntLon_xy(1:jm) :real(8)
: (out) 積分された 1 次元緯度(Y)格子点データ
xy_data(0:im-1,1:jm) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データ(0:im-1,1:jm)

2 次元緯度経度格子点データの経度(X)方向積分(1 層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

Original external subprogram is w_zonal_module#y_IntLon_xy

y_Lat
Variable :
y_Lat(:) :real(8), allocatable
: 緯度経度

Original external subprogram is la_module#y_Lat

y_Lat
Variable :
y_Lat(:) :real(8), allocatable
: 緯度経度

Original external subprogram is la_module#y_Lat

y_Lat
Variable :
y_Lat(:) :real(8), allocatable
: 緯度経度

Original external subprogram is la_module#y_Lat

y_Lat
Variable :
y_Lat(:) :real(8), allocatable
: 緯度経度

Original external subprogram is w_zonal_module#y_Lat

y_Lat
Variable :
y_Lat(:) :real(8), allocatable
: 緯度経度

Original external subprogram is w_zonal_module#y_Lat

y_Lat
Variable :
y_Lat(:) :real(8), allocatable
: 緯度経度

Original external subprogram is w_zonal_module#y_Lat

y_Lat_Weight
Variable :
y_Lat_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is la_module#y_Lat_Weight

y_Lat_Weight
Variable :
y_Lat_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is la_module#y_Lat_Weight

y_Lat_Weight
Variable :
y_Lat_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is la_module#y_Lat_Weight

y_Lat_Weight
Variable :
y_Lat_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is w_zonal_module#y_Lat_Weight

y_Lat_Weight
Variable :
y_Lat_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is w_zonal_module#y_Lat_Weight

y_Lat_Weight
Variable :
y_Lat_Weight(:) :real(8), allocatable
: 座標重み

Original external subprogram is w_zonal_module#y_Lat_Weight

Function :
ya_AvrLon_xya(1:jm,size(xya_data,3)) :real(8)
: (out) 平均された 1 次元緯度(Y)格子点の並び(1:jm,*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの経度(X)方向平均(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

[Source]

    function ya_AvrLon_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの経度(X)方向平均(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, 
      ! x_X_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8)             :: ya_AvrLon_xya(1:jm,size(xya_data,3))
      !(out) 平均された 1 次元緯度(Y)格子点の並び(1:jm,*)

      ya_AvrLon_xya = ya_IntLon_xya(xya_data)/sum(x_Lon_Weight)

    end function ya_AvrLon_xya
Function :
ya_AvrLon_xya(1:jm,size(xya_data,3)) :real(8)
: (out) 平均された 1 次元緯度(Y)格子点の並び(1:jm,*)
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの経度(X)方向平均(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.

[Source]

    function ya_AvrLon_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの経度(X)方向平均(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, 
      ! x_X_Weight の総和で割ることで平均している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8)             :: ya_AvrLon_xya(1:jm,size(xya_data,3))
      !(out) 平均された 1 次元緯度(Y)格子点の並び(1:jm,*)

      ya_AvrLon_xya = ya_IntLon_xya(xya_data)/sum(x_Lon_Weight)

    end function ya_AvrLon_xya
Function :
ya_IntLon_xya(1:jm,size(xya_data,3)) :real(8)
: (out) 積分された 1 次元緯度(Y)格子点データの並び
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの経度(X)方向積分(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

[Source]

    function ya_IntLon_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの経度(X)方向積分(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8)             :: ya_IntLon_xya(1:jm,size(xya_data,3))
      !(out) 積分された 1 次元緯度(Y)格子点データの並び

      integer :: i

      ya_IntLon_xya = 0.0D0
      do i=0,im-1
         ya_IntLon_xya = ya_IntLon_xya + xya_data(i,:,:) * x_Lon_Weight(i)
      enddo

    end function ya_IntLon_xya
Function :
ya_IntLon_xya(1:jm,size(xya_data,3)) :real(8)
: (out) 積分された 1 次元緯度(Y)格子点データの並び
xya_data(0:,:,:) :real(8), intent(in)
: (in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

2 次元緯度経度格子点データの経度(X)方向積分(多層用).

実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.

[Source]

    function ya_IntLon_xya(xya_data)
      !
      ! 2 次元緯度経度格子点データの経度(X)方向積分(多層用).
      !
      ! 実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している. 
      !
      real(8), intent(in) :: xya_data(0:,:,:)
      !(in) 2 次元経度緯度格子点データの並び(0:im-1,1:jm,*)

      real(8)             :: ya_IntLon_xya(1:jm,size(xya_data,3))
      !(out) 積分された 1 次元緯度(Y)格子点データの並び

      integer :: i

      ya_IntLon_xya = 0.0D0
      do i=0,im-1
         ya_IntLon_xya = ya_IntLon_xya + xya_data(i,:,:) * x_Lon_Weight(i)
      enddo

    end function ya_IntLon_xya