1 SUBROUTINE rayatt(x,nw,y,nh,cspln,nxd,dx,dy,xaxd,yaxd,psiaxd,
2 $ xmin,xmax,ymin,ymax,psivl,thet,xc,yc,pds,ifail)
6 REAL(rprec) :: x(nw),y(nh),cspln(2,nxd,1),dx,dy,xaxd,yaxd,psiaxd
7 REAL(rprec) :: xmin,xmax,ymin,ymax
8 REAL(rprec) :: psivl,thet,xc,yc,pds(6)
11 INTEGER,
PARAMETER :: kmax=129, nmax=20
12 REAL(rprec),
PARAMETER :: rndoff0=1.e-9
13 REAL(rprec),
PARAMETER :: serrt=1.e-9 ,serrs=10.*serrt
14 INTEGER :: izone,iflag,kountr,newti,ier
15 REAL(rprec) :: pi, COSt, SINt, sgn
16 REAL(rprec) :: a, bincp, x1, y1, x2, y2, psi1, psi2
17 REAL(rprec) :: xn,yn,delx,dely,serr,xnorm,pnorm,dpsi,dpsids,rndoff
18 REAL(rprec) :: rangex,rangey,dum
24 izone=int(2*thet/pi+sign(0.5_dbl,thet))
49 rangex=(x2-xmin)*(x2-xmax)
50 rangey=(y2-ymin)*(y2-ymax)
51 IF (rangex .gt. 0. .or. rangey .gt. 0.)
then
53 CALL errray1(1,psivl,thet,x2,y2,dum,dum,dum)
57 CALL bcsplint(x,y,cspln,nw,nh,nxd,x2,y2,pds,1,ier)
59 IF ((psivl-psi1)*(psivl-psi2) .le. 0.)
go to 10
65 CALL errray1(2,psivl,thet,x2,y2,dum,dum,dum)
68 xnorm=sqrt(xmax*xmax+xmin*xmin+ymax*ymax+ymin*ymin)
69 pnorm=abs(psi1)+abs(psi2)
70 rndoff=rndoff0*(pnorm/xnorm)
80 CALL bcsplint(x,y,cspln,nw,nh,nxd,xn,yn,pds,3,ier)
81 dpsids=pds(2)*cost+pds(3)*sint
83 IF (abs(dpsids) .gt. rndoff)
then
88 IF (abs(serr) .lt. serrt)
go to 20
95 CALL errray1(3,psivl,thet,xn,yn,serr,serrt,serrs)