My Project
Data Types | Functions/Subroutines | Variables
mod_time Module Reference

Data Types

interface  abs
 
interface  assignment(=)
 
interface  days2time
 
interface  mod
 
interface  operator(*)
 
interface  operator(+)
 
interface  operator(-)
 
interface  operator(/)
 
interface  operator(/=)
 
interface  operator(<)
 
interface  operator(<=)
 
interface  operator(==)
 
interface  operator(>)
 
interface  operator(>=)
 
interface  seconds2time
 
type  time
 

Functions/Subroutines

type(time) function abs_time (A)
 
type(time) function modulo_time (A, B)
 
type(time) function days2time_dbl (DAYS)
 
type(time) function days2time_int (DAYS)
 
type(time) function days2time_lint (DAYS)
 
type(time) function days2time_flt (DAYS)
 
type(time) function seconds2time_dbl (SECS)
 
type(time) function seconds2time_int (SECS)
 
type(time) function seconds2time_lint (SECS)
 
type(time) function seconds2time_flt (SECS)
 
integer function time2ncitime (MJD, RJD, D, MS)
 
type(time) function ncitime (D, MS)
 
subroutine adjust (MJD)
 
type(time) function read_time (timestr, status, TZONE)
 
type(time) function time_zone (TZONE, status)
 
logical function is_valid_timezone (timezone)
 
type(time) function read_datetime (timestr, frmt, TZONE, status)
 
character(len=80) function write_datetime (mjdin, prec, TZONE)
 
type(time) function get_now ()
 
real(dp) function seconds (MJD)
 
real(dp) function days (MJD)
 
type(time) function int_x_time (int, MJD)
 
type(time) function long_x_time (long, MJD)
 
type(time) function time_x_int (MJD, int)
 
type(time) function time_x_long (MJD, long)
 
type(time) function time_x_flt (MJD, flt)
 
type(time) recursive function time_x_dbl (MJD, dbl)
 
type(time) function flt_x_time (flt, MJD)
 
type(time) function dbl_x_time (dbl, MJD)
 
type(time) function time_div_int (MJD, int)
 
type(time) function time_div_long (MJD, long)
 
type(time) function time_div_flt (MJD, flt)
 
type(time) function time_div_dbl (MJD, dbl)
 
type(time) function add_time (time1, time2)
 
type(time) function, dimension(size(time1)) add_time_1 (time1, time2)
 
type(time) function, dimension(size(time1)) add_time_1a (time1, time2)
 
type(time) function, dimension(size(time2)) add_time_a1 (time1, time2)
 
type(time) function, dimension(size(time1, 1), size(time1, 2)) add_time_2 (time1, time2)
 
type(time) function, dimension(size(time1, 1), size(time1, 2)) add_time_2a (time1, time2)
 
type(time) function, dimension(size(time2, 1), size(time2, 2)) add_time_a2 (time1, time2)
 
type(time) function subtract_time (time1, time2)
 
type(time) function, dimension(size(time1)) subtract_time_1 (time1, time2)
 
type(time) function, dimension(size(time2)) subtract_time_1a (time1, time2)
 
type(time) function, dimension(size(time1)) subtract_time_a1 (time1, time2)
 
type(time) function, dimension(size(time1, 1), size(time1, 2)) subtract_time_2 (time1, time2)
 
type(time) function, dimension(size(time1, 1), size(time1, 2)) subtract_time_2a (time1, time2)
 
type(time) function, dimension(size(time2, 1), size(time2, 2)) subtract_time_a2 (time1, time2)
 
subroutine assign_time (A, B)
 
logical function le_time (time1, time2)
 
logical function lt_time (time1, time2)
 
logical function eq_time (time1, time2)
 
logical function ne_time (time1, time2)
 
logical function ge_time (time1, time2)
 
logical function gt_time (time1, time2)
 
subroutine print_time (mjd, IPT, char)
 
subroutine print_real_time (mjd, IPT, char, TZONE)
 
subroutine now_2_month_days (TTime, Pyear, Pmonth, Pmdays)
 
subroutine now_2_days_test
 

Variables

integer, parameter itime = SELECTED_INT_KIND(18)
 
integer mpi_time
 
integer(itime), parameter spd = 86400
 
integer(itime), parameter mspd = spd * 1000
 
integer(itime), parameter muspd = mspd * 1000
 
integer(itime), parameter million = 10**6
 

Function/Subroutine Documentation

◆ abs_time()

type(time) function mod_time::abs_time ( type(time), intent(in)  A)

Definition at line 166 of file mod_time.f90.

166  IMPLICIT NONE
167  TYPE(TIME), INTENT(IN) ::A
168 
169  CALL adjust(a)
170 
171  abs_time%mjd = abs(a%mjd)
172  abs_time%musod = abs(a%musod)
173 
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function abs_time(A)
Definition: mod_time.f90:166
Here is the call graph for this function:

◆ add_time()

type(time) function mod_time::add_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 916 of file mod_time.f90.

916  IMPLICIT NONE
917  TYPE(TIME), INTENT(IN) :: time1, time2
918  integer(itime) :: musec
919 
920  add_time%MuSOD = time1%MuSOD + time2%MuSOD
921  add_time%mjd = time1%mjd + time2%mjd
922 
923  call adjust(add_time)
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function add_time(time1, time2)
Definition: mod_time.f90:916
Here is the call graph for this function:

◆ add_time_1()

type(time) function, dimension(size(time1)) mod_time::add_time_1 ( type(time), dimension(:), intent(in)  time1,
type(time), dimension(:), intent(in)  time2 
)

Definition at line 927 of file mod_time.f90.

927  IMPLICIT NONE
928  TYPE(TIME), INTENT(IN) :: time1(:), time2(:)
929  TYPE(TIME), DIMENSION(SIZE(TIME1)) :: TSUM
930  INTEGER :: I
931 
932  DO i = 1,SIZE(time1)
933  tsum(i) = time1(i) + time2(i)
934  END DO

◆ add_time_1a()

