5 &(mesh,qsx,qsy,limtec,unsv2d,ebor,
breach,nseg,nptfr,npoin,
6 & kent,kdir,kddl,dt,zfcl,flux,csf_sable,flbcla,ava,liqbor,qbor,
93 TYPE(bief_mesh),
INTENT(INOUT) :: MESH
94 TYPE(bief_obj),
INTENT(IN) :: QSX,QSY,LIMTEC,UNSV2D,EBOR
95 TYPE(bief_obj),
INTENT(IN) :: BREACH,LIQBOR,QBOR
96 INTEGER,
INTENT(IN) :: NSEG,NPTFR,NPOIN,KENT,KDIR,KDDL
97 DOUBLE PRECISION,
INTENT(IN) :: DT,CSF_SABLE
98 DOUBLE PRECISION,
INTENT(IN) :: AVA(npoin)
99 TYPE(bief_obj),
INTENT(INOUT) :: FLBCLA,ZFCL,FLUX
100 INTEGER,
INTENT(IN) :: NUBO(2,nseg)
101 DOUBLE PRECISION,
INTENT(IN) :: VNOIN(3,nseg)
105 INTEGER :: ISEGIN,K,N,IEL,IEL1,IEL2,IELEM,NELEM,ERR
106 DOUBLE PRECISION :: QSMOY1,QSMOY2,QSP,VNOIN1,VNOIN2,RNORM,XN,YN
107 DOUBLE PRECISION :: ZFCLDIR,PROD_SCAL
108 LOGICAL,
ALLOCATABLE :: YESNO(:)
117 ALLOCATE(yesno(nseg),stat=err)
125 CALL os(
'X=0 ', x=flux)
131 isegin = mesh%ELTSEG%I(ielem+(k-1)*nelem)
132 IF(.NOT.yesno(isegin))
THEN 133 iel1 = nubo(1,isegin)
134 iel2 = nubo(2,isegin)
137 vnoin1 = vnoin(1,isegin)
138 vnoin2 = vnoin(2,isegin)
139 rnorm = vnoin(3,isegin)
140 prod_scal= (mesh%X%R(iel2)-mesh%X%R(iel1))*vnoin1+
141 & (mesh%Y%R(iel2)-mesh%Y%R(iel1))*vnoin2
142 IF(prod_scal.LT.0.d0)
THEN 143 iel1 = nubo(2,isegin)
144 iel2 = nubo(1,isegin)
148 qsmoy1 = 0.5d0*(qsx%R(iel1) + qsx%R(iel2))
149 qsmoy2 = 0.5d0*(qsy%R(iel1) + qsy%R(iel2))
152 qsp = vnoin1*qsmoy1 + vnoin2*qsmoy2
155 IF(breach%I(iel1).EQ.1.AND.qsp.GT.0.d0)
THEN 159 IF(breach%I(iel2).EQ.1.AND.qsp.LT.0.d0)
THEN 163 qsp = vnoin1*qsmoy1 + vnoin2*qsmoy2
166 IF(mesh%IFABOR%I(ielem+(k-1)*nelem).NE.-2)
THEN 167 flux%R(iel1) = flux%R(iel1) + rnorm*qsp
168 flux%R(iel2) = flux%R(iel2) - rnorm*qsp
171 flux%R(iel1) = flux%R(iel1) + 0.5d0*rnorm*qsp
172 flux%R(iel2) = flux%R(iel2) - 0.5d0*rnorm*qsp
186 xn = mesh%XNEBOR%R(k+nptfr)
187 yn = mesh%YNEBOR%R(k+nptfr)
194 IF(liqbor%I(k).EQ.kent)
THEN 195 flbcla%R(k) = qbor%R(k)
196 flux%R(iel) = flux%R(iel) + flbcla%R(k)
197 ELSEIF(limtec%I(k).EQ.kddl.OR.limtec%I(k).EQ.kdir)
THEN 199 flbcla%R(k)= qsx%R(iel)*xn + qsy%R(iel)*yn
201 flux%R(iel) = flux%R(iel) + flbcla%R(k)
214 xn = mesh%XNEBOR%R(k+nptfr)
215 yn = mesh%YNEBOR%R(k+nptfr)
222 IF(liqbor%I(k).EQ.kent)
THEN 223 flbcla%R(k) = qbor%R(k)
224 flux%R(iel) = flux%R(iel) + flbcla%R(k)*mesh%IFAC%I(iel)
225 ELSEIF(limtec%I(k).EQ.kddl.OR.limtec%I(k).EQ.kdir)
THEN 227 flbcla%R(k)= qsx%R(iel)*xn + qsy%R(iel)*yn
229 flux%R(iel) = flux%R(iel) + flbcla%R(k)*mesh%IFAC%I(iel)
239 IF(ncsize.GT.1)
CALL parcom(flux, 2, mesh)
244 CALL os(
'X=CYZ ', x=zfcl, y=flux, z=unsv2d, c=-dt)
248 IF(limtec%I(k).EQ.kdir.AND.liqbor%I(k).NE.kent)
THEN 252 zfcldir = ava(n)*ebor%R(k)*csf_sable
254 flbcla%R(k)=flbcla%R(k)-(zfcldir-zfcl%R(n))/(dt*unsv2d%R(n))
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
subroutine parcom(X, ICOM, MESH)
subroutine bedload_solvs_vf(MESH, QSX, QSY, LIMTEC, UNSV2D, EBOR, BREACH, NSEG, NPTFR, NPOIN, KENT, KDIR, KDDL, DT, ZFCL, FLUX, CSF_SABLE, FLBCLA, AVA, LIQBOR, QBOR, NUBO, VNOIN)