historyaddvariable.f90 File Reference

Go to the source code of this file.

Functions/Subroutines

recursive subroutine historyaddvariable1 (varname, dims, longname, units, xtype, time_average, average, history, err)
 
subroutine historyaddvariable2 (varinfo, history, err)
 

Function/Subroutine Documentation

◆ historyaddvariable1()

recursive subroutine historyaddvariable1 ( character(len = *), intent(in)  varname,
character(len = *), dimension(:), intent(in)  dims,
character(len = *), intent(in)  longname,
character(len = *), intent(in)  units,
character(len = *), intent(in), optional  xtype,
logical, intent(in), optional  time_average,
logical, intent(in), optional  average,
type(gt_history), intent(inout), optional, target  history,
logical, intent(out), optional  err 
)

Definition at line 13 of file historyaddvariable.f90.

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_url::gt_atmark, dc_error::hst_empinoaxisdata, dc_error::hst_enodependtime, dc_string::joinchar(), dc_present::present_and_true(), dc_error::storeerror(), dc_types::string, and dc_types::token.

13  !
14  !== 変数定義
15  !
16  ! gtool4 データ内の変数の定義を行います。このサブルーチンを
17  ! 用いる前に、 HistoryCreate による初期設定が必要です。
18  !
19  ! 既に gtool4 データが存在し、そのデータ内の変数と全く同じ
20  ! 構造の変数を定義したい場合は HistoryCopyVariable を利用すると便利です。
21  !
22  ! *HistoryAddVariable* というサブルーチン名は 2 つの別々の
23  ! サブルーチンの総称名です。上記のサブルーチンも参照ください。
24  !
25  !=== 時間平均について
26  !
27  ! gtool_history を用いた出力では、以下の条件を満たす場合に出力データを
28  ! 時間方向に平均化して出力します。
29  !
30  ! * HistoryAddVariable の引数 *time_average* に .true. を与えている。
31  ! * HistoryPut に時刻を示す引数 *time* (単精度実数型)、
32  ! *timed* (倍精度実数型)、*difftime* (dc_date_types#DC_DIFFTIME)
33  ! のいづれかを与えている。
34  !
35  ! HistoryPut に与えられたデータは gtool_history モジュール内部
36  ! にいったん保管され、HistoryCreate の引数 *interval* の間隔を
37  ! おいて出力が行われます。平均化は出力時から次の出力時の間の
38  ! データを用いて行われます。時間間隔が一定でない場合、
39  ! 重み付けをして出力されます。重み付けは以下のように行われます。
40  !
41  ! sum( <data> * <weight> ) / sum ( <weight> )
42  !
43  ! <data> :: *array* または *value* に与えられたデータ
44  ! <weight> :: 前回 HistoryPut が呼ばれた際の時刻と今回の時刻との差
45  ! sum :: 前回出力が行われた時刻から *interval* 経過するまでの値の和
46  !
47  use gtool_history_types, only: gt_history, &
52  use gtdata_generic, only: inquire, create, slice, put_attr, &
53  & put, putline
54  use gtdata_types, only: gt_variable
55  use netcdf, only: nf90_ebaddim
58  use dc_string, only: cprintf, joinchar, stoa
59  use dc_url, only: gt_atmark, urlresolve
60  use dc_present, only: present_and_true
61  use dc_types, only: string
62  use dc_date, only: dcdifftimecreate
63  use dc_date_types, only: dc_difftime
64  use dc_message, only: messagenotify
65  use dc_trace, only: beginsub, endsub, dbgmessage
66  use dc_types, only: string, token, dp
67  implicit none
68  character(len = *), intent(in):: varname
69  ! 定義する変数の名前
70  !
71  ! 最大文字数は dc_type#TOKEN
72  !
73  character(len = *), intent(in):: dims(:)
74  ! 変数が依存する次元の名前
75  !
76  ! 時間の次元は配列の最後に指定
77  ! しなければならない。
78  ! ここで指定するものは、
79  ! HistoryCreate にて dims で指定
80  ! されていなければならない。
81  !
82  ! もしもスカラー変数を作成
83  ! する場合には, サイズが 1 で
84  ! 中身が空の文字型配列,
85  ! すなわち <tt> (/''/) </tt>
86  ! を与えること.
87  !
88  character(len = *), intent(in):: longname
89  ! 変数の記述的名称
90  !
91  ! 最大文字数は dc_types#STRING
92  !
93  character(len = *), intent(in):: units
94  ! 変数の単位
95  !
96  ! 最大文字数は dc_types#STRING
97  !
98  character(len = *), intent(in), optional:: xtype
99  ! 変数のデータ型
100  !
101  ! デフォルトはfloat (単精度実数型)
102  ! である。 有効なのは、
103  ! double (倍精度実数型)、 int
104  ! (整数型)、char (文字型)である。
105  ! 指定しない場合や、無効な型を指定した
106  ! 場合には、 float (単精度実数型)
107  ! となる。
108  !
109  logical, intent(in), optional:: time_average
110  ! 出力データを時間平均する場合には
111  ! .true. を与えます。
112  ! デフォルトは .false. です。
113  !
114  ! If output data is averaged in time direction,
115  ! specify ".true.".
116  ! Default is ".false.".
117  !
118  logical, intent(in), optional:: average
119  ! time_average の旧版.
120  ! Old version of "time_average"
121  type(gt_history), intent(inout), optional, target:: history
122  ! 出力ファイルの設定に関する情報を
123  ! 格納した構造体
124  !
125  ! ここに指定するものは、
126  ! HistoryCreate によって初期設定
127  ! されていなければなりません。
128  !
129  logical, intent(out), optional:: err
130  ! 例外処理用フラグ.
131  ! デフォルトでは, この手続き内でエラーが
132  ! 生じた場合, プログラムは強制終了します.
133  ! 引数 *err* が与えられる場合,
134  ! プログラムは強制終了せず, 代わりに
135  ! *err* に .true. が代入されます.
136  !
137  ! Exception handling flag.
138  ! By default, when error occur in
139  ! this procedure, the program aborts.
140  ! If this *err* argument is given,
141  ! .true. is substituted to *err* and
142  ! the program does not abort.
143  type(gt_history), pointer:: hst =>null()
144  type(gt_variable), pointer:: vwork(:) =>null(), dimvars(:) =>null()
145  character(STRING):: fullname, url, cause_c
146  integer, pointer:: count_work(:) =>null()
147  integer, pointer:: var_avr_count_work(:) =>null()
148  integer:: var_avr_length
149  type(gt_history_avrdata), pointer:: var_avr_data_work(:) =>null()
150  logical, pointer:: var_avr_firstput_work(:) =>null()
151  real(DP), pointer:: var_avr_coefsum_work(:) =>null()
152  real(DP), pointer:: var_avr_baseint_work(:) =>null()
153  real(DP), pointer:: var_avr_prevtime_work(:) =>null()
154 !!$ type(DC_DIFFTIME), pointer:: var_avr_baseint_work(:) =>null()
155 !!$ type(DC_DIFFTIME), pointer:: var_avr_prevtime_work(:) =>null()
156  character(STRING):: time_name, time_xtype, time_url
157  type(gt_variable), pointer:: dimvars_work(:) =>null()
158  logical, pointer:: dim_value_written_work(:) =>null()
159  integer:: dimvars_size
160  logical:: nv_exist, bnds_exist
161  character(STRING):: nv_name_check, bnds_name_check
162  character(*), parameter:: nv_suffix = '_nv'
163  character(*), parameter:: bnds_suffix = '_bnds'
164  type(gt_variable), pointer:: timevar
165  integer, pointer:: dimord(:) =>null()
166  integer:: nvars, numdims, i, stat
167  character(*), parameter:: subname = "HistoryAddVariable1"
168  continue
169  call beginsub(subname, 'name=<%a>, dims=<%a>, longname=<%a>, units=<%a>', &
170  & ca=stoa(varname, joinchar(dims), longname, units))
171  stat = dc_noerr
172  cause_c = ''
173  ! 操作対象決定
174  !
175  if (present(history)) then
176  hst => history
177  else
178  hst => default
179  endif
180  ! 初期設定のチェック
181  ! Check initialization
182  !
183  if ( .not. hst % initialized ) then
184  stat = dc_enotinit
185  cause_c = 'GT_HISTORY'
186  goto 999
187  end if
188  ! 変数表拡張
189  !
190  if (associated(hst % vars)) then
191  nvars = size(hst % vars(:))
192  vwork => hst % vars
193  count_work => hst % count
194  nullify(hst % vars, hst % count)
195  allocate(hst % vars(nvars + 1), hst % count(nvars + 1))
196  hst % vars(1:nvars) = vwork(1:nvars)
197  hst % count(1:nvars) = count_work(1:nvars)
198  deallocate(vwork, count_work)
199  count_work => hst % growable_indices
200  nullify(hst % growable_indices)
201  allocate(hst % growable_indices(nvars + 1))
202  hst % growable_indices(1:nvars) = count_work(1:nvars)
203  deallocate(count_work)
204  ! 平均値出力のための変数表コピー
205  ! Copy table of variables for average value output
206  !
207  var_avr_count_work => hst % var_avr_count
208  nullify( hst % var_avr_count )
209  allocate( hst % var_avr_count(nvars + 1) )
210  hst % var_avr_count(1:nvars) = var_avr_count_work(1:nvars)
211  deallocate( var_avr_count_work )
212  var_avr_data_work => hst % var_avr_data
213  nullify(hst % var_avr_data)
214  allocate(hst % var_avr_data(nvars + 1))
215  do i = 1, nvars
216  hst % var_avr_data(i) % length = var_avr_data_work(i) % length
217  allocate(hst % var_avr_data(i) % &
218  & a_dataavr(var_avr_data_work(i) % length))
219  hst % var_avr_data(i) % a_DataAvr = var_avr_data_work(i) % a_DataAvr
220  deallocate( var_avr_data_work(i) % a_DataAvr )
221  end do
222  deallocate( var_avr_data_work )
223  var_avr_firstput_work => hst % var_avr_firstput
224  nullify( hst % var_avr_firstput )
225  allocate( hst % var_avr_firstput(nvars + 1) )
226  hst % var_avr_firstput(1:nvars) = var_avr_firstput_work(1:nvars)
227  deallocate( var_avr_firstput_work )
228  var_avr_coefsum_work => hst % var_avr_coefsum
229  nullify( hst % var_avr_coefsum )
230  allocate( hst % var_avr_coefsum(nvars + 1) )
231  hst % var_avr_coefsum(1:nvars) = var_avr_coefsum_work(1:nvars)
232  deallocate( var_avr_coefsum_work )
233  var_avr_baseint_work => hst % var_avr_baseint
234  nullify( hst % var_avr_baseint )
235  allocate( hst % var_avr_baseint(nvars + 1) )
236  hst % var_avr_baseint(1:nvars) = var_avr_baseint_work(1:nvars)
237  deallocate( var_avr_baseint_work )
238  var_avr_prevtime_work => hst % var_avr_prevtime
239  nullify( hst % var_avr_prevtime )
240  allocate( hst % var_avr_prevtime(nvars + 1) )
241  hst % var_avr_prevtime(1:nvars) = var_avr_prevtime_work(1:nvars)
242  deallocate( var_avr_prevtime_work )
243  else
244  ! トリッキーだが, ここで count だけ 2 要素確保するのは,
245  ! HistorySetTime による巻き戻しに備えるため.
246  !
247  allocate(hst % vars(1), hst % count(2), hst % growable_indices(1))
248  hst % count(2) = 0
249  allocate(hst % var_avr_count(1), hst % var_avr_data(1))
250  allocate(hst % var_avr_firstput(1), hst % var_avr_coefsum(1))
251  allocate(hst % var_avr_baseint(1), hst % var_avr_prevtime(1))
252  endif
253  nvars = size(hst % vars(:))
254  hst % growable_indices(nvars) = 0
255  if ( nvars < 2 ) then
256  hst % count(nvars) = 0
257  else
258  hst % count(nvars) = hst % count(1)
259  end if
260  ! スカラー変数作成への対応
261  !
262  if (size(dims) == 1 .and. trim(dims(1)) == '') then
263  numdims = 0
264  else
265  numdims = size(dims)
266  end if
267  allocate( dimvars(numdims) )
268  allocate( dimord(numdims) )
269  ! 次元の ID の取得
270  !
271  do, i = 1, numdims
272  ! hst 内で, 次元変数名 dim(i) に当たる次元変数の ID である
273  ! hst % dimvar(i) を dimvars(i) に, 添字を dimord に
274  !
275  dimvars(i) = lookup_dimension( hst, dims(i), & ! (in)
276  & ord = dimord(i) ) ! (out)
277  if (dimord(i) == 0) then
278  stat = nf90_ebaddim
279  cause_c = cprintf('"%c" dimension is not found.', c1=trim(dims(i)))
280  goto 999
281  end if
282  end do
283  ! 変数添字次元を決定
284  !
285  do, i = 1, numdims
286  ! 無制限次元の添字と一致する場合に,
287  ! その添字を hst % growable_indices(nvars) に
288  !
289  if (dimord(i) == hst % unlimited_index) then
290  hst % growable_indices(nvars) = i
291  endif
292  enddo
293  ! 変数作成
294  !
295  call inquire(hst % dimvars(1), url=url)
296  fullname = urlresolve((gt_atmark // trim(varname)), trim(url))
297  call create(hst % vars(nvars), trim(fullname), dimvars, xtype=xtype)
298  if ( associated(dimvars) ) deallocate( dimvars )
299  ! 拡張可能次元があったらそれをサイズ 1 に拡張しておく
300  !
301  if (hst % growable_indices(nvars) /= 0) then
302  call slice(hst % vars(nvars), hst % growable_indices(nvars), &
303  & start=1, count=1, stride=1)
304  endif
305  call put_attr(hst % vars(nvars), 'long_name', longname)
306  call put_attr(hst % vars(nvars), 'units', units)
307  ! 平均処理に関する情報管理
308  !
309  if ( present_and_true( time_average ) &
310  & .or. present_and_true( average ) ) then
311  hst % var_avr_count(nvars) = 0
312  ! 情報の取得
313  ! Get Information
314  !
315  timevar => hst % dimvars( hst % unlimited_index )
316  call inquire( &
317  & var = timevar, & ! (in)
318  & name = time_name, url = time_url, & ! (out)
319  & xtype = time_xtype ) ! (out)
320  ! 変数のデータ数の取得
321  !
322  call inquire(hst % vars(nvars), size = var_avr_length )
323  ! 割り付け
324  !
325  hst % var_avr_data(nvars) % length = var_avr_length
326  allocate(hst % var_avr_data(nvars) % a_DataAvr(var_avr_length))
327  hst % var_avr_data(nvars) % a_DataAvr = 0.0_dp
328  ! デフォルト値設定
329  !
330  hst % var_avr_firstput = .true.
331  hst % var_avr_coefsum(nvars) = 0.0_dp
332  hst % var_avr_baseint(nvars) = 0.0_dp
333 !!$ call DCDiffTimeCreate( &
334 !!$ & hst % var_avr_baseint(nvars), & ! (out)
335 !!$ & sec = 0.0_DP ) ! (in)
336  hst % var_avr_prevtime(nvars) = hst % var_avr_baseint(nvars)
337  ! 時間次元情報の取得
338  !
339  if ( hst % growable_indices(nvars) < 1 ) then
340  stat = hst_enodependtime
341  cause_c = trim(varname)
342  goto 999
343  end if
344  ! 時間次元への属性 "bounds" の追加
345  !
346  call put_attr( var = timevar, & ! (inout)
347  & name = 'bounds', & ! (in)
348  & value = trim(time_name) // bnds_suffix ) ! (in)
349  ! 変数 "varname" への属性 "cell_methods" の追加
350  !
351  call put_attr( var = hst % vars(nvars), & ! (inout)
352  & name = 'cell_methods', & ! (in)
353  & value = trim(time_name) // ': mean' ) ! (in)
354  ! "time_nv" 次元の作成 (既に作成されていたら何もしない)
355  !
356  dimvars_size = size( hst % dimvars )
357  nv_exist = .false.
358  do i = 1, dimvars_size
359  call inquire( &
360  & var = hst % dimvars(i), & ! (in)
361  & name = nv_name_check ) ! (out)
362  if ( trim(time_name) // trim(nv_suffix) == trim(nv_name_check) ) then
363  nv_exist = .true.
364  exit
365  end if
366  end do
367  if ( .not. nv_exist ) then
368  dimvars_work => hst % dimvars
369  dim_value_written_work => hst % dim_value_written
370  nullify(hst % dimvars, hst % dim_value_written)
371  allocate(hst % dimvars(dimvars_size + 1))
372  allocate(hst % dim_value_written(dimvars_size + 1))
373  hst % dimvars(1:dimvars_size) = dimvars_work(1:dimvars_size)
374  hst % dim_value_written(1:dimvars_size) = dim_value_written_work(1:dimvars_size)
375  deallocate(dimvars_work)
376  deallocate(dim_value_written_work)
377  call create( &
378  & var = hst % dimvars(dimvars_size + 1), & ! (out)
379  & url = trim(time_url) // trim(nv_suffix), & ! (in)
380  & length = 2, xtype = 'integer' ) ! (in)
381  hst % time_nv_index = dimvars_size + 1
382  call put_attr( var = hst % dimvars(dimvars_size + 1), & ! (inout)
383  & name = 'long_name', & ! (in)
384  & value = 'number of vertices of time') ! (in)
385  call put_attr( var = hst % dimvars(dimvars_size + 1), & ! (inout)
386  & name = 'units', value = '1' ) ! (in)
387  call put( var = hst % dimvars(dimvars_size + 1), & ! (inout)
388  & value = (/1, 2/) ) ! (in)
389  hst % dim_value_written(dimvars_size + 1) = .true.
390  end if
391  ! "time_bnds" 変数の作成 (既に作成されていたら何もしない)
392  !
393  bnds_exist = .false.
394  do i = 1, nvars
395  call inquire( &
396  & var = hst % vars(i), & ! (in)
397  & name = bnds_name_check ) ! (out)
398  if ( trim(time_name) // trim(bnds_suffix) == trim(bnds_name_check) ) then
399  bnds_exist = .true.
400  exit
401  end if
402  end do
403  if ( associated(dimord) ) deallocate( dimord )
404  if ( .not. bnds_exist ) then
405  call historyaddvariable( &
406  & history = hst, & ! (inout)
407  & varname = trim(time_name) // trim(bnds_suffix), &
408  & dims = stoa( trim(time_name) // trim(nv_suffix), &
409  & trim(time_name) ), & ! (in)
410  & longname = 'bounds of time', & ! (in)
411  & units = hst % unlimited_units, & ! (in)
412  & xtype = time_xtype ) ! (in)
413  end if
414  ! 平均処理が不要な場合
415  !
416  else
417  hst % var_avr_count(nvars) = -1
418  ! 割り付け
419  !
420  var_avr_length = 1
421  hst % var_avr_data(nvars) % length = var_avr_length
422  allocate(hst % var_avr_data(nvars) % a_DataAvr(var_avr_length))
423  hst % var_avr_data(nvars) % a_DataAvr = 0.0_dp
424  ! デフォルト値設定
425  !
426  hst % var_avr_firstput = .true.
427  hst % var_avr_coefsum(nvars) = 0.0_dp
428  hst % var_avr_baseint(nvars) = 0.0_dp
429 !!$ call DCDiffTimeCreate( &
430 !!$ & hst % var_avr_baseint(nvars), & ! (out)
431 !!$ & sec = 0.0_DP ) ! (in)
432  hst % var_avr_prevtime(nvars) = hst % var_avr_baseint(nvars)
433  end if
434  ! 終了処理, 例外処理
435  ! Termination and Exception handling
436  !
437 999 continue
438  if ( associated(dimvars) ) deallocate( dimvars )
439  if ( associated(dimord) ) deallocate( dimord )
440  call storeerror(stat, subname, err, cause_c)
441  call endsub(subname)
type(gt_history), target, save, public default
integer, parameter, public dc_enotinit
Definition: dc_error.f90:557
integer, parameter, public hst_enodependtime
Definition: dc_error.f90:586
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition: dc_types.f90:109
logical function, public present_and_true(arg)
Definition: dc_present.f90:80
character, parameter, public gt_atmark
Definition: dc_url.f90:79
integer, parameter, public hst_empinoaxisdata
Definition: dc_error.f90:598
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition: dc_error.f90:830
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
character(string) function, public joinchar(carray, expr)
Definition: dc_string.f90:861
integer, parameter, public dp
倍精度実数型変数
Definition: dc_types.f90:83
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Definition: dc_trace.f90:351
文字型変数の操作.
Definition: dc_string.f90:24
種別型パラメタを提供します。
Definition: dc_types.f90:49
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition: dc_types.f90:118
Here is the call graph for this function:

◆ historyaddvariable2()

subroutine historyaddvariable2 ( type(gt_history_varinfo), intent(in)  varinfo,
type(gt_history), intent(inout), optional  history,
logical, intent(out), optional  err 
)

Definition at line 445 of file historyaddvariable.f90.

References dc_trace::beginsub(), dc_trace::dbgmessage(), gtool_history_internal::default, dc_types::dp, dc_trace::endsub(), dc_string::joinchar(), dc_types::string, and dc_types::token.

445  !
446  !== 変数定義
447  !
448  ! gtool4 データ内の変数の定義を行います。このサブルーチンを
449  ! 用いる前に、 HistoryCreate による初期設定が必要です。
450  !
451  ! 既に gtool4 データが存在し、そのデータ内の変数と全く同じ
452  ! 構造の変数を定義したい場合は HistoryCopyVariable を利用すると
453  ! 便利です。
454  !
455  ! *HistoryAddVariable* というサブルーチン名は 2 つの別々の
456  ! サブルーチンの総称名です。下記のサブルーチンも参照ください。
457  !
458  use dc_string, only: joinchar
462  use dc_trace, only: beginsub, endsub, dbgmessage
463  use dc_types, only: string, token, dp
464  implicit none
465  type(gt_history_varinfo), intent(in) :: varinfo
466  ! 変数情報を格納した構造体
467  !
468  ! ここに指定するものは、
469  ! HistoryVarinfoCreate によって
470  ! 初期設定されていなければなりません。
471  !
472  type(gt_history), intent(inout), optional:: history
473  ! 出力ファイルの設定に関する情報を
474  ! 格納した構造体
475  !
476  ! ここに指定するものは、
477  ! HistoryCreate によって初期設定
478  ! されていなければなりません。
479  !
480  logical, intent(out), optional:: err
481  ! 例外処理用フラグ.
482  ! デフォルトでは, この手続き内でエラーが
483  ! 生じた場合, プログラムは強制終了します.
484  ! 引数 *err* が与えられる場合,
485  ! プログラムは強制終了せず, 代わりに
486  ! *err* に .true. が代入されます.
487  !
488  ! Exception handling flag.
489  ! By default, when error occur in
490  ! this procedure, the program aborts.
491  ! If this *err* argument is given,
492  ! .true. is substituted to *err* and
493  ! the program does not abort.
494  character(len = *), parameter:: subname = "HistoryAddVariable2"
495  continue
496  call beginsub(subname, 'varname=<%c>, dims=<%c>, longname=<%c>', &
497  & c1=trim(varinfo % name), c2=trim(joinchar(varinfo % dims)), &
498  & c3=trim(varinfo % longname) )
499  call historyaddvariable( &
500  & history = history, & ! (inout)
501  & varname = varinfo % name, & ! (in)
502  & dims = varinfo % dims, & ! (in)
503  & longname = varinfo % longname, & ! (in)
504  & units = varinfo % units, & ! (in)
505  & xtype = varinfo % xtype, & ! (in)
506  & time_average = varinfo % time_average, & ! (in) optional
507  & err = err ) ! (out) optional
508  if (associated( varinfo % attrs )) then
509  call append_attrs( varinfo % name, varinfo % attrs, history )
510  end if
511  call endsub(subname)
type(gt_history), target, save, public default
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition: dc_types.f90:109
character(string) function, public joinchar(carray, expr)
Definition: dc_string.f90:861
integer, parameter, public dp
倍精度実数型変数
Definition: dc_types.f90:83
subroutine, public dbgmessage(fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:509
subroutine, public beginsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca, version)
Definition: dc_trace.f90:351
文字型変数の操作.
Definition: dc_string.f90:24
種別型パラメタを提供します。
Definition: dc_types.f90:49
subroutine, public endsub(name, fmt, i, r, d, L, n, c1, c2, c3, ca)
Definition: dc_trace.f90:446
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition: dc_types.f90:118
Here is the call graph for this function: