| Path: | gtool/gtool_historyauto/historyautochkoutput.f90 |
| Last Update: | Tue Dec 28 18:53:09 +0900 2010 |
| Authors: | Yasuhiro MORIKAWA |
| Version: | $Id: historyautochkoutput.f90,v 1.2 2010-12-28 09:53:09 morikawa Exp $ |
| Tag Name: | $Name: gtool5-20101228-1 $ |
| Copyright: | Copyright (C) GFD Dennou Club, 2010-. All rights reserved. |
| License: | See COPYRIGHT |
| Function : | |||
| result : | logical | ||
| varname : | character(*), intent(in)
|
変数の出力設定の確認を行います.
varname に指定された変数名が出力されるよう設定されている 場合には true が, 出力されないよう設定されている場合は false が返ります.
HistoryAutoCreate による初期設定がなされていない場合や, varname に指定された変数名が HistoryAutoAddVariable によって 登録されていない場合, 返り値に false が返ります.
Check output setting of a variable.
If output setting of varname is valid, true is returned. If output setting of varname is invalid, false is returned.
If initialization with "HistoryAutoCreate" is not done yet, false is returned. If varname is invalid, false is returned.
function HistoryAutoChkOutput( varname ) result(result)
!
! 変数の出力設定の確認を行います.
!
! *varname* に指定された変数名が出力されるよう設定されている
! 場合には *true* が, 出力されないよう設定されている場合は
! *false* が返ります.
!
! *HistoryAutoCreate* による初期設定がなされていない場合や,
! *varname* に指定された変数名が HistoryAutoAddVariable によって
! 登録されていない場合, 返り値に *false* が返ります.
!
! Check output setting of a variable.
!
! If output setting of *varname* is valid, *true* is returned.
! If output setting of *varname* is invalid, *false* is returned.
!
! If initialization with "HistoryAutoCreate" is not done yet, *false* is returned.
! If *varname* is invalid, *false* is returned.
!
use gtool_historyauto_internal, only: initialized, numdims, numvars, varname_vars, output_valid_vars
use dc_types, only: DP, STRING, TOKEN
implicit none
logical:: result
character(*), intent(in):: varname
! 変数の名前.
! Variable name
integer:: i, vnum
integer, save:: svnum = 1
character(*), parameter:: subname = "HistoryAutoChkOutput"
continue
! 初期設定チェック
! Check initialization
!
if ( .not. initialized ) then
result = .false.
goto 999
end if
! 変数 ID のサーチ
! Search variable ID
!
VarSearch: do
do i = svnum, numvars
if ( trim( varname_vars(i) ) == trim(varname) ) then
vnum = i
exit VarSearch
end if
end do
do i = 1, svnum - 1
if ( trim( varname_vars(i) ) == trim(varname) ) then
vnum = i
exit VarSearch
end if
end do
result = .false.
goto 999
end do VarSearch
svnum = vnum
! 出力設定の確認
! Check output setting
!
result = output_valid_vars( vnum )
999 continue
end function HistoryAutoChkOutput
| Function : | |||
| result : | logical | ||
| time : | real(DP), intent(in)
| ||
| varname : | character(*), intent(in)
|
変数の出力設定の確認を行います.
varname に指定された変数名が、time のタイミングで出力されるよう 設定されている場合には true が, 出力されないよう設定されている場合は false が返ります.
なお, gtool_historyauto は時間ステップ可変に対応しているため, time のタイミングで出力されるかどうかについては, その前回に出力された時間に依存します. 従って, とある時間の 出力設定の確認は下記のように HistoryAutoPut の前で使用して下さい.
if ( HistoryAutoChkOutputTiming( time, var ) ) then
<some operation ...>
end if
call HistoryAutoPut( time, var, data )
以下のように使用した場合には, 期待するような返り値が 得られないことにご留意下さい.
do i = 1, 10
write(*,*) HistoryAutoChkOutputTiming( i * timestep, var )
end do
HistoryAutoCreate による初期設定がなされていない場合や, varname に指定された変数名が HistoryAutoAddVariable によって 登録されていない場合, 返り値に false が返ります.
Check output setting of a variable.
If varname is output on time, true is returned.
Please use this function as follows.
if ( HistoryAutoChkOutputTiming( time, var ) ) then
<some operation ...>
end if
call HistoryAutoPut( time, var, data )
Following usage does not return correct values.
do i = 1, 10
write(*,*) HistoryAutoChkOutputTiming( i * timestep, var )
end do
If initialization with "HistoryAutoCreate" is not done yet, false is returned. If varname is invalid, false is returned.
function HistoryAutoChkOutputTiming( time, varname ) result(result)
!
! 変数の出力設定の確認を行います.
!
! *varname* に指定された変数名が、*time* のタイミングで出力されるよう
! 設定されている場合には *true* が, 出力されないよう設定されている場合は
! *false* が返ります.
!
! なお, gtool_historyauto は時間ステップ可変に対応しているため,
! *time* のタイミングで出力されるかどうかについては,
! その前回に出力された時間に依存します. 従って, とある時間の
! 出力設定の確認は下記のように HistoryAutoPut の前で使用して下さい.
!
! if ( HistoryAutoChkOutputTiming( time, var ) ) then
! <some operation ...>
! end if
!
! call HistoryAutoPut( time, var, data )
!
! 以下のように使用した場合には, 期待するような返り値が
! 得られないことにご留意下さい.
!
! do i = 1, 10
! write(*,*) HistoryAutoChkOutputTiming( i * timestep, var )
! end do
!
! *HistoryAutoCreate* による初期設定がなされていない場合や,
! *varname* に指定された変数名が HistoryAutoAddVariable によって
! 登録されていない場合, 返り値に *false* が返ります.
!
! Check output setting of a variable.
!
! If *varname* is output on *time*, *true* is returned.
!
! Please use this function as follows.
!
! if ( HistoryAutoChkOutputTiming( time, var ) ) then
! <some operation ...>
! end if
!
! call HistoryAutoPut( time, var, data )
!
! Following usage does not return correct values.
!
! do i = 1, 10
! write(*,*) HistoryAutoChkOutputTiming( i * timestep, var )
! end do
!
! If initialization with "HistoryAutoCreate" is not done yet, *false* is returned.
! If *varname* is invalid, *false* is returned.
!
use gtool_historyauto_internal, only: initialized, numdims, numvars, varname_vars, output_valid_vars, origin_time_vars, histaddvar_vars, newfile_inttime_vars, newfile_createtime_vars, prev_outtime_vars, interval_time_vars, terminus_time_vars
use dc_types, only: DP, STRING, TOKEN
implicit none
logical:: result
real(DP), intent(in):: time
! データの時刻.
! Time of data
character(*), intent(in):: varname
! 変数の名前.
! Variable name
real(DP), parameter:: zero_time = 0.0_DP
integer:: i, vnum
integer, save:: svnum = 1
character(*), parameter:: subname = "HistoryAutoChkOutputTiming"
continue
! 初期設定チェック
! Check initialization
!
if ( .not. initialized ) then
result = .false.
goto 999
end if
! 変数 ID のサーチ
! Search variable ID
!
VarSearch: do
do i = svnum, numvars
if ( trim( varname_vars(i) ) == trim(varname) ) then
vnum = i
exit VarSearch
end if
end do
do i = 1, svnum - 1
if ( trim( varname_vars(i) ) == trim(varname) ) then
vnum = i
exit VarSearch
end if
end do
result = .false.
goto 999
end do VarSearch
svnum = vnum
! 出力設定の確認
! Check output setting
!
result = output_valid_vars( vnum )
if ( .not. result ) goto 999
if ( origin_time_vars(vnum) > time ) then
result = .false.
goto 999
end if
if ( origin_time_vars(vnum) <= time .and. ( terminus_time_vars(vnum) < zero_time .or. terminus_time_vars(vnum) >= time ) .and. .not. histaddvar_vars(vnum) ) then
result = .true.
goto 999
end if
if ( terminus_time_vars(vnum) > zero_time .and. terminus_time_vars(vnum) < time ) then
result = .false.
goto 999
end if
if ( newfile_inttime_vars(vnum) > zero_time ) then
if ( time - newfile_createtime_vars(vnum) >= newfile_inttime_vars(vnum) ) then
result = .true.
goto 999
end if
end if
if ( time - prev_outtime_vars(vnum) >= interval_time_vars(vnum) ) then
result = .true.
goto 999
end if
result = .false.
999 continue
end function HistoryAutoChkOutputTiming