| Class | wa_base_module |
| In: |
src/wa_base_module.f90
|
| k_in : | integer,intent(in)
|
————— 初期化 ——————
subroutine wa_base_initial(k_in)
integer,intent(in) :: k_in ! 最大データ数(層数)を記憶
integer :: iw
km = k_in
allocate(ipk(km,((nm+1)/2+nm+1)*2)) ! 変換用配列(多層用)
allocate(pk(km,((nm+1)/2+nm+1)*jm)) ! 変換用配列(多層用)
allocate(rk(km,((nm+1)/2*2+3)*(nm/2+1))) ! 変換用配列(多層用)
allocate(q(km*((nm+1)/2+nm+1)*jm)) ! 作業配列(多層用)
iw=km*(im+3*(nm+1))*jm
allocate(ws(iw),ww(iw)) ! 作業用配列(多層用)
call snkini(nm,jm,km,ip,p,r,ipk,pk,rk)
end subroutine wa_base_Initial
| xya_wa(im,jm,size(wa_data,2)) : | real(8)
| ||
| wa_data(:,:) : | real(8), intent(in)
| ||
| ipow : | integer, intent(in), optional
| ||
| iflag : | integer, intent(in), optional
|
————— 基本変換 ——————
function xya_wa(wa_data,ipow,iflag) ! 球面調和関数スペクトル -> 格子点
real(8), intent(in) :: wa_data(:,:) ! スペクトル
real(8) :: xya_wa(im,jm,size(wa_data,2)) ! 格子点
integer, intent(in), optional :: ipow ! 作用させる 1/cosφ の次数
integer, intent(in), optional :: iflag ! 変換の種類
integer, parameter :: ipow_default = 0
integer, parameter :: iflag_default = 0
integer ipval, ifval
integer k
if (present(ipow)) then
ipval = ipow
else
ipval = ipow_default
endif
if (present(iflag)) then
ifval = iflag
else
ifval = iflag_default
endif
k= size(wa_data,2)
if ( k > km ) then
call MessageNotify('E','xya_wa','Size of 3rd dimension invalid.')
else
call snts2g(nm,im,im,jm,jm,size(wa_data,2),wa_data,xya_wa, it,t,y,ipk(1:k,:),pk(1:k,:),rk(1:k,:),ia,a,q,ws,ww,ipval,ifval)
endif
end function xya_wa