gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
dcdatetimediv.f90
Go to the documentation of this file.
1! -*- mode: f90; coding: utf-8 -*-
2!-----------------------------------------------------------------------
3! Copyright (c) 2000-2026 Gtool Development Group. All rights reserved.
4!-----------------------------------------------------------------------
21
45function dcdatetime_div_fi(diff, denominator) result(result)
47 use dc_scaledsec, only: dc_scaled_sec, &
48 & operator(<), operator(>), operator(<=), operator(>=), &
49 & operator(+), operator(-), operator(*), operator(/), &
50 & modscl => mod, modulo, int, abs, sign
52 implicit none
53 type(dc_difftime):: result
54 type(dc_difftime), intent(in):: diff
55 integer, intent(in):: denominator
56continue
57 result % mon = int( diff % mon / denominator )
58 ! 月からの近似的繰り下がりは日単位でしか行わない
59 result % day = &
60 & int( diff % day / denominator ) &
61 & + int( (cyclic_mdays * modscl(diff % mon, denominator)) / denominator )
62 result % sec = diff % sec / denominator + &
63 & (diff % day_seconds * modscl(diff % day, denominator)) / &
64 & denominator
65 result % nondim_flag = diff % nondim_flag
66end function dcdatetime_div_fi
67
87function dcdatetime_div_fr(diff, denominator) result(result)
88 use dc_date_generic, only: operator(/)
90 use dc_types, only: dp
91 implicit none
92 type(dc_difftime):: result
93 type(dc_difftime), intent(in):: diff
94 real, intent(in):: denominator
95continue
96 result = diff / real(denominator, dp)
97end function dcdatetime_div_fr
98
118function dcdatetime_div_fd(diff, denominator) result(result)
121 use dc_scaledsec, only: dc_scaled_sec, &
122 & operator(<), operator(>), operator(<=), operator(>=), &
123 & operator(+), operator(-), operator(*), operator(/), &
124 & modulo, int, abs, sign
125 use dc_types, only: dp
126 implicit none
127 type(dc_difftime):: result
128 type(dc_difftime), intent(in):: diff
129 real(dp), intent(in):: denominator
130 type(dc_scaled_sec):: month, day
131continue
132 month = int( diff % mon / denominator )
133 result % mon = int(month)
134 day = int( diff % day / denominator ) &
135 & + int(cyclic_mdays * (month - result % mon))
136 result % day = int(day)
137 result % sec = &
138 & diff % sec / denominator + (day - result % day) * diff % day_seconds
139 result % day_seconds = diff % day_seconds
140 result % nondim_flag = diff % nondim_flag
141 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
142end function dcdatetime_div_fd
143
163function dcdatetime_div_ff(diff1, diff2) result(result)
164 use dc_date_types, only: cyclic_mdays
165 use dc_scaledsec, only: dc_scaled_sec, assignment(=), &
166 & operator(<), operator(>), operator(<=), operator(>=), &
167 & operator(+), operator(-), operator(*), operator(/), &
168 & modulo, int, abs, sign
170 use dc_types, only: dp
171 implicit none
172 real(dp):: result
173 type(dc_difftime), intent(in):: diff1, diff2
174continue
175 ! ゼロ割対応コードが必要か?
176 result = &
177 & (diff1 % day_seconds * (cyclic_mdays * diff1 % mon + diff1 % day) &
178 & + diff1 % sec) / &
179 & (diff2 % day_seconds * (cyclic_mdays * diff2 % mon + diff2 % day) &
180 & + diff2 % sec)
181end function dcdatetime_div_ff
type(dc_difftime) function dcdatetime_div_fi(diff, denominator)
Functions for user defined operation (/)
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)
Interface declarations for procedures provided from dc_date.
Internal module for dc_date.
subroutine, public dcdate_normalize(day, sec, day_seconds, nondim_flag)
Derived types and parameters for date and time.
real(dp), parameter, public cyclic_mdays
Days per month for cyclic calendar (also used for DC_DIFFTIME)
Scaled seconds module for precise time operations.
Provides kind type parameter values.
Definition dc_types.f90:55
integer, parameter, public dp
Double Precision Real number
Definition dc_types.f90:92