gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
Functions/Subroutines
historyput.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

recursive subroutine historyputrealex (varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
 データ出力
 
recursive subroutine historyputdoubleex (varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
 データ出力
 
recursive subroutine historyputintex (varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
 データ出力
 
recursive subroutine historyputcharex (varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
 データ出力
 
subroutine historyputaxismpireal (varname, array, history, err)
 
subroutine historyputaxismpidouble (varname, array, history, err)
 
subroutine historyputaxismpiint (varname, array, history, err)
 
subroutine historyputdouble0 (varname, value, history, range, time, quiet, difftime, timed, time_average_store, err)
 データ出力
 
subroutine historyputdouble1 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputdouble2 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputdouble3 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputdouble4 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputdouble5 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputdouble6 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputdouble7 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal0 (varname, value, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal1 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal2 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal3 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal4 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal5 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal6 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputreal7 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint0 (varname, value, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint1 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint2 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint3 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint4 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint5 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint6 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputint7 (varname, array, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine historyputchar0 (varname, value, history, range, time, quiet, difftime, timed, time_average_store, err)
 
subroutine timegoahead (varname, var, head, history, err)
 

Function/Subroutine Documentation

◆ historyputaxismpidouble()

subroutine historyputaxismpidouble ( character(*), intent(in)  varname,
real(dp), dimension(:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
logical, intent(out), optional  err 
)

Definition at line 1944 of file historyput.f90.

1946 !
1947 ! MPI 使用時に, 各々のノード上のデータを単一ファイルに
1948 ! 集約して出力する場合には,
1949 ! このサブルーチンに領域全体の座標データを与えてください.
1950 ! また, HistoryCreate のオプショナル論理型引数 *flag_mpi_gather*
1951 ! に .true. を与えてください.
1952 !
1953 ! HistoryPut よりも後に使用してください
1954 ! HistoryAddVariable, HistoryAddAttr よりも前に使用してください.
1955 !
1956 ! When MPI is used, if data on each node is integrated and
1957 ! output to one file, give data of axes in whole area to
1958 ! this subroutine.
1959 ! And give .true. to optional logical argument *flag_mpi_gather*
1960 ! in "HistoryCreate".
1961 !
1962 ! Use this subroutine after "HistoryPut", and
1963 ! before "HistoryAddVariable", "HistoryAddAttr".
1964 !
1966 use gtdata_generic, only: create, put_attr, put
1967 use gtdata_types, only: gt_variable
1968 use dc_error, only: storeerror, dc_noerr, dc_enotinit, &
1970 use dc_url, only: urlmerge
1971 use dc_date_generic, only: evalbyunit
1972 use dc_date_types, only: dc_difftime
1973 use dc_string, only: tochar, lchar, strhead
1974 use dc_message, only: messagenotify
1977 use dc_trace, only: beginsub, endsub, dbgmessage
1978 use dc_types, only: string, dp
1979 implicit none
1980 character(*), intent(in):: varname
1981 ! 座標変数の名称.
1982 !
1983 ! ここで指定するものは, HistoryCreate の
1984 ! 引数 *dims* で既に指定されてい
1985 ! なければなりません.
1986 !
1987 ! Name of dimensional variable.
1988 !
1989 ! This name must be specified by
1990 ! an argument *dims* in "HistoryCreate".
1991 !
1992 real(DP), intent(in):: array(:)
1993 ! 座標データ.
1994 !
1995 ! Data of axes.
1996 type(GT_HISTORY), intent(inout), optional, target:: history
1997 ! 出力ファイルの設定に関する情報を
1998 ! 格納した GT_HISTORY 型変数
1999 !
2000 ! ここに指定するものは,
2001 ! HistoryCreate によって初期設定
2002 ! されていなければなりません.
2003 !
2004 ! A "GT_HISTORY" type variable that
2005 ! stores information about configuration of
2006 ! an output file
2007 !
2008 ! This must be initialized by
2009 ! "HistoryCreate".
2010 !
2011 logical, intent(out), optional:: err
2012 ! 例外処理用フラグ.
2013 ! デフォルトでは, この手続き内でエラーが
2014 ! 生じた場合, プログラムは強制終了します.
2015 ! 引数 *err* が与えられる場合,
2016 ! プログラムは強制終了せず, 代わりに
2017 ! *err* に .true. が代入されます.
2018 !
2019 ! Exception handling flag.
2020 ! By default, when error occur in
2021 ! this procedure, the program aborts.
2022 ! If this *err* argument is given,
2023 ! .true. is substituted to *err* and
2024 ! the program does not abort.
2025 integer:: stat
2026 character(STRING):: cause_c
2027 character(*), parameter:: subname = "HistoryPutAxisMPIDouble"
2028 continue
2029 call beginsub(subname, 'varname=%c', c1 = trim(varname) )
2030 stat = dc_noerr
2031 cause_c = ""
2032 call dbgmessage('This library is not built with MPI library')
2033 goto 999
2034 ! 終了処理, 例外処理
2035 ! Termination and Exception handling
2036 !
2037999 continue
2038 call storeerror( stat, subname, err, cause_c )
2039 call endsub(subname)
dc_date より提供される手続の引用仕様宣言
日付・時刻に関する構造データ型と定数
エラー処理用モジュール
Definition dc_error.f90:454
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:891
integer, parameter, public dc_noerr
エラー等を保持
Definition dc_error.f90:468
integer, parameter, public dc_enotinit
-400 以下: dc ユーティリティのエラー
Definition dc_error.f90:534
integer, parameter, public gt_ebaddimname
Definition dc_error.f90:511
メッセージの出力
文字型変数の操作
Definition dc_string.f90:83
デバッグ時の追跡用モジュール
Definition dc_trace.f90:150
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:661
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
Definition dc_trace.f90:457
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
Definition dc_trace.f90:580
種別型パラメタを提供します。
Definition dc_types.f90:55
integer, parameter, public dp
倍精度実数型変数
Definition dc_types.f90:92
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition dc_types.f90:137
変数 URL の文字列解析
Definition dc_url.f90:61
type(gt_history), target, save, public default

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_enotinit, dc_error::dc_noerr, gtool_history_internal::default, dc_types::dp, dc_trace::endsub(), dc_error::gt_ebaddimname, dc_error::storeerror(), and dc_types::string.

Here is the call graph for this function:

◆ historyputaxismpiint()

subroutine historyputaxismpiint ( character(*), intent(in)  varname,
integer, dimension(:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
logical, intent(out), optional  err 
)

Definition at line 2041 of file historyput.f90.

2043 !
2044 ! MPI 使用時に, 各々のノード上のデータを単一ファイルに
2045 ! 集約して出力する場合には,
2046 ! このサブルーチンに領域全体の座標データを与えてください.
2047 ! また, HistoryCreate のオプショナル論理型引数 *flag_mpi_gather*
2048 ! に .true. を与えてください.
2049 !
2050 ! HistoryPut よりも後に使用してください
2051 ! HistoryAddVariable, HistoryAddAttr よりも前に使用してください.
2052 !
2053 ! When MPI is used, if data on each node is integrated and
2054 ! output to one file, give data of axes in whole area to
2055 ! this subroutine.
2056 ! And give .true. to optional logical argument *flag_mpi_gather*
2057 ! in "HistoryCreate".
2058 !
2059 ! Use this subroutine after "HistoryPut", and
2060 ! before "HistoryAddVariable", "HistoryAddAttr".
2061 !
2063 use gtdata_generic, only: create, put_attr, put
2064 use gtdata_types, only: gt_variable
2065 use dc_error, only: storeerror, dc_noerr, dc_enotinit, &
2067 use dc_url, only: urlmerge
2068 use dc_date_generic, only: evalbyunit
2069 use dc_date_types, only: dc_difftime
2070 use dc_string, only: tochar, lchar, strhead
2071 use dc_message, only: messagenotify
2074 use dc_trace, only: beginsub, endsub, dbgmessage
2075 use dc_types, only: string, dp
2076 implicit none
2077 character(*), intent(in):: varname
2078 integer, intent(in):: array(:)
2079 type(GT_HISTORY), intent(inout), optional, target:: history
2080 logical, intent(out), optional:: err
2081 integer:: stat
2082 character(STRING):: cause_c
2083 character(*), parameter:: subname = "HistoryPutAxisMPIInt"
2084 continue
2085 call beginsub(subname, 'varname=%c', c1 = trim(varname) )
2086 stat = dc_noerr
2087 cause_c = ""
2088 call dbgmessage('This library is not built with MPI library')
2089 goto 999
2090 ! 終了処理, 例外処理
2091 ! Termination and Exception handling
2092 !
2093999 continue
2094 call storeerror( stat, subname, err, cause_c )
2095 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_enotinit, dc_error::dc_noerr, gtool_history_internal::default, dc_types::dp, dc_trace::endsub(), dc_error::gt_ebaddimname, dc_error::storeerror(), and dc_types::string.

Here is the call graph for this function:

◆ historyputaxismpireal()

subroutine historyputaxismpireal ( character(*), intent(in)  varname,
real, dimension(:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
logical, intent(out), optional  err 
)

Definition at line 1888 of file historyput.f90.

1890 !
1891 ! MPI 使用時に, 各々のノード上のデータを単一ファイルに
1892 ! 集約して出力する場合には,
1893 ! このサブルーチンに領域全体の座標データを与えてください.
1894 ! また, HistoryCreate のオプショナル論理型引数 *flag_mpi_gather*
1895 ! に .true. を与えてください.
1896 !
1897 ! HistoryPut よりも後に使用してください
1898 ! HistoryAddVariable, HistoryAddAttr よりも前に使用してください.
1899 !
1900 ! When MPI is used, if data on each node is integrated and
1901 ! output to one file, give data of axes in whole area to
1902 ! this subroutine.
1903 ! And give .true. to optional logical argument *flag_mpi_gather*
1904 ! in "HistoryCreate".
1905 !
1906 ! Use this subroutine after "HistoryPut", and
1907 ! before "HistoryAddVariable", "HistoryAddAttr".
1908 !
1910 use gtdata_generic, only: create, put_attr, put
1911 use gtdata_types, only: gt_variable
1912 use dc_error, only: storeerror, dc_noerr, dc_enotinit, &
1914 use dc_url, only: urlmerge
1915 use dc_date_generic, only: evalbyunit
1916 use dc_date_types, only: dc_difftime
1917 use dc_string, only: tochar, lchar, strhead
1918 use dc_message, only: messagenotify
1921 use dc_trace, only: beginsub, endsub, dbgmessage
1922 use dc_types, only: string, dp
1923 implicit none
1924 character(*), intent(in):: varname
1925 real, intent(in):: array(:)
1926 type(GT_HISTORY), intent(inout), optional, target:: history
1927 logical, intent(out), optional:: err
1928 integer:: stat
1929 character(STRING):: cause_c
1930 character(*), parameter:: subname = "HistoryPutAxisMPIReal"
1931 continue
1932 call beginsub(subname, 'varname=%c', c1 = trim(varname) )
1933 stat = dc_noerr
1934 cause_c = ""
1935 call dbgmessage('This library is not built with MPI library')
1936 goto 999
1937 ! 終了処理, 例外処理
1938 ! Termination and Exception handling
1939 !
1940999 continue
1941 call storeerror( stat, subname, err, cause_c )
1942 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_enotinit, dc_error::dc_noerr, gtool_history_internal::default, dc_types::dp, dc_trace::endsub(), dc_error::gt_ebaddimname, dc_error::storeerror(), and dc_types::string.

Here is the call graph for this function:

◆ historyputchar0()

subroutine historyputchar0 ( character(*), intent(in)  varname,
character(*), intent(in)  value,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3606 of file historyput.f90.

3609 !
3610 !
3612 use dc_date_types, only: dc_difftime
3613 use dc_types, only: dp
3614 use dc_trace, only: beginsub, endsub, dbgmessage
3615 implicit none
3616 character(*), intent(in):: varname
3617 character(*), intent(in):: value
3618 type(GT_HISTORY), intent(inout), optional, target:: history
3619 character(*), intent(in), optional:: range
3620 real, intent(in), optional:: time
3621 logical, intent(in), optional:: quiet
3622 type(DC_DIFFTIME), intent(in), optional:: difftime
3623 real(DP), intent(in), optional:: timed
3624 logical, intent(in), optional:: time_average_store
3625 logical, intent(out), optional:: err
3626 interface historyputcharex
3627 subroutine historyputcharex( &
3628 & varname, array, arraysize, history, range, &
3629 & time, quiet, difftime, timed, time_average_store, err )
3631 use dc_date_types, only: dc_difftime
3632 use dc_types, only: dp
3633 character(*), intent(in):: varname
3634 integer, intent(in):: arraysize
3635 character(*), intent(in):: array(arraysize)
3636 type(GT_HISTORY), intent(inout), target, optional:: history
3637 character(*), intent(in), optional:: range
3638 real, intent(in), optional:: time
3639 logical, intent(in), optional:: quiet
3640 type(DC_DIFFTIME), intent(in), optional:: difftime
3641 real(DP), intent(in), optional:: timed
3642 logical, intent(in), optional:: time_average_store
3643 logical, intent(out), optional:: err
3644 end subroutine historyputcharex
3645 end interface
3646 character(*), parameter:: subname = "HistoryPutChar0"
3647 continue
3648 call beginsub(subname)
3649 call historyputcharex( &
3650 & varname, & ! (in)
3651 & (/value/), 1, & ! (in)
3652 & history = history, & ! (inout) optional
3653 & range = range, & ! (in) optional
3654 & time = time, & ! (in) optional
3655 & quiet = quiet, & ! (in) optional
3656 & difftime = difftime, & ! (in) optional
3657 & timed = timed, & ! (in) optional
3658 & time_average_store = &
3659 & time_average_store, & ! (in) optional
3660 & err = err ) ! (out) optional
3661 call endsub(subname)
recursive subroutine historyputcharex(varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
データ出力

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputcharex().

Here is the call graph for this function:

◆ historyputcharex()

recursive subroutine historyputcharex ( character(*), intent(in)  varname,
character(*), dimension(arraysize), intent(in)  array,
integer, intent(in)  arraysize,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

データ出力

Parameters
[in]varname

iline 1

こちらは配列サイズを指定する必要があるため、 HistoryPut を利用してください。

Definition at line 1621 of file historyput.f90.

1624 !
1629 !
1633 use gtdata_generic, only: put, gtvarsync, slice, inquire, &
1635 use gtdata_types, only: gt_variable
1636 use dc_types, only: string, dp
1637 use dc_string, only: stoa, printf, tochar, joinchar
1641 use dc_message, only: messagenotify
1642 use dc_url, only: urlsplit, urlmerge
1643 use dc_date_types, only: dc_difftime
1644 use dc_date_generic, only: operator(==), dcdifftimecreate, &
1645 & mod, operator(-), evalbyunit, operator(/), tochar
1646 use dc_trace, only: beginsub, endsub, dbgmessage
1647 implicit none
1648 character(*), intent(in):: varname
1649 integer, intent(in):: arraysize
1650 character(*), intent(in):: array(arraysize)
1651 type(GT_HISTORY), intent(inout), target, optional:: history
1652 character(*), intent(in), optional:: range
1653 ! gtool4 のコンマ記法による
1654 ! データの出力範囲指定
1655 !
1656 ! このオプションを用いる
1657 ! 際には、必ず *HistorySetTime*
1658 ! によって明示的に時刻の設定
1659 ! を行ってください。
1660 ! また、*HistoryGet* と異なり、
1661 ! 時刻に関する範囲指定は
1662 ! 行なえません。
1663 !
1664 ! 書式に関する詳細は
1665 ! {gtool4 netCDF 規約}[link:../xref.htm#label-6]
1666 ! の「5.4 コンマ記法」を参照して
1667 ! ください。
1668 real, intent(in), optional:: time
1669 !
1670 ! 時刻. (単精度実数型)
1671 !
1672 ! この引数を与える場合,
1673 ! 出力するかどうかをプログラムが
1674 ! 自動的に判断します.
1675 ! *time* に与えられた数値が
1676 ! HistoryCreate に与えた *interval*
1677 ! で割り切れる場合には出力が行われます.
1678 !
1679 ! HistoryAddVariable で
1680 ! *time_average* (または *average*)
1681 ! に .true. を与えた場合には,
1682 ! *time*, *difftime*
1683 ! のどちらの引数も与えない場合に,
1684 ! プログラムはエラーを発生させます.
1685 !
1686 ! また, この引数と *range* は併用できません.
1687 ! 併用した場合には,
1688 ! プログラムはエラーを発生させます.
1689 !
1690 logical, intent(in), optional:: quiet
1691 ! .false. を与えた場合,
1692 ! このサブルーチンが呼ばれる毎に
1693 ! ファイル名と時刻が表示されます.
1694 ! デフォルトは .true. です.
1695 !
1696 ! If ".false." is given,
1697 ! a filename and time is displayed
1698 ! when this subroutine is called.
1699 ! Default value is ".true.".
1700 !
1701 type(DC_DIFFTIME), intent(in), optional:: difftime
1702 !
1703 ! 時刻 (dc_date_types::DC_DIFFTIME 型)
1704 !
1705 ! 効果は *time* と同様です.
1706 !
1707 real(DP), intent(in), optional:: timed
1708 !
1709 ! 時刻 (倍精度実数型)
1710 !
1711 ! 効果は *time* と同様です.
1712 !
1713 logical, intent(in), optional:: time_average_store
1714 !
1715 ! 平均値の出力フラグ.
1716 ! この値に .true. を与えた場合には,
1717 ! 出力せずに与えられた値を一旦蓄えます.
1718 ! .false. を与えた場合には,
1719 ! *time* もしくは *difftime* と
1720 ! HistoryCreate に与えた *interval* に
1721 ! 関わらず出力を行います.
1722 !
1723 ! HistoryAddVariable で
1724 ! *time_average* (または *average*)
1725 ! に .true. を与えない場合は無効です.
1726 !
1727 ! *time* と *difftime*
1728 ! のどちらかを同時に与える必要があります.
1729 !
1730 logical, intent(out), optional:: err
1731 ! 例外処理用フラグ.
1732 ! デフォルトでは, この手続き内でエラーが
1733 ! 生じた場合, プログラムは強制終了します.
1734 ! 引数 *err* が与えられる場合,
1735 ! プログラムは強制終了せず, 代わりに
1736 ! *err* に .true. が代入されます.
1737 !
1738 ! Exception handling flag.
1739 ! By default, when error occur in
1740 ! this procedure, the program aborts.
1741 ! If this *err* argument is given,
1742 ! .true. is substituted to *err* and
1743 ! the program does not abort.
1744 type(GT_VARIABLE):: var, timevar
1745 character(STRING):: url, file, time_str
1746 real:: time_value(1:1)
1747 type(GT_HISTORY), pointer:: hst =>null()
1748 integer :: v_ord
1749 character(STRING):: avr_msg
1750 integer:: stat
1751 character(STRING):: cause_c
1752 interface timegoahead
1753 subroutine timegoahead( varname, var, head, history, err )
1754 use gtdata_types, only: gt_variable
1756 character(len = *), intent(in):: varname
1757 type(GT_VARIABLE), intent(out):: var
1758 real, intent(in):: head
1759 type(GT_HISTORY), intent(inout), optional, target:: history
1760 logical, intent(out), optional:: err
1761 end subroutine timegoahead
1762 end interface
1763 character(*), parameter:: subname = "HistoryPutCharEx"
1764 continue
1765 call beginsub(subname, 'varname=%a range=%a', &
1766 & ca=stoa(varname, present_select('', '(no-range)', range)))
1767 stat = dc_noerr
1768 cause_c = ""
1769 if (present(history)) then
1770 hst => history
1771 else
1772 hst => default
1773 endif
1774 !-----------------------------------------------------------------
1775 ! 初期設定のチェック
1776 ! Check initialization
1777 !-----------------------------------------------------------------
1778 if ( .not. hst % initialized ) then
1779 stat = dc_enotinit
1780 cause_c = 'GT_HISTORY'
1781 goto 999
1782 end if
1783 !-----------------------------------------------------------------
1784 ! time と range の同時使用の禁止
1785 ! Permit concurrent use of "time" and "range"
1786 !-----------------------------------------------------------------
1787 if ( ( present(time) .or. present(difftime) .or. present(timed) ) &
1788 & .and. present_and_not_empty(range) ) then
1789 call messagenotify('W', subname, &
1790 & '(varname=%c) "range" and "time" or "timed" or "difftime" are not suppored at the same time', &
1791 & c1 = trim(varname) )
1792 stat = usr_errno
1793 cause_c = '"range" and "time" or "timed" or "difftime" are not suppored at the same time'
1794 goto 999
1795 end if
1796 !-----------------------------------------------------------------
1797 ! hst 内の varname 変数の変数番号を取得
1798 ! Get variable number of "varname" in "hst"
1799 !-----------------------------------------------------------------
1800 v_ord = lookup_variable_ord(hst, varname)
1801 if ( present(time_average_store) ) then
1802 continue
1803 end if
1804 !-----------------------------------------------------------------
1805 ! 初期時刻の設定
1806 ! Configure initial time
1807 !-----------------------------------------------------------------
1808 if ( .not. hst % origin_setting ) then
1809 if ( present(difftime) ) then
1810 hst % origin = evalbyunit( difftime, '', hst % unlimited_units_symbol )
1811 hst % time_bnds = evalbyunit( difftime, '', hst % unlimited_units_symbol )
1812 hst % origin_setting = .true.
1813 elseif ( present(timed) ) then
1814 hst % origin = timed
1815 hst % time_bnds = timed
1816 hst % origin_setting = .true.
1817 elseif ( present(time) ) then
1818 hst % origin = time
1819 hst % time_bnds = time
1820 hst % origin_setting = .true.
1821 end if
1822!!$ if ( present(difftime) ) then
1823!!$ hst % origin = difftime
1824!!$ hst % time_bnds = EvalByUnit( difftime, '', hst % unlimited_units_symbol )
1825!!$ hst % origin_setting = .true.
1826!!$ elseif ( present(timed) ) then
1827!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
1828!!$ & real(timed), '', hst % unlimited_units_symbol ) ! (in)
1829!!$ hst % time_bnds = timed
1830!!$ hst % origin_setting = .true.
1831!!$ elseif ( present(time) ) then
1832!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
1833!!$ & time, '', hst % unlimited_units_symbol ) ! (in)
1834!!$ hst % time_bnds = time
1835!!$ hst % origin_setting = .true.
1836!!$ end if
1837 end if
1838 avr_msg = ''
1839 !-----------------------------------------------------------------
1840 ! 時刻を1つ進めて, データ出力
1841 ! Progress one time, and output data
1842 !-----------------------------------------------------------------
1843 call timegoahead( &
1844 & varname = varname, & ! (in)
1845 & head = 0.0, & ! (in)
1846 & var = var, & ! (out)
1847 & history = history, & ! (inout)
1848 & err = err ) ! (out)
1849 if (present_and_not_empty(range)) then
1850 call dbgmessage('varname=<%c> is string. so range is ignoread.', &
1851 & c1=trim(varname))
1852 end if
1853 call put(var, array, arraysize)
1854 call gtvarsync(var)
1855 !-----------------------------------------------------------------
1856 ! メッセージ出力
1857 ! Output messages
1858 !-----------------------------------------------------------------
1859 if ( present_and_false(quiet) ) then
1860 call inquire( hst % dimvars(1), & ! (in)
1861 & url = url ) ! (out)
1862 call urlsplit( fullname = url, & ! (in)
1863 & file = file ) ! (out)
1864 if ( hst % unlimited_index < 1 ) then
1865 time_str = ''
1866 else
1867 timevar = hst % dimvars(hst % unlimited_index)
1868 call slice( timevar, & ! (in)
1869 & 1, start = hst % count(v_ord), count = 1 ) ! (in)
1870 call get( timevar, & ! (inout)
1871 & time_value, & ! (out)
1872 & 1, & ! (in)
1873 & err ) ! (out)
1874 time_str = '(time=' // trim( tochar( time_value(1) )) // ')'
1875 end if
1876 call messagenotify('M', 'HistoryPut', &
1877 & '"%a" => "%a" %a %a', &
1878 & ca = stoa( varname, file, time_str, avr_msg ) )
1879 end if
1880 !-----------------------------------------------------------------
1881 ! 終了処理, 例外処理
1882 ! Termination and Exception handling
1883 !-----------------------------------------------------------------
1884999 continue
1885 call storeerror( stat, subname, err, cause_c )
1886 call endsub(subname)
subroutine timegoahead(varname, var, head, history, err)
integer, parameter, public usr_errno
-1000 以下: ユーザー定義
Definition dc_error.f90:579
省略可能な制御パラメータの判定
logical function, public present_and_false(arg)
logical function, public present_and_not_empty(arg)
logical function, public present_and_true(arg)
character(string) function, public joinchar(carray, expr)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_enotinit, dc_error::dc_noerr, gtool_history_internal::default, dc_types::dp, dc_trace::endsub(), dc_string::joinchar(), dc_present::present_and_false(), dc_present::present_and_not_empty(), dc_present::present_and_true(), dc_error::storeerror(), dc_types::string, timegoahead(), and dc_error::usr_errno.

Here is the call graph for this function:

◆ historyputdouble0()

subroutine historyputdouble0 ( character(*), intent(in)  varname,
real(dp), intent(in)  value,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

データ出力

Parameters
[in]varname

iline 1

gtool4 データ内の変数へデータの出力を行います。 このサブルーチンを用いる前に、HistoryCreate による初期設定が必要です。

HistoryPut は複数のサブルーチンの総称名です。value に 変数 (整数型、単精度実数型、倍精度実数型、文字型) もしくは 1 〜 7 次元の配列 (整数型、単精度実数型、倍精度実数型) を与えることが可能です。 下記の同名のサブルーチンを参照ください。 ただし、多次元配列を与える際の引数キーワードには array を用いてください。

HistoryPut を最初に呼んだ時、時間次元の変数は HistoryCreate の origin の値に設定されます。

ある変数 varname に対して HistoryPut を複数回呼ぶと、 HistoryCreate の interval × HistoryPut を呼んだ回数、 の分だけ 時間次元の変数の値が増やされます。 ただし、時間平均値を出力する場合は例外です。 以下の時間平均に関する項目を参照ください。

これらの時間次元の変数の値を明示的に設定したい場合は HistorySetTime を用いるか、HistoryPut 自身で時間次元の変数へ値 を出力してください。

時間平均について

時間平均については HistoryAddVariable を参照ください。

Definition at line 2097 of file historyput.f90.

2100 !
2101 !
2132 !
2133 !
2135 use dc_date_types, only: dc_difftime
2136 use dc_types, only: dp
2137 use dc_trace, only: beginsub, endsub, dbgmessage
2138 implicit none
2139 character(*), intent(in):: varname
2140 ! 変数の名前
2141 !
2142 ! ただし、ここで指定するもの
2143 ! は、 HistoryCreateの *dims*
2144 ! または HistoryAddVariable や
2145 ! HistoryCopyVariable の
2146 ! *varname* で既に指定されてい
2147 ! なければなりません。
2148 !
2149 real(DP), intent(in):: value
2150 ! 変数が出力するデータ
2151 !
2152 ! 型は単精度実数型でも
2153 ! 倍精度実数型でもよいですが、
2154 ! HistoryAddVariable の
2155 ! *xtype* で指定した
2156 ! データ型と異なる
2157 ! 型を渡した場合、xtype で
2158 ! 指定した型に変換されます。
2159 !
2160 type(GT_HISTORY), intent(inout), optional, target:: history
2161 ! 出力ファイルの設定に関する情報を
2162 ! 格納した構造体
2163 !
2164 ! ここに指定するものは、
2165 ! HistoryCreate によって初期設定
2166 ! されていなければなりません。
2167 !
2168 character(*), intent(in), optional:: range
2169 ! gtool4 のコンマ記法による
2170 ! データの出力範囲指定
2171 !
2172 ! このオプションを用いる
2173 ! 際には、必ず *HistorySetTime*
2174 ! によって明示的に時刻の設定
2175 ! を行ってください。
2176 ! また、*HistoryGet* と異なり、
2177 ! 時刻に関する範囲指定は
2178 ! 行なえません。
2179 !
2180 ! 書式に関する詳細は
2181 ! {gtool4 netCDF 規約}[link:../xref.htm#label-6]
2182 ! の「5.4 コンマ記法」を参照して
2183 ! ください。
2184 real, intent(in), optional:: time
2185 !
2186 ! 時刻. (単精度実数型)
2187 !
2188 ! この引数を与える場合,
2189 ! 出力するかどうかをプログラムが
2190 ! 自動的に判断します.
2191 ! *time* に与えられた数値が
2192 ! HistoryCreate に与えた *interval*
2193 ! で割り切れる場合には出力が行われます.
2194 !
2195 ! HistoryAddVariable で
2196 ! *time_average* (または *average*)
2197 ! に .true. を与えた場合には,
2198 ! *time*, *difftime*
2199 ! のどちらの引数も与えない場合に,
2200 ! プログラムはエラーを発生させます.
2201 !
2202 ! この引数と *difftime*, *time_average_store*
2203 ! が同時に与えられた場合,
2204 ! *time_average_store* が優先されます.
2205 !
2206 ! また, この引数と *range* は併用できません.
2207 ! 併用した場合には,
2208 ! プログラムはエラーを発生させます.
2209 !
2210 logical, intent(in), optional:: quiet
2211 ! .true. を与えた場合,
2212 ! メッセージ出力が抑制されます.
2213 !
2214 ! If ".true." is given,
2215 ! messages are suppressed.
2216 !
2217 type(DC_DIFFTIME), intent(in), optional:: difftime
2218 !
2219 ! 時刻 (dc_date_types::DC_DIFFTIME 型)
2220 !
2221 ! 効果は *time* と同様です.
2222 real(DP), intent(in), optional:: timed
2223 !
2224 ! 時刻 (倍精度実数型)
2225 !
2226 ! 効果は *time* と同様です.
2227 logical, intent(in), optional:: time_average_store
2228 !
2229 ! 平均値の出力フラグ.
2230 ! この値に .true. を与えた場合には,
2231 ! 出力せずに与えられた値を一旦蓄えます.
2232 ! .false. を与えた場合には,
2233 ! *time* もしくは *difftime* と
2234 ! HistoryCreate に与えた *interval* に
2235 ! 関わらず出力を行います.
2236 !
2237 ! HistoryAddVariable で
2238 ! *time_average* (または *average*)
2239 ! に .true. を与えない場合は無効です.
2240 !
2241 ! *time* と *difftime*
2242 ! のどちらかを同時に与える必要があります.
2243 !
2244 logical, intent(out), optional:: err
2245 ! 例外処理用フラグ.
2246 ! デフォルトでは, この手続き内でエラーが
2247 ! 生じた場合, プログラムは強制終了します.
2248 ! 引数 *err* が与えられる場合,
2249 ! プログラムは強制終了せず, 代わりに
2250 ! *err* に .true. が代入されます.
2251 !
2252 ! Exception handling flag.
2253 ! By default, when error occur in
2254 ! this procedure, the program aborts.
2255 ! If this *err* argument is given,
2256 ! .true. is substituted to *err* and
2257 ! the program does not abort.
2258 interface historyputdoubleex
2259 subroutine historyputdoubleex( &
2260 & varname, array, arraysize, history, range, &
2261 & time, quiet, difftime, timed, time_average_store, err )
2263 use dc_date_types, only: dc_difftime
2264 use dc_types, only: dp
2265 character(*), intent(in):: varname
2266 integer, intent(in):: arraysize
2267 real(DP), intent(in):: array(arraysize)
2268 type(GT_HISTORY), intent(inout), target, optional:: history
2269 character(*), intent(in), optional:: range
2270 real, intent(in), optional:: time
2271 logical, intent(in), optional:: quiet
2272 type(DC_DIFFTIME), intent(in), optional:: difftime
2273 real(DP), intent(in), optional:: timed
2274 logical, intent(in), optional:: time_average_store
2275 logical, intent(out), optional:: err
2276 end subroutine historyputdoubleex
2277 end interface
2278 character(*), parameter:: subname = "HistoryPutDouble0"
2279 continue
2280 call beginsub(subname)
2281 call historyputdoubleex( &
2282 & varname, & ! (in)
2283 & (/value/), 1, & ! (in)
2284 & history = history, & ! (inout) optional
2285 & range = range, & ! (in) optional
2286 & time = time, & ! (in) optional
2287 & quiet = quiet, & ! (in) optional
2288 & difftime = difftime, & ! (in) optional
2289 & timed = timed, & ! (in) optional
2290 & time_average_store = &
2291 & time_average_store, & ! (in) optional
2292 & err = err ) ! (out) optional
2293 call endsub(subname)
recursive subroutine historyputdoubleex(varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
データ出力

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdouble1()

subroutine historyputdouble1 ( character(*), intent(in)  varname,
real(dp), dimension(:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2295 of file historyput.f90.

2298 !
2299 !
2301 use dc_date_types, only: dc_difftime
2302 use dc_types, only: dp
2303 use dc_trace, only: beginsub, endsub, dbgmessage
2304 implicit none
2305 character(*), intent(in):: varname
2306 real(DP), intent(in):: array(:)
2307 type(GT_HISTORY), intent(inout), optional, target:: history
2308 character(*), intent(in), optional:: range
2309 real, intent(in), optional:: time
2310 logical, intent(in), optional:: quiet
2311 type(DC_DIFFTIME), intent(in), optional:: difftime
2312 real(DP), intent(in), optional:: timed
2313 logical, intent(in), optional:: time_average_store
2314 logical, intent(out), optional:: err
2315 interface historyputdoubleex
2316 subroutine historyputdoubleex( &
2317 & varname, array, arraysize, history, range, &
2318 & time, quiet, difftime, timed, time_average_store, err )
2320 use dc_date_types, only: dc_difftime
2321 use dc_types, only: dp
2322 character(*), intent(in):: varname
2323 integer, intent(in):: arraysize
2324 real(DP), intent(in):: array(arraysize)
2325 type(GT_HISTORY), intent(inout), target, optional:: history
2326 character(*), intent(in), optional:: range
2327 real, intent(in), optional:: time
2328 logical, intent(in), optional:: quiet
2329 type(DC_DIFFTIME), intent(in), optional:: difftime
2330 real(DP), intent(in), optional:: timed
2331 logical, intent(in), optional:: time_average_store
2332 logical, intent(out), optional:: err
2333 end subroutine historyputdoubleex
2334 end interface
2335 character(*), parameter:: subname = "HistoryPutDouble1"
2336 continue
2337 call beginsub(subname)
2338 call historyputdoubleex( &
2339 & varname, & ! (in)
2340 & pack(array, .true.), size(array), & ! (in)
2341 & history = history, & ! (inout) optional
2342 & range = range, & ! (in) optional
2343 & time = time, & ! (in) optional
2344 & quiet = quiet, & ! (in) optional
2345 & difftime = difftime, & ! (in) optional
2346 & timed = timed, & ! (in) optional
2347 & time_average_store = &
2348 & time_average_store, & ! (in) optional
2349 & err = err ) ! (out) optional
2350 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdouble2()

subroutine historyputdouble2 ( character(*), intent(in)  varname,
real(dp), dimension(:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2352 of file historyput.f90.

2355 !
2356 !
2358 use dc_date_types, only: dc_difftime
2359 use dc_types, only: dp
2360 use dc_trace, only: beginsub, endsub, dbgmessage
2361 implicit none
2362 character(*), intent(in):: varname
2363 real(DP), intent(in):: array(:,:)
2364 type(GT_HISTORY), intent(inout), optional, target:: history
2365 character(*), intent(in), optional:: range
2366 real, intent(in), optional:: time
2367 logical, intent(in), optional:: quiet
2368 type(DC_DIFFTIME), intent(in), optional:: difftime
2369 real(DP), intent(in), optional:: timed
2370 logical, intent(in), optional:: time_average_store
2371 logical, intent(out), optional:: err
2372 interface historyputdoubleex
2373 subroutine historyputdoubleex( &
2374 & varname, array, arraysize, history, range, &
2375 & time, quiet, difftime, timed, time_average_store, err )
2377 use dc_date_types, only: dc_difftime
2378 use dc_types, only: dp
2379 character(*), intent(in):: varname
2380 integer, intent(in):: arraysize
2381 real(DP), intent(in):: array(arraysize)
2382 type(GT_HISTORY), intent(inout), target, optional:: history
2383 character(*), intent(in), optional:: range
2384 real, intent(in), optional:: time
2385 logical, intent(in), optional:: quiet
2386 type(DC_DIFFTIME), intent(in), optional:: difftime
2387 real(DP), intent(in), optional:: timed
2388 logical, intent(in), optional:: time_average_store
2389 logical, intent(out), optional:: err
2390 end subroutine historyputdoubleex
2391 end interface
2392 character(*), parameter:: subname = "HistoryPutDouble2"
2393 continue
2394 call beginsub(subname)
2395 call historyputdoubleex( &
2396 & varname, & ! (in)
2397 & pack(array, .true.), size(array), & ! (in)
2398 & history = history, & ! (inout) optional
2399 & range = range, & ! (in) optional
2400 & time = time, & ! (in) optional
2401 & quiet = quiet, & ! (in) optional
2402 & difftime = difftime, & ! (in) optional
2403 & timed = timed, & ! (in) optional
2404 & time_average_store = &
2405 & time_average_store, & ! (in) optional
2406 & err = err ) ! (out) optional
2407 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdouble3()

subroutine historyputdouble3 ( character(*), intent(in)  varname,
real(dp), dimension(:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2409 of file historyput.f90.

2412 !
2413 !
2415 use dc_date_types, only: dc_difftime
2416 use dc_types, only: dp
2417 use dc_trace, only: beginsub, endsub, dbgmessage
2418 implicit none
2419 character(*), intent(in):: varname
2420 real(DP), intent(in):: array(:,:,:)
2421 type(GT_HISTORY), intent(inout), optional, target:: history
2422 character(*), intent(in), optional:: range
2423 real, intent(in), optional:: time
2424 logical, intent(in), optional:: quiet
2425 type(DC_DIFFTIME), intent(in), optional:: difftime
2426 real(DP), intent(in), optional:: timed
2427 logical, intent(in), optional:: time_average_store
2428 logical, intent(out), optional:: err
2429 interface historyputdoubleex
2430 subroutine historyputdoubleex( &
2431 & varname, array, arraysize, history, range, &
2432 & time, quiet, difftime, timed, time_average_store, err )
2434 use dc_date_types, only: dc_difftime
2435 use dc_types, only: dp
2436 character(*), intent(in):: varname
2437 integer, intent(in):: arraysize
2438 real(DP), intent(in):: array(arraysize)
2439 type(GT_HISTORY), intent(inout), target, optional:: history
2440 character(*), intent(in), optional:: range
2441 real, intent(in), optional:: time
2442 logical, intent(in), optional:: quiet
2443 type(DC_DIFFTIME), intent(in), optional:: difftime
2444 real(DP), intent(in), optional:: timed
2445 logical, intent(in), optional:: time_average_store
2446 logical, intent(out), optional:: err
2447 end subroutine historyputdoubleex
2448 end interface
2449 character(*), parameter:: subname = "HistoryPutDouble3"
2450 continue
2451 call beginsub(subname)
2452 call historyputdoubleex( &
2453 & varname, & ! (in)
2454 & pack(array, .true.), size(array), & ! (in)
2455 & history = history, & ! (inout) optional
2456 & range = range, & ! (in) optional
2457 & time = time, & ! (in) optional
2458 & quiet = quiet, & ! (in) optional
2459 & difftime = difftime, & ! (in) optional
2460 & timed = timed, & ! (in) optional
2461 & time_average_store = &
2462 & time_average_store, & ! (in) optional
2463 & err = err ) ! (out) optional
2464 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdouble4()

subroutine historyputdouble4 ( character(*), intent(in)  varname,
real(dp), dimension(:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2466 of file historyput.f90.

2469 !
2470 !
2472 use dc_date_types, only: dc_difftime
2473 use dc_types, only: dp
2474 use dc_trace, only: beginsub, endsub, dbgmessage
2475 implicit none
2476 character(*), intent(in):: varname
2477 real(DP), intent(in):: array(:,:,:,:)
2478 type(GT_HISTORY), intent(inout), optional, target:: history
2479 character(*), intent(in), optional:: range
2480 real, intent(in), optional:: time
2481 logical, intent(in), optional:: quiet
2482 type(DC_DIFFTIME), intent(in), optional:: difftime
2483 real(DP), intent(in), optional:: timed
2484 logical, intent(in), optional:: time_average_store
2485 logical, intent(out), optional:: err
2486 interface historyputdoubleex
2487 subroutine historyputdoubleex( &
2488 & varname, array, arraysize, history, range, &
2489 & time, quiet, difftime, timed, time_average_store, err )
2491 use dc_date_types, only: dc_difftime
2492 use dc_types, only: dp
2493 character(*), intent(in):: varname
2494 integer, intent(in):: arraysize
2495 real(DP), intent(in):: array(arraysize)
2496 type(GT_HISTORY), intent(inout), target, optional:: history
2497 character(*), intent(in), optional:: range
2498 real, intent(in), optional:: time
2499 logical, intent(in), optional:: quiet
2500 type(DC_DIFFTIME), intent(in), optional:: difftime
2501 real(DP), intent(in), optional:: timed
2502 logical, intent(in), optional:: time_average_store
2503 logical, intent(out), optional:: err
2504 end subroutine historyputdoubleex
2505 end interface
2506 character(*), parameter:: subname = "HistoryPutDouble4"
2507 continue
2508 call beginsub(subname)
2509 call historyputdoubleex( &
2510 & varname, & ! (in)
2511 & pack(array, .true.), size(array), & ! (in)
2512 & history = history, & ! (inout) optional
2513 & range = range, & ! (in) optional
2514 & time = time, & ! (in) optional
2515 & quiet = quiet, & ! (in) optional
2516 & difftime = difftime, & ! (in) optional
2517 & timed = timed, & ! (in) optional
2518 & time_average_store = &
2519 & time_average_store, & ! (in) optional
2520 & err = err ) ! (out) optional
2521 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdouble5()

subroutine historyputdouble5 ( character(*), intent(in)  varname,
real(dp), dimension(:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2523 of file historyput.f90.

2526 !
2527 !
2529 use dc_date_types, only: dc_difftime
2530 use dc_types, only: dp
2531 use dc_trace, only: beginsub, endsub, dbgmessage
2532 implicit none
2533 character(*), intent(in):: varname
2534 real(DP), intent(in):: array(:,:,:,:,:)
2535 type(GT_HISTORY), intent(inout), optional, target:: history
2536 character(*), intent(in), optional:: range
2537 real, intent(in), optional:: time
2538 logical, intent(in), optional:: quiet
2539 type(DC_DIFFTIME), intent(in), optional:: difftime
2540 real(DP), intent(in), optional:: timed
2541 logical, intent(in), optional:: time_average_store
2542 logical, intent(out), optional:: err
2543 interface historyputdoubleex
2544 subroutine historyputdoubleex( &
2545 & varname, array, arraysize, history, range, &
2546 & time, quiet, difftime, timed, time_average_store, err )
2548 use dc_date_types, only: dc_difftime
2549 use dc_types, only: dp
2550 character(*), intent(in):: varname
2551 integer, intent(in):: arraysize
2552 real(DP), intent(in):: array(arraysize)
2553 type(GT_HISTORY), intent(inout), target, optional:: history
2554 character(*), intent(in), optional:: range
2555 real, intent(in), optional:: time
2556 logical, intent(in), optional:: quiet
2557 type(DC_DIFFTIME), intent(in), optional:: difftime
2558 real(DP), intent(in), optional:: timed
2559 logical, intent(in), optional:: time_average_store
2560 logical, intent(out), optional:: err
2561 end subroutine historyputdoubleex
2562 end interface
2563 character(*), parameter:: subname = "HistoryPutDouble5"
2564 continue
2565 call beginsub(subname)
2566 call historyputdoubleex( &
2567 & varname, & ! (in)
2568 & pack(array, .true.), size(array), & ! (in)
2569 & history = history, & ! (inout) optional
2570 & range = range, & ! (in) optional
2571 & time = time, & ! (in) optional
2572 & quiet = quiet, & ! (in) optional
2573 & difftime = difftime, & ! (in) optional
2574 & timed = timed, & ! (in) optional
2575 & time_average_store = &
2576 & time_average_store, & ! (in) optional
2577 & err = err ) ! (out) optional
2578 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdouble6()

subroutine historyputdouble6 ( character(*), intent(in)  varname,
real(dp), dimension(:,:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2580 of file historyput.f90.

2583 !
2584 !
2586 use dc_date_types, only: dc_difftime
2587 use dc_types, only: dp
2588 use dc_trace, only: beginsub, endsub, dbgmessage
2589 implicit none
2590 character(*), intent(in):: varname
2591 real(DP), intent(in):: array(:,:,:,:,:,:)
2592 type(GT_HISTORY), intent(inout), optional, target:: history
2593 character(*), intent(in), optional:: range
2594 real, intent(in), optional:: time
2595 logical, intent(in), optional:: quiet
2596 type(DC_DIFFTIME), intent(in), optional:: difftime
2597 real(DP), intent(in), optional:: timed
2598 logical, intent(in), optional:: time_average_store
2599 logical, intent(out), optional:: err
2600 interface historyputdoubleex
2601 subroutine historyputdoubleex( &
2602 & varname, array, arraysize, history, range, &
2603 & time, quiet, difftime, timed, time_average_store, err )
2605 use dc_date_types, only: dc_difftime
2606 use dc_types, only: dp
2607 character(*), intent(in):: varname
2608 integer, intent(in):: arraysize
2609 real(DP), intent(in):: array(arraysize)
2610 type(GT_HISTORY), intent(inout), target, optional:: history
2611 character(*), intent(in), optional:: range
2612 real, intent(in), optional:: time
2613 logical, intent(in), optional:: quiet
2614 type(DC_DIFFTIME), intent(in), optional:: difftime
2615 real(DP), intent(in), optional:: timed
2616 logical, intent(in), optional:: time_average_store
2617 logical, intent(out), optional:: err
2618 end subroutine historyputdoubleex
2619 end interface
2620 character(*), parameter:: subname = "HistoryPutDouble6"
2621 continue
2622 call beginsub(subname)
2623 call historyputdoubleex( &
2624 & varname, & ! (in)
2625 & pack(array, .true.), size(array), & ! (in)
2626 & history = history, & ! (inout) optional
2627 & range = range, & ! (in) optional
2628 & time = time, & ! (in) optional
2629 & quiet = quiet, & ! (in) optional
2630 & difftime = difftime, & ! (in) optional
2631 & timed = timed, & ! (in) optional
2632 & time_average_store = &
2633 & time_average_store, & ! (in) optional
2634 & err = err ) ! (out) optional
2635 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdouble7()

subroutine historyputdouble7 ( character(*), intent(in)  varname,
real(dp), dimension(:,:,:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2637 of file historyput.f90.

2640 !
2641 !
2643 use dc_date_types, only: dc_difftime
2644 use dc_types, only: dp
2645 use dc_trace, only: beginsub, endsub, dbgmessage
2646 implicit none
2647 character(*), intent(in):: varname
2648 real(DP), intent(in):: array(:,:,:,:,:,:,:)
2649 type(GT_HISTORY), intent(inout), optional, target:: history
2650 character(*), intent(in), optional:: range
2651 real, intent(in), optional:: time
2652 logical, intent(in), optional:: quiet
2653 type(DC_DIFFTIME), intent(in), optional:: difftime
2654 real(DP), intent(in), optional:: timed
2655 logical, intent(in), optional:: time_average_store
2656 logical, intent(out), optional:: err
2657 interface historyputdoubleex
2658 subroutine historyputdoubleex( &
2659 & varname, array, arraysize, history, range, &
2660 & time, quiet, difftime, timed, time_average_store, err )
2662 use dc_date_types, only: dc_difftime
2663 use dc_types, only: dp
2664 character(*), intent(in):: varname
2665 integer, intent(in):: arraysize
2666 real(DP), intent(in):: array(arraysize)
2667 type(GT_HISTORY), intent(inout), target, optional:: history
2668 character(*), intent(in), optional:: range
2669 real, intent(in), optional:: time
2670 logical, intent(in), optional:: quiet
2671 type(DC_DIFFTIME), intent(in), optional:: difftime
2672 real(DP), intent(in), optional:: timed
2673 logical, intent(in), optional:: time_average_store
2674 logical, intent(out), optional:: err
2675 end subroutine historyputdoubleex
2676 end interface
2677 character(*), parameter:: subname = "HistoryPutDouble7"
2678 continue
2679 call beginsub(subname)
2680 call historyputdoubleex( &
2681 & varname, & ! (in)
2682 & pack(array, .true.), size(array), & ! (in)
2683 & history = history, & ! (inout) optional
2684 & range = range, & ! (in) optional
2685 & time = time, & ! (in) optional
2686 & quiet = quiet, & ! (in) optional
2687 & difftime = difftime, & ! (in) optional
2688 & timed = timed, & ! (in) optional
2689 & time_average_store = &
2690 & time_average_store, & ! (in) optional
2691 & err = err ) ! (out) optional
2692 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputdoubleex().

Here is the call graph for this function:

◆ historyputdoubleex()

recursive subroutine historyputdoubleex ( character(*), intent(in)  varname,
real(dp), dimension(arraysize), intent(in)  array,
integer, intent(in)  arraysize,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

データ出力

Parameters
[in]varname

iline 1

こちらは配列サイズを指定する必要があるため、 HistoryPut を利用してください。

Definition at line 565 of file historyput.f90.

568 !
573 !
577 use gtdata_generic, only: put, gtvarsync, slice, inquire, &
579 use gtdata_types, only: gt_variable
580 use dc_types, only: string, dp, dp_eps
581 use dc_string, only: stoa, printf, tochar, joinchar
585 use dc_message, only: messagenotify
586 use dc_url, only: urlsplit, urlmerge
587 use dc_date_types, only: dc_difftime
588 use dc_date_generic, only: operator(==), dcdifftimecreate, &
589 & mod, operator(-), evalbyunit, operator(/), tochar
591 implicit none
592 character(*), intent(in):: varname
593 integer, intent(in):: arraysize
594 real(DP), intent(in):: array(arraysize)
595 type(GT_HISTORY), intent(inout), target, optional:: history
596 character(*), intent(in), optional:: range
597 ! gtool4 のコンマ記法による
598 ! データの出力範囲指定
599 !
600 ! このオプションを用いる
601 ! 際には、必ず *HistorySetTime*
602 ! によって明示的に時刻の設定
603 ! を行ってください。
604 ! また、*HistoryGet* と異なり、
605 ! 時刻に関する範囲指定は
606 ! 行なえません。
607 !
608 ! 書式に関する詳細は
609 ! {gtool4 netCDF 規約}[link:../xref.htm#label-6]
610 ! の「5.4 コンマ記法」を参照して
611 ! ください。
612 real, intent(in), optional:: time
613 !
614 ! 時刻. (単精度実数型)
615 !
616 ! この引数を与える場合,
617 ! 出力するかどうかをプログラムが
618 ! 自動的に判断します.
619 ! *time* に与えられた数値が
620 ! HistoryCreate に与えた *interval*
621 ! で割り切れる場合には出力が行われます.
622 !
623 ! HistoryAddVariable で
624 ! *time_average* (または *average*)
625 ! に .true. を与えた場合には,
626 ! *time*, *difftime*
627 ! のどちらの引数も与えない場合に,
628 ! プログラムはエラーを発生させます.
629 !
630 ! また, この引数と *range* は併用できません.
631 ! 併用した場合には,
632 ! プログラムはエラーを発生させます.
633 !
634 logical, intent(in), optional:: quiet
635 ! .false. を与えた場合,
636 ! このサブルーチンが呼ばれる毎に
637 ! ファイル名と時刻が表示されます.
638 ! デフォルトは .true. です.
639 !
640 ! If ".false." is given,
641 ! a filename and time is displayed
642 ! when this subroutine is called.
643 ! Default value is ".true.".
644 !
645 type(DC_DIFFTIME), intent(in), optional:: difftime
646 !
647 ! 時刻 (dc_date_types::DC_DIFFTIME 型)
648 !
649 ! 効果は *time* と同様です.
650 !
651 real(DP), intent(in), optional:: timed
652 !
653 ! 時刻 (倍精度実数型)
654 !
655 ! 効果は *time* と同様です.
656 !
657 logical, intent(in), optional:: time_average_store
658 !
659 ! 平均値の出力フラグ.
660 ! この値に .true. を与えた場合には,
661 ! 出力せずに与えられた値を一旦蓄えます.
662 ! .false. を与えた場合には,
663 ! *time* もしくは *difftime* と
664 ! HistoryCreate に与えた *interval* に
665 ! 関わらず出力を行います.
666 !
667 ! HistoryAddVariable で
668 ! *time_average* (または *average*)
669 ! に .true. を与えない場合は無効です.
670 !
671 ! *time* と *difftime*
672 ! のどちらかを同時に与える必要があります.
673 !
674 logical, intent(out), optional:: err
675 ! 例外処理用フラグ.
676 ! デフォルトでは, この手続き内でエラーが
677 ! 生じた場合, プログラムは強制終了します.
678 ! 引数 *err* が与えられる場合,
679 ! プログラムは強制終了せず, 代わりに
680 ! *err* に .true. が代入されます.
681 !
682 ! Exception handling flag.
683 ! By default, when error occur in
684 ! this procedure, the program aborts.
685 ! If this *err* argument is given,
686 ! .true. is substituted to *err* and
687 ! the program does not abort.
688 type(GT_VARIABLE):: var, timevar
689 character(STRING):: url, file, time_str
690 real:: time_value(1:1)
691 type(GT_HISTORY), pointer:: hst =>null()
692 integer :: v_ord
693 character(STRING):: avr_msg
694 real(DP), target:: array_work(arraysize)
695 real(DP), pointer:: array_work2(:) =>null()
696 integer:: arraysize_work2
697 integer, allocatable:: start(:), count(:), stride(:)
698 integer :: i, dims
699 logical :: slice_err
700 character(STRING):: time_name
701 character(*), parameter:: bnds_suffix = '_bnds'
702 type(GT_VARIABLE):: bndsvar
703 integer:: bnds_ord, time_count, bnds_rank
704 logical:: output_step
705 real(DP):: timedw
706! type(DC_DIFFTIME):: difftimew
707 real(DP):: avr_coef
708 integer:: stat
709 character(STRING):: cause_c
710 interface timegoahead
711 subroutine timegoahead( varname, var, head, history, err )
712 use gtdata_types, only: gt_variable
714 character(len = *), intent(in):: varname
715 type(GT_VARIABLE), intent(out):: var
716 real, intent(in):: head
717 type(GT_HISTORY), intent(inout), optional, target:: history
718 logical, intent(out), optional:: err
719 end subroutine timegoahead
720 end interface
721 character(*), parameter:: subname = "HistoryPutDoubleEx"
722 continue
723 call beginsub(subname, 'varname=%a range=%a', &
724 & ca=stoa(varname, present_select('', '(no-range)', range)))
725 stat = dc_noerr
726 cause_c = ""
727 if (present(history)) then
728 hst => history
729 else
730 hst => default
731 endif
732 !-----------------------------------------------------------------
733 ! 初期設定のチェック
734 ! Check initialization
735 !-----------------------------------------------------------------
736 if ( .not. hst % initialized ) then
737 stat = dc_enotinit
738 cause_c = 'GT_HISTORY'
739 goto 999
740 end if
741 !-----------------------------------------------------------------
742 ! time と range の同時使用の禁止
743 ! Permit concurrent use of "time" and "range"
744 !-----------------------------------------------------------------
745 if ( ( present(time) .or. present(difftime) .or. present(timed) ) &
746 & .and. present_and_not_empty(range) ) then
747 call messagenotify('W', subname, &
748 & '(varname=%c) "range" and "time" or "timed" or "difftime" are not suppored at the same time', &
749 & c1 = trim(varname) )
750 stat = usr_errno
751 cause_c = '"range" and "time" or "timed" or "difftime" are not suppored at the same time'
752 goto 999
753 end if
754 !-----------------------------------------------------------------
755 ! hst 内の varname 変数の変数番号を取得
756 ! Get variable number of "varname" in "hst"
757 !-----------------------------------------------------------------
758 v_ord = lookup_variable_ord(hst, varname)
759 timedw = 0.0_dp
760 !-----------------------------------------------------------------
761 ! 時間平均値のためのデータ格納
762 ! Store data for time average value
763 !-----------------------------------------------------------------
764 if ( present(difftime) ) then
765 timedw = evalbyunit( difftime, '', hst % unlimited_units_symbol )
766 elseif ( present(timed) ) then
767 timedw = timed
768 elseif ( present(time) ) then
769 timedw = time
770 end if
771 if ( v_ord > 0 ) then
772 !
773 ! var_avr_count == -1: 平均処理は行わない.
774 ! var_avr_count >= 0: 平均処理を行う.
775 !
776 ! これらは HistoryAddVariable で指定される.
777 !
778 if ( hst % var_avr_count( v_ord ) > -1 ) then
779 ! 時刻が指定されない場合には平均処理が不可能なため
780 ! エラー発生. dc_error のエラーメッセージだけでは多少
781 ! 不親切なので, エラー直前に下記の警告メッセージ表示.
782 !
783 if ( .not. present(time) &
784 & .and. .not. present(timed) &
785 & .and. .not. present(difftime) ) then
786 call messagenotify('W', subname, &
787 & '(varname=%c) arguments "time" or "timed" or "difftime" are needed ' // &
788 & 'when "time_average=.true." is specified to "HistoryAddVariable"', &
789 & c1 = trim(varname) )
790 stat = dc_earglack
791 cause_c = 'time'
792 goto 999
793 end if
794 ! 与えられたデータのサイズと内部で積算しているデータのサイズが
795 ! 一致しない場合にもエラーを発生.
796 ! データサイズは HistoryPut -> HistoryPutEx の際に
797 ! 全て 1 次元化しているため, 単純に配列サイズでのみ判定.
798 ! dc_error のエラーメッセージだけでは多少
799 ! 不親切なので, エラー直前に下記の警告メッセージ表示.
800 !
801 if ( arraysize /= hst % var_avr_data( v_ord ) % length ) then
802 call messagenotify('W', subname, &
803 & '(varname=%c) size of array should be (%d). size of array is (%d)', &
804 & i = (/hst % var_avr_data( v_ord ) % length, arraysize/), &
805 & c1 = trim(varname) )
807 cause_c = 'array'
808 goto 999
809 end if
810 ! この if 〜 end if では以下の動作を行う.
811 !
812 ! * 平均処理時の係数 (avr_coef) の算出
813 ! * 係数を算出するための以下の値の設定
814 ! * 基本時間間隔 (var_avr_baseint)
815 ! * 前回出力の時刻 (var_avr_prevtime)
816 ! * 初回出力の判定を行うラベル (var_avr_firstput) の設定
817 !
818 ! 1 度目に呼ばれた場合はとりあえず係数を 1.0 にするとともに,
819 ! prevtime に現在時刻を保管
820 !
821 if ( hst % var_avr_firstput( v_ord ) ) then
822 if ( hst % var_avr_count( v_ord ) == 0 ) then
823 avr_coef = 1.0_dp
824 hst % var_avr_prevtime( v_ord ) = timedw
825 else
826 hst % var_avr_baseint( v_ord ) = &
827 & timedw - hst % var_avr_prevtime( v_ord )
828 avr_coef = 1.0_dp
829 hst % var_avr_prevtime( v_ord ) = timedw
830 hst % var_avr_firstput( v_ord ) = .false.
831 end if
832 ! 2 度目以降に呼ばれた場合
833 !
834 else
835 ! 前回出力を行った (var_avr_count == 0 に初期化された)
836 ! 場合には baseint に前回時刻と今回時刻の差を設定.
837 ! avr_coef には 1 を設定.
838 ! 最後に prevtime に今回の時刻を保管.
839 !
840 if ( hst % var_avr_count( v_ord ) == 0 ) then
841 hst % var_avr_baseint( v_ord ) = &
842 & timedw - hst % var_avr_prevtime( v_ord )
843 avr_coef = 1.0_dp
844 hst % var_avr_prevtime( v_ord ) = timedw
845 ! var_avr_count > 0 (平均処理されるデータが蓄積されている)
846 ! 場合には avr_coef には前回時刻と今回時刻の差の,
847 ! baseint からの比を設定する.
848 ! 最後に prevtime に今回の時刻を保管.
849 !
850 else
851 avr_coef = ( timedw - hst % var_avr_prevtime( v_ord ) ) &
852 & / hst % var_avr_baseint( v_ord )
853 hst % var_avr_prevtime( v_ord ) = timedw
854 end if
855 end if
856 ! 積算値 a_DataAvr に, 今回のデータに係数を掛けたもの
857 ! を加算する.
858 !
859 hst % var_avr_data( v_ord ) % a_DataAvr = &
860 & hst % var_avr_data( v_ord ) % a_DataAvr + array * avr_coef
861 ! 積算カウント var_avr_count に +1 し,
862 ! 係数の積算値 var_avr_coefsum に今回設定された
863 ! 係数を加算する.
864 !
865 hst % var_avr_count( v_ord ) = &
866 & hst % var_avr_count( v_ord ) + 1
867 hst % var_avr_coefsum( v_ord ) = &
868 & hst % var_avr_coefsum( v_ord ) + avr_coef
869 ! time_bnds(2) に今回の時刻を設定する.
870 ! (毎回上書きされる).
871 !
872 if ( present(difftime) ) then
873 hst % time_bnds(2:2) = evalbyunit( difftime, '', hst % unlimited_units_symbol )
874 elseif ( present (timed) ) then
875 hst % time_bnds(2:2) = timed
876 else
877 hst % time_bnds(2:2) = time
878 end if
879 end if
880 end if
881 !-----------------------------------------------------------------
882 ! 初期時刻の設定
883 ! Configure initial time
884 !-----------------------------------------------------------------
885 if ( .not. hst % origin_setting ) then
886 if ( present(difftime) ) then
887 hst % origin = evalbyunit( difftime, '', hst % unlimited_units_symbol )
888 hst % time_bnds = evalbyunit( difftime, '', hst % unlimited_units_symbol )
889 hst % origin_setting = .true.
890 elseif ( present(timed) ) then
891 hst % origin = timed
892 hst % time_bnds = timed
893 hst % origin_setting = .true.
894 elseif ( present(time) ) then
895 hst % origin = time
896 hst % time_bnds = time
897 hst % origin_setting = .true.
898 end if
899!!$ if ( present(difftime) ) then
900!!$ hst % origin = difftime
901!!$ hst % time_bnds = EvalByUnit( difftime, '', hst % unlimited_units_symbol )
902!!$ hst % origin_setting = .true.
903!!$ elseif ( present(timed) ) then
904!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
905!!$ & real(timed), '', hst % unlimited_units_symbol ) ! (in)
906!!$ hst % time_bnds = timed
907!!$ hst % origin_setting = .true.
908!!$ elseif ( present(time) ) then
909!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
910!!$ & time, '', hst % unlimited_units_symbol ) ! (in)
911!!$ hst % time_bnds = time
912!!$ hst % origin_setting = .true.
913!!$ end if
914 end if
915 !-----------------------------------------------------------------
916 ! 時刻の自動チェック
917 ! Check time automatically
918 !-----------------------------------------------------------------
919 output_step = .true.
920 if ( present_and_false(time_average_store) ) then
921 output_step = .true.
922 elseif ( present_and_true(time_average_store) ) then
923 output_step = .false.
924 elseif ( present(difftime) .or. present(timed) .or. present(time) ) then
925 output_step = .false.
926 if ( abs( hst % interval ) < dp_eps ) then
927 output_step = .true.
928 else
929 if ( abs( mod( timedw - hst % origin, hst % interval ) ) < dp_eps ) then
930 output_step = .true.
931 end if
932 end if
933 end if
934 !-------------------------
935 ! 時間平均値出力のための情報処理
936 ! Information processing for output time-averaged value
937 if ( .not. output_step ) then
938 goto 999
939 else
940 array_work = array
941 avr_msg = ''
942 if ( v_ord > 0 ) then
943 if ( hst % var_avr_count( v_ord ) > -1 ) then
944 if ( present_and_false(quiet) ) then
945 avr_msg = '(time average of ' // trim( tochar(hst % var_avr_count( v_ord )) ) // ' step data)'
946 end if
947 !-------------------
948 ! 蓄えた値の時間平均化
949 ! Average stored value in time direction
950 ! a_DataAvr に蓄えられた値を係数の積算値で割って,
951 ! これを出力値とする.
952 !
953 array_work = real( &
954 & ( hst % var_avr_data( v_ord ) % a_DataAvr ) / ( hst % var_avr_coefsum( v_ord ) ), &
955 & kind = kind(array_work) )
956 ! 積算値, 積算カウント, 係数の積算値をクリアする.
957 !
958 hst % var_avr_data( v_ord ) % a_DataAvr = 0.0
959 hst % var_avr_count( v_ord ) = 0
960 hst % var_avr_coefsum( v_ord ) = 0.0_dp
961 hst % var_avr_firstput( v_ord ) = .false.
962 end if
963 end if
964 end if
965 array_work2 => array_work
966 arraysize_work2 = arraysize
967 !-----------------------------------------------------------------
968 ! 時刻を1つ進めて, データ出力
969 ! Progress one time, and output data
970 !-----------------------------------------------------------------
971 call timegoahead( &
972 & varname = varname, & ! (in)
973 & head = real(array_work2(1)), & ! (in)
974 & var = var, & ! (out)
975 & history = history, & ! (inout)
976 & err = err ) ! (out)
977 call inquire( var, & ! (in)
978 & alldims=dims ) ! (out)
979 if (present_and_not_empty(range) .and. (dims < 1)) then
980 call dbgmessage('varname=<%c> has no dimension. so range is ignoread.', &
981 & c1=trim(varname))
982 end if
983 if (.not. (present_and_not_empty(range) .and. (dims > 0))) then
984 ! range 無しの普通の出力の場合
985 call put(var, array_work2, arraysize_work2)
986 else
987 ! range があり, 且つ varname がちゃんと次元を持っている場合
988 !
989 ! 元々の start, count, stride を保持. データを与えた後に復元する.
990 allocate(start(dims), count(dims), stride(dims))
991 do i = 1, dims
992 call get_slice(var, i, start(i), count(i), stride(i))
993 end do
994 slice_err = .false. ! 不要だが Slice の引用仕様として必要なため
995 call slice(var, range, slice_err)
996 call put(var, array_work2, arraysize_work2)
997 ! 復元
998 do i = 1, dims
999 call slice(var, i, start(i), count(i), stride(i))
1000 end do
1001 deallocate(start, count, stride)
1002 end if
1003 call gtvarsync(var)
1004 if ( hst % mpi_gather .and. v_ord > 0 ) then
1005 deallocate( array_work2 )
1006 end if
1007 !-----------------------------------------------------------------
1008 ! "time_bnds" 変数への出力
1009 ! Output to "time_bnds" variable
1010 !-----------------------------------------------------------------
1011 if ( v_ord > 0 ) then
1012 if ( hst % var_avr_count( v_ord ) > -1 ) then
1013 !-------------------
1014 ! 時間次元の名前とファイル名を取得
1015 ! Get name of time dimension, and filename
1016 timevar = hst % dimvars( hst % unlimited_index )
1017 call inquire( &
1018 & var = timevar, & ! (in)
1019 & url = url, & ! (out)
1020 & name = time_name ) ! (out)
1021 call urlsplit( fullname = url, & ! (in)
1022 & file = file ) ! (out)
1023 !-------------------
1024 ! "time_bnds" 変数の取得
1025 ! Get "time_bnds" variable
1026 call open( var = bndsvar, &
1027 & url = urlmerge(file=file, var=trim(time_name) // bnds_suffix) )
1028 bnds_ord = lookup_variable_ord( hst, trim(time_name) // bnds_suffix)
1029 !-------------------
1030 ! "time_bnds" 変数への出力
1031 ! Output to "time_bnds" variable
1032 call inquire( &
1033 & var = bndsvar, & ! (in)
1034 & rank = bnds_rank ) ! (out)
1035 time_count = 1
1036 if ( bnds_rank > 1 ) then
1037 call inquire( &
1038 & var = bndsvar, & ! (in)
1039 & dimord = hst % growable_indices(bnds_ord), & ! (in)
1040 & allcount = time_count ) ! (out)
1041 end if
1042 if ( (hst % time_bnds_output_count < 1) &
1043 & .or. (hst % time_bnds_output_count < time_count) ) then
1044 call slice(bndsvar, hst % growable_indices(bnds_ord), & ! (in)
1045 & start=hst % time_bnds_output_count+1, count=1) ! (in)
1046 call put(bndsvar, hst % time_bnds, 2)
1047 hst % time_bnds_output_count = hst % time_bnds_output_count + 1
1048 end if
1049 call close( var = bndsvar ) ! (inout)
1050 if ( present(difftime) ) then
1051 hst % time_bnds(1:1) = &
1052 & evalbyunit( difftime, '', hst % unlimited_units_symbol )
1053 elseif ( present(timed) ) then
1054 hst % time_bnds(1:1) = timed
1055 else
1056 hst % time_bnds(1:1) = time
1057 end if
1058 end if
1059 end if
1060 !-----------------------------------------------------------------
1061 ! メッセージ出力
1062 ! Output messages
1063 !-----------------------------------------------------------------
1064 if ( present_and_false(quiet) ) then
1065 call inquire( hst % dimvars(1), & ! (in)
1066 & url = url ) ! (out)
1067 call urlsplit( fullname = url, & ! (in)
1068 & file = file ) ! (out)
1069 if ( hst % unlimited_index < 1 ) then
1070 time_str = ''
1071 else
1072 timevar = hst % dimvars(hst % unlimited_index)
1073 call slice( timevar, & ! (in)
1074 & 1, start = hst % count(v_ord), count = 1 ) ! (in)
1075 call get( timevar, & ! (inout)
1076 & time_value, & ! (out)
1077 & 1, & ! (in)
1078 & err ) ! (out)
1079 time_str = '(time=' // trim( tochar( time_value(1) )) // ')'
1080 end if
1081 call messagenotify('M', 'HistoryPut', &
1082 & '"%a" => "%a" %a %a', &
1083 & ca = stoa( varname, file, time_str, avr_msg ) )
1084 end if
1085 !-----------------------------------------------------------------
1086 ! 終了処理, 例外処理
1087 ! Termination and Exception handling
1088 !-----------------------------------------------------------------
1089999 continue
1090 call storeerror( stat, subname, err, cause_c )
1091 call endsub(subname)
integer, parameter, public dc_earglack
Definition dc_error.f90:546
integer, parameter, public gt_eargsizemismatch
Definition dc_error.f90:515
real(dp), parameter, public dp_eps
倍精度実数型変数のマシンイプシロン.
Definition dc_types.f90:97

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_earglack, dc_error::dc_enotinit, dc_error::dc_noerr, gtool_history_internal::default, dc_types::dp, dc_types::dp_eps, dc_trace::endsub(), dc_error::gt_eargsizemismatch, dc_string::joinchar(), dc_present::present_and_false(), dc_present::present_and_not_empty(), dc_present::present_and_true(), dc_error::storeerror(), dc_types::string, timegoahead(), and dc_error::usr_errno.

Here is the call graph for this function:

◆ historyputint0()

subroutine historyputint0 ( character(*), intent(in)  varname,
integer, intent(in)  value,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3150 of file historyput.f90.

3153 !
3154 !
3156 use dc_date_types, only: dc_difftime
3157 use dc_types, only: dp
3158 use dc_trace, only: beginsub, endsub, dbgmessage
3159 implicit none
3160 character(*), intent(in):: varname
3161 integer, intent(in):: value
3162 type(GT_HISTORY), intent(inout), optional, target:: history
3163 character(*), intent(in), optional:: range
3164 real, intent(in), optional:: time
3165 logical, intent(in), optional:: quiet
3166 type(DC_DIFFTIME), intent(in), optional:: difftime
3167 real(DP), intent(in), optional:: timed
3168 logical, intent(in), optional:: time_average_store
3169 logical, intent(out), optional:: err
3170 interface historyputintex
3171 subroutine historyputintex( &
3172 & varname, array, arraysize, history, range, &
3173 & time, quiet, difftime, timed, time_average_store, err )
3175 use dc_date_types, only: dc_difftime
3176 use dc_types, only: dp
3177 character(*), intent(in):: varname
3178 integer, intent(in):: arraysize
3179 integer, intent(in):: array(arraysize)
3180 type(GT_HISTORY), intent(inout), target, optional:: history
3181 character(*), intent(in), optional:: range
3182 real, intent(in), optional:: time
3183 logical, intent(in), optional:: quiet
3184 type(DC_DIFFTIME), intent(in), optional:: difftime
3185 real(DP), intent(in), optional:: timed
3186 logical, intent(in), optional:: time_average_store
3187 logical, intent(out), optional:: err
3188 end subroutine historyputintex
3189 end interface
3190 character(*), parameter:: subname = "HistoryPutInt0"
3191 continue
3192 call beginsub(subname)
3193 call historyputintex( &
3194 & varname, & ! (in)
3195 & (/value/), 1, & ! (in)
3196 & history = history, & ! (inout) optional
3197 & range = range, & ! (in) optional
3198 & time = time, & ! (in) optional
3199 & quiet = quiet, & ! (in) optional
3200 & difftime = difftime, & ! (in) optional
3201 & timed = timed, & ! (in) optional
3202 & time_average_store = &
3203 & time_average_store, & ! (in) optional
3204 & err = err ) ! (out) optional
3205 call endsub(subname)
recursive subroutine historyputintex(varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
データ出力

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputint1()

subroutine historyputint1 ( character(*), intent(in)  varname,
integer, dimension(:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3207 of file historyput.f90.

3210 !
3211 !
3213 use dc_date_types, only: dc_difftime
3214 use dc_types, only: dp
3215 use dc_trace, only: beginsub, endsub, dbgmessage
3216 implicit none
3217 character(*), intent(in):: varname
3218 integer, intent(in):: array(:)
3219 type(GT_HISTORY), intent(inout), optional, target:: history
3220 character(*), intent(in), optional:: range
3221 real, intent(in), optional:: time
3222 logical, intent(in), optional:: quiet
3223 type(DC_DIFFTIME), intent(in), optional:: difftime
3224 real(DP), intent(in), optional:: timed
3225 logical, intent(in), optional:: time_average_store
3226 logical, intent(out), optional:: err
3227 interface historyputintex
3228 subroutine historyputintex( &
3229 & varname, array, arraysize, history, range, &
3230 & time, quiet, difftime, timed, time_average_store, err )
3232 use dc_date_types, only: dc_difftime
3233 use dc_types, only: dp
3234 character(*), intent(in):: varname
3235 integer, intent(in):: arraysize
3236 integer, intent(in):: array(arraysize)
3237 type(GT_HISTORY), intent(inout), target, optional:: history
3238 character(*), intent(in), optional:: range
3239 real, intent(in), optional:: time
3240 logical, intent(in), optional:: quiet
3241 type(DC_DIFFTIME), intent(in), optional:: difftime
3242 real(DP), intent(in), optional:: timed
3243 logical, intent(in), optional:: time_average_store
3244 logical, intent(out), optional:: err
3245 end subroutine historyputintex
3246 end interface
3247 character(*), parameter:: subname = "HistoryPutInt1"
3248 continue
3249 call beginsub(subname)
3250 call historyputintex( &
3251 & varname, & ! (in)
3252 & pack(array, .true.), size(array), & ! (in)
3253 & history = history, & ! (inout) optional
3254 & range = range, & ! (in) optional
3255 & time = time, & ! (in) optional
3256 & quiet = quiet, & ! (in) optional
3257 & difftime = difftime, & ! (in) optional
3258 & timed = timed, & ! (in) optional
3259 & time_average_store = &
3260 & time_average_store, & ! (in) optional
3261 & err = err ) ! (out) optional
3262 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputint2()

subroutine historyputint2 ( character(*), intent(in)  varname,
integer, dimension(:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3264 of file historyput.f90.

3267 !
3268 !
3270 use dc_date_types, only: dc_difftime
3271 use dc_types, only: dp
3272 use dc_trace, only: beginsub, endsub, dbgmessage
3273 implicit none
3274 character(*), intent(in):: varname
3275 integer, intent(in):: array(:,:)
3276 type(GT_HISTORY), intent(inout), optional, target:: history
3277 character(*), intent(in), optional:: range
3278 real, intent(in), optional:: time
3279 logical, intent(in), optional:: quiet
3280 type(DC_DIFFTIME), intent(in), optional:: difftime
3281 real(DP), intent(in), optional:: timed
3282 logical, intent(in), optional:: time_average_store
3283 logical, intent(out), optional:: err
3284 interface historyputintex
3285 subroutine historyputintex( &
3286 & varname, array, arraysize, history, range, &
3287 & time, quiet, difftime, timed, time_average_store, err )
3289 use dc_date_types, only: dc_difftime
3290 use dc_types, only: dp
3291 character(*), intent(in):: varname
3292 integer, intent(in):: arraysize
3293 integer, intent(in):: array(arraysize)
3294 type(GT_HISTORY), intent(inout), target, optional:: history
3295 character(*), intent(in), optional:: range
3296 real, intent(in), optional:: time
3297 logical, intent(in), optional:: quiet
3298 type(DC_DIFFTIME), intent(in), optional:: difftime
3299 real(DP), intent(in), optional:: timed
3300 logical, intent(in), optional:: time_average_store
3301 logical, intent(out), optional:: err
3302 end subroutine historyputintex
3303 end interface
3304 character(*), parameter:: subname = "HistoryPutInt2"
3305 continue
3306 call beginsub(subname)
3307 call historyputintex( &
3308 & varname, & ! (in)
3309 & pack(array, .true.), size(array), & ! (in)
3310 & history = history, & ! (inout) optional
3311 & range = range, & ! (in) optional
3312 & time = time, & ! (in) optional
3313 & quiet = quiet, & ! (in) optional
3314 & difftime = difftime, & ! (in) optional
3315 & timed = timed, & ! (in) optional
3316 & time_average_store = &
3317 & time_average_store, & ! (in) optional
3318 & err = err ) ! (out) optional
3319 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputint3()

subroutine historyputint3 ( character(*), intent(in)  varname,
integer, dimension(:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3321 of file historyput.f90.

3324 !
3325 !
3327 use dc_date_types, only: dc_difftime
3328 use dc_types, only: dp
3329 use dc_trace, only: beginsub, endsub, dbgmessage
3330 implicit none
3331 character(*), intent(in):: varname
3332 integer, intent(in):: array(:,:,:)
3333 type(GT_HISTORY), intent(inout), optional, target:: history
3334 character(*), intent(in), optional:: range
3335 real, intent(in), optional:: time
3336 logical, intent(in), optional:: quiet
3337 type(DC_DIFFTIME), intent(in), optional:: difftime
3338 real(DP), intent(in), optional:: timed
3339 logical, intent(in), optional:: time_average_store
3340 logical, intent(out), optional:: err
3341 interface historyputintex
3342 subroutine historyputintex( &
3343 & varname, array, arraysize, history, range, &
3344 & time, quiet, difftime, timed, time_average_store, err )
3346 use dc_date_types, only: dc_difftime
3347 use dc_types, only: dp
3348 character(*), intent(in):: varname
3349 integer, intent(in):: arraysize
3350 integer, intent(in):: array(arraysize)
3351 type(GT_HISTORY), intent(inout), target, optional:: history
3352 character(*), intent(in), optional:: range
3353 real, intent(in), optional:: time
3354 logical, intent(in), optional:: quiet
3355 type(DC_DIFFTIME), intent(in), optional:: difftime
3356 real(DP), intent(in), optional:: timed
3357 logical, intent(in), optional:: time_average_store
3358 logical, intent(out), optional:: err
3359 end subroutine historyputintex
3360 end interface
3361 character(*), parameter:: subname = "HistoryPutInt3"
3362 continue
3363 call beginsub(subname)
3364 call historyputintex( &
3365 & varname, & ! (in)
3366 & pack(array, .true.), size(array), & ! (in)
3367 & history = history, & ! (inout) optional
3368 & range = range, & ! (in) optional
3369 & time = time, & ! (in) optional
3370 & quiet = quiet, & ! (in) optional
3371 & difftime = difftime, & ! (in) optional
3372 & timed = timed, & ! (in) optional
3373 & time_average_store = &
3374 & time_average_store, & ! (in) optional
3375 & err = err ) ! (out) optional
3376 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputint4()

subroutine historyputint4 ( character(*), intent(in)  varname,
integer, dimension(:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3378 of file historyput.f90.

3381 !
3382 !
3384 use dc_date_types, only: dc_difftime
3385 use dc_types, only: dp
3386 use dc_trace, only: beginsub, endsub, dbgmessage
3387 implicit none
3388 character(*), intent(in):: varname
3389 integer, intent(in):: array(:,:,:,:)
3390 type(GT_HISTORY), intent(inout), optional, target:: history
3391 character(*), intent(in), optional:: range
3392 real, intent(in), optional:: time
3393 logical, intent(in), optional:: quiet
3394 type(DC_DIFFTIME), intent(in), optional:: difftime
3395 real(DP), intent(in), optional:: timed
3396 logical, intent(in), optional:: time_average_store
3397 logical, intent(out), optional:: err
3398 interface historyputintex
3399 subroutine historyputintex( &
3400 & varname, array, arraysize, history, range, &
3401 & time, quiet, difftime, timed, time_average_store, err )
3403 use dc_date_types, only: dc_difftime
3404 use dc_types, only: dp
3405 character(*), intent(in):: varname
3406 integer, intent(in):: arraysize
3407 integer, intent(in):: array(arraysize)
3408 type(GT_HISTORY), intent(inout), target, optional:: history
3409 character(*), intent(in), optional:: range
3410 real, intent(in), optional:: time
3411 logical, intent(in), optional:: quiet
3412 type(DC_DIFFTIME), intent(in), optional:: difftime
3413 real(DP), intent(in), optional:: timed
3414 logical, intent(in), optional:: time_average_store
3415 logical, intent(out), optional:: err
3416 end subroutine historyputintex
3417 end interface
3418 character(*), parameter:: subname = "HistoryPutInt4"
3419 continue
3420 call beginsub(subname)
3421 call historyputintex( &
3422 & varname, & ! (in)
3423 & pack(array, .true.), size(array), & ! (in)
3424 & history = history, & ! (inout) optional
3425 & range = range, & ! (in) optional
3426 & time = time, & ! (in) optional
3427 & quiet = quiet, & ! (in) optional
3428 & difftime = difftime, & ! (in) optional
3429 & timed = timed, & ! (in) optional
3430 & time_average_store = &
3431 & time_average_store, & ! (in) optional
3432 & err = err ) ! (out) optional
3433 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputint5()

subroutine historyputint5 ( character(*), intent(in)  varname,
integer, dimension(:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3435 of file historyput.f90.

3438 !
3439 !
3441 use dc_date_types, only: dc_difftime
3442 use dc_types, only: dp
3443 use dc_trace, only: beginsub, endsub, dbgmessage
3444 implicit none
3445 character(*), intent(in):: varname
3446 integer, intent(in):: array(:,:,:,:,:)
3447 type(GT_HISTORY), intent(inout), optional, target:: history
3448 character(*), intent(in), optional:: range
3449 real, intent(in), optional:: time
3450 logical, intent(in), optional:: quiet
3451 type(DC_DIFFTIME), intent(in), optional:: difftime
3452 real(DP), intent(in), optional:: timed
3453 logical, intent(in), optional:: time_average_store
3454 logical, intent(out), optional:: err
3455 interface historyputintex
3456 subroutine historyputintex( &
3457 & varname, array, arraysize, history, range, &
3458 & time, quiet, difftime, timed, time_average_store, err )
3460 use dc_date_types, only: dc_difftime
3461 use dc_types, only: dp
3462 character(*), intent(in):: varname
3463 integer, intent(in):: arraysize
3464 integer, intent(in):: array(arraysize)
3465 type(GT_HISTORY), intent(inout), target, optional:: history
3466 character(*), intent(in), optional:: range
3467 real, intent(in), optional:: time
3468 logical, intent(in), optional:: quiet
3469 type(DC_DIFFTIME), intent(in), optional:: difftime
3470 real(DP), intent(in), optional:: timed
3471 logical, intent(in), optional:: time_average_store
3472 logical, intent(out), optional:: err
3473 end subroutine historyputintex
3474 end interface
3475 character(*), parameter:: subname = "HistoryPutInt5"
3476 continue
3477 call beginsub(subname)
3478 call historyputintex( &
3479 & varname, & ! (in)
3480 & pack(array, .true.), size(array), & ! (in)
3481 & history = history, & ! (inout) optional
3482 & range = range, & ! (in) optional
3483 & time = time, & ! (in) optional
3484 & quiet = quiet, & ! (in) optional
3485 & difftime = difftime, & ! (in) optional
3486 & timed = timed, & ! (in) optional
3487 & time_average_store = &
3488 & time_average_store, & ! (in) optional
3489 & err = err ) ! (out) optional
3490 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputint6()

subroutine historyputint6 ( character(*), intent(in)  varname,
integer, dimension(:,:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3492 of file historyput.f90.

3495 !
3496 !
3498 use dc_date_types, only: dc_difftime
3499 use dc_types, only: dp
3500 use dc_trace, only: beginsub, endsub, dbgmessage
3501 implicit none
3502 character(*), intent(in):: varname
3503 integer, intent(in):: array(:,:,:,:,:,:)
3504 type(GT_HISTORY), intent(inout), optional, target:: history
3505 character(*), intent(in), optional:: range
3506 real, intent(in), optional:: time
3507 logical, intent(in), optional:: quiet
3508 type(DC_DIFFTIME), intent(in), optional:: difftime
3509 real(DP), intent(in), optional:: timed
3510 logical, intent(in), optional:: time_average_store
3511 logical, intent(out), optional:: err
3512 interface historyputintex
3513 subroutine historyputintex( &
3514 & varname, array, arraysize, history, range, &
3515 & time, quiet, difftime, timed, time_average_store, err )
3517 use dc_date_types, only: dc_difftime
3518 use dc_types, only: dp
3519 character(*), intent(in):: varname
3520 integer, intent(in):: arraysize
3521 integer, intent(in):: array(arraysize)
3522 type(GT_HISTORY), intent(inout), target, optional:: history
3523 character(*), intent(in), optional:: range
3524 real, intent(in), optional:: time
3525 logical, intent(in), optional:: quiet
3526 type(DC_DIFFTIME), intent(in), optional:: difftime
3527 real(DP), intent(in), optional:: timed
3528 logical, intent(in), optional:: time_average_store
3529 logical, intent(out), optional:: err
3530 end subroutine historyputintex
3531 end interface
3532 character(*), parameter:: subname = "HistoryPutInt6"
3533 continue
3534 call beginsub(subname)
3535 call historyputintex( &
3536 & varname, & ! (in)
3537 & pack(array, .true.), size(array), & ! (in)
3538 & history = history, & ! (inout) optional
3539 & range = range, & ! (in) optional
3540 & time = time, & ! (in) optional
3541 & quiet = quiet, & ! (in) optional
3542 & difftime = difftime, & ! (in) optional
3543 & timed = timed, & ! (in) optional
3544 & time_average_store = &
3545 & time_average_store, & ! (in) optional
3546 & err = err ) ! (out) optional
3547 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputint7()

subroutine historyputint7 ( character(*), intent(in)  varname,
integer, dimension(:,:,:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3549 of file historyput.f90.

3552 !
3553 !
3555 use dc_date_types, only: dc_difftime
3556 use dc_types, only: dp
3557 use dc_trace, only: beginsub, endsub, dbgmessage
3558 implicit none
3559 character(*), intent(in):: varname
3560 integer, intent(in):: array(:,:,:,:,:,:,:)
3561 type(GT_HISTORY), intent(inout), optional, target:: history
3562 character(*), intent(in), optional:: range
3563 real, intent(in), optional:: time
3564 logical, intent(in), optional:: quiet
3565 type(DC_DIFFTIME), intent(in), optional:: difftime
3566 real(DP), intent(in), optional:: timed
3567 logical, intent(in), optional:: time_average_store
3568 logical, intent(out), optional:: err
3569 interface historyputintex
3570 subroutine historyputintex( &
3571 & varname, array, arraysize, history, range, &
3572 & time, quiet, difftime, timed, time_average_store, err )
3574 use dc_date_types, only: dc_difftime
3575 use dc_types, only: dp
3576 character(*), intent(in):: varname
3577 integer, intent(in):: arraysize
3578 integer, intent(in):: array(arraysize)
3579 type(GT_HISTORY), intent(inout), target, optional:: history
3580 character(*), intent(in), optional:: range
3581 real, intent(in), optional:: time
3582 logical, intent(in), optional:: quiet
3583 type(DC_DIFFTIME), intent(in), optional:: difftime
3584 real(DP), intent(in), optional:: timed
3585 logical, intent(in), optional:: time_average_store
3586 logical, intent(out), optional:: err
3587 end subroutine historyputintex
3588 end interface
3589 character(*), parameter:: subname = "HistoryPutInt7"
3590 continue
3591 call beginsub(subname)
3592 call historyputintex( &
3593 & varname, & ! (in)
3594 & pack(array, .true.), size(array), & ! (in)
3595 & history = history, & ! (inout) optional
3596 & range = range, & ! (in) optional
3597 & time = time, & ! (in) optional
3598 & quiet = quiet, & ! (in) optional
3599 & difftime = difftime, & ! (in) optional
3600 & timed = timed, & ! (in) optional
3601 & time_average_store = &
3602 & time_average_store, & ! (in) optional
3603 & err = err ) ! (out) optional
3604 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputintex().

Here is the call graph for this function:

◆ historyputintex()

recursive subroutine historyputintex ( character(*), intent(in)  varname,
integer, dimension(arraysize), intent(in)  array,
integer, intent(in)  arraysize,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

データ出力

Parameters
[in]varname

iline 1

こちらは配列サイズを指定する必要があるため、 HistoryPut を利用してください。

Definition at line 1093 of file historyput.f90.

1096 !
1101 !
1105 use gtdata_generic, only: put, gtvarsync, slice, inquire, &
1107 use gtdata_types, only: gt_variable
1108 use dc_types, only: string, dp, dp_eps
1109 use dc_string, only: stoa, printf, tochar, joinchar
1113 use dc_message, only: messagenotify
1114 use dc_url, only: urlsplit, urlmerge
1115 use dc_date_types, only: dc_difftime
1116 use dc_date_generic, only: operator(==), dcdifftimecreate, &
1117 & mod, operator(-), evalbyunit, operator(/), tochar
1118 use dc_trace, only: beginsub, endsub, dbgmessage
1119 implicit none
1120 character(*), intent(in):: varname
1121 integer, intent(in):: arraysize
1122 integer, intent(in):: array(arraysize)
1123 type(GT_HISTORY), intent(inout), target, optional:: history
1124 character(*), intent(in), optional:: range
1125 ! gtool4 のコンマ記法による
1126 ! データの出力範囲指定
1127 !
1128 ! このオプションを用いる
1129 ! 際には、必ず *HistorySetTime*
1130 ! によって明示的に時刻の設定
1131 ! を行ってください。
1132 ! また、*HistoryGet* と異なり、
1133 ! 時刻に関する範囲指定は
1134 ! 行なえません。
1135 !
1136 ! 書式に関する詳細は
1137 ! {gtool4 netCDF 規約}[link:../xref.htm#label-6]
1138 ! の「5.4 コンマ記法」を参照して
1139 ! ください。
1140 real, intent(in), optional:: time
1141 !
1142 ! 時刻. (単精度実数型)
1143 !
1144 ! この引数を与える場合,
1145 ! 出力するかどうかをプログラムが
1146 ! 自動的に判断します.
1147 ! *time* に与えられた数値が
1148 ! HistoryCreate に与えた *interval*
1149 ! で割り切れる場合には出力が行われます.
1150 !
1151 ! HistoryAddVariable で
1152 ! *time_average* (または *average*)
1153 ! に .true. を与えた場合には,
1154 ! *time*, *difftime*
1155 ! のどちらの引数も与えない場合に,
1156 ! プログラムはエラーを発生させます.
1157 !
1158 ! また, この引数と *range* は併用できません.
1159 ! 併用した場合には,
1160 ! プログラムはエラーを発生させます.
1161 !
1162 logical, intent(in), optional:: quiet
1163 ! .false. を与えた場合,
1164 ! このサブルーチンが呼ばれる毎に
1165 ! ファイル名と時刻が表示されます.
1166 ! デフォルトは .true. です.
1167 !
1168 ! If ".false." is given,
1169 ! a filename and time is displayed
1170 ! when this subroutine is called.
1171 ! Default value is ".true.".
1172 !
1173 type(DC_DIFFTIME), intent(in), optional:: difftime
1174 !
1175 ! 時刻 (dc_date_types::DC_DIFFTIME 型)
1176 !
1177 ! 効果は *time* と同様です.
1178 !
1179 real(DP), intent(in), optional:: timed
1180 !
1181 ! 時刻 (倍精度実数型)
1182 !
1183 ! 効果は *time* と同様です.
1184 !
1185 logical, intent(in), optional:: time_average_store
1186 !
1187 ! 平均値の出力フラグ.
1188 ! この値に .true. を与えた場合には,
1189 ! 出力せずに与えられた値を一旦蓄えます.
1190 ! .false. を与えた場合には,
1191 ! *time* もしくは *difftime* と
1192 ! HistoryCreate に与えた *interval* に
1193 ! 関わらず出力を行います.
1194 !
1195 ! HistoryAddVariable で
1196 ! *time_average* (または *average*)
1197 ! に .true. を与えない場合は無効です.
1198 !
1199 ! *time* と *difftime*
1200 ! のどちらかを同時に与える必要があります.
1201 !
1202 logical, intent(out), optional:: err
1203 ! 例外処理用フラグ.
1204 ! デフォルトでは, この手続き内でエラーが
1205 ! 生じた場合, プログラムは強制終了します.
1206 ! 引数 *err* が与えられる場合,
1207 ! プログラムは強制終了せず, 代わりに
1208 ! *err* に .true. が代入されます.
1209 !
1210 ! Exception handling flag.
1211 ! By default, when error occur in
1212 ! this procedure, the program aborts.
1213 ! If this *err* argument is given,
1214 ! .true. is substituted to *err* and
1215 ! the program does not abort.
1216 type(GT_VARIABLE):: var, timevar
1217 character(STRING):: url, file, time_str
1218 real:: time_value(1:1)
1219 type(GT_HISTORY), pointer:: hst =>null()
1220 integer :: v_ord
1221 character(STRING):: avr_msg
1222 integer, target:: array_work(arraysize)
1223 integer, pointer:: array_work2(:) =>null()
1224 integer:: arraysize_work2
1225 integer, allocatable:: start(:), count(:), stride(:)
1226 integer :: i, dims
1227 logical :: slice_err
1228 character(STRING):: time_name
1229 character(*), parameter:: bnds_suffix = '_bnds'
1230 type(GT_VARIABLE):: bndsvar
1231 integer:: bnds_ord, time_count, bnds_rank
1232 logical:: output_step
1233 real(DP):: timedw
1234! type(DC_DIFFTIME):: difftimew
1235 real(DP):: avr_coef
1236 integer:: stat
1237 character(STRING):: cause_c
1238 interface timegoahead
1239 subroutine timegoahead( varname, var, head, history, err )
1240 use gtdata_types, only: gt_variable
1242 character(len = *), intent(in):: varname
1243 type(GT_VARIABLE), intent(out):: var
1244 real, intent(in):: head
1245 type(GT_HISTORY), intent(inout), optional, target:: history
1246 logical, intent(out), optional:: err
1247 end subroutine timegoahead
1248 end interface
1249 character(*), parameter:: subname = "HistoryPutIntEx"
1250 continue
1251 call beginsub(subname, 'varname=%a range=%a', &
1252 & ca=stoa(varname, present_select('', '(no-range)', range)))
1253 stat = dc_noerr
1254 cause_c = ""
1255 if (present(history)) then
1256 hst => history
1257 else
1258 hst => default
1259 endif
1260 !-----------------------------------------------------------------
1261 ! 初期設定のチェック
1262 ! Check initialization
1263 !-----------------------------------------------------------------
1264 if ( .not. hst % initialized ) then
1265 stat = dc_enotinit
1266 cause_c = 'GT_HISTORY'
1267 goto 999
1268 end if
1269 !-----------------------------------------------------------------
1270 ! time と range の同時使用の禁止
1271 ! Permit concurrent use of "time" and "range"
1272 !-----------------------------------------------------------------
1273 if ( ( present(time) .or. present(difftime) .or. present(timed) ) &
1274 & .and. present_and_not_empty(range) ) then
1275 call messagenotify('W', subname, &
1276 & '(varname=%c) "range" and "time" or "timed" or "difftime" are not suppored at the same time', &
1277 & c1 = trim(varname) )
1278 stat = usr_errno
1279 cause_c = '"range" and "time" or "timed" or "difftime" are not suppored at the same time'
1280 goto 999
1281 end if
1282 !-----------------------------------------------------------------
1283 ! hst 内の varname 変数の変数番号を取得
1284 ! Get variable number of "varname" in "hst"
1285 !-----------------------------------------------------------------
1286 v_ord = lookup_variable_ord(hst, varname)
1287 timedw = 0.0_dp
1288 !-----------------------------------------------------------------
1289 ! 時間平均値のためのデータ格納
1290 ! Store data for time average value
1291 !-----------------------------------------------------------------
1292 if ( present(difftime) ) then
1293 timedw = evalbyunit( difftime, '', hst % unlimited_units_symbol )
1294 elseif ( present(timed) ) then
1295 timedw = timed
1296 elseif ( present(time) ) then
1297 timedw = time
1298 end if
1299 if ( v_ord > 0 ) then
1300 !
1301 ! var_avr_count == -1: 平均処理は行わない.
1302 ! var_avr_count >= 0: 平均処理を行う.
1303 !
1304 ! これらは HistoryAddVariable で指定される.
1305 !
1306 if ( hst % var_avr_count( v_ord ) > -1 ) then
1307 ! 時刻が指定されない場合には平均処理が不可能なため
1308 ! エラー発生. dc_error のエラーメッセージだけでは多少
1309 ! 不親切なので, エラー直前に下記の警告メッセージ表示.
1310 !
1311 if ( .not. present(time) &
1312 & .and. .not. present(timed) &
1313 & .and. .not. present(difftime) ) then
1314 call messagenotify('W', subname, &
1315 & '(varname=%c) arguments "time" or "timed" or "difftime" are needed ' // &
1316 & 'when "time_average=.true." is specified to "HistoryAddVariable"', &
1317 & c1 = trim(varname) )
1318 stat = dc_earglack
1319 cause_c = 'time'
1320 goto 999
1321 end if
1322 ! 与えられたデータのサイズと内部で積算しているデータのサイズが
1323 ! 一致しない場合にもエラーを発生.
1324 ! データサイズは HistoryPut -> HistoryPutEx の際に
1325 ! 全て 1 次元化しているため, 単純に配列サイズでのみ判定.
1326 ! dc_error のエラーメッセージだけでは多少
1327 ! 不親切なので, エラー直前に下記の警告メッセージ表示.
1328 !
1329 if ( arraysize /= hst % var_avr_data( v_ord ) % length ) then
1330 call messagenotify('W', subname, &
1331 & '(varname=%c) size of array should be (%d). size of array is (%d)', &
1332 & i = (/hst % var_avr_data( v_ord ) % length, arraysize/), &
1333 & c1 = trim(varname) )
1334 stat = gt_eargsizemismatch
1335 cause_c = 'array'
1336 goto 999
1337 end if
1338 ! この if 〜 end if では以下の動作を行う.
1339 !
1340 ! * 平均処理時の係数 (avr_coef) の算出
1341 ! * 係数を算出するための以下の値の設定
1342 ! * 基本時間間隔 (var_avr_baseint)
1343 ! * 前回出力の時刻 (var_avr_prevtime)
1344 ! * 初回出力の判定を行うラベル (var_avr_firstput) の設定
1345 !
1346 ! 1 度目に呼ばれた場合はとりあえず係数を 1.0 にするとともに,
1347 ! prevtime に現在時刻を保管
1348 !
1349 if ( hst % var_avr_firstput( v_ord ) ) then
1350 if ( hst % var_avr_count( v_ord ) == 0 ) then
1351 avr_coef = 1.0_dp
1352 hst % var_avr_prevtime( v_ord ) = timedw
1353 else
1354 hst % var_avr_baseint( v_ord ) = &
1355 & timedw - hst % var_avr_prevtime( v_ord )
1356 avr_coef = 1.0_dp
1357 hst % var_avr_prevtime( v_ord ) = timedw
1358 hst % var_avr_firstput( v_ord ) = .false.
1359 end if
1360 ! 2 度目以降に呼ばれた場合
1361 !
1362 else
1363 ! 前回出力を行った (var_avr_count == 0 に初期化された)
1364 ! 場合には baseint に前回時刻と今回時刻の差を設定.
1365 ! avr_coef には 1 を設定.
1366 ! 最後に prevtime に今回の時刻を保管.
1367 !
1368 if ( hst % var_avr_count( v_ord ) == 0 ) then
1369 hst % var_avr_baseint( v_ord ) = &
1370 & timedw - hst % var_avr_prevtime( v_ord )
1371 avr_coef = 1.0_dp
1372 hst % var_avr_prevtime( v_ord ) = timedw
1373 ! var_avr_count > 0 (平均処理されるデータが蓄積されている)
1374 ! 場合には avr_coef には前回時刻と今回時刻の差の,
1375 ! baseint からの比を設定する.
1376 ! 最後に prevtime に今回の時刻を保管.
1377 !
1378 else
1379 avr_coef = ( timedw - hst % var_avr_prevtime( v_ord ) ) &
1380 & / hst % var_avr_baseint( v_ord )
1381 hst % var_avr_prevtime( v_ord ) = timedw
1382 end if
1383 end if
1384 ! 積算値 a_DataAvr に, 今回のデータに係数を掛けたもの
1385 ! を加算する.
1386 !
1387 hst % var_avr_data( v_ord ) % a_DataAvr = &
1388 & hst % var_avr_data( v_ord ) % a_DataAvr + array * avr_coef
1389 ! 積算カウント var_avr_count に +1 し,
1390 ! 係数の積算値 var_avr_coefsum に今回設定された
1391 ! 係数を加算する.
1392 !
1393 hst % var_avr_count( v_ord ) = &
1394 & hst % var_avr_count( v_ord ) + 1
1395 hst % var_avr_coefsum( v_ord ) = &
1396 & hst % var_avr_coefsum( v_ord ) + avr_coef
1397 ! time_bnds(2) に今回の時刻を設定する.
1398 ! (毎回上書きされる).
1399 !
1400 if ( present(difftime) ) then
1401 hst % time_bnds(2:2) = evalbyunit( difftime, '', hst % unlimited_units_symbol )
1402 elseif ( present (timed) ) then
1403 hst % time_bnds(2:2) = timed
1404 else
1405 hst % time_bnds(2:2) = time
1406 end if
1407 end if
1408 end if
1409 !-----------------------------------------------------------------
1410 ! 初期時刻の設定
1411 ! Configure initial time
1412 !-----------------------------------------------------------------
1413 if ( .not. hst % origin_setting ) then
1414 if ( present(difftime) ) then
1415 hst % origin = evalbyunit( difftime, '', hst % unlimited_units_symbol )
1416 hst % time_bnds = evalbyunit( difftime, '', hst % unlimited_units_symbol )
1417 hst % origin_setting = .true.
1418 elseif ( present(timed) ) then
1419 hst % origin = timed
1420 hst % time_bnds = timed
1421 hst % origin_setting = .true.
1422 elseif ( present(time) ) then
1423 hst % origin = time
1424 hst % time_bnds = time
1425 hst % origin_setting = .true.
1426 end if
1427!!$ if ( present(difftime) ) then
1428!!$ hst % origin = difftime
1429!!$ hst % time_bnds = EvalByUnit( difftime, '', hst % unlimited_units_symbol )
1430!!$ hst % origin_setting = .true.
1431!!$ elseif ( present(timed) ) then
1432!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
1433!!$ & real(timed), '', hst % unlimited_units_symbol ) ! (in)
1434!!$ hst % time_bnds = timed
1435!!$ hst % origin_setting = .true.
1436!!$ elseif ( present(time) ) then
1437!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
1438!!$ & time, '', hst % unlimited_units_symbol ) ! (in)
1439!!$ hst % time_bnds = time
1440!!$ hst % origin_setting = .true.
1441!!$ end if
1442 end if
1443 !-----------------------------------------------------------------
1444 ! 時刻の自動チェック
1445 ! Check time automatically
1446 !-----------------------------------------------------------------
1447 output_step = .true.
1448 if ( present_and_false(time_average_store) ) then
1449 output_step = .true.
1450 elseif ( present_and_true(time_average_store) ) then
1451 output_step = .false.
1452 elseif ( present(difftime) .or. present(timed) .or. present(time) ) then
1453 output_step = .false.
1454 if ( abs( hst % interval ) < dp_eps ) then
1455 output_step = .true.
1456 else
1457 if ( abs( mod( timedw - hst % origin, hst % interval ) ) < dp_eps ) then
1458 output_step = .true.
1459 end if
1460 end if
1461 end if
1462 !-------------------------
1463 ! 時間平均値出力のための情報処理
1464 ! Information processing for output time-averaged value
1465 if ( .not. output_step ) then
1466 goto 999
1467 else
1468 array_work = array
1469 avr_msg = ''
1470 if ( v_ord > 0 ) then
1471 if ( hst % var_avr_count( v_ord ) > -1 ) then
1472 if ( present_and_false(quiet) ) then
1473 avr_msg = '(time average of ' // trim( tochar(hst % var_avr_count( v_ord )) ) // ' step data)'
1474 end if
1475 !-------------------
1476 ! 蓄えた値の時間平均化
1477 ! Average stored value in time direction
1478 ! a_DataAvr に蓄えられた値を係数の積算値で割って,
1479 ! これを出力値とする.
1480 !
1481 array_work = int( &
1482 & ( hst % var_avr_data( v_ord ) % a_DataAvr ) / ( hst % var_avr_coefsum( v_ord ) ), &
1483 & kind = kind(array_work) )
1484 ! 積算値, 積算カウント, 係数の積算値をクリアする.
1485 !
1486 hst % var_avr_data( v_ord ) % a_DataAvr = 0.0
1487 hst % var_avr_count( v_ord ) = 0
1488 hst % var_avr_coefsum( v_ord ) = 0.0_dp
1489 hst % var_avr_firstput( v_ord ) = .false.
1490 end if
1491 end if
1492 end if
1493 array_work2 => array_work
1494 arraysize_work2 = arraysize
1495 !-----------------------------------------------------------------
1496 ! 時刻を1つ進めて, データ出力
1497 ! Progress one time, and output data
1498 !-----------------------------------------------------------------
1499 call timegoahead( &
1500 & varname = varname, & ! (in)
1501 & head = real(array_work2(1)), & ! (in)
1502 & var = var, & ! (out)
1503 & history = history, & ! (inout)
1504 & err = err ) ! (out)
1505 call inquire( var, & ! (in)
1506 & alldims=dims ) ! (out)
1507 if (present_and_not_empty(range) .and. (dims < 1)) then
1508 call dbgmessage('varname=<%c> has no dimension. so range is ignoread.', &
1509 & c1=trim(varname))
1510 end if
1511 if (.not. (present_and_not_empty(range) .and. (dims > 0))) then
1512 ! range 無しの普通の出力の場合
1513 call put(var, array_work2, arraysize_work2)
1514 else
1515 ! range があり, 且つ varname がちゃんと次元を持っている場合
1516 !
1517 ! 元々の start, count, stride を保持. データを与えた後に復元する.
1518 allocate(start(dims), count(dims), stride(dims))
1519 do i = 1, dims
1520 call get_slice(var, i, start(i), count(i), stride(i))
1521 end do
1522 slice_err = .false. ! 不要だが Slice の引用仕様として必要なため
1523 call slice(var, range, slice_err)
1524 call put(var, array_work2, arraysize_work2)
1525 ! 復元
1526 do i = 1, dims
1527 call slice(var, i, start(i), count(i), stride(i))
1528 end do
1529 deallocate(start, count, stride)
1530 end if
1531 call gtvarsync(var)
1532 if ( hst % mpi_gather .and. v_ord > 0 ) then
1533 deallocate( array_work2 )
1534 end if
1535 !-----------------------------------------------------------------
1536 ! "time_bnds" 変数への出力
1537 ! Output to "time_bnds" variable
1538 !-----------------------------------------------------------------
1539 if ( v_ord > 0 ) then
1540 if ( hst % var_avr_count( v_ord ) > -1 ) then
1541 !-------------------
1542 ! 時間次元の名前とファイル名を取得
1543 ! Get name of time dimension, and filename
1544 timevar = hst % dimvars( hst % unlimited_index )
1545 call inquire( &
1546 & var = timevar, & ! (in)
1547 & url = url, & ! (out)
1548 & name = time_name ) ! (out)
1549 call urlsplit( fullname = url, & ! (in)
1550 & file = file ) ! (out)
1551 !-------------------
1552 ! "time_bnds" 変数の取得
1553 ! Get "time_bnds" variable
1554 call open( var = bndsvar, &
1555 & url = urlmerge(file=file, var=trim(time_name) // bnds_suffix) )
1556 bnds_ord = lookup_variable_ord( hst, trim(time_name) // bnds_suffix)
1557 !-------------------
1558 ! "time_bnds" 変数への出力
1559 ! Output to "time_bnds" variable
1560 call inquire( &
1561 & var = bndsvar, & ! (in)
1562 & rank = bnds_rank ) ! (out)
1563 time_count = 1
1564 if ( bnds_rank > 1 ) then
1565 call inquire( &
1566 & var = bndsvar, & ! (in)
1567 & dimord = hst % growable_indices(bnds_ord), & ! (in)
1568 & allcount = time_count ) ! (out)
1569 end if
1570 if ( (hst % time_bnds_output_count < 1) &
1571 & .or. (hst % time_bnds_output_count < time_count) ) then
1572 call slice(bndsvar, hst % growable_indices(bnds_ord), & ! (in)
1573 & start=hst % time_bnds_output_count+1, count=1) ! (in)
1574 call put(bndsvar, hst % time_bnds, 2)
1575 hst % time_bnds_output_count = hst % time_bnds_output_count + 1
1576 end if
1577 call close( var = bndsvar ) ! (inout)
1578 if ( present(difftime) ) then
1579 hst % time_bnds(1:1) = &
1580 & evalbyunit( difftime, '', hst % unlimited_units_symbol )
1581 elseif ( present(timed) ) then
1582 hst % time_bnds(1:1) = timed
1583 else
1584 hst % time_bnds(1:1) = time
1585 end if
1586 end if
1587 end if
1588 !-----------------------------------------------------------------
1589 ! メッセージ出力
1590 ! Output messages
1591 !-----------------------------------------------------------------
1592 if ( present_and_false(quiet) ) then
1593 call inquire( hst % dimvars(1), & ! (in)
1594 & url = url ) ! (out)
1595 call urlsplit( fullname = url, & ! (in)
1596 & file = file ) ! (out)
1597 if ( hst % unlimited_index < 1 ) then
1598 time_str = ''
1599 else
1600 timevar = hst % dimvars(hst % unlimited_index)
1601 call slice( timevar, & ! (in)
1602 & 1, start = hst % count(v_ord), count = 1 ) ! (in)
1603 call get( timevar, & ! (inout)
1604 & time_value, & ! (out)
1605 & 1, & ! (in)
1606 & err ) ! (out)
1607 time_str = '(time=' // trim( tochar( time_value(1) )) // ')'
1608 end if
1609 call messagenotify('M', 'HistoryPut', &
1610 & '"%a" => "%a" %a %a', &
1611 & ca = stoa( varname, file, time_str, avr_msg ) )
1612 end if
1613 !-----------------------------------------------------------------
1614 ! 終了処理, 例外処理
1615 ! Termination and Exception handling
1616 !-----------------------------------------------------------------
1617999 continue
1618 call storeerror( stat, subname, err, cause_c )
1619 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_earglack, dc_error::dc_enotinit, dc_error::dc_noerr, gtool_history_internal::default, dc_types::dp, dc_types::dp_eps, dc_trace::endsub(), dc_error::gt_eargsizemismatch, dc_string::joinchar(), dc_present::present_and_false(), dc_present::present_and_not_empty(), dc_present::present_and_true(), dc_error::storeerror(), dc_types::string, timegoahead(), and dc_error::usr_errno.

Here is the call graph for this function:

◆ historyputreal0()

subroutine historyputreal0 ( character(*), intent(in)  varname,
real, intent(in)  value,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2694 of file historyput.f90.

2697 !
2698 !
2700 use dc_date_types, only: dc_difftime
2701 use dc_types, only: dp
2702 use dc_trace, only: beginsub, endsub, dbgmessage
2703 implicit none
2704 character(*), intent(in):: varname
2705 real, intent(in):: value
2706 type(GT_HISTORY), intent(inout), optional, target:: history
2707 character(*), intent(in), optional:: range
2708 real, intent(in), optional:: time
2709 logical, intent(in), optional:: quiet
2710 type(DC_DIFFTIME), intent(in), optional:: difftime
2711 real(DP), intent(in), optional:: timed
2712 logical, intent(in), optional:: time_average_store
2713 logical, intent(out), optional:: err
2714 interface historyputrealex
2715 subroutine historyputrealex( &
2716 & varname, array, arraysize, history, range, &
2717 & time, quiet, difftime, timed, time_average_store, err )
2719 use dc_date_types, only: dc_difftime
2720 use dc_types, only: dp
2721 character(*), intent(in):: varname
2722 integer, intent(in):: arraysize
2723 real, intent(in):: array(arraysize)
2724 type(GT_HISTORY), intent(inout), target, optional:: history
2725 character(*), intent(in), optional:: range
2726 real, intent(in), optional:: time
2727 logical, intent(in), optional:: quiet
2728 type(DC_DIFFTIME), intent(in), optional:: difftime
2729 real(DP), intent(in), optional:: timed
2730 logical, intent(in), optional:: time_average_store
2731 logical, intent(out), optional:: err
2732 end subroutine historyputrealex
2733 end interface
2734 character(*), parameter:: subname = "HistoryPutReal0"
2735 continue
2736 call beginsub(subname)
2737 call historyputrealex( &
2738 & varname, & ! (in)
2739 & (/value/), 1, & ! (in)
2740 & history = history, & ! (inout) optional
2741 & range = range, & ! (in) optional
2742 & time = time, & ! (in) optional
2743 & quiet = quiet, & ! (in) optional
2744 & difftime = difftime, & ! (in) optional
2745 & timed = timed, & ! (in) optional
2746 & time_average_store = &
2747 & time_average_store, & ! (in) optional
2748 & err = err ) ! (out) optional
2749 call endsub(subname)
recursive subroutine historyputrealex(varname, array, arraysize, history, range, time, quiet, difftime, timed, time_average_store, err)
データ出力

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputreal1()

subroutine historyputreal1 ( character(*), intent(in)  varname,
real, dimension(:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2751 of file historyput.f90.

2754 !
2755 !
2757 use dc_date_types, only: dc_difftime
2758 use dc_types, only: dp
2759 use dc_trace, only: beginsub, endsub, dbgmessage
2760 implicit none
2761 character(*), intent(in):: varname
2762 real, intent(in):: array(:)
2763 type(GT_HISTORY), intent(inout), optional, target:: history
2764 character(*), intent(in), optional:: range
2765 real, intent(in), optional:: time
2766 logical, intent(in), optional:: quiet
2767 type(DC_DIFFTIME), intent(in), optional:: difftime
2768 real(DP), intent(in), optional:: timed
2769 logical, intent(in), optional:: time_average_store
2770 logical, intent(out), optional:: err
2771 interface historyputrealex
2772 subroutine historyputrealex( &
2773 & varname, array, arraysize, history, range, &
2774 & time, quiet, difftime, timed, time_average_store, err )
2776 use dc_date_types, only: dc_difftime
2777 use dc_types, only: dp
2778 character(*), intent(in):: varname
2779 integer, intent(in):: arraysize
2780 real, intent(in):: array(arraysize)
2781 type(GT_HISTORY), intent(inout), target, optional:: history
2782 character(*), intent(in), optional:: range
2783 real, intent(in), optional:: time
2784 logical, intent(in), optional:: quiet
2785 type(DC_DIFFTIME), intent(in), optional:: difftime
2786 real(DP), intent(in), optional:: timed
2787 logical, intent(in), optional:: time_average_store
2788 logical, intent(out), optional:: err
2789 end subroutine historyputrealex
2790 end interface
2791 character(*), parameter:: subname = "HistoryPutReal1"
2792 continue
2793 call beginsub(subname)
2794 call historyputrealex( &
2795 & varname, & ! (in)
2796 & pack(array, .true.), size(array), & ! (in)
2797 & history = history, & ! (inout) optional
2798 & range = range, & ! (in) optional
2799 & time = time, & ! (in) optional
2800 & quiet = quiet, & ! (in) optional
2801 & difftime = difftime, & ! (in) optional
2802 & timed = timed, & ! (in) optional
2803 & time_average_store = &
2804 & time_average_store, & ! (in) optional
2805 & err = err ) ! (out) optional
2806 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputreal2()

subroutine historyputreal2 ( character(*), intent(in)  varname,
real, dimension(:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2808 of file historyput.f90.

2811 !
2812 !
2814 use dc_date_types, only: dc_difftime
2815 use dc_types, only: dp
2816 use dc_trace, only: beginsub, endsub, dbgmessage
2817 implicit none
2818 character(*), intent(in):: varname
2819 real, intent(in):: array(:,:)
2820 type(GT_HISTORY), intent(inout), optional, target:: history
2821 character(*), intent(in), optional:: range
2822 real, intent(in), optional:: time
2823 logical, intent(in), optional:: quiet
2824 type(DC_DIFFTIME), intent(in), optional:: difftime
2825 real(DP), intent(in), optional:: timed
2826 logical, intent(in), optional:: time_average_store
2827 logical, intent(out), optional:: err
2828 interface historyputrealex
2829 subroutine historyputrealex( &
2830 & varname, array, arraysize, history, range, &
2831 & time, quiet, difftime, timed, time_average_store, err )
2833 use dc_date_types, only: dc_difftime
2834 use dc_types, only: dp
2835 character(*), intent(in):: varname
2836 integer, intent(in):: arraysize
2837 real, intent(in):: array(arraysize)
2838 type(GT_HISTORY), intent(inout), target, optional:: history
2839 character(*), intent(in), optional:: range
2840 real, intent(in), optional:: time
2841 logical, intent(in), optional:: quiet
2842 type(DC_DIFFTIME), intent(in), optional:: difftime
2843 real(DP), intent(in), optional:: timed
2844 logical, intent(in), optional:: time_average_store
2845 logical, intent(out), optional:: err
2846 end subroutine historyputrealex
2847 end interface
2848 character(*), parameter:: subname = "HistoryPutReal2"
2849 continue
2850 call beginsub(subname)
2851 call historyputrealex( &
2852 & varname, & ! (in)
2853 & pack(array, .true.), size(array), & ! (in)
2854 & history = history, & ! (inout) optional
2855 & range = range, & ! (in) optional
2856 & time = time, & ! (in) optional
2857 & quiet = quiet, & ! (in) optional
2858 & difftime = difftime, & ! (in) optional
2859 & timed = timed, & ! (in) optional
2860 & time_average_store = &
2861 & time_average_store, & ! (in) optional
2862 & err = err ) ! (out) optional
2863 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputreal3()

subroutine historyputreal3 ( character(*), intent(in)  varname,
real, dimension(:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2865 of file historyput.f90.

2868 !
2869 !
2871 use dc_date_types, only: dc_difftime
2872 use dc_types, only: dp
2873 use dc_trace, only: beginsub, endsub, dbgmessage
2874 implicit none
2875 character(*), intent(in):: varname
2876 real, intent(in):: array(:,:,:)
2877 type(GT_HISTORY), intent(inout), optional, target:: history
2878 character(*), intent(in), optional:: range
2879 real, intent(in), optional:: time
2880 logical, intent(in), optional:: quiet
2881 type(DC_DIFFTIME), intent(in), optional:: difftime
2882 real(DP), intent(in), optional:: timed
2883 logical, intent(in), optional:: time_average_store
2884 logical, intent(out), optional:: err
2885 interface historyputrealex
2886 subroutine historyputrealex( &
2887 & varname, array, arraysize, history, range, &
2888 & time, quiet, difftime, timed, time_average_store, err )
2890 use dc_date_types, only: dc_difftime
2891 use dc_types, only: dp
2892 character(*), intent(in):: varname
2893 integer, intent(in):: arraysize
2894 real, intent(in):: array(arraysize)
2895 type(GT_HISTORY), intent(inout), target, optional:: history
2896 character(*), intent(in), optional:: range
2897 real, intent(in), optional:: time
2898 logical, intent(in), optional:: quiet
2899 type(DC_DIFFTIME), intent(in), optional:: difftime
2900 real(DP), intent(in), optional:: timed
2901 logical, intent(in), optional:: time_average_store
2902 logical, intent(out), optional:: err
2903 end subroutine historyputrealex
2904 end interface
2905 character(*), parameter:: subname = "HistoryPutReal3"
2906 continue
2907 call beginsub(subname)
2908 call historyputrealex( &
2909 & varname, & ! (in)
2910 & pack(array, .true.), size(array), & ! (in)
2911 & history = history, & ! (inout) optional
2912 & range = range, & ! (in) optional
2913 & time = time, & ! (in) optional
2914 & quiet = quiet, & ! (in) optional
2915 & difftime = difftime, & ! (in) optional
2916 & timed = timed, & ! (in) optional
2917 & time_average_store = &
2918 & time_average_store, & ! (in) optional
2919 & err = err ) ! (out) optional
2920 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputreal4()

subroutine historyputreal4 ( character(*), intent(in)  varname,
real, dimension(:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2922 of file historyput.f90.

2925 !
2926 !
2928 use dc_date_types, only: dc_difftime
2929 use dc_types, only: dp
2930 use dc_trace, only: beginsub, endsub, dbgmessage
2931 implicit none
2932 character(*), intent(in):: varname
2933 real, intent(in):: array(:,:,:,:)
2934 type(GT_HISTORY), intent(inout), optional, target:: history
2935 character(*), intent(in), optional:: range
2936 real, intent(in), optional:: time
2937 logical, intent(in), optional:: quiet
2938 type(DC_DIFFTIME), intent(in), optional:: difftime
2939 real(DP), intent(in), optional:: timed
2940 logical, intent(in), optional:: time_average_store
2941 logical, intent(out), optional:: err
2942 interface historyputrealex
2943 subroutine historyputrealex( &
2944 & varname, array, arraysize, history, range, &
2945 & time, quiet, difftime, timed, time_average_store, err )
2947 use dc_date_types, only: dc_difftime
2948 use dc_types, only: dp
2949 character(*), intent(in):: varname
2950 integer, intent(in):: arraysize
2951 real, intent(in):: array(arraysize)
2952 type(GT_HISTORY), intent(inout), target, optional:: history
2953 character(*), intent(in), optional:: range
2954 real, intent(in), optional:: time
2955 logical, intent(in), optional:: quiet
2956 type(DC_DIFFTIME), intent(in), optional:: difftime
2957 real(DP), intent(in), optional:: timed
2958 logical, intent(in), optional:: time_average_store
2959 logical, intent(out), optional:: err
2960 end subroutine historyputrealex
2961 end interface
2962 character(*), parameter:: subname = "HistoryPutReal4"
2963 continue
2964 call beginsub(subname)
2965 call historyputrealex( &
2966 & varname, & ! (in)
2967 & pack(array, .true.), size(array), & ! (in)
2968 & history = history, & ! (inout) optional
2969 & range = range, & ! (in) optional
2970 & time = time, & ! (in) optional
2971 & quiet = quiet, & ! (in) optional
2972 & difftime = difftime, & ! (in) optional
2973 & timed = timed, & ! (in) optional
2974 & time_average_store = &
2975 & time_average_store, & ! (in) optional
2976 & err = err ) ! (out) optional
2977 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputreal5()

subroutine historyputreal5 ( character(*), intent(in)  varname,
real, dimension(:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 2979 of file historyput.f90.

2982 !
2983 !
2985 use dc_date_types, only: dc_difftime
2986 use dc_types, only: dp
2987 use dc_trace, only: beginsub, endsub, dbgmessage
2988 implicit none
2989 character(*), intent(in):: varname
2990 real, intent(in):: array(:,:,:,:,:)
2991 type(GT_HISTORY), intent(inout), optional, target:: history
2992 character(*), intent(in), optional:: range
2993 real, intent(in), optional:: time
2994 logical, intent(in), optional:: quiet
2995 type(DC_DIFFTIME), intent(in), optional:: difftime
2996 real(DP), intent(in), optional:: timed
2997 logical, intent(in), optional:: time_average_store
2998 logical, intent(out), optional:: err
2999 interface historyputrealex
3000 subroutine historyputrealex( &
3001 & varname, array, arraysize, history, range, &
3002 & time, quiet, difftime, timed, time_average_store, err )
3004 use dc_date_types, only: dc_difftime
3005 use dc_types, only: dp
3006 character(*), intent(in):: varname
3007 integer, intent(in):: arraysize
3008 real, intent(in):: array(arraysize)
3009 type(GT_HISTORY), intent(inout), target, optional:: history
3010 character(*), intent(in), optional:: range
3011 real, intent(in), optional:: time
3012 logical, intent(in), optional:: quiet
3013 type(DC_DIFFTIME), intent(in), optional:: difftime
3014 real(DP), intent(in), optional:: timed
3015 logical, intent(in), optional:: time_average_store
3016 logical, intent(out), optional:: err
3017 end subroutine historyputrealex
3018 end interface
3019 character(*), parameter:: subname = "HistoryPutReal5"
3020 continue
3021 call beginsub(subname)
3022 call historyputrealex( &
3023 & varname, & ! (in)
3024 & pack(array, .true.), size(array), & ! (in)
3025 & history = history, & ! (inout) optional
3026 & range = range, & ! (in) optional
3027 & time = time, & ! (in) optional
3028 & quiet = quiet, & ! (in) optional
3029 & difftime = difftime, & ! (in) optional
3030 & timed = timed, & ! (in) optional
3031 & time_average_store = &
3032 & time_average_store, & ! (in) optional
3033 & err = err ) ! (out) optional
3034 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputreal6()

subroutine historyputreal6 ( character(*), intent(in)  varname,
real, dimension(:,:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3036 of file historyput.f90.

3039 !
3040 !
3042 use dc_date_types, only: dc_difftime
3043 use dc_types, only: dp
3044 use dc_trace, only: beginsub, endsub, dbgmessage
3045 implicit none
3046 character(*), intent(in):: varname
3047 real, intent(in):: array(:,:,:,:,:,:)
3048 type(GT_HISTORY), intent(inout), optional, target:: history
3049 character(*), intent(in), optional:: range
3050 real, intent(in), optional:: time
3051 logical, intent(in), optional:: quiet
3052 type(DC_DIFFTIME), intent(in), optional:: difftime
3053 real(DP), intent(in), optional:: timed
3054 logical, intent(in), optional:: time_average_store
3055 logical, intent(out), optional:: err
3056 interface historyputrealex
3057 subroutine historyputrealex( &
3058 & varname, array, arraysize, history, range, &
3059 & time, quiet, difftime, timed, time_average_store, err )
3061 use dc_date_types, only: dc_difftime
3062 use dc_types, only: dp
3063 character(*), intent(in):: varname
3064 integer, intent(in):: arraysize
3065 real, intent(in):: array(arraysize)
3066 type(GT_HISTORY), intent(inout), target, optional:: history
3067 character(*), intent(in), optional:: range
3068 real, intent(in), optional:: time
3069 logical, intent(in), optional:: quiet
3070 type(DC_DIFFTIME), intent(in), optional:: difftime
3071 real(DP), intent(in), optional:: timed
3072 logical, intent(in), optional:: time_average_store
3073 logical, intent(out), optional:: err
3074 end subroutine historyputrealex
3075 end interface
3076 character(*), parameter:: subname = "HistoryPutReal6"
3077 continue
3078 call beginsub(subname)
3079 call historyputrealex( &
3080 & varname, & ! (in)
3081 & pack(array, .true.), size(array), & ! (in)
3082 & history = history, & ! (inout) optional
3083 & range = range, & ! (in) optional
3084 & time = time, & ! (in) optional
3085 & quiet = quiet, & ! (in) optional
3086 & difftime = difftime, & ! (in) optional
3087 & timed = timed, & ! (in) optional
3088 & time_average_store = &
3089 & time_average_store, & ! (in) optional
3090 & err = err ) ! (out) optional
3091 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputreal7()

subroutine historyputreal7 ( character(*), intent(in)  varname,
real, dimension(:,:,:,:,:,:,:), intent(in)  array,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

Definition at line 3093 of file historyput.f90.

3096 !
3097 !
3099 use dc_date_types, only: dc_difftime
3100 use dc_types, only: dp
3101 use dc_trace, only: beginsub, endsub, dbgmessage
3102 implicit none
3103 character(*), intent(in):: varname
3104 real, intent(in):: array(:,:,:,:,:,:,:)
3105 type(GT_HISTORY), intent(inout), optional, target:: history
3106 character(*), intent(in), optional:: range
3107 real, intent(in), optional:: time
3108 logical, intent(in), optional:: quiet
3109 type(DC_DIFFTIME), intent(in), optional:: difftime
3110 real(DP), intent(in), optional:: timed
3111 logical, intent(in), optional:: time_average_store
3112 logical, intent(out), optional:: err
3113 interface historyputrealex
3114 subroutine historyputrealex( &
3115 & varname, array, arraysize, history, range, &
3116 & time, quiet, difftime, timed, time_average_store, err )
3118 use dc_date_types, only: dc_difftime
3119 use dc_types, only: dp
3120 character(*), intent(in):: varname
3121 integer, intent(in):: arraysize
3122 real, intent(in):: array(arraysize)
3123 type(GT_HISTORY), intent(inout), target, optional:: history
3124 character(*), intent(in), optional:: range
3125 real, intent(in), optional:: time
3126 logical, intent(in), optional:: quiet
3127 type(DC_DIFFTIME), intent(in), optional:: difftime
3128 real(DP), intent(in), optional:: timed
3129 logical, intent(in), optional:: time_average_store
3130 logical, intent(out), optional:: err
3131 end subroutine historyputrealex
3132 end interface
3133 character(*), parameter:: subname = "HistoryPutReal7"
3134 continue
3135 call beginsub(subname)
3136 call historyputrealex( &
3137 & varname, & ! (in)
3138 & pack(array, .true.), size(array), & ! (in)
3139 & history = history, & ! (inout) optional
3140 & range = range, & ! (in) optional
3141 & time = time, & ! (in) optional
3142 & quiet = quiet, & ! (in) optional
3143 & difftime = difftime, & ! (in) optional
3144 & timed = timed, & ! (in) optional
3145 & time_average_store = &
3146 & time_average_store, & ! (in) optional
3147 & err = err ) ! (out) optional
3148 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_types::dp, dc_trace::endsub(), and historyputrealex().

Here is the call graph for this function:

◆ historyputrealex()

recursive subroutine historyputrealex ( character(*), intent(in)  varname,
real, dimension(arraysize), intent(in)  array,
integer, intent(in)  arraysize,
type(gt_history), intent(inout), optional, target  history,
character(*), intent(in), optional  range,
real, intent(in), optional  time,
logical, intent(in), optional  quiet,
type(dc_difftime), intent(in), optional  difftime,
real(dp), intent(in), optional  timed,
logical, intent(in), optional  time_average_store,
logical, intent(out), optional  err 
)

データ出力

Parameters
[in]varname

iline 1

こちらは配列サイズを指定する必要があるため、 HistoryPut を利用してください。

Definition at line 37 of file historyput.f90.

40 !
45 !
51 use gtdata_types, only: gt_variable
52 use dc_types, only: string, dp, dp_eps
53 use dc_string, only: stoa, printf, tochar, joinchar
57 use dc_message, only: messagenotify
58 use dc_url, only: urlsplit, urlmerge
59 use dc_date_types, only: dc_difftime
60 use dc_date_generic, only: operator(==), dcdifftimecreate, &
61 & mod, operator(-), evalbyunit, operator(/), tochar
63 implicit none
64 character(*), intent(in):: varname
65 integer, intent(in):: arraysize
66 real, intent(in):: array(arraysize)
67 type(GT_HISTORY), intent(inout), target, optional:: history
68 character(*), intent(in), optional:: range
69 ! gtool4 のコンマ記法による
70 ! データの出力範囲指定
71 !
72 ! このオプションを用いる
73 ! 際には、必ず *HistorySetTime*
74 ! によって明示的に時刻の設定
75 ! を行ってください。
76 ! また、*HistoryGet* と異なり、
77 ! 時刻に関する範囲指定は
78 ! 行なえません。
79 !
80 ! 書式に関する詳細は
81 ! {gtool4 netCDF 規約}[link:../xref.htm#label-6]
82 ! の「5.4 コンマ記法」を参照して
83 ! ください。
84 real, intent(in), optional:: time
85 !
86 ! 時刻. (単精度実数型)
87 !
88 ! この引数を与える場合,
89 ! 出力するかどうかをプログラムが
90 ! 自動的に判断します.
91 ! *time* に与えられた数値が
92 ! HistoryCreate に与えた *interval*
93 ! で割り切れる場合には出力が行われます.
94 !
95 ! HistoryAddVariable で
96 ! *time_average* (または *average*)
97 ! に .true. を与えた場合には,
98 ! *time*, *difftime*
99 ! のどちらの引数も与えない場合に,
100 ! プログラムはエラーを発生させます.
101 !
102 ! また, この引数と *range* は併用できません.
103 ! 併用した場合には,
104 ! プログラムはエラーを発生させます.
105 !
106 logical, intent(in), optional:: quiet
107 ! .false. を与えた場合,
108 ! このサブルーチンが呼ばれる毎に
109 ! ファイル名と時刻が表示されます.
110 ! デフォルトは .true. です.
111 !
112 ! If ".false." is given,
113 ! a filename and time is displayed
114 ! when this subroutine is called.
115 ! Default value is ".true.".
116 !
117 type(DC_DIFFTIME), intent(in), optional:: difftime
118 !
119 ! 時刻 (dc_date_types::DC_DIFFTIME 型)
120 !
121 ! 効果は *time* と同様です.
122 !
123 real(DP), intent(in), optional:: timed
124 !
125 ! 時刻 (倍精度実数型)
126 !
127 ! 効果は *time* と同様です.
128 !
129 logical, intent(in), optional:: time_average_store
130 !
131 ! 平均値の出力フラグ.
132 ! この値に .true. を与えた場合には,
133 ! 出力せずに与えられた値を一旦蓄えます.
134 ! .false. を与えた場合には,
135 ! *time* もしくは *difftime* と
136 ! HistoryCreate に与えた *interval* に
137 ! 関わらず出力を行います.
138 !
139 ! HistoryAddVariable で
140 ! *time_average* (または *average*)
141 ! に .true. を与えない場合は無効です.
142 !
143 ! *time* と *difftime*
144 ! のどちらかを同時に与える必要があります.
145 !
146 logical, intent(out), optional:: err
147 ! 例外処理用フラグ.
148 ! デフォルトでは, この手続き内でエラーが
149 ! 生じた場合, プログラムは強制終了します.
150 ! 引数 *err* が与えられる場合,
151 ! プログラムは強制終了せず, 代わりに
152 ! *err* に .true. が代入されます.
153 !
154 ! Exception handling flag.
155 ! By default, when error occur in
156 ! this procedure, the program aborts.
157 ! If this *err* argument is given,
158 ! .true. is substituted to *err* and
159 ! the program does not abort.
160 type(GT_VARIABLE):: var, timevar
161 character(STRING):: url, file, time_str
162 real:: time_value(1:1)
163 type(GT_HISTORY), pointer:: hst =>null()
164 integer :: v_ord
165 character(STRING):: avr_msg
166 real, target:: array_work(arraysize)
167 real, pointer:: array_work2(:) =>null()
168 integer:: arraysize_work2
169 integer, allocatable:: start(:), count(:), stride(:)
170 integer :: i, dims
171 logical :: slice_err
172 character(STRING):: time_name
173 character(*), parameter:: bnds_suffix = '_bnds'
174 type(GT_VARIABLE):: bndsvar
175 integer:: bnds_ord, time_count, bnds_rank
176 logical:: output_step
177 real(DP):: timedw
178! type(DC_DIFFTIME):: difftimew
179 real(DP):: avr_coef
180 integer:: stat
181 character(STRING):: cause_c
182 interface timegoahead
183 subroutine timegoahead( varname, var, head, history, err )
184 use gtdata_types, only: gt_variable
186 character(len = *), intent(in):: varname
187 type(GT_VARIABLE), intent(out):: var
188 real, intent(in):: head
189 type(GT_HISTORY), intent(inout), optional, target:: history
190 logical, intent(out), optional:: err
191 end subroutine timegoahead
192 end interface
193 character(*), parameter:: subname = "HistoryPutRealEx"
194 continue
195 call beginsub(subname, 'varname=%a range=%a', &
196 & ca=stoa(varname, present_select('', '(no-range)', range)))
197 stat = dc_noerr
198 cause_c = ""
199 if (present(history)) then
200 hst => history
201 else
202 hst => default
203 endif
204 !-----------------------------------------------------------------
205 ! 初期設定のチェック
206 ! Check initialization
207 !-----------------------------------------------------------------
208 if ( .not. hst % initialized ) then
209 stat = dc_enotinit
210 cause_c = 'GT_HISTORY'
211 goto 999
212 end if
213 !-----------------------------------------------------------------
214 ! time と range の同時使用の禁止
215 ! Permit concurrent use of "time" and "range"
216 !-----------------------------------------------------------------
217 if ( ( present(time) .or. present(difftime) .or. present(timed) ) &
218 & .and. present_and_not_empty(range) ) then
219 call messagenotify('W', subname, &
220 & '(varname=%c) "range" and "time" or "timed" or "difftime" are not suppored at the same time', &
221 & c1 = trim(varname) )
222 stat = usr_errno
223 cause_c = '"range" and "time" or "timed" or "difftime" are not suppored at the same time'
224 goto 999
225 end if
226 !-----------------------------------------------------------------
227 ! hst 内の varname 変数の変数番号を取得
228 ! Get variable number of "varname" in "hst"
229 !-----------------------------------------------------------------
230 v_ord = lookup_variable_ord(hst, varname)
231 timedw = 0.0_dp
232 !-----------------------------------------------------------------
233 ! 時間平均値のためのデータ格納
234 ! Store data for time average value
235 !-----------------------------------------------------------------
236 if ( present(difftime) ) then
237 timedw = evalbyunit( difftime, '', hst % unlimited_units_symbol )
238 elseif ( present(timed) ) then
239 timedw = timed
240 elseif ( present(time) ) then
241 timedw = time
242 end if
243 if ( v_ord > 0 ) then
244 !
245 ! var_avr_count == -1: 平均処理は行わない.
246 ! var_avr_count >= 0: 平均処理を行う.
247 !
248 ! これらは HistoryAddVariable で指定される.
249 !
250 if ( hst % var_avr_count( v_ord ) > -1 ) then
251 ! 時刻が指定されない場合には平均処理が不可能なため
252 ! エラー発生. dc_error のエラーメッセージだけでは多少
253 ! 不親切なので, エラー直前に下記の警告メッセージ表示.
254 !
255 if ( .not. present(time) &
256 & .and. .not. present(timed) &
257 & .and. .not. present(difftime) ) then
258 call messagenotify('W', subname, &
259 & '(varname=%c) arguments "time" or "timed" or "difftime" are needed ' // &
260 & 'when "time_average=.true." is specified to "HistoryAddVariable"', &
261 & c1 = trim(varname) )
262 stat = dc_earglack
263 cause_c = 'time'
264 goto 999
265 end if
266 ! 与えられたデータのサイズと内部で積算しているデータのサイズが
267 ! 一致しない場合にもエラーを発生.
268 ! データサイズは HistoryPut -> HistoryPutEx の際に
269 ! 全て 1 次元化しているため, 単純に配列サイズでのみ判定.
270 ! dc_error のエラーメッセージだけでは多少
271 ! 不親切なので, エラー直前に下記の警告メッセージ表示.
272 !
273 if ( arraysize /= hst % var_avr_data( v_ord ) % length ) then
274 call messagenotify('W', subname, &
275 & '(varname=%c) size of array should be (%d). size of array is (%d)', &
276 & i = (/hst % var_avr_data( v_ord ) % length, arraysize/), &
277 & c1 = trim(varname) )
279 cause_c = 'array'
280 goto 999
281 end if
282 ! この if 〜 end if では以下の動作を行う.
283 !
284 ! * 平均処理時の係数 (avr_coef) の算出
285 ! * 係数を算出するための以下の値の設定
286 ! * 基本時間間隔 (var_avr_baseint)
287 ! * 前回出力の時刻 (var_avr_prevtime)
288 ! * 初回出力の判定を行うラベル (var_avr_firstput) の設定
289 !
290 ! 1 度目に呼ばれた場合はとりあえず係数を 1.0 にするとともに,
291 ! prevtime に現在時刻を保管
292 !
293 if ( hst % var_avr_firstput( v_ord ) ) then
294 if ( hst % var_avr_count( v_ord ) == 0 ) then
295 avr_coef = 1.0_dp
296 hst % var_avr_prevtime( v_ord ) = timedw
297 else
298 hst % var_avr_baseint( v_ord ) = &
299 & timedw - hst % var_avr_prevtime( v_ord )
300 avr_coef = 1.0_dp
301 hst % var_avr_prevtime( v_ord ) = timedw
302 hst % var_avr_firstput( v_ord ) = .false.
303 end if
304 ! 2 度目以降に呼ばれた場合
305 !
306 else
307 ! 前回出力を行った (var_avr_count == 0 に初期化された)
308 ! 場合には baseint に前回時刻と今回時刻の差を設定.
309 ! avr_coef には 1 を設定.
310 ! 最後に prevtime に今回の時刻を保管.
311 !
312 if ( hst % var_avr_count( v_ord ) == 0 ) then
313 hst % var_avr_baseint( v_ord ) = &
314 & timedw - hst % var_avr_prevtime( v_ord )
315 avr_coef = 1.0_dp
316 hst % var_avr_prevtime( v_ord ) = timedw
317 ! var_avr_count > 0 (平均処理されるデータが蓄積されている)
318 ! 場合には avr_coef には前回時刻と今回時刻の差の,
319 ! baseint からの比を設定する.
320 ! 最後に prevtime に今回の時刻を保管.
321 !
322 else
323 avr_coef = ( timedw - hst % var_avr_prevtime( v_ord ) ) &
324 & / hst % var_avr_baseint( v_ord )
325 hst % var_avr_prevtime( v_ord ) = timedw
326 end if
327 end if
328 ! 積算値 a_DataAvr に, 今回のデータに係数を掛けたもの
329 ! を加算する.
330 !
331 hst % var_avr_data( v_ord ) % a_DataAvr = &
332 & hst % var_avr_data( v_ord ) % a_DataAvr + array * avr_coef
333 ! 積算カウント var_avr_count に +1 し,
334 ! 係数の積算値 var_avr_coefsum に今回設定された
335 ! 係数を加算する.
336 !
337 hst % var_avr_count( v_ord ) = &
338 & hst % var_avr_count( v_ord ) + 1
339 hst % var_avr_coefsum( v_ord ) = &
340 & hst % var_avr_coefsum( v_ord ) + avr_coef
341 ! time_bnds(2) に今回の時刻を設定する.
342 ! (毎回上書きされる).
343 !
344 if ( present(difftime) ) then
345 hst % time_bnds(2:2) = evalbyunit( difftime, '', hst % unlimited_units_symbol )
346 elseif ( present (timed) ) then
347 hst % time_bnds(2:2) = timed
348 else
349 hst % time_bnds(2:2) = time
350 end if
351 end if
352 end if
353 !-----------------------------------------------------------------
354 ! 初期時刻の設定
355 ! Configure initial time
356 !-----------------------------------------------------------------
357 if ( .not. hst % origin_setting ) then
358 if ( present(difftime) ) then
359 hst % origin = evalbyunit( difftime, '', hst % unlimited_units_symbol )
360 hst % time_bnds = evalbyunit( difftime, '', hst % unlimited_units_symbol )
361 hst % origin_setting = .true.
362 elseif ( present(timed) ) then
363 hst % origin = timed
364 hst % time_bnds = timed
365 hst % origin_setting = .true.
366 elseif ( present(time) ) then
367 hst % origin = time
368 hst % time_bnds = time
369 hst % origin_setting = .true.
370 end if
371!!$ if ( present(difftime) ) then
372!!$ hst % origin = difftime
373!!$ hst % time_bnds = EvalByUnit( difftime, '', hst % unlimited_units_symbol )
374!!$ hst % origin_setting = .true.
375!!$ elseif ( present(timed) ) then
376!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
377!!$ & real(timed), '', hst % unlimited_units_symbol ) ! (in)
378!!$ hst % time_bnds = timed
379!!$ hst % origin_setting = .true.
380!!$ elseif ( present(time) ) then
381!!$ call DCDiffTimeCreate( hst % origin, & ! (out)
382!!$ & time, '', hst % unlimited_units_symbol ) ! (in)
383!!$ hst % time_bnds = time
384!!$ hst % origin_setting = .true.
385!!$ end if
386 end if
387 !-----------------------------------------------------------------
388 ! 時刻の自動チェック
389 ! Check time automatically
390 !-----------------------------------------------------------------
391 output_step = .true.
392 if ( present_and_false(time_average_store) ) then
393 output_step = .true.
394 elseif ( present_and_true(time_average_store) ) then
395 output_step = .false.
396 elseif ( present(difftime) .or. present(timed) .or. present(time) ) then
397 output_step = .false.
398 if ( abs( hst % interval ) < dp_eps ) then
399 output_step = .true.
400 else
401 if ( abs( mod( timedw - hst % origin, hst % interval ) ) < dp_eps ) then
402 output_step = .true.
403 end if
404 end if
405 end if
406 !-------------------------
407 ! 時間平均値出力のための情報処理
408 ! Information processing for output time-averaged value
409 if ( .not. output_step ) then
410 goto 999
411 else
412 array_work = array
413 avr_msg = ''
414 if ( v_ord > 0 ) then
415 if ( hst % var_avr_count( v_ord ) > -1 ) then
416 if ( present_and_false(quiet) ) then
417 avr_msg = '(time average of ' // trim( tochar(hst % var_avr_count( v_ord )) ) // ' step data)'
418 end if
419 !-------------------
420 ! 蓄えた値の時間平均化
421 ! Average stored value in time direction
422 ! a_DataAvr に蓄えられた値を係数の積算値で割って,
423 ! これを出力値とする.
424 !
425 array_work = real( &
426 & ( hst % var_avr_data( v_ord ) % a_DataAvr ) / ( hst % var_avr_coefsum( v_ord ) ), &
427 & kind = kind(array_work) )
428 ! 積算値, 積算カウント, 係数の積算値をクリアする.
429 !
430 hst % var_avr_data( v_ord ) % a_DataAvr = 0.0
431 hst % var_avr_count( v_ord ) = 0
432 hst % var_avr_coefsum( v_ord ) = 0.0_dp
433 hst % var_avr_firstput( v_ord ) = .false.
434 end if
435 end if
436 end if
437 array_work2 => array_work
438 arraysize_work2 = arraysize
439 !-----------------------------------------------------------------
440 ! 時刻を1つ進めて, データ出力
441 ! Progress one time, and output data
442 !-----------------------------------------------------------------
443 call timegoahead( &
444 & varname = varname, & ! (in)
445 & head = real(array_work2(1)), & ! (in)
446 & var = var, & ! (out)
447 & history = history, & ! (inout)
448 & err = err ) ! (out)
449 call inquire( var, & ! (in)
450 & alldims=dims ) ! (out)
451 if (present_and_not_empty(range) .and. (dims < 1)) then
452 call dbgmessage('varname=<%c> has no dimension. so range is ignoread.', &
453 & c1=trim(varname))
454 end if
455 if (.not. (present_and_not_empty(range) .and. (dims > 0))) then
456 ! range 無しの普通の出力の場合
457 call put(var, array_work2, arraysize_work2)
458 else
459 ! range があり, 且つ varname がちゃんと次元を持っている場合
460 !
461 ! 元々の start, count, stride を保持. データを与えた後に復元する.
462 allocate(start(dims), count(dims), stride(dims))
463 do i = 1, dims
464 call get_slice(var, i, start(i), count(i), stride(i))
465 end do
466 slice_err = .false. ! 不要だが Slice の引用仕様として必要なため
467 call slice(var, range, slice_err)
468 call put(var, array_work2, arraysize_work2)
469 ! 復元
470 do i = 1, dims
471 call slice(var, i, start(i), count(i), stride(i))
472 end do
473 deallocate(start, count, stride)
474 end if
475 call gtvarsync(var)
476 if ( hst % mpi_gather .and. v_ord > 0 ) then
477 deallocate( array_work2 )
478 end if
479 !-----------------------------------------------------------------
480 ! "time_bnds" 変数への出力
481 ! Output to "time_bnds" variable
482 !-----------------------------------------------------------------
483 if ( v_ord > 0 ) then
484 if ( hst % var_avr_count( v_ord ) > -1 ) then
485 !-------------------
486 ! 時間次元の名前とファイル名を取得
487 ! Get name of time dimension, and filename
488 timevar = hst % dimvars( hst % unlimited_index )
489 call inquire( &
490 & var = timevar, & ! (in)
491 & url = url, & ! (out)
492 & name = time_name ) ! (out)
493 call urlsplit( fullname = url, & ! (in)
494 & file = file ) ! (out)
495 !-------------------
496 ! "time_bnds" 変数の取得
497 ! Get "time_bnds" variable
498 call open( var = bndsvar, &
499 & url = urlmerge(file=file, var=trim(time_name) // bnds_suffix) )
500 bnds_ord = lookup_variable_ord( hst, trim(time_name) // bnds_suffix)
501 !-------------------
502 ! "time_bnds" 変数への出力
503 ! Output to "time_bnds" variable
504 call inquire( &
505 & var = bndsvar, & ! (in)
506 & rank = bnds_rank ) ! (out)
507 time_count = 1
508 if ( bnds_rank > 1 ) then
509 call inquire( &
510 & var = bndsvar, & ! (in)
511 & dimord = hst % growable_indices(bnds_ord), & ! (in)
512 & allcount = time_count ) ! (out)
513 end if
514 if ( (hst % time_bnds_output_count < 1) &
515 & .or. (hst % time_bnds_output_count < time_count) ) then
516 call slice(bndsvar, hst % growable_indices(bnds_ord), & ! (in)
517 & start=hst % time_bnds_output_count+1, count=1) ! (in)
518 call put(bndsvar, hst % time_bnds, 2)
519 hst % time_bnds_output_count = hst % time_bnds_output_count + 1
520 end if
521 call close( var = bndsvar ) ! (inout)
522 if ( present(difftime) ) then
523 hst % time_bnds(1:1) = &
524 & evalbyunit( difftime, '', hst % unlimited_units_symbol )
525 elseif ( present(timed) ) then
526 hst % time_bnds(1:1) = timed
527 else
528 hst % time_bnds(1:1) = time
529 end if
530 end if
531 end if
532 !-----------------------------------------------------------------
533 ! メッセージ出力
534 ! Output messages
535 !-----------------------------------------------------------------
536 if ( present_and_false(quiet) ) then
537 call inquire( hst % dimvars(1), & ! (in)
538 & url = url ) ! (out)
539 call urlsplit( fullname = url, & ! (in)
540 & file = file ) ! (out)
541 if ( hst % unlimited_index < 1 ) then
542 time_str = ''
543 else
544 timevar = hst % dimvars(hst % unlimited_index)
545 call slice( timevar, & ! (in)
546 & 1, start = hst % count(v_ord), count = 1 ) ! (in)
547 call get( timevar, & ! (inout)
548 & time_value, & ! (out)
549 & 1, & ! (in)
550 & err ) ! (out)
551 time_str = '(time=' // trim( tochar( time_value(1) )) // ')'
552 end if
553 call messagenotify('M', 'HistoryPut', &
554 & '"%a" => "%a" %a %a', &
555 & ca = stoa( varname, file, time_str, avr_msg ) )
556 end if
557 !-----------------------------------------------------------------
558 ! 終了処理, 例外処理
559 ! Termination and Exception handling
560 !-----------------------------------------------------------------
561999 continue
562 call storeerror( stat, subname, err, cause_c )
563 call endsub(subname)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_earglack, dc_error::dc_enotinit, dc_error::dc_noerr, gtool_history_internal::default, dc_types::dp, dc_types::dp_eps, dc_trace::endsub(), dc_error::gt_eargsizemismatch, dc_string::joinchar(), dc_present::present_and_false(), dc_present::present_and_not_empty(), dc_present::present_and_true(), dc_error::storeerror(), dc_types::string, timegoahead(), and dc_error::usr_errno.

Here is the call graph for this function:

◆ timegoahead()

subroutine timegoahead ( character(len = *), intent(in)  varname,
type(gt_variable), intent(out)  var,
real, intent(in)  head,
type(gt_history), intent(inout), optional, target  history,
logical, intent(out), optional  err 
)

Definition at line 3663 of file historyput.f90.

3664 !
3665 ! *history* 内の (省略された場合は gtool_history 内に内包
3666 ! される GT_HISTORY 変数) の変数名 *varname* の時間を1つ分
3667 ! 進め、その最新の時間断面で切り取った変数 ID を *var* に返します。
3668 !
3669 !--
3670 ! そのデフォルトでは変数ごとにカウンタを設置し、呼んだ数だけ
3671 ! 「時刻」方向を進め、時刻データを入力する。
3672 ! これに対し、HistorySetTime で時刻の変数に一度でもスカラ値を投入
3673 ! すると、明示的にそれを設定したときにだけ時刻が進むようになる。
3674 ! このルーチンでは後退はできない。
3675 !
3676 ! [詳細]
3677 ! 変数名 varname に対応する変数 ID var を探査し、その変数が
3678 ! 時間次元に依存する場合には hst % count の値を1つ増やす (時間を進める)。
3679 ! そして、hst % origin と hst % interval から時間次元データに値を与える。
3680 !
3681 ! なお、HistorySetTime で既に値が設定され、hst % count の値が
3682 ! 増やされる場合には、こちらでは hst % count の値を変更しない。
3683 ! データも入力しない。
3684 !++
3688 use gtdata_types, only: gt_variable
3689 use dc_types, only: string, dp
3690 use dc_error, only: storeerror, nf90_enotvar, dc_noerr
3691 use,non_intrinsic :: dc_date_generic, only: evalbyunit, operator(+), operator(*), &
3692 & dcdifftimecreate, min, max, evalsec, dcdifftimeputline
3693 use dc_date_types, only: dc_difftime
3694 use dc_trace, only: beginsub, endsub, dbgmessage
3695 implicit none
3696 character(len = *), intent(in) :: varname
3697 type(GT_VARIABLE), intent(out) :: var
3698 real, intent(in):: head
3699 type(GT_HISTORY), intent(inout), optional, target:: history
3700 logical, intent(out), optional :: err
3701 !
3702 type(GT_HISTORY), pointer:: hst =>null()
3703 type(GT_VARIABLE) :: timevar
3704 real, pointer:: time(:) =>null()
3705 integer:: v_ord ! varname の history における次元添字番号
3706 integer:: d_ord
3707 integer:: timestart, rest
3708 integer:: stat
3709 logical:: get_err
3710 real(DP):: curtime
3711! type(DC_DIFFTIME):: headdiff
3712 character(STRING):: cause_c, subname_r
3713 character(*), parameter:: subname = "TimeGoAhead"
3714 continue
3715 call beginsub(subname, 'varname=%c head=%r', &
3716 & c1=trim(varname), r=(/head/))
3717 stat = dc_noerr
3718 cause_c = ''
3719 subname_r = subname
3720 if (present(history)) then
3721 hst => history
3722 else
3723 hst => default
3724 endif
3725 ! hst 内での変数 varname の変数 ID を var に、
3726 ! hst における変数添字を v_ord に取得
3727 var = lookup_variable( hst, varname, & ! (in)
3728 & ord = v_ord ) ! (out)
3729 if (v_ord == 0) goto 1000
3730 ! 変数 v_ord に時間次元が無い場合は終了
3731 if (hst % growable_indices(v_ord) == 0) then
3732 goto 999
3733 endif
3734 if (hst % dim_value_written(hst % unlimited_index)) then
3735 !-----------------------
3736 ! HistorySetTime を利用する場合
3737 !
3738 ! 時間次元に既に値が書き込まれている場合は count を増やさない
3739 !
3740 call slice(var, hst % growable_indices(v_ord), & ! (in)
3741 & start=hst % count(1), count=1) ! (in)
3742 else
3743 !-----------------------
3744 ! HistorySetTime を利用しない場合
3745 !
3746 ! 時間次元に値が書き込まれていない場合, count を増やす
3747 ! (history % interval を利用する)
3748 !
3749 hst % count(v_ord) = hst % count(v_ord) + 1
3750 call slice(var, hst % growable_indices(v_ord), & ! (in)
3751 & start=hst % count(v_ord), count=1) ! (in)
3752 !-----------------------
3753 ! 時間次元変数へのデータ出力
3754 !
3755 ! 変数の count と時間次元変数の count を比較し,
3756 ! 変数の count が大きい場合, 時間次元変数の count も
3757 ! 同値になるようデータを出力する.
3758 !
3759 timevar = hst % dimvars(hst % unlimited_index)
3760 call get_slice(timevar, 1, start=timestart)
3761 call dbgmessage('map(timevar)start is <%d>. map(%c)start is <%d>', &
3762 & i=(/timestart, hst % count(v_ord)/), &
3763 & c1=trim(varname) )
3764 call get(timevar, time, get_err)
3765 call dbgmessage('time(%d)=<%*r>, err=<%b>', &
3766 & i=(/size(time)/), r=(/time(:)/), &
3767 & l=(/get_err/), n=(/size(time)/) )
3768 if (get_err .or. hst % count(v_ord) == 1 .and. timestart == 1) then
3769 !---------------------
3770 ! 時間次元のデータの初期値作成
3771 !
3772 ! 時間次元のデータがまだ作成されていない場合、
3773 ! 初期値となるデータを作成
3774 call slice(timevar, 1, start=1, count=1)
3775 curtime = hst % origin
3776! curtime = EvalByUnit( hst % origin, '', hst % unlimited_units_symbol )
3777 call put(timevar, (/curtime/), 1) ! (in)
3778 elseif (hst % count(v_ord) > timestart) then
3779 !---------------------
3780 ! 時間次元のデータの初期値以外を作成
3781 !
3782 ! 変数の count が時間次元の start より大きい場合、
3783 ! hst % interval でその間を埋める。
3784 rest = timestart + 1
3785 do
3786 call slice(timevar, 1, start=rest, count=1)
3787 curtime = hst % origin + hst % interval * (rest - 1)
3788!!$ curtime = EvalByUnit( &
3789!!$ & hst % origin + hst % interval * (rest - 1), &
3790!!$ & '', hst % unlimited_units_symbol )
3791 call put(timevar, (/curtime/), 1 ) ! (in)
3792 rest = rest + 1
3793 if ( rest > hst % count(v_ord) ) exit
3794 enddo
3795 endif
3796 deallocate(time)
3797 endif
3798 goto 999
37991000 continue
3800 !-----------------------------------------------------------------
3801 ! hst 内に次元以外の変数 ID が見つからない場合
3802 !-----------------------------------------------------------------
3803 !
3804 ! 次元 ID を探査
3805 var = lookup_dimension(hst, varname, ord=d_ord)
3806 !-------------------------
3807 ! 次元も含めた変数の中に varname が無い場合は stat に
3808 ! NF90_ENOTVAR (Variable not Found) を返す.
3809 ! (上のサブルーチンが停止させることを想定)
3810 if (d_ord == 0) then
3811 subname_r = 'HistoryPut'
3812 stat = nf90_enotvar
3813 cause_c = 'varname="' // trim(varname) // '" is not found'
3814 goto 999
3815 endif
3816 hst % dim_value_written(d_ord) = .true.
3817 if (d_ord /= hst % unlimited_index) then
3818 goto 999
3819 endif
3820 !-------------------------
3821 ! ややトリッキーだが、count の2番目以降の要素にも時刻を入れて
3822 ! おくことで、HistorySetTime による巻き戻し後にも値を保持する。
3823 hst % count(:) = maxval(hst % count(:)) + 1
3824!!$ call DCDiffTimeCreate( headdiff, & ! (out)
3825!!$ & head, '', hst % unlimited_units_symbol ) ! (in)
3826 ! hst % newest = max(hst % newest, head)
3827 ! hst % oldest = min(hst % oldest, head)
3828 call slice(var, 1, start=hst % count(1), count=1)
3829999 continue
3830 call storeerror(stat, trim(subname_r), err, cause_c)
3831 call endsub(subname)
subroutine dcdifftimeputline(diff, unit, indent)

References dc_trace::beginsub(), dc_trace::dbgmessage(), dc_error::dc_noerr, dcdifftimeputline(), gtool_history_internal::default, dc_types::dp, dc_trace::endsub(), dc_error::storeerror(), and dc_types::string.

Here is the call graph for this function: