dcdatetimediv.f90
Go to the documentation of this file.
1 != 利用者定義演算子 (/) のための関数
2 != Functions for user defined operation (/)
3 !
4 ! Authors:: Yasuhiro MORIKAWA, Eizi TOYODA
5 ! Version:: $Id: dcdatetimediv.f90,v 1.2 2009-05-31 11:46:03 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 !
10  function dcdatetime_div_fi(diff, denominator) result(result)
11  !
12  ! 日時差 *diff* を *denominator* で除算した結果を返します.
13  !
14  ! ※ 注意 : 月差を除算すると近似的結果になるおそれがあります
15  use dc_date_types, only: cyclic_mdays
16  use dc_scaledsec, only: dc_scaled_sec, &
17  & operator(<), operator(>), operator(<=), operator(>=), &
18  & operator(+), operator(-), operator(*), operator(/), &
19  & modscl => mod, modulo, int, abs, sign
21  implicit none
22  type(dc_difftime):: result
23  type(dc_difftime), intent(in):: diff
24  integer, intent(in):: denominator
25  continue
26  result % mon = int( diff % mon / denominator )
27  ! 月からの近似的繰り下がりは日単位でしか行わない
28  result % day = &
29  & int( diff % day / denominator ) &
30  & + int( (cyclic_mdays * modscl(diff % mon, denominator)) / denominator )
31  result % sec = diff % sec / denominator + &
32  & (diff % day_seconds * modscl(diff % day, denominator)) / &
33  & denominator
34  result % nondim_flag = diff % nondim_flag
35  end function dcdatetime_div_fi
36 
37  function dcdatetime_div_fr(diff, denominator) result(result)
38  !
39  ! ※ 注意 : 月差を除算すると近似的結果になるおそれがあります
40  use dc_date_generic, only: operator(/)
42  use dc_types, only: dp
43  implicit none
44  type(dc_difftime):: result
45  type(dc_difftime), intent(in):: diff
46  real, intent(in):: denominator
47  continue
48  result = diff / real(denominator, dp)
49  end function dcdatetime_div_fr
50 
51  function dcdatetime_div_fd(diff, denominator) result(result)
52  !
53  ! ※ 注意 : 月差を除算すると近似的結果になるおそれがあります
56  use dc_scaledsec, only: dc_scaled_sec, &
57  & operator(<), operator(>), operator(<=), operator(>=), &
58  & operator(+), operator(-), operator(*), operator(/), &
59  & modulo, int, abs, sign
60  use dc_types, only: dp
61  implicit none
62  type(dc_difftime):: result
63  type(dc_difftime), intent(in):: diff
64  real(DP), intent(in):: denominator
65  type(dc_scaled_sec):: month, day
66  continue
67  month = int( diff % mon / denominator )
68  result % mon = int(month)
69  day = int( diff % day / denominator ) &
70  & + int(cyclic_mdays * (month - result % mon))
71  result % day = int(day)
72  result % sec = &
73  & diff % sec / denominator + (day - result % day) * diff % day_seconds
74  result % day_seconds = diff % day_seconds
75  result % nondim_flag = diff % nondim_flag
76  call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
77  end function dcdatetime_div_fd
78 
79  function dcdatetime_div_ff(diff1, diff2) result(result)
80  !
81  ! ※ 注意 : 月差と日時の混在する除算は近似的結果になるおそれがあります
82  use dc_date_types, only: cyclic_mdays
83  use dc_scaledsec, only: dc_scaled_sec, assignment(=), &
84  & operator(<), operator(>), operator(<=), operator(>=), &
85  & operator(+), operator(-), operator(*), operator(/), &
86  & modulo, int, abs, sign
88  use dc_types, only: dp
89  implicit none
90  real(DP):: result
91  type(dc_difftime), intent(in):: diff1, diff2
92  continue
93  ! ゼロ割対応コードが必要か?
94  result = &
95  & (diff1 % day_seconds * (cyclic_mdays * diff1 % mon + diff1 % day) &
96  & + diff1 % sec) / &
97  & (diff2 % day_seconds * (cyclic_mdays * diff2 % mon + diff2 % day) &
98  & + diff2 % sec)
99  end function dcdatetime_div_ff
type(dc_difftime) function dcdatetime_div_fr(diff, denominator)
real(dp), parameter, public cyclic_mdays
integer, parameter, public dp
倍精度実数型変数
Definition: dc_types.f90:83
real(dp) function dcdatetime_div_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_div_fd(diff, denominator)
種別型パラメタを提供します。
Definition: dc_types.f90:49
type(dc_difftime) function dcdatetime_div_fi(diff, denominator)
subroutine, public dcdate_normalize(day, sec, day_seconds, nondim_flag)