5 &(phiel,nelem,nelmax,eltseg,oriseg,fxmatpar,nseg,ikle,npoin,
6 & fn,fi_i,su,hdfdt,teta,yaflulim,flulim,yaflulimebe,flulimebe)
62 INTEGER,
INTENT(IN) :: NELEM,NELMAX,NPOIN,NSEG
63 INTEGER,
INTENT(IN) :: IKLE(nelmax,3)
64 INTEGER,
INTENT(IN) :: ELTSEG(nelmax,3)
65 INTEGER,
INTENT(IN) :: ORISEG(nelmax,3)
66 LOGICAL,
INTENT(IN) :: YAFLULIM,YAFLULIMEBE
67 DOUBLE PRECISION,
INTENT(IN) :: PHIEL(nelmax,3),TETA(npoin)
68 DOUBLE PRECISION,
INTENT(IN) :: FLULIMEBE(*)
69 DOUBLE PRECISION,
INTENT(IN) :: FXMATPAR(nseg),FLULIM(*)
70 DOUBLE PRECISION,
INTENT(INOUT) :: FI_I(npoin)
71 DOUBLE PRECISION,
INTENT(IN) :: SU(nelem),HDFDT(npoin)
72 TYPE(bief_obj),
INTENT(IN) :: FN
76 INTEGER IELEM,I1,I2,I3,I,ISEG1,ISEG2,ISEG3
77 DOUBLE PRECISION K1,K2,K3,FN1,FN2,FN3,BETA1,BETA2,BETA3
78 DOUBLE PRECISION FINCORR1,FINCORR2,FINCORR3,PHITCOR,COEF
80 DOUBLE PRECISION FP21,FP32,FP13,FP12,FP23,FP31
81 DOUBLE PRECISION MIN12,MIN23,MIN13,MT1,MT2,MT3
85 DOUBLE PRECISION,
PARAMETER :: EPSPHI=1.d-12
86 DOUBLE PRECISION,
PARAMETER :: TIERS =1.d0/3.d0
110 iseg1=eltseg(ielem,1)
111 iseg2=eltseg(ielem,2)
112 iseg3=eltseg(ielem,3)
118 fp12=max(min(k1,-k2),0.d0)*flulimebe((1-1)*nelmax+ielem)
119 fp23=max(min(k2,-k3),0.d0)*flulimebe((2-1)*nelmax+ielem)
120 fp31=max(min(k3,-k1),0.d0)*flulimebe((3-1)*nelmax+ielem)
121 fp21=max(min(k2,-k1),0.d0)*flulimebe((1-1)*nelmax+ielem)
122 fp32=max(min(k3,-k2),0.d0)*flulimebe((2-1)*nelmax+ielem)
123 fp13=max(min(k1,-k3),0.d0)*flulimebe((3-1)*nelmax+ielem)
131 IF(oriseg(ielem,1).EQ.1)
THEN 132 IF(fxmatpar(iseg1).GT.0.d0)
THEN 134 IF(fp21.GT. fxmatpar(iseg1)) fp21=fxmatpar(iseg1)
137 IF(fp12.GT.-fxmatpar(iseg1)) fp12=-fxmatpar(iseg1)
140 IF(fxmatpar(iseg1).GT.0.d0)
THEN 142 IF(fp12.GT. fxmatpar(iseg1)) fp12=fxmatpar(iseg1)
145 IF(fp21.GT.-fxmatpar(iseg1)) fp21=-fxmatpar(iseg1)
151 IF(oriseg(ielem,2).EQ.1)
THEN 152 IF(fxmatpar(iseg2).GT.0.d0)
THEN 154 IF(fp32.GT. fxmatpar(iseg2)) fp32=fxmatpar(iseg2)
157 IF(fp23.GT.-fxmatpar(iseg2)) fp23=-fxmatpar(iseg2)
160 IF(fxmatpar(iseg2).GT.0.d0)
THEN 162 IF(fp23.GT. fxmatpar(iseg2)) fp23=fxmatpar(iseg2)
165 IF(fp32.GT.-fxmatpar(iseg2)) fp32=-fxmatpar(iseg2)
171 IF(oriseg(ielem,3).EQ.1)
THEN 172 IF(fxmatpar(iseg3).GT.0.d0)
THEN 174 IF(fp13.GT. fxmatpar(iseg3)) fp13=fxmatpar(iseg3)
177 IF(fp31.GT.-fxmatpar(iseg3)) fp31=-fxmatpar(iseg3)
180 IF(fxmatpar(iseg3).GT.0.d0)
THEN 182 IF(fp31.GT.fxmatpar(iseg3)) fp31=fxmatpar(iseg3)
185 IF(fp13.GT.-fxmatpar(iseg3)) fp13=-fxmatpar(iseg3)
206 fi_i(i1)=fi_i(i1)+fp12*(fn1*(mt1-min12)-fn2*(mt2-min12))
207 & +fp13*(fn1*(mt1-min13)-fn3*(mt3-min13))
208 fi_i(i2)=fi_i(i2)+fp21*(fn2*(mt2-min12)-fn1*(mt1-min12))
209 & +fp23*(fn2*(mt2-min23)-fn3*(mt3-min23))
210 fi_i(i3)=fi_i(i3)+fp31*(fn3*(mt3-min13)-fn1*(mt1-min13))
211 & +fp32*(fn3*(mt3-min23)-fn2*(mt2-min23))
221 & hdfdt(i1)*coef+fp12*(fn1-fn2)*min12+fp13*(fn1-fn3)*min13
223 & hdfdt(i2)*coef+fp21*(fn2-fn1)*min12+fp23*(fn2-fn3)*min23
225 & hdfdt(i3)*coef+fp31*(fn3-fn1)*min13+fp32*(fn3-fn2)*min23
229 phitcor=fincorr1+fincorr2+fincorr3
231 IF(phitcor.GT.epsphi)
THEN 233 beta1=max(fincorr1,0.d0)
234 beta2=max(fincorr2,0.d0)
235 beta3=max(fincorr3,0.d0)
236 coef=phitcor/(beta1+beta2+beta3)
237 fi_i(i1)=fi_i(i1)+beta1*coef
238 fi_i(i2)=fi_i(i2)+beta2*coef
239 fi_i(i3)=fi_i(i3)+beta3*coef
240 ELSEIF(phitcor.LT.-epsphi)
THEN 242 beta1=min(fincorr1,0.d0)
243 beta2=min(fincorr2,0.d0)
244 beta3=min(fincorr3,0.d0)
245 coef=phitcor/(beta1+beta2+beta3)
246 fi_i(i1)=fi_i(i1)+beta1*coef
247 fi_i(i2)=fi_i(i2)+beta2*coef
248 fi_i(i3)=fi_i(i3)+beta3*coef
251 fi_i(i1)=fi_i(i1)+fincorr1
252 fi_i(i2)=fi_i(i2)+fincorr2
253 fi_i(i3)=fi_i(i3)+fincorr3
258 ELSEIF(yaflulim)
THEN 272 iseg1=eltseg(ielem,1)
273 iseg2=eltseg(ielem,2)
274 iseg3=eltseg(ielem,3)
280 fp12=max(min(k1,-k2),0.d0)*flulim(iseg1)
281 fp23=max(min(k2,-k3),0.d0)*flulim(iseg2)
282 fp31=max(min(k3,-k1),0.d0)*flulim(iseg3)
283 fp21=max(min(k2,-k1),0.d0)*flulim(iseg1)
284 fp32=max(min(k3,-k2),0.d0)*flulim(iseg2)
285 fp13=max(min(k1,-k3),0.d0)*flulim(iseg3)
292 IF(oriseg(ielem,1).EQ.1)
THEN 293 IF(fxmatpar(iseg1).GT.0.d0)
THEN 295 IF(fp21.GT. fxmatpar(iseg1)) fp21=fxmatpar(iseg1)
298 IF(fp12.GT.-fxmatpar(iseg1)) fp12=-fxmatpar(iseg1)
301 IF(fxmatpar(iseg1).GT.0.d0)
THEN 303 IF(fp12.GT. fxmatpar(iseg1)) fp12=fxmatpar(iseg1)
306 IF(fp21.GT.-fxmatpar(iseg1)) fp21=-fxmatpar(iseg1)
312 IF(oriseg(ielem,2).EQ.1)
THEN 313 IF(fxmatpar(iseg2).GT.0.d0)
THEN 315 IF(fp32.GT. fxmatpar(iseg2)) fp32=fxmatpar(iseg2)
318 IF(fp23.GT.-fxmatpar(iseg2)) fp23=-fxmatpar(iseg2)
321 IF(fxmatpar(iseg2).GT.0.d0)
THEN 323 IF(fp23.GT. fxmatpar(iseg2)) fp23=fxmatpar(iseg2)
326 IF(fp32.GT.-fxmatpar(iseg2)) fp32=-fxmatpar(iseg2)
332 IF(oriseg(ielem,3).EQ.1)
THEN 333 IF(fxmatpar(iseg3).GT.0.d0)
THEN 335 IF(fp13.GT. fxmatpar(iseg3)) fp13=fxmatpar(iseg3)
338 IF(fp31.GT.-fxmatpar(iseg3)) fp31=-fxmatpar(iseg3)
341 IF(fxmatpar(iseg3).GT.0.d0)
THEN 343 IF(fp31.GT.fxmatpar(iseg3)) fp31=fxmatpar(iseg3)
346 IF(fp13.GT.-fxmatpar(iseg3)) fp13=-fxmatpar(iseg3)
367 fi_i(i1)=fi_i(i1)+fp12*(fn1*(mt1-min12)-fn2*(mt2-min12))
368 & +fp13*(fn1*(mt1-min13)-fn3*(mt3-min13))
369 fi_i(i2)=fi_i(i2)+fp21*(fn2*(mt2-min12)-fn1*(mt1-min12))
370 & +fp23*(fn2*(mt2-min23)-fn3*(mt3-min23))
371 fi_i(i3)=fi_i(i3)+fp31*(fn3*(mt3-min13)-fn1*(mt1-min13))
372 & +fp32*(fn3*(mt3-min23)-fn2*(mt2-min23))
381 fincorr1=hdfdt(i1)*coef
382 & +fp12*(fn1-fn2)*min12+fp13*(fn1-fn3)*min13
383 fincorr2=hdfdt(i2)*coef
384 & +fp21*(fn2-fn1)*min12+fp23*(fn2-fn3)*min23
385 fincorr3=hdfdt(i3)*coef
386 & +fp31*(fn3-fn1)*min13+fp32*(fn3-fn2)*min23
390 phitcor=fincorr1+fincorr2+fincorr3
392 IF(phitcor.GT.epsphi)
THEN 394 beta1=max(fincorr1,0.d0)
395 beta2=max(fincorr2,0.d0)
396 beta3=max(fincorr3,0.d0)
397 coef=phitcor/(beta1+beta2+beta3)
398 fi_i(i1)=fi_i(i1)+beta1*coef
399 fi_i(i2)=fi_i(i2)+beta2*coef
400 fi_i(i3)=fi_i(i3)+beta3*coef
401 ELSEIF(phitcor.LT.-epsphi)
THEN 403 beta1=min(fincorr1,0.d0)
404 beta2=min(fincorr2,0.d0)
405 beta3=min(fincorr3,0.d0)
406 coef=phitcor/(beta1+beta2+beta3)
407 fi_i(i1)=fi_i(i1)+beta1*coef
408 fi_i(i2)=fi_i(i2)+beta2*coef
409 fi_i(i3)=fi_i(i3)+beta3*coef
412 fi_i(i1)=fi_i(i1)+fincorr1
413 fi_i(i2)=fi_i(i2)+fincorr2
414 fi_i(i3)=fi_i(i3)+fincorr3
433 iseg1=eltseg(ielem,1)
434 iseg2=eltseg(ielem,2)
435 iseg3=eltseg(ielem,3)
441 fp12=max(min(k1,-k2),0.d0)
442 fp23=max(min(k2,-k3),0.d0)
443 fp31=max(min(k3,-k1),0.d0)
444 fp21=max(min(k2,-k1),0.d0)
445 fp32=max(min(k3,-k2),0.d0)
446 fp13=max(min(k1,-k3),0.d0)
454 IF(oriseg(ielem,1).EQ.1)
THEN 455 IF(fxmatpar(iseg1).GT.0.d0)
THEN 457 IF(fp21.GT. fxmatpar(iseg1)) fp21=fxmatpar(iseg1)
460 IF(fp12.GT.-fxmatpar(iseg1)) fp12=-fxmatpar(iseg1)
463 IF(fxmatpar(iseg1).GT.0.d0)
THEN 465 IF(fp12.GT. fxmatpar(iseg1)) fp12=fxmatpar(iseg1)
468 IF(fp21.GT.-fxmatpar(iseg1)) fp21=-fxmatpar(iseg1)
474 IF(oriseg(ielem,2).EQ.1)
THEN 475 IF(fxmatpar(iseg2).GT.0.d0)
THEN 477 IF(fp32.GT. fxmatpar(iseg2)) fp32=fxmatpar(iseg2)
480 IF(fp23.GT.-fxmatpar(iseg2)) fp23=-fxmatpar(iseg2)
483 IF(fxmatpar(iseg2).GT.0.d0)
THEN 485 IF(fp23.GT. fxmatpar(iseg2)) fp23=fxmatpar(iseg2)
488 IF(fp32.GT.-fxmatpar(iseg2)) fp32=-fxmatpar(iseg2)
494 IF(oriseg(ielem,3).EQ.1)
THEN 495 IF(fxmatpar(iseg3).GT.0.d0)
THEN 497 IF(fp13.GT. fxmatpar(iseg3)) fp13=fxmatpar(iseg3)
500 IF(fp31.GT.-fxmatpar(iseg3)) fp31=-fxmatpar(iseg3)
503 IF(fxmatpar(iseg3).GT.0.d0)
THEN 505 IF(fp31.GT.fxmatpar(iseg3)) fp31=fxmatpar(iseg3)
508 IF(fp13.GT.-fxmatpar(iseg3)) fp13=-fxmatpar(iseg3)
529 fi_i(i1)=fi_i(i1)+fp12*(fn1*(mt1-min12)-fn2*(mt2-min12))
530 & +fp13*(fn1*(mt1-min13)-fn3*(mt3-min13))
531 fi_i(i2)=fi_i(i2)+fp21*(fn2*(mt2-min12)-fn1*(mt1-min12))
532 & +fp23*(fn2*(mt2-min23)-fn3*(mt3-min23))
533 fi_i(i3)=fi_i(i3)+fp31*(fn3*(mt3-min13)-fn1*(mt1-min13))
534 & +fp32*(fn3*(mt3-min23)-fn2*(mt2-min23))
544 & hdfdt(i1)*coef+fp12*(fn1-fn2)*min12+fp13*(fn1-fn3)*min13
546 & hdfdt(i2)*coef+fp21*(fn2-fn1)*min12+fp23*(fn2-fn3)*min23
548 & hdfdt(i3)*coef+fp31*(fn3-fn1)*min13+fp32*(fn3-fn2)*min23
552 phitcor=fincorr1+fincorr2+fincorr3
554 IF(phitcor.GT.epsphi)
THEN 556 beta1=max(fincorr1,0.d0)
557 beta2=max(fincorr2,0.d0)
558 beta3=max(fincorr3,0.d0)
559 coef=phitcor/(beta1+beta2+beta3)
560 fi_i(i1)=fi_i(i1)+beta1*coef
561 fi_i(i2)=fi_i(i2)+beta2*coef
562 fi_i(i3)=fi_i(i3)+beta3*coef
563 ELSEIF(phitcor.LT.-epsphi)
THEN 565 beta1=min(fincorr1,0.d0)
566 beta2=min(fincorr2,0.d0)
567 beta3=min(fincorr3,0.d0)
568 coef=phitcor/(beta1+beta2+beta3)
569 fi_i(i1)=fi_i(i1)+beta1*coef
570 fi_i(i2)=fi_i(i2)+beta2*coef
571 fi_i(i3)=fi_i(i3)+beta3*coef
574 fi_i(i1)=fi_i(i1)+fincorr1
575 fi_i(i2)=fi_i(i2)+fincorr2
576 fi_i(i3)=fi_i(i3)+fincorr3
subroutine flux_ef_vf_3(PHIEL, NELEM, NELMAX, ELTSEG, ORISEG, FXMATPAR, NSEG, IKLE, NPOIN, FN, FI_I, SU, HDFDT, TETA, YAFLULIM, FLULIM, YAFLULIMEBE, FLULIMEBE)