1 subroutine akherm3(x,nx,y,ny,z,nz,fherm,nf2,nf3,
2 > ilinx,iliny,ilinz,ier)
13 integer nx,ny,nz,nf2,nf3
17 real fherm(0:7,nf2,nf3,nz)
43 call akherm3p(x,nx,y,ny,z,nz,fherm,nf2,nf3,
44 > ilinx,iliny,ilinz,0,0,0,ier)
49 subroutine akherm3p(x,nx,y,ny,z,nz,fherm,nf2,nf3,
50 > ilinx,iliny,ilinz,ipx,ipy,ipz,ier)
65 integer nx,ny,nz,nf2,nf3
69 real fherm(0:7,nf2,nf3,nz)
100 real wx(2),wy(2),wz(2),exy(2,2),exz(2,2),eyz(2,2),fxyz(2,2,2)
102 real,
dimension(:,:,:),
allocatable :: ftmp
114 call splinck(x,nx,ilinx,1.0e-3,ierx)
115 if(ierx.ne.0) ier=ier+1
118 write(6,
'('' ?akherm3: x axis not strict ascending'')')
121 call splinck(y,ny,iliny,1.0e-3,iery)
122 if(iery.ne.0) ier=ier+1
125 write(6,
'('' ?akherm3: y axis not strict ascending'')')
128 call splinck(z,nz,ilinz,1.0e-3,ierz)
129 if(ierz.ne.0) ier=ier+1
132 write(6,
'('' ?akherm3: z axis not strict ascending'')')
137 write(6,*)
'?akherm3: fherm (x) array dimension too small.'
142 write(6,*)
'?akherm3: fherm (y) array dimension too small.'
146 call ibc_ck(ipx,
'akherm3',
'X Bdy Cond',0,2,ierbc)
150 call ibc_ck(ipy,
'akherm3',
'Y Bdy Cond',0,2,ierbc)
154 call ibc_ck(ipz,
'akherm3',
'Z Bdy Cond',0,2,ierbc)
167 allocate(ftmp(0:nx+1,0:ny+1,0:nz+1))
172 ftmp(ix,iy,iz)=fherm(0,ix,iy,iz)
184 xx(nx+1)=2*x(nx)-x(nx-1)
186 yy(ny+1)=2*y(ny)-y(ny-1)
188 zz(nz+1)=2*z(nz)-z(nz-1)
205 cxp=(ftmp(2,iy,iz)-ftmp(1,iy,iz))/(xx(2)-xx(1))
206 cxm=(ftmp(nx,iy,iz)-ftmp(nx-1,iy,iz))/(xx(nx)-xx(nx-1))
213 cxpp=(ftmp(3,iy,iz)-ftmp(2,iy,iz))/(xx(3)-xx(2))
214 cxmm=(ftmp(nx-1,iy,iz)-ftmp(nx-2,iy,iz))/
215 > (xx(nx-1)-xx(nx-2))
217 call akherm0(cxmm,cxm,cxp,cxpp,wx,fherm(1,1,iy,iz))
218 fherm(1,nx,iy,iz)=fherm(1,1,iy,iz)
222 fherm(1,nx,iy,iz)=fherm(1,1,iy,iz)
228 else if(ipx.eq.0)
then
233 cxpp=(ftmp(3,iy,iz)-ftmp(2,iy,iz))/(xx(3)-xx(2))
234 fherm(1,1,iy,iz)=1.5*cxp-0.5*cxpp
236 cxmm=(ftmp(nx-1,iy,iz)-ftmp(nx-2,iy,iz))/
237 > (xx(nx-1)-xx(nx-2))
238 fherm(1,nx,iy,iz)=1.5*cxm-0.5*cxmm
242 fherm(1,nx,iy,iz)=fherm(1,1,iy,iz)
247 cxtrap0=2.0*fherm(1,1,iy,iz)-cxp
248 cxtrapn=2.0*fherm(1,nx,iy,iz)-cxm
254 cxtrap0=2.0*fherm(1,1,iy,iz)-cxp
255 cxtrapn=2.0*fherm(1,nx,iy,iz)-cxm
259 ftmp(0,iy,iz)=ftmp(1,iy,iz)-cxtrap0*(xx(1)-xx(0))
260 ftmp(nx+1,iy,iz)=ftmp(nx,iy,iz)+cxtrapn*(xx(nx+1)-xx(nx))
270 cyp=(ftmp(ix,2,iz)-ftmp(ix,1,iz))/(yy(2)-yy(1))
271 cym=(ftmp(ix,ny,iz)-ftmp(ix,ny-1,iz))/(yy(ny)-yy(ny-1))
278 cypp=(ftmp(ix,3,iz)-ftmp(ix,2,iz))/(yy(3)-yy(2))
279 cymm=(ftmp(ix,ny-1,iz)-ftmp(ix,ny-2,iz))/
280 > (yy(ny-1)-yy(ny-2))
282 call akherm0(cymm,cym,cyp,cypp,wy,fherm(2,ix,1,iz))
283 fherm(2,ix,ny,iz)=fherm(2,ix,1,iz)
286 fherm(2,ix,1,iz) = cyp
287 fherm(2,ix,ny,iz)=fherm(2,ix,1,iz)
292 else if(ipy.eq.0)
then
297 cypp=(ftmp(ix,3,iz)-ftmp(ix,2,iz))/(yy(3)-yy(2))
298 fherm(2,ix,1,iz)=1.5*cyp-0.5*cypp
300 cymm=(ftmp(ix,ny-1,iz)-ftmp(ix,ny-2,iz))/
301 > (yy(ny-1)-yy(ny-2))
302 fherm(2,ix,ny,iz)=1.5*cym-0.5*cymm
305 fherm(2,ix,1,iz) = cyp
306 fherm(2,ix,ny,iz)=fherm(2,ix,1,iz)
311 cytrap0=2.0*fherm(2,ix,1,iz)-cyp
312 cytrapn=2.0*fherm(2,ix,ny,iz)-cym
318 cytrap0=2.0*fherm(2,ix,1,iz)-cyp
319 cytrapn=2.0*fherm(2,ix,ny,iz)-cym
323 ftmp(ix,0,iz)=ftmp(ix,1,iz)-cytrap0*(yy(1)-yy(0))
324 ftmp(ix,ny+1,iz)=ftmp(ix,ny,iz)+cytrapn*(yy(ny+1)-yy(ny))
334 czp=(ftmp(ix,iy,2)-ftmp(ix,iy,1))/(zz(2)-zz(1))
335 czm=(ftmp(ix,iy,nz)-ftmp(ix,iy,nz-1))/(zz(nz)-zz(nz-1))
342 czpp=(ftmp(ix,iy,3)-ftmp(ix,iy,2))/(zz(3)-zz(2))
343 czmm=(ftmp(ix,iy,nz-1)-ftmp(ix,iy,nz-2))/
344 > (zz(nz-1)-zz(nz-2))
346 call akherm0(czmm,czm,czp,czpp,wz,fherm(3,ix,iy,1))
347 fherm(3,ix,iy,nz)=fherm(3,ix,iy,1)
350 fherm(3,ix,iy,1) = czp
351 fherm(3,ix,iy,nz)=fherm(3,ix,iy,1)
357 else if(ipy.eq.0)
then
362 czpp=(ftmp(ix,iy,3)-ftmp(ix,iy,2))/(zz(3)-zz(2))
363 fherm(3,ix,iy,1)=1.5*czp-0.5*czpp
365 czmm=(ftmp(ix,iy,nz-1)-ftmp(ix,iy,nz-2))/
366 > (zz(nz-1)-zz(nz-2))
367 fherm(3,ix,iy,nz)=1.5*czm-0.5*czmm
370 fherm(3,ix,iy,1) = czp
371 fherm(3,ix,iy,nz)=fherm(3,ix,iy,1)
376 cztrap0=2.0*fherm(3,ix,iy,1)-czp
377 cztrapn=2.0*fherm(3,ix,iy,nz)-czm
383 cztrap0=2.0*fherm(3,ix,iy,1)-czp
384 cztrapn=2.0*fherm(3,ix,iy,nz)-czm
388 ftmp(ix,iy,0)=ftmp(ix,iy,1)-cztrap0*(zz(1)-zz(0))
389 ftmp(ix,iy,nz+1)=ftmp(ix,iy,nz)+cztrapn*(zz(nz+1)-zz(nz))
406 ftmp(icx,icy,iz)=ftmp(icx,iy1,iz)+ftmp(ix1,icy,iz)-
423 ftmp(icx,iy,icz)=ftmp(icx,iy,iz1)+ftmp(ix1,iy,icz)-
440 ftmp(ix,icy,icz)=ftmp(ix,icy,iz1)+ftmp(ix,iy1,icz)-
463 > 2*(ftmp(icx,icy,iz1)+ftmp(icx,iy1,icz)+
464 > ftmp(ix1,icy,icz)) -
465 > (ftmp(icx,iy1,iz1)+ftmp(ix1,icy,iz1)+
466 > ftmp(ix1,iy1,icz)))/3
513 cxm=(ftmp(ixm2,iy,iz)-ftmp(ixm1,iy,iz))/
514 > (xx(ixm2)-xx(ixm1))
516 cxmm=(ftmp(ixmm2,iy,iz)-ftmp(ixmm1,iy,iz))/
517 > (xx(ixmm2)-xx(ixmm1))
520 cxmm=(ftmp(nx-1,iy,iz)-ftmp(nx-2,iy,iz))/
521 > (xx(nx-1)-xx(nx-2))
533 cxp=(ftmp(ixp2,iy,iz)-ftmp(ixp1,iy,iz))/
534 > (xx(ixp2)-xx(ixp1))
536 cxpp=(ftmp(ixpp2,iy,iz)-ftmp(ixpp1,iy,iz))/
537 > (xx(ixpp2)-xx(ixpp1))
540 cxpp=(ftmp(3,iy,iz)-ftmp(2,iy,iz))/
553 call akherm0(cxmm,cxm,cxp,cxpp,wx,zansr)
554 if((ix.gt.1).and.(ix.lt.nx)) fherm(1,ix,iy,iz)=zansr
559 cym=(ftmp(ix,iym2,iz)-ftmp(ix,iym1,iz))/
560 > (yy(iym2)-yy(iym1))
562 cymm=(ftmp(ix,iymm2,iz)-ftmp(ix,iymm1,iz))/
563 > (yy(iymm2)-yy(iymm1))
566 cymm=(ftmp(ix,ny-1,iz)-ftmp(ix,ny-2,iz))/
567 > (yy(ny-1)-yy(ny-2))
573 cyp=(ftmp(ix,iyp2,iz)-ftmp(ix,iyp1,iz))/
574 > (yy(iyp2)-yy(iyp1))
576 cypp=(ftmp(ix,iypp2,iz)-ftmp(ix,iypp1,iz))/
577 > (yy(iypp2)-yy(iypp1))
580 cypp=(ftmp(ix,3,iz)-ftmp(ix,2,iz))/(yy(3)-yy(2))
592 call akherm0(cymm,cym,cyp,cypp,wy,zansr)
593 if((iy.gt.1).and.(iy.lt.ny)) fherm(2,ix,iy,iz)=zansr
598 czm=(ftmp(ix,iy,izm2)-ftmp(ix,iy,izm1))/
599 > (zz(izm2)-zz(izm1))
601 czmm=(ftmp(ix,iy,izmm2)-ftmp(ix,iy,izmm1))/
602 > (zz(izmm2)-zz(izmm1))
605 czmm=(ftmp(ix,iy,nz-1)-ftmp(ix,iy,nz-2))/
606 > (zz(nz-1)-zz(nz-2))
612 czp=(ftmp(ix,iy,izp2)-ftmp(ix,iy,izp1))/
613 > (zz(izp2)-zz(izp1))
615 czpp=(ftmp(ix,iy,izpp2)-ftmp(ix,iy,izpp1))/
616 > (zz(izpp2)-zz(izpp1))
619 czpp=(ftmp(ix,iy,3)-ftmp(ix,iy,2))/(zz(3)-zz(2))
631 call akherm0(czmm,czm,czp,czpp,wz,zansr)
632 if((iz.gt.1).and.(iz.lt.nz)) fherm(3,ix,iy,iz)=zansr
636 cxm2=(ftmp(ixm2,iym1,iz)-ftmp(ixm1,iym1,iz))/
637 > (xx(ixm2)-xx(ixm1))
638 exy(1,1)=(cxm-cxm2)/(yy(iym2)-yy(iym1))
640 cxm2=(ftmp(ixm2,iyp2,iz)-ftmp(ixm1,iyp2,iz))/
641 > (xx(ixm2)-xx(ixm1))
642 exy(1,2)=(cxm2-cxm)/(yy(iyp2)-yy(iyp1))
644 cxp2=(ftmp(ixp2,iym1,iz)-ftmp(ixp1,iym1,iz))/
645 > (xx(ixp2)-xx(ixp1))
646 exy(2,1)=(cxp-cxp2)/(yy(iym2)-yy(iym1))
648 cxp2=(ftmp(ixp2,iyp2,iz)-ftmp(ixp1,iyp2,iz))/
649 > (xx(ixp2)-xx(ixp1))
650 exy(2,2)=(cxp2-cxp)/(yy(iyp2)-yy(iyp1))
654 cxm2=(ftmp(ixm2,iy,izm1)-ftmp(ixm1,iy,izm1))/
655 > (xx(ixm2)-xx(ixm1))
656 exz(1,1)=(cxm-cxm2)/(zz(izm2)-zz(izm1))
658 cxm2=(ftmp(ixm2,iy,izp2)-ftmp(ixm1,iy,izp2))/
659 > (xx(ixm2)-xx(ixm1))
660 exz(1,2)=(cxm2-cxm)/(zz(izp2)-zz(izp1))
662 cxp2=(ftmp(ixp2,iy,izm1)-ftmp(ixp1,iy,izm1))/
663 > (xx(ixp2)-xx(ixp1))
664 exz(2,1)=(cxp-cxp2)/(zz(izm2)-zz(izm1))
666 cxp2=(ftmp(ixp2,iy,izp2)-ftmp(ixp1,iy,izp2))/
667 > (xx(ixp2)-xx(ixp1))
668 exz(2,2)=(cxp2-cxp)/(zz(izp2)-zz(izp1))
672 cym2=(ftmp(ix,iym2,izm1)-ftmp(ix,iym1,izm1))/
673 > (yy(iym2)-yy(iym1))
674 eyz(1,1)=(cym-cym2)/(zz(izm2)-zz(izm1))
676 cym2=(ftmp(ix,iym2,izp2)-ftmp(ix,iym1,izp2))/
677 > (yy(iym2)-yy(iym1))
678 eyz(1,2)=(cym2-cym)/(zz(izp2)-zz(izp1))
680 cyp2=(ftmp(ix,iyp2,izm1)-ftmp(ix,iyp1,izm1))/
681 > (yy(iyp2)-yy(iyp1))
682 eyz(2,1)=(cyp-cyp2)/(zz(izm2)-zz(izm1))
684 cyp2=(ftmp(ix,iyp2,izp2)-ftmp(ix,iyp1,izp2))/
685 > (yy(iyp2)-yy(iyp1))
686 eyz(2,2)=(cyp2-cyp)/(zz(izp2)-zz(izp1))
692 fzp=(ftmp(ixm2,iym2,izm2)-ftmp(ixm2,iym1,izm2)-
693 > ftmp(ixm1,iym2,izm2)+ftmp(ixm1,iym1,izm2))/
694 > ((xx(ixm2)-xx(ixm1))*(yy(iym2)-yy(iym1)))
695 fzm=(ftmp(ixm2,iym2,izm1)-ftmp(ixm2,iym1,izm1)-
696 > ftmp(ixm1,iym2,izm1)+ftmp(ixm1,iym1,izm1))/
697 > ((xx(ixm2)-xx(ixm1))*(yy(iym2)-yy(iym1)))
698 fxyz(1,1,k)=(fzp-fzm)/(zz(izm2)-zz(izm1))
700 fzp=(ftmp(ixm2,iyp2,izm2)-ftmp(ixm2,iyp1,izm2)-
701 > ftmp(ixm1,iyp2,izm2)+ftmp(ixm1,iyp1,izm2))/
702 > ((xx(ixm2)-xx(ixm1))*(yy(iyp2)-yy(iyp1)))
703 fzm=(ftmp(ixm2,iyp2,izm1)-ftmp(ixm2,iyp1,izm1)-
704 > ftmp(ixm1,iyp2,izm1)+ftmp(ixm1,iyp1,izm1))/
705 > ((xx(ixm2)-xx(ixm1))*(yy(iyp2)-yy(iyp1)))
706 fxyz(1,2,k)=(fzp-fzm)/(zz(izm2)-zz(izm1))
708 fzp=(ftmp(ixp2,iym2,izm2)-ftmp(ixp2,iym1,izm2)-
709 > ftmp(ixp1,iym2,izm2)+ftmp(ixp1,iym1,izm2))/
710 > ((xx(ixp2)-xx(ixp1))*(yy(iym2)-yy(iym1)))
711 fzm=(ftmp(ixp2,iym2,izm1)-ftmp(ixp2,iym1,izm1)-
712 > ftmp(ixp1,iym2,izm1)+ftmp(ixp1,iym1,izm1))/
713 > ((xx(ixp2)-xx(ixp1))*(yy(iym2)-yy(iym1)))
714 fxyz(2,1,k)=(fzp-fzm)/(zz(izm2)-zz(izm1))
716 fzp=(ftmp(ixp2,iyp2,izm2)-ftmp(ixp2,iyp1,izm2)-
717 > ftmp(ixp1,iyp2,izm2)+ftmp(ixp1,iyp1,izm2))/
718 > ((xx(ixp2)-xx(ixp1))*(yy(iyp2)-yy(iyp1)))
719 fzm=(ftmp(ixp2,iyp2,izm1)-ftmp(ixp2,iyp1,izm1)-
720 > ftmp(ixp1,iyp2,izm1)+ftmp(ixp1,iyp1,izm1))/
721 > ((xx(ixp2)-xx(ixp1))*(yy(iyp2)-yy(iyp1)))
722 fxyz(2,2,k)=(fzp-fzm)/(zz(izm2)-zz(izm1))
726 fzp=(ftmp(ixm2,iym2,izp2)-ftmp(ixm2,iym1,izp2)-
727 > ftmp(ixm1,iym2,izp2)+ftmp(ixm1,iym1,izp2))/
728 > ((xx(ixm2)-xx(ixm1))*(yy(iym2)-yy(iym1)))
729 fzm=(ftmp(ixm2,iym2,izp1)-ftmp(ixm2,iym1,izp1)-
730 > ftmp(ixm1,iym2,izp1)+ftmp(ixm1,iym1,izp1))/
731 > ((xx(ixm2)-xx(ixm1))*(yy(iym2)-yy(iym1)))
732 fxyz(1,1,k)=(fzp-fzm)/(zz(izp2)-zz(izp1))
734 fzp=(ftmp(ixm2,iyp2,izp2)-ftmp(ixm2,iyp1,izp2)-
735 > ftmp(ixm1,iyp2,izp2)+ftmp(ixm1,iyp1,izp2))/
736 > ((xx(ixm2)-xx(ixm1))*(yy(iyp2)-yy(iyp1)))
737 fzm=(ftmp(ixm2,iyp2,izp1)-ftmp(ixm2,iyp1,izp1)-
738 > ftmp(ixm1,iyp2,izp1)+ftmp(ixm1,iyp1,izp1))/
739 > ((xx(ixm2)-xx(ixm1))*(yy(iyp2)-yy(iyp1)))
740 fxyz(1,2,k)=(fzp-fzm)/(zz(izp2)-zz(izp1))
742 fzp=(ftmp(ixp2,iym2,izp2)-ftmp(ixp2,iym1,izp2)-
743 > ftmp(ixp1,iym2,izp2)+ftmp(ixp1,iym1,izp2))/
744 > ((xx(ixp2)-xx(ixp1))*(yy(iym2)-yy(iym1)))
745 fzm=(ftmp(ixp2,iym2,izp1)-ftmp(ixp2,iym1,izp1)-
746 > ftmp(ixp1,iym2,izp1)+ftmp(ixp1,iym1,izp1))/
747 > ((xx(ixp2)-xx(ixp1))*(yy(iym2)-yy(iym1)))
748 fxyz(2,1,k)=(fzp-fzm)/(zz(izp2)-zz(izp1))
750 fzp=(ftmp(ixp2,iyp2,izp2)-ftmp(ixp2,iyp1,izp2)-
751 > ftmp(ixp1,iyp2,izp2)+ftmp(ixp1,iyp1,izp2))/
752 > ((xx(ixp2)-xx(ixp1))*(yy(iyp2)-yy(iyp1)))
753 fzm=(ftmp(ixp2,iyp2,izp1)-ftmp(ixp2,iyp1,izp1)-
754 > ftmp(ixp1,iyp2,izp1)+ftmp(ixp1,iyp1,izp1))/
755 > ((xx(ixp2)-xx(ixp1))*(yy(iyp2)-yy(iyp1)))
756 fxyz(2,2,k)=(fzp-fzm)/(zz(izp2)-zz(izp1))
761 > (wx(1)*(wy(1)*exy(1,1)+wy(2)*exy(1,2))+
762 > wx(2)*(wy(1)*exy(2,1)+wy(2)*exy(2,2)))/
763 > ((wx(1)+wx(2))*(wy(1)+wy(2)))
766 > (wx(1)*(wz(1)*exz(1,1)+wz(2)*exz(1,2))+
767 > wx(2)*(wz(1)*exz(2,1)+wz(2)*exz(2,2)))/
768 > ((wx(1)+wx(2))*(wz(1)+wz(2)))
771 > (wy(1)*(wz(1)*eyz(1,1)+wz(2)*eyz(1,2))+
772 > wy(2)*(wz(1)*eyz(2,1)+wz(2)*eyz(2,2)))/
773 > ((wy(1)+wy(2))*(wz(1)+wz(2)))
775 fherm(7,ix,iy,iz)=(wz(1)*
776 > (wx(1)*(wy(1)*fxyz(1,1,1)+wy(2)*fxyz(1,2,1))+
777 > wx(2)*(wy(1)*fxyz(2,1,1)+wy(2)*fxyz(2,2,1))) + wz(2)*
778 > (wx(1)*(wy(1)*fxyz(1,1,2)+wy(2)*fxyz(1,2,2))+
779 > wx(2)*(wy(1)*fxyz(2,1,2)+wy(2)*fxyz(2,2,2))) )/
780 > ((wx(1)+wx(2))*(wy(1)+wy(2))*(wz(1)+wz(2)))