FMS 2025.01.02-dev
Flexible Modeling System
Loading...
Searching...
No Matches
time_manager_mod

A software package that provides a set of simple interfaces for modelers to perform computations related to time and dates. More...

Data Types

interface  assignment(=)
 Operator override interface for use with time_type. More...
 
interface  operator(*)
 Operator override interface for use with time_type. More...
 
interface  operator(+)
 Operator override interface for use with time_type. More...
 
interface  operator(-)
 Operator override interface for use with time_type. More...
 
interface  operator(/)
 Operator override interface for use with time_type. More...
 
interface  operator(//)
 Operator override interface for use with time_type. More...
 
interface  operator(/=)
 Operator override interface for use with time_type. More...
 
interface  operator(<)
 Operator override interface for use with time_type. More...
 
interface  operator(<=)
 Operator override interface for use with time_type. More...
 
interface  operator(==)
 Operator override interface for use with time_type. More...
 
interface  operator(>)
 Operator override interface for use with time_type. More...
 
interface  operator(>=)
 Operator override interface for use with time_type. More...
 
interface  set_date
 Given an input date in year, month, days, etc., creates a time_type that represents this time interval from the internally defined base date. More...
 
interface  set_time
 Given some number of seconds and days, returns the corresponding time_type. More...
 
type  time_type
 Type to represent amounts of time. Implemented as seconds and days to allow for larger intervals. More...
 

Functions/Subroutines

character(len=19) function convert_integer_date_to_char (year, month, day, hour, minute, second)
 
character(len=256) function cut0 (string)
 
character(len=15) function, public date_to_string (time, err_msg)
 Get the a character string that represents the time. The format will be yyyymmdd.hhmmss.
 
integer function, public day_of_year (time)
 Returns number of day in year for given time. Jan 1st is day 1, not zero!
 
integer function, public days_in_month (time, err_msg)
 Given a time, computes the corresponding date given the selected date time mapping algorithm.
 
integer function days_in_month_gregorian (time)
 Returns the number of days in a gregorian month.
 
integer function days_in_month_julian (time)
 Returns the number of days in a julian month.
 
integer function days_in_month_no_leap (time)
 Returns the number of days in a 365 day year month.
 
integer function days_in_month_thirty (time)
 Returns the number of days in a thirty day month (needed for transparent changes to calendar type).
 
integer function, public days_in_year (time)
 Returns the number of days in the calendar year corresponding to the date represented by time for the default calendar.
 
integer function days_in_year_gregorian (time)
 
integer function days_in_year_julian (time)
 
integer function days_in_year_no_leap (time)
 
integer function days_in_year_thirty (time)
 
type(time_type) function, public decrement_date (time, years, months, days, hours, minutes, seconds, ticks, err_msg, allow_neg_inc)
 Given a time and some date decrement, computes a new time. Depending on the mapping algorithm from date to time, it may be possible to specify undefined decrements (i.e. if one decrements by 68 days and 3 months in a Julian calendar, it matters which order these operations are done and we don't want to deal with stuff like that, make it an error).
 
type(time_type) function, public decrement_time (time, seconds, days, ticks, err_msg, allow_neg_inc)
 Decrements a time by seconds and days.
 
logical function error_handler (routine, err_msg_local, err_msg)
 The purpose of this routine is to prevent the addition of an excessive amount of code in order to implement the error handling scheme involving an optional error flag of type character. It allows one line of code to accomplish what would otherwise require 6 lines. A value of .true. for this function is a flag to the caller that it should immediately return to it's caller.
 
integer function, public get_calendar_type ()
 Returns default calendar type for mapping from time to date.
 
subroutine, public get_date (time, year, month, day, hour, minute, second, tick, err_msg)
 Gets the date for different calendar types. Given a time_interval, returns the corresponding date under the selected calendar. When err_msg present, and when non-blank, a fatal error condition as been detected. The string itself is an error message. It is recommended that, when err_msg is present in the call to this routine, the next line of code should be something similar to this:

 
subroutine get_date_gregorian (time, year, month, day, hour, minute, second, tick)
 Gets the date on a Gregorian calendar. Computes the year, month, day on the fly from the quantity timedays.
 
subroutine, public get_date_julian (time, year, month, day, hour, minute, second)
 
subroutine get_date_julian_private (time, year, month, day, hour, minute, second, tick)
 Base date for Julian calendar is year 1 with all multiples of 4 years being leap years.
 
subroutine, public get_date_no_leap (time, year, month, day, hour, minute, second)
 
subroutine get_date_no_leap_private (time, year, month, day, hour, minute, second, tick)
 
subroutine get_date_thirty (time, year, month, day, hour, minute, second, tick)
 Computes date corresponding to time interval for 30 day months, 12 month years.
 
logical function get_tick_from_string (string, err_msg, allow_rounding, tick)
 
integer function, public get_ticks_per_second ()
 Returns the number of ticks per second.
 
subroutine, public get_time (time, seconds, days, ticks, err_msg)
 Returns days and seconds ( < 86400 ) corresponding to a time. err_msg should be checked for any errors.
 
type(time_type) function, public increment_date (time, years, months, days, hours, minutes, seconds, ticks, err_msg, allow_neg_inc)
 
logical function increment_date_private (time, years, months, days, hours, minutes, seconds, ticks, time_out, err_msg)
 Given a time and some date increment, computes a new time. Depending on the mapping algorithm from date to time, it may be possible to specify undefined increments (i.e. if one increments by 68 days and 3 months in a Julian calendar, it matters which order these operations are done and we don't want to deal with stuff like that, make it an error).
 
type(time_type) function, public increment_time (time, seconds, days, ticks, err_msg, allow_neg_inc)
 Increments a time by seconds and days.
 
logical function increment_time_private (time_in, seconds, days, ticks, time_out, err_msg)
 Increments a time by seconds, days and ticks.
 
logical function, public interval_alarm (time, time_interval, alarm, alarm_interval)
 Supports a commonly used type of test on times for models. Given the current time, and a time for an alarm, determines if this is the closest time to the alarm time given a time step of time_interval. If this is the closest time (alarm - time <= time_interval/2), the function returns true and the alarm is incremented by the alarm_interval. Watch for problems if the new alarm time is less than time + time_interval.
 
logical function, public leap_year (time, err_msg)
 Returns true if the year corresponding to the input time is a leap year (for default calendar). Always returns false for THIRTY_DAY_MONTHS and NOLEAP.
 
logical function leap_year_gregorian (time)
 
logical function leap_year_gregorian_int (year)
 
logical function leap_year_julian (time)
 Returns the number of days in a julian month.
 
logical function leap_year_no_leap (time)
 Another tough one; no leap year returns false for leap year inquiry.
 
logical function leap_year_thirty (time)
 No leap years in thirty day months, included for transparency.
 
type(time_type) function, public length_of_year ()
 Returns the mean length of the year in the default calendar setting.
 
type(time_type) function length_of_year_gregorian ()
 
type(time_type) function length_of_year_julian ()
 
type(time_type) function length_of_year_no_leap ()
 
type(time_type) function length_of_year_thirty ()
 
character(len=9) function, public month_name (n)
 Returns a character string containing the name of the month corresponding to month number n.
 
subroutine, public print_date (time, str, unit)
 Prints the time to standard output (or optional unit) as a date.
 
subroutine, public print_time (time, str, unit)
 Prints the given time_type argument as a time (using days, seconds and ticks)
 
type(time_type) function real4_to_time_type (x, err_msg)
 
type(time_type) function real8_to_time_type (x, err_msg)
 Convert a real number of seconds into a time_type variable.
 
logical function, public repeat_alarm (time, alarm_frequency, alarm_length)
 Repeat_alarm supports an alarm that goes off with alarm_frequency and lasts for alarm_length. If the nearest occurence of an alarm time is less than half an alarm_length from the input time, repeat_alarm is true. For instance, if the alarm_frequency is 1 day, and the alarm_length is 2 hours, then repeat_alarm is true from time 2300 on day n to time 0100 on day n + 1 for all n.
 
integer function safe_rtoi (rval, mode)
 Convert a floating point value to an integer value.
 
type(time_type) function scalar_time_mult (n, time)
 Returns time multipled by integer factor n.
 
subroutine, public set_calendar_type (type, err_msg)
 Sets calendar_type for mapping an interval to a date. For the Gregorian calendar, negative years and the proleptic calendar are not used; and the discontinuity of days in October 1582 (when the Gregorian calendar was adopted by select groups in Europe) is also not taken into account.
 
type(time_type) function set_date_c (string, zero_year_warning, err_msg, allow_rounding)
 Calls set_date_private for different calendar types when given a string input. Examples of acceptable forms of string:
 
logical function set_date_gregorian (year, month, day, hour, minute, second, tick, time_out, err_msg)
 Sets Time_outdays on a Gregorian calendar Computes the total number of days between 1/1/0001 to the current month/day/year.
 
type(time_type) function set_date_i (year, month, day, hour, minute, second, tick, err_msg)
 Calls set_date_private to set days for different calendar types.
 
type(time_type) function, public set_date_julian (year, month, day, hour, minute, second)
 
logical function set_date_julian_private (year, month, day, hour, minute, second, tick, time_out, err_msg)
 
type(time_type) function, public set_date_no_leap (year, month, day, hour, minute, second)
 
logical function set_date_no_leap_private (year, month, day, hour, minute, second, tick, time_out, err_msg)
 
logical function set_date_private (year, month, day, hour, minute, second, tick, time_out, err_msg)
 Sets days for different calendar types. Given an input date in year, month, days, etc., creates a time_type that represents this time interval from the internally defined base date.
 
logical function set_date_thirty (year, month, day, hour, minute, second, tick, time_out, err_msg)
 
subroutine, public set_ticks_per_second (tps)
 Sets the number of ticks per second.
 
type(time_type) function set_time_c (string, err_msg, allow_rounding)
 Returns a time_type set to the given amount of time via a string.
 
type(time_type) function set_time_i (seconds, days, ticks, err_msg)
 Returns a time_type set to the given amount of time via integer amounts.
 
logical function set_time_private (seconds, days, ticks, time_out, err_msg)
 Returns a time interval corresponding to this number of days, seconds, and ticks. days, seconds and ticks may be negative, but resulting time must be positive.
 
subroutine time_assignment (time1, time2)
 Assigns all components of the time_type variable on RHS to same components of time_type variable on LHS.
 
integer function time_divide (time1, time2)
 Returns the largest integer, n, for which time1 >= time2 * n.
 
logical function time_eq (time1, time2)
 Returns true if time1 == time2.
 
logical function time_ge (time1, time2)
 Returns true if time1 >= time2.
 
logical function time_gt (time1, time2)
 Returns true if time1 > time2.
 
logical function time_le (time1, time2)
 Returns true if time1 <= time2.
 
subroutine, public time_list_error (t, terr)
 This routine converts the integer tdays to a string.
 
logical function time_lt (time1, time2)
 Returns true if time1 < time2.
 
subroutine, public time_manager_init ()
 Initialization routine. Writes the version information to the log file.
 
type(time_type) function time_minus (time1, time2)
 Returns difference of two time_types. WARNING: a time type is positive so by definition time1 - time2 is the same as time2 - time1.
 
logical function time_ne (time1, time2)
 Returns true if time1 /= time2.
 
type(time_type) function time_plus (time1, time2)
 Returns sum of two time_types.
 
real(r8_kind) function time_real_divide (time1, time2)
 Returns the double precision quotient of two times.
 
type(time_type) function time_scalar_divide (time, n)
 Returns the largest time, t, for which n * t <= time.
 
type(time_type) function time_scalar_mult (time, n)
 Returns time multiplied by integer factor n.
 
real(kind=r8_kind) function, public time_type_to_real (time)
 Converts time to seconds and returns it as a real number.
 
character(len=24) function, public valid_calendar_types (ncal, err_msg)
 Returns a character string that describes the calendar type corresponding to the input integer.
 
logical function valid_increments (year, month, day, hour, minute, second, tick, err_msg)
 

Variables

integer, private calendar_type = NO_CALENDAR
 
integer, parameter days_in_400_year_period = 146097
 Used only for gregorian.
 
integer, dimension(12), private days_per_month = (/31,28,31,30,31,30,31,31,30,31,30,31/)
 
integer, parameter do_floor = 0
 
integer, parameter do_nearest = 1
 
integer, parameter, public gregorian = 3
 
integer, parameter, public invalid_calendar =-1
 
integer, parameter, public julian = 2
 
integer, parameter max_type = 4
 
logical module_is_initialized = .false.
 
integer, parameter, public no_calendar = 0
 
integer, parameter, public noleap = 4
 
integer, parameter seconds_per_day = rseconds_per_day
 
integer ticks_per_second = 1
 

Detailed Description

A software package that provides a set of simple interfaces for modelers to perform computations related to time and dates.

Optional error flag can be used in calling arguments of public routines. This allows the using routine to terminate the program. It is likely that more diagnostic information is available from the user than from time_manager alone. If the error flag is present then it is the responsibility of the using routine to test it and add additional information to the error message.

Calendar specific routines are private. They are not used, and should not be used, by any using code.

The module defines a type that can be used to represent discrete times (accurate to one second) and to map these times into dates using a variety of calendars. A time is mapped to a date by representing the time with respect to an arbitrary base date (refer to NOTES section for the base date setting).

The time_manager provides a single defined type, time_type, which is used to store time and date quantities. A time_type is a positive definite quantity that represents an interval of time. It can be most easily thought of as representing the number of seconds in some time interval. A time interval can be mapped to a date under a given calendar definition by using it to represent the time that has passed since some base date. A number of interfaces are provided to operate on time_type variables and their associated calendars. Time intervals can be as large as n days where n is the largest number represented by the default integer type on a compiler. This is typically considerably greater than 10 million years (assuming 32 bit integer representation) which is likely to be adequate for most applications. The description of the interfaces is separated into two sections. The first deals with operations on time intervals while the second deals with operations that convert time intervals to dates for a given calendar.

The smallest increment of time is referred to as a tick. A tick cannot be larger than 1 second, which also is the default. The number of ticks per second is set via pubic subroutine set_ticks_per_second. For example, ticks_per_second = 1000 will set the tick to one millisecond.


Data Type Documentation

◆ time_manager_mod::assignment(=)

interface time_manager_mod::assignment(=)

Operator override interface for use with time_type.

Definition at line 185 of file time_manager.F90.

Public Member Functions

subroutine time_assignment (time1, time2)
 Assigns all components of the time_type variable on RHS to same components of time_type variable on LHS.
 

Member Function/Subroutine Documentation

◆ time_assignment()

subroutine time_assignment ( type(time_type), intent(out)  time1,
type(time_type), intent(in)  time2 
)

Assigns all components of the time_type variable on RHS to same components of time_type variable on LHS.

Definition at line 861 of file time_manager.F90.

◆ time_manager_mod::operator(*)

interface time_manager_mod::operator(*)

Operator override interface for use with time_type.

Definition at line 156 of file time_manager.F90.

Public Member Functions

type(time_type) function scalar_time_mult (n, time)
 Returns time multipled by integer factor n.
 
type(time_type) function time_scalar_mult (time, n)
 Returns time multiplied by integer factor n.
 

Member Function/Subroutine Documentation

◆ scalar_time_mult()

type(time_type) function scalar_time_mult ( integer, intent(in)  n,
type(time_type), intent(in)  time 
)

Returns time multipled by integer factor n.

Parameters
[in]timea time interval
[in]nfactor to mulitply by

Definition at line 800 of file time_manager.F90.

◆ time_scalar_mult()

type(time_type) function time_scalar_mult ( type(time_type), intent(in)  time,
integer, intent(in)  n 
)

Returns time multiplied by integer factor n.

Parameters
[in]timetime interval to multply
[in]nfactor to multiply by

Definition at line 761 of file time_manager.F90.

◆ time_manager_mod::operator(+)

interface time_manager_mod::operator(+)

Operator override interface for use with time_type.

Definition at line 150 of file time_manager.F90.

Public Member Functions

type(time_type) function time_plus (time1, time2)
 Returns sum of two time_types.
 

Member Function/Subroutine Documentation

◆ time_plus()

type(time_type) function time_plus ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns sum of two time_types.

Parameters
[in]time1time interval to add
[in]time2time interval to add

Definition at line 728 of file time_manager.F90.

◆ time_manager_mod::operator(-)

interface time_manager_mod::operator(-)

Operator override interface for use with time_type.

Definition at line 153 of file time_manager.F90.

Public Member Functions

type(time_type) function time_minus (time1, time2)
 Returns difference of two time_types. WARNING: a time type is positive so by definition time1 - time2 is the same as time2 - time1.
 

Member Function/Subroutine Documentation

◆ time_minus()

type(time_type) function time_minus ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns difference of two time_types. WARNING: a time type is positive so by definition time1 - time2 is the same as time2 - time1.

Parameters
[in]time1time interval to subtract
[in]time2time interval to subtract

Definition at line 743 of file time_manager.F90.

◆ time_manager_mod::operator(/)

interface time_manager_mod::operator(/)

Operator override interface for use with time_type.

Definition at line 160 of file time_manager.F90.

Public Member Functions

integer function time_divide (time1, time2)
 Returns the largest integer, n, for which time1 >= time2 * n.
 
type(time_type) function time_scalar_divide (time, n)
 Returns the largest time, t, for which n * t <= time.
 

Member Function/Subroutine Documentation

◆ time_divide()

integer function time_divide ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns the largest integer, n, for which time1 >= time2 * n.

Parameters
[in]time1a time interval (dividend)
[in]time2a time interval (divisor)

Definition at line 813 of file time_manager.F90.

◆ time_scalar_divide()

type(time_type) function time_scalar_divide ( type(time_type), intent(in)  time,
integer, intent(in)  n 
)

Returns the largest time, t, for which n * t <= time.

Parameters
[in]timetime interval to divide
[in]ndivisor

Definition at line 944 of file time_manager.F90.

◆ time_manager_mod::operator(//)

interface time_manager_mod::operator(//)

Operator override interface for use with time_type.

Definition at line 182 of file time_manager.F90.

Public Member Functions

real(r8_kind) function time_real_divide (time1, time2)
 Returns the double precision quotient of two times.
 

Member Function/Subroutine Documentation

◆ time_real_divide()

real(r8_kind) function time_real_divide ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns the double precision quotient of two times.

Parameters
[in]time1a time interval (dividend)
[in]time2a time interval (divisor)

Definition at line 838 of file time_manager.F90.

◆ time_manager_mod::operator(/=)

interface time_manager_mod::operator(/=)

Operator override interface for use with time_type.

Definition at line 179 of file time_manager.F90.

Public Member Functions

logical function time_ne (time1, time2)
 Returns true if time1 /= time2.
 

Member Function/Subroutine Documentation

◆ time_ne()

logical function time_ne ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns true if time1 /= time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 716 of file time_manager.F90.

◆ time_manager_mod::operator(<)

interface time_manager_mod::operator(<)

Operator override interface for use with time_type.

Definition at line 170 of file time_manager.F90.

Public Member Functions

logical function time_lt (time1, time2)
 Returns true if time1 < time2.
 

Member Function/Subroutine Documentation

◆ time_lt()

logical function time_lt ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns true if time1 < time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 671 of file time_manager.F90.

◆ time_manager_mod::operator(<=)

interface time_manager_mod::operator(<=)

Operator override interface for use with time_type.

Definition at line 173 of file time_manager.F90.

Public Member Functions

logical function time_le (time1, time2)
 Returns true if time1 <= time2.
 

Member Function/Subroutine Documentation

◆ time_le()

logical function time_le ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns true if time1 <= time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 689 of file time_manager.F90.

◆ time_manager_mod::operator(==)

interface time_manager_mod::operator(==)

Operator override interface for use with time_type.

Definition at line 176 of file time_manager.F90.

Public Member Functions

logical function time_eq (time1, time2)
 Returns true if time1 == time2.
 

Member Function/Subroutine Documentation

◆ time_eq()

logical function time_eq ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns true if time1 == time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 701 of file time_manager.F90.

◆ time_manager_mod::operator(>)

interface time_manager_mod::operator(>)

Operator override interface for use with time_type.

Definition at line 164 of file time_manager.F90.

Public Member Functions

logical function time_gt (time1, time2)
 Returns true if time1 > time2.
 

Member Function/Subroutine Documentation

◆ time_gt()

logical function time_gt ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns true if time1 > time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 639 of file time_manager.F90.

◆ time_manager_mod::operator(>=)

interface time_manager_mod::operator(>=)

Operator override interface for use with time_type.

Definition at line 167 of file time_manager.F90.

Public Member Functions

logical function time_ge (time1, time2)
 Returns true if time1 >= time2.
 

Member Function/Subroutine Documentation

◆ time_ge()

logical function time_ge ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)

Returns true if time1 >= time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 659 of file time_manager.F90.

◆ time_manager_mod::set_date

interface time_manager_mod::set_date

Given an input date in year, month, days, etc., creates a time_type that represents this time interval from the internally defined base date.

Given a date, computes the corresponding time given the selected date time mapping algorithm. Note that it is possible to specify any number of illegal dates; these should be checked for and generate errors as appropriate.


Example usage:
Integer input

time = set_date(year, month, day, hours, minute, second, tick, err_msg)


String input

time = set_date(time_string, zero_year_warning, err_msg, allow_rounding)
Parameters
time_stringA character string containing a date formatted according to CF conventions. e.g. '1980-12-31 23:59:59.9'
zero_year_warningIf the year number is zero, it will be silently changed to one, unless zero_year_warning=.true., in which case a WARNING message will also be issued.
allow_roundingWhen .true., any fractions of a second will be rounded off to the nearest tick. When .false., it is a fatal error if the second fraction cannot be exactly represented by a number of ticks.
err_msgWhen present, and when non-blank, a fatal error condition as been detected. The string itself is an error message. It is recommended that, when err_msg is present in the call to this routine, the next line of code should be something similar to this:
if(err_msg /= '') call error_mesg('my_routine','additional info: '//trim(err_msg) ,fatal)

Definition at line 247 of file time_manager.F90.

Public Member Functions

type(time_type) function set_date_c (string, zero_year_warning, err_msg, allow_rounding)
 Calls set_date_private for different calendar types when given a string input. Examples of acceptable forms of string:
 
type(time_type) function set_date_i (year, month, day, hour, minute, second, tick, err_msg)
 Calls set_date_private to set days for different calendar types.
 

Member Function/Subroutine Documentation

◆ set_date_c()

type(time_type) function set_date_c ( character(len=*), intent(in)  string,
logical, intent(in), optional  zero_year_warning,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_rounding 
)

Calls set_date_private for different calendar types when given a string input. Examples of acceptable forms of string:

1980-01-01 00:00:00 1980-01-01 00:00:00.50 1980-1-1 0:0:0 1980-1-1

year number must occupy 4 spaces. months, days, hours, minutes, seconds may occupy 1 or 2 spaces year, month and day must be separated by a '-' hour, minute, second must be separated by a ':' hour, minute, second are optional. If not present then zero is assumed. second may be a real number.

zero_year_warning: If the year number is zero, it will be silently changed to one, unless zero_year_warning=.true., in which case a WARNING message will also be issued

Definition at line 1508 of file time_manager.F90.

◆ set_date_i()

type(time_type) function set_date_i ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in), optional  hour,
integer, intent(in), optional  minute,
integer, intent(in), optional  second,
integer, intent(in), optional  tick,
character(len=*), intent(out), optional  err_msg 
)

Calls set_date_private to set days for different calendar types.

Definition at line 1465 of file time_manager.F90.

◆ time_manager_mod::set_time

interface time_manager_mod::set_time

Given some number of seconds and days, returns the corresponding time_type.

Given some number of seconds and days, returns the corresponding time_type. set_time has two forms; one accepts integer input, the other a character string with the day and second counts. For the first form, there are no restrictions on the range of the inputs, except that the result must be positive time. e.g. days=-1, seconds=86401 is acceptable. For the second form, days and seconds must both be positive.


Example usage:

type(time_type) :: time1, time2
time1 = set_time(seconds, days, ticks, err_msg)
time2 = set_time("100 43200", err_msg, allow_rounding)

Definition at line 207 of file time_manager.F90.

Public Member Functions

type(time_type) function set_time_c (string, err_msg, allow_rounding)
 Returns a time_type set to the given amount of time via a string.
 
type(time_type) function set_time_i (seconds, days, ticks, err_msg)
 Returns a time_type set to the given amount of time via integer amounts.
 

Member Function/Subroutine Documentation

◆ set_time_c()

type(time_type) function set_time_c ( character(len=*), intent(in)  string,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_rounding 
)

Returns a time_type set to the given amount of time via a string.

Parameters
[in]stringContains days and seconds separated by a single blank. days must be integer, seconds may be integer or real. Examples: '100 43200' '100 43200.50'
[out]err_msgWhen present, and when non-blank, a fatal error condition as been detected. The string itself is an error message. It is recommended that, when err_msg is present in the call to this routine, the next line of code should be something similar to this: if(err_msg /= '') call error_mesg('my_routine','additional info: '//trim(err_msg),FATAL)
[in]allow_roundingWhen .true., any fractions of a second will be rounded off to the nearest tick. When .false., it is a fatal error if the second fraction cannot be exactly represented by a number of ticks.

Definition at line 360 of file time_manager.F90.

◆ set_time_i()

type(time_type) function set_time_i ( integer, intent(in)  seconds,
integer, intent(in), optional  days,
integer, intent(in), optional  ticks,
character(len=*), intent(out), optional  err_msg 
)

Returns a time_type set to the given amount of time via integer amounts.

Parameters
[in]secondsA number of seconds
[in]daysA number of days
[in]ticksA number of ticks
[out]err_msgWhen present, and when non-blank, a fatal error condition as been detected. The string itself is an error message. It is recommended that, when err_msg is present in the call to this routine, the next line of code should be something similar to this: if(err_msg /= '') call error_mesg('my_routine','additional info: '//trim(err_msg),FATAL)

Definition at line 332 of file time_manager.F90.

◆ time_manager_mod::time_type

type time_manager_mod::time_type

Type to represent amounts of time. Implemented as seconds and days to allow for larger intervals.

Definition at line 141 of file time_manager.F90.

Collaboration diagram for time_type:
[legend]

Public Attributes

integer days
 
integer ticks
 

Private Attributes

integer seconds
 

Member Data Documentation

◆ days

integer days

Definition at line 144 of file time_manager.F90.

◆ seconds

integer seconds
private

Definition at line 143 of file time_manager.F90.

◆ ticks

integer ticks

Definition at line 145 of file time_manager.F90.

Function/Subroutine Documentation

◆ convert_integer_date_to_char()

character(len=19) function convert_integer_date_to_char ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second 
)
private

Definition at line 1867 of file time_manager.F90.

◆ cut0()

character(len=256) function cut0 ( character(len=*), intent(in)  string)
private

Definition at line 1269 of file time_manager.F90.

◆ date_to_string()

character(len=15) function, public date_to_string ( type(time_type), intent(in)  time,
character(len=*), intent(out), optional  err_msg 
)

Get the a character string that represents the time. The format will be yyyymmdd.hhmmss.

Definition at line 2619 of file time_manager.F90.

◆ day_of_year()

integer function, public day_of_year ( type(time_type), intent(in)  time)

Returns number of day in year for given time. Jan 1st is day 1, not zero!

Definition at line 2368 of file time_manager.F90.

◆ days_in_month()

integer function, public days_in_month ( type(time_type), intent(in)  time,
character(len=*), intent(out), optional  err_msg 
)

Given a time, computes the corresponding date given the selected date time mapping algorithm.

Returns
number of days in month given the current selected calendar type
Parameters
[in]timea time interval

Definition at line 2136 of file time_manager.F90.

◆ days_in_month_gregorian()

integer function days_in_month_gregorian ( type(time_type), intent(in)  time)
private

Returns the number of days in a gregorian month.

Definition at line 2164 of file time_manager.F90.

◆ days_in_month_julian()

integer function days_in_month_julian ( type(time_type), intent(in)  time)
private

Returns the number of days in a julian month.

Definition at line 2178 of file time_manager.F90.

◆ days_in_month_no_leap()

integer function days_in_month_no_leap ( type(time_type), intent(in)  time)
private

Returns the number of days in a 365 day year month.

Definition at line 2204 of file time_manager.F90.

◆ days_in_month_thirty()

integer function days_in_month_thirty ( type(time_type), intent(in)  time)
private

Returns the number of days in a thirty day month (needed for transparent changes to calendar type).

Definition at line 2193 of file time_manager.F90.

◆ days_in_year()

integer function, public days_in_year ( type(time_type), intent(in)  time)

Returns the number of days in the calendar year corresponding to the date represented by time for the default calendar.

Returns
The number of days in this year for the default calendar type.
Parameters
[in]timeA time interval

Definition at line 2383 of file time_manager.F90.

◆ days_in_year_gregorian()

integer function days_in_year_gregorian ( type(time_type), intent(in)  time)
private

Definition at line 2419 of file time_manager.F90.

◆ days_in_year_julian()

integer function days_in_year_julian ( type(time_type), intent(in)  time)
private

Definition at line 2433 of file time_manager.F90.

◆ days_in_year_no_leap()

integer function days_in_year_no_leap ( type(time_type), intent(in)  time)
private

Definition at line 2448 of file time_manager.F90.

◆ days_in_year_thirty()

integer function days_in_year_thirty ( type(time_type), intent(in)  time)
private

Definition at line 2408 of file time_manager.F90.

◆ decrement_date()

type(time_type) function, public decrement_date ( type(time_type), intent(in)  time,
integer, intent(in), optional  years,
integer, intent(in), optional  months,
integer, intent(in), optional  days,
integer, intent(in), optional  hours,
integer, intent(in), optional  minutes,
integer, intent(in), optional  seconds,
integer, intent(in), optional  ticks,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_neg_inc 
)

Given a time and some date decrement, computes a new time. Depending on the mapping algorithm from date to time, it may be possible to specify undefined decrements (i.e. if one decrements by 68 days and 3 months in a Julian calendar, it matters which order these operations are done and we don't want to deal with stuff like that, make it an error).

Note
For all but the thirty_day_months calendar, decrements to months and years must be made separately from other units because of the non-associative nature of addition. If the result is a negative time (i.e. date before the base date) it is considered a fatal error.
Returns
Time after the given decrement is applied
Parameters
[in]timetime interval to decrement
[in]ticksamount of time to decrement by units should not exceed next largest unit (ie. 61 seconds should be 1 min 1 sec )

Definition at line 2089 of file time_manager.F90.

◆ decrement_time()

type(time_type) function, public decrement_time ( type(time_type), intent(in)  time,
integer, intent(in)  seconds,
integer, intent(in), optional  days,
integer, intent(in), optional  ticks,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_neg_inc 
)

Decrements a time by seconds and days.

Given a time and a decrement of days and seconds, returns a time that subtracts this decrement from an input time.

Returns
A time that suvtracts this decrement from an input time. A negative result is a fatal error.
Parameters
[in]timeA time interval
[in]secondsDecrement of seconds
[in]ticksDecrement of days and ticks
[out]err_msgPresent and non-blank when a fatal error has occured, holds the error message.
[in]allow_neg_incThrows fatal warning when set to false if negative values are used to decrement. Default is true.

Definition at line 600 of file time_manager.F90.

◆ error_handler()

logical function error_handler ( character(len=*), intent(in)  routine,
character(len=*), intent(in)  err_msg_local,
character(len=*), intent(out), optional  err_msg 
)
private

The purpose of this routine is to prevent the addition of an excessive amount of code in order to implement the error handling scheme involving an optional error flag of type character. It allows one line of code to accomplish what would otherwise require 6 lines. A value of .true. for this function is a flag to the caller that it should immediately return to it's caller.

Definition at line 2490 of file time_manager.F90.

◆ get_calendar_type()

integer function, public get_calendar_type

Returns default calendar type for mapping from time to date.

Definition at line 1105 of file time_manager.F90.

◆ get_date()

subroutine, public get_date ( type(time_type), intent(in)  time,
integer, intent(out)  year,
integer, intent(out)  month,
integer, intent(out)  day,
integer, intent(out)  hour,
integer, intent(out)  minute,
integer, intent(out)  second,
integer, intent(out), optional  tick,
character(len=*), intent(out), optional  err_msg 
)

Gets the date for different calendar types. Given a time_interval, returns the corresponding date under the selected calendar. When err_msg present, and when non-blank, a fatal error condition as been detected. The string itself is an error message. It is recommended that, when err_msg is present in the call to this routine, the next line of code should be something similar to this:

    if(err_msg /= '') call error_mesg('my_routine','additional info: '//trim(err_msg),FATAL)

Definition at line 1145 of file time_manager.F90.

◆ get_date_gregorian()

subroutine get_date_gregorian ( type(time_type), intent(in)  time,
integer, intent(out)  year,
integer, intent(out)  month,
integer, intent(out)  day,
integer, intent(out)  hour,
integer, intent(out)  minute,
integer, intent(out)  second,
integer, intent(out)  tick 
)
private

Gets the date on a Gregorian calendar. Computes the year, month, day on the fly from the quantity timedays.

Definition at line 1191 of file time_manager.F90.

◆ get_date_julian()

subroutine, public get_date_julian ( type(time_type), intent(in)  time,
integer, intent(out)  year,
integer, intent(out)  month,
integer, intent(out)  day,
integer, intent(out)  hour,
integer, intent(out)  minute,
integer, intent(out)  second 
)

Definition at line 1334 of file time_manager.F90.

◆ get_date_julian_private()

subroutine get_date_julian_private ( type(time_type), intent(in)  time,
integer, intent(out)  year,
integer, intent(out)  month,
integer, intent(out)  day,
integer, intent(out)  hour,
integer, intent(out)  minute,
integer, intent(out)  second,
integer, intent(out)  tick 
)
private

Base date for Julian calendar is year 1 with all multiples of 4 years being leap years.

Definition at line 1288 of file time_manager.F90.

◆ get_date_no_leap()

subroutine, public get_date_no_leap ( type(time_type), intent(in)  time,
integer, intent(out)  year,
integer, intent(out)  month,
integer, intent(out)  day,
integer, intent(out)  hour,
integer, intent(out)  minute,
integer, intent(out)  second 
)

Definition at line 1408 of file time_manager.F90.

◆ get_date_no_leap_private()

subroutine get_date_no_leap_private ( type(time_type), intent(in)  time,
integer, intent(out)  year,
integer, intent(out)  month,
integer, intent(out)  day,
integer, intent(out)  hour,
integer, intent(out)  minute,
integer, intent(out)  second,
integer, intent(out)  tick 
)
private

Definition at line 1377 of file time_manager.F90.

◆ get_date_thirty()

subroutine get_date_thirty ( type(time_type), intent(in)  time,
integer, intent(out)  year,
integer, intent(out)  month,
integer, intent(out)  day,
integer, intent(out)  hour,
integer, intent(out)  minute,
integer, intent(out)  second,
integer, intent(out)  tick 
)
private

Computes date corresponding to time interval for 30 day months, 12 month years.

Definition at line 1351 of file time_manager.F90.

◆ get_tick_from_string()

logical function get_tick_from_string ( character(len=*), intent(in)  string,
character(len=*), intent(out)  err_msg,
logical, intent(in)  allow_rounding,
integer, intent(out)  tick 
)
private

Definition at line 440 of file time_manager.F90.

◆ get_ticks_per_second()

integer function, public get_ticks_per_second

Returns the number of ticks per second.

Definition at line 1126 of file time_manager.F90.

◆ get_time()

subroutine, public get_time ( type(time_type), intent(in)  time,
integer, intent(out)  seconds,
integer, intent(out), optional  days,
integer, intent(out), optional  ticks,
character(len=*), intent(out), optional  err_msg 
)

Returns days and seconds ( < 86400 ) corresponding to a time. err_msg should be checked for any errors.

Parameters
timeA time_type interval to get days and seconds from
[out]secondsThe number of seconds
[out]daysThe number of seconds
[out]ticksThe number of ticks
[out]err_msgContains an error message on failure
Example usage:
get_time(time, seconds, days, ticks, err_msg)

Definition at line 491 of file time_manager.F90.

◆ increment_date()

type(time_type) function, public increment_date ( type(time_type), intent(in)  time,
integer, intent(in), optional  years,
integer, intent(in), optional  months,
integer, intent(in), optional  days,
integer, intent(in), optional  hours,
integer, intent(in), optional  minutes,
integer, intent(in), optional  seconds,
integer, intent(in), optional  ticks,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_neg_inc 
)

Definition at line 1928 of file time_manager.F90.

◆ increment_date_private()

logical function increment_date_private ( type(time_type), intent(in)  time,
integer, intent(in)  years,
integer, intent(in)  months,
integer, intent(in)  days,
integer, intent(in)  hours,
integer, intent(in)  minutes,
integer, intent(in)  seconds,
integer, intent(in)  ticks,
type(time_type), intent(out)  time_out,
character(len=*), intent(out)  err_msg 
)
private

Given a time and some date increment, computes a new time. Depending on the mapping algorithm from date to time, it may be possible to specify undefined increments (i.e. if one increments by 68 days and 3 months in a Julian calendar, it matters which order these operations are done and we don't want to deal with stuff like that, make it an error).

This routine operates in one of two modes.

  1. days, hours, minutes, seconds, ticks are incremented, years and months must be zero or absent arguments.
  2. years and/or months are incremented, other time increments must be zero or absent arguments.

Negative increments are always allowed in the private version of this routine.

Definition at line 1993 of file time_manager.F90.

◆ increment_time()

type(time_type) function, public increment_time ( type(time_type), intent(in)  time,
integer, intent(in)  seconds,
integer, intent(in), optional  days,
integer, intent(in), optional  ticks,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_neg_inc 
)

Increments a time by seconds and days.

Given a time and an increment of days and seconds, returns a new time_type that represents the given time after the given increment.

Returns
incremented time_type
Parameters
[in]timeA time interval
[in]secondsIncrement of seconds
[in]ticksIncrement of days and ticks
[out]err_msgWhen present and non-blank, a fatal error condition has been detected, with the string itself as the error message.
[in]allow_neg_incWhen false, negative increments give fatal errors Defaults to true.

Definition at line 532 of file time_manager.F90.

◆ increment_time_private()

logical function increment_time_private ( type(time_type), intent(in)  time_in,
integer, intent(in)  seconds,
integer, intent(in)  days,
integer, intent(in)  ticks,
type(time_type), intent(out)  time_out,
character(len=*), intent(out)  err_msg 
)
private

Increments a time by seconds, days and ticks.

Definition at line 567 of file time_manager.F90.

◆ interval_alarm()

logical function, public interval_alarm ( type(time_type), intent(in)  time,
type(time_type), intent(in)  time_interval,
type(time_type), intent(inout)  alarm,
type(time_type), intent(in)  alarm_interval 
)

Supports a commonly used type of test on times for models. Given the current time, and a time for an alarm, determines if this is the closest time to the alarm time given a time step of time_interval. If this is the closest time (alarm - time <= time_interval/2), the function returns true and the alarm is incremented by the alarm_interval. Watch for problems if the new alarm time is less than time + time_interval.

This is a specialized operation that is frequently performed in models. Given a time, and a time interval, this function is true if this is the closest time step to the alarm time. The actual computation is:

if((alarm_time - time) &#60;&#61; (time_interval / 2))

If the function is true, the alarm time is incremented by the alarm_interval; WARNING, this is a featured side effect. Otherwise, the function is false and there are no other effects. CAUTION: if the alarm_interval is smaller than the time_interval, the alarm may fail to return true ever again. Watch for problems if the new alarm time is less than time + time_interval

Parameters
[in]timecurrent time
[in]time_intervala time interval
[in]alarm_intervala time interval
[in,out]alarmAn alarm time, which is incremented by the alarm_interval if the function is true.

Definition at line 1000 of file time_manager.F90.

◆ leap_year()

logical function, public leap_year ( type(time_type), intent(in)  time,
character(len=*), intent(out), optional  err_msg 
)

Returns true if the year corresponding to the input time is a leap year (for default calendar). Always returns false for THIRTY_DAY_MONTHS and NOLEAP.

Parameters
[in]timea time interval to check if leap year

Definition at line 2216 of file time_manager.F90.

◆ leap_year_gregorian()

logical function leap_year_gregorian ( type(time_type), intent(in)  time)
private

Definition at line 2240 of file time_manager.F90.

◆ leap_year_gregorian_int()

logical function leap_year_gregorian_int ( integer, intent(in)  year)
private

Definition at line 2255 of file time_manager.F90.

◆ leap_year_julian()

logical function leap_year_julian ( type(time_type), intent(in)  time)
private

Returns the number of days in a julian month.

Definition at line 2268 of file time_manager.F90.

◆ leap_year_no_leap()

logical function leap_year_no_leap ( type(time_type), intent(in)  time)
private

Another tough one; no leap year returns false for leap year inquiry.

Definition at line 2292 of file time_manager.F90.

◆ leap_year_thirty()

logical function leap_year_thirty ( type(time_type), intent(in)  time)
private

No leap years in thirty day months, included for transparency.

Definition at line 2281 of file time_manager.F90.

◆ length_of_year()

type(time_type) function, public length_of_year

Returns the mean length of the year in the default calendar setting.

There are no arguments in this function. It returns the mean length of the year for the default calendar.

Definition at line 2304 of file time_manager.F90.

◆ length_of_year_gregorian()

type(time_type) function length_of_year_gregorian
private

Definition at line 2337 of file time_manager.F90.

◆ length_of_year_julian()

type(time_type) function length_of_year_julian
private

Definition at line 2347 of file time_manager.F90.

◆ length_of_year_no_leap()

type(time_type) function length_of_year_no_leap
private

Definition at line 2357 of file time_manager.F90.

◆ length_of_year_thirty()

type(time_type) function length_of_year_thirty
private

Definition at line 2327 of file time_manager.F90.

◆ month_name()

character (len=9) function, public month_name ( integer, intent(in)  n)

Returns a character string containing the name of the month corresponding to month number n.

Definition is the same for all calendar types.

Returns
The character string associated with a month. All calendars have 12 months and return full month names, not abreviations.
Parameters
[in]nMonth number

Definition at line 2465 of file time_manager.F90.

◆ print_date()

subroutine, public print_date ( type(time_type), intent(in)  time,
character (len=*), intent(in), optional  str,
integer, intent(in), optional  unit 
)

Prints the time to standard output (or optional unit) as a date.

Prints the given time_type argument as a date (using year, month, day, hour, minutes, seconds and ticks). NOTE: there is no check for PE number.

Parameters
[in]timeTime that will be printed
[in]strCharacter string that precedes the printed time
[in]unitUnit number for printed output, defaults to stdout

Definition at line 2559 of file time_manager.F90.

◆ print_time()

subroutine, public print_time ( type(time_type), intent(in)  time,
character (len=*), intent(in), optional  str,
integer, intent(in), optional  unit 
)

Prints the given time_type argument as a time (using days, seconds and ticks)

Note
There is no check for PE number.
Parameters
[in]timeTime that will be printed
[in]strCharacter string that precedes the printed time
[in]unitUnit number for printed output, defaults to stdout

Definition at line 2524 of file time_manager.F90.

◆ real4_to_time_type()

type(time_type) function real4_to_time_type ( real(r4_kind), intent(in)  x,
character(len=*), intent(out), optional  err_msg 
)
private
Parameters
[in]xnumber of seconds
[out]err_msgError message.

Definition at line 910 of file time_manager.F90.

◆ real8_to_time_type()

type(time_type) function real8_to_time_type ( real(r8_kind), intent(in)  x,
character(len=*), intent(out), optional  err_msg 
)
private

Convert a real number of seconds into a time_type variable.

Returns
A filled time type variable, and an error message if an error occurs.
Parameters
[in]xNumber of seconds.
[out]err_msgError message.

Definition at line 885 of file time_manager.F90.

◆ repeat_alarm()

logical function, public repeat_alarm ( type(time_type), intent(in)  time,
type(time_type), intent(in)  alarm_frequency,
type(time_type), intent(in)  alarm_length 
)

Repeat_alarm supports an alarm that goes off with alarm_frequency and lasts for alarm_length. If the nearest occurence of an alarm time is less than half an alarm_length from the input time, repeat_alarm is true. For instance, if the alarm_frequency is 1 day, and the alarm_length is 2 hours, then repeat_alarm is true from time 2300 on day n to time 0100 on day n + 1 for all n.

Parameters
[in]timecurrent time
[in]alarm_frequencya time interval for time in between alarm activations
[in]alarm_lengtha time interval for amount of time alarm is active for

Definition at line 1025 of file time_manager.F90.

◆ safe_rtoi()

integer function safe_rtoi ( real(r8_kind), intent(in)  rval,
integer, intent(in)  mode 
)
private

Convert a floating point value to an integer value.

Returns
The integer value, using the input rounding mode.
Parameters
[in]rvalA floating point value.
[in]modeA rouding mode (either "do_floor" or "do_nearest")

Definition at line 919 of file time_manager.F90.

◆ scalar_time_mult()

type(time_type) function scalar_time_mult ( integer, intent(in)  n,
type(time_type), intent(in)  time 
)
private

Returns time multipled by integer factor n.

Parameters
[in]timea time interval
[in]nfactor to mulitply by

Definition at line 800 of file time_manager.F90.

◆ set_calendar_type()

subroutine, public set_calendar_type ( integer, intent(in)  type,
character(len=*), intent(out), optional  err_msg 
)

Sets calendar_type for mapping an interval to a date. For the Gregorian calendar, negative years and the proleptic calendar are not used; and the discontinuity of days in October 1582 (when the Gregorian calendar was adopted by select groups in Europe) is also not taken into account.

Parameters
[in]typeconstant parameter value (ie. one NO_CALENDAR, )

Definition at line 1074 of file time_manager.F90.

◆ set_date_c()

type(time_type) function set_date_c ( character(len=*), intent(in)  string,
logical, intent(in), optional  zero_year_warning,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_rounding 
)
private

Calls set_date_private for different calendar types when given a string input. Examples of acceptable forms of string:

1980-01-01 00:00:00 1980-01-01 00:00:00.50 1980-1-1 0:0:0 1980-1-1

year number must occupy 4 spaces. months, days, hours, minutes, seconds may occupy 1 or 2 spaces year, month and day must be separated by a '-' hour, minute, second must be separated by a ':' hour, minute, second are optional. If not present then zero is assumed. second may be a real number.

zero_year_warning: If the year number is zero, it will be silently changed to one, unless zero_year_warning=.true., in which case a WARNING message will also be issued

Definition at line 1508 of file time_manager.F90.

◆ set_date_gregorian()

logical function set_date_gregorian ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second,
integer, intent(in)  tick,
type(time_type), intent(out)  time_out,
character(len=*), intent(out)  err_msg 
)
private

Sets Time_outdays on a Gregorian calendar Computes the total number of days between 1/1/0001 to the current month/day/year.

Definition at line 1612 of file time_manager.F90.

◆ set_date_i()

type(time_type) function set_date_i ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in), optional  hour,
integer, intent(in), optional  minute,
integer, intent(in), optional  second,
integer, intent(in), optional  tick,
character(len=*), intent(out), optional  err_msg 
)
private

Calls set_date_private to set days for different calendar types.

Definition at line 1465 of file time_manager.F90.

◆ set_date_julian()

type(time_type) function, public set_date_julian ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second 
)

Definition at line 1745 of file time_manager.F90.

◆ set_date_julian_private()

logical function set_date_julian_private ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second,
integer, intent(in)  tick,
type(time_type), intent(out)  time_out,
character(len=*), intent(out)  err_msg 
)
private

Definition at line 1696 of file time_manager.F90.

◆ set_date_no_leap()

type(time_type) function, public set_date_no_leap ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second 
)

Definition at line 1825 of file time_manager.F90.

◆ set_date_no_leap_private()

logical function set_date_no_leap_private ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second,
integer, intent(in)  tick,
type(time_type), intent(out)  time_out,
character(len=*), intent(out)  err_msg 
)
private

Definition at line 1791 of file time_manager.F90.

◆ set_date_private()

logical function set_date_private ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second,
integer, intent(in)  tick,
type(time_type time_out,
character(len=*), intent(out)  err_msg 
)
private

Sets days for different calendar types. Given an input date in year, month, days, etc., creates a time_type that represents this time interval from the internally defined base date.

Note
that it is possible to specify any number of illegal dates; these are checked for and generate errors as appropriate.
Parameters
[out]err_msgerror message, if non-empty an error has occured

Definition at line 1430 of file time_manager.F90.

◆ set_date_thirty()

logical function set_date_thirty ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second,
integer, intent(in)  tick,
type(time_type), intent(out)  time_out,
character(len=*), intent(out)  err_msg 
)
private

