Loading...
Searching...
No Matches
dc_date_internal Module Reference

Functions/Subroutines

subroutine, public dcdate_normalize (day, sec, day_seconds, nondim_flag)
subroutine, public dcdate_set_day_seconds_scl
subroutine, public dcdate_nondimcheck (opr, diff1, diff2, rslt)
character(token) function, public dcdate_parse_unit (str)

Function/Subroutine Documentation

◆ dcdate_nondimcheck()

subroutine, public dc_date_internal::dcdate_nondimcheck ( character(*), intent(in) opr,
type(dc_difftime), intent(in) diff1,
type(dc_difftime), intent(in) diff2,
type(dc_difftime), intent(inout) rslt )

Definition at line 83 of file dc_date_internal.f90.

84 !
85 ! このサブルーチンは内部向けなので dc_date モジュール外では
86 ! 極力使用しないでください.
87 !
88 ! diff1 と diff2 が両方とも有次元もしくは無次元かをチェックし,
89 ! 両方が同じであれば, その結果を rslt に適用します.
90 ! 2つの引数で片方が有次元, もう片方が無次元の場合には
91 ! エラーを発生させます.
92 !
94 implicit none
95 character(*), intent(in):: opr ! 演算子の名称
96 type(DC_DIFFTIME), intent(in):: diff1, diff2
97 type(DC_DIFFTIME), intent(inout):: rslt
98 continue
99 if ( ( diff1 % nondim_flag .and. .not. diff2 % nondim_flag ) &
100 & .or. ( .not. diff1 % nondim_flag .and. diff2 % nondim_flag ) ) then
101 call storeerror(dc_edimtime, opr)
102 end if
103 rslt % nondim_flag = diff1 % nondim_flag
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:830
integer, parameter, public dc_edimtime
Definition dc_error.f90:573

References dc_error::dc_edimtime, dc_error::storeerror(), dc_types::token, dc_date_types::unit_day, dc_date_types::unit_hour, dc_date_types::unit_min, dc_date_types::unit_month, dc_date_types::unit_nondim, dc_date_types::unit_sec, dc_date_types::unit_symbol_day, dc_date_types::unit_symbol_err, dc_date_types::unit_symbol_hour, dc_date_types::unit_symbol_min, dc_date_types::unit_symbol_month, dc_date_types::unit_symbol_nondim, dc_date_types::unit_symbol_sec, dc_date_types::unit_symbol_year, and dc_date_types::unit_year.

Here is the call graph for this function:

◆ dcdate_normalize()

subroutine, public dc_date_internal::dcdate_normalize ( type(dc_scaled_sec), intent(inout) day,
type(dc_scaled_sec), intent(inout) sec,
type(dc_scaled_sec), intent(in), optional day_seconds,
logical, intent(in) nondim_flag )

Definition at line 26 of file dc_date_internal.f90.

