gtool5 Fortran 90/95 Library 1.0.0-rc5
日本語
Loading...
Searching...
No Matches
dcdatetimeadd.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!> Procedures described in this file are provided from "dc_date" module.
13!> @enden
14!>
15!> @ja
16!> @brief 利用者定義演算子 (+) のための関数
17!> @details
18!> このファイルに記載される手続き群は dc_date モジュールから提供されます.
19!> @endja
20!>
21
22!> @en
23!> @brief Add DC_DIFFTIME to DC_DATETIME
24!> @details
25!> Adds two datetime (DC_DATETIME type) or
26!> time difference (DC_DIFFTIME type).
27!>
28!> @param[in] diff Time difference
29!> @param[in] time Datetime
30!> @return result Result of addition
31!> @enden
32!>
33!> @ja
34!> @brief DC_DIFFTIME を DC_DATETIME に加算
35!> @details
36!> 2 つの日時 (DC_DATETIME 型) もしくは
37!> 日時差 (DC_DIFFTIME 型)の加算を行います.
38!>
39!> @param[in] diff 日時差
40!> @param[in] time 日時
41!> @return result 加算結果
42!> @endja
43function dcdatetime_add_ft(diff, time) result(result)
46 use dc_scaledsec, only: dc_scaled_sec, &
47 & operator(<), operator(>), operator(<=), operator(>=), &
48 & operator(+), operator(-), operator(*), operator(/), &
49 & modulo, int, abs, sign
50 implicit none
51 type(dc_datetime):: result
52 type(dc_difftime), intent(in):: diff
53 type(dc_datetime), intent(in):: time
54 type(dc_scaled_sec):: time_year, time_mon, time_day, time_sec
55 integer:: time_caltype
56 character(6):: time_zone
57continue
58 call eval(time, sclyear = time_year, sclmon = time_mon, &
59 & sclday = time_day, sclsec = time_sec, &
60 & caltype = time_caltype, zone = time_zone)
61 call dcdatetimecreate(result, sclyear = time_year, &
62 & sclmon = time_mon + diff % mon, &
63 & sclday = time_day + diff % day, &
64 & sclsec = time_sec + diff % sec, &
65 & caltype = time_caltype, zone = time_zone)
66end function dcdatetime_add_ft
67
68!> @en
69!> @brief Add DC_DIFFTIME to DC_DATETIME (reversed order)
70!> @param[in] time Datetime
71!> @param[in] diff Time difference
72!> @return result Result of addition
73!> @enden
74!>
75!> @ja
76!> @brief DC_DIFFTIME を DC_DATETIME に加算 (引数順序逆)
77!> @param[in] time 日時
78!> @param[in] diff 日時差
79!> @return result 加算結果
80!> @endja
81 function dcdatetime_add_tf(time, diff) result(result)
82 use dc_date_generic, only: operator(+)
84 implicit none
85 type(dc_datetime):: result
86 type(dc_datetime), intent(in):: time
87 type(dc_difftime), intent(in):: diff
88continue
89 result = diff + time
90end function dcdatetime_add_tf
91
92!> @en
93!> @brief Add two DC_DIFFTIME values
94!> @param[in] diff1 First time difference
95!> @param[in] diff2 Second time difference
96!> @return result Result of addition
97!> @enden
98!>
99!> @ja
100!> @brief 2つの DC_DIFFTIME 値を加算
101!> @param[in] diff1 1つ目の日時差
102!> @param[in] diff2 2つ目の日時差
103!> @return result 加算結果
104!> @endja
105function dcdatetime_add_ff(diff1, diff2) result(result)
108 use dc_scaledsec, only: operator(+)
109 implicit none
110 type(dc_difftime):: result
111 type(dc_difftime), intent(in):: diff1, diff2
112continue
113 result % mon = diff1 % mon + diff2 % mon
114 result % day = diff1 % day + diff2 % day
115 result % sec = diff1 % sec + diff2 % sec
116 result % day_seconds = diff1 % day_seconds
117 call dcdate_nondimcheck('dc_date#operator(+)', diff1, diff2, result)
118 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
119end function dcdatetime_add_ff
120
121!> @en
122!> @brief Add double precision seconds to DC_DIFFTIME
123!> @param[in] diff Time difference
124!> @param[in] sec Seconds to add (double precision)
125!> @return result Result of addition
126!> @enden
127!>
128!> @ja
129!> @brief 倍精度秒数を DC_DIFFTIME に加算
130!> @param[in] diff 日時差
131!> @param[in] sec 加算する秒数 (倍精度)
132!> @return result 加算結果
133!> @endja
134function dcdatetime_add_fd(diff, sec) result(result)
137 use dc_scaledsec, only: operator(+)
138 use dc_types, only: dp
139 implicit none
140 type(dc_difftime):: result
141 type(dc_difftime), intent(in):: diff
142 real(dp), intent(in):: sec
143continue
144 result % mon = diff % mon
145 result % day = diff % day
146 result % sec = diff % sec + sec
147 result % day_seconds = diff % day_seconds
148 call dcdate_normalize(result % day, result % sec, result % day_seconds, result % nondim_flag)
149end function dcdatetime_add_fd
150
151!> @en
152!> @brief Add single precision seconds to DC_DIFFTIME
153!> @param[in] diff Time difference
154!> @param[in] sec Seconds to add (single precision)
155!> @return result Result of addition
156!> @enden
157!>
158!> @ja
159!> @brief 単精度秒数を DC_DIFFTIME に加算
160!> @param[in] diff 日時差
161!> @param[in] sec 加算する秒数 (単精度)
162!> @return result 加算結果
163!> @endja
164function dcdatetime_add_fr(diff, sec) result(result)
166 use dc_date_generic, only: operator(+)
167 use dc_scaledsec, only: operator(+)
168 use dc_types, only: dp
169 implicit none
170 type(dc_difftime):: result
171 type(dc_difftime), intent(in):: diff
172 real, intent(in):: sec
173continue
174 result = diff + real( sec, dp )
175end function dcdatetime_add_fr
176
177!> @en
178!> @brief Add integer seconds to DC_DIFFTIME
179!> @param[in] diff Time difference
180!> @param[in] sec Seconds to add (integer)
181!> @return result Result of addition
182!> @enden
183!>
184!> @ja
185!> @brief 整数秒数を DC_DIFFTIME に加算
186!> @param[in] diff 日時差
187!> @param[in] sec 加算する秒数 (整数)
188!> @return result 加算結果
189!> @endja
190function dcdatetime_add_fi(diff, sec) result(result)
192 use dc_date_generic, only: operator(+)
193 use dc_scaledsec, only: operator(+)
194 use dc_types, only: dp
195 implicit none
196 type(dc_difftime):: result
197 type(dc_difftime), intent(in):: diff
198 integer, intent(in):: sec
199continue
200 result = diff + real( sec, dp )
201end function dcdatetime_add_fi
type(dc_difftime) function dcdatetime_add_fd(diff, sec)
type(dc_datetime) function dcdatetime_add_tf(time, diff)
type(dc_difftime) function dcdatetime_add_ff(diff1, diff2)
type(dc_datetime) function dcdatetime_add_ft(diff, time)
Functions for user defined operation (+).
type(dc_difftime) function dcdatetime_add_fr(diff, sec)
type(dc_difftime) function dcdatetime_add_fi(diff, sec)
Interface declarations for procedures provided from dc_date.
Internal module for dc_date.
subroutine, public dcdate_normalize(day, sec, day_seconds, nondim_flag)
subroutine, public dcdate_nondimcheck(opr, diff1, diff2, rslt)
Derived types and parameters for date and time.
integer, save, public caltype
Default calendar type (Gregorian)
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