dc_date_generic.f90
Go to the documentation of this file.
1 != dc_date より提供される手続の引用仕様宣言
2 != Interface of procedures provided from dc_date
3 !
4 ! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
5 ! Version:: $Id: dc_date_generic.f90,v 1.3 2009-06-01 15:17:23 morikawa Exp $
6 ! Tag Name:: $Name: $
7 ! Copyright:: Copyright (C) GFD Dennou Club, 2000-2005. All rights reserved.
8 ! License:: See COPYRIGHT[link:../../COPYRIGHT]
9 
11  != dc_date より提供される手続の引用仕様宣言
12  != Interface of procedures provided from dc_date
13  !
14  ! モジュールの概要については, dc_date
15  ! を参照ください.
16  !
17  ! See "dc_date" for brief of this module.
18  !
19  !== Procedures List
20  !
21  ! 以下の手続きは構造型 dc_date_types#DC_DATETIME または
22  ! dc_date_types#DC_DIFFTIME 変数 (日時, 時刻に関する情報を格納)
23  ! を対象とします.
24  !
25  ! DCDateTimeCreate :: dc_date_types#DC_DATETIME 型変数の初期設定
26  ! DCDiffTimeCreate :: dc_date_types#DC_DIFFTIME 型変数の初期設定
27  !
28  ! #assignment(=) :: dc_date_types#DC_DATETIME 型変数および
29  ! dc_date_types#DC_DIFFTIME 型変数の初期設定
30  !
31  ! Eval :: 日時, 時刻情報を個別に取得
32  !
33  ! toChar :: 日時, 時刻情報を文字型変数へ変換
34  !
35  ! EvalDay :: 日数 (実数型) に換算して取得
36  ! EvalHour :: 時間 (実数型) に換算して取得
37  ! EvalMin :: 分 (実数型) に換算して取得
38  ! EvalSec :: 秒 (実数型) に換算して取得
39  ! EvalNondim :: 無次元時間 (実数型) に換算して取得
40  ! EvalByUnit :: 単位を指定し, 日, 時, 分, 秒のいづれか (実数型)
41  ! に換算して取得
42  !
43  ! #operator(+) :: 加算 (dc_date_types#DC_DATETIME 型 および
44  ! dc_date_types#DC_DIFFTIME 型 同士)
45  ! #operator(-) :: 減算 (dc_date_types#DC_DATETIME 型 および
46  ! dc_date_types#DC_DIFFTIME 型 同士)
47  ! #operator(*) :: 乗算 (dc_date_types#DC_DIFFTIME 型と数値型)
48  ! #operator(/) :: 除算 (dc_date_types#DC_DIFFTIME 型と数値型)
49  ! mod :: 余り (dc_date_types#DC_DIFFTIME 型同士)
50  ! #operator(==) :: 比較 (dc_date_types#DC_DATETIME 型同士)
51  ! #operator(>) :: 比較 (dc_date_types#DC_DATETIME 型同士)
52  ! #operator(>=) :: 比較 (dc_date_types#DC_DATETIME 型同士)
53  ! #operator(<) :: 比較 (dc_date_types#DC_DATETIME 型同士)
54  ! #operator(<=) :: 比較 (dc_date_types#DC_DATETIME 型同士)
55  ! max :: 大きい値を返す
56  ! min :: 小さい値を返す
57  !
58  ! SetZone :: タイムゾーンを変更
59  !
60  ! DCDateTimePutLine :: dc_date_types#DC_DATETIME 型変数に格納されている
61  ! 日時, 時刻情報の印字
62  ! DCDiffTimePutLine :: dc_date_types#DC_DIFFTIME 型変数に格納されている
63  ! 日時, 時刻情報の印字
64  !
65  !
66  ! 以下の手続きは dc_date_types 内部の変数を変更します.
67  !
68  ! SetCaltype :: 暦法のデフォルトを変更
69  ! SetSecOfDay :: 1 日の秒数のデフォルトを変更
70  !
71  ! その他の手続き
72  !
73  ! ValidCaltype :: 暦法が有効なものかをチェック
74  ! ValidZone :: タイムゾーンとして有効化をチェック
75  ! ZoneToDiff :: タイムゾーンを dc_date_types#DC_DIFFTIME 変数へと変換
76  ! ParseTimeUnits :: 時間の単位を解析し, 単位のシンボルを返します.
77  !
78  !== Usage
79  !
80  !=== 現在時刻の表示
81  !
82  ! dc_date_types#DC_DATETIME 型の変数にサブルーチン DCDateTimeCreate
83  ! を用いると, 時刻が設定されます.
84  ! 下記のように特に年月日を指定しないと現在時刻が設定されます.
85  ! 設定された時刻は toChar によって文字型変数へと変換できます.
86  ! サブルーチン Printf に関しては dc_string#Printf を参照ください.
87  !
88  ! program dc_date_sapmle1
89  ! use dc_string, only: Printf
90  ! use dc_date, only: DC_DATETIME, DCDateTimeCreate, toChar
91  ! implicit none
92  ! type(DC_DATETIME) :: time
93  !
94  ! call DCDateTimeCreate( time = time ) ! (out)
95  ! call Printf( fmt = 'current date and time is %c', c1 = trim( toChar(time) ) )
96  ! end program dc_date_sapmle1
97  !
98  !=== 日時, 時刻情報の加算
99  !
100  ! dc_date_types#DC_DIFFTIME 型の変数は日時差を表現します. 下記の例では,
101  ! 日時差を表現するための変数として *diff*
102  ! を用意し, サブルーチン Create によって 25 日 + 12 時間 + 50 分の日時差
103  ! を設定しています. dc_date_types#DC_DATETIME 型の変数 *time_before* と *diff* とを
104  ! #operator(+) によって加算することで *time_before* から
105  ! 25 日 + 12 時間 + 50 分を進めた日時 *time_after* を取得しています.
106  !
107  ! program dc_date_sapmle2
108  ! use dc_types, only: DP
109  ! use dc_string, only: Printf
110  ! use dc_date, only: DC_DATETIME, DC_DIFFTIME, &
111  ! & DCDateTimeCreate, DCDiffTimeCreate, toChar, operator(+)
112  ! implicit none
113  ! type(DC_DATETIME) :: time_before, time_after
114  ! type(DC_DIFFTIME) :: diff
115  !
116  ! call DCDateTimeCreate( time = time_before, & ! (out)
117  ! & year = 2006, mon = 6, day = 10, & ! (in)
118  ! & hour = 14, min = 15, sec = 0.0_DP ) ! (in)
119  ! call DCDiffTimeCreate( diff = diff, & ! (out)
120  ! & day = 25, hour = 12, min = 50) ! (in)
121  !
122  ! time_after = time_before + diff
123  !
124  ! call Printf( fmt = '%c + %c = %c', &
125  ! & c1 = trim( toChar(time_before) ), c2 = trim( toChar(diff) ), &
126  ! & c3 = trim( toChar(time_after) ) )
127  ! end program dc_date_sapmle2
128  !
129  !
130  !=== 時間積分のループへの応用
131  !
132  ! 以下は dA/dt = - αA (初期値 1, α=0.0001) を t = 12 (時間)
133  ! まで解くプログラムの例です. 時間積分には前進差分を用いています.
134  ! Δt, データの出力間隔, 計算時間に dc_date_types#DC_DIFFTIME を用いることで,
135  ! ループの終了処理や
136  ! データ出力の際の時刻の比較が容易となります.
137  !
138  ! program dc_date_sapmle3
139  ! use dc_types, only: DP
140  ! use dc_date, only: DC_DIFFTIME, &
141  ! & DCDiffTimeCreate, EvalSec, EvalByUnit, mod, &
142  ! & operator(*), operator(==), operator(>)
143  ! implicit none
144  ! real(DP) :: func_a = 1.0d0 ! 関数 A の初期値
145  ! real(DP), parameter :: alph = 0.0001d0 ! 係数 α
146  ! character(*), parameter :: out_unit = 'hour' ! 出力される時刻の単位
147  ! type(DC_DIFFTIME):: DelTimef, intervalf, calctimef
148  ! integer :: i
149  ! continue
150  ! call DCDiffTimeCreate( & ! Δt = 5.0 (秒)
151  ! & diff = DelTimef, & ! (out)
152  ! & value = 5.0_DP, unit = 'sec') ! (in)
153  ! call DCDiffTimeCreate( & ! データ出力間隔 = 1.0 (分)
154  ! & diff = intervalf, & ! (out)
155  ! & value = 1.0_DP, unit = 'min') ! (in)
156  ! call DCDiffTimeCreate( & ! 計算時間 = 12.0 (時間)
157  ! & diff = calctimef, & ! (out)
158  ! & value = 12.0_DP, unit = 'hour') ! (in)
159  !
160  ! open( 10, file='dc_date_sample.dat' )
161  ! write(10,'(A,A,A)') '# ', out_unit, ' value'
162  !
163  ! i = 1
164  ! do
165  ! if (DelTimef * i > calctimef) exit ! 計算時間を過ぎたら終了
166  !
167  ! !---------------------------------------------
168  ! ! A_(n+1) = (1 - αΔt) * A_(n)
169  ! !---------------------------------------------
170  ! func_a = (1.0 - alph * EvalSec(DelTimef)) * func_a
171  !
172  ! !---------------------------------------------
173  ! ! intervalf (1 分) 毎にデータを出力
174  ! !---------------------------------------------
175  ! if (mod(DelTimef * i, intervalf) == 0) then
176  ! write(10,*) ' ', EvalByUnit( DelTimef * i, out_unit ), func_a
177  ! end if
178  ! i = i + 1
179  ! end do
180  ! end program dc_date_sapmle3
181  !
182  !
183 
185  use dc_types, only: dp, string, token
187 
188  implicit none
189 
190  private
193  public:: eval
194  public:: setcaltype, setzone, setsecofday
196 
197  public:: assignment(=)
198  public:: mod, operator(/), operator(-), operator(+), operator(*)
199  public:: operator(<), operator(>), operator(>=), operator(<=)
200  public:: operator(==), max, min
201  public:: tochar, tocharcal
203  public:: evalsclsec
204 
205  public:: create, putline
206  ! 後方互換用
207  ! For backward compatibility
208 
210  subroutine dcdatetimecreate1(time, &
211  & year, mon, day, hour, min, sec, &
212  & zone, zone_hour, zone_min, caltype, caltype_str, day_seconds, &
213  & sclyear, sclmon, sclday, sclsec, err) !:doc-priority 40:
214  use dc_types, only: dp
215  use dc_date_types, only: dc_datetime
216  use dc_scaledsec, only: dc_scaled_sec
217  type(dc_datetime), intent(out):: time
218  integer, intent(in), optional:: year, mon, day, hour, min
219  real(DP),intent(in), optional:: sec, day_seconds
220  character(*), intent(in), optional :: zone
221  integer, intent(in), optional :: zone_hour
222  integer, intent(in), optional :: zone_min
223  integer, intent(in), optional:: caltype
224  character(*), intent(in), optional:: caltype_str
225  type(dc_scaled_sec), intent(in), optional:: sclyear, sclmon, sclday, sclsec
226  logical, intent(out), optional:: err
227  end subroutine dcdatetimecreate1
228  end interface
229 
231  subroutine dcdifftimecreate1(diff, &
232  & year, mon, day, hour, min, sec, day_seconds, nondim, &
233  & sclyear, sclmon, sclday, sclsec ) !:doc-priority 60:
234  use dc_types, only: dp
235  use dc_date_types, only: dc_difftime
236  use dc_scaledsec, only: dc_scaled_sec
237  type(dc_difftime), intent(out) :: diff
238  integer, intent(in), optional:: year, mon, day, hour, min
239  real(DP),intent(in), optional:: sec, day_seconds, nondim
240  type(dc_scaled_sec), intent(in), optional:: sclyear, sclmon, sclday, sclsec
241  end subroutine dcdifftimecreate1
242 
243  subroutine dcdifftimecreate2d(diff, value, unit, unit_symbol, err) !:doc-priority 70:
244  use dc_types, only: dp
245  use dc_date_types, only: dc_difftime
246  type(dc_difftime), intent(out) :: diff
247  real(DP), intent(in) :: value
248  character(*), intent(in) :: unit
249  integer, intent(in), optional :: unit_symbol
250  logical, intent(out), optional :: err
251  end subroutine dcdifftimecreate2d
252 
253  subroutine dcdifftimecreate2r(diff, value, unit, unit_symbol, err) !:doc-priority 80:
255  type(dc_difftime), intent(out) :: diff
256  real, intent(in) :: value
257  character(*), intent(in) :: unit
258  integer, intent(in), optional :: unit_symbol
259  logical, intent(out), optional :: err
260  end subroutine dcdifftimecreate2r
261 
262  subroutine dcdifftimecreate2i(diff, value, unit, unit_symbol, err) !:doc-priority 90:
264  type(dc_difftime), intent(out) :: diff
265  integer, intent(in) :: value
266  character(*), intent(in) :: unit
267  integer, intent(in), optional :: unit_symbol
268  logical, intent(out), optional :: err
269  end subroutine dcdifftimecreate2i
270 
271  end interface
272 
274  subroutine dcdatetimeputline(time, unit, indent)
276  type(dc_datetime), intent(in) :: time
277  integer, intent(in), optional :: unit
278  character(*), intent(in), optional:: indent
279  end subroutine dcdatetimeputline
280  end interface
281 
283  subroutine dcdifftimeputline(diff, unit, indent)
285  type(dc_difftime), intent(in) :: diff
286  integer, intent(in), optional :: unit
287  character(*), intent(in), optional:: indent
288  end subroutine dcdifftimeputline
289  end interface
290 
291  interface assignment(=)
292 
293  subroutine dcdatetimecreatei(time, sec) !:doc-priority 20:
295  type(dc_datetime), intent(out):: time
296  integer, intent(in):: sec
297  end subroutine dcdatetimecreatei
298 
299  subroutine dcdatetimecreater(time, sec) !:doc-priority 30:
301  type(dc_datetime), intent(out):: time
302  real, intent(in):: sec
303  end subroutine dcdatetimecreater
304 
305  subroutine dcdatetimecreated(time, sec) !:doc-priority 40:
306  use dc_types, only: dp
307  use dc_date_types, only: dc_datetime
308  type(dc_datetime), intent(out):: time
309  real(DP), intent(in):: sec
310  end subroutine dcdatetimecreated
311 
312  subroutine dcdifftimecreatei(diff, sec) !:doc-priority 60:
314  type(dc_difftime), intent(out):: diff
315  integer, intent(in):: sec
316  end subroutine dcdifftimecreatei
317 
318  subroutine dcdifftimecreater(diff, sec) !:doc-priority 70:
320  type(dc_difftime), intent(out):: diff
321  real, intent(in):: sec
322  end subroutine dcdifftimecreater
323 
324  subroutine dcdifftimecreated(diff, sec) !:doc-priority 80:
325  use dc_types, only: dp
326  use dc_date_types, only: dc_difftime
327  type(dc_difftime), intent(out):: diff
328  real(DP), intent(in):: sec
329  end subroutine dcdifftimecreated
330 
331 !!$ subroutine DCDateLetFC(diff, string)
332 !!$ use dc_date_types, only: DC_DIFFTIME
333 !!$ type(DC_DIFFTIME), intent(out):: diff
334 !!$ character(len = *), intent(in):: string
335 !!$ end subroutine DCDateLetFC
336 !!$
337 !!$ subroutine DCDateLetTC(time, string)
338 !!$ use dc_date_types, only: DC_DATETIME
339 !!$ type(DC_DATETIME), intent(out):: time
340 !!$ character(len = *), intent(in):: string
341 !!$ end subroutine DCDateLetTC
342 
343  end interface
344 
345  interface setcaltype
346  subroutine dcdatetimesetcaltype(caltype)
347  integer, intent(in):: caltype
348  end subroutine dcdatetimesetcaltype
349  end interface
350 
351  interface setsecofday
352  subroutine dcdatetimesetsecofday(sec)
353  use dc_types, only: dp
354  real(DP), intent(in):: sec
355  end subroutine dcdatetimesetsecofday
356  end interface
357 
358  interface validcaltype
359  function dcdatetimevalidcaltype(caltype) result(result)
360  integer, intent(in):: caltype
361  logical:: result
362  end function dcdatetimevalidcaltype
363  end interface
364 
365  interface validzone
366  function dcdatetimevalidzone(zone) result(result)
367  character(*), intent(in):: zone
368  logical:: result
369  end function dcdatetimevalidzone
370  end interface
371 
372  interface zonetodiff
373  function dcdatetimezonetodiff(zone) result(diff)
375  type(dc_difftime):: diff
376  character(*), intent(in):: zone
377  end function dcdatetimezonetodiff
378  end interface
379 
380  interface parsetimeunits
381  function dcdatetimeparseunits(str) result(symbol)
382  character(*), intent(in):: str
383  integer:: symbol
384  end function dcdatetimeparseunits
385  end interface
386 
387  interface setzone
388  subroutine dcdatetimesetzone(time, zone, err)
390  type(dc_datetime), intent(inout):: time
391  character(*), intent(in):: zone
392  logical, intent(out), optional:: err
393  end subroutine dcdatetimesetzone
394  end interface
395 
396 
397  interface eval
398 
399  subroutine dcdatetimeeval1(time, year, mon, day, hour, min, &
400  & sec, caltype, zone, sclyear, sclmon, sclday, sclsec) !:doc-priority 40:
401  use dc_types, only: dp
402  use dc_date_types, only: dc_datetime
403  use dc_scaledsec, only: dc_scaled_sec
404  type(dc_datetime), intent(in):: time
405  integer, intent(out), optional:: year, mon, day, hour, min, caltype
406  real(DP), intent(out), optional:: sec
407  character(*), intent(out), optional:: zone
408  type(dc_scaled_sec), intent(out), optional:: sclyear, sclmon, sclday, sclsec
409  end subroutine dcdatetimeeval1
410 
411 !!$ subroutine DCDateTimeEval0(time, mon, day, sec)
412 !!$ use dc_date_types, only: DC_DATETIME
413 !!$ use dc_types, only: DP
414 !!$ type(DC_DATETIME), intent(in):: time
415 !!$ integer, intent(out):: mon, day
416 !!$ real(DP), intent(out):: sec
417 !!$ end subroutine DCDateTimeEval0
418 
419  subroutine dcdifftimeeval1(diff, &
420  & year, mon, day, hour, min, sec, nondim, &
421  & sclyear, sclmon, sclday, sclsec, sclnondim, err) !:doc-priority 60:
422  use dc_types, only: dp
423  use dc_date_types, only: dc_difftime
424  use dc_scaledsec, only: dc_scaled_sec
425  type(dc_difftime), intent(in):: diff
426  integer, intent(out), optional:: year, mon, day, hour, min
427  real(DP), intent(out), optional:: sec, nondim
428  type(dc_scaled_sec), intent(out), optional:: sclyear, sclmon, sclday, sclsec, sclnondim
429  logical, intent(out), optional :: err
430  end subroutine dcdifftimeeval1
431 
432  end interface
433 
434  interface evalday
435  function dcdatetimeevalday(time) result(result) !:doc-priority 40:
436  use dc_types, only: dp
437  use dc_date_types, only: dc_datetime
438  real(DP):: result
439  type(dc_datetime), intent(in):: time
440  end function dcdatetimeevalday
441 
442  function dcdifftimeevalday(diff) result(result) !:doc-priority 60:
443  use dc_types, only: dp
444  use dc_date_types, only: dc_difftime
445  real(DP):: result
446  type(dc_difftime), intent(in):: diff
447  end function dcdifftimeevalday
448  end interface
449 
450  interface evalhour
451  function dcdatetimeevalhour(time) result(result) !:doc-priority 40:
452  use dc_types, only: dp
453  use dc_date_types, only: dc_datetime
454  real(DP):: result
455  type(dc_datetime), intent(in):: time
456  end function dcdatetimeevalhour
457 
458  function dcdifftimeevalhour(diff) result(result) !:doc-priority 60:
459  use dc_types, only: dp
460  use dc_date_types, only: dc_difftime
461  real(DP):: result
462  type(dc_difftime), intent(in):: diff
463  end function dcdifftimeevalhour
464  end interface
465 
466  interface evalmin
467  function dcdatetimeevalmin(time) result(result) !:doc-priority 40:
468  use dc_types, only: dp
469  use dc_date_types, only: dc_datetime
470  real(DP):: result
471  type(dc_datetime), intent(in):: time
472  end function dcdatetimeevalmin
473 
474  function dcdifftimeevalmin(diff) result(result) !:doc-priority 60:
475  use dc_types, only: dp
476  use dc_date_types, only: dc_difftime
477  real(DP):: result
478  type(dc_difftime), intent(in):: diff
479  end function dcdifftimeevalmin
480  end interface
481 
482  interface evalsec
483  function dcdatetimeevalsec(time) result(result) !:doc-priority 40:
484  use dc_types, only: dp
485  use dc_date_types, only: dc_datetime
486  real(DP):: result
487  type(dc_datetime), intent(in):: time
488  end function dcdatetimeevalsec
489 
490  function dcdifftimeevalsec(diff) result(result) !:doc-priority 60:
491  use dc_types, only: dp
492  use dc_date_types, only: dc_difftime
493  real(DP):: result
494  type(dc_difftime), intent(in):: diff
495  end function dcdifftimeevalsec
496  end interface
497 
498  interface evalnondim
499  function dcdifftimeevalnondim(diff) result(result)
500  use dc_types, only: dp
501  use dc_date_types, only: dc_difftime
502  real(DP):: result
503  type(dc_difftime), intent(in):: diff
504  end function dcdifftimeevalnondim
505  end interface
506 
507  interface evalsclsec
508  function dcdatetimeevalsclsec(time) result(result) !:doc-priority 40:
510  use dc_scaledsec, only: dc_scaled_sec
511  type(dc_scaled_sec):: result
512  type(dc_datetime), intent(in):: time
513  end function dcdatetimeevalsclsec
514 
515  function dcdifftimeevalsclsec(diff) result(result) !:doc-priority 60:
517  use dc_scaledsec, only: dc_scaled_sec
518  type(dc_scaled_sec):: result
519  type(dc_difftime), intent(in):: diff
520  end function dcdifftimeevalsclsec
521  end interface
522 
523  interface evalbyunit
524 
525  function dcdatetimeevalbyunit(time, unit, unit_symbol) result(result)
526  use dc_types, only: dp, token
527  use dc_date_types, only: dc_datetime
528  real(DP):: result
529  type(dc_datetime), intent(in):: time
530  character(*), intent(in), optional:: unit
531  integer, intent(in), optional:: unit_symbol
532  end function dcdatetimeevalbyunit
533 
534  function dcdifftimeevalbyunit(diff, unit, unit_symbol) result(result)
535  use dc_types, only: dp, token
536  use dc_date_types, only: dc_difftime
537  real(DP):: result
538  type(dc_difftime), intent(in):: diff
539  character(*), intent(in), optional:: unit
540  integer, intent(in), optional:: unit_symbol
541  end function dcdifftimeevalbyunit
542  end interface
543 
544 
545 
546  interface tochar
547  function dcdatetimetochar(time) result(result) !:doc-priority 40:
548  use dc_types, only: string
549  use dc_date_types, only: dc_datetime
550  character(STRING) :: result
551  type(dc_datetime), intent(in):: time
552  end function dcdatetimetochar
553 
554  function dcdifftimetochar(diff) result(result) !:doc-priority 60:
555  use dc_types, only: string
556  use dc_date_types, only: dc_difftime
557  character(STRING) :: result
558  type(dc_difftime), intent(in):: diff
559  end function dcdifftimetochar
560  end interface
561 
562  interface tocharcal
563  function dcdatetimetocharcal(time, upcase) result(result)
564  use dc_types, only: token
565  use dc_date_types, only: dc_datetime
566  character(TOKEN) :: result
567  type(dc_datetime), intent(in):: time
568  logical, intent(in), optional:: upcase
569  end function dcdatetimetocharcal
570  end interface
571 
572  interface operator(+)
573  type(dc_datetime) function dcdatetime_add_ft(diff, time) result(result)
575  type(dc_difftime), intent(in):: diff
576  type(dc_datetime), intent(in):: time
577  end function dcdatetime_add_ft
578 
579  type(dc_datetime) function dcdatetime_add_tf(time, diff) result(result)
581  type(dc_datetime), intent(in):: time
582  type(dc_difftime), intent(in):: diff
583  end function dcdatetime_add_tf
584 
585  type(dc_difftime) function dcdatetime_add_ff(diff1, diff2) result(result)
587  type(dc_difftime), intent(in):: diff1, diff2
588  end function dcdatetime_add_ff
589 
590  type(dc_difftime) function dcdatetime_add_fd(diff, sec) result(result)
592  use dc_types, only: dp
593  type(dc_difftime), intent(in):: diff
594  real(DP), intent(in):: sec
595  end function dcdatetime_add_fd
596 
597  type(dc_difftime) function dcdatetime_add_fr(diff, sec) result(result)
599  type(dc_difftime), intent(in):: diff
600  real, intent(in):: sec
601  end function dcdatetime_add_fr
602 
603  type(dc_difftime) function dcdatetime_add_fi(diff, sec) result(result)
605  type(dc_difftime), intent(in):: diff
606  integer, intent(in):: sec
607  end function dcdatetime_add_fi
608  end interface
609 
610  interface operator(-)
611  type(dc_datetime) function dcdatetime_sub_tf(time, diff) result(result) !:doc-priority 40:
613  type(dc_datetime), intent(in):: time
614  type(dc_difftime), intent(in):: diff
615  end function dcdatetime_sub_tf
616 
617  type(dc_difftime) function dcdatetime_sub_tt(time1, time2) result(result)
619  type(dc_datetime), intent(in):: time1, time2
620  end function dcdatetime_sub_tt
621 
622  type(dc_difftime) function dcdatetime_sub_ff(diff1, diff2) result(result)
624  type(dc_difftime), intent(in):: diff1, diff2
625  end function dcdatetime_sub_ff
626 
627  type(dc_difftime) function dcdatetime_sub_fd(diff, sec) result(result)
629  use dc_types, only: dp
630  type(dc_difftime), intent(in):: diff
631  real(DP), intent(in):: sec
632  end function dcdatetime_sub_fd
633 
634  type(dc_difftime) function dcdatetime_sub_fr(diff, sec) result(result)
636  type(dc_difftime), intent(in):: diff
637  real, intent(in):: sec
638  end function dcdatetime_sub_fr
639 
640  type(dc_difftime) function dcdatetime_sub_fi(diff, sec) result(result)
642  type(dc_difftime), intent(in):: diff
643  integer, intent(in):: sec
644  end function dcdatetime_sub_fi
645  end interface
646 
647  interface operator(*)
648  type(dc_difftime) function dcdatetime_mul_if(factor, diff) result(result) !:doc-priority 51:
650  integer, intent(in):: factor
651  type(dc_difftime), intent(in):: diff
652  end function dcdatetime_mul_if
653 
654  type(dc_difftime) function dcdatetime_mul_fi(diff, factor) result(result) !:doc-priority 52:
656  type(dc_difftime), intent(in):: diff
657  integer, intent(in):: factor
658  end function dcdatetime_mul_fi
659 
660  type(dc_difftime) function dcdatetime_mul_rf(factor, diff) result(result) !:doc-priority 61:
662  real, intent(in):: factor
663  type(dc_difftime), intent(in):: diff
664  end function dcdatetime_mul_rf
665 
666  type(dc_difftime) function dcdatetime_mul_fr(diff, factor) result(result) !:doc-priority 62:
668  type(dc_difftime), intent(in):: diff
669  real, intent(in):: factor
670  end function dcdatetime_mul_fr
671 
672  type(dc_difftime) function dcdatetime_mul_df(factor, diff) result(result) !:doc-priority 71:
673  use dc_types, only: dp
675  real(DP), intent(in):: factor
676  type(dc_difftime), intent(in):: diff
677  end function dcdatetime_mul_df
678 
679  type(dc_difftime) function dcdatetime_mul_fd(diff, factor) result(result) !:doc-priority 72:
680  use dc_types, only: dp
682  type(dc_difftime), intent(in):: diff
683  real(DP), intent(in):: factor
684  end function dcdatetime_mul_fd
685 
686  end interface
687 
688  interface operator(/)
689  type(dc_difftime) function dcdatetime_div_fi(diff, denominator) result(result)
691  type(dc_difftime), intent(in):: diff
692  integer, intent(in):: denominator
693  end function dcdatetime_div_fi
694 
695  type(dc_difftime) function dcdatetime_div_fr(diff, denominator) result(result)
697  type(dc_difftime), intent(in):: diff
698  real, intent(in):: denominator
699  end function dcdatetime_div_fr
700 
701  type(dc_difftime) function dcdatetime_div_fd(diff, denominator) result(result)
703  use dc_types, only: dp
704  type(dc_difftime), intent(in):: diff
705  real(DP), intent(in):: denominator
706  end function dcdatetime_div_fd
707 
708  real(DP) function dcdatetime_div_ff(diff1, diff2) result(result)
710  use dc_types, only: dp
711  type(dc_difftime), intent(in):: diff1, diff2
712  end function dcdatetime_div_ff
713  end interface
714 
715  interface mod
716  type(dc_difftime) function dcdatetime_mod_ff(diff1, diff2) result(result)
718  type(dc_difftime), intent(in):: diff1, diff2
719  end function dcdatetime_mod_ff
720  end interface
721 
722  interface operator(==)
723  logical function dcdatetime_eq_tt(time1, time2) result(result) !:doc-priority 30:
725  type(dc_datetime), intent(in):: time1, time2
726  end function dcdatetime_eq_tt
727 
728  logical function dcdatetime_eq_ff(diff1, diff2) result(result) !:doc-priority 40:
730  type(dc_difftime), intent(in):: diff1, diff2
731  end function dcdatetime_eq_ff
732 
733  logical function dcdatetime_eq_if(i, diff) result(result) !:doc-priority 51:
735  type(dc_difftime), intent(in):: diff
736  integer, intent(in):: i
737  end function dcdatetime_eq_if
738 
739  logical function dcdatetime_eq_fi(diff, i) result(result) !:doc-priority 52:
741  type(dc_difftime), intent(in):: diff
742  integer, intent(in):: i
743  end function dcdatetime_eq_fi
744 
745  logical function dcdatetime_eq_rf(r, diff) result(result) !:doc-priority 61:
747  type(dc_difftime), intent(in):: diff
748  real, intent(in):: r
749  end function dcdatetime_eq_rf
750 
751  logical function dcdatetime_eq_fr(diff, r) result(result) !:doc-priority 62:
753  type(dc_difftime), intent(in):: diff
754  real, intent(in):: r
755  end function dcdatetime_eq_fr
756 
757  logical function dcdatetime_eq_df(d, diff) result(result) !:doc-priority 71:
758  use dc_types, only: dp
760  type(dc_difftime), intent(in):: diff
761  real(DP), intent(in):: d
762  end function dcdatetime_eq_df
763 
764  logical function dcdatetime_eq_fd(diff, d) result(result) !:doc-priority 72:
765  use dc_types, only: dp
767  type(dc_difftime), intent(in):: diff
768  real(DP), intent(in):: d
769  end function dcdatetime_eq_fd
770 
771  end interface
772 
773 
774  interface operator(>)
775  logical function dcdatetime_gt_tt(time1, time2) result(result) !:doc-priority 30:
777  type(dc_datetime), intent(in):: time1, time2
778  end function dcdatetime_gt_tt
779 
780  logical function dcdatetime_gt_ff(diff1, diff2) result(result) !:doc-priority 40:
782  type(dc_difftime), intent(in):: diff1, diff2
783  end function dcdatetime_gt_ff
784 
785  logical function dcdatetime_gt_fi(diff, factor) result(result) !:doc-priority 42:
787  type(dc_difftime), intent(in):: diff
788  integer, intent(in):: factor
789  end function dcdatetime_gt_fi
790 
791  logical function dcdatetime_gt_if(factor, diff) result(result) !:doc-priority 44:
793  integer, intent(in):: factor
794  type(dc_difftime), intent(in):: diff
795  end function dcdatetime_gt_if
796  end interface
797 
798  interface operator(<)
799  logical function dcdatetime_lt_tt(time1, time2) result(result) !:doc-priority 30:
801  type(dc_datetime), intent(in):: time1, time2
802  end function dcdatetime_lt_tt
803 
804  logical function dcdatetime_lt_ff(diff1, diff2) result(result) !:doc-priority 40:
806  type(dc_difftime), intent(in):: diff1, diff2
807  end function dcdatetime_lt_ff
808 
809  logical function dcdatetime_lt_fi(diff, factor) result(result) !:doc-priority 42:
811  type(dc_difftime), intent(in):: diff
812  integer, intent(in):: factor
813  end function dcdatetime_lt_fi
814 
815  logical function dcdatetime_lt_if(factor, diff) result(result) !:doc-priority 44:
817  integer, intent(in):: factor
818  type(dc_difftime), intent(in):: diff
819  end function dcdatetime_lt_if
820  end interface
821 
822  interface operator(>=)
823  logical function dcdatetime_ge_tt(time1, time2) result(result) !:doc-priority 30:
825  type(dc_datetime), intent(in):: time1, time2
826  end function dcdatetime_ge_tt
827 
828  logical function dcdatetime_ge_ff(diff1, diff2) result(result) !:doc-priority 40:
830  type(dc_difftime), intent(in):: diff1, diff2
831  end function dcdatetime_ge_ff
832 
833  logical function dcdatetime_ge_fi(diff, factor) result(result) !:doc-priority 42:
835  type(dc_difftime), intent(in):: diff
836  integer, intent(in):: factor
837  end function dcdatetime_ge_fi
838 
839  logical function dcdatetime_ge_if(factor, diff) result(result) !:doc-priority 44:
841  integer, intent(in):: factor
842  type(dc_difftime), intent(in):: diff
843  end function dcdatetime_ge_if
844  end interface
845 
846  interface operator(<=)
847  logical function dcdatetime_le_tt(time1, time2) result(result) !:doc-priority 30:
849  type(dc_datetime), intent(in):: time1, time2
850  end function dcdatetime_le_tt
851 
852  logical function dcdatetime_le_ff(diff1, diff2) result(result) !:doc-priority 40:
854  type(dc_difftime), intent(in):: diff1, diff2
855  end function dcdatetime_le_ff
856 
857  logical function dcdatetime_le_fi(diff, factor) result(result) !:doc-priority 42:
859  type(dc_difftime), intent(in):: diff
860  integer, intent(in):: factor
861  end function dcdatetime_le_fi
862 
863  logical function dcdatetime_le_if(factor, diff) result(result) !:doc-priority 44:
865  integer, intent(in):: factor
866  type(dc_difftime), intent(in):: diff
867  end function dcdatetime_le_if
868  end interface
869 
870  interface max
871  type(dc_datetime) function dcdatetime_max_tt(time1, time2) result(result) !:doc-priority 30:
873  type(dc_datetime), intent(in):: time1, time2
874  end function dcdatetime_max_tt
875 
876  type(dc_difftime) function dcdatetime_max_ff(diff1, diff2) result(result) !:doc-priority 40:
878  type(dc_difftime), intent(in):: diff1, diff2
879  end function dcdatetime_max_ff
880  end interface
881 
882  interface min
883  type(dc_datetime) function dcdatetime_min_tt(time1, time2) result(result) !:doc-priority 30:
885  type(dc_datetime), intent(in):: time1, time2
886  end function dcdatetime_min_tt
887 
888  type(dc_difftime) function dcdatetime_min_ff(diff1, diff2) result(result) !:doc-priority 40:
890  type(dc_difftime), intent(in):: diff1, diff2
891  end function dcdatetime_min_ff
892  end interface
893 
894  !-----------------------------------------------
895  ! 後方互換用
896  ! For backward compatibility
897  interface create
898  subroutine dcdatetimecreate1_bc(time, &
899  & year, mon, day, hour, min, sec, &
900  & zone, caltype, day_seconds, err) !:doc-priority 40:
901  use dc_types, only: dp
902  use dc_date_types, only: dc_datetime
903  use dc_scaledsec, only: dc_scaled_sec
904  type(dc_datetime), intent(out):: time
905  integer, intent(in), optional:: year, mon, day, hour, min
906  real(DP),intent(in), optional:: sec, day_seconds
907  character(*), intent(in), optional :: zone
908  integer, intent(in), optional:: caltype
909  logical, intent(out), optional:: err
910  end subroutine dcdatetimecreate1_bc
911 
912  subroutine dcdifftimecreate1_bc(diff, &
913  & year, mon, day, hour, min, sec, day_seconds ) !:doc-priority 60:
914  use dc_types, only: dp
915  use dc_date_types, only: dc_difftime
916  use dc_scaledsec, only: dc_scaled_sec
917  type(dc_difftime), intent(out) :: diff
918  integer, intent(in), optional:: year, mon, day, hour, min
919  real(DP),intent(in), optional:: sec, day_seconds
920  end subroutine dcdifftimecreate1_bc
921 
922  subroutine dcdifftimecreate2_bc(diff, value, unit, unit_symbol, err) !:doc-priority 70:
923  use dc_types, only: dp
924  use dc_date_types, only: dc_difftime
925  type(dc_difftime), intent(out) :: diff
926  real(DP), intent(in) :: value
927  character(*), intent(in) :: unit
928  integer, intent(in), optional :: unit_symbol
929  logical, intent(out), optional :: err
930  end subroutine dcdifftimecreate2_bc
931  end interface
932 
933  interface putline
934  subroutine dcdatetimeputline_bc(time, unit)
936  type(dc_datetime), intent(in) :: time
937  integer, intent(in), optional :: unit
938  end subroutine dcdatetimeputline_bc
939 
940  subroutine dcdifftimeputline_bc(diff, unit)
942  type(dc_difftime), intent(in) :: diff
943  integer, intent(in), optional :: unit
944  end subroutine dcdifftimeputline_bc
945  end interface
946 
947 end module dc_date_generic
subroutine dcdatetimecreater(time, sec)
subroutine dcdifftimecreate2d(diff, value, unit, unit_symbol, err)
type(dc_difftime) function dcdatetime_max_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_sub_fd(diff, sec)
type(dc_difftime) function dcdatetime_sub_fr(diff, sec)
type(dc_difftime) function dcdatetime_sub_fi(diff, sec)
logical function dcdatetime_gt_tt(time1, time2)
logical function dcdatetime_ge_tt(time1, time2)
logical function dcdatetimevalidcaltype(caltype)
logical function dcdatetime_le_tt(time1, time2)
type(dc_difftime) function dcdatetime_mul_fi(diff, factor)
type(dc_difftime) function dcdatetime_div_fr(diff, denominator)
type(dc_datetime) function dcdatetime_add_tf(time, diff)
logical function dcdatetime_le_fi(diff, factor)
logical function dcdatetime_lt_tt(time1, time2)
subroutine dcdifftimecreate1_bc(diff, year, mon, day, hour, min, sec, day_seconds)
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition: dc_types.f90:109
logical function dcdatetime_lt_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_mul_fr(diff, factor)
type(dc_difftime) function dcdatetime_add_fd(diff, sec)
character(string) function dcdifftimetochar(diff)
logical function dcdatetime_gt_if(factor, diff)
subroutine dcdatetimecreated(time, sec)
logical function dcdatetime_eq_fr(diff, r)
logical function dcdatetime_ge_fi(diff, factor)
type(dc_difftime) function dcdatetime_mul_df(factor, diff)
real(dp) function dcdifftimeevalbyunit(diff, unit, unit_symbol)
subroutine dcdatetimecreate1(time, year, mon, day, hour, min, sec, zone, zone_hour, zone_min, caltype, caltype_str, day_seconds, sclyear, sclmon, sclday, sclsec, err)
real(dp) function dcdifftimeevalnondim(diff)
subroutine dcdatetimesetcaltype(caltype)
logical function dcdatetime_gt_fi(diff, factor)
subroutine dcdifftimecreated(diff, sec)
type(dc_scaled_sec) function dcdifftimeevalsclsec(diff)
real(dp) function dcdatetimeevalbyunit(time, unit, unit_symbol)
subroutine dcdifftimecreater(diff, sec)
subroutine dcdatetimecreatei(time, sec)
type(dc_difftime) function dcdatetime_mul_fd(diff, factor)
type(dc_datetime) function dcdatetime_max_tt(time1, time2)
subroutine dcdatetimesetzone(time, zone, err)
type(dc_difftime) function dcdatetime_sub_tt(time1, time2)
type(dc_difftime) function dcdatetime_sub_ff(diff1, diff2)
subroutine dcdatetimeeval1(time, year, mon, day, hour, min, sec, caltype, zone, sclyear, sclmon, sclday, sclsec)
real(dp) function dcdatetimeevalmin(time)
logical function dcdatetime_ge_if(factor, diff)
logical function dcdatetime_lt_fi(diff, factor)
logical function dcdatetimevalidzone(zone)
logical function dcdatetime_eq_ff(diff1, diff2)
logical function dcdatetime_eq_fd(diff, d)
type(dc_difftime) function dcdatetime_add_fi(diff, sec)
type(dc_datetime) function dcdatetime_min_tt(time1, time2)
subroutine dcdifftimecreatei(diff, sec)
type(dc_difftime) function dcdatetime_add_ff(diff1, diff2)
integer, parameter, public dp
倍精度実数型変数
Definition: dc_types.f90:83
subroutine dcdifftimeputline_bc(diff, unit)
real(dp) function dcdatetime_div_ff(diff1, diff2)
real(dp) function dcdatetimeevalhour(time)
logical function, public present_and_not_empty(arg)
Definition: dc_present.f90:276
logical function dcdatetime_eq_rf(r, diff)
subroutine dcdatetimeputline_bc(time, unit)
type(dc_scaled_sec) function dcdatetimeevalsclsec(time)
type(dc_difftime) function dcdatetime_mul_if(factor, diff)
type(dc_difftime) function dcdatetime_min_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_div_fd(diff, denominator)
real(dp) function dcdifftimeevalsec(diff)
subroutine dcdifftimecreate2i(diff, value, unit, unit_symbol, err)
logical function dcdatetime_lt_if(factor, diff)
type(dc_difftime) function dcdatetime_add_fr(diff, sec)
real(dp) function dcdifftimeevalday(diff)
種別型パラメタを提供します。
Definition: dc_types.f90:49
logical function dcdatetime_eq_fi(diff, i)
type(dc_datetime) function dcdatetime_add_ft(diff, time)
real(dp) function dcdifftimeevalmin(diff)
type(dc_difftime) function dcdatetime_div_fi(diff, denominator)
real(dp) function dcdifftimeevalhour(diff)
logical function dcdatetime_eq_df(d, diff)
logical function dcdatetime_le_if(factor, diff)
subroutine dcdatetimesetsecofday(sec)
real(dp) function dcdatetimeevalsec(time)
subroutine dcdifftimecreate2r(diff, value, unit, unit_symbol, err)
subroutine dcdifftimecreate2_bc(diff, value, unit, err)
type(dc_difftime) function dcdatetime_mul_rf(factor, diff)
logical function dcdatetime_gt_ff(diff1, diff2)
subroutine dcdifftimeeval1(diff, year, mon, day, hour, min, sec, nondim, sclyear, sclmon, sclday, sclsec, sclnondim, err)
subroutine dcdifftimecreate1(diff, year, mon, day, hour, min, sec, day_seconds, nondim, sclyear, sclmon, sclday, sclsec)
real(dp) function dcdatetimeevalday(time)
logical function dcdatetime_le_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_mod_ff(diff1, diff2)
type(dc_difftime) function dcdatetimezonetodiff(zone)
logical function dcdatetime_eq_tt(time1, time2)
subroutine dcdatetimecreate1_bc(time, year, mon, day, hour, min, sec, zone, caltype, day_seconds, err)
type(dc_datetime) function dcdatetime_sub_tf(time, diff)
integer function dcdatetimeparseunits(str)
character(token) function dcdatetimetocharcal(time, upcase)
logical function dcdatetime_eq_if(i, diff)
character(string) function dcdatetimetochar(time)
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
Definition: dc_types.f90:118
logical function dcdatetime_ge_ff(diff1, diff2)