Loading...
Searching...
No Matches
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
42contains
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: &
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: &
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: &
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
702end module dc_calendar_internal
type(dc_cal), target, save, public default_cal
type(dc_cal_date), target, save, public default_date
integer function, public dccaldate_normalize(year, month, day, hour, min, sec, cal)
integer function, public dccaldate_ym2d(year, month, day, cal, day_of_year)
character(token) function, public dccaldate_str2ustr(str)
character(token) function, public dccaltype_str(cal_type)
subroutine, public default_cal_set
integer function, public dccaldate_str2usym(str)
integer, parameter, public cal_user_defined
integer, parameter, public cal_julian
character(*), dimension(6), parameter, public unit_month
integer, parameter, public unit_symbol_sec
character(*), dimension(4), parameter, public unit_year
character(*), dimension(8), parameter, public unit_hour
integer, parameter, public cal_gregorian
character(*), dimension(8), parameter, public unit_sec
integer, parameter, public unit_symbol_month
integer, parameter, public unit_symbol_year
integer, parameter, public unit_symbol_hour
integer, parameter, public unit_symbol_day
integer, parameter, public unit_symbol_min
character(*), dimension(4), parameter, public unit_day
character(*), dimension(4), parameter, public unit_min
integer, parameter, public unit_symbol_err
integer, parameter, public cal_360day
integer, parameter, public cal_noleap
integer, parameter, public cal_cyclic
integer, parameter, public dc_noerr
Definition dc_error.f90:509
integer, parameter, public dc_einconsistcaldate
Definition dc_error.f90:576
種別型パラメタを提供します。
Definition dc_types.f90:49
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
Definition dc_types.f90:109
integer, parameter, public dp
倍精度実数型変数
Definition dc_types.f90:83