5 &(u,v,h,qsxc,qsyc,charr,qsxs,qsys,susp,
6 & ikle,nelmax,nelem,x,y,dt,ncp,ctrlsc,info,tps)
61 & liste,deja_flusec,nseg,volneg,
62 & volpos,flx,flxs,volnegs,volposs,
63 & flxc,volnegc,volposc
71 INTEGER,
INTENT(IN) :: NELMAX,NELEM,NCP
72 INTEGER,
INTENT(IN) :: IKLE(nelmax,*)
73 INTEGER,
INTENT(IN) :: CTRLSC(ncp)
74 DOUBLE PRECISION,
INTENT(IN) :: X(*),Y(*),TPS,DT
75 LOGICAL,
INTENT(IN) :: INFO,SUSP,CHARR
76 TYPE(bief_obj),
INTENT(IN) :: U,V,H,QSXC,QSYC,QSXS,QSYS
81 INTEGER,
PARAMETER :: NSEMAX = 100
83 INTEGER IELEM,I1,I2,I3,ELBEST,IGBEST,ILBEST
84 INTEGER ILPREC,ISEG,ISEC,NSEC,PT,DEP,ARR
86 DOUBLE PRECISION DIST,DIST1,DIST2,DIST3
87 DOUBLE PRECISION H1,H2,X1,Y1,X2,Y2,UN1,UN2,NX,NY,SUR6
97 IF(.NOT.deja_flusec)
THEN 101 ALLOCATE(flx(nsec) ,stat=err)
102 ALLOCATE(volneg(nsec) ,stat=err)
103 ALLOCATE(volpos(nsec) ,stat=err)
104 ALLOCATE(nseg(ncp) ,stat=err)
105 ALLOCATE(liste(ncp,nsemax,2) ,stat=err)
107 ALLOCATE(flxs(nsec) ,stat=err)
108 ALLOCATE(volnegs(nsec) ,stat=err)
109 ALLOCATE(volposs(nsec) ,stat=err)
110 ALLOCATE(flxc(nsec) ,stat=err)
111 ALLOCATE(volnegc(nsec) ,stat=err)
112 ALLOCATE(volposc(nsec) ,stat=err)
116 200
FORMAT(1x,
'FLUSEC: ERROR DURING ALLOCATION OF MEMORY: ',/,1x,
117 &
'ERROR CODE: ',1i6)
141 dep = ctrlsc(1+2*(isec-1))
142 arr = ctrlsc(2+2*(isec-1))
146 IF(dep.EQ.0.AND.arr.EQ.0)
THEN 150 IF((dep.EQ.0.AND.arr.NE.0).OR.(dep.NE.0.AND.arr.EQ.0))
THEN 157 dist=(x(dep)-x(arr))**2+(y(dep)-y(arr))**2
166 IF(pt.EQ.i1.OR.pt.EQ.i2.OR.pt.EQ.i3)
THEN 167 dist1 = (x(i1)-x(arr))**2 + (y(i1)-y(arr))**2
168 dist2 = (x(i2)-x(arr))**2 + (y(i2)-y(arr))**2
169 dist3 = (x(i3)-x(arr))**2 + (y(i3)-y(arr))**2
170 IF(dist1.LT.dist)
THEN 175 IF(i1.EQ.pt) ilprec = 1
176 IF(i2.EQ.pt) ilprec = 2
177 IF(i3.EQ.pt) ilprec = 3
179 IF(dist2.LT.dist)
THEN 184 IF(i1.EQ.pt) ilprec = 1
185 IF(i2.EQ.pt) ilprec = 2
186 IF(i3.EQ.pt) ilprec = 3
188 IF(dist3.LT.dist)
THEN 193 IF(i1.EQ.pt) ilprec = 1
194 IF(i2.EQ.pt) ilprec = 2
195 IF(i3.EQ.pt) ilprec = 3
201 IF(igbest.EQ.pt)
THEN 203 33
FORMAT(1x,
'FLUSEC : ALGORITHM FAILED')
209 IF(iseg.GT.nsemax)
THEN 210 WRITE(
lu,*)
'FLUSEC: TOO MANY SEGMENTS IN A ' 211 WRITE(
lu,*)
' SECTION. INCREASE NSEMAX' 215 liste(isec,iseg,1) = ikle(elbest,ilprec)
216 liste(isec,iseg,2) = ikle(elbest,ilbest)
217 IF(igbest.NE.arr)
GO TO 10
228 nseg(isec) =
chain(isec)%NSEG
231 liste(isec,iseg,1) =
chain(isec)%LISTE(iseg,1)
232 liste(isec,iseg,2) =
chain(isec)%LISTE(iseg,2)
234 WRITE(
lu,*)
'CHAIN@SISYPHE -> LISTE@SISYPHE:' 235 WRITE(
lu,*)
'ISEC,NSEG(ISEC): ',isec,nseg(isec)
237 WRITE(
lu,*) liste(isec,iseg,:)
258 IF(nseg(isec).GE.1)
THEN 263 DO iseg = 1 , nseg(isec)
264 i1 = liste(isec,iseg,1)
265 i2 = liste(isec,iseg,2)
274 un1= u%R(i1)*nx + v%R(i1)*ny
275 un2= u%R(i2)*nx + v%R(i2)*ny
276 flx(isec) = flx(isec) + ((h1+h2)*(un1+un2)+h2*un2+h1*un1)*sur6
278 un1= qsxs%R(i1)*nx + qsys%R(i1)*ny
279 un2= qsxs%R(i2)*nx + qsys%R(i2)*ny
280 flxs(isec) = flxs(isec) + 0.5d0*(un1+un2)
283 un1= qsxc%R(i1)*nx + qsyc%R(i1)*ny
284 un2= qsxc%R(i2)*nx + qsyc%R(i2)*ny
285 flxc(isec) = flxc(isec) + 0.5d0*(un1+un2)
289 IF(flx(isec).GT.0.d0)
THEN 290 volpos(isec) = volpos(isec) + flx(isec)*dt
292 volneg(isec) = volneg(isec) + flx(isec)*dt
296 IF(flxs(isec).GT.0.d0)
THEN 297 volposs(isec) = volposs(isec) + flxs(isec)*dt
299 volnegs(isec) = volnegs(isec) + flxs(isec)*dt
304 IF(flxc(isec).GT.0.d0)
THEN 305 volposc(isec) = volposc(isec) + flxc(isec)*dt
307 volnegc(isec) = volnegc(isec) + flxc(isec)*dt
322 & flxs,volnegs,volposs,susp,
323 & flxc,volnegc,volposc,charr)
subroutine fluxpr_sisyphe(NSEC, CTRLSC, FLX, VOLNEG, VOLPOS, INFO, TPS, NSEG, NCSIZE, FLXS, VOLNEGS, VOLPOSS, SUSP, FLXC, VOLNEGC, VOLPOSC, CHARR)
logical old_method_flusec
subroutine flusec_sisyphe(U, V, H, QSXC, QSYC, CHARR, QSXS, QSYS, SUSP, IKLE, NELMAX, NELEM, X, Y, DT, NCP, CTRLSC, INFO, TPS)
integer function global_to_local_point(IPOIN, MESH)
type(chain_type), dimension(:), allocatable chain
type(bief_mesh), target mesh