1 subroutine r8evintrp3d(xget,yget,zget,x,nx,y,ny,z,nz,jspline,
2 > f,icoeff,ixdim,iydim,izdim,ict,fval,ier)
18 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
31 integer :: ixdim,iydim,izdim
36 real*8 f(icoeff,ixdim,iydim,izdim)
123 real*8 xparam,yparam,zparam
137 call vecin3d_argchk(
'evintrp3d',jspline,
138 > icoeff,nx,ny,nz,ixdim,iydim,izdim,ier)
143 call r8herm3xyz(xget,yget,zget,x,nx,y,ny,z,nz,0,0,0,
144 > i,j,k,xparam,yparam,zparam,hx,hxi,hy,hyi,hz,hzi,ier)
147 call r8fvintrp3d(ict,1,1,
148 > fval,i,j,k,xparam,yparam,zparam,
149 > hx,hxi,hy,hyi,hz,hzi,
150 > jspline,f,icoeff,ixdim,iydim,izdim)
159 subroutine r8fvintrp3d(ict,ivec,ivecd,
160 > fval,ii,jj,kk,xparam,yparam,zparam,
161 > hx,hxi,hy,hyi,hz,hzi,
162 > jspline,fin,icoeff,ixdim,iydim,izdim)
168 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
173 integer ii(ivec),jj(ivec),kk(ivec)
174 real*8 xparam(ivec),yparam(ivec),zparam(ivec)
177 real*8 hx(ivec),hy(ivec),hz(ivec)
178 real*8 hxi(ivec),hyi(ivec),hzi(ivec)
181 integer :: jspline(3)
183 integer :: ixdim,iydim,izdim
184 REAL*8 fin(icoeff,ixdim,iydim,izdim)
186 real*8 fval(ivecd,10)
202 integer :: i,j,k1,k2,imaxx,imaxy,imaxz,linrank,cubrank,zonrank
203 logical :: splin_flag
206 integer :: iderivs(3,10),ict8(8),maxd_lin(8),maxd_cub(8)
207 integer :: idcub,idlin,idcub2(2),idlin2(2)
209 real*8 :: xp,yp,hhx,hhy,hhxi,hhyi,fac1,fac2(2)
210 real*8 :: h,hi,hhi,h2(2),h2i(2)
211 real*8 :: f22(2,2),f22b(2,2),f2222(2,2,2,2),ans22(2,2),ans1,ans2
212 real*8 :: f422(4,2,2),f422b(4,2,2)
214 real*8,
parameter :: one = 1.0_r8
215 real*8,
parameter :: sixth = 0.166666666666666667_r8
216 real*8,
parameter :: z36th = sixth*sixth
225 if(jspline(i).eq.-1)
then
226 zonrank = zonrank + 1
227 else if(jspline(i).eq.0)
then
228 linrank = linrank + 1
230 splin_flag = jspline(i).eq.2
231 cubrank = cubrank + 1
235 if(cubrank.eq.3)
then
238 call r8fvtricub(ict,ivec,ivecd,
239 > fval,ii,jj,kk,xparam,yparam,zparam,
240 > hx,hxi,hy,hyi,hz,hzi,
241 > fin,ixdim,iydim,izdim)
247 if(maxval(iderivs(1:3,i)).le.1)
then
250 call r8herm3fcn(ict8,ivec,ivecd,
251 > fval(1,i),ii,jj,kk,xparam,yparam,zparam,
252 > hx,hxi,hy,hyi,hz,hzi,
253 > fin,ixdim,iydim,izdim)
266 if(cubrank.eq.0)
then
267 if(jspline(1).eq.-1)
then
272 if(jspline(2).eq.-1)
then
277 if(jspline(3).eq.-1)
then
284 if((iderivs(1,i).le.imaxx).and.(iderivs(2,i).le.imaxy)
285 > .and.(iderivs(3,i).le.imaxz))
then
286 if(linrank.eq.3)
then
290 call r8pc3fcn(ict8,ivec,ivecd,
291 > fval(1,i), ii,jj,kk, xparam,yparam,zparam,
292 > hx,hxi, hy,hyi, hz,hzi,
293 > fin, ixdim,iydim,izdim)
294 else if(zonrank.eq.3)
then
297 fval(j,i)=fin(1,ii(j),jj(j),kk(j))
299 else if(linrank.eq.1)
then
300 if(jspline(1).eq.0)
then
303 if(iderivs(1,i).eq.0)
then
305 > (one-xparam(j))*fin(1,ii(j),jj(j),kk(j))
306 > +xparam(j)*fin(1,ii(j)+1,jj(j),kk(j))
309 > (fin(1,ii(j)+1,jj(j),kk(j))-
310 > fin(1,ii(j),jj(j),kk(j)))
313 else if(jspline(2).eq.0)
then
316 if(iderivs(2,i).eq.0)
then
318 > (one-yparam(j))*fin(1,ii(j),jj(j),kk(j))
319 > +yparam(j)*fin(1,ii(j),jj(j)+1,kk(j))
322 > (fin(1,ii(j),jj(j)+1,kk(j))-
323 > fin(1,ii(j),jj(j),kk(j)))
329 if(iderivs(3,i).eq.0)
then
331 > (one-zparam(j))*fin(1,ii(j),jj(j),kk(j))
332 > +zparam(j)*fin(1,ii(j),jj(j),kk(j)+1)
335 > (fin(1,ii(j),jj(j),kk(j)+1)-
336 > fin(1,ii(j),jj(j),kk(j)))
341 if(jspline(1).eq.-1)
then
344 if((iderivs(2,i).eq.0).and.
345 > (iderivs(3,i).eq.0))
then
346 fval(j,i) = (one-zparam(j))*
348 > fin(1,ii(j),jj(j),kk(j))
349 > +yparam(j)*fin(1,ii(j),jj(j)+1,kk(j)))
352 > fin(1,ii(j),jj(j),kk(j)+1)
353 > +yparam(j)*fin(1,ii(j),jj(j)+1,kk(j)+1))
355 else if((iderivs(2,i).eq.1).and.
356 > (iderivs(3,i).eq.0))
then
358 > (one-zparam(j))*fin(1,ii(j),jj(j)+1,kk(j))
359 > +zparam(j)*fin(1,ii(j),jj(j)+1,kk(j)+1)
360 > -(one-zparam(j))*fin(1,ii(j),jj(j),kk(j))
361 > -zparam(j)*fin(1,ii(j),jj(j),kk(j)+1) )
363 else if((iderivs(2,i).eq.0).and.
364 > (iderivs(3,i).eq.1))
then
366 > (one-yparam(j))*fin(1,ii(j),jj(j),kk(j)+1)
367 > +yparam(j)*fin(1,ii(j),jj(j)+1,kk(j)+1)
368 > -(one-yparam(j))*fin(1,ii(j),jj(j),kk(j))
369 > -yparam(j)*fin(1,ii(j),jj(j)+1,kk(j)) )
372 fval(j,i) = hyi(j)*hzi(j)*(
373 > fin(1,ii(j),jj(j),kk(j))
374 > -fin(1,ii(j),jj(j)+1,kk(j))
375 > -fin(1,ii(j),jj(j),kk(j)+1)
376 > +fin(1,ii(j),jj(j)+1,kk(j)+1))
380 else if(jspline(2).eq.-1)
then
383 if((iderivs(1,i).eq.0).and.
384 > (iderivs(3,i).eq.0))
then
385 fval(j,i) = (one-zparam(j))*
387 > fin(1,ii(j),jj(j),kk(j))
388 > +xparam(j)*fin(1,ii(j)+1,jj(j),kk(j)))
391 > fin(1,ii(j),jj(j),kk(j)+1)
392 > +xparam(j)*fin(1,ii(j)+1,jj(j),kk(j)+1))
394 else if((iderivs(1,i).eq.1).and.
395 > (iderivs(3,i).eq.0))
then
397 > (one-zparam(j))*fin(1,ii(j)+1,jj(j),kk(j))
398 > +zparam(j)*fin(1,ii(j)+1,jj(j),kk(j)+1)
399 > -(one-zparam(j))*fin(1,ii(j),jj(j),kk(j))
400 > -zparam(j)*fin(1,ii(j),jj(j),kk(j)+1) )
402 else if((iderivs(1,i).eq.0).and.
403 > (iderivs(3,i).eq.1))
then
405 > (one-xparam(j))*fin(1,ii(j),jj(j),kk(j)+1)
406 > +xparam(j)*fin(1,ii(j)+1,jj(j),kk(j)+1)
407 > -(one-xparam(j))*fin(1,ii(j),jj(j),kk(j))
408 > -xparam(j)*fin(1,ii(j)+1,jj(j),kk(j)) )
411 fval(j,i) = hxi(j)*hzi(j)*(
412 > fin(1,ii(j),jj(j),kk(j))
413 > -fin(1,ii(j)+1,jj(j),kk(j))
414 > -fin(1,ii(j),jj(j),kk(j)+1)
415 > +fin(1,ii(j)+1,jj(j),kk(j)+1))
422 if((iderivs(1,i).eq.0).and.
423 > (iderivs(2,i).eq.0))
then
424 fval(j,i) = (one-yparam(j))*
426 > fin(1,ii(j),jj(j),kk(j))
427 > +xparam(j)*fin(1,ii(j)+1,jj(j),kk(j)))
430 > fin(1,ii(j),jj(j)+1,kk(j))
431 > +xparam(j)*fin(1,ii(j)+1,jj(j)+1,kk(j)))
433 else if((iderivs(1,i).eq.1).and.
434 > (iderivs(2,i).eq.0))
then
436 > (one-yparam(j))*fin(1,ii(j)+1,jj(j),kk(j))
437 > +yparam(j)*fin(1,ii(j)+1,jj(j)+1,kk(j))
438 > -(one-yparam(j))*fin(1,ii(j),jj(j),kk(j))
439 > -yparam(j)*fin(1,ii(j),jj(j)+1,kk(j)) )
441 else if((iderivs(1,i).eq.0).and.
442 > (iderivs(2,i).eq.1))
then
444 > (one-xparam(j))*fin(1,ii(j),jj(j)+1,kk(j))
445 > +xparam(j)*fin(1,ii(j)+1,jj(j)+1,kk(j))
446 > -(one-xparam(j))*fin(1,ii(j),jj(j),kk(j))
447 > -xparam(j)*fin(1,ii(j)+1,jj(j),kk(j)) )
450 fval(j,i) = hxi(j)*hyi(j)*(
451 > fin(1,ii(j),jj(j),kk(j))
452 > -fin(1,ii(j)+1,jj(j),kk(j))
453 > -fin(1,ii(j),jj(j)+1,kk(j))
454 > +fin(1,ii(j)+1,jj(j)+1,kk(j)))
471 if(jspline(1).eq.2)
then
473 else if(jspline(1).eq.-1)
then
479 if(jspline(2).eq.2)
then
481 else if(jspline(2).eq.-1)
then
487 if(jspline(3).eq.2)
then
489 else if(jspline(3).eq.-1)
then
495 if(cubrank.eq.1)
then
499 if(jspline(1).ge.1)
then
501 idlin2(1)=iderivs(2,i)
502 idlin2(2)=iderivs(3,i)
503 else if(jspline(2).ge.1)
then
505 idlin2(1)=iderivs(1,i)
506 idlin2(2)=iderivs(3,i)
507 else if(jspline(3).ge.1)
then
509 idlin2(1)=iderivs(1,i)
510 idlin2(2)=iderivs(2,i)
513 if((iderivs(1,i).le.imaxx).and.(iderivs(2,i).le.imaxy)
514 > .and.(iderivs(3,i).le.imaxz))
then
515 if(linrank.eq.2)
then
517 if(jspline(1).ge.1)
then
525 f2222(1:2,1,1:2,1:2) =
526 > fin(1:2,ii(j),jj(j):jj(j)+1,kk(j):kk(j)+1)
527 f2222(1:2,2,1:2,1:2) =
528 > fin(1:2,ii(j)+1,jj(j):jj(j)+1,kk(j):kk(j)+1)
529 else if(jspline(2).ge.1)
then
537 f2222(1:2,1,1:2,1:2) =
538 > fin(1:2,ii(j):ii(j)+1,jj(j),kk(j):kk(j)+1)
539 f2222(1:2,2,1:2,1:2) =
540 > fin(1:2,ii(j):ii(j)+1,jj(j)+1,kk(j):kk(j)+1)
541 else if(jspline(3).ge.1)
then
549 f2222(1:2,1,1:2,1:2) =
550 > fin(1:2,ii(j):ii(j)+1,jj(j):jj(j)+1,kk(j))
551 f2222(1:2,2,1:2,1:2) =
552 > fin(1:2,ii(j):ii(j)+1,jj(j):jj(j)+1,kk(j)+1)
559 call sp1d(ans22(k1,k2),
560 > f2222(1:2,1:2,k1,k2))
562 call hm1d(ans22(k1,k2),
563 > f2222(1:2,1:2,k1,k2))
569 if((idlin2(1).eq.0).and.(idlin2(2).eq.0))
then
571 ans1 = (one-fac2(2))*
572 > ((one-fac2(1))*ans22(1,1)+fac2(1)*ans22(2,1))
574 > ((one-fac2(1))*ans22(1,2)+fac2(1)*ans22(2,2))
575 else if((idlin2(1).eq.1).and.(idlin2(2).eq.0))
then
577 ans1 = (one-fac2(2))*(ans22(2,1)-ans22(1,1))
578 > +fac2(2)*(ans22(2,2)-ans22(1,2))
580 else if((idlin2(1).eq.0).and.(idlin2(2).eq.1))
then
582 ans1 = (one-fac2(1))*(ans22(1,2)-ans22(1,1))
583 > +fac2(1)*(ans22(2,2)-ans22(2,1))
587 ans1 = ans22(2,2)-ans22(1,2)
588 > -ans22(2,1)+ans22(1,1)
589 ans1 = ans1*h2i(1)*h2i(2)
594 else if(linrank.eq.0)
then
596 if(jspline(1).ge.1)
then
600 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
601 f22(1:2,2)=fin(1:2,ii(j)+1,jj(j),kk(j))
602 else if(jspline(2).ge.1)
then
606 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
607 f22(1:2,2)=fin(1:2,ii(j),jj(j)+1,kk(j))
608 else if(jspline(3).ge.1)
then
612 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
613 f22(1:2,2)=fin(1:2,ii(j),jj(j),kk(j)+1)
623 else if(linrank.eq.1)
then
625 if(jspline(1).ge.1)
then
629 if(jspline(2).eq.0)
then
633 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
634 f22(1:2,2)=fin(1:2,ii(j)+1,jj(j),kk(j))
635 f22b(1:2,1)=fin(1:2,ii(j),jj(j)+1,kk(j))
636 f22b(1:2,2)=fin(1:2,ii(j)+1,jj(j)+1,kk(j))
641 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
642 f22(1:2,2)=fin(1:2,ii(j)+1,jj(j),kk(j))
643 f22b(1:2,1)=fin(1:2,ii(j),jj(j),kk(j)+1)
644 f22b(1:2,2)=fin(1:2,ii(j)+1,jj(j),kk(j)+1)
646 else if(jspline(2).ge.1)
then
650 if(jspline(1).eq.0)
then
654 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
655 f22(1:2,2)=fin(1:2,ii(j),jj(j)+1,kk(j))
656 f22b(1:2,1)=fin(1:2,ii(j)+1,jj(j),kk(j))
657 f22b(1:2,2)=fin(1:2,ii(j)+1,jj(j)+1,kk(j))
662 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
663 f22(1:2,2)=fin(1:2,ii(j),jj(j)+1,kk(j))
664 f22b(1:2,1)=fin(1:2,ii(j),jj(j),kk(j)+1)
665 f22b(1:2,2)=fin(1:2,ii(j),jj(j)+1,kk(j)+1)
667 else if(jspline(3).ge.1)
then
671 if(jspline(1).eq.0)
then
675 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
676 f22(1:2,2)=fin(1:2,ii(j),jj(j),kk(j)+1)
677 f22b(1:2,1)=fin(1:2,ii(j)+1,jj(j),kk(j))
678 f22b(1:2,2)=fin(1:2,ii(j)+1,jj(j),kk(j)+1)
683 f22(1:2,1)=fin(1:2,ii(j),jj(j),kk(j))
684 f22(1:2,2)=fin(1:2,ii(j),jj(j),kk(j)+1)
685 f22b(1:2,1)=fin(1:2,ii(j),jj(j)+1,kk(j))
686 f22b(1:2,2)=fin(1:2,ii(j),jj(j)+1,kk(j)+1)
697 fval(j,i)=(one-fac1)*ans1 + fac1*ans2
699 fval(j,i)=(ans2-ans1)*hhi
714 if(jspline(1).le.0)
then
716 idcub2(1)=iderivs(2,i)
717 idcub2(2)=iderivs(3,i)
718 else if(jspline(2).le.0)
then
720 idcub2(1)=iderivs(1,i)
721 idcub2(2)=iderivs(3,i)
722 else if(jspline(3).le.0)
then
724 idcub2(1)=iderivs(1,i)
725 idcub2(2)=iderivs(2,i)
728 if((iderivs(1,i).le.imaxx).and.(iderivs(2,i).le.imaxy)
729 > .and.(iderivs(3,i).le.imaxz))
then
731 if(linrank.eq.1)
then
734 if(jspline(1).le.0)
then
743 f422 = fin(1:4,ii(j),jj(j):jj(j)+1,kk(j):kk(j)+1)
744 f422b= fin(1:4,ii(j)+1,jj(j):jj(j)+1,kk(j):kk(j)+1)
745 else if(jspline(2).le.0)
then
754 f422 = fin(1:4,ii(j):ii(j)+1,jj(j),kk(j):kk(j)+1)
755 f422b= fin(1:4,ii(j):ii(j)+1,jj(j)+1,kk(j):kk(j)+1)
756 else if(jspline(3).le.0)
then
765 f422 = fin(1:4,ii(j):ii(j)+1,jj(j):jj(j)+1,kk(j))
766 f422b= fin(1:4,ii(j):ii(j)+1,jj(j):jj(j)+1,kk(j)+1)
770 call sp2d(ans2,f422b)
773 call hm2d(ans2,f422b)
776 fval(j,i) = (ans2-ans1)*hi
778 fval(j,i) = (one-fac1)*ans1 + fac1*ans2
784 if(jspline(1).le.0)
then
791 f422 = fin(1:4,ii(j),jj(j):jj(j)+1,kk(j):kk(j)+1)
792 else if(jspline(2).le.0)
then
799 f422 = fin(1:4,ii(j):ii(j)+1,jj(j),kk(j):kk(j)+1)
800 else if(jspline(3).le.0)
then
807 f422 = fin(1:4,ii(j):ii(j)+1,jj(j):jj(j)+1,kk(j))
824 if(iderivs(1,i).eq.0)
then
825 if(iderivs(2,i).eq.0)
then
826 if(iderivs(3,i).eq.0)
then
832 if(iderivs(3,i).eq.0)
then
839 if(iderivs(2,i).eq.0)
then
840 if(iderivs(3,i).eq.0)
then
846 if(iderivs(3,i).eq.0)
then
853 end subroutine gen_ict8
868 if(abs(ict(1)).le.(2))
then
896 if(ict(10).eq.1)
then
900 else if(ict(1).eq.3)
then
923 else if(ict(1).eq.-3)
then
934 else if(ict(1).eq.4)
then
954 else if(ict(1).eq.-4)
then
974 else if(ict(1).eq.5)
then
985 else if(ict(1).eq.-5)
then
1001 if(ict(7).eq.1)
then
1004 if(ict(8).eq.1)
then
1007 if(ict(9).eq.1)
then
1010 if(ict(10).eq.1)
then
1014 else if(ict(1).eq.6)
then
1017 else if(ict(1).eq.-6)
then
1018 if(ict(2).eq.1)
then
1021 if(ict(3).eq.1)
then
1024 if(ict(4).eq.1)
then
1027 if(ict(5).eq.1)
then
1030 if(ict(6).eq.1)
then
1033 if(ict(7).eq.1)
then
1036 if(ict(8).eq.1)
then
1039 if(ict(9).eq.1)
then
1042 if(ict(10).eq.1)
then
1046 else if(abs(ict(1)).eq.7)
then
1047 if(ict(2).eq.1)
then
1050 if(ict(3).eq.1)
then
1053 if(ict(4).eq.1)
then
1056 if(ict(5).eq.1)
then
1059 if(ict(6).eq.1)
then
1062 if(ict(7).eq.1)
then
1066 else if(abs(ict(1)).eq.8)
then
1067 if(ict(2).eq.1)
then
1070 if(ict(3).eq.1)
then
1073 if(ict(4).eq.1)
then
1077 else if(abs(ict(1)).eq.9)
then
1082 end subroutine dtrans
1084 subroutine add1(idx,idy,idz)
1087 integer,
intent(in) :: idx,idy,idz
1092 if(jspline(1).le.0)
then
1101 if(jspline(2).le.0)
then
1102 maxd_lin(inum)=max(maxd_lin(inum),idy)
1104 maxd_cub(inum)=max(maxd_cub(inum),idy)
1109 if(jspline(3).le.0)
then
1110 maxd_lin(inum)=max(maxd_lin(inum),idz)
1112 maxd_cub(inum)=max(maxd_cub(inum),idz)
1118 subroutine sp1d(ans,f22)
1119 real*8,
intent(in) :: f22(2,2)
1120 real*8,
intent(out) :: ans
1126 real*8 :: xpi,xp2,xpi2,cx,cxi,hx2,cxd,cxdi
1138 cxi=xpi*(xpi2-1.0_r8)
1141 ans=xpi*f22(1,1) +xp*f22(1,2)
1142 ans=ans+sixth*hx2*(cxi*f22(2,1) +cx*f22(2,2))
1144 else if(idcub.eq.1)
then
1147 cxd=3.0_r8*xp2-1.0_r8
1148 cxdi=-3.0_r8*xpi2+1.0_r8
1150 ans=hi*(f22(1,2)-f22(1,1))
1151 ans=ans+sixth*h*(cxdi*f22(2,1) +cxd*f22(2,2))
1153 else if(idcub.eq.2)
then
1157 ans=xpi*f22(2,1) + xp*f22(2,2)
1162 ans = hi*(f22(2,2)-f22(2,1))
1169 subroutine hm1d(ans,f22)
1170 real*8,
intent(in) :: f22(2,2)
1171 real*8,
intent(out) :: ans
1177 real*8 :: xpi,xp2,xpi2,ax,axbar,bx,bxbar
1178 real*8 :: axp,axbarp,bxp,bxbarp
1187 ax=xp2*(3.0_r8-2.0_r8*xp)
1192 ans=axbar*f22(1,1) + ax*f22(1,2)
1193 ans=ans + h*(bxbar*f22(2,1) + bx*f22(2,2))
1200 bxp=xp*(3.0_r8*xp-2.0_r8)
1201 bxbarp=xpi*(3.0_r8*xpi-2.0_r8)
1203 ans=hi*(axbarp*f22(1,1) +axp*f22(1,2))
1204 ans=ans + bxbarp*f22(2,1) + bxp*f22(2,2)
1211 subroutine sp2d(ans,ff)
1212 real*8,
intent(in) :: ff(0:3,2,2)
1213 real*8,
intent(out) :: ans
1219 real*8 xpi,xp2,xpi2,cx,cxi,hx2,cxd,cxdi
1220 real*8 ypi,yp2,ypi2,cy,cyi,hy2,cyd,cydi
1234 if((idcub2(1).eq.0).and.(idcub2(2).eq.0))
then
1239 cyi=ypi*(ypi2-1.0_r8)
1243 cxi=xpi*(xpi2-1.0_r8)
1246 ans=xpi*(ypi*ff(0,1,1) +yp*ff(0,1,2))+
1247 > xp*(ypi*ff(0,2,1)+yp*ff(0,2,2))
1250 > cxi*(ypi*ff(1,1,1) +yp*ff(1,1,2))+
1251 > cx*(ypi*ff(1,2,1)+yp*ff(1,2,2)))
1254 > xpi*(cyi*ff(2,1,1) +cy*ff(2,1,2))+
1255 > xp*(cyi*ff(2,2,1)+cy*ff(2,2,2)))
1257 ans=ans+z36th*hx2*hy2*(
1258 > cxi*(cyi*ff(3,1,1) +cy*ff(3,1,2))+
1259 > cx*(cyi*ff(3,2,1)+cy*ff(3,2,2)))
1262 else if((idcub2(1).eq.1).and.(idcub2(2).eq.0))
then
1267 cyi=ypi*(ypi2-1.0_r8)
1270 cxd=3.0_r8*xp2-1.0_r8
1271 cxdi=-3.0_r8*xpi2+1.0_r8
1274 > -(ypi*ff(0,1,1) +yp*ff(0,1,2))
1275 > +(ypi*ff(0,2,1)+yp*ff(0,2,2)))
1278 > cxdi*(ypi*ff(1,1,1) +yp*ff(1,1,2))+
1279 > cxd*(ypi*ff(1,2,1)+yp*ff(1,2,2)))
1281 ans=ans+sixth*hhxi*hy2*(
1282 > -(cyi*ff(2,1,1) +cy*ff(2,1,2))
1283 > +(cyi*ff(2,2,1)+cy*ff(2,2,2)))
1285 ans=ans+z36th*hhx*hy2*(
1286 > cxdi*(cyi*ff(3,1,1) +cy*ff(3,1,2))+
1287 > cxd*(cyi*ff(3,2,1)+cy*ff(3,2,2)))
1290 else if((idcub2(1).eq.0).and.(idcub2(2).eq.1))
then
1294 cyd=3.0_r8*yp2-1.0_r8
1295 cydi=-3.0_r8*ypi2+1.0_r8
1298 cxi=xpi*(xpi2-1.0_r8)
1302 > xpi*(-ff(0,1,1) +ff(0,1,2))+
1303 > xp*(-ff(0,2,1)+ff(0,2,2)))
1305 ans=ans+sixth*hx2*hhyi*(
1306 > cxi*(-ff(1,1,1) +ff(1,1,2))+
1307 > cx*(-ff(1,2,1)+ff(1,2,2)))
1310 > xpi*(cydi*ff(2,1,1) +cyd*ff(2,1,2))+
1311 > xp*(cydi*ff(2,2,1)+cyd*ff(2,2,2)))
1313 ans=ans+z36th*hx2*hhy*(
1314 > cxi*(cydi*ff(3,1,1) +cyd*ff(3,1,2))+
1315 > cx*(cydi*ff(3,2,1)+cyd*ff(3,2,2)))
1318 else if((idcub2(1).eq.2).and.(idcub2(2).eq.0))
then
1323 cyi=ypi*(ypi2-1.0_r8)
1327 > xpi*(ypi*ff(1,1,1) +yp*ff(1,1,2))+
1328 > xp*(ypi*ff(1,2,1)+yp*ff(1,2,2)))
1331 > xpi*(cyi*ff(3,1,1) +cy*ff(3,1,2))+
1332 > xp*(cyi*ff(3,2,1)+cy*ff(3,2,2)))
1335 else if((idcub2(1).eq.0).and.(idcub2(2).eq.2))
then
1340 cxi=xpi*(xpi2-1.0_r8)
1344 > xpi*(ypi*ff(2,1,1) +yp*ff(2,1,2))+
1345 > xp*(ypi*ff(2,2,1)+yp*ff(2,2,2)))
1348 > cxi*(ypi*ff(3,1,1) +yp*ff(3,1,2))+
1349 > cx*(ypi*ff(3,2,1)+yp*ff(3,2,2)))
1352 else if((idcub2(1).eq.1).and.(idcub2(2).eq.1))
then
1356 cyd=3.0_r8*yp2-1.0_r8
1357 cydi=-3.0_r8*ypi2+1.0_r8
1359 cxd=3.0_r8*xp2-1.0_r8
1360 cxdi=-3.0_r8*xpi2+1.0_r8
1363 > ff(0,1,1) -ff(0,1,2)
1364 > -ff(0,2,1)+ff(0,2,2))
1366 ans=ans+sixth*hhx*hhyi*(
1367 > cxdi*(-ff(1,1,1) +ff(1,1,2))+
1368 > cxd*(-ff(1,2,1)+ff(1,2,2)))
1370 ans=ans+sixth*hhxi*hhy*(
1371 > -(cydi*ff(2,1,1) +cyd*ff(2,1,2))
1372 > +(cydi*ff(2,2,1)+cyd*ff(2,2,2)))
1374 ans=ans+z36th*hhx*hhy*(
1375 > cxdi*(cydi*ff(3,1,1) +cyd*ff(3,1,2))+
1376 > cxd*(cydi*ff(3,2,1)+cyd*ff(3,2,2)))
1378 else if((idcub2(1).eq.3).and.(idcub2(2).eq.0))
then
1383 cyi=ypi*(ypi2-1.0_r8)
1387 > -(ypi*ff(1,1,1) +yp*ff(1,1,2))
1388 > +(ypi*ff(1,2,1)+yp*ff(1,2,2)))
1390 ans=ans+sixth*hy2*hhxi*(
1391 > -(cyi*ff(3,1,1) +cy*ff(3,1,2))
1392 > +(cyi*ff(3,2,1)+cy*ff(3,2,2)))
1395 else if((idcub2(1).eq.2).and.(idcub2(2).eq.1))
then
1399 cyd=3.0_r8*yp2-1.0_r8
1400 cydi=-3.0_r8*ypi2+1.0_r8
1403 > xpi*(-ff(1,1,1) +ff(1,1,2))+
1404 > xp*(-ff(1,2,1) +ff(1,2,2)))
1407 > xpi*(cydi*ff(3,1,1) +cyd*ff(3,1,2))+
1408 > xp*(cydi*ff(3,2,1)+cyd*ff(3,2,2)))
1411 else if((idcub2(1).eq.1).and.(idcub2(2).eq.2))
then
1415 cxd=3.0_r8*xp2-1.0_r8
1416 cxdi=-3.0_r8*xpi2+1.0_r8
1419 > -(ypi*ff(2,1,1) +yp*ff(2,1,2))
1420 > +(ypi*ff(2,2,1)+yp*ff(2,2,2)))
1423 > cxdi*(ypi*ff(3,1,1) +yp*ff(3,1,2))+
1424 > cxd*(ypi*ff(3,2,1)+yp*ff(3,2,2)))
1426 else if((idcub2(1).eq.0).and.(idcub2(2).eq.3))
then
1431 cxi=xpi*(xpi2-1.0_r8)
1435 > xpi*(-ff(2,1,1) +ff(2,1,2))+
1436 > xp*(-ff(2,2,1) +ff(2,2,2)))
1438 ans=ans+sixth*hx2*hhyi*(
1439 > cxi*(-ff(3,1,1) +ff(3,1,2))+
1440 > cx*(-ff(3,2,1) +ff(3,2,2)))
1443 else if((idcub2(1).eq.3).and.(idcub2(2).eq.1))
then
1447 cyd=3.0_r8*yp2-1.0_r8
1448 cydi=-3.0_r8*ypi2+1.0_r8
1451 > +( ff(1,1,1) -ff(1,1,2))
1452 > +(-ff(1,2,1)+ff(1,2,2)))
1454 ans=ans+sixth*hhy*hhxi*(
1455 > -(cydi*ff(3,1,1) +cyd*ff(3,1,2))
1456 > +(cydi*ff(3,2,1)+cyd*ff(3,2,2)))
1459 else if((idcub2(1).eq.2).and.(idcub2(2).eq.2))
then
1463 ans=xpi*(ypi*ff(3,1,1) +yp*ff(3,1,2))+
1464 > xp*(ypi*ff(3,2,1) +yp*ff(3,2,2))
1466 else if((idcub2(1).eq.1).and.(idcub2(2).eq.3))
then
1470 cxd=3.0_r8*xp2-1.0_r8
1471 cxdi=-3.0_r8*xpi2+1.0_r8
1474 > +( ff(2,1,1) -ff(2,1,2))
1475 > +(-ff(2,2,1)+ff(2,2,2)))
1477 ans=ans+sixth*hhx*hhyi*(
1478 > cxdi*(-ff(3,1,1) +ff(3,1,2))+
1479 > cxd*(-ff(3,2,1) +ff(3,2,2)))
1482 else if((idcub2(1).eq.3).and.(idcub2(2).eq.2))
then
1487 > -(ypi*ff(3,1,1) +yp*ff(3,1,2))
1488 > +(ypi*ff(3,2,1)+yp*ff(3,2,2)))
1490 else if((idcub2(1).eq.2).and.(idcub2(2).eq.3))
then
1495 > xpi*(-ff(3,1,1) +ff(3,1,2))+
1496 > xp*(-ff(3,2,1)+ff(3,2,2)))
1499 else if((idcub2(1).eq.3).and.(idcub2(2).eq.3))
then
1504 > +( ff(3,1,1) -ff(3,1,2))
1505 > +(-ff(3,2,1) +ff(3,2,2)))
1512 subroutine hm2d(ans,ff)
1513 real*8,
intent(in) :: ff(0:3,2,2)
1514 real*8,
intent(out) :: ans
1520 real*8 :: xpi,xp2,xpi2,ax,axbar,bx,bxbar
1521 real*8 :: axp,axbarp,bxp,bxbarp
1523 real*8 :: ypi,yp2,ypi2,ay,aybar,by,bybar
1524 real*8 :: ayp,aybarp,byp,bybarp
1534 if((idcub2(1).eq.0).and.(idcub2(2).eq.0))
then
1537 ax=xp2*(3.0_r8-2.0_r8*xp)
1542 ay=yp2*(3.0_r8-2.0_r8*yp)
1547 ans=axbar*(aybar*ff(0,1,1) +ay*ff(0,1,2))+
1548 > ax*(aybar*ff(0,2,1)+ay*ff(0,2,2))
1551 > bxbar*(aybar*ff(1,1,1) +ay*ff(1,1,2))+
1552 > bx*(aybar*ff(1,2,1)+ay*ff(1,2,2)))
1555 > axbar*(bybar*ff(2,1,1) +by*ff(2,1,2))+
1556 > ax*(bybar*ff(2,2,1)+by*ff(2,2,2)))
1559 > bxbar*(bybar*ff(3,1,1) +by*ff(3,1,2))+
1560 > bx*(bybar*ff(3,2,1)+by*ff(3,2,2)))
1562 else if((idcub2(1).eq.1).and.(idcub2(2).eq.0))
then
1567 bxp=xp*(3.0_r8*xp-2.0_r8)
1568 bxbarp=xpi*(3.0_r8*xpi-2.0_r8)
1570 ay=yp2*(3.0_r8-2.0_r8*yp)
1576 > axbarp*(aybar*ff(0,1,1) +ay*ff(0,1,2))+
1577 > axp*(aybar*ff(0,2,1)+ay*ff(0,2,2)))
1580 > bxbarp*(aybar*ff(1,1,1) +ay*ff(1,1,2))+
1581 > bxp*(aybar*ff(1,2,1)+ay*ff(1,2,2))
1584 > axbarp*(bybar*ff(2,1,1) +by*ff(2,1,2))+
1585 > axp*(bybar*ff(2,2,1)+by*ff(2,2,2)))
1588 > bxbarp*(bybar*ff(3,1,1) +by*ff(3,1,2))+
1589 > bxp*(bybar*ff(3,2,1)+by*ff(3,2,2)))
1591 else if((idcub2(1).eq.0).and.(idcub2(2).eq.1))
then
1594 ax=xp2*(3.0_r8-2.0_r8*xp)
1601 byp=yp*(3.0_r8*yp-2.0_r8)
1602 bybarp=ypi*(3.0_r8*ypi-2.0_r8)
1605 > axbar*(aybarp*ff(0,1,1) +ayp*ff(0,1,2))+
1606 > ax*(aybarp*ff(0,2,1)+ayp*ff(0,2,2)))
1609 > bxbar*(aybarp*ff(1,1,1) +ayp*ff(1,1,2))+
1610 > bx*(aybarp*ff(1,2,1)+ayp*ff(1,2,2)))
1613 > axbar*(bybarp*ff(2,1,1) +byp*ff(2,1,2))+
1614 > ax*(bybarp*ff(2,2,1)+byp*ff(2,2,2))
1617 > bxbar*(bybarp*ff(3,1,1) +byp*ff(3,1,2))+
1618 > bx*(bybarp*ff(3,2,1)+byp*ff(3,2,2)))
1620 else if((idcub2(1).eq.1).and.(idcub2(2).eq.1))
then
1625 bxp=xp*(3.0_r8*xp-2.0_r8)
1626 bxbarp=xpi*(3.0_r8*xpi-2.0_r8)
1630 byp=yp*(3.0_r8*yp-2.0_r8)
1631 bybarp=ypi*(3.0_r8*ypi-2.0_r8)
1634 > axbarp*(aybarp*ff(0,1,1) +ayp*ff(0,1,2))+
1635 > axp*(aybarp*ff(0,2,1)+ayp*ff(0,2,2)))
1638 > bxbarp*(aybarp*ff(1,1,1) +ayp*ff(1,1,2))+
1639 > bxp*(aybarp*ff(1,2,1)+ayp*ff(1,2,2)))
1642 > axbarp*(bybarp*ff(2,1,1) +byp*ff(2,1,2))+
1643 > axp*(bybarp*ff(2,2,1)+byp*ff(2,2,2)))
1646 > bxbarp*(bybarp*ff(3,1,1) +byp*ff(3,1,2))+
1647 > bxp*(bybarp*ff(3,2,1)+byp*ff(3,2,2))