The TELEMAC-MASCARET system  trunk
lecdon.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE lecdon
3 ! *****************
4 !
5  &(f1,name1,mode1,f2,name2,mode2, f3,name3,mode3,
6  & npoin2,ndon,fformat,indic,chdon,texte,trouve)
7 !
8 !***********************************************************************
9 ! TOMAWAC V6P3 21/06/2011
10 !***********************************************************************
11 !
12 !brief THIS SUBROUTINE PROJECTS THE CURRENTS / WINDS ON THE
13 !+ COMPUTATION MESH.
14 !+
15 !+ (INSPIRED FROM SUBROUTINE FOND IN TELEMAC2D)
16 !
17 !history F.MARCOS (LNH)
18 !+ 01/02/95
19 !+ V1P0
20 !+
21 !
22 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
23 !+ 13/07/2010
24 !+ V6P0
25 !+ Translation of French comments within the FORTRAN sources into
26 !+ English comments
27 !
28 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
29 !+ 21/08/2010
30 !+ V6P0
31 !+ Creation of DOXYGEN tags for automated documentation and
32 !+ cross-referencing of the FORTRAN sources
33 !
34 !history G.MATTAROLO (EDF - LNHE)
35 !+ 20/06/2011
36 !+ V6P1
37 !+ Translation of French names of the variables in argument
38 !
39 !history J-M HERVOUET (EDF - LNHE)
40 !+ 16/11/2012
41 !+ V6P3
42 !+ Only SELAFIN format with same mesh kept.
43 !
44 !history J-M HERVOUET (EDF - LNHE)
45 !+ 21/01/2013
46 !+ V6P3
47 !+ Generalised for reading 3 variables with given names.
48 !
49 !history Y AUDOUIN (LNHE)
50 !+ 25/05/2015
51 !+ V7P0
52 !+ Modification to comply with the hermes module
53 !
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !| CHDON |-->| NAME OF THE VARIABLE READ FROM THE DATA FILE
56 !| F1 |<--| FIRST VARIABLE TO READ
57 !| F2 |<--| SECOND VARIABLE TO READ
58 !| F3 |<--| THIRD VARIABLE TO READ
59 !| INDIC |-->| FILE FORMAT
60 !| MODE1 |-->| MODE: 0= DO NOT READ
61 !| | | 1= READ IF PRESENT
62 !| MODE2 |-->| LIKE MODE1 FOR SECOND VARIABLE
63 !| MODE3 |-->| LIKE MODE1 FOR THIRD VARIABLE
64 !| NAME1 |-->| NAME OF FIRST VARIABLE
65 !| NAME2 |-->| NAME OF SECOND VARIABLE
66 !| NAME3 |-->| NAME OF THIRD VARIABLE
67 !| NDON |-->| LOGICAL UNIT NUMBER OF THA DATA FILE
68 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
69 !| TEXTE |<->| NAME OF VARIABLES IN THE SERAFIN FILE
70 !| TROUVE |<->| 3 LOGICAL, WILL SAY IF VARIABLES HAVE BEEN FOUND
71 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
72 !| Y |-->| ORDINATES OF POINTS IN THE MESH
73 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74 !
75  USE bief
78  USE declarations_tomawac, ONLY : nptt
79  IMPLICIT NONE
80 !
81 !
82 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
83 !
84  INTEGER, INTENT(IN) :: NDON,NPOIN2,INDIC
85  INTEGER, INTENT(IN) :: MODE1,MODE2,MODE3
86  DOUBLE PRECISION, INTENT(INOUT) :: F1(npoin2),F2(npoin2)
87  DOUBLE PRECISION, INTENT(INOUT) :: F3(npoin2)
88  CHARACTER(LEN=8), INTENT(IN) :: FFORMAT
89  CHARACTER(LEN=7), INTENT(IN) :: CHDON
90  CHARACTER(LEN=32),INTENT(IN) :: NAME1,NAME2,NAME3
91  CHARACTER(LEN=32),INTENT(INOUT) :: TEXTE(30)
92  LOGICAL, INTENT(INOUT) :: TROUVE(3)
93 !
94 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95 !
96  CHARACTER(LEN=16), ALLOCATABLE :: VAR_NAME(:), VAR_UNIT(:)
97  INTEGER NP,I,J,NVAR,MODE(3)
98  DOUBLE PRECISION TIME
99  CHARACTER(LEN=32) NAME(3),FULL_NAME(3)
100  CHARACTER(LEN=80) TITCAS
101  INTEGER :: RECORD, IERR
102 !
103 !-----------------------------------------------------------------------
104 !
105  mode(1)=mode1
106  mode(2)=mode2
107  mode(3)=mode3
108  name(1)=name1
109  name(2)=name2
110  name(3)=name3
111 !
112 !-----------------------------------------------------------------------
113 ! READS THE POINTS FROM LOGICAL UNIT NDON
114 !-----------------------------------------------------------------------
115 !
116  IF(indic.EQ.3) THEN
117 !
118 ! -----------------------------------------------------------------
119 ! TELEMAC FORMAT,
120 ! VARIABLES 1 AND 2 ARE THE X AND Y COMPONENTS OF THE WIND
121 ! -----------------------------------------------------------------
122 !
123  ! Getting title
124  CALL get_mesh_title(fformat,ndon,titcas,ierr)
125  CALL check_call(ierr,'LECDON:GET_MESH_TITLE')
126  !
127  CALL get_data_nvar(fformat,ndon,nvar,ierr)
128  CALL check_call(ierr,'LECDON:GET_DATA_NVAR')
129  !
130  ALLOCATE(var_name(nvar),stat=ierr)
131  CALL check_allocate(ierr,'LECDON:VAR_NAME')
132  ALLOCATE(var_unit(nvar),stat=ierr)
133  CALL check_allocate(ierr,'LECDON:VAR_UNIT')
134  CALL get_data_var_list(fformat,ndon,nvar,var_name,var_unit,ierr)
135  CALL check_call(ierr,'LECDON:GET_DATA_VAR_LIST')
136  DO i=1,nvar
137  texte(i)(1:16) = var_name(i)
138  texte(i)(17:32) = var_unit(i)
139  ! CHECK IF THE VARIABLE ARE IN THE FILE
140  DO j=1,3
141  IF((texte(i).EQ.name(j)).AND.
142  & mode(j).GT.0) THEN
143  trouve(j) = .true.
144  full_name(j) = name(j)
145  ENDIF
146  ENDDO
147  ENDDO
148  DEALLOCATE(var_name)
149  DEALLOCATE(var_unit)
150  ! get the number of point
151  CALL get_mesh_npoin(fformat,ndon,point_bnd_elt_type,np,ierr)
152  CALL check_call(ierr,'LECDON:GET_MESH_NPOIN')
153  WRITE(lu,*) '--------------------------------------------'
154  WRITE(lu,*) 'LECDON : READING OF TELEMAC DATA FILE '
155  WRITE(lu,*) ' FILE TITLE : ',titcas
156  WRITE(lu,*) ' NUMBER OF POINTS : ',np
157  WRITE(lu,*) '--------------------------------------------'
158  IF(np.NE.npoin2) THEN
159  WRITE(lu,*) ' '
160  WRITE(lu,*) 'THE MESH OF THE CURRENTS FILE'
161  WRITE(lu,*) 'IS DIFFERENT FROM THE GEOMETRY FILE'
162  WRITE(lu,*) ' '
163  CALL plante(1)
164  stop
165  ENDIF
166  ! Timesteps
167  CALL get_data_ntimestep(fformat,ndon,nptt,ierr)
168  record = nptt - 1
169  CALL get_data_time(fformat,ndon,record,time,ierr)
170  ! Check if all the variables are found for record1
171  DO j=1,3
172  IF(mode(j).EQ.2.AND..NOT.trouve(j)) THEN
173  WRITE(lu,*) 'LECDON: VARIABLE ',name1,' NOT FOUND'
174  WRITE(lu,*) trim(name(j)(1:16))
175  CALL plante(1)
176  stop
177  ELSEIF(mode(j).GT.0.AND.trouve(j)) THEN
178  WRITE(lu,*) 'VARIABLE ',j,' READ (',
179  & trim(name(j)(1:16)),') AT TIME ',time
180  ! Read the data for varialbe j on record1
181  IF(j.EQ.1) THEN
182  CALL get_data_value(fformat,ndon,record,
183  & full_name(j),f1,np,ierr)
184  ELSEIF(j.EQ.2) THEN
185  CALL get_data_value(fformat,ndon,record,
186  & full_name(j),f2,np,ierr)
187  ELSEIF(j.EQ.3) THEN
188  CALL get_data_value(fformat,ndon,record,
189  & full_name(j),f3,np,ierr)
190  ENDIF
191  ENDIF
192  ENDDO
193 !
194  ELSEIF(indic.EQ.4) THEN
195 !
196 ! ------------------------------------------------------------------
197 ! READS A USER-DEFINED FORMAT
198 ! ------------------------------------------------------------------
199 !
200  IF(chdon(1:1).EQ.'C') THEN
201 ! READS A CURRENT FIELD
202  CALL couuti(ndon,fformat)
203  ELSEIF(chdon(1:1).EQ.'W') THEN
204 ! READS A WIND FIELD
205  CALL venuti(ndon,fformat)
206  ELSE
207  WRITE(lu,*) 'UNKNOWN DATA TYPE'
208  CALL plante(1)
209  stop
210  ENDIF
211 !
212  ELSE
213  WRITE(lu,*)'***********************************************'
214  WRITE(lu,*)'LECDON : INDICATOR OF FORMAT FOR THE '
215  WRITE(lu,*)' DATA FILE UNKNOWN :',indic
216  WRITE(lu,*)'***********************************************'
217  CALL plante(1)
218  stop
219  ENDIF
220 !
221 !-----------------------------------------------------------------------
222 !
223  RETURN
224 !
225 ! IF FAILED TO READ THE FILE ...
226 !
227  WRITE(lu,*)'*********************************************'
228  WRITE(lu,*)' ERROR WHILE READING DATA FILE '
229  WRITE(lu,*)' OR UNEXPECTED END OF FILE '
230  WRITE(lu,*)'*********************************************'
231  CALL plante(1)
232 !
233 !-----------------------------------------------------------------------
234 !
235  RETURN
236  END
subroutine get_mesh_npoin(FFORMAT, FID, TYP_ELEM, NPOIN, IERR)
Definition: get_mesh_npoin.f:7
subroutine get_data_nvar(FFORMAT, FID, NVAR, IERR)
Definition: get_data_nvar.f:7
subroutine get_data_var_list(FFORMAT, FID, NVAR, VARLIST, UNITLIST, IERR)
subroutine venuti(NVEN, FMTVEN)
Definition: venuti.f:7
integer, parameter point_bnd_elt_type
subroutine get_data_value(FFORMAT, FID, RECORD, VAR_NAME, RES_VALUE, N, IERR)
Definition: get_data_value.f:7
subroutine lecdon(F1, NAME1, MODE1, F2, NAME2, MODE2, F3, NAME3, MODE3, NPOIN2, NDON, FFORMAT, INDIC, CHDON, TEXTE, TROUVE)
Definition: lecdon.f:8
subroutine get_mesh_title(FFORMAT, FID, TITLE, IERR)
Definition: get_mesh_title.f:7
subroutine couuti(NCOU, FMTCOU)
Definition: couuti.f:7
subroutine get_data_time(FFORMAT, FID, RECORD, TIME, IERR)
Definition: get_data_time.f:7
subroutine get_data_ntimestep(FFORMAT, FID, NTIMESTEP, IERR)
Definition: bief.f:3