実際のコーディングは, 西澤, 高橋, ... あたりでできる人が行うことになるだろう.
program main
real(DP):: TimeB, TimeN, TimeA type(...):: CalendarInfo ! case 1: call SetCalendar( CalendarInfo, 'Gregorian' ) ! case 2: CalendarInfo % SecOfYear = ... call SetCalendar( CalendarInfo, Year, Day, .true./.false., ... ) ! CalendarInfo に ! * 年の長さ (day?, sec?) ! * 日の長さ (sec) ! * leap year or not ! * Time = 0.0d0 はいつか? (Year?, Day of year? sec of year?) ! を設定 read( ??, namelist ) ! namelist を読んで, 開始時刻, 終了時刻 (年月日秒?) もしくは積分時間を取り出す. ! リスタート時 call GetCalendarFromFile( CalendarInfo, RestartFileName ) ! InitTime = Date2Sec( CalendarInfo, InitYYYY, InitMM, InitDD, InitSS ) ! 開始時刻 (年月日秒?) を秒に変換. ! 開始時刻はリスタートファイルから取得することになるのかな. ! ほんとの最初の計算は InitTime = 0.0d0 で良いが. EndTime = Date2Sec( CalendarInfo, EndYYYY, EndMM, EndDD, EndSS ) ! 終了時刻 (年月日秒?) を秒に変換. EndTime = InitTime + <積分時間 (sec)> ! 積分時間 (sec) を持っているとき. EndTime = InitTime + Year2Sec(CalendarInfo, <積分時間 (year)>) ! 積分時間 (year) を持っているとき. EndTime = InitTime + Day2Sec(CalendarInfo, <積分時間 (day)>) ! 積分時間 (day) を持っているとき. time_loop: do while( EndTime < TimeN ? B? ) TimeA = TimeN + Dt ! 各種演算 SecOfYear = XXX( CalendarInfo, TimeN ) ! TimeN の時刻の second of year DayOfYear = XXX( CalendarInfo, TimeN ) ! TimeN の時刻の day of year FlagLeapYear = XXX( CalendarInfo, TimeN ) ! TimeN は leap year かどうか? ! 各種演算 call HistoryPut( CalendarInfo, TimeN, xyz_Temp ) ! or call HistoryPut( TimeN, xyz_Temp, CalendarInfo ) TimeB = TimeN TimeN = TimeA end do time_loop
end program main