type(time) function, dimension(size(time1)) mod_time::add_time_1a ( type(time), dimension(:), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 938 of file mod_time.f90.

938  IMPLICIT NONE
939  TYPE(TIME), INTENT(IN) :: time1(:), time2
940  TYPE(TIME), DIMENSION(SIZE(TIME1)) :: TSUM
941  INTEGER :: I
942 
943  DO i = 1,SIZE(time1)
944  tsum(i) = time1(i) + time2
945  END DO

◆ add_time_2()

type(time) function, dimension(size(time1,1),size(time1,2)) mod_time::add_time_2 ( type(time), dimension(:,:), intent(in)  time1,
type(time), dimension(:,:), intent(in)  time2 
)

Definition at line 960 of file mod_time.f90.

960  IMPLICIT NONE
961  TYPE(TIME), INTENT(IN) :: time1(:,:), time2(:,:)
962  TYPE(TIME), DIMENSION(SIZE(TIME1,1),size(time1,2)) :: TSUM
963  INTEGER :: I,J
964 
965  DO i = 1,SIZE(time1,1)
966  DO j = 1,SIZE(time1,2)
967  tsum(i,j) = time1(i,j) + time2(i,j)
968  END DO
969  END DO

◆ add_time_2a()

type(time) function, dimension(size(time1,1),size(time1,2)) mod_time::add_time_2a ( type(time), dimension(:,:), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 973 of file mod_time.f90.

973  IMPLICIT NONE
974  TYPE(TIME), INTENT(IN) :: time1(:,:), time2
975  TYPE(TIME), DIMENSION(SIZE(TIME1,1),size(time1,2)) :: TSUM
976  INTEGER :: I,J
977 
978  DO i = 1,SIZE(time1,1)
979  DO j = 1,SIZE(time1,2)
980  tsum(i,j) = time1(i,j) + time2
981  END DO
982  END DO

◆ add_time_a1()

type(time) function, dimension(size(time2)) mod_time::add_time_a1 ( type(time), intent(in)  time1,
type(time), dimension(:), intent(in)  time2 
)

Definition at line 949 of file mod_time.f90.

949  IMPLICIT NONE
950  TYPE(TIME), INTENT(IN) :: time1, time2(:)
951  TYPE(TIME), DIMENSION(SIZE(TIME2)) :: TSUM
952  INTEGER :: I
953 
954  DO i = 1,SIZE(time2)
955  tsum(i) = time1 + time2(i)
956  END DO

◆ add_time_a2()

type(time) function, dimension(size(time2,1),size(time2,2)) mod_time::add_time_a2 ( type(time), intent(in)  time1,
type(time), dimension(:,:), intent(in)  time2 
)

Definition at line 986 of file mod_time.f90.

986  IMPLICIT NONE
987  TYPE(TIME), INTENT(IN) :: time1, time2(:,:)
988  TYPE(TIME), DIMENSION(SIZE(TIME2,1),size(time2,2)) :: TSUM
989  INTEGER :: I,J
990 
991  DO i = 1,SIZE(time2,1)
992  DO j = 1,SIZE(time2,2)
993  tsum(i,j) = time1 + time2(i,j)
994  END DO
995  END DO

◆ adjust()

subroutine mod_time::adjust ( type(time MJD)

Definition at line 377 of file mod_time.f90.

377  implicit none
378  TYPE(TIME) :: MJD
379  integer(itime) :: musec
380  integer(itime) :: idays
381 ! print*,"+++++++++++++begin adjust+++++++++++++++++"
382 ! write(*,*) "MJD in= ",MJD%MJD
383 ! write(*,*) "MUSOD in= ",MJD%MuSOD
384 
385  musec = mod(mjd%MuSOD, muspd)
386 ! print *,"musec= ", musec
387 
388  idays = (mjd%MuSOD - musec)/ muspd
389 ! print *, "idays= ",idays
390  mjd%mjd = mjd%mjd + idays
391  mjd%MuSOD = musec
392 
393 
394 ! call print_time(mjd,6,"intermediate")
395 
396  if (mjd%MuSOD .GT. 0 .AND. mjd%mjd .LT. 0) then
397  mjd%mjd=mjd%mjd+1
398  mjd%MuSOD=mjd%MuSOD-muspd
399 ! call print_time(mjd,6,"if... out")
400  return
401  else if (mjd%MuSOD .LT. 0 .AND.mjd%mjd .GT. 0 ) then
402  mjd%MuSOD = muspd + mjd%MuSOD
403  mjd%mjd = mjd%mjd -1
404 ! call print_time(mjd,6,"else if... out")
405  return
406  else
407 ! call print_time(mjd,6,"else... out")
408  return
409  end if
410 ! print*,"+++++++++++++END adjust+++++++++++++++++"
411 
integer(itime), parameter muspd
Definition: mod_time.f90:159
Here is the caller graph for this function:

◆ assign_time()

subroutine mod_time::assign_time ( type(time), intent(out)  A,
type(time), intent(in)  B 
)

Definition at line 1096 of file mod_time.f90.

1096  IMPLICIT NONE
1097  TYPE(TIME), INTENT(OUT) ::A
1098  TYPE(TIME), INTENT(IN) ::B
1099 
1100  a%MJD = b%MJD
1101  a%MUSOD = b%MUSOD
1102 

◆ days()

real(dp) function mod_time::days ( type(time), intent(in)  MJD)

Definition at line 749 of file mod_time.f90.

749  IMPLICIT NONE
750  TYPE(TIME), INTENT(IN):: MJD
751 
752  days = dble(mjd%mjd) + dble(mjd%MUSOD)/dble(muspd)
integer(itime), parameter muspd
Definition: mod_time.f90:159
real(dp) function days(MJD)
Definition: mod_time.f90:749
Here is the caller graph for this function:

◆ days2time_dbl()

type(time) function mod_time::days2time_dbl ( real(dp), intent(in)  DAYS)

Definition at line 261 of file mod_time.f90.

261  implicit none
262  TYPE(TIME) :: MJD
263  real(DP), INTENT(IN) :: DAYS
264  real(DP) :: TEMP
265 
266  mjd%mjd = anint(days,itime)
267  temp = days - anint(days,itime)
268  mjd%MuSOD = anint(temp*real(muspd,dp),itime)
269  CALL adjust(mjd)
270  days2time_dbl = mjd
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function days2time_dbl(DAYS)
Definition: mod_time.f90:261
integer(itime), parameter muspd
Definition: mod_time.f90:159
real(dp) function days(MJD)
Definition: mod_time.f90:749
integer, parameter dp
Definition: mod_prec.f90:52
integer, parameter itime
Definition: mod_time.f90:48
Here is the call graph for this function:
Here is the caller graph for this function:

◆ days2time_flt()

type(time) function mod_time::days2time_flt ( real(spa), intent(in)  DAYS)

Definition at line 294 of file mod_time.f90.

294  implicit none
295  real(SPA), INTENT(IN) :: DAYS
296  real(DP) :: TEMP
297  temp = dble(days)
type(time) function days2time_flt(DAYS)
Definition: mod_time.f90:294
type(time) function days2time_dbl(DAYS)
Definition: mod_time.f90:261
real(dp) function days(MJD)
Definition: mod_time.f90:749
Here is the call graph for this function:

◆ days2time_int()

type(time) function mod_time::days2time_int ( integer, intent(in)  DAYS)

Definition at line 274 of file mod_time.f90.

274  implicit none
275  TYPE(TIME) :: MJD
276  INTEGER, INTENT(IN) :: DAYS
277 
278  mjd%mjd = days
279  mjd%MuSOD = 0
280  days2time_int = mjd
type(time) function days2time_int(DAYS)
Definition: mod_time.f90:274
real(dp) function days(MJD)
Definition: mod_time.f90:749
Here is the call graph for this function:

◆ days2time_lint()

type(time) function mod_time::days2time_lint ( integer(itime), intent(in)  DAYS)

Definition at line 284 of file mod_time.f90.

284  implicit none
285  TYPE(TIME) :: MJD
286  INTEGER(ITIME), INTENT(IN) :: DAYS
287 
288  mjd%mjd = days
289  mjd%MuSOD = 0
290  days2time_lint = mjd
real(dp) function days(MJD)
Definition: mod_time.f90:749
type(time) function days2time_lint(DAYS)
Definition: mod_time.f90:284
Here is the call graph for this function:

◆ dbl_x_time()

type(time) function mod_time::dbl_x_time ( real(dp), intent(in)  dbl,
type(time), intent(in)  MJD 
)

Definition at line 853 of file mod_time.f90.

853  IMPLICIT NONE
854  TYPE(TIME), INTENT(IN) :: MJD
855  real(DP), INTENT(in) :: dbl
856 
857  dbl_x_time = mjd * dbl
858 
type(time) function dbl_x_time(dbl, MJD)
Definition: mod_time.f90:853

◆ eq_time()

logical function mod_time::eq_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1128 of file mod_time.f90.

1128  IMPLICIT NONE
1129  TYPE(TIME), INTENT(IN) :: time1, time2
1130  eq_time = .false.
1131  if (time1%MJD .EQ. time2%MJD .and. &
1132  & time1%MuSOD .EQ. time2%MuSOD ) eq_time = .true.
logical function eq_time(time1, time2)
Definition: mod_time.f90:1128
Here is the caller graph for this function:

◆ flt_x_time()

type(time) function mod_time::flt_x_time ( real(spa), intent(in)  flt,
type(time), intent(in)  MJD 
)

Definition at line 841 of file mod_time.f90.

841  IMPLICIT NONE
842  TYPE(TIME), INTENT(IN) :: MJD
843  real(SPA), INTENT(in) :: flt
844  real(DP) :: dbl
845 
846  dbl = dble(flt)
847 ! if(DBG_SET(dbg_log)) print*,'dbl=',dbl
848  flt_x_time = mjd * dbl
849 
type(time) function flt_x_time(flt, MJD)
Definition: mod_time.f90:841

◆ ge_time()

logical function mod_time::ge_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1145 of file mod_time.f90.

1145  IMPLICIT NONE
1146  TYPE(TIME), INTENT(IN) :: time1, time2
1147  TYPE(TIME) dtime
1148  ge_time = .false.
1149  dtime = time1 - time2
1150  if (dtime%MJD .gt. 0 .or. &
1151  & (dtime%MJD .EQ. 0 .and. dtime%MuSOD .GE. 0) ) ge_time = .true.
logical function ge_time(time1, time2)
Definition: mod_time.f90:1145

◆ get_now()

type(time) function mod_time::get_now ( )

Definition at line 716 of file mod_time.f90.

716  IMPLICIT NONE
717  include 'fjulian.inc'
718  CHARACTER(LEN=8) D
719  CHARACTER(LEN=10) T
720  CHARACTER(LEN=5) Z
721  CHARACTER(LEN=15) toff
722  CHARACTER(LEN=25) TS
723  TYPE(TIME) :: tzone
724  integer :: dutc
725  real(DP) :: secs
726  integer status
727 
728  CALL date_and_time ( date=d,time=t, zone=z)
729 
730  ! GET TIME ZONE
731  toff = z(1:3)//":"//z(4:5)
732 
733  ! GET TIME
734  ts = d(1:4)//"/"//d(5:6)//"/"//d(7:8)// &
735  & " "//t(1:2)//":"//t(3:4)//":"//t(5:8)
736 
737  get_now = read_datetime(trim(ts),'ymd',toff,status)
738 
type(time) function get_now()
Definition: mod_time.f90:716
type(time) function read_datetime(timestr, frmt, TZONE, status)
Definition: mod_time.f90:640
Here is the call graph for this function:
Here is the caller graph for this function:

◆ gt_time()

logical function mod_time::gt_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1156 of file mod_time.f90.

1156  IMPLICIT NONE
1157  TYPE(TIME), INTENT(IN) :: time1, time2
1158  TYPE(TIME) dtime
1159  gt_time = .false.
1160  dtime = time1 - time2
1161  if (dtime%MJD .gt. 0 .or. dtime%MuSOD .gt. 0 ) gt_time = .true.
logical function gt_time(time1, time2)
Definition: mod_time.f90:1156

◆ int_x_time()

type(time) function mod_time::int_x_time ( integer, intent(in)  int,
type(time), intent(in)  MJD 
)

Definition at line 758 of file mod_time.f90.

758  IMPLICIT NONE
759  TYPE(TIME), INTENT(IN) :: MJD
760  integer, INTENT(IN) :: int
761 
762  int_x_time%MuSOD=mjd%MuSOD * int
763  int_x_time%mjd=mjd%mjd * int
764 
765 
766  call adjust(int_x_time)
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function int_x_time(int, MJD)
Definition: mod_time.f90:758
Here is the call graph for this function:

◆ is_valid_timezone()

logical function mod_time::is_valid_timezone ( character(len=*), intent(in)  timezone)

Definition at line 628 of file mod_time.f90.

628  IMPLICIT NONE
629  character(Len=*), intent(in):: timezone
630  TYPE(TIME) :: TEST
631  integer :: status
632 
633  is_valid_timezone=.false.
634  test = time_zone(timezone,status)
635  if (status==1) is_valid_timezone=.true.
636 
type(time) function time_zone(TZONE, status)
Definition: mod_time.f90:444
logical function is_valid_timezone(timezone)
Definition: mod_time.f90:628
Here is the call graph for this function:
Here is the caller graph for this function:

◆ le_time()

logical function mod_time::le_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1107 of file mod_time.f90.

1107  IMPLICIT NONE
1108  TYPE(TIME), INTENT(IN) :: time1, time2
1109  TYPE(TIME) dtime
1110  le_time = .false.
1111  dtime = time1 - time2
1112  if (dtime%MJD .lt. 0 .or. &
1113  & (dtime%MJD .EQ. 0 .and. dtime%MuSOD .LE. 0) ) le_time = .true.
logical function le_time(time1, time2)
Definition: mod_time.f90:1107

◆ long_x_time()

type(time) function mod_time::long_x_time ( integer(itime), intent(in)  long,
type(time), intent(in)  MJD 
)

Definition at line 770 of file mod_time.f90.

770  IMPLICIT NONE
771  TYPE(TIME), INTENT(IN) :: MJD
772  integer(itime), INTENT(IN) :: long
773 
774  long_x_time%MuSOD=mjd%MuSOD * long
775  long_x_time%mjd=mjd%mjd * long
776 
777 
778  call adjust(long_x_time)
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function long_x_time(long, MJD)
Definition: mod_time.f90:770
Here is the call graph for this function:

◆ lt_time()

logical function mod_time::lt_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1118 of file mod_time.f90.

1118  IMPLICIT NONE
1119  TYPE(TIME), INTENT(IN) :: time1, time2
1120  TYPE(TIME) dtime
1121  lt_time = .false.
1122  dtime = time1 - time2
1123  if (dtime%MJD .lt. 0 .or. dtime%MuSOD .lt. 0) lt_time = .true.
logical function lt_time(time1, time2)
Definition: mod_time.f90:1118

◆ modulo_time()

type(time) function mod_time::modulo_time ( type(time), intent(in)  A,
type(time), intent(in)  B 
)

Definition at line 177 of file mod_time.f90.

177 ! COMMENTS: THIS PROGRAM IS ROBUST BUT SLOW.....
178  IMPLICIT NONE
179  TYPE(TIME), INTENT(IN) ::A,B
180  real(DP) :: DPA,DPB,DIV,CNT
181  TYPE(TIME) ::T, ZT
182 
183  zt%mjd=0
184  zt%MuSOD=0
185 
186  dpa = days(a)
187  dpb = days(b)
188  div = dpa/dpb
189 
190  cnt = 1.0_dp
191 
192  IF(abs(div) .GT. 1e5_dp) cnt = log10(abs(div))
193 
194  IF( abs(div) .GT. 1e16_dp) THEN
195  ! THE DIVISOR EXCEEDS THE NUMERICAL ACCURACY - RETURN A BAD RESULT!
196  modulo_time%MJD = -huge(zt%mjd)
197  modulo_time%MUSOD = -huge(zt%musod)
198  RETURN
199  END IF
200 
201 
202 
203  IF (b .EQ. zt) THEN
204  ! SECOND ARGUMENT IS ZERO - ESCAPE
205  modulo_time%MJD = huge(zt%mjd)
206  modulo_time%MUSOD = huge(zt%musod)
207 
208  ELSE IF(abs(a) .LT. abs(b))THEN
209  ! THE FIRST IS SMALLER THAN THE SECOND
210  modulo_time = a
211 
212  ELSE IF(abs(a) .EQ. abs(b))THEN
213  ! THE FIRST IS SMALLER THAN THE SECOND
214  modulo_time = zt
215 
216  ELSE IF (a .GT. zt .and. b .GT. zt) THEN
217  ! BOTH ARE POSITIVE
218 
219  t = b * int((div-cnt),itime)
220  DO WHILE (a .GE. t+b)
221  t = t +b
222  END DO
223 
224  modulo_time = a - t
225  ELSE IF(a .LT. zt .and. b .LT. zt) THEN
226  ! BOTH ARE NEGATIVE
227 
228  t = b * int((div-cnt),itime)
229  DO WHILE(a .LE. t+b)
230  t = t +b
231  END DO
232  modulo_time = a - t
233  ELSE IF (a .LT. zt .and. b .GT. zt) THEN
234  ! A IS NEGATIVE AND B IS POSITIVE
235 
236  t = b * int((div+cnt),itime)
237  DO WHILE(a .LE. t-b)
238  t = t -b
239  END DO
240  modulo_time = a - t
241 
242  ELSE IF (a .GT. zt .and. b .LT. zt) THEN
243  ! A IS POSITIVE AND B IS NEGATIVE
244 
245  t = b * int((div+cnt),itime)
246  DO WHILE(a .GE. t-b)
247  t = t-b
248  END DO
249  modulo_time = a - t
250  ELSE
251 
252  ! THIS SHOULD NEVER HAPPEN!
253  modulo_time%MJD = -huge(zt%mjd)
254  modulo_time%MUSOD = -huge(zt%musod)
255 
256  END IF
257 
type(time) function modulo_time(A, B)
Definition: mod_time.f90:177
real(dp) function days(MJD)
Definition: mod_time.f90:749
integer, parameter itime
Definition: mod_time.f90:48
Here is the call graph for this function:

◆ ncitime()

type(time) function mod_time::ncitime ( integer, intent(in)  D,
integer, intent(in)  MS 
)

Definition at line 366 of file mod_time.f90.

366  implicit none
367  TYPE(TIME) :: MJD
368  INTEGER, INTENT(IN) :: D, MS
369 
370  mjd%MJD = d
371 
372  mjd%MuSod= int(ms,itime)* int(1000,itime)
373 
integer, parameter itime
Definition: mod_time.f90:48

◆ ne_time()

logical function mod_time::ne_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1137 of file mod_time.f90.

1137  IMPLICIT NONE
1138  TYPE(TIME), INTENT(IN) :: time1, time2
1139  ne_time = .true.
1140  if (eq_time(time1,time2) ) ne_time = .false.
logical function ne_time(time1, time2)
Definition: mod_time.f90:1137
logical function eq_time(time1, time2)
Definition: mod_time.f90:1128
Here is the call graph for this function:

◆ now_2_days_test()

subroutine mod_time::now_2_days_test ( )

Definition at line 1304 of file mod_time.f90.

1304  IMPLICIT NONE
1305  include 'fjulian.inc'
1306  Integer :: Iyear,Imonth
1307  Integer :: Pmonth,Pmdays
1308 !======================================================
1309  CHARACTER(LEN=8) D
1310  CHARACTER(LEN=10) T
1311  CHARACTER(LEN=5) Z
1312  CHARACTER(LEN=15) toff
1313  CHARACTER(LEN=25) TS
1314  TYPE(TIME) :: tzone
1315  integer :: dutc
1316  real(DP) :: secs
1317  integer status
1318  TYPE(TIME) ::Time1, Time2
1319  CHARACTER(LEN=120) :: string_local, string_utc
1320  CHARACTER(LEN=10) :: string_tt
1321 
1322  !CALL DATE_AND_TIME ( DATE=D,TIME=T, ZONE=Z)
1323 
1324  d='1990-01-01'
1325  toff = '0:00'
1326 
1327  ! TS1
1328  iyear=01
1329  pmonth=01
1330  write(d(1:4),'(I4.4)') iyear
1331  write(d(5:6),'(I2.2)') pmonth
1332 
1333  d(7:8)='01'
1334  t(1:8)='00000000'
1335 
1336  ! First day of Present month
1337  ts = d(1:4)//"/"//d(5:6)//"/"//d(7:8)// &
1338  & " "//t(1:2)//":"//t(3:4)//":"//t(5:8)
1339 
1340  time1 = read_datetime(trim(ts),'ymd',toff,status)
1341 
1342  ! TS1
1343  iyear=01995
1344  pmonth=01
1345  write(d(1:4),'(I4.4)') iyear
1346  write(d(5:6),'(I2.2)') pmonth
1347 
1348  d(7:8)='01'
1349  t(1:8)='00000000'
1350 
1351  ! First day of Present month
1352  ts = d(1:4)//"/"//d(5:6)//"/"//d(7:8)// &
1353  & " "//t(1:2)//":"//t(3:4)//":"//t(5:8)
1354 
1355  time1 = read_datetime(trim(ts),'ymd',toff,status)
1356 
1357 
type(time) function read_datetime(timestr, frmt, TZONE, status)
Definition: mod_time.f90:640
Here is the call graph for this function:

◆ now_2_month_days()

subroutine mod_time::now_2_month_days ( type(time), intent(in)  TTime,
integer, intent(out)  Pyear,
integer, intent(out)  Pmonth,
integer, intent(out)  Pmdays 
)

Definition at line 1234 of file mod_time.f90.

1234  IMPLICIT NONE
1235  include 'fjulian.inc'
1236  TYPE(TIME), INTENT(IN) ::TTime
1237  Integer, INTENT(OUT) :: Pyear,Pmonth,Pmdays
1238  Integer :: Iyear,Imonth
1239 !======================================================
1240  CHARACTER(LEN=8) D
1241  CHARACTER(LEN=10) T
1242  CHARACTER(LEN=5) Z
1243  CHARACTER(LEN=15) toff
1244  CHARACTER(LEN=25) TS
1245  TYPE(TIME) :: tzone
1246  integer :: dutc
1247  real(DP) :: secs
1248  integer status
1249  TYPE(TIME) ::Time1, Time2
1250  CHARACTER(LEN=120) :: string_local, string_utc
1251  CHARACTER(LEN=10) :: string_tt
1252 
1253  !CALL DATE_AND_TIME ( DATE=D,TIME=T, ZONE=Z)
1254 
1255  !string_utc = WRITE_DATETIME(mjd,6,"UTC")
1256  string_local = write_datetime(ttime,6,"UTC")
1257 
1258  string_tt=trim(string_local)
1259  d(1:4)=string_tt(1:4)
1260  d(5:6)=string_tt(6:7)
1261  d(7:8)=string_tt(9:10)
1262 
1263  ! GET TIME ZONE
1264  !toff = Z(1:3)//":"//Z(4:5)
1265  toff = '0:00'
1266 
1267  !! get the month from D(5:6)
1268  ! TS1
1269  read(d(1:4),'(I4)') iyear
1270  read(d(5:6),'(I2)') pmonth
1271 
1272  pyear = iyear
1273 
1274  d(7:8)='01'
1275  t(1:8)='00000000'
1276 
1277  ! First day of Present month
1278  ts = d(1:4)//"/"//d(5:6)//"/"//d(7:8)// &
1279  & " "//t(1:2)//":"//t(3:4)//":"//t(5:8)
1280 
1281  time1 = read_datetime(trim(ts),'ymd',toff,status)
1282 
1283  ! First day of next month
1284  imonth=pmonth+1
1285  if(imonth>12) then !! to next year
1286  imonth=1
1287  iyear =iyear+1
1288  endif
1289  write(d(1:4),'(I4.4)') iyear
1290  write(d(5:6),'(I2.2)') imonth
1291 
1292 
1293  ts = d(1:4)//"/"//d(5:6)//"/"//d(7:8)// &
1294  & " "//t(1:2)//":"//t(3:4)//":"//t(5:8)
1295 
1296  time2 = read_datetime(trim(ts),'ymd',toff,status)
1297 
1298  pmdays = time2%mjd -time1%mjd
1299 
type(time) function read_datetime(timestr, frmt, TZONE, status)
Definition: mod_time.f90:640
character(len=80) function write_datetime(mjdin, prec, TZONE)
Definition: mod_time.f90:682
Here is the call graph for this function:

◆ print_real_time()

subroutine mod_time::print_real_time ( type(time), intent(in)  mjd,
integer, intent(in)  IPT,
character(len=*), intent(in)  char,
character(len=*), intent(in), optional  TZONE 
)

Definition at line 1201 of file mod_time.f90.

1201  implicit none
1202  CHARACTER(Len=*), INTENT(IN) :: char
1203  INTEGER, INTENT(IN) :: IPT
1204  TYPE(TIME),INTENT(IN) :: mjd
1205  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: TZONE
1206  CHARACTER(LEN=120) :: string_local, string_utc
1207 
1208 
1209  IF(PRESENT(tzone)) THEN
1210  ! IF THIS IS AN IDEAL TIME OR CASE THEN USE PRINT_TIME
1211  IF(tzone=="none" .or. tzone == "NONE") THEN
1212  CALL print_time(mjd,ipt,char)
1213  RETURN
1214  END IF
1215 
1216  string_local = write_datetime(mjd,6,tzone)
1217  string_local = "! (Local Time="//trim(string_local)//"); time zone: "//trim(tzone)
1218  END IF
1219 
1220  string_utc = write_datetime(mjd,6,"UTC")
1221 
1222  write(ipt,*)"!========"//trim(char)// "=========="
1223  write(ipt,*)"! Day # :", mjd%mjd
1224  write(ipt,*)"! MicroSecond #:", mjd%MuSOD
1225  write(ipt,*)"! (Date Time="//trim(string_utc)//")"
1226  IF(PRESENT(tzone)) write(ipt,*) string_local
1227  write(ipt,*)"!=========================="
1228 
subroutine print_time(mjd, IPT, char)
Definition: mod_time.f90:1166
character(len=80) function write_datetime(mjdin, prec, TZONE)
Definition: mod_time.f90:682
Here is the call graph for this function:
Here is the caller graph for this function:

◆ print_time()

subroutine mod_time::print_time ( type(time), intent(in)  mjd,
integer, intent(in)  IPT,
character(len=*), intent(in)  char 
)

Definition at line 1166 of file mod_time.f90.

1166  implicit none
1167  CHARACTER(Len=*), INTENT(IN) :: char
1168  INTEGER, INTENT(IN) :: IPT
1169  TYPE(TIME),INTENT(IN) :: mjd
1170  real(DP) :: tmp, seconds
1171  integer :: hours, minutes
1172  Character(len=3) :: h, m
1173  Character(Len=10) :: s
1174  Character(len=8) :: d
1175 
1176  tmp = real(mjd%MuSOD,dp) / real(million,dp)
1177 
1178  hours = tmp/3600
1179  minutes = (tmp-hours*3600)/60
1180  seconds = mod(tmp,60.0_dp)
1181 
1182  write(d,'(i8.7)') mjd%mjd
1183  write(h,'(i3.2)') hours
1184  write(m,'(i3.2)') minutes
1185  write(s,'(F10.6)') seconds
1186 
1187  d = adjustl(d)
1188  h = adjustl(h)
1189  m = adjustl(m)
1190  s = adjustl(s)
1191 
1192  write(ipt,*)"!========"//trim(char)// "=========="
1193  write(ipt,*)"! Day # :", mjd%mjd
1194  write(ipt,*)"! MicroSecond #:", mjd%MuSOD
1195  write(ipt,*)"! (Human Time=d "//trim(d)//"::h"//trim(h)//":m"//trim(m)//":s"//trim(s)//")"
1196  write(ipt,*)"!=========================="
1197 
real(dp) function seconds(MJD)
Definition: mod_time.f90:742
integer, parameter dp
Definition: mod_prec.f90:52
integer(itime), parameter million
Definition: mod_time.f90:160
Here is the caller graph for this function:

◆ read_datetime()

type(time) function mod_time::read_datetime ( character(len=*)  timestr,
character(len=*), intent(in)  frmt,
character(len=*), intent(in)  TZONE,
integer, intent(out)  status 
)

Definition at line 640 of file mod_time.f90.

640  ! RETURN VALUES FOR STATUS:
641  !
642  ! STATUS = -1 => SUCCESS
643  !
644  ! STATUS = 0 => FAILURE
645  IMPLICIT NONE
646  include 'fjulian.inc'
647  character(Len=*) :: timestr ! DO NOT USE INTENT ATTRIBUTE
648  character(Len=*), intent(in) :: frmt
649  integer, intent(out) :: status
650 ! CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: TZONE
651  CHARACTER(LEN=*), INTENT(IN) :: TZONE
652 
653  TYPE(TIME) :: mjd
654  TYPE(TIME) :: DZONE
655  integer :: dutc, pos
656  real(DP) :: secs, tai,rmjd
657  logical :: statl
658 
659  statl = fjul_parsedt(timestr, frmt, dutc, secs)
660  if (.NOT. statl) then
661  ! KNOWN WEEKNESS OF PARSE: CAN'T USE '_' AS A DELIMITER
662  pos = index(timestr,'_')
663  IF(pos == 0 ) return
664  ! IF YOU FOUND '_' replace it with a ' '
665  timestr(pos:pos) = ' '
666  statl = fjul_parsedt(timestr, frmt, dutc, secs)
667  ! IF STILL UNSUCCESSFUL RETURN FAULT
668  if(.not. statl) return
669  end if
670  status = 0
671  if(statl) status = 1
672  mjd%MuSOD = anint(secs*million,itime)
673  tai = fjul_taiofdutc(dutc)
674  mjd%mjd = anint(fjul_mjdoftai(tai, fjul_utc_type),itime)
675 
676  read_datetime = mjd - time_zone(tzone,status)
677 
678 
type(time) function read_datetime(timestr, frmt, TZONE, status)
Definition: mod_time.f90:640
type(time) function time_zone(TZONE, status)
Definition: mod_time.f90:444
integer(itime), parameter million
Definition: mod_time.f90:160
integer, parameter itime
Definition: mod_time.f90:48
Here is the call graph for this function:
Here is the caller graph for this function:

◆ read_time()

type(time) function mod_time::read_time ( character(len=*)  timestr,
integer  status,
character(len=*), intent(in), optional  TZONE 
)

Definition at line 415 of file mod_time.f90.

415  implicit none
416  include 'fjulian.inc'
417  character(Len=*) :: timestr ! DO NOT USE INTENT ATTRIBUTE
418  CHARACTER(LEN=*),OPTIONAL, INTENT(IN) :: TZONE
419  integer status
420  logical statl
421  real(DP) :: SECS
422  TYPE(TIME) :: DZONE
423 
424 
425  if(timestr(1:1)=="-") then
426  statl = fjul_parsetime(timestr(2:),.false.,secs)
427  secs = -secs
428  else if(timestr(1:1)=="+") then
429  statl = fjul_parsetime(timestr(2:),.false.,secs)
430  else
431  statl = fjul_parsetime(timestr,.false.,secs)
432  end if
433  read_time = seconds2time(secs)
434  status = 0
435  if(statl) status = 1
436 
437  IF (PRESENT(tzone)) THEN
438  read_time = read_time - time_zone(tzone,status)
439  END IF
440 
type(time) function read_time(timestr, status, TZONE)
Definition: mod_time.f90:415
type(time) function time_zone(TZONE, status)
Definition: mod_time.f90:444
Here is the call graph for this function:
Here is the caller graph for this function:

◆ seconds()

real(dp) function mod_time::seconds ( type(time), intent(in)  MJD)

Definition at line 742 of file mod_time.f90.

742  IMPLICIT NONE
743  TYPE(TIME), INTENT(IN):: MJD
744 
745  seconds = dble(mjd%mjd * spd) + dble(mjd%MUSOD)/dble(million)
integer(itime), parameter spd
Definition: mod_time.f90:157
real(dp) function seconds(MJD)
Definition: mod_time.f90:742
integer(itime), parameter million
Definition: mod_time.f90:160
Here is the caller graph for this function:

◆ seconds2time_dbl()

type(time) function mod_time::seconds2time_dbl ( real(dp), intent(in)  SECS)

Definition at line 302 of file mod_time.f90.

302  implicit none
303  TYPE(TIME) :: MJD
304  real(DP), INTENT(IN) :: SECS
305  real(DP) :: TEMP
306 
307  mjd%mjd = int(secs/dble(spd),itime)
308  temp = mod(secs,dble(spd))
309  mjd%MuSOD = anint(temp*real(million,dp),itime)
310  CALL adjust(mjd)
311  seconds2time_dbl = mjd
integer(itime), parameter spd
Definition: mod_time.f90:157
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function seconds2time_dbl(SECS)
Definition: mod_time.f90:302
integer, parameter dp
Definition: mod_prec.f90:52
integer(itime), parameter million
Definition: mod_time.f90:160
integer, parameter itime
Definition: mod_time.f90:48
Here is the call graph for this function:
Here is the caller graph for this function:

◆ seconds2time_flt()

type(time) function mod_time::seconds2time_flt ( real(spa), intent(in)  SECS)

Definition at line 337 of file mod_time.f90.

337  implicit none
338  real(SPA), INTENT(IN) :: SECS
339 
340  seconds2time_flt = seconds2time_dbl(dble(secs))
341 
type(time) function seconds2time_dbl(SECS)
Definition: mod_time.f90:302
type(time) function seconds2time_flt(SECS)
Definition: mod_time.f90:337
Here is the call graph for this function:

◆ seconds2time_int()

type(time) function mod_time::seconds2time_int ( integer, intent(in)  SECS)

Definition at line 315 of file mod_time.f90.

315  implicit none
316  TYPE(TIME) :: MJD
317  INTEGER, INTENT(IN) :: SECS
318 
319  mjd%mjd = 0
320  mjd%MuSOD = secs
321  CALL adjust(mjd)
322  seconds2time_int = mjd
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function seconds2time_int(SECS)
Definition: mod_time.f90:315
Here is the call graph for this function:

◆ seconds2time_lint()

type(time) function mod_time::seconds2time_lint ( integer(itime), intent(in)  SECS)

Definition at line 326 of file mod_time.f90.

326  implicit none
327  TYPE(TIME) :: MJD
328  INTEGER(ITIME), INTENT(IN) :: SECS
329 
330  mjd%mjd = 0
331  mjd%MuSOD = secs
332  CALL adjust(mjd)
333  seconds2time_lint = mjd
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function seconds2time_lint(SECS)
Definition: mod_time.f90:326
Here is the call graph for this function:

◆ subtract_time()

type(time) function mod_time::subtract_time ( type(time), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 999 of file mod_time.f90.

999  IMPLICIT NONE
1000  TYPE(TIME), INTENT(IN) :: time1, time2
1001 
1002  subtract_time%MuSOD = time1%MuSOD - time2%MuSOD
1003  subtract_time%mjd = time1%mjd - time2%mjd
1004 
1005  call adjust(subtract_time)
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function subtract_time(time1, time2)
Definition: mod_time.f90:999
Here is the call graph for this function:

◆ subtract_time_1()

type(time) function, dimension(size(time1)) mod_time::subtract_time_1 ( type(time), dimension(:), intent(in)  time1,
type(time), dimension(:), intent(in)  time2 
)

Definition at line 1009 of file mod_time.f90.

1009  IMPLICIT NONE
1010  TYPE(TIME), INTENT(IN) :: time1(:), time2(:)
1011  TYPE(TIME), DIMENSION(SIZE(TIME1)) :: TDIFF
1012  INTEGER :: I
1013 
1014  DO i = 1,SIZE(time1)
1015  tdiff(i) = time1(i) - time2(i)
1016  END DO

◆ subtract_time_1a()

type(time) function, dimension(size(time2)) mod_time::subtract_time_1a ( type(time), intent(in)  time1,
type(time), dimension(:), intent(in)  time2 
)

Definition at line 1020 of file mod_time.f90.

1020  IMPLICIT NONE
1021  TYPE(TIME), INTENT(IN) :: time1, time2(:)
1022  TYPE(TIME), DIMENSION(SIZE(TIME2)) :: TDIFF
1023  INTEGER :: I
1024 
1025  DO i = 1,SIZE(time2)
1026  tdiff(i) = time1 - time2(i)
1027  END DO

◆ subtract_time_2()

type(time) function, dimension(size(time1,1),size(time1,2)) mod_time::subtract_time_2 ( type(time), dimension(:,:), intent(in)  time1,
type(time), dimension(:,:), intent(in)  time2 
)

Definition at line 1042 of file mod_time.f90.

1042  IMPLICIT NONE
1043  TYPE(TIME), INTENT(IN) :: time1(:,:), time2(:,:)
1044  TYPE(TIME), DIMENSION(SIZE(TIME1,1),SIZE(TIME1,2)) :: TDIFF
1045  INTEGER :: I,J
1046 
1047  DO i = 1,SIZE(time1,1)
1048  DO j = 1,SIZE(time1,2)
1049  tdiff(i,j) = time1(i,j) - time2(i,j)
1050  END DO
1051  END DO

◆ subtract_time_2a()

type(time) function, dimension(size(time1,1),size(time1,2)) mod_time::subtract_time_2a ( type(time), dimension(:,:), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1055 of file mod_time.f90.

1055  IMPLICIT NONE
1056  TYPE(TIME), INTENT(IN) :: time1(:,:), time2
1057  TYPE(TIME), DIMENSION(SIZE(TIME1,1),SIZE(TIME1,2)) :: TDIFF
1058  INTEGER :: I,J
1059 
1060  DO i = 1,SIZE(time1,1)
1061  DO j = 1,SIZE(time1,2)
1062  tdiff(i,j) = time1(i,j) - time2
1063  END DO
1064  END DO

◆ subtract_time_a1()

type(time) function, dimension(size(time1)) mod_time::subtract_time_a1 ( type(time), dimension(:), intent(in)  time1,
type(time), intent(in)  time2 
)

Definition at line 1031 of file mod_time.f90.

1031  IMPLICIT NONE
1032  TYPE(TIME), INTENT(IN) :: time1(:), time2
1033  TYPE(TIME), DIMENSION(SIZE(TIME1)) :: TDIFF
1034  INTEGER :: I
1035 
1036  DO i = 1,SIZE(time1)
1037  tdiff(i) = time1(i) - time2
1038  END DO

◆ subtract_time_a2()

type(time) function, dimension(size(time2,1),size(time2,2)) mod_time::subtract_time_a2 ( type(time), intent(in)  time1,
type(time), dimension(:,:), intent(in)  time2 
)

Definition at line 1068 of file mod_time.f90.

1068  IMPLICIT NONE
1069  TYPE(TIME), INTENT(IN) :: time1, time2(:,:)
1070  TYPE(TIME), DIMENSION(SIZE(TIME2,1),SIZE(TIME2,2)) :: TDIFF
1071  INTEGER :: I,J
1072 
1073  DO i = 1,SIZE(time2,1)
1074  DO j = 1,SIZE(time2,2)
1075  tdiff(i,j) = time1 - time2(i,j)
1076  END DO
1077  END DO

◆ time2ncitime()

integer function mod_time::time2ncitime ( type(time), intent(in)  MJD,
type(time), intent(in)  RJD,
integer, intent(out)  D,
integer, intent(out)  MS 
)

Definition at line 345 of file mod_time.f90.

345  implicit none
346  INTEGER :: RES
347  TYPE(TIME), INTENT(IN) :: MJD,RJD
348  INTEGER, INTENT(OUT) :: D, MS
349  REAL(DP) :: MSEC
350 
351  res = -1
352  msec = dble(mjd%MuSod) / 1000.0_dp
353  ms = anint(msec)
354 
355  ! CHECK TO MAKE SURE IT IS NOT TOO LARGE
356  IF (abs(mjd%MJD) .GT. huge(d)) THEN
357  res =0
358  return
359  END IF
360 
361  d = mjd%MJD - rjd%MJD
362 

◆ time_div_dbl()

type(time) function mod_time::time_div_dbl ( type(time), intent(in)  MJD,
real(dp), intent(in)  dbl 
)

Definition at line 898 of file mod_time.f90.

898  IMPLICIT NONE
899  TYPE(TIME), INTENT(IN) :: MJD
900  real(DP), INTENT(IN) :: dbl
901 
902  time_div_dbl = mjd * (1.0_dp / dbl)
903 
type(time) function time_div_dbl(MJD, dbl)
Definition: mod_time.f90:898

◆ time_div_flt()

type(time) function mod_time::time_div_flt ( type(time), intent(in)  MJD,
real(spa), intent(in)  flt 
)

Definition at line 886 of file mod_time.f90.

886  IMPLICIT NONE
887  TYPE(TIME), INTENT(IN) :: MJD
888  real(SPA), INTENT(IN) :: flt
889  real(DP) :: dbl
890 
891  dbl = dble(flt)
892  dbl = 1.0_dp / dbl
893  time_div_flt = mjd * dbl
894 
type(time) function time_div_flt(MJD, flt)
Definition: mod_time.f90:886

◆ time_div_int()

type(time) function mod_time::time_div_int ( type(time), intent(in)  MJD,
integer, intent(in)  int 
)

Definition at line 862 of file mod_time.f90.

862  IMPLICIT NONE
863  TYPE(TIME), INTENT(IN) :: MJD
864  integer, INTENT(IN) :: int
865  real(DP) :: dbl
866 
867  dbl = dble(int)
868  dbl = 1.0_dp / dbl
869  time_div_int = mjd * dbl
870 
type(time) function time_div_int(MJD, int)
Definition: mod_time.f90:862

◆ time_div_long()

type(time) function mod_time::time_div_long ( type(time), intent(in)  MJD,
integer(itime), intent(in)  long 
)

Definition at line 874 of file mod_time.f90.

874  IMPLICIT NONE
875  TYPE(TIME), INTENT(IN) :: MJD
876  integer(itime), INTENT(IN) :: long
877  real(DP) :: dbl
878 
879  dbl = dble(long)
880  dbl = 1.0_dp / dbl
881  time_div_long = mjd * dbl
882 
type(time) function time_div_long(MJD, long)
Definition: mod_time.f90:874

◆ time_x_dbl()

type(time) recursive function mod_time::time_x_dbl ( type(time), intent(in)  MJD,
real(dp), intent(in)  dbl 
)

Definition at line 816 of file mod_time.f90.

816  IMPLICIT NONE
817  TYPE(TIME), INTENT(IN) :: MJD
818  real(DP), INTENT(in) :: dbl
819  integer(itime) :: int
820  real(DP) :: remainder
821  real(DP) :: temp
822 
823  if (abs(dbl) .gt. 1.0_dp) THEN
824  int = anint(dbl,itime)
825  remainder = dbl - int
826  time_x_dbl = (mjd * int) + (mjd * remainder)
827  else
828  temp = real(mjd%MuSOD,dp) * real(dbl,dp)
829  time_x_dbl%MuSOD= anint(temp,itime)
830 
831  temp = real(mjd%mjd,dp) * real(dbl,dp)
832  int = anint(temp,itime)
833  time_x_dbl%mjd=int
834  time_x_dbl%MuSOD = time_x_dbl%MuSOD + (temp-int)*muspd
835  end if
836  call adjust(time_x_dbl)
837 
subroutine adjust(MJD)
Definition: mod_time.f90:377
integer(itime), parameter muspd
Definition: mod_time.f90:159
type(time) recursive function time_x_dbl(MJD, dbl)
Definition: mod_time.f90:816
integer, parameter dp
Definition: mod_prec.f90:52
integer, parameter itime
Definition: mod_time.f90:48
Here is the call graph for this function:

◆ time_x_flt()

type(time) function mod_time::time_x_flt ( type(time), intent(in)  MJD,
real(spa), intent(in)  flt 
)

Definition at line 805 of file mod_time.f90.

805  IMPLICIT NONE
806  TYPE(TIME), INTENT(IN) :: MJD
807  real(SPA), INTENT(in) :: flt
808  real(DP) :: DBL
809 
810  dbl = flt
811  time_x_flt = mjd * dbl
812 
type(time) function time_x_flt(MJD, flt)
Definition: mod_time.f90:805

◆ time_x_int()

type(time) function mod_time::time_x_int ( type(time), intent(in)  MJD,
integer, intent(in)  int 
)

Definition at line 782 of file mod_time.f90.

782  IMPLICIT NONE
783  TYPE(TIME), INTENT(IN) :: MJD
784  integer, INTENT(IN) :: int
785 
786  time_x_int%MuSOD=mjd%MuSOD * int
787  time_x_int%mjd=mjd%mjd * int
788 
789 
790  call adjust(time_x_int)
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function time_x_int(MJD, int)
Definition: mod_time.f90:782
Here is the call graph for this function:

◆ time_x_long()

type(time) function mod_time::time_x_long ( type(time), intent(in)  MJD,
integer(itime), intent(in)  long 
)

Definition at line 794 of file mod_time.f90.

794  IMPLICIT NONE
795  TYPE(TIME), INTENT(IN) :: MJD
796  integer(itime), INTENT(IN) :: long
797 
798  time_x_long%MuSOD=mjd%MuSOD * long
799  time_x_long%mjd=mjd%mjd * long
800 
801  call adjust(time_x_long)
subroutine adjust(MJD)
Definition: mod_time.f90:377
type(time) function time_x_long(MJD, long)
Definition: mod_time.f90:794
Here is the call graph for this function:

◆ time_zone()

type(time) function mod_time::time_zone ( character(len=*), intent(in)  TZONE,
integer, intent(out)  status 
)

Definition at line 444 of file mod_time.f90.

444  TYPE(TIME) :: DZONE
445  CHARACTER(LEN=*), INTENT(IN) :: TZONE
446  integer, intent(out) :: status
447  !! USE STANDARD NAMES FROM www.timeanddate.com
448  !! Handle time zones!
449 
450 
451  status = 1
452  SELECT CASE (tzone)
453  CASE("UTC")
454  dzone = seconds2time(0.0_dp)
455  CASE("NONE")
456  dzone = seconds2time(0.0_dp)
457  CASE("none")
458  dzone = seconds2time(0.0_dp)
459  CASE("None")
460  dzone = seconds2time(0.0_dp)
461  CASE("A")
462  dzone = read_time('01:00:00',status)
463  CASE("ACDT")
464  dzone = read_time('10:30:00',status)
465  CASE("ACST")
466  dzone = read_time('09:30:00',status)
467  CASE("ADT")
468  dzone = read_time('-03:00:00',status)
469  CASE("AEDT")
470  dzone = read_time('11:00:00',status)
471  CASE("AEST")
472  dzone = read_time('10:00:00',status)
473  CASE("AKDT")
474  dzone = read_time('-08:00:00',status)
475  CASE("AKST")
476  dzone = read_time('-09:00:00',status)
477  CASE("AST")
478  dzone = read_time('-04:00:00',status)
479  CASE("AWDT")
480  dzone = read_time('09:00:00',status)
481  CASE("AWST")
482  dzone = read_time('08:00:00',status)
483  CASE("B")
484  dzone = read_time('02:00:00',status)
485  CASE("BST")
486  dzone = read_time('01:00:00',status)
487  CASE("CDT")
488  dzone = read_time('-05:00:00',status)
489  CASE("CEDT")
490  dzone = read_time('02:00:00',status)
491  CASE("CEST")
492  dzone = read_time('02:00:00',status)
493  CASE("CET")
494  dzone = read_time('01:00:00',status)
495  !! SKIPPING MULTIPLE ABREVIATIONS 'CST'
496  CASE("CST")
497  dzone = read_time('-06:00:00',status)
498  CASE("CXT")
499  dzone = read_time('07:00:00',status)
500  CASE("D")
501  dzone = read_time('04:00:00',status)
502  CASE("E")
503  dzone = read_time('05:00:00',status)
504  CASE("EDT")
505  dzone = read_time('-04:00:00',status)
506  CASE("EEDT")
507  dzone = read_time('03:00:00',status)
508  CASE("EEST")
509  dzone = read_time('03:00:00',status)
510  CASE("EET")
511  dzone = read_time('02:00:00',status)
512  !! AGAIN, SKIPPING MULTIPLE 'EST' defs, sorry australia!
513  CASE("EST")
514  dzone = read_time('-05:00:00',status)
515  CASE("F")
516  dzone = read_time('06:00:00',status)
517  CASE("G")
518  dzone = read_time('07:00:00',status)
519  CASE("GMT")
520  dzone = seconds2time(0.0_dp)
521  CASE("H")
522  dzone = read_time('08:00:00',status)
523  CASE("HAA")
524  dzone = read_time('-03:00:00',status)
525  CASE("HAC")
526  dzone = read_time('-05:00:00',status)
527  CASE("HADT")
528  dzone = read_time('-09:00:00',status)
529  CASE("HAE")
530  dzone = read_time('-04:00:00',status)
531  CASE("HAP")
532  dzone = read_time('-07:00:00',status)
533  CASE("HAR")
534  dzone = read_time('-06:00:00',status)
535  CASE("HAST")
536  dzone = read_time('-10:00:00',status)
537  CASE("HAT")
538  dzone = read_time('-02:30:00',status)
539  CASE("HAY")
540  dzone = read_time('-08:00:00',status)
541  CASE("HNA")
542  dzone = read_time('-04:00:00',status)
543  CASE("HNC")
544  dzone = read_time('-06:00:00',status)
545  CASE("HNE")
546  dzone = read_time('-05:00:00',status)
547  CASE("HNP")
548  dzone = read_time('-08:00:00',status)
549  CASE("HNR")
550  dzone = read_time('-07:00:00',status)
551  CASE("HNT")
552  dzone = read_time('-3:30:00',status)
553  CASE("HNY")
554  dzone = read_time('-09:00:00',status)
555  CASE("I")
556  dzone = read_time('09:00:00',status)
557  CASE("IST")
558  dzone = read_time('01:00:00',status)
559  CASE("K")
560  dzone = read_time('10:00:00',status)
561  CASE("L")
562  dzone = read_time('11:00:00',status)
563  CASE("M")
564  dzone = read_time('12:00:00',status)
565  CASE("MDT")
566  dzone = read_time('-06:00:00',status)
567  CASE("MESZ")
568  dzone = read_time('02:00:00',status)
569  CASE("MEZ")
570  dzone = read_time('01:00:00',status)
571  CASE("MST")
572  dzone = read_time('-07:00:00',status)
573  CASE("N")
574  dzone = read_time('-01:00:00',status)
575  CASE("NDT")
576  dzone = read_time('-02:30:00',status)
577  CASE("NFT")
578  dzone = read_time('11:30:00',status)
579  CASE("NST")
580  dzone = read_time('-03:30:00',status)
581  CASE("O")
582  dzone = read_time('-02:00:00',status)
583  CASE("P")
584  dzone = read_time('-03:00:00',status)
585  CASE("PDT")
586  dzone = read_time('-07:00:00',status)
587  CASE("PST")
588  dzone = read_time('-08:00:00',status)
589  CASE("Q")
590  dzone = read_time('-04:00:00',status)
591  CASE("R")
592  dzone = read_time('-05:00:00',status)
593  CASE("S")
594  dzone = read_time('-06:00:00',status)
595  CASE("T")
596  dzone = read_time('-07:00:00',status)
597  CASE("U")
598  dzone = read_time('-08:00:00',status)
599  CASE("V")
600  dzone = read_time('-09:00:00',status)
601  CASE("W")
602  dzone = read_time('-10:00:00',status)
603  CASE("WEDT")
604  dzone = read_time('01:00:00',status)
605  CASE("WEST")
606  dzone = read_time('01:00:00',status)
607  CASE("WET")
608  dzone = read_time('00:00:00',status)
609  CASE("WST")
610  write(6,*)"TIMEZONE 'WST' IS AMBIGIOUS! USING WESTERN STANDARD TIME: UTC + 8:00"
611  dzone = read_time('08:00:00',status)
612  CASE("X")
613  dzone = read_time('-11:00:00',status)
614  CASE("Y")
615  dzone = read_time('-12:00:00',status)
616  CASE("Z")
617  dzone = read_time('00:00:00',status)
618 
619  CASE DEFAULT
620  dzone = read_time(tzone,status)
621  END SELECT
622 
623  if(status==0) write(6,*) "Time_zone failed! :: "//trim(tzone)
624 
type(time) function read_time(timestr, status, TZONE)
Definition: mod_time.f90:415
Here is the call graph for this function:
Here is the caller graph for this function:

◆ write_datetime()

character(len=80) function mod_time::write_datetime ( type(time), intent(in)  mjdin,
integer, intent(in)  prec,
character(len=*), intent(in)  TZONE 
)

Definition at line 682 of file mod_time.f90.

682  IMPLICIT NONE
683  include 'fjulian.inc'
684  ! PREC is the number of decimal seconds digits
685  integer, intent(IN) :: prec
686  TYPE(TIME), INTENT(IN) :: mjdin
687  CHARACTER(LEN=*), INTENT(IN) :: TZONE
688 
689  TYPE(TIME) :: mjd
690  real(DP) :: rMJD
691  real(DP) :: tai
692  real(DP) :: secs
693  integer :: dutc, status
694  real(DP) :: tmp1,tmp2
695 
696  mjd = mjdin + time_zone(tzone,status)
697 
698 
699  tmp1 = dble(mjd%MuSOD)
700  tmp2 = dble(muspd)
701 
702  rmjd = mjd%mjd + tmp1/tmp2
703 
704  secs = tmp1 / dble(million)
705 
706  tai = fjul_taiofmjd(rmjd, fjul_utc_type)
707 
708  dutc = fjul_dutcoftai(tai,secs)
709 
710 
711  call fjul_formatpds(dutc, secs, prec, .true., write_datetime)
712 
integer(itime), parameter muspd
Definition: mod_time.f90:159
type(time) function time_zone(TZONE, status)
Definition: mod_time.f90:444
integer(itime), parameter million
Definition: mod_time.f90:160
character(len=80) function write_datetime(mjdin, prec, TZONE)
Definition: mod_time.f90:682
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ itime

integer, parameter mod_time::itime = SELECTED_INT_KIND(18)

Definition at line 48 of file mod_time.f90.

48  INTEGER, PARAMETER :: itime = selected_int_kind(18)

◆ million

integer(itime), parameter mod_time::million = 10**6

Definition at line 160 of file mod_time.f90.

160  Integer(itime), parameter :: million = 10**6

◆ mpi_time

integer mod_time::mpi_time

Definition at line 50 of file mod_time.f90.

50  INTEGER :: MPI_TIME

◆ mspd

integer(itime), parameter mod_time::mspd = spd * 1000

Definition at line 158 of file mod_time.f90.

158  integer(itime), parameter :: mspd = spd * 1000
integer(itime), parameter spd
Definition: mod_time.f90:157

◆ muspd

integer(itime), parameter mod_time::muspd = mspd * 1000

Definition at line 159 of file mod_time.f90.

159  integer(itime), parameter :: muspd = mspd * 1000
integer(itime), parameter mspd
Definition: mod_time.f90:158

◆ spd

integer(itime), parameter mod_time::spd = 86400

Definition at line 157 of file mod_time.f90.

157  integer(itime), parameter :: spd = 86400