gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
dcdatetimemul.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!-----------------------------------------------------------------------
5!>
6!> @author Yasuhiro MORIKAWA, Eizi TOYODA
7!> @copyright Copyright (C) GFD Dennou Club, 2000-2026. All rights reserved. <br/>
8!> License is BSD-2-Clause. see [COPYRIGHT](@ref COPYRIGHT) in detail
9!> @en
10!> @brief Functions for user defined operation (*)
11!> @details
12!> This file contains implementation procedures of multiplication
13!> for dc_date_types#DC_DIFFTIME.
14!> @enden
15!>
16!> @ja
17!> @brief 利用者定義演算子 (*) のための関数
18!> @details
19!> このファイルには dc_date_types#DC_DIFFTIME の乗算の実装手続きが
20!> 含まれています。
21!> @endja
22!>
23
24!> @en
25!> @brief Multiply integer by DC_DIFFTIME
26!> @details
27!> Return the result of multiplying time difference `diff` by `factor`.
28!>
29!> @param[in] factor Integer multiplier
30!> @param[in] diff Time difference to multiply
31!> @return Result of multiplication
32!> @enden
33!>
34!> @ja
35!> @brief 整数と DC_DIFFTIME の乗算
36!> @details
37!> 日時差 `diff` と `factor` とを乗算した結果を返します.
38!>
39!> @param[in] factor 整数の乗数
40!> @param[in] diff 乗算する日時差
41!> @return 乗算結果
42!> @endja
43function dcdatetime_mul_if(factor, diff) result(result)
44
47 use dc_scaledsec, only: operator(*)
48 implicit none
49 type(dc_difftime):: result
50 integer, intent(in):: factor
51 type(dc_difftime), intent(in):: diff
52continue
53 result % mon = factor * diff % mon
54 result % day = factor * diff % day
55 result % sec = factor * diff % sec
56 result % day_seconds = diff % day_seconds
57 result % nondim_flag = diff % nondim_flag
58 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
59end function dcdatetime_mul_if
60
61!> @en
62!> @brief Multiply DC_DIFFTIME by integer
63!> @details
64!> Return the result of multiplying time difference `diff` by `factor`.
65!>
66!> @param[in] diff Time difference to multiply
67!> @param[in] factor Integer multiplier
68!> @return Result of multiplication
69!> @enden
70!>
71!> @ja
72!> @brief DC_DIFFTIME と整数の乗算
73!> @details
74!> 日時差 `diff` と `factor` とを乗算した結果を返します.
75!>
76!> @param[in] diff 乗算する日時差
77!> @param[in] factor 整数の乗数
78!> @return 乗算結果
79!> @endja
80function dcdatetime_mul_fi(diff, factor) result(result)
81
82 use dc_date_generic, only: operator(*)
84 implicit none
85 type(dc_difftime):: result
86 type(dc_difftime), intent(in):: diff
87 integer, intent(in):: factor
88continue
89 result = factor * diff
90end function dcdatetime_mul_fi
91
92!> @en
93!> @brief Multiply single precision by DC_DIFFTIME
94!> @details
95!> Return the result of multiplying time difference `diff` by `factor`.
96!>
97!> @note Multiplying months by non-integer may produce approximate results.
98!>
99!> @param[in] factor Single precision multiplier
100!> @param[in] diff Time difference to multiply
101!> @return Result of multiplication
102!> @enden
103!>
104!> @ja
105!> @brief 単精度実数と DC_DIFFTIME の乗算
106!> @details
107!> 日時差 `diff` と `factor` とを乗算した結果を返します.
108!>
109!> @note 月差を非整数倍すると近似的結果になるおそれがあります
110!>
111!> @param[in] factor 単精度実数の乗数
112!> @param[in] diff 乗算する日時差
113!> @return 乗算結果
114!> @endja
115function dcdatetime_mul_rf(factor, diff) result(result)
116
117 use dc_date_generic, only: operator(*)
119 use dc_types, only: dp
120 implicit none
121 type(dc_difftime):: result
122 real, intent(in):: factor
123 type(dc_difftime), intent(in):: diff
124continue
125 result = real(factor, dp) * diff
126end function dcdatetime_mul_rf
127
128!> @en
129!> @brief Multiply DC_DIFFTIME by single precision
130!> @details
131!> Return the result of multiplying time difference `diff` by `factor`.
132!>
133!> @note Multiplying months by non-integer may produce approximate results.
134!>
135!> @param[in] diff Time difference to multiply
136!> @param[in] factor Single precision multiplier
137!> @return Result of multiplication
138!> @enden
139!>
140!> @ja
141!> @brief DC_DIFFTIME と単精度実数の乗算
142!> @details
143!> 日時差 `diff` と `factor` とを乗算した結果を返します.
144!>
145!> @note 月差を非整数倍すると近似的結果になるおそれがあります
146!>
147!> @param[in] diff 乗算する日時差
148!> @param[in] factor 単精度実数の乗数
149!> @return 乗算結果
150!> @endja
151function dcdatetime_mul_fr(diff, factor) result(result)
152
153 use dc_date_generic, only: operator(*)
155 implicit none
156 type(dc_difftime):: result
157 type(dc_difftime), intent(in):: diff
158 real, intent(in):: factor
159continue
160 result = factor * diff
161end function dcdatetime_mul_fr
162
163!> @en
164!> @brief Multiply double precision by DC_DIFFTIME
165!> @details
166!> Return the result of multiplying time difference `diff` by `factor`.
167!>
168!> @note Multiplying months by non-integer may produce approximate results.
169!>
170!> @param[in] factor Double precision multiplier
171!> @param[in] diff Time difference to multiply
172!> @return Result of multiplication
173!> @enden
174!>
175!> @ja
176!> @brief 倍精度実数と DC_DIFFTIME の乗算
177!> @details
178!> 日時差 `diff` と `factor` とを乗算した結果を返します.
179!>
180!> @note 月差を非整数倍すると近似的結果になるおそれがあります
181!>
182!> @param[in] factor 倍精度実数の乗数
183!> @param[in] diff 乗算する日時差
184!> @return 乗算結果
185!> @endja
186function dcdatetime_mul_df(factor, diff) result(result)
187
190 use dc_scaledsec, only: dc_scaled_sec, &
191 & operator(<), operator(>), operator(<=), operator(>=), &
192 & operator(+), operator(-), operator(*), operator(/), &
193 & modulo, int, abs, sign
194 use dc_types, only: dp
195 implicit none
196 type(dc_difftime):: result
197 real(dp), intent(in):: factor
198 type(dc_difftime), intent(in):: diff
199 type(dc_scaled_sec):: month, day
200continue
201 month = factor * diff % mon
202 result % mon = int(month)
203 day = factor * diff % day + int(cyclic_mdays * (month - result % mon))
204 result % day = int(day)
205 result % sec = &
206 & factor * diff % sec + (day - result % day) * diff % day_seconds
207 result % day_seconds = diff % day_seconds
208 result % nondim_flag = diff % nondim_flag
209 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
210end function dcdatetime_mul_df
211
212!> @en
213!> @brief Multiply DC_DIFFTIME by double precision
214!> @details
215!> Return the result of multiplying time difference `diff` by `factor`.
216!>
217!> @note Multiplying months by non-integer may produce approximate results.
218!>
219!> @param[in] diff Time difference to multiply
220!> @param[in] factor Double precision multiplier
221!> @return Result of multiplication
222!> @enden
223!>
224!> @ja
225!> @brief DC_DIFFTIME と倍精度実数の乗算
226!> @details
227!> 日時差 `diff` と `factor` とを乗算した結果を返します.
228!>
229!> @note 月差を非整数倍すると近似的結果になるおそれがあります
230!>
231!> @param[in] diff 乗算する日時差
232!> @param[in] factor 倍精度実数の乗数
233!> @return 乗算結果
234!> @endja
235function dcdatetime_mul_fd(diff, factor) result(result)
236
237 use dc_date_generic, only: operator(*)
239 use dc_types, only: dp
240 implicit none
241 type(dc_difftime):: result
242 type(dc_difftime), intent(in):: diff
243 real(dp), intent(in):: factor
244continue
245 result = factor * diff
246end function dcdatetime_mul_fd
type(dc_difftime) function dcdatetime_mul_if(factor, diff)
Functions for user defined operation (*).
type(dc_difftime) function dcdatetime_mul_rf(factor, diff)
type(dc_difftime) function dcdatetime_mul_df(factor, diff)
type(dc_difftime) function dcdatetime_mul_fd(diff, factor)
type(dc_difftime) function dcdatetime_mul_fr(diff, factor)
type(dc_difftime) function dcdatetime_mul_fi(diff, factor)
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