The TELEMAC-MASCARET system  trunk
lecsui.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE lecsui
3 ! *****************
4 !
5  &(f,ndire,nf,npoin2,vent, couran,npre,fformat,maree,tra01)
6 !
7 !***********************************************************************
8 ! TOMAWAC V7P1
9 !***********************************************************************
10 !
11 !brief READS THE DATA FOR A CONTINUATION OF COMPUTATION.
12 !
13 !warning Parameters MAREE, COURAN or VENT must not be changed between
14 !+ 2 runs. This would require an extra implementation consisting
15 !+ of checking the names of variables.
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 !+ 26/11/2012
41 !+ V6P3
42 !+ Correction of bugs and double precision. Changing file format
43 !+ for domain decomposition.
44 !
45 !history Y AUDOUIN (LNHE)
46 !+ 25/05/2015
47 !+ V7P0
48 !+ Modification to comply with the hermes module
49 !
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !| COURAN |-->| LOGICAL INDICATING IF THERE IS A CURRENT
52 !| F |<--| DIRECTIONAL SPECTRUM
53 !| MAREE |-->| LOGICAL INDICATING CONSIDERATION OF TIDE
54 !| NF |-->| NUMBER OF FREQUENCIES
55 !| NDIRE |-->| NUMBER OF DIRECTIONS
56 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
57 !| NPRE |-->| LOIGCAL UNIT NUMBER OF PREVIOUS COMPUTATION FILE
58 !| TRA01 |<--| DOUBLE PRECISION WORK TABLE OF SIZE NPOIN2*NDIRE
59 !| VENT |-->| LOGICAL INDICATING IF THERE IS A WIND
60 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61 !
62  USE bief
64 !
66  USE declarations_tomawac, ONLY : namveb, namvef,
67  & at, tv1, tv2, tc1, tc2, tm1, tm2, zm1 ,zm2, depth, dzhdt,
68  & uc, vc, uv, vv, uv1, vv1, uv2, vv2, uc1, vc1, uc2, vc2
69  IMPLICIT NONE
70 !
71 !
72 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
73 !
74  INTEGER, INTENT(IN) :: NPRE,NF,NDIRE,NPOIN2
75  DOUBLE PRECISION, INTENT(INOUT) :: F(npoin2,ndire,nf)
76  DOUBLE PRECISION, INTENT(INOUT) :: TRA01(npoin2*ndire)
77  LOGICAL, INTENT(IN) :: COURAN,VENT,MAREE
78  CHARACTER(LEN=8), INTENT(IN) :: FFORMAT
79 !
80 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
81 !
82  INTEGER I,ISTAT,NPOIN,NVAR,NPL
83  INTEGER NELEM, NPTFR, NPTIR2, NDP, TYP_ELEM
84  INTEGER NTIMESTEP, X_ORIG, Y_ORIG
85  CHARACTER(LEN=80) CAR
86 !
87  INTEGER NVA3
88  CHARACTER(LEN=16),ALLOCATABLE :: VAR_NAME(:),VAR_UNIT(:)
89 !
90 !***********************************************************************
91 !
92  CALL read_mesh_info(fformat,npre,car,nvar,npoin,typ_elem,
93  & nelem,nptfr,nptir2,ndp,npl,x_orig,y_orig)
94 !
95  IF(npl.NE.ndire) THEN
96  WRITE(lu,*) 'LECSUI: BAD NUMBER OF PLANES IN THE PREVIOUS'
97  WRITE(lu,*) ' COMPUTATION FILE : ',npl,' FOUND'
98  WRITE(lu,*) ' ',ndire,' EXPECTED'
99  CALL plante(1)
100  stop
101  ENDIF
102 !
103  IF(npoin.NE.ndire*npoin2) THEN
104  WRITE(lu,*)'LECSUI: BAD NUMBER OF POINTS IN THE PREVIOUS'
105  WRITE(lu,*)' COMPUTATION FILE : ',npoin,' FOUND'
106  WRITE(lu,*)' ',npoin2,' EXPECTED'
107  CALL plante(1)
108  stop
109  ENDIF
110 !
111  IF(couran.OR.vent) THEN
112  i=nvar-2
113  ELSE
114  i=nvar-1
115  ENDIF
116 !
117  IF(i.NE.nf) THEN
118  WRITE(lu,*) 'LECSUI : BAD NUMBER OF FREQUENCIES'
119  WRITE(lu,*) ' IN THE PREVIOUS'
120  WRITE(lu,*) ' COMPUTATION FILE : ',i,' FOUND'
121  WRITE(lu,*) ' ',nf,' EXPECTED'
122  CALL plante(1)
123  stop
124  ENDIF
125 !
126 ! PRINTS TITLE
127 !
128  WRITE(lu,*) ' '
129  WRITE(lu,*) '**** FOLLOWING COMPUTATION ****'
130  WRITE(lu,*) ' '
131  WRITE(lu,*) 'TITLE OF THE PREVIOUS COMPUTATION :',car
132 !
133 ! READS TIME
134 !
135  CALL get_data_ntimestep(fformat,npre,ntimestep,istat)
136  CALL check_call(istat,'LECSUI:GET_DATA_NTIMESTEP')
137  CALL get_data_time(fformat,npre,ntimestep-1,at,istat)
138  CALL check_call(istat,'LECSUI:GET_DATA_TIME')
139 !
140  WRITE(lu,*) '- COMPUTATIONAL RESUMPTION AT TIME ',at
141 !
142 !
143 ! Get the number of variables
144  CALL get_data_nvar(fformat,npre,nva3,istat)
145  CALL check_call(istat,'LECSUI:GET_DATA_NVAR')
146 
147  ALLOCATE(var_name(nva3),stat=istat)
148  CALL check_allocate(istat,'LECSUI:VAR_NAME')
149  ALLOCATE(var_unit(nva3),stat=istat)
150  CALL check_allocate(istat,'LECSUI:VAR_UNIT')
151 !
152  CALL get_data_var_list(fformat,npre,nva3,var_name,var_unit,istat)
153  CALL check_call(istat,'LECSUI:GET_DATA_VAR_LIST')
154 !READS F
155 !
156 
157  DO i=1,nf
158  CALL find_variable(fformat,npre,var_name(i),f(1,1,i),npoin,
159  & istat,record=-1)
160  CALL check_call(istat,'LECSUI:FIND_VARIABLE')
161  ENDDO
162 !
163 ! READS DEPTH (ALWAYS WRITTEN, EVEN IF NOT RELEVANT)
164 !
165  IF(maree) THEN
166 ! CALL FIND_VARIABLE(FFORMAT,NPRE,VAR_NAME(I),F(1,1,I),NPOIN2,
167  CALL find_variable(fformat,npre,var_name(nf+1),tra01,npoin,
168  & istat,record=-1)
169  CALL ov('X=Y ', x=depth, y=tra01(1:npoin2), dim1=npoin2)
170 
171 ! SETS TRIPLETS U,V,TV1 AND 2 TO UV,VV,AT
172  tm1=at
173  tm2=at
174  CALL ov('X=Y ', x=zm1, y=depth, dim1=npoin2)
175  CALL ov('X=Y ', x=zm2, y=depth, dim1=npoin2)
176  CALL ov('X=C ', x=dzhdt, c=0.d0, dim1=npoin2)
177  ELSE
178  CALL find_variable(fformat,npre,var_name(nf+1),tra01,npoin,
179  & istat,record=-1)
180  CALL check_call(istat,'LECSUI:FIND_VARIABLE')
181  ENDIF
182 !
183 ! READS UC,VC,UV,VV IF HAS TO
184 !
185  IF(couran.OR.vent) THEN
186  IF(vent) THEN
187  CALL find_variable(fformat,npre,var_name(nf+2),tra01,4*npoin2,
188  & istat,record=-1)
189  CALL check_call(istat,'LECSUI:FIND_VARIABLE')
190  ELSE
191  CALL find_variable(fformat,npre,var_name(nf+2),tra01,2*npoin2,
192  & istat,record=-1)
193  CALL check_call(istat,'LECSUI:FIND_VARIABLE')
194  ENDIF
195  ENDIF
196 !
197  IF(couran) THEN
198  CALL ov('X=Y ', x=uc, y=tra01( 1: npoin2),
199  & dim1=npoin2)
200  CALL ov('X=Y ', x=vc, y=tra01(npoin2+1:2*npoin2),
201  & dim1=npoin2)
202 ! SETS TRIPLETS U,V,TV1 AND 2 TO UV,VV,AT
203  tc1=at
204  tc2=at
205  CALL ov('X=Y ', x=uc1, y=uc, dim1=npoin2)
206  CALL ov('X=Y ', x=uc2, y=uc, dim1=npoin2)
207  CALL ov('X=Y ', x=vc1, y=vc, dim1=npoin2)
208  CALL ov('X=Y ', x=vc2, y=vc, dim1=npoin2)
209  ENDIF
210 !
211  IF(vent) THEN
212  CALL ov('X=Y ', x=uv, y=tra01(2*npoin2+1:3*npoin2),
213  & dim1=npoin2)
214  CALL ov('X=Y ', x=vv, y=tra01(3*npoin2+1:4*npoin2),
215  & dim1=npoin2)
216 ! SETS TRIPLETS U,V,TV1 AND 2 TO UV,VV,AT
217  tv1=at
218  tv2=at
219  IF (namveb.NE.' '.OR.namvef.NE.' ') THEN
220  CALL ov('X=Y ', x=uv1, y=uv, dim1=npoin2)
221  CALL ov('X=Y ', x=uv2, y=uv, dim1=npoin2)
222  CALL ov('X=Y ', x=vv1, y=vv, dim1=npoin2)
223  CALL ov('X=Y ', x=vv2, y=vv, dim1=npoin2)
224  ENDIF
225  ENDIF
226 !
227 !-----------------------------------------------------------------------
228 !
229  RETURN
230  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.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 lecsui(F, NDIRE, NF, NPOIN2, VENT, COURAN, NPRE, FFORMAT, MAREE, TRA01)
Definition: lecsui.f:7
subroutine read_mesh_info(FFORMAT, NFIC, TITLE, NVAR, NPOIN, TYP_ELEM, NELEM, NPTFR, NPTIR, NDP, NPLAN, X_ORIG, Y_ORIG, TYP_BND_ELEM, NELEBD)
Definition: read_mesh_info.f:8
character(len=path_len), pointer namvef
subroutine find_variable(FFORMAT, FID, VAR_NAME, RES, N, IERR, TIME, EPS_TIME, RECORD, TIME_RECORD, OFFSET)
Definition: find_variable.f:8
character(len=path_len), pointer namveb
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