The TELEMAC-MASCARET system  trunk
derlag.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE derlag
3 ! *****************
4 !
5  &(u,v,dt,x,y,lt,ielm,ielmu,ndp,npoin,nelem,nelmax,xlag,ylag,dx,dy,
6  & nsp,shplag,deblag,finlag,eltlag,nlag,resux,resuy,ispdone,mesh)
7 !
8 !***********************************************************************
9 ! BIEF V6P2 21/08/2010
10 !***********************************************************************
11 !
12 !brief - SETS THE BARYCENTRIC COORDINATES IN THE MESH,
13 !+ AT THE START OF COMPUTATION FOR EACH DRIFTING FLOAT.
14 !+ HERE WE COMPUTE THE LAGRANGIAN DRIFT.
15 !+
16 !+ - COMPUTES THE SUCCESSIVE POSITIONS OF THIS FLOAT
17 !+ (SUBSEQUENT TIMESTEPS).
18 !
19 !warning Will not work in parallel (this would require calling scaract
20 !+ instead of char11, and adaptation of scaract)
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 J-M HERVOUET (LNHE)
35 !+ 19/06/2012
36 !+ V6P2
37 !+ Adapted to call SCARACT instead of CHAR11. However further
38 !+ modifications are required for parallelism.
39 !
40 !history J-M HERVOUET (LNHE)
41 !+ 28/10/2014
42 !+ V7P0
43 !+ Stopping drifts that exit the domain has been added
44 !+ + error message : parallelism does not work here.
45 !+ (possible but a long implementation copied on particles)
46 !
47 !history J-M HERVOUET (EDF LAB, LNHE)
48 !+ 14/08/2015
49 !+ V7P1
50 !+ Hardcoded argument NRK added for SCARACT.
51 !
52 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53 !| DEBLAG |-->| TIME STEP FOR STARTING THE COMPUTATION
54 !| DT |-->| TIME STEP
55 !| DX |<->| WORK ARRAY
56 !| DY |<->| WORK ARRAY
57 !| ELTLAG |<->| ELEMENT NUMBERS OF FLOATS
58 !| FINLAG |-->| TIME STEP FOR ENDING THE COMPUTATION
59 !| IELM |-->| TYPE OF ELEMENT IN THE MESH
60 !| IELMU |-->| TYPE OF ELEMENT FOR THE VELOCITIES
61 !| LT |-->| TIME STEP NUMBER.
62 !| MASKEL |-->| MASKING OF ELEMENTS.
63 !| | | =1. : NORMAL =0. : MASKED ELEMENT
64 !| MASKPT |-->| MASKING PER POINT.
65 !| MESH |-->| MESH STRUCTURE
66 !| NDP |-->| NUMBER OF POINTS PER ELEMENT
67 !| NELEM |-->| NUMBER OF ELEMENTS.
68 !| NELMAX |-->| MAXIMUM NUMBER OF ELEMENTS.
69 !| NLAG |-->| NOMBER OF FLOATS.
70 !| NPOIN |-->| NUMBER OF POINTS
71 !| NSP |-->| NUMBER OF SUB-STEPS IN THE RUNGE-KUTTA METHOD
72 !| RESUX |<--| ARRAY WITH SUCCESSIVE ABSCISSAE OF FLOATS
73 !| RESUY |<--| ARRAY WITH SUCCESSIVE ORDINATES OF FLOATS
74 !| SHPLAG |<->| BARYCENTRIC COORDINATES OF FLOATS
75 !| | | IN THEIR ELEMENTS.
76 !| T8 |-->| BLOCK OF WORK BIEF_OBJ STRUCTURES.
77 !| U |-->| X-COMPONENT OF VELOCITY
78 !| V |-->| Y-COMPONENT OF VELOCITY
79 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
80 !| XLAG |<->| INSTANTANEOUS X POSITIONS OF FLOATS
81 !| Y |-->| ORDINATES OF POINTS IN THE MESH
82 !| YLAG |<->| INSTANTANEOUS Y POSITIONS OF FLOATS
83 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
84 !
85  USE bief, ex_derlag => derlag
86  USE streamline
87 !
89  IMPLICIT NONE
90 !
91 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
92 !
93  INTEGER , INTENT(IN) :: NPOIN,LT,IELM,NDP,NELEM,NLAG
94  INTEGER , INTENT(IN) :: NELMAX,IELMU
95  DOUBLE PRECISION, INTENT(IN) :: U(npoin),V(npoin),DT
96  DOUBLE PRECISION, INTENT(IN) :: X(npoin),Y(npoin)
97  DOUBLE PRECISION, INTENT(INOUT) :: XLAG(npoin,nlag)
98  DOUBLE PRECISION, INTENT(INOUT) :: YLAG(npoin,nlag)
99  INTEGER , INTENT(INOUT) :: DEBLAG(nlag),FINLAG(nlag)
100  INTEGER , INTENT(INOUT) :: ELTLAG(npoin,nlag)
101  INTEGER , INTENT(INOUT) :: ISPDONE(npoin)
102  DOUBLE PRECISION, INTENT(INOUT) :: DX(npoin),DY(npoin)
103  INTEGER , INTENT(INOUT) :: NSP(npoin)
104  DOUBLE PRECISION, INTENT(INOUT) :: RESUX(npoin),RESUY(npoin)
105  DOUBLE PRECISION, INTENT(INOUT) :: SHPLAG(ndp,npoin,nlag)
106  TYPE(bief_mesh) , INTENT(INOUT) :: MESH
107 !
108 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
109 !
110  INTEGER ILAG,JLAG,LTT,IPOIN,ETA(1),SENS,NPLAN,FRE(1),FREBUF(1),NRK
111  TYPE(bief_obj) :: SVOID
112 !
113  DOUBLE PRECISION ZSTAR(1),ZCONV(1),SHZ(1),Z(1),SHF(1)
114  DOUBLE PRECISION SHPBUF(3,1),SHZBUF(1)
115 !
116 !-----------------------------------------------------------------------
117 !
118  IF(ncsize.GT.1) THEN
119  WRITE(lu,*) 'LAGRANGIAN DRIFTS NOT PROGRAMMED IN PARALLEL'
120  CALL plante(1)
121  stop
122  ENDIF
123 !
124 !-----------------------------------------------------------------------
125 !
126 ! HARDCODED NUMBER OF SUB-STEPS FOR COMPUTING THE PATH-LINES
127 !
128  nrk=3
129 !
130 ! 2D HERE
131 !
132  nplan=1
133 !
134 ! FORWARD CHARACTERISTICS
135 !
136  sens=1
137 !
138  DO ilag=1,nlag
139 !
140  IF(lt.EQ.deblag(ilag)) THEN
141 !
142 !-----------------------------------------------------------------------
143 !
144 ! - SETS THE BARYCENTRIC COORDINATES IN THE MESH , AT THE START
145 ! OF COMPUTATION FOR EACH FLOAT
146 !
147 !-----------------------------------------------------------------------
148 !
149  IF(ielm.EQ.11) THEN
150 !
151 ! P1 TRIANGLES
152 ! ============
153 !
154 ! FILLS THE SHP AND ELT (OPTIMISED)
155 !
156  CALL gtsh11(shplag(1,1,ilag),eltlag(1,ilag),mesh%IKLE%I,
157  & mesh%ELTCAR%I,
158  & npoin,nelem,nelmax,1,.false.,.false.)
159 ! 1=NSEG, WRONG VALUE, NOT USED
160 !
161  ELSE
162 !
163  WRITE(lu,*) ielm,': ELEMENT NOT IMPLEMENTED IN DERLAG'
164  CALL plante(1)
165  stop
166 !
167  ENDIF
168 !
169  CALL ov('X=Y ', x=xlag(1,ilag), y=x, dim1=npoin)
170  CALL ov('X=Y ', x=ylag(1,ilag), y=y, dim1=npoin)
171 !
172  ELSEIF(lt.GT.deblag(ilag).AND.lt.LE.finlag(ilag)) THEN
173 !
174 !-----------------------------------------------------------------------
175 !
176 ! COMPUTES THE SUCCESSIVE POSITIONS OF THIS FLOAT
177 ! (SUBSEQUENT TIMESTEPS)
178 !
179 !-----------------------------------------------------------------------
180 !
181  CALL scaract(svoid,svoid,u,v,v,v,x,y,
182  & zstar,zstar,xlag(1,ilag),ylag(1,ilag),
183  & zconv,zconv,
184  & dx,dy,dy,dy,z,shplag(1,1,ilag),shz,shf,
185  & mesh%SURDET%R,
186  & dt,mesh%IKLE%I,mesh%IFABOR%I,eltlag(1,ilag),
187  & eta,fre,nsp,ispdone,ielm,ielmu,nelem,nelmax,
188  & 0,npoin,ndp,nrk,nplan,1,
189  & mesh,npoin,bief_nbpts(ielmu,mesh),sens,
190 ! PROVISIONAL, THIS WILL NOT WORK IN PARALLEL
191  & shpbuf,shzbuf,shzbuf,frebuf,1,
192  & .true.)
193 ! POST : DATA KEPT FOR A POSTERIORI INTERPOLATION
194 ! HERE FOR NEXT STEP
195 !
196 !-----------------------------------------------------------------------
197 !
198 ! STOPPING THE FLOATS THAT LEFT THE DOMAIN
199 !
200 !-----------------------------------------------------------------------
201 !
202  DO ipoin=1,npoin
203  IF(eltlag(ipoin,ilag).LT.0) THEN
204 ! THIS POINT WILL NO LONGER BE TREATED
205  eltlag(ipoin,ilag) = 0
206 ! NEXT TWO LINES IN PREVIOUS VERSIONS
207 ! BUT WHY NOT KEEPING THE LAST POSITION AT THE EXIT?
208 ! XLAG(IPOIN,ILAG) = X(IPOIN)
209 ! YLAG(IPOIN,ILAG) = Y(IPOIN)
210  ENDIF
211  ENDDO
212 !
213 !-----------------------------------------------------------------------
214 !
215  ENDIF
216 !
217  ENDDO ! ILAG
218 !
219 !-----------------------------------------------------------------------
220 !
221 ! - STORAGE FOR RESULTS OUTPUT OF THE LAST COMPUTED FLOAT
222 !
223 !-----------------------------------------------------------------------
224 !
225  CALL ov('X=C ', x=resux, c=0.d0, dim1=npoin)
226  CALL ov('X=C ', x=resuy, c=0.d0, dim1=npoin)
227  ltt=0
228  jlag=1
229  DO ilag=1,nlag
230  IF(finlag(ilag).GT.ltt.AND.finlag(ilag).LE.lt) THEN
231  ltt=finlag(ilag)
232  jlag=ilag
233  ENDIF
234  ENDDO
235  IF(ltt.NE.0) THEN
236  CALL ov('X=Y-Z ', x=resux, y=xlag(1,jlag), z=x, dim1=npoin)
237  CALL ov('X=Y-Z ', x=resuy, y=ylag(1,jlag), z=y, dim1=npoin)
238  ENDIF
239 !
240 !-----------------------------------------------------------------------
241 !
242  RETURN
243  END
244 
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine gtsh11(SHP, ELT, IKLE, ELTCAR, NPOIN, NELEM, NELMAX, NSEG, QUAB, QUAD)
Definition: gtsh11.f:7
subroutine, public scaract(U, UTILD, UCONV, VCONV, WCONV, FRCONV, X, Y, ZSTAR, FREQ, XCONV, YCONV, ZCONV, FCONV, DX, DY, DZ, DF, Z, SHP, SHZ, SHF, SURDET, DT, IKLE, IFABOR, ELT, ETA, FRE, ELTBUF, ISUB, IELM, IELMU, NELEM, NELMAX, NOMB, NPOIN2, NDP, NRK, NPLAN, NF, MESH, NPLOT, DIM1U, SENS, SHPBUF, SHZBUF, SHFBUF, FREBUF, SIZEBUF, APOST, APERIO, AYA4D, ASIGMA, ASTOCHA, AVISC, AALG)
Definition: streamline.f:6854
integer function bief_nbpts(IELM, MESH)
Definition: bief_nbpts.f:7
subroutine derlag(U, V, DT, X, Y, LT, IELM, IELMU, NDP, NPOIN, NELEM, NELMAX, XLAG, YLAG, DX, DY, NSP, SHPLAG, DEBLAG, FINLAG, ELTLAG, NLAG, RESUX, RESUY, ISPDONE, MESH)
Definition: derlag.f:8
Definition: bief.f:3