1 subroutine r8herm2ev(xget,yget,x,nx,y,ny,ilinx,iliny,
17 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
90 call r8herm2xy(xget,yget,x,nx,y,ny,ilinx,iliny,
91 > i,j,xparam,yparam,hx,hxi,hy,hyi,ier)
94 call r8herm2fcn(ict,1,1,
95 > fval,i,j,xparam,yparam,hx,hxi,hy,hyi,f,inf2,ny)
104 subroutine r8herm2xy(xget,yget,x,nx,y,ny,ilinx,iliny,
105 > i,j,xparam,yparam,hx,hxi,hy,hyi,ier)
113 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
114 INTEGER nxm,nym,ii,jj
117 real*8 zxget,zyget,zxtol,zytol
157 if((xget.lt.x(1)).or.(xget.gt.x(nx)))
then
158 zxtol=4.0e-7_r8*max(abs(x(1)),abs(x(nx)))
159 if((xget.lt.x(1)-zxtol).or.(xget.gt.x(nx)+zxtol))
then
161 write(6,1001) xget,x(1),x(nx)
162 1001
format(
' ?herm2ev: xget=',1pe11.4,
' out of range ',
163 > 1pe11.4,
' to ',1pe11.4)
165 if((xget.lt.x(1)-0.5_r8*zxtol).or.
166 > (xget.gt.x(nx)+0.5_r8*zxtol))
167 >
write(6,1011) xget,x(1),x(nx)
168 1011
format(
' %herm2ev: xget=',1pe15.8,
' beyond range ',
169 > 1pe15.8,
' to ',1pe15.8,
' (fixup applied)')
170 if(xget.lt.x(1))
then
177 if((yget.lt.y(1)).or.(yget.gt.y(ny)))
then
178 zytol=4.0e-7_r8*max(abs(y(1)),abs(y(ny)))
179 if((yget.lt.y(1)-zytol).or.(yget.gt.y(ny)+zytol))
then
181 write(6,1002) yget,y(1),y(ny)
182 1002
format(
' ?herm2ev: yget=',1pe11.4,
' out of range ',
183 > 1pe11.4,
' to ',1pe11.4)
185 if((yget.lt.y(1)-0.5_r8*zytol).or.
186 > (yget.gt.y(ny)+0.5_r8*zytol))
187 >
write(6,1012) yget,y(1),y(ny)
188 1012
format(
' %herm2ev: yget=',1pe15.8,
' beyond range ',
189 > 1pe15.8,
' to ',1pe15.8,
' (fixup applied)')
190 if(yget.lt.y(1))
then
205 ii=1+nxm*(zxget-x(1))/(x(nx)-x(1))
207 if(zxget.lt.x(i))
then
209 else if(zxget.gt.x(i+1))
then
213 if((1.le.i).and.(i.lt.nxm))
then
214 if((x(i).le.zxget).and.(zxget.le.x(i+1)))
then
217 call r8zonfind(x,nx,zxget,i)
221 call r8zonfind(x,nx,zxget,i)
226 jj=1+nym*(zyget-y(1))/(y(ny)-y(1))
228 if(zyget.lt.y(j))
then
230 else if(zyget.gt.y(j+1))
then
234 if((1.le.j).and.(j.lt.nym))
then
235 if((y(j).le.zyget).and.(zyget.le.y(j+1)))
then
238 call r8zonfind(y,ny,zyget,j)
242 call r8zonfind(y,ny,zyget,j)
252 xparam=(zxget-x(i))*hxi
253 yparam=(zyget-y(j))*hyi
261 subroutine r8herm2fcn(ict,ivec,ivecd,
262 > fval,ii,jj,xparam,yparam,hx,hxi,hy,hyi,
268 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
269 INTEGER ny,inf2,i,j,iadr
272 real*8 xp,xpi,xp2,xpi2,ax,axbar,bx,bxbar,yp,ypi,yp2,ypi2,ay
273 real*8 aybar,by,bybar,axp,axbarp,bxp,bxbarp,ayp,aybarp,byp
280 integer ii(ivec),jj(ivec)
281 real*8 xparam(ivec),yparam(ivec)
284 real*8 hx(ivec),hy(ivec)
285 real*8 hxi(ivec),hyi(ivec)
288 real*8 fin(0:3,inf2,ny)
333 ax=xp2*(3.0_r8-2.0_r8*xp)
344 ay=yp2*(3.0_r8-2.0_r8*yp)
353 bxp=xp*(3.0_r8*xp-2.0_r8)
354 bxbarp=xpi*(3.0_r8*xpi-2.0_r8)
358 byp=yp*(3.0_r8*yp-2.0_r8)
359 bybarp=ypi*(3.0_r8*ypi-2.0_r8)
370 sum=axbar*(aybar*fin(0,i,j) +ay*fin(0,i,j+1))+
371 > ax*(aybar*fin(0,i+1,j)+ay*fin(0,i+1,j+1))
374 > bxbar*(aybar*fin(1,i,j) +ay*fin(1,i,j+1))+
375 > bx*(aybar*fin(1,i+1,j)+ay*fin(1,i+1,j+1)))
378 > axbar*(bybar*fin(2,i,j) +by*fin(2,i,j+1))+
379 > ax*(bybar*fin(2,i+1,j)+by*fin(2,i+1,j+1)))
381 sum=sum+hx(v)*hy(v)*(
382 > bxbar*(bybar*fin(3,i,j) +by*fin(3,i,j+1))+
383 > bx*(bybar*fin(3,i+1,j)+by*fin(3,i+1,j+1)))
395 > axbarp*(aybar*fin(0,i,j) +ay*fin(0,i,j+1))+
396 > axp*(aybar*fin(0,i+1,j)+ay*fin(0,i+1,j+1)))
399 > bxbarp*(aybar*fin(1,i,j) +ay*fin(1,i,j+1))+
400 > bxp*(aybar*fin(1,i+1,j)+ay*fin(1,i+1,j+1))
402 sum=sum+hxi(v)*hy(v)*(
403 > axbarp*(bybar*fin(2,i,j) +by*fin(2,i,j+1))+
404 > axp*(bybar*fin(2,i+1,j)+by*fin(2,i+1,j+1)))
407 > bxbarp*(bybar*fin(3,i,j) +by*fin(3,i,j+1))+
408 > bxp*(bybar*fin(3,i+1,j)+by*fin(3,i+1,j+1)))
420 > axbar*(aybarp*fin(0,i,j) +ayp*fin(0,i,j+1))+
421 > ax*(aybarp*fin(0,i+1,j)+ayp*fin(0,i+1,j+1)))
423 sum=sum+hx(v)*hyi(v)*(
424 > bxbar*(aybarp*fin(1,i,j) +ayp*fin(1,i,j+1))+
425 > bx*(aybarp*fin(1,i+1,j)+ayp*fin(1,i+1,j+1)))
428 > axbar*(bybarp*fin(2,i,j) +byp*fin(2,i,j+1))+
429 > ax*(bybarp*fin(2,i+1,j)+byp*fin(2,i+1,j+1))
432 > bxbar*(bybarp*fin(3,i,j) +byp*fin(3,i,j+1))+
433 > bx*(bybarp*fin(3,i+1,j)+byp*fin(3,i+1,j+1)))
445 > axbarp*(aybarp*fin(0,i,j) +ayp*fin(0,i,j+1))+
446 > axp*(aybarp*fin(0,i+1,j)+ayp*fin(0,i+1,j+1)))
449 > bxbarp*(aybarp*fin(1,i,j) +ayp*fin(1,i,j+1))+
450 > bxp*(aybarp*fin(1,i+1,j)+ayp*fin(1,i+1,j+1)))
453 > axbarp*(bybarp*fin(2,i,j) +byp*fin(2,i,j+1))+
454 > axp*(bybarp*fin(2,i+1,j)+byp*fin(2,i+1,j+1)))
457 > bxbarp*(bybarp*fin(3,i,j) +byp*fin(3,i,j+1))+
458 > bxp*(bybarp*fin(3,i+1,j)+byp*fin(3,i+1,j+1))
472 subroutine r8herm2fcnx(ict,ivec,ivecd,
473 > fval,ii,jj,xparam,yparam,hx,hxi,hy,hyi,
479 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
480 INTEGER ny,inf2,j,i,iadr
483 REAL*8 yp,ypi,yp2,ypi2,ay,aybar,by,bybar,ayp,aybarp,byp
484 real*8 bybarp,xp,xpi,xp2,xpi2,ax,axbar,bx,bxbar,axp,axbarp
492 REAL*8 xparam(ivec),yparam
499 real*8 fin(0:3,inf2,ny)
542 ay=yp2*(3.0_r8-2.0_r8*yp)
551 byp=yp*(3.0_r8*yp-2.0_r8)
552 bybarp=ypi*(3.0_r8*ypi-2.0_r8)
563 ax=xp2*(3.0_r8-2.0_r8*xp)
572 bxp=xp*(3.0_r8*xp-2.0_r8)
573 bxbarp=xpi*(3.0_r8*xpi-2.0_r8)
584 sum=axbar*(aybar*fin(0,i,j) +ay*fin(0,i,j+1))+
585 > ax*(aybar*fin(0,i+1,j)+ay*fin(0,i+1,j+1))
588 > bxbar*(aybar*fin(1,i,j) +ay*fin(1,i,j+1))+
589 > bx*(aybar*fin(1,i+1,j)+ay*fin(1,i+1,j+1)))
592 > axbar*(bybar*fin(2,i,j) +by*fin(2,i,j+1))+
593 > ax*(bybar*fin(2,i+1,j)+by*fin(2,i+1,j+1)))
596 > bxbar*(bybar*fin(3,i,j) +by*fin(3,i,j+1))+
597 > bx*(bybar*fin(3,i+1,j)+by*fin(3,i+1,j+1)))
609 > axbarp*(aybar*fin(0,i,j) +ay*fin(0,i,j+1))+
610 > axp*(aybar*fin(0,i+1,j)+ay*fin(0,i+1,j+1)))
613 > bxbarp*(aybar*fin(1,i,j) +ay*fin(1,i,j+1))+
614 > bxp*(aybar*fin(1,i+1,j)+ay*fin(1,i+1,j+1))
617 > axbarp*(bybar*fin(2,i,j) +by*fin(2,i,j+1))+
618 > axp*(bybar*fin(2,i+1,j)+by*fin(2,i+1,j+1)))
621 > bxbarp*(bybar*fin(3,i,j) +by*fin(3,i,j+1))+
622 > bxp*(bybar*fin(3,i+1,j)+by*fin(3,i+1,j+1)))
634 > axbar*(aybarp*fin(0,i,j) +ayp*fin(0,i,j+1))+
635 > ax*(aybarp*fin(0,i+1,j)+ayp*fin(0,i+1,j+1)))
638 > bxbar*(aybarp*fin(1,i,j) +ayp*fin(1,i,j+1))+
639 > bx*(aybarp*fin(1,i+1,j)+ayp*fin(1,i+1,j+1)))
642 > axbar*(bybarp*fin(2,i,j) +byp*fin(2,i,j+1))+
643 > ax*(bybarp*fin(2,i+1,j)+byp*fin(2,i+1,j+1))
646 > bxbar*(bybarp*fin(3,i,j) +byp*fin(3,i,j+1))+
647 > bx*(bybarp*fin(3,i+1,j)+byp*fin(3,i+1,j+1)))
659 > axbarp*(aybarp*fin(0,i,j) +ayp*fin(0,i,j+1))+
660 > axp*(aybarp*fin(0,i+1,j)+ayp*fin(0,i+1,j+1)))
663 > bxbarp*(aybarp*fin(1,i,j) +ayp*fin(1,i,j+1))+
664 > bxp*(aybarp*fin(1,i+1,j)+ayp*fin(1,i+1,j+1)))
667 > axbarp*(bybarp*fin(2,i,j) +byp*fin(2,i,j+1))+
668 > axp*(bybarp*fin(2,i+1,j)+byp*fin(2,i+1,j+1)))
671 > bxbarp*(bybarp*fin(3,i,j) +byp*fin(3,i,j+1))+
672 > bxp*(bybarp*fin(3,i+1,j)+byp*fin(3,i+1,j+1))