33 character*20 labmpc(*)
35 integer nface,ielfa(4,*),ifabou(*),i,iel1,iel2,nef,ibou,
36 & neifa(*),icyclic,ifa,indexf,k,l,m,ipnei(*),ifatie(*),
37 & is,ie,nmpc,ipompc(*),nodempc(3,*),ifaext(*),nfaext,nactdoh(*)
39 real*8 xrlfa(3,*),vel(nef,0:7),vfa(0:7,*),xbounact(*),xl1,xl2,
40 & vfap(0:7,nface),gradtel(3,*),gradtfa(3,*),rf(3),area(*),
41 & volume(*),xle(*),xxi(3,*),c(3,3),gradnor,xxn(3,*),
42 & xload(2,*),xxj(3,*),dd,xlet(*),coefmpc(*),q
44 intent(in) nface,ielfa,xrlfa,vel,
45 & ifabou,xbounact,nef,neifa,rf,area,volume,
46 & xle,xxi,icyclic,xxn,ipnei,ifatie,xload,xlet,xxj,
47 & coefmpc,nmpc,labmpc,ipompc,nodempc,ifaext,nfaext,nactdoh
49 intent(inout) vfa,gradtel,gradtfa
63 vfap(0,i)=xl1*vel(iel1,0)+xrlfa(2,i)*vel(iel2,0)
64 elseif(ielfa(3,i).gt.0)
then 68 if(ifabou(-iel2).gt.0)
then 72 vfap(0,i)=xbounact(ifabou(-iel2))
77 vfap(0,i)=xl1*vel(iel1,0)+xrlfa(3,i)*vel(ielfa(3,i),0)
94 call applympc(nface,ielfa,is,ie,ifabou,ipompc,vfap,coefmpc,
95 & nodempc,ipnei,neifa,labmpc,xbounact,nactdoh,
114 do indexf=ipnei(i)+1,ipnei(i+1)
117 gradtel(l,i)=gradtel(l,i)+
118 & vfap(0,ifa)*area(ifa)*xxn(l,indexf)
125 gradtel(l,i)=gradtel(l,i)/volume(i)
148 if((icyclic.eq.0).or.(ifatie(i).eq.0))
then 150 gradtfa(l,i)=xl1*gradtel(l,iel1)+
151 & xl2*gradtel(l,iel2)
153 elseif(ifatie(i).gt.0)
then 155 gradtfa(l,i)=xl1*gradtel(l,iel1)+xl2*
156 & (gradtel(1,iel2)*c(l,1)+
157 & gradtel(2,iel2)*c(l,2)+
158 & gradtel(3,iel2)*c(l,3))
162 gradtfa(l,i)=xl1*gradtel(l,iel1)+xl2*
163 & (gradtel(1,iel2)*c(1,l)+
164 & gradtel(2,iel2)*c(2,l)+
165 & gradtel(3,iel2)*c(3,l))
168 elseif(ielfa(3,i).gt.0)
then 176 if(ifabou(-iel2).gt.0)
then 181 gradtfa(l,i)=xl1*gradtel(l,iel1)+
182 & xrlfa(3,i)*gradtel(l,abs(ielfa(3,i)))
188 indexf=ipnei(iel1)+ielfa(4,i)
190 if(ifabou(-iel2+6).eq.0)
then 193 q=xload(1,ifabou(-iel2+6))
195 gradnor=gradtel(1,iel1)*xxn(1,indexf)
196 & +gradtel(2,iel1)*xxn(2,indexf)
197 & +gradtel(3,iel1)*xxn(3,indexf)-q
200 gradtfa(l,i)=gradtel(l,iel1)
201 & -gradnor*xxn(l,indexf)
208 indexf=ipnei(iel1)+ielfa(4,i)
209 gradnor=gradtel(1,iel1)*xxi(1,indexf)+
210 & gradtel(2,iel1)*xxi(2,indexf)+
211 & gradtel(3,iel1)*xxi(3,indexf)
213 gradtfa(l,i)=gradtel(l,iel1)
214 & -gradnor*xxi(l,indexf)
244 vfa(0,i)=vfap(0,i)+gradtfa(1,i)*rf(1)
245 & +gradtfa(2,i)*rf(2)
246 & +gradtfa(3,i)*rf(3)
247 elseif(ielfa(3,i).gt.0)
then 251 if(ifabou(-iel2).gt.0)
then 260 indexf=ipnei(iel1)+ielfa(4,i)
262 & +(gradtfa(1,i)*xxi(1,indexf)+
263 & gradtfa(2,i)*xxi(2,indexf)+
264 & gradtfa(3,i)*xxi(3,indexf))*xle(indexf)
275 indexf=ipnei(iel1)+ielfa(4,i)
277 & +(gradtfa(1,i)*xxi(1,indexf)+
278 & gradtfa(2,i)*xxi(2,indexf)+
279 & gradtfa(3,i)*xxi(3,indexf))*xle(indexf)
290 call applympc(nface,ielfa,is,ie,ifabou,ipompc,vfa,coefmpc,
291 & nodempc,ipnei,neifa,labmpc,xbounact,nactdoh,
310 do indexf=ipnei(i)+1,ipnei(i+1)
313 gradtel(l,i)=gradtel(l,i)+
314 & vfa(0,ifa)*area(ifa)*xxn(l,indexf)
321 gradtel(l,i)=gradtel(l,i)/volume(i)
344 if((icyclic.eq.0).or.(ifatie(i).eq.0))
then 346 gradtfa(l,i)=xl1*gradtel(l,iel1)+
347 & xl2*gradtel(l,iel2)
349 elseif(ifatie(i).gt.0)
then 351 gradtfa(l,i)=xl1*gradtel(l,iel1)+xl2*
352 & (gradtel(1,iel2)*c(l,1)+
353 & gradtel(2,iel2)*c(l,2)+
354 & gradtel(3,iel2)*c(l,3))
358 gradtfa(l,i)=xl1*gradtel(l,iel1)+xl2*
359 & (gradtel(1,iel2)*c(1,l)+
360 & gradtel(2,iel2)*c(2,l)+
361 & gradtel(3,iel2)*c(3,l))
364 elseif(ielfa(3,i).gt.0)
then 368 if(ifabou(-iel2).gt.0)
then 373 gradtfa(l,i)=xl1*gradtel(l,iel1)+
374 & xrlfa(3,i)*gradtel(l,abs(ielfa(3,i)))
380 indexf=ipnei(iel1)+ielfa(4,i)
382 if(ifabou(-iel2+6).eq.0)
then 385 q=xload(1,ifabou(-iel2+6))
388 gradnor=gradtel(1,iel1)*xxn(1,indexf)
389 & +gradtel(2,iel1)*xxn(2,indexf)
390 & +gradtel(3,iel1)*xxn(3,indexf)-q
393 gradtfa(l,i)=gradtel(l,iel1)
394 & -gradnor*xxn(l,indexf)
401 indexf=ipnei(iel1)+ielfa(4,i)
402 gradnor=gradtel(1,iel1)*xxi(1,indexf)+
403 & gradtel(2,iel1)*xxi(2,indexf)+
404 & gradtel(3,iel1)*xxi(3,indexf)
406 gradtfa(l,i)=gradtel(l,iel1)
407 & -gradnor*xxi(l,indexf)
427 indexf=ipnei(iel1)+ielfa(4,i)
428 dd=(vel(iel2,0)-vel(iel1,0))/xlet(indexf)
429 & -gradtfa(1,i)*xxj(1,indexf)
430 & -gradtfa(2,i)*xxj(2,indexf)
431 & -gradtfa(3,i)*xxj(3,indexf)
433 gradtfa(k,i)=gradtfa(k,i)+dd*xxj(k,indexf)
subroutine applympc(nface, ielfa, is, ie, ifabou, ipompc, vfa, coefmpc, nodempc, ipnei, neifa, labmpc, xbounact, nactdoh, ifaext, nfaext)
Definition: applympc.f:21