Definition at line 1761 of file time_manager.F90.

◆ set_ticks_per_second()

subroutine, public set_ticks_per_second ( integer, intent(in)  tps)

Sets the number of ticks per second.

Definition at line 1116 of file time_manager.F90.

◆ set_time_c()

type(time_type) function set_time_c ( character(len=*), intent(in)  string,
character(len=*), intent(out), optional  err_msg,
logical, intent(in), optional  allow_rounding 
)
private

Returns a time_type set to the given amount of time via a string.

Parameters
[in]stringContains days and seconds separated by a single blank. days must be integer, seconds may be integer or real. Examples: '100 43200' '100 43200.50'
[out]err_msgWhen present, and when non-blank, a fatal error condition as been detected. The string itself is an error message. It is recommended that, when err_msg is present in the call to this routine, the next line of code should be something similar to this: if(err_msg /= '') call error_mesg('my_routine','additional info: '//trim(err_msg),FATAL)
[in]allow_roundingWhen .true., any fractions of a second will be rounded off to the nearest tick. When .false., it is a fatal error if the second fraction cannot be exactly represented by a number of ticks.

Definition at line 360 of file time_manager.F90.

◆ set_time_i()

type(time_type) function set_time_i ( integer, intent(in)  seconds,
integer, intent(in), optional  days,
integer, intent(in), optional  ticks,
character(len=*), intent(out), optional  err_msg 
)
private

Returns a time_type set to the given amount of time via integer amounts.

Parameters
[in]secondsA number of seconds
[in]daysA number of days
[in]ticksA number of ticks
[out]err_msgWhen present, and when non-blank, a fatal error condition as been detected. The string itself is an error message. It is recommended that, when err_msg is present in the call to this routine, the next line of code should be something similar to this: if(err_msg /= '') call error_mesg('my_routine','additional info: '//trim(err_msg),FATAL)

Definition at line 332 of file time_manager.F90.

◆ set_time_private()

logical function set_time_private ( integer, intent(in)  seconds,
integer, intent(in)  days,
integer, intent(in)  ticks,
type(time_type), intent(out)  time_out,
character(len=*), intent(out)  err_msg 
)
private

Returns a time interval corresponding to this number of days, seconds, and ticks. days, seconds and ticks may be negative, but resulting time must be positive.

Definition at line 282 of file time_manager.F90.

◆ time_assignment()

subroutine time_assignment ( type(time_type), intent(out)  time1,
type(time_type), intent(in)  time2 
)
private

Assigns all components of the time_type variable on RHS to same components of time_type variable on LHS.

Definition at line 861 of file time_manager.F90.

◆ time_divide()

integer function time_divide ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns the largest integer, n, for which time1 >= time2 * n.

Parameters
[in]time1a time interval (dividend)
[in]time2a time interval (divisor)

Definition at line 813 of file time_manager.F90.

◆ time_eq()

logical function time_eq ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns true if time1 == time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 701 of file time_manager.F90.

◆ time_ge()

logical function time_ge ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns true if time1 >= time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 659 of file time_manager.F90.

◆ time_gt()

logical function time_gt ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns true if time1 > time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 639 of file time_manager.F90.

◆ time_le()

logical function time_le ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns true if time1 <= time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 689 of file time_manager.F90.

◆ time_list_error()

subroutine, public time_list_error ( type(time_type), intent(in)  t,
character(len=:), allocatable  terr 
)

This routine converts the integer tdays to a string.

Author
Tom Robinson thoma.nosp@m.s.ro.nosp@m.binso.nosp@m.n@no.nosp@m.aa.go.nosp@m.v
Parameters
[in]ttime_type input
terrString holding the tdays

Allocate the string

Write the integer to the string

Definition at line 2639 of file time_manager.F90.

◆ time_lt()

logical function time_lt ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns true if time1 < time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 671 of file time_manager.F90.

◆ time_manager_init()

subroutine, public time_manager_init

Initialization routine. Writes the version information to the log file.

Definition at line 2510 of file time_manager.F90.

◆ time_minus()

type(time_type) function time_minus ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns difference of two time_types. WARNING: a time type is positive so by definition time1 - time2 is the same as time2 - time1.

Parameters
[in]time1time interval to subtract
[in]time2time interval to subtract

Definition at line 743 of file time_manager.F90.

◆ time_ne()

logical function time_ne ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns true if time1 /= time2.

Parameters
[in]time1time interval to compare
[in]time2time interval to compare

Definition at line 716 of file time_manager.F90.

◆ time_plus()

type(time_type) function time_plus ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns sum of two time_types.

Parameters
[in]time1time interval to add
[in]time2time interval to add

Definition at line 728 of file time_manager.F90.

◆ time_real_divide()

real(r8_kind) function time_real_divide ( type(time_type), intent(in)  time1,
type(time_type), intent(in)  time2 
)
private

Returns the double precision quotient of two times.

Parameters
[in]time1a time interval (dividend)
[in]time2a time interval (divisor)

Definition at line 838 of file time_manager.F90.

◆ time_scalar_divide()

type(time_type) function time_scalar_divide ( type(time_type), intent(in)  time,
integer, intent(in)  n 
)
private

Returns the largest time, t, for which n * t <= time.

Parameters
[in]timetime interval to divide
[in]ndivisor

Definition at line 944 of file time_manager.F90.

◆ time_scalar_mult()

type(time_type) function time_scalar_mult ( type(time_type), intent(in)  time,
integer, intent(in)  n 
)
private

Returns time multiplied by integer factor n.

Parameters
[in]timetime interval to multply
[in]nfactor to multiply by

Definition at line 761 of file time_manager.F90.

◆ time_type_to_real()

real(kind=r8_kind) function, public time_type_to_real ( type(time_type), intent(in)  time)

Converts time to seconds and returns it as a real number.

Definition at line 870 of file time_manager.F90.

◆ valid_calendar_types()

character(len=24) function, public valid_calendar_types ( integer, intent(in)  ncal,
character(len=*), intent(out), optional  err_msg 
)

Returns a character string that describes the calendar type corresponding to the input integer.

Returns
A character string describing the calendar type
Parameters
[in]ncalInteger corresponding to a valid calendar type
[out]err_msgHolds an error message when present

Definition at line 2589 of file time_manager.F90.

◆ valid_increments()

logical function valid_increments ( integer, intent(in)  year,
integer, intent(in)  month,
integer, intent(in)  day,
integer, intent(in)  hour,
integer, intent(in)  minute,
integer, intent(in)  second,
integer, intent(in)  tick,
character(len=128), intent(out)  err_msg 
)
private

Definition at line 1842 of file time_manager.F90.

Variable Documentation

◆ calendar_type

integer, private calendar_type = NO_CALENDAR
private

Definition at line 126 of file time_manager.F90.

◆ days_in_400_year_period

integer, parameter days_in_400_year_period = 146097
private

Used only for gregorian.

Definition at line 132 of file time_manager.F90.

◆ days_per_month

integer, dimension(12), private days_per_month = (/31,28,31,30,31,30,31,31,30,31,30,31/)
private

Definition at line 130 of file time_manager.F90.

◆ do_floor

integer, parameter do_floor = 0
private

Definition at line 133 of file time_manager.F90.

◆ do_nearest

integer, parameter do_nearest = 1
private

Definition at line 134 of file time_manager.F90.

◆ gregorian

integer, parameter, public gregorian = 3

Definition at line 123 of file time_manager.F90.

◆ invalid_calendar

integer, parameter, public invalid_calendar =-1

Definition at line 123 of file time_manager.F90.

◆ julian

integer, parameter, public julian = 2

Definition at line 123 of file time_manager.F90.

◆ max_type

integer, parameter max_type = 4
private

Definition at line 127 of file time_manager.F90.

◆ module_is_initialized

logical module_is_initialized = .false.
private

Definition at line 266 of file time_manager.F90.

◆ no_calendar

integer, parameter, public no_calendar = 0

Definition at line 123 of file time_manager.F90.

◆ noleap

integer, parameter, public noleap = 4

Definition at line 123 of file time_manager.F90.

◆ seconds_per_day

integer, parameter seconds_per_day = rseconds_per_day
private

Definition at line 131 of file time_manager.F90.

◆ ticks_per_second

integer ticks_per_second = 1
private

Definition at line 273 of file time_manager.F90.