56     type(
dc_cal), 
pointer:: calp =>null()
    60     if ( calp % initialized ) 
return    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 /)
    71     calp % initialized = .true.
   110     integer, 
intent(inout):: year       
   111     integer, 
intent(inout):: month      
   112     integer, 
intent(inout):: day        
   113     integer, 
intent(inout):: hour       
   114     integer, 
intent(inout):: min        
   115     real(DP), 
intent(inout):: sec       
   116     type(
dc_cal), 
intent(in):: cal
   125     integer:: day_in_month_jg
   126     integer, 
pointer:: day_in_month(:) =>null()
   131     integer:: month_in_year   
   133     integer:: hour_in_day     
   135     integer:: min_in_hour     
   137     real(DP):: sec_in_min     
   143     real(DP):: wyear, wday, whour, wmin
   144     real(DP):: wdb, ychunk_e6, ychunk_e3, chunk_scale_e6, chunk_scale_e3
   154     select case( cal % cal_type )
   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
   172     select case( cal % cal_type )
   174       chunk_scale_e6 = 4.0e+5
   175       ychunk_e6 = 146100000.0_dp
   177       chunk_scale_e3 = 4.0e+2
   178       ychunk_e3 = 146100.0_dp
   180       chunk_scale_e6 = 4.0e+5
   181       ychunk_e6 = 146097000.0_dp
   183       chunk_scale_e3 = 4.0e+2
   184       ychunk_e3 = 146097.0_dp
   186       chunk_scale_e6 = 1.0e+6
   187       ychunk_e6 = chunk_scale_e6 * sum( day_in_month(:) )
   189       chunk_scale_e3 = 1.0e+3
   190       ychunk_e3 = chunk_scale_e3 * sum( day_in_month(:) )
   196     wyear  = 
real( year, 
dp )
   197     wday   = 
real( day, 
dp )
   198     whour  = 
real( hour, 
dp )
   199     wmin   = 
real( min, 
dp )
   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 )
   211       sec = sec + wdb * sec_in_min
   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) )
   223       wmin = wmin + wdb * min_in_hour
   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) )
   235       whour = whour + wdb * hour_in_day
   241     if ( wday < 1.0_dp ) 
then   242       select case( cal % cal_type )
   245         do while ( wday < 1.0_dp )
   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
   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
   261         do while ( wday < 1.0_dp )
   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
   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
   277         do while ( wday < 1.0_dp )
   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
   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
   298     select case( cal % cal_type )
   301       if ( wday > ychunk_e6 ) 
then   302         wyear = wyear + chunk_scale_e6 * aint( wday / ychunk_e6 )
   303         wday = mod( wday, ychunk_e6 )
   306       if ( wday > ychunk_e3 ) 
then   307         wyear = wyear + chunk_scale_e3 * aint( wday / ychunk_e3 )
   308         wday = mod( wday, ychunk_e3 )
   312         if ( month == 2 ) 
then   313           if ( mod( wyear, 4.0_dp ) == 0 ) 
then   319           day_in_month_jg = day_in_month(month)
   322         if ( .not. wday > day_in_month_jg ) 
exit   324         wday = wday - day_in_month_jg
   326         if ( month > month_in_year ) 
then   334       if ( wday > ychunk_e6 ) 
then   335         wyear = wyear + chunk_scale_e6 * aint( wday / ychunk_e6 )
   336         wday = mod( wday, ychunk_e6 )
   339       if ( wday > ychunk_e3 ) 
then   340         wyear = wyear + chunk_scale_e3 * aint( wday / ychunk_e3 )
   341         wday = mod( wday, ychunk_e3 )
   345         if ( month == 2 ) 
then   346           if ( mod( wyear, 400.0_dp ) == 0 ) 
then   348           elseif ( mod( wyear, 100.0_dp ) == 0 ) 
then   350           elseif ( mod( wyear, 4.0_dp ) == 0 ) 
then   356           day_in_month_jg = day_in_month(month)
   359         if ( .not. wday > day_in_month_jg ) 
exit   361         wday = wday - day_in_month_jg
   363         if ( month > month_in_year ) 
then   371       if ( wday > ychunk_e6 ) 
then   372         wyear = wyear + chunk_scale_e6 * aint( wday / ychunk_e6 )
   373         wday = mod( wday, ychunk_e6 )
   376       if ( wday > ychunk_e3 ) 
then   377         wyear = wyear + chunk_scale_e3 * aint( wday / ychunk_e3 )
   378         wday = mod( wday, ychunk_e3 )
   381       do while ( wday > day_in_month(month) )
   382         wday = wday - day_in_month(month)
   384         if ( month > month_in_year ) 
then   402   function dccaldate_ym2d( year, month, day, cal, day_of_year ) 
result(stat)
   414     integer, 
intent(in):: year          
   415     integer, 
intent(in):: month         
   416     integer, 
intent(in):: day           
   417     real(DP), 
intent(out):: day_of_year 
   418     type(
dc_cal), 
intent(in):: cal
   438     select case( cal % cal_type )
   450     day_of_year  = 
real( day, 
dp )
   455     select case( cal % cal_type )
   460           if ( mod( year, 4 ) == 0 ) 
then   461             day_of_year = day_of_year + 29
   463             day_of_year = day_of_year + 28
   466           day_of_year = day_of_year + cal % day_in_month(i)
   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
   481             day_of_year = day_of_year + 28
   484           day_of_year = day_of_year + cal % day_in_month(i)
   492         day_of_year = day_of_year + cal % day_in_month(i)
   510     character(TOKEN):: str
   511     integer, 
intent(in):: cal_type
   517     select case( cal_type )
   524     case default           ; str = 
'            '   552     character(*), 
intent(in):: str
   553     character(TOKEN):: unit
   554     integer :: unit_str_size, i
   559     do i = 1, unit_str_size
   567     do i = 1, unit_str_size
   575     do i = 1, unit_str_size
   583     do i = 1, unit_str_size
   591     do i = 1, unit_str_size
   599     do i = 1, unit_str_size
   643     character(*), 
intent(in):: str
   645     integer:: unit_str_size, i
   646     character(TOKEN):: unit
   651     do i = 1, unit_str_size
   659     do i = 1, unit_str_size
   667     do i = 1, unit_str_size
   675     do i = 1, unit_str_size
   683     do i = 1, unit_str_size
   691     do i = 1, unit_str_size
 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
単語やキーワードを保持する文字型変数の種別型パラメタ 
 
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
 
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
倍精度実数型変数 
 
integer, parameter, public dc_einconsistcaldate
 
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