Class wa_wave_module_sjpack
In: libsrc/wa_wave_module_sjpack/wa_wave_module_sjpack.f90

wa_wave_module_sjpack

Authors:Shin-ichi Takehiro, Youhei SASAKI
Version:$Id: wa_wave_module_sjpack.f90 586 2013-05-23 17:42:12Z uwabami $
Copyright&License:See COPYRIGHT

概要

  spml/wa_module_sjpack モジュールは球面上での 2 次元流体運動を
  球面調和函数を用いたスペクトル法によって東西 1 波数数値計算するための
  Fortran90 関数を提供する.

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

  wa_wave_module_sjpack は実際には基本変換, 微分計算をそれぞれ担っている
  下部モジュール wa_wave_base_module_sjpack, wa_wave_deriv_module_sjpack,
  wa_wave_interpolate_module_sjpack, および 1 層用のモジュール
  w_wave_module_sjpack からなっている.

  内部で ISPACK の LJPACK(SJPACK) の Fortran77 サブルーチンを呼んでいる.
  スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法に
  ついては ISPACK/SJPACK のマニュアルを参照されたい.

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

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

命名法

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

各データの種類の説明

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

変数・手続き群の要約

初期化

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

終了処理

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

座標変数

y_Lat :格子点座標(経度座標)を格納した 1 次元配列
y_Lat_Weight :重み座標を格納した 1 次元配列
xy_Lat :格子点データの緯度座標(格子点データ型 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 層用)

微分(λ,μ=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 :スペクトルデータから任意の点での値を求める.

Methods

Included Modules

dc_message w_wave_module_sjpack wa_wave_base_module_sjpack wa_wave_deriv_module_sjpack wa_wave_interpolate_module_sjpack

Public Instance methods

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

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

Original external subprogram is w_wave_module_sjpack#Interpolate_w

a_Interpolate_wa( wa_data, alon, alat ) result(a_Interpolate_array00_wa)
Function :
a_Interpolate_array00_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 から補間計算する

Original external subprogram is wa_wave_interpolate_module_sjpack#a_Interpolate_wa

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_wave_module_sjpack#l_nm

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

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

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

Original external subprogram is w_wave_module_sjpack#l_nm

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

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

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

Original external subprogram is w_wave_module_sjpack#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_wave_module_sjpack#l_nm

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_wave_module_sjpack#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_wave_module_sjpack#nm_l

rn
Variable :
rn(:,:) :real(8), allocatable
: ラプラシアン演算用配列(w_module と互換性を保つため)

スペクトルデータのラプラシアンを計算するための係数 配列のサイズは(2*(nm-m+1), 2)

r(L,1) には L 番目の格納位置のスペクトルに対するラプラシアン計算の 係数 -n(n+1) の値が格納されている.

Original external subprogram is w_wave_module_sjpack#rn

w_DLon_w( w_data ) result(w_DLon_w)
Function :
w_DLon_w(2*(nn-m+1)) :real(8)
: (out) 入力スペクトルデータのラプラシアン
w_data(2*(nn-m+1)) :real(8), intent(in)
: (in) 入力スペクトルデータ

入力スペクトルデータに経度微分∂/∂λを作用する.

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

Original external subprogram is w_wave_module_sjpack#w_DLon_w

w_DivLat_xy( xy_data ) result(w_DivLat_xy)
Function :
w_DivLat_xy(2*(nm-m+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_wave_module_sjpack#w_DivLat_xy

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

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

Original external subprogram is w_wave_module_sjpack#w_DivLon_xy

w_Div_xy_xy( xy_u, xy_v ) result(w_Div_xy_xy)
Function :
w_Div_xy_xy(2*(nm-m+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_wave_module_sjpack#w_Div_xy_xy

w_LaplaInv_w( w_data ) result(w_LaplaInv_w)
Function :
w_LaplaInv_w(2*(nm-m+1)) :real(8)
: (out) スペクトルデータの逆ラプラシアン
w_data(2*(nm-m+1)) :real(8), intent(in)
: (in) 入力スペクトルデータ

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

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

を作用する(1 層用).

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

Original external subprogram is w_wave_module_sjpack#w_LaplaInv_w

w_Lapla_w( w_data ) result(w_Lapla_w)
Function :
w_Lapla_w(2*(nm-m+1)) :real(8)
: (out) 入力スペクトルデータのラプラシアン
w_data(2*(nm-m+1)) :real(8), intent(in)
: (in) 入力スペクトルデータ

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

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

を作用する(1 層用).

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

Original external subprogram is w_wave_module_sjpack#w_Lapla_w

w_xy( xy_data, [ipow], [iflag] ) result(w_xy)
Function :
w_xy(2*(nn-m+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 : 緯度微分 1/cosφ・∂(f cos^2φ)/∂φ を作用させた正変換
   2 : sinφを作用させた正変換
 省略時は 0.

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

Original external subprogram is w_wave_module_sjpack#w_xy

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

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

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

Original external subprogram is wa_wave_deriv_module_sjpack#wa_DLon_wa

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

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

Original external subprogram is wa_wave_deriv_module_sjpack#wa_DivLambda_xya

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

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

Original external subprogram is wa_wave_deriv_module_sjpack#wa_DivLat_xya

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

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

Original external subprogram is wa_wave_deriv_module_sjpack#wa_DivLon_xya

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

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

Original external subprogram is wa_wave_deriv_module_sjpack#wa_DivMu_xya

wa_Div_xya_xya( xya_u, xya_v ) result(wa_Div_xya_xya)
Function :
wa_Div_xya_xya((nm+1)**2,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 つの入力格子点データをベクトル成分とする発散を計算し, スペクトルデータとして返す(多層用).

Original external subprogram is wa_wave_deriv_module_sjpack#wa_Div_xya_xya

Subroutine :

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

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

[Source]

  subroutine wa_Finalize
    !
    ! モジュールの終了処理(割り付け配列の解放)をおこなう. 
    !
    ! 解像度を変更する際にはこのサブルーチンを呼んで終了処理を
    ! おこなったのちに再度 wa_Initial で初期設定しなければ
    ! ならない. 
    !
    call w_Finalize
    call wa_base_Finalize

    call MessageNotify('M','wa_Finalize', 'wa_wave_module_sjpack (2014/05/18) is finalized')

  end subroutine wa_Finalize
Subroutine :
n_in :integer,intent(in)
: 切断波数
m_in :integer,intent(in)
: 東西波数
i_in :integer,intent(in)
: 格子点数(東西)
j_in :integer,intent(in)
: 格子点数(南北)
k_in :integer,intent(in)
: 最大データ数(層数)

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

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

SNPACK 用 wa_initial との互換性のために引数 k_in が用意されているが, このパラメターによって同時に処理できる変数の数(層数)を制限される事はない.

[Source]

  subroutine wa_Initial(n_in,m_in,i_in,j_in,k_in)
    !
    ! スペクトル変換の格子点数, 波数, 最大データ数(層数)および 
    ! OPENMP 使用時の最大スレッド数を設定する.
    !
    ! 他の関数を呼ぶ前に, 最初にこのサブルーチンを呼んで初期設定を
    ! しなければならない. 
    !
    ! SNPACK 用 wa_initial との互換性のために引数 k_in が用意されているが, 
    ! このパラメターによって同時に処理できる変数の数(層数)を制限される事はない.
    !
    integer,intent(in) :: i_in                ! 格子点数(東西)
    integer,intent(in) :: j_in                ! 格子点数(南北)
    integer,intent(in) :: n_in                ! 切断波数
    integer,intent(in) :: m_in                ! 東西波数
    integer,intent(in) :: k_in                ! 最大データ数(層数)

    call w_Initial(n_in,m_in,i_in,j_in)
    call wa_base_Initial(k_in)

    call MessageNotify('M','wa_initial', 'wa_wave_module_sjpack (2014/05/18) is initialized')

  end subroutine wa_Initial
wa_LaplaInv_wa( wa_data ) result(wa_LaplaInv_wa)
Function :
wa_LaplaInv_wa(2*(nm-m+1),size(wa_data,2)) :real(8)
: (out) スペクトルデータの逆ラプラシアン
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

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

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

を作用する(多層用).

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

Original external subprogram is wa_wave_deriv_module_sjpack#wa_LaplaInv_wa

wa_Lapla_wa( wa_data ) result(wa_Lapla_wa)
Function :
wa_data(:,:) :real(8), intent(in)
: (in) 入力スペクトルデータ

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

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

を作用する(多層用).

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

Original external subprogram is wa_wave_deriv_module_sjpack#wa_Lapla_wa

wa_xya( xya_data, [ipow], [iflag] ) result(wa_xya)
Function :
wa_xya(2*(nm-m+1),size(xya_data,3)) :real(8)
: (out) スペクトルデータ(2*(nm-m+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 : 緯度微分 1/cosφ・∂(f cos^2φ)/∂φ を作用させた正変換
   2 : sinφを作用させた正変換
 省略時は 0.

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

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

Original external subprogram is wa_wave_base_module_sjpack#wa_xya

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

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

Original external subprogram is w_wave_module_sjpack#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(2*(nm-m+1)) :real(8), intent(in)
: (in) 入力スペクトルデータ

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

Original external subprogram is w_wave_module_sjpack#xy_GradLon_w

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

Original external subprogram is w_wave_module_sjpack#xy_Lat

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

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

Original external subprogram is w_wave_module_sjpack#xy_w

xya_GradLambda_wa( wa_data ) result(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) 入力スペクトルデータ

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

Original external subprogram is wa_wave_deriv_module_sjpack#xya_GradLambda_wa

xya_GradLat_wa( wa_data ) result(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) 入力スペクトルデータ

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

Original external subprogram is wa_wave_deriv_module_sjpack#xya_GradLat_wa

xya_GradLon_wa( wa_data ) result(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φ・∂/∂λ を 作用させた格子点データを返す(多層用).

Original external subprogram is wa_wave_deriv_module_sjpack#xya_GradLon_wa

xya_GradMu_wa( wa_data ) result(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φ) を作用させて格子点データに変換して返す(多層用).

Original external subprogram is wa_wave_deriv_module_sjpack#xya_GradMu_wa

xya_wa( wa_data, [ipow], [iflag] ) result(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)*(nm+1),:)
ipow :integer, intent(in), optional
: (in) 作用させる 1/cosφ の次数. 省略時は 0.
iflag :integer, intent(in), optional
: (in) 変換の種類
   0 : 通常の正変換
  -1 : 経度微分を作用させた逆変換
   1 : 緯度微分 cosφ・∂/∂φ を作用させた逆変換
   2 : sinφを作用させた逆変換
   省略時は 0.

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

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

Original external subprogram is wa_wave_base_module_sjpack#xya_wa

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

Original external subprogram is w_wave_module_sjpack#y_Lat

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

Original external subprogram is w_wave_module_sjpack#y_Lat_Weight