dc_calendar_internal.f90
Go to the documentation of this file.
1 != dc_calendar 内で使用される内部向け定数, 変数, 手続き群
2 != Internal parameters, variables, procedures used in "dc_calendar"
3 !
4 ! Authors:: Yasuhiro MORIKAWA
5 ! Version:: $Id: dc_calendar_internal.f90,v 1.7 2010-10-06 01:48:12 morikawa Exp $
6 ! Tag Name:: $Name: $
7 ! Copyright:: Copyright (C) GFD Dennou Club, 2009-. All rights reserved.
8 ! License:: See COPYRIGHT[link:../../COPYRIGHT]
9 
11  !
12  != dc_calendar 内で使用される内部向け定数, 変数, 手続き群
13  != Internal parameters, variables, procedures used in "dc_calendar"
14  !
15 
17  use dc_types, only: dp
18  implicit none
19  private
23 
24  type(dc_cal), save, target, public:: default_cal
25  ! デフォルトの暦.
26  !
27  ! DCCal で始まる手続のうち,
28  ! "dc_calendar_types#DC_CAL" 型の
29  ! 省略可能引数が与えられない場合にはこの暦
30  ! が設定もしくは利用される.
31  !
32 
33  type(dc_cal_date), save, target, public:: default_date
34  ! デフォルトの日時.
35  !
36  ! DCCalDate で始まる手続のうち,
37  ! "dc_calendar_types#DC_CAL_DATE" 型の
38  ! 省略可能引数が与えられない場合にはこの日時
39  ! が設定もしくは利用される.
40  !
41 
42 contains
43  subroutine default_cal_set
44  !
45  ! DCCal で始まる手続が呼び出され, "dc_calendar_types#DC_CAL" 型の
46  ! 引数に暦の設定が行われていない場合には, まずこの手続を呼び出して,
47  ! デフォルトの暦 "default_cal" をグレゴリオ暦として設定する.
48  !
49  ! 既に "default_cal" に暦が設定されている場合にはこの手続
50  ! 内でそれを判定して何もせずに手続を終了するため,
51  ! この手続は何度呼び出しても良く, 呼び出す側で状態の有無を
52  ! 確認する必要はない.
53  !
55  implicit none
56  type(dc_cal), pointer:: calp =>null()
57  continue
58  calp => default_cal
59 
60  if ( calp % initialized ) return
61 
62  calp % cal_type = cal_gregorian
63  calp % month_in_year = 12
64  calp % hour_in_day = 24
65  calp % min_in_hour = 60
66  calp % sec_in_min = 60.0_dp
67  allocate( calp % day_in_month(1:12) )
68  calp % day_in_month(1:12) = &
69  & (/ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 /)
70 
71  calp % initialized = .true.
72  nullify( calp )
73  end subroutine default_cal_set
74 
75 
76  function dccaldate_normalize( year, month, day, hour, min, sec, cal ) result(stat)
77  !
78  ! 暦情報 cal に従い, 日時情報の正規化を行う.
79  ! dc_calender モジュール内部で使用されることを前提とする.
80  ! 具体的には以下の場合に正規化を実施する.
81  !
82  ! * sec が cal で設定される「1 分の秒数」を超えている.
83  ! -> sec を「1 分の秒数」以内に納めるよう,年月日時分に繰り上げる.
84  ! * min が cal で設定される「1 時間の分数」を超えている.
85  ! -> min を「1 時間の分数」以内に納めるよう,年月日時に繰り上げる.
86  ! * hour が cal で設定される「1 日の時間数」を超えている.
87  ! -> hour を「1 日の時間数」以内に納めるよう,年月日に繰り上げる.
88  ! * day が cal で設定される「1 月の日数」を超えている.
89  ! -> day を「1 月の日数」以内に納めるよう,年月に繰り上げる.
90  !
91  ! * sec, min, hour, day が負の場合.
92  ! -> それぞれを正にするよう負の分を上の位に繰り上げる.
93  !
94  ! * day が 0 の場合.
95  ! -> 正にするよう上の位に繰り上げる.
96  !
97  ! 正常に正規化が行われれば stat には DC_NOERR (=0) が返るが,
98  ! 日時情報が暦と整合的でない場合にはエラーコード DC_EINCONSISTCALDATE
99  ! が返る. 整合的であるかどうかは以下で判定する.
100  !
101  ! * 月が, 暦情報に含まれる「1年の月数」を
102  ! 既に超えてしまっている場合
103  !
105  use dc_calendar_types, only: &
106  & cal_user_defined, &
108  implicit none
109  integer:: stat ! ステータス. Status.
110  integer, intent(inout):: year ! 年. Year.
111  integer, intent(inout):: month ! 月. Month.
112  integer, intent(inout):: day ! 日. Day.
113  integer, intent(inout):: hour ! 時. Hour.
114  integer, intent(inout):: min ! 分. Minute.
115  real(DP), intent(inout):: sec ! 秒. Sec.
116  type(dc_cal), intent(in):: cal
117  ! 暦情報を収めたオブジェクト.
118  !
119  ! An object that stores information of
120  ! calendar.
121 
122  ! 既定の暦での 1 ヶ月の日数
123  ! Days in months of previously-defined calendars
124  !
125  integer:: day_in_month_jg
126  integer, pointer:: day_in_month(:) =>null()
127 
128  ! 既定の暦での 1 日・時間・分の時間・分・秒数
129  ! Hours, minutes, seconds in a day, a hour, a minute of previously-defined calendars
130  !
131  integer:: month_in_year ! 1 日の時間数.
132  ! Hours in a day.
133  integer:: hour_in_day ! 1 日の時間数.
134  ! Hours in a day.
135  integer:: min_in_hour ! 1 時間の分数.
136  ! Minutes in a hour.
137  real(DP):: sec_in_min ! 1 分の秒数.
138  ! Seconds in a minute.
139 
140  ! 作業変数
141  ! Work variables
142  !
143  real(DP):: wyear, wday, whour, wmin
144  real(DP):: wdb, ychunk_e6, ychunk_e3, chunk_scale_e6, chunk_scale_e3
145  continue
146  stat = dc_noerr
147 
148  ! 日時と暦の整合性チェック
149  ! Check consistency calendar and date
150  !
151 !!$ if ( min > cal % min_in_hour ) stat = DC_EINCONSISTCALDATE
152 !!$ if ( hour > cal % hour_in_day ) stat = DC_EINCONSISTCALDATE
153 !!$ if ( all( day > cal % day_in_month) ) stat = DC_EINCONSISTCALDATE
154  select case( cal % cal_type )
155  case( cal_user_defined )
156  if ( month > cal % month_in_year ) stat = dc_einconsistcaldate
157  case default
158  if ( month > 12 ) stat = dc_einconsistcaldate
159  end select
160 
161  if ( stat /= dc_noerr ) return
162 
163  ! 秒〜日の変換パラメタ他の設定
164  ! Set parameter for conversion of sec -- day, etc
165  !
166  month_in_year = cal % month_in_year
167  hour_in_day = cal % hour_in_day
168  min_in_hour = cal % min_in_hour
169  sec_in_min = cal % sec_in_min
170  day_in_month => cal % day_in_month
171 
172  select case( cal % cal_type )
173  case( cal_julian )
174  chunk_scale_e6 = 4.0e+5
175  ychunk_e6 = 146100000.0_dp
176 
177  chunk_scale_e3 = 4.0e+2
178  ychunk_e3 = 146100.0_dp
179  case( cal_gregorian )
180  chunk_scale_e6 = 4.0e+5
181  ychunk_e6 = 146097000.0_dp
182 
183  chunk_scale_e3 = 4.0e+2
184  ychunk_e3 = 146097.0_dp
185  case default
186  chunk_scale_e6 = 1.0e+6
187  ychunk_e6 = chunk_scale_e6 * sum( day_in_month(:) )
188 
189  chunk_scale_e3 = 1.0e+3
190  ychunk_e3 = chunk_scale_e3 * sum( day_in_month(:) )
191  end select
192 
193  ! 倍精度実数に一時的に格納
194  ! Store in double precision variable temporally
195  !
196  wyear = real( year, dp )
197  wday = real( day, dp )
198  whour = real( hour, dp )
199  wmin = real( min, dp )
200 
201 
202  ! 秒 -> 分の繰り上げ
203  ! Moving up sec -> min
204  !
205  if ( .not. sec < sec_in_min ) then
206  wmin = wmin + aint( sec / sec_in_min )
207  sec = mod( sec, sec_in_min )
208  elseif ( sec < 0.0_dp ) then
209  wdb = ceiling( abs(sec) / sec_in_min )
210  wmin = wmin - wdb
211  sec = sec + wdb * sec_in_min
212  end if
213 
214  ! 分 -> 時の繰り上げ
215  ! Moving up min -> hour
216  !
217  if ( .not. wmin < min_in_hour ) then
218  whour = whour + aint( wmin / min_in_hour )
219  wmin = mod( wmin, real( min_in_hour, DP ) )
220  elseif ( wmin < 0 ) then
221  wdb = ceiling( abs(wmin) / real(min_in_hour) )
222  whour = whour - wdb
223  wmin = wmin + wdb * min_in_hour
224  end if
225 
226  ! 時 -> 日の繰り上げ
227  ! Moving up hour -> day
228  !
229  if ( .not. whour < hour_in_day ) then
230  wday = wday + aint( whour / hour_in_day )
231  whour = mod( whour, real( hour_in_day, DP ) )
232  elseif ( whour < 0 ) then
233  wdb = ceiling( abs(whour) / real(hour_in_day) )
234  wday = wday - wdb
235  whour = whour + wdb * hour_in_day
236  end if
237 
238  ! 日が負もしくは 0 の場合,負の部分を年に繰り上げ,日を正に変換
239  ! Negative or 0 part of day is moved up to year
240  !
241  if ( wday < 1.0_dp ) then
242  select case( cal % cal_type )
243  case( cal_julian )
244 
245  do while ( wday < 1.0_dp )
246 
247  if ( wday < - ychunk_e6 ) then
248  wyear = wyear + chunk_scale_e6 * ( aint( wday / ychunk_e6 ) - 1.0_dp )
249  wday = mod( wday, ychunk_e6 ) + ychunk_e6
250  end if
251 
252  if ( wday < 1.0_dp ) then
253  wyear = wyear + chunk_scale_e3 * ( aint( wday / ychunk_e3 ) - 1.0_dp )
254  wday = mod( wday, ychunk_e3 ) + ychunk_e3
255  end if
256 
257  end do
258 
259  case( cal_gregorian )
260 
261  do while ( wday < 1.0_dp )
262 
263  if ( wday < - ychunk_e6 ) then
264  wyear = wyear + chunk_scale_e6 * ( aint( wday / ychunk_e6 ) - 1.0_dp )
265  wday = mod( wday, ychunk_e6 ) + ychunk_e6
266  end if
267 
268  if ( wday < 1.0_dp ) then
269  wyear = wyear + chunk_scale_e3 * ( aint( wday / ychunk_e3 ) - 1.0_dp )
270  wday = mod( wday, ychunk_e3 ) + ychunk_e3
271  end if
272 
273  end do
274 
275  case default
276 
277  do while ( wday < 1.0_dp )
278 
279  if ( wday < - ychunk_e6 ) then
280  wyear = wyear + chunk_scale_e6 * ( aint( wday / ychunk_e6 ) - 1.0_dp )
281  wday = mod( wday, ychunk_e6 ) + ychunk_e6
282  end if
283 
284  if ( wday < 1.0_dp ) then
285  wyear = wyear + chunk_scale_e3 * ( aint( wday / ychunk_e3 ) - 1.0_dp )
286  wday = mod( wday, ychunk_e3 ) + ychunk_e3
287  end if
288 
289  end do
290 
291  end select
292 
293  end if
294 
295  ! 日 -> 年月の繰り上げ
296  ! Moving up day -> year and month
297  !
298  select case( cal % cal_type )
299  case( cal_julian )
300 
301  if ( wday > ychunk_e6 ) then
302  wyear = wyear + chunk_scale_e6 * aint( wday / ychunk_e6 )
303  wday = mod( wday, ychunk_e6 )
304  end if
305 
306  if ( wday > ychunk_e3 ) then
307  wyear = wyear + chunk_scale_e3 * aint( wday / ychunk_e3 )
308  wday = mod( wday, ychunk_e3 )
309  end if
310 
311  do
312  if ( month == 2 ) then
313  if ( mod( wyear, 4.0_dp ) == 0 ) then
314  day_in_month_jg = 29
315  else
316  day_in_month_jg = 28
317  end if
318  else
319  day_in_month_jg = day_in_month(month)
320  end if
321 
322  if ( .not. wday > day_in_month_jg ) exit
323 
324  wday = wday - day_in_month_jg
325  month = month + 1
326  if ( month > month_in_year ) then
327  month = 1
328  wyear = wyear + 1
329  end if
330  end do
331 
332  case( cal_gregorian )
333 
334  if ( wday > ychunk_e6 ) then
335  wyear = wyear + chunk_scale_e6 * aint( wday / ychunk_e6 )
336  wday = mod( wday, ychunk_e6 )
337  end if
338 
339  if ( wday > ychunk_e3 ) then
340  wyear = wyear + chunk_scale_e3 * aint( wday / ychunk_e3 )
341  wday = mod( wday, ychunk_e3 )
342  end if
343 
344  do
345  if ( month == 2 ) then
346  if ( mod( wyear, 400.0_dp ) == 0 ) then
347  day_in_month_jg = 29
348  elseif ( mod( wyear, 100.0_dp ) == 0 ) then
349  day_in_month_jg = 28
350  elseif ( mod( wyear, 4.0_dp ) == 0 ) then
351  day_in_month_jg = 29
352  else
353  day_in_month_jg = 28
354  end if
355  else
356  day_in_month_jg = day_in_month(month)
357  end if
358 
359  if ( .not. wday > day_in_month_jg ) exit
360 
361  wday = wday - day_in_month_jg
362  month = month + 1
363  if ( month > month_in_year ) then
364  month = 1
365  wyear = wyear + 1
366  end if
367  end do
368 
369  case default
370 
371  if ( wday > ychunk_e6 ) then
372  wyear = wyear + chunk_scale_e6 * aint( wday / ychunk_e6 )
373  wday = mod( wday, ychunk_e6 )
374  end if
375 
376  if ( wday > ychunk_e3 ) then
377  wyear = wyear + chunk_scale_e3 * aint( wday / ychunk_e3 )
378  wday = mod( wday, ychunk_e3 )
379  end if
380 
381  do while ( wday > day_in_month(month) )
382  wday = wday - day_in_month(month)
383  month = month + 1
384  if ( month > month_in_year ) then
385  month = 1
386  wyear = wyear + 1
387  end if
388  end do
389 
390  end select
391 
392  ! 整数に戻す
393  ! Return to integer
394  !
395  year = wyear
396  day = wday
397  hour = whour
398  min = wmin
399 
400  end function dccaldate_normalize
401 
402  function dccaldate_ym2d( year, month, day, cal, day_of_year ) result(stat)
403  !
404  ! 暦情報 cal に従い, 月日をその年が始まった時からの通日に変換する.
405  ! 結果は倍精度実数として *day_of_year* に返る.
406  ! dccaldate_normalize によって正規化した後に呼び出すこと.
407  !
409  use dc_calendar_types, only: &
410  & cal_user_defined, &
412  implicit none
413  integer:: stat ! ステータス. Status.
414  integer, intent(in):: year ! 年. Year.
415  integer, intent(in):: month ! 月. Month.
416  integer, intent(in):: day ! 日. Day.
417  real(DP), intent(out):: day_of_year ! 年始からの通日. Day of year
418  type(dc_cal), intent(in):: cal
419  ! 暦情報を収めたオブジェクト.
420  !
421  ! An object that stores information of
422  ! calendar.
423 
424  ! 作業変数
425  ! Work variables
426  !
427  integer:: i
428 
429  continue
430  stat = dc_noerr
431 
432  ! 日時と暦の整合性チェック
433  ! Check consistency calendar and date
434  !
435 !!$ if ( min > cal % min_in_hour ) stat = DC_EINCONSISTCALDATE
436 !!$ if ( hour > cal % hour_in_day ) stat = DC_EINCONSISTCALDATE
437 !!$ if ( all( day > cal % day_in_month) ) stat = DC_EINCONSISTCALDATE
438  select case( cal % cal_type )
439  case( cal_user_defined )
440  if ( month > cal % month_in_year ) stat = dc_einconsistcaldate
441  case default
442  if ( month > 12 ) stat = dc_einconsistcaldate
443  end select
444 
445  if ( stat /= dc_noerr ) return
446 
447  ! 倍精度実数に一時的に格納
448  ! Store in double precision variable temporally
449  !
450  day_of_year = real( day, dp )
451 
452  ! 年月 -> 日 の繰り下げ
453  ! Moving doun year and month -> day
454  !
455  select case( cal % cal_type )
456  case( cal_julian )
457 
458  do i = 1, month - 1
459  if ( i == 2 ) then
460  if ( mod( year, 4 ) == 0 ) then
461  day_of_year = day_of_year + 29
462  else
463  day_of_year = day_of_year + 28
464  end if
465  else
466  day_of_year = day_of_year + cal % day_in_month(i)
467  end if
468  end do
469 
470  case( cal_gregorian )
471 
472  do i = 1, month - 1
473  if ( i == 2 ) then
474  if ( mod( year, 400 ) == 0 ) then
475  day_of_year = day_of_year + 29
476  elseif ( mod( year, 100 ) == 0 ) then
477  day_of_year = day_of_year + 28
478  elseif ( mod( year, 4 ) == 0 ) then
479  day_of_year = day_of_year + 29
480  else
481  day_of_year = day_of_year + 28
482  end if
483  else
484  day_of_year = day_of_year + cal % day_in_month(i)
485  end if
486 
487  end do
488 
489  case default
490 
491  do i = 1, month - 1
492  day_of_year = day_of_year + cal % day_in_month(i)
493  end do
494 
495  end select
496 
497  end function dccaldate_ym2d
498 
499 
500  function dccaltype_str( cal_type ) result(str)
501  !
502  ! 整数型の暦タイプ *cal_type* を文字列 *str* に変換する.
503  ! 不正な *cal_type* の場合は空文字が返る.
504  !
505  use dc_calendar_types, only: &
506  & cal_user_defined, &
508  use dc_types, only: token
509  implicit none
510  character(TOKEN):: str
511  integer, intent(in):: cal_type
512 
513  ! 作業変数
514  ! Work variables
515  !
516  continue
517  select case( cal_type )
518  case(cal_user_defined) ; str = 'user_defined'
519  case(cal_cyclic) ; str = 'cyclic '
520  case(cal_noleap) ; str = 'noleap '
521  case(cal_julian) ; str = 'julian '
522  case(cal_gregorian) ; str = 'gregorian '
523  case(cal_360day) ; str = '360day '
524  case default ; str = ' '
525  end select
526  end function dccaltype_str
527 
528 
529  function dccaldate_str2ustr(str) result(unit)
530  !
531  ! 引数 *str* に与えられた文字列を解釈し, 日時の単位を *unit* に返す.
532  ! それぞれ以下の文字列が日時の単位として解釈される.
533  ! 大文字と小文字は区別されない.
534  ! 返る文字列は以下の文字型の配列の先頭の文字列となる.
535  ! (例: *str* に 'hrs.' が与えられる場合, dc_calendar_types#UNIT_HOUR
536  ! 配列の先頭の文字列 UNIT_HOUR(1) が返る.)
537  !
538  ! 年 :: dc_calendar_types#UNIT_YEAR
539  ! 月 :: dc_calendar_types#UNIT_MONTH
540  ! 日 :: dc_calendar_types#UNIT_DAY
541  ! 時 :: dc_calendar_types#UNIT_HOUR
542  ! 分 :: dc_calendar_types#UNIT_MIN
543  ! 秒 :: dc_calendar_types#UNIT_SEC
544  !
545  ! これらに該当しない文字列を *str* に与えた場合, 空文字が返る.
546  !
547  use dc_types, only: token
550  use dc_string, only: strieq
551  implicit none
552  character(*), intent(in):: str
553  character(TOKEN):: unit
554  integer :: unit_str_size, i
555  continue
556  unit = adjustl(str)
557 
558  unit_str_size = size(unit_sec)
559  do i = 1, unit_str_size
560  if (strieq(trim(unit), trim(unit_sec(i)))) then
561  unit = unit_sec(1)
562  return
563  end if
564  end do
565 
566  unit_str_size = size(unit_min)
567  do i = 1, unit_str_size
568  if (strieq(trim(unit), trim(unit_min(i)))) then
569  unit = unit_min(1)
570  return
571  end if
572  end do
573 
574  unit_str_size = size(unit_hour)
575  do i = 1, unit_str_size
576  if (strieq(trim(unit), trim(unit_hour(i)))) then
577  unit = unit_hour(1)
578  return
579  end if
580  end do
581 
582  unit_str_size = size(unit_day)
583  do i = 1, unit_str_size
584  if (strieq(trim(unit), trim(unit_day(i)))) then
585  unit = unit_day(1)
586  return
587  end if
588  end do
589 
590  unit_str_size = size(unit_month)
591  do i = 1, unit_str_size
592  if (strieq(trim(unit), trim(unit_month(i)))) then
593  unit = unit_month(1)
594  return
595  end if
596  end do
597 
598  unit_str_size = size(unit_year)
599  do i = 1, unit_str_size
600  if (strieq(trim(unit), trim(unit_year(i)))) then
601  unit = unit_year(1)
602  return
603  end if
604  end do
605 
606  unit = ''
607 
608  end function dccaldate_str2ustr
609 
610  function dccaldate_str2usym(str) result(symbol)
611  !
612  ! 引数 *str* に与えられた文字列を解釈し, 日時の単位を示す
613  ! 整数 *symbol* を返す. それぞれ以下の文字列が日時の単位として解釈する.
614  ! 大文字と小文字は区別しない.
615  !
616  ! 年 :: dc_calendar_types#UNIT_YEAR
617  ! 月 :: dc_calendar_types#UNIT_MONTH
618  ! 日 :: dc_calendar_types#UNIT_DAY
619  ! 時 :: dc_calendar_types#UNIT_HOUR
620  ! 分 :: dc_calendar_types#UNIT_MIN
621  ! 秒 :: dc_calendar_types#UNIT_SEC
622  !
623  ! 返るシンボル (整数型) は以下の通り.
624  !
625  ! 年 :: dc_calendar_types#UNIT_SYMBOL_YEAR
626  ! 月 :: dc_calendar_types#UNIT_SYMBOL_MONTH
627  ! 日 :: dc_calendar_types#UNIT_SYMBOL_DAY
628  ! 時 :: dc_calendar_types#UNIT_SYMBOL_HOUR
629  ! 分 :: dc_calendar_types#UNIT_SYMBOL_MIN
630  ! 秒 :: dc_calendar_types#UNIT_SYMBOL_SEC
631  !
632  ! これらに該当しない文字列を *str* に与えた場合,
633  ! dc_calendar_types#UNIT_SYMBOL_ERR が返る.
634  !
635  use dc_types, only: token
641  use dc_string, only: strieq
642  implicit none
643  character(*), intent(in):: str
644  integer:: symbol
645  integer:: unit_str_size, i
646  character(TOKEN):: unit
647  continue
648  unit = adjustl(str)
649 
650  unit_str_size = size(unit_sec)
651  do i = 1, unit_str_size
652  if (strieq(trim(unit), trim(unit_sec(i)))) then
653  symbol = unit_symbol_sec
654  return
655  end if
656  end do
657 
658  unit_str_size = size(unit_min)
659  do i = 1, unit_str_size
660  if (strieq(trim(unit), trim(unit_min(i)))) then
661  symbol = unit_symbol_min
662  return
663  end if
664  end do
665 
666  unit_str_size = size(unit_hour)
667  do i = 1, unit_str_size
668  if (strieq(trim(unit), trim(unit_hour(i)))) then
669  symbol = unit_symbol_hour
670  return
671  end if
672  end do
673 
674  unit_str_size = size(unit_day)
675  do i = 1, unit_str_size
676  if (strieq(trim(unit), trim(unit_day(i)))) then
677  symbol = unit_symbol_day
678  return
679  end if
680  end do
681 
682  unit_str_size = size(unit_month)
683  do i = 1, unit_str_size
684  if (strieq(trim(unit), trim(unit_month(i)))) then
685  symbol = unit_symbol_month
686  return
687  end if
688  end do
689 
690  unit_str_size = size(unit_year)
691  do i = 1, unit_str_size
692  if (strieq(trim(unit), trim(unit_year(i)))) then
693  symbol = unit_symbol_year
694  return
695  end if
696  end do
697 
698  symbol = unit_symbol_err
699 
700  end function dccaldate_str2usym
701 
702 end module dc_calendar_internal
integer, parameter, public cal_gregorian
integer, parameter, public unit_symbol_hour
character(*), dimension(4), parameter, public unit_year
integer, parameter, public cal_julian
integer, parameter, public unit_symbol_month
character(*), dimension(8), parameter, public unit_sec
integer, parameter, public cal_user_defined
integer, parameter, public cal_noleap
character(*), dimension(4), parameter, public unit_day
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition: dc_types.f90:109
type(dc_cal), target, save, public default_cal
character(token) function, public dccaltype_str(cal_type)
character(*), dimension(4), parameter, public unit_min
integer, parameter, public unit_symbol_year
integer, parameter, public dc_noerr
Definition: dc_error.f90:509
integer function, public dccaldate_ym2d(year, month, day, cal, day_of_year)
integer, parameter, public unit_symbol_day
integer function, public dccaldate_normalize(year, month, day, hour, min, sec, cal)
character(token) function, public dccaldate_str2ustr(str)
integer, parameter, public cal_360day
type(dc_cal_date), target, save, public default_date
integer, parameter, public dp
倍精度実数型変数
Definition: dc_types.f90:83
integer, parameter, public dc_einconsistcaldate
Definition: dc_error.f90:576
文字型変数の操作.
Definition: dc_string.f90:24
種別型パラメタを提供します。
Definition: dc_types.f90:49
integer, parameter, public unit_symbol_err
integer, parameter, public cal_cyclic
integer, parameter, public unit_symbol_min
integer function, public dccaldate_str2usym(str)
subroutine, public default_cal_set
integer, parameter, public unit_symbol_sec
character(*), dimension(6), parameter, public unit_month
character(*), dimension(8), parameter, public unit_hour