!----------------------------------------------------------------------
!     Copyright (c) 2002 Shin-ichi Takehiro. All rights reserved.
!----------------------------------------------------------------------
!
!表題  T2PACK/ISPACK-F90 テストプログラム
!
!履歴  2002/01/25  竹広真一
!
program t2pack_test

  use t2pack

  implicit none
  integer, parameter  :: im=16, jm=8        ! 格子点の設定(X,Y)
  integer, parameter  :: km=5,  lm=5        ! 切断波数の設定(X,Y)
  real(8), parameter  :: xmin=0,  xmax=1    ! X 座標範囲
  real(8), parameter  :: ymin=0, ymax=1     ! Y 座標範囲

  real(8), parameter  :: pi=3.1415926535897932385D0
  real(8), parameter  :: eps=1D-10

  real(8), dimension(0:jm,0:im-1) :: gg_data     ! 格子点データ
  real(8), dimension(0:jm,0:im-1) :: gg_data1    ! 格子点データ
  real(8), dimension(0:jm,0:im-1) :: gg_data2    ! 格子点データ
  real(8), dimension(-km:km,0:lm) :: et_data     ! スペクトルデータ

  integer :: k, l, i, j

  call t2initial(im,jm,km,lm,xmin,xmax,ymin,ymax)

  !write(6,*) gg_x(2,:)
  !write(6,*)
  !write(6,*) gg_y(:,2)

  !gg_data = sin(2*pi*gg_x) * gg_y
  gg_data = cos(4*pi*gg_x) * (2*gg_y**2-1)

  et_data = et_gg(gg_data)

  do l=0,lm
     do k=-km,km
        if ( abs(et_data(k,l)) > eps ) write(6,*) k,l, et_data(k,l)
     enddo
  enddo

  gg_data1 = gg_et(et_data) - gg_data

  write(6,*)'Inverse Transform'
  do j=0,jm
     do i=0,im-1
        if ( abs(gg_data1(j,i)) > eps ) write(6,*) i,j, gg_data1(j,i)
     enddo
  enddo

  gg_data1 = gg_et(et_dx_et(et_data))  &
       + 4*pi*sin(4*pi*gg_x) * (2*gg_y**2-1)

  write(6,*)'X derivertve'
  do j=0,jm
     do i=0,im-1
        if ( abs(gg_data1(j,i)) > eps ) write(6,*) i,j, gg_data1(j,i)
     enddo
  enddo

  gg_data1 = gg_et(et_dy_et(et_data))  &
       - cos(4*pi*gg_x) * 4*gg_y

  write(6,*)'Y derivertve'
  do j=0,jm
     do i=0,im-1
        if ( abs(gg_data1(j,i)) > eps ) write(6,*) i,j, gg_data1(j,i)
     enddo
  enddo

  gg_data1 = sin(2*pi*gg_x)*gg_y
  gg_data2 = gg_y
  gg_data =  2*pi*cos(2*pi*gg_x)*gg_y

  et_data = et_jacobian_et_et(et_gg(gg_data1),et_gg(gg_data2))
  gg_data = gg_et(et_data) - gg_data

  write(6,*)'Jacobian'
  do j=0,jm
     do i=0,im-1
        if ( abs(gg_data(j,i)) > eps ) write(6,*) i,j, gg_data(j,i)
     enddo
  enddo


end program t2pack_test
