Class | wa_integral_module |
In: |
libsrc/wa_module/wa_integral_module.f90
|
Authors: | Shin-ichi Takehiro, Youhei SASAKI |
Version: | $Id: wa_integral_module.f90 590 2013-08-19 08:48:21Z uwabami $ |
Copyright&License: | See COPYRIGHT |
spml/wa_integral_module モジュールは球面上での流体運動を 球面調和函数を用いたスペクトル法によって数値計算するための モジュール wa_module の下部モジュールであり, 積分・平均計算のための Fortran90 関数を提供する.
球面上の 1 層モデル用 w_integral_module モジュールを多層モデル用に 拡張したものであり, 同時に複数個のスペクトルデータ, 格子点データに 対する変換が行える.
内部で ISPACK の SPPACK と SNPACK の Fortran77 サブルーチンを呼んでいる. スペクトルデータおよび格子点データの格納方法や変換の詳しい計算法に ついては ISPACK/SNPACK,SPPACK のマニュアルを参照されたい.
Function : | |||
a_AvrLat_ya(size(ya_data,2)) : | real(8)
| ||
ya_data(:,:) : | real(8), intent(in)
|
1 次元(Y)格子点データの緯度(Y)方向平均(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
function a_AvrLat_ya(ya_data) ! ! 1 次元(Y)格子点データの緯度(Y)方向平均(多層用). ! ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, ! y_Y_Weight の総和で割ることで平均している. ! real(8), intent(in) :: ya_data(:,:) !(in) 1 次元緯度格子点データの並び(1:jm,*) real(8) :: a_AvrLat_ya(size(ya_data,2)) !(out) 平均値の並び(*) a_AvrLat_ya = a_IntLat_ya(ya_data)/sum(y_Lat_Weight) end function a_AvrLat_ya
Function : | |||
a_AvrLonLat_xya(size(xya_data,3)) : | real(8)
| ||
xya_data(0:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの全領域平均(多層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算し, x_X_Weight*y_Y_Weight の総和で割ることで平均している.
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)
| ||
xa_data(0:,:) : | real(8), intent(in)
|
経度平均
1 次元(X)格子点データの経度(X)方向平均(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
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_IntLat_ya(size(ya_data,2)) : | real(8)
| ||
ya_data(:,:) : | real(8), intent(in)
|
1 次元緯度(Y)格子点データの Y 方向積分(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
function a_IntLat_ya(ya_data) ! ! 1 次元緯度(Y)格子点データの Y 方向積分(多層用). ! ! 実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している. ! real(8), intent(in) :: ya_data(:,:) !(in) 1 次元緯度(Y)格子点データの並び(1:jm,*) real(8) :: a_IntLat_ya(size(ya_data,2)) !(out) 積分値の並び(*) integer :: j a_IntLat_ya = 0.0D0 do j=1,jm a_IntLat_ya = a_IntLat_ya + ya_data(j,:) * y_Lat_Weight(j) enddo end function a_IntLat_ya
Function : | |||
a_IntLonLat_xya(size(xya_data,3)) : | real(8)
| ||
xya_data(0:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの全領域積分(多層用).
実際には格子点データ各点毎に x_X_Weight, y_Y_Weight をかけた 総和を計算している.
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)
| ||
xa_data(0:,:) : | real(8), intent(in)
|
経度積分
1 次元経度(X)格子点データの X 方向積分(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
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 : | |||
xa_AvrLat_xya(0:im-1,size(xya_data,3)) : | real(8)
| ||
xya_data(0:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの緯度(Y)方向平均(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算し, y_Y_Weight の総和で割ることで平均している.
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)
| ||
xya_data(0:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの緯度(Y)方向積分(多層用).
実際には格子点データ各点毎に y_Y_Weight をかけた総和を計算している.
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 : | |||
ya_AvrLon_xya(1:jm,size(xya_data,3)) : | real(8)
| ||
xya_data(0:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの経度(X)方向平均(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算し, x_X_Weight の総和で割ることで平均している.
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)
| ||
xya_data(0:,:,:) : | real(8), intent(in)
|
2 次元緯度経度格子点データの経度(X)方向積分(多層用).
実際には格子点データ各点毎に x_X_Weight をかけた総和を計算している.
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