gtool5 Fortran 90/95 ライブラリ 1.0.0-rc5
English
Loading...
Searching...
No Matches
Functions/Subroutines
dc_date_internal Module Reference

dc_date用の内部モジュール More...

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)
 

Detailed Description

dc_date用の内部モジュール

Author
Yasuhiro MORIKAWA, Eizi TOYODA

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 
)

次元の整合性をチェックします

diff1 と diff2 が両方とも有次元もしくは無次元かをチェックし, 両方が同じであれば, その結果を rslt に適用します. 2つの引数で片方が有次元, もう片方が無次元の場合には エラーを発生させます.

このサブルーチンは内部向けなので dc_date モジュール外では 極力使用しないでください.

Parameters
[in]opr演算子の名称
[in]diff1第1オペランド
[in]diff2第2オペランド
[in,out]rslt結果オペランド

Definition at line 186 of file dc_date_internal.f90.

188 implicit none
189 character(*), intent(in):: opr
190 type(DC_DIFFTIME), intent(in):: diff1, diff2
191 type(DC_DIFFTIME), intent(inout):: rslt
192 continue
193 if ( ( diff1 % nondim_flag .and. .not. diff2 % nondim_flag ) &
194 & .or. ( .not. diff1 % nondim_flag .and. diff2 % nondim_flag ) ) then
195 call storeerror(dc_edimtime, opr)
196 end if
197 rslt % nondim_flag = diff1 % nondim_flag
エラー処理用モジュール
Definition dc_error.f90:454
subroutine, public storeerror(number, where, err, cause_c, cause_i)
Definition dc_error.f90:891
integer, parameter, public dc_edimtime
Definition dc_error.f90:550

References dc_error::dc_edimtime, and dc_error::storeerror().

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 
)

日と秒の正規化を行います

日付 day と秒数 sec の正規化を行います. sec が day_seconds を超える場合, day に繰上げを行います. また, sec と day の符号が逆の場合, 同符号になるよう設定します.

このサブルーチンは内部向けなので dc_date モジュール外では 極力使用しないでください.

Parameters
[in,out]day
[in,out]sec
[in]day_seconds1日の秒数 (オプション)
[in]nondim_flag無次元フラグ

Definition at line 93 of file dc_date_internal.f90.

94 use dc_date_types, only: &
96 use dc_scaledsec, only: dc_scaled_sec, &
97 & operator(<), operator(>), operator(<=), operator(>=), &
98 & operator(+), operator(-), operator(*), operator(/), &
99 & modulo, int, abs, sign
100 implicit none
101 type(DC_SCALED_SEC), intent(inout):: day
102 type(DC_SCALED_SEC), intent(inout):: sec
103 type(DC_SCALED_SEC), intent(in), optional:: day_seconds
104 logical, intent(in):: nondim_flag
105 type(DC_SCALED_SEC):: sgn, day_sec, zero_sec
106 continue
107 if ( nondim_flag ) return
108 if (present(day_seconds)) then
109 day_sec = day_seconds
110 else
111 if ( .not. flag_set_day_seconds_scl ) call dcdate_set_day_seconds_scl
112 day_sec = day_seconds_scl
113 end if
114 if (abs(sec) >= day_sec) then
115 day = day + int(sec / day_sec)
116 sec = modulo(sec, day_sec)
117 end if
118!! zero_sec = 0 (デフォルト値 = 0 を使用する).
119 if ( ( sec > zero_sec .and. day < zero_sec ) &
120 & .or. ( sec < zero_sec .and. day > zero_sec ) ) then
121 sgn = sign(day, 1)
122 day = day - sgn
123 sec = sec + sgn * day_sec
124 endif
日付・時刻に関する構造データ型と定数
real(dp), save, public day_seconds
1日の秒数 (可変, デフォルトは地球の1日)
type(dc_scaled_sec), save, public day_seconds_scl
1日の秒数 (DC_SCALED_SEC 型)
logical, save, public flag_set_day_seconds_scl
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)

時間単位文字列を解析しシンボルを返します

引数 str に与えられた文字列を解釈し, 日時の単位を示す シンボルを返します. 以下の文字列が日時の単位として解釈されます. 大文字と小文字は区別されません.

単位 シンボル定数
UNIT_SYMBOL_YEAR
UNIT_SYMBOL_MONTH
UNIT_SYMBOL_DAY
UNIT_SYMBOL_HOUR
UNIT_SYMBOL_MIN
UNIT_SYMBOL_SEC
無次元時間 UNIT_SYMBOL_NONDIM

これらに該当しない文字列を str に与えた場合, UNIT_SYMBOL_ERR が返ります.

Parameters
[in]str入力単位文字列
Returns
単位シンボル (整数)

時間単位文字列を解析し単位文字列を返します

引数 str に与えられた文字列を解釈し, 日時の単位を返します. 大文字と小文字は区別されません. 返る文字列は単位配列の先頭の文字列です. 該当しない文字列の場合は空文字が返ります.

この関数は内部向けなので dc_date モジュール外では 極力使用しないでください.

Parameters
[in]str入力単位文字列
Returns
標準化された単位文字列

Definition at line 277 of file dc_date_internal.f90.

278 use dc_types, only: token
281 use dc_string, only: strieq
282 implicit none
283 character(*), intent(in):: str
284 integer :: unit_str_size, i
285 continue
286 unit = adjustl(str)
287 unit_str_size = size(unit_nondim)
288 do i = 1, unit_str_size
289 if (strieq(trim(unit), trim(unit_nondim(i)))) then
290 unit = unit_nondim(1)
291 return
292 end if
293 end do
294
295 unit_str_size = size(unit_sec)
296 do i = 1, unit_str_size
297 if (strieq(trim(unit), trim(unit_sec(i)))) then
298 unit = unit_sec(1)
299 return
300 end if
301 end do
302
303 unit_str_size = size(unit_min)
304 do i = 1, unit_str_size
305 if (strieq(trim(unit), trim(unit_min(i)))) then
306 unit = unit_min(1)
307 return
308 end if
309 end do
310
311 unit_str_size = size(unit_hour)
312 do i = 1, unit_str_size
313 if (strieq(trim(unit), trim(unit_hour(i)))) then
314 unit = unit_hour(1)
315 return
316 end if
317 end do
318
319 unit_str_size = size(unit_day)
320 do i = 1, unit_str_size
321 if (strieq(trim(unit), trim(unit_day(i)))) then
322 unit = unit_day(1)
323 return
324 end if
325 end do
326
327 unit_str_size = size(unit_month)
328 do i = 1, unit_str_size
329 if (strieq(trim(unit), trim(unit_month(i)))) then
330 unit = unit_month(1)
331 return
332 end if
333 end do
334
335 unit_str_size = size(unit_year)
336 do i = 1, unit_str_size
337 if (strieq(trim(unit), trim(unit_year(i)))) then
338 unit = unit_year(1)
339 return
340 end if
341 end do
342
343 unit = ''
344
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_string.f90:83
種別型パラメタを提供します。
Definition dc_types.f90:55
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition dc_types.f90:128

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

日のスケーリング秒数を設定します

day_seconds_scl のスケーリング秒数値を設定します.

Definition at line 140 of file dc_date_internal.f90.

141 use dc_scaledsec, only: dc_scaled_sec, assignment(=)
142 use dc_date_types, only: day_seconds, &
144 continue
145 if ( .not. flag_set_day_seconds_scl ) then
148 end if

References dc_date_types::day_seconds, dc_date_types::day_seconds_scl, and dc_date_types::flag_set_day_seconds_scl.