Skip to content

Commit

Permalink
add seconds per day parameters to get_cal_time
Browse files Browse the repository at this point in the history
  • Loading branch information
rem1776 authored and rem1776 committed Sep 19, 2023
1 parent 045018e commit 9fb1a62
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions time_manager/get_cal_time.F90
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ function get_calendar_time(time_increment, units, calendar, permit_calendar_conv
type(time_type) :: base_time, base_time_plus_one_yr
real(r8_kind) :: dt
logical :: permit_conversion_local
integer, parameter :: spd_int = 86400 !< seconds per day as int
real(r8_kind), parameter :: spd_real = 86400.0_r8_kind !< seconds per day as 64 bit real

if(.not.module_is_initialized) then
read (input_nml_file, get_cal_time_nml, iostat=io)
Expand Down Expand Up @@ -291,16 +293,16 @@ function get_calendar_time(time_increment, units, calendar, permit_calendar_conv

if(lowercase(units(1:10)) == 'days since') then
increment_days = floor(time_increment)
increment_seconds = int(86400.0_r8_kind*(time_increment - real(increment_days, r8_kind)))
increment_seconds = int(spd_real*(time_increment - real(increment_days, r8_kind)))
else if(lowercase(units(1:11)) == 'hours since') then
increment_days = floor(time_increment/24)
increment_seconds = int(86400.0_r8_kind*(time_increment/24.0_r8_kind - real(increment_days, r8_kind)))
increment_seconds = int(spd_real*(time_increment/24.0_r8_kind - real(increment_days, r8_kind)))
else if(lowercase(units(1:13)) == 'minutes since') then
increment_days = floor(time_increment/1440)
increment_seconds = int(86400.0_r8_kind*(time_increment/1440.0_r8_kind - real(increment_days, r8_kind)))
increment_seconds = int(spd_real*(time_increment/1440.0_r8_kind - real(increment_days, r8_kind)))
else if(lowercase(units(1:13)) == 'seconds since') then
increment_days = floor(time_increment/86400)
increment_seconds = int(86400.0_r8_kind*(time_increment/86400.0_r8_kind - real(increment_days, r8_kind)))
increment_days = floor(time_increment/spd_int)
increment_seconds = int(spd_real*(time_increment/spd_real - real(increment_days, r8_kind)))
else if(lowercase(units(1:11)) == 'years since') then
! The time period between between (base_time + time_increment) and
! (base_time + time_increment + 1 year) may be 360, 365, or 366 days.
Expand All @@ -309,18 +311,18 @@ function get_calendar_time(time_increment, units, calendar, permit_calendar_conv
base_time = set_date(year+floor(time_increment) ,month,day,hour,minute,second)
base_time_plus_one_yr = set_date(year+floor(time_increment)+1,month,day,hour,minute,second)
call get_time(base_time_plus_one_yr - base_time, second, day)
dt = real(day*86400+second, r8_kind)*(time_increment-real(floor(time_increment), r8_kind))
increment_days = floor(dt/86400.0_r8_kind)
increment_seconds = int(dt - real(increment_days*86400, r8_kind))
dt = real(day*spd_int+second, r8_kind)*(time_increment-real(floor(time_increment), r8_kind))
increment_days = floor(dt/spd_real)
increment_seconds = int(dt - real(increment_days*spd_int, r8_kind))
else if(lowercase(units(1:12)) == 'months since') then
month_fraction = time_increment - real(floor(time_increment), r8_kind)
increment_years = floor(time_increment/12)
increment_months = floor(time_increment) - 12*increment_years
call get_date(base_time, year,month,day,hour,minute,second)
base_time = set_date(year+increment_years,month+increment_months ,day,hour,minute,second)
dt = real( 86400*days_in_month(base_time), r8_kind) * month_fraction
increment_days = floor(dt/86400)
increment_seconds = int(dt - real(increment_days, r8_kind)*86400.0_r8_kind)
dt = real( spd_int*days_in_month(base_time), r8_kind) * month_fraction
increment_days = floor(dt/spd_int)
increment_seconds = int(dt - real(increment_days, r8_kind)*spd_real)
else
call error_mesg('get_calendar_time','"'//trim(units)//'" is not an acceptable units attribute of time.'// &
& ' It must begin with: "years since", "months since", "days since", "hours since", "minutes since",'// &
Expand Down

0 comments on commit 9fb1a62

Please sign in to comment.