| 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