The TELEMAC-MASCARET system  trunk
get_data_timestep.f
Go to the documentation of this file.
1 ! ****************************
2  SUBROUTINE get_data_timestep
3 ! ****************************
4 !
5  &(fformat,fid,record,time,ierr)
6 !
7 !***********************************************************************
8 ! HERMES V7P3
9 !***********************************************************************
10 !
11 !brief Returns the time step of a given time value
12 !
13 !history N.DURAND (HRW)
14 !+ September 2017
15 !+ V7P3
16 !+ First version
17 !
18 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
19 !| FFORMAT |-->| FORMAT OF THE FILE
20 !| FID |-->| FILE DESCRIPTOR
21 !| RECORD |-->| NUMBER OF THE TIME STEP
22 !| TIME |<->| TIME IN SECOND OF THE TIME STEP
23 !| IERR |<--| 0 IF NO ERROR DURING THE EXECUTION
24 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
25 !
28  IMPLICIT NONE
29 !
30 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
31 !
32  CHARACTER(LEN=8), INTENT(IN) :: FFORMAT
33  INTEGER, INTENT(IN) :: FID
34  INTEGER, INTENT(OUT) :: RECORD
35  DOUBLE PRECISION, INTENT(IN) :: TIME
36  INTEGER, INTENT(OUT) :: IERR
37 !
38 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
39 !
40  INTEGER :: NTIMESTEP
41  DOUBLE PRECISION :: TIME1,FIRSTTIME,LASTTIME,EPS
42 !
43 !-----------------------------------------------------------------------
44 !
45  record = 0
46  eps=0.d0
47  CALL get_data_time(fformat,fid,0,firsttime,ierr)
48  IF(ierr.NE.0) RETURN
49  CALL get_data_ntimestep(fformat,fid,ntimestep,ierr)
50  IF(ierr.NE.0) RETURN
51  CALL get_data_time(fformat,fid,ntimestep-1,lasttime,ierr)
52  IF(ierr.NE.0) RETURN
53  !
54  ! FIRST CHECK IF THE TIME VALUE IS IN THE FILE
55  IF((time.GT.lasttime.OR.time.LT.firsttime).AND.
56  & ntimestep.GT.0) THEN
58  WRITE(error_message, *) 'TIME FOR GET_DATA_TIMESTEP: ', time,
59  & ' IS NOT IN THE FILE [',firsttime,', ',lasttime,']'
60  RETURN
61  !
62  ELSE
63  record = 0
64  time1 = firsttime
65  DO WHILE ((time1.LT.time).AND.(abs(time1-time).GT.eps) )
66  record = record + 1
67  CALL get_data_time(fformat,fid,record,time1,ierr)
68  IF(ierr.NE.0) RETURN
69  ENDDO
70  ENDIF
71 !
72 !-----------------------------------------------------------------------
73 !
74  RETURN
75  END
76 
77 
character(len=200) error_message
subroutine get_data_timestep(FFORMAT, FID, RECORD, TIME, IERR)
integer, parameter hermes_record_unknown_err
subroutine get_data_time(FFORMAT, FID, RECORD, TIME, IERR)
Definition: get_data_time.f:7
subroutine get_data_ntimestep(FFORMAT, FID, NTIMESTEP, IERR)