27 !
28 !=== 日と秒の正規化
29 !
30 ! このサブルーチンは内部向けなので dc_date モジュール外では
31 ! 極力使用しないでください.
32 !
33 ! 日付 *day* と秒数 *sec* の正規化を行います. *sec* が *day_seconds*
34 ! (省略される場合は dc_date_types#day_seconds) を超える場合, *day*
35 ! に繰上げを行います.
36 ! また, *sec* と *day* の符号が逆の場合, 同符号になるよう
37 ! 設定します.
38 !
39 use dc_date_types, only: &
41 use dc_scaledsec, only: dc_scaled_sec, &
42 & operator(<), operator(>), operator(<=), operator(>=), &
43 & operator(+), operator(-), operator(*), operator(/), &
44 & modulo, int, abs, sign
45 implicit none
46 type(DC_SCALED_SEC), intent(inout):: day
47 type(DC_SCALED_SEC), intent(inout):: sec
48 type(DC_SCALED_SEC), intent(in), optional:: day_seconds
49 logical, intent(in):: nondim_flag
50 type(DC_SCALED_SEC):: sgn, day_sec, zero_sec
51 continue
52 if ( nondim_flag ) return
53 if (present(day_seconds)) then
54 day_sec = day_seconds
55 else
56 if ( .not. flag_set_day_seconds_scl ) call dcdate_set_day_seconds_scl
57 day_sec = day_seconds_scl
58 end if
59 if (abs(sec) >= day_sec) then
60 day = day + int(sec / day_sec)
61 sec = modulo(sec, day_sec)
62 end if
63!! zero_sec = 0 (デフォルト値 = 0 を使用する).
64 if ( ( sec > zero_sec .and. day < zero_sec ) &
65 & .or. ( sec < zero_sec .and. day > zero_sec ) ) then
66 sgn = sign(day, 1)
67 day = day - sgn
68 sec = sec + sgn * day_sec
69 endif
real(dp), save, public day_seconds
type(dc_scaled_sec), save, public day_seconds_scl
logical, save, public flag_set_day_seconds_scl

References dc_date_types::day_seconds, dc_date_types::day_seconds_scl, dcdate_set_day_seconds_scl(), and dc_date_types::flag_set_day_seconds_scl.

Here is the call graph for this function:

◆ dcdate_parse_unit()

character(token) function, public dc_date_internal::dcdate_parse_unit ( character(*), intent(in) str)

Definition at line 207 of file dc_date_internal.f90.

208 !
209 ! このサブルーチンは内部向けなので dc_date モジュール外では
210 ! 極力使用しないでください.
211 !
212 ! 引数 *str* に与えられた文字列を解釈し, 日時の単位を
213 ! 返します. それぞれ以下の文字列が日時の単位として解釈されます.
214 ! 大文字と小文字は区別されません.
215 ! 返る文字列は以下の文字型の配列の先頭の文字列です.
216 ! (例: *str* に 'hrs.' が与えられる場合, dc_date_types#UNIT_HOUR
217 ! 配列の先頭の文字列 UNIT_HOUR(1) が返ります.)
218 !
219 ! 年 :: dc_date_types#UNIT_YEAR
220 ! 月 :: dc_date_types#UNIT_MONTH
221 ! 日 :: dc_date_types#UNIT_DAY
222 ! 時 :: dc_date_types#UNIT_HOUR
223 ! 分 :: dc_date_types#UNIT_MIN
224 ! 秒 :: dc_date_types#UNIT_SEC
225 ! 無次元時間 :: dc_date_types#UNIT_NONDIM
226 !
227 ! これらに該当しない文字列を *str* に与えた場合, 空文字が返ります.
228 !
229 use dc_types, only: token
232 use dc_string, only: strieq
233 implicit none
234 character(*), intent(in):: str
235 integer :: unit_str_size, i
236 continue
237 unit = adjustl(str)
238 unit_str_size = size(unit_nondim)
239 do i = 1, unit_str_size
240 if (strieq(trim(unit), trim(unit_nondim(i)))) then
241 unit = unit_nondim(1)
242 return
243 end if
244 end do
245
246 unit_str_size = size(unit_sec)
247 do i = 1, unit_str_size
248 if (strieq(trim(unit), trim(unit_sec(i)))) then
249 unit = unit_sec(1)
250 return
251 end if
252 end do
253
254 unit_str_size = size(unit_min)
255 do i = 1, unit_str_size
256 if (strieq(trim(unit), trim(unit_min(i)))) then
257 unit = unit_min(1)
258 return
259 end if
260 end do
261
262 unit_str_size = size(unit_hour)
263 do i = 1, unit_str_size
264 if (strieq(trim(unit), trim(unit_hour(i)))) then
265 unit = unit_hour(1)
266 return
267 end if
268 end do
269
270 unit_str_size = size(unit_day)
271 do i = 1, unit_str_size
272 if (strieq(trim(unit), trim(unit_day(i)))) then
273 unit = unit_day(1)
274 return
275 end if
276 end do
277
278 unit_str_size = size(unit_month)
279 do i = 1, unit_str_size
280 if (strieq(trim(unit), trim(unit_month(i)))) then
281 unit = unit_month(1)
282 return
283 end if
284 end do
285
286 unit_str_size = size(unit_year)
287 do i = 1, unit_str_size
288 if (strieq(trim(unit), trim(unit_year(i)))) then
289 unit = unit_year(1)
290 return
291 end if
292 end do
293
294 unit = ''
295
character(*), dimension(6), parameter, public unit_month
character(*), dimension(1), parameter, public unit_nondim
character(*), dimension(4), parameter, public unit_day
character(*), dimension(8), parameter, public unit_sec
character(*), dimension(8), parameter, public unit_hour
character(*), dimension(4), parameter, public unit_year
character(*), dimension(4), parameter, public unit_min
種別型パラメタを提供します。
Definition dc_types.f90:49
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition dc_types.f90:109

References dc_types::token, dc_date_types::unit_day, dc_date_types::unit_hour, dc_date_types::unit_min, dc_date_types::unit_month, dc_date_types::unit_nondim, dc_date_types::unit_sec, and dc_date_types::unit_year.

◆ dcdate_set_day_seconds_scl()

subroutine, public dc_date_internal::dcdate_set_day_seconds_scl