Loading...
Searching...
No Matches
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 ! ※ 注意 : 月差を除算すると近似的結果になるおそれがあります
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 ! ※ 注意 : 月差と日時の混在する除算は近似的結果になるおそれがあります
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_fi(diff, denominator)
type(dc_difftime) function dcdatetime_div_fr(diff, denominator)
real(dp) function dcdatetime_div_ff(diff1, diff2)
type(dc_difftime) function dcdatetime_div_fd(diff, denominator)
subroutine, public dcdate_normalize(day, sec, day_seconds, nondim_flag)
real(dp), parameter, public cyclic_mdays
Provides kind type parameter values.
Definition dc_types.f90:49
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:83