33 character*1 covered(ng,ng)
35 character*20 sideload(*)
37 integer ntr,i,j,k,l,mi(*),ntria,ntrib,
38 & ncovered,kontri(4,*),nloadtr(*),
39 & i1,j1,istart,iend,jstart,jend,imin,imid,imax,
40 & k1,kflag,
idist(*),ndist,i2,i3,ng,idi,idj,ntri,
41 & ix,iy,ntrit,limev,ier,nw,idata(1),ncalls,
42 & irowrad(*),jqrad(*),nzsrad,i0,nzsradv(3)
44 real*8 w(239),vold(0:mi(2),*),co(3,*),xn(3),xxn,xy(ng),
45 & pmid(3,*),e3(4,*),e1(3,*),e2(3,*),p1(3),p2(3),p3(3),
46 & x,y,porigin(3),yqmin,yqmax,xqmin,anglemin,distance,
47 & xxmid,xqmax,dummy,a(3,3),b(3,3),c(3,3),ddd(3),p31(3),
49 & dirloc(3),
dist(*),area(*),dd,p21(3),sidemean,r(3,3),
50 &
fform,pl(2,3),epsabs,epsrel,abserr,q(3,3),
51 & rdata(21),factor,argument
61 anglemin=dacos((ng/2.d0-1.d0)/(ng/2.d0))
75 if(area(i).lt.1.d-20) cycle
90 porigin(j)=co(j,i1)+vold(j,i1)
91 p2(j)=co(j,i2)+vold(j,i2)
92 p3(j)=co(j,i3)+vold(j,i3)
93 p21(j)=p2(j)-porigin(j)
94 p31(j)=p3(j)-porigin(j)
98 pl(1,2)=dsqrt(p21(1)**2+p21(2)**2+p21(3)**2)
100 pl(1,3)=p31(1)*e1(1,i)+p31(2)*e1(2,i)+p31(3)*e1(3,i)
101 pl(2,3)=p31(1)*e2(1,i)+p31(2)*e2(2,i)+p31(3)*e2(3,i)
114 if((kontri(1,j).eq.0).or.(area(j).lt.1.d-20).or.
122 distance=dsqrt((pmid(1,j)-pmid(1,i))**2+
123 & (pmid(2,j)-pmid(2,i))**2+
124 & (pmid(3,j)-pmid(3,i))**2)
125 if((pmid(1,j)*e3(1,i)+pmid(2,j)*e3(2,i)+
126 & pmid(3,j)*e3(3,i)+e3(4,i))/distance.le.anglemin) cycle
127 if((pmid(1,i)*e3(1,j)+pmid(2,i)*e3(2,j)+
128 & pmid(3,i)*e3(3,j)+e3(4,j))/distance.le.anglemin) cycle
135 if(sideload(nloadtr(idi))(18:20).ne.
136 & sideload(nloadtr(idj))(18:20)) cycle
155 xy(i1)=((i1-0.5d0)*dint-1.d0)**2
165 if(x+xy(j1).gt.1.d0)
then 189 r(k,1)=co(k,kontri(1,j))+vold(k,kontri(1,j))-pmid(k,i)
191 ddd(1)=dsqrt(r(1,1)*r(1,1)+r(2,1)*r(2,1)+r(3,1)*r(3,1))
195 xq(1)=r(1,1)*e1(1,i)+r(2,1)*e1(2,i)+r(3,1)*e1(3,i)
196 yq(1)=r(1,1)*e2(1,i)+r(2,1)*e2(2,i)+r(3,1)*e2(3,i)
199 r(k,2)=co(k,kontri(2,j))+vold(k,kontri(2,j))-pmid(k,i)
201 ddd(2)=dsqrt(r(1,2)*r(1,2)+r(2,2)*r(2,2)+r(3,2)*r(3,2))
205 xq(2)=r(1,2)*e1(1,i)+r(2,2)*e1(2,i)+r(3,2)*e1(3,i)
206 yq(2)=r(1,2)*e2(1,i)+r(2,2)*e2(2,i)+r(3,2)*e2(3,i)
209 r(k,3)=co(k,kontri(3,j))+vold(k,kontri(3,j))-pmid(k,i)
211 ddd(3)=dsqrt(r(1,3)*r(1,3)+r(2,3)*r(2,3)+r(3,3)*r(3,3))
215 xq(3)=r(1,3)*e1(1,i)+r(2,3)*e1(2,i)+r(3,3)*e1(3,i)
216 yq(3)=r(1,3)*e2(1,i)+r(2,3)*e2(2,i)+r(3,3)*e2(3,i)
242 dirloc(1)=(xq(1)+xq(2)+xq(3))/3.d0
243 dirloc(2)=(yq(1)+yq(2)+yq(3))/3.d0
247 ix=int((dirloc(1)+1.d0)/dint)+1
248 iy=int((dirloc(2)+1.d0)/dint)+1
249 if(covered(ix,iy).eq.
'T')
then 256 dir(k)=(pmid(k,j)-pmid(k,i))/
dist(k1)
261 dirloc(3)=
dir(1)*e3(1,i)+
dir(2)*e3(2,i)+
dir(3)*e3(3,i)
266 if(
dist(k1).le.factor*dsqrt(area(i))*dirloc(3))
then 272 q(l,k)=co(l,kontri(k,j))+vold(l,kontri(k,j))
310 call cubtri(
fform,pl,epsrel,limev,ftij,abserr,ncalls,
311 & w,nw,idata,rdata,ier)
347 if(dabs(xq(2)-xq(1)).lt.1.d-5) xq(2)=xq(1)+1.d-5
348 if(dabs(xq(2)-xq(1)).lt.1.d-5) xq(2)=xq(1)+1.d-5
353 if(
dist(k1).gt.factor*dsqrt(area(i))*dirloc(3))
then 358 xn(1)=r(2,k)*r(3,l)-r(2,l)*r(3,k)
359 xn(2)=r(3,k)*r(1,l)-r(3,l)*r(1,k)
360 xn(3)=r(1,k)*r(2,l)-r(1,l)*r(2,k)
361 xxn=dsqrt(xn(1)**2+xn(2)**2+xn(3)**2)
369 & r(1,k)*r(1,l)+r(2,k)*r(2,l)+r(3,k)*r(3,l)
372 if(dabs(argument).gt.1.d0)
then 373 if(argument.gt.0.d0)
then 382 & +e3(3,i)*xn(3))/xxn
385 ftij=ftij*area(i)/2.d0
391 & idi,idj,ftij,i0,i0,nzsradv)
398 if(xq(k).lt.xqmin)
then 402 if(xq(k).gt.xqmax)
then 408 if(((imin.eq.1).and.(imax.eq.2)).or.
409 & ((imin.eq.2).and.(imax.eq.1)))
then 412 elseif(((imin.eq.2).and.(imax.eq.3)).or.
413 & ((imin.eq.3).and.(imax.eq.2)))
then 423 if(xxmid-xqmin.lt.1.d-5)
then 427 if(xqmax-xxmid.lt.1.d-5)
then 437 c(1,2)=yq(1)*xq(2)-xq(1)*yq(2)
441 c(2,3)=yq(2)*xq(3)-xq(2)*yq(3)
445 c(3,1)=yq(3)*xq(1)-xq(3)*yq(1)
457 istart=int((xqmin+1.d0+dint/2.d0)/dint)+1
458 iend=int((xxmid+1.d0+dint/2.d0)/dint)
460 x=dint*(i1-0.5d0)-1.d0
461 yqmin=-(a(imin,imid)*x+c(imin,imid))/b(imin,imid)
462 yqmax=-(a(imin,imax)*x+c(imin,imax))/b(imin,imax)
463 if(yqmin.gt.yqmax)
then 468 jstart=int((yqmin+1.d0+dint/2.d0)/dint)+1
469 jend=int((yqmax+1.d0+dint/2.d0)/dint)
473 ncovered=ncovered+jend-jstart+1
476 istart=int((xxmid+1.d0+dint/2.d0)/dint)+1
477 iend=int((xqmax+1.d0+dint/2.d0)/dint)
479 x=dint*(i1-0.5d0)-1.d0
480 yqmin=-(a(imid,imax)*x+c(imid,imax))/b(imid,imax)
481 yqmax=-(a(imin,imax)*x+c(imin,imax))/b(imin,imax)
482 if(yqmin.gt.yqmax)
then 487 jstart=int((yqmin+1.d0+dint/2.d0)/dint)+1
488 jend=int((yqmax+1.d0+dint/2.d0)/dint)
492 ncovered=ncovered+jend-jstart+1
494 if(ncovered.eq.ng*ng)
exit subroutine dir(N, B, X, NELT, IA, JA, A, ISYM, MATVEC, MSOLVE, ITOL, TOL, ITMAX, ITER, ERR, IERR, IUNIT, R, Z, DZ, RWORK, IWORK)
Definition: dir.f:5
subroutine cubtri(F, T, EPS, MCALLS, ANS, ERR, NCALLS, W, NW, IDATA, RDATA, IER)
Definition: cubtri.f:7
static ITG * idist
Definition: radflowload.c:39
static double * dist
Definition: radflowload.c:42
static double * adview
Definition: radflowload.c:42
real *8 function fform(x, y, idata, rdata)
Definition: calcview.f:505
subroutine add_sm_st_as(au, ad, jq, irow, i, j, value, i0, i1, nzs)
Definition: add_sm_st_as.f:20
subroutine dsort(dx, iy, n, kflag)
Definition: dsort.f:6
static double * auview
Definition: radflowload.c:42