1 SUBROUTINE cntourp(x,nw,y,nh,cspln,xc,yc,gsq,ipts,dx,dy,ntmx,psivl
114 INTEGER nw,nh,nxd,ntmx,ipts
115 REAL(rprec) x(nw),y(nh),cspln(2,nxd,nh),xc(ntmx)
116 $ ,yc(ntmx),gsq(ntmx), dx,dy
119 REAL(rprec) xaxd,yaxd,psiaxd
120 REAL(rprec) xemin,xemax,yemin,yemax,yxmin,yxmax,xymin,xymax
121 REAL(rprec) dang,arcl,bperr,xmin,xmax,ymin,ymax
122 common/cntd/xaxd,yaxd,
123 $ xemin,xemax,yemin,yemax,yxmin,yxmax,xymin,xymax,
124 $ dang,arcl,bperr,xmin,xmax,ymin,ymax
127 REAL(rprec) stfrac,delta
128 parameter(jcmax=5, ihlfmx=4)
129 parameter(stfrac=0.5,delta=0.1)
133 REAL(rprec) thet,dthet,theta0,dthet0,dthet1,dthet2,xn,yn,rad0,rad
134 REAL(rprec) bp1,bp2,bpers,bpdiff
136 INTEGER ntmx1,ier,jcount,ihalf,ipt1,ik
137 REAL(rprec) xcfn,ycfn,deli2,deln2,delfn2,delti2,deltn2
156 OPEN(unit=1, file=
"dump.txt", action=
'WRITE')
159 CALL bcsplint(x,y,cspln,nw,nh,nxd,x(i),y(j),pds,1,ier)
160 WRITE (1,*) x(i),y(j),pds(1)
165 CALL bcsplint(x,y,cspln,nw,nh,nxd,xaxd,yaxd,pds,1,ier)
167 IF(psiaxd .gt. psivl)
THEN
168 WRITE(6,*)
'errorin cntourp-cnt1'
175 CALL rayatt(x,nw,y,nh,cspln,nxd,dx,dy,xaxd,yaxd,psiaxd,
176 $ xmin,xmax,ymin,ymax,psivl,thet,xn,yn,pds,ifail)
177 IF (ifail .gt. 0)stop
178 bp1 = sqrt(pds(2)*pds(2) + pds(3)*pds(3))/xn
179 xemin = min(xn,xemin)
180 xemax = max(xn,xemax)
181 yemin = min(yn,yemin)
182 yemax = max(yn,yemax)
183 IF(xn .eq. xemax) yxmax = yn
184 IF(xn .eq. xemin) yxmin = yn
185 IF(yn .eq. yemax) xymax = xn
186 IF(yn .eq. yemin) xymin = xn
189 gsq(1)=(pds(2)**2+pds(3)**2)/xn**2
190 rad0=sqrt((xn-xaxd)**2+(yn-yaxd)**2)
197 5 jcount = jcount + 1
201 dthet = min(dthet0,arcl/rad0)
205 CALL rayatt(x,nw,y,nh,cspln,nxd,dx,dy,xaxd,yaxd,psiaxd,
206 $ xmin,xmax,ymin,ymax,psivl,thet,xn,yn,pds,ifail)
207 IF (ifail .gt. 0)stop
218 bp2 = sqrt(pds(2)*pds(2) + pds(3)*pds(3))/xn
219 bpdiff = abs(bp2-bp1)/max(bp2,bp1)
220 IF(bpdiff .ge. bpers)
THEN
222 IF(ihalf .le. ihlfmx)
THEN
234 IF(ipts .gt. ntmx1)
then
235 IF (jcount .ge. jcmax)
then
236 WRITE(6,*)
'error in cntourp--cnt2'
242 xemin = min(xn,xemin)
243 xemax = max(xn,xemax)
244 yemin = min(yn,yemin)
245 yemax = max(yn,yemax)
246 IF(xn .eq. xemax) yxmax = yn
247 IF(xn .eq. xemin) yxmin = yn
248 IF(yn .eq. yemax) xymax = xn
249 IF(yn .eq. yemin) xymin = xn
252 gsq(ipts)= (pds(2)**2+pds(3)**2)/xn**2
258 rad = sqrt((xn-xaxd)**2 + (yn-yaxd)**2)
259 dthet1 = dthet0*(rad0/rad)
261 dthet = min(dthet1,dthet2)
264 IF(thet .lt. twopi)
go to 10
275 deli2 = (xc( 2 )-xc( 1 ))*(xc( 2 )-xc( 1 ))
276 $ + (yc( 2 )-yc( 1 ))*(yc( 2 )-yc( 1 ))
277 deln2 = (xc(ipts)-xc(ipt1))*(xc(ipts)-xc(ipt1))
278 $ + (yc(ipts)-yc(ipt1))*(yc(ipts)-yc(ipt1))
279 delfn2 = (xcfn -xc(ipts))*(xcfn -xc(ipts))
280 $ + (ycfn -yc(ipts))*(ycfn -yc(ipts))
281 delti2 = deli2*delta*delta
282 deltn2 = deln2*delta*delta
283 IF((delfn2 .ge. delti2) .and. (delfn2 .ge. deltn2))
293 IF(jcount .gt. 1)
THEN
294 WRITE(3,2010) psivl,jcount,jcmax,bperr,bpers
295 WRITE(3,2020) xaxd,yaxd,psiaxd,psivl,ipts
296 WRITE(3,2021) ipts,(xc(ik),ik=1,ipts)
297 WRITE(3,2022) ipts,(yc(ik),ik=1,ipts)
299 2010
FORMAT(1x,
'needed to increment bpers for psivl =',e12.5,/,1x
300 $ ,
'jcount,jcmax,bperr,bpers ='
301 $ ,1x,i3,1x,i3,2x,e12.5,2x,e12.5)
302 2020
FORMAT(1x,/,
'xaxd/yaxd/psiaxd',/,1x,3e16.8,/,
303 $
'psivl',1x,e16.8,/,
'ipts',i7,/)
304 2021
FORMAT(/,1x,
'(xc(i),i=1,',i5,
')',/,(10(1x,e11.4)))
305 2022
FORMAT(/,1x,
'(yc(i),i=1,',i5,
')',/,(10(1x,e11.4)))
307 END SUBROUTINE cntourp