!
!= 変数探査
!
! Authors::   Yasuhiro MORIKAWA, Eizi TOYODA
! Version::   $Id: gtvarsearch.f90,v 1.3 2006/01/15 07:10:30 morikawa Exp $
! Tag Name::  $Name: gt4f90io-20060719 $
! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
! License::   See COPYRIGHT[link:../../COPYRIGHT]
!
! 以下のサブルーチン、関数は gtdata_generic から gtdata_generic#GTVarSearch
! として提供されます。
!

module gtvarsearch
  !
  !== 変数探査用モジュール
  !
  ! 利用に関しては gtdata_generic#GTVarSearch もしくは
  ! gtvarsearch.f90#GTVarSearchInit, gtvarsearch.f90#GTVarSearchNext
  ! を参照してください。
  !
  use an_types, only: AN_VARIABLE_SEARCH
  type(AN_VARIABLE_SEARCH), save:: an
end module

subroutine GTVarSearchNext(url, end)
  !
  !== 変数探査サブルーチン
  !
  ! あるファイル名 urlBase に依存する変数すべてを取得するには、
  ! まず GTVarSearch(urlBase) (下記のサブルーチン) を呼び出し、
  ! その後無限ループの中で GTVarSearch(url, end) を呼び出します。
  ! そうすることで url に1つ1つの変数名が返ります。
  ! *end* が真になったとき、すべての変数名を探索し終えたことになります。
  !
  !=== 例
  !
  !    use gt4f90io
  !    character(len = STRING) :: filename, varname
  !    logical                 :: end
  !
  !    write(*,*) "Enter file name: "
  !    read(*,*) filename
  !
  !    call GTVarSearch(filename)
  !    do
  !      call GTVarSearch(varname, end)
  !      if (end) exit
  !      write(*, *) trim(varname)
  !    enddo
  !
  use an_generic, only: var_search
  use gtvarsearch
  use dc_trace, only: beginsub, endsub
  character(len = *), intent(out):: url
  logical, intent(out):: end
  call beginsub('gtvarsearchnext')
  call var_search(an, url=url, end=end)
  call endsub('gtvarsearchnext', 'url=%c end=%y', c1=trim(url), L=(/end/))
end subroutine

subroutine GTVarSearchInit(urlBase)
  !
  !== 変数探査初期化サブルーチン
  !
  ! 上記の GTVarSearch を参照してください。
  !
  use an_generic, only: var_search
  use gtvarsearch
  use dc_trace, only: beginsub, endsub
  character(len = *), intent(in):: urlBase
  call beginsub('gtvarsearchinit', 'urlbase=<%c>', c1=trim(urlbase))
  call var_search(an, urlBase=urlBase)
  call endsub('gtvarsearchinit')
end subroutine
