421 integer,
intent(in) :: ixI^L, ixO^L
422 double precision,
intent(in) :: x(ixI^S,1:ndim)
423 double precision,
intent(in) :: w(ixI^S,1:nw)
425 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
426 double precision,
intent(in) :: alpha
427 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
430 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
431 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
432 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndim)
433 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
439 if(
allocated(iw_mag))
then
441 {
do ix^db=ixmin^db,ixmax^db\}
442 ^d&blocal(^d)=w({ix^d},iw_mag(^d))+
block%B0({ix^d},^d,0)\
444 if(blocal(1)/=0.d0)
then
445 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2)
449 if(blocal(2)/=0.d0)
then
450 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2)
456 if(blocal(1)/=0.d0)
then
457 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
461 if(blocal(2)/=0.d0)
then
462 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
466 if(blocal(3)/=0.d0)
then
467 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
474 {
do ix^db=ixmin^db,ixmax^db\}
476 if(w(ix^d,iw_mag(1))/=0.d0)
then
477 mf(ix^d,1)=sign(1.d0,w(ix^d,iw_mag(1)))/dsqrt(1.d0+(w(ix^d,iw_mag(2))/w(ix^d,iw_mag(1)))**2)
481 if(w(ix^d,iw_mag(2))/=0.d0)
then
482 mf(ix^d,2)=sign(1.d0,w(ix^d,iw_mag(2)))/dsqrt(1.d0+(w(ix^d,iw_mag(1))/w(ix^d,iw_mag(2)))**2)
488 if(w(ix^d,iw_mag(1))/=0.d0)
then
489 mf(ix^d,1)=sign(1.d0,w(ix^d,iw_mag(1)))/dsqrt(1.d0+(w(ix^d,iw_mag(2))/w(ix^d,iw_mag(1)))**2+&
490 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
494 if(w(ix^d,iw_mag(2))/=0.d0)
then
495 mf(ix^d,2)=sign(1.d0,w(ix^d,iw_mag(2)))/dsqrt(1.d0+(w(ix^d,iw_mag(1))/w(ix^d,iw_mag(2)))**2+&
496 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
500 if(w(ix^d,iw_mag(3))/=0.d0)
then
501 mf(ix^d,3)=sign(1.d0,w(ix^d,iw_mag(3)))/dsqrt(1.d0+(w(ix^d,iw_mag(1))/w(ix^d,iw_mag(3)))**2+&
502 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
510 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
513 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
517 {
do ix^db=ixcmin^db,ixcmax^db\}
518 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
519 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
520 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
521 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
527 {
do ix^db=ixcmin^db,ixcmax^db\}
528 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
529 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
536 ixbmax^d=ixmax^d-kr(idims,^d);
537 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
539 if(fl%tc_constant)
then
540 if(fl%tc_perpendicular)
then
541 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
542 ke(ixc^s)=fl%tc_k_perp
544 ka(ixc^s)=fl%tc_k_para
549 {
do ix^db=ixmin^db,ixmax^db\}
550 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
551 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
553 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
557 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
561 {
do ix^db=ixcmin^db,ixcmax^db\}
562 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
563 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
564 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
565 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
569 {
do ix^db=ixcmin^db,ixcmax^db\}
570 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
571 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
575 if(fl%tc_perpendicular)
then
577 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&(w(ix^s,iw_mag(^d))+block%B0(ix^s,^d,0))**2+)*dsqrt(te(ix^s))+smalldouble)
579 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&w(ix^s,iw_mag(^d))**2+)*dsqrt(te(ix^s))+smalldouble)
582 {
do ix^db=ixcmin^db,ixcmax^db\}
583 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
584 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
585 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
586 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
587 if(ke(ix^d)<ka(ix^d))
then
588 ka(ix^d)=ka(ix^d)-ke(ix^d)
596 {
do ix^db=ixcmin^db,ixcmax^db\}
597 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
598 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
599 if(ke(ix^d)<ka(ix^d))
then
600 ka(ix^d)=ka(ix^d)-ke(ix^d)
609 if(fl%tc_slope_limiter==0)
then
615 if({ ix^d==0 .and. ^d==idims | .or.})
then
616 ixbmin^d=ixcmin^d+ix^d;
617 ixbmax^d=ixcmax^d+ix^d;
618 qdd(ixc^s)=qdd(ixc^s)+gradt(ixb^s,idims)
622 qvec(ixc^s,idims)=qdd(ixc^s)*0.5d0**(ndim-1)
625 qdd(ixc^s)=sum(qvec(ixc^s,1:ndim)*bc(ixc^s,1:ndim),dim=ndim+1)
628 gradt(ixc^s,idims)=ka(ixc^s)*bc(ixc^s,idims)*qdd(ixc^s)
629 if(fl%tc_perpendicular) gradt(ixc^s,idims)=gradt(ixc^s,idims)+ke(ixc^s)*qvec(ixc^s,idims)
634 ixb^l=ixo^l-kr(idims,^d);
635 ixamax^d=ixomax^d; ixamin^d=ixbmin^d;
637 if({ ix^d==0 .and. ^d==idims | .or.})
then
638 ixbmin^d=ixamin^d-ix^d;
639 ixbmax^d=ixamax^d-ix^d;
640 qvec(ixa^s,idims)=qvec(ixa^s,idims)+gradt(ixb^s,idims)
643 qvec(ixa^s,idims)=qvec(ixa^s,idims)*0.5d0**(ndim-1)
644 if(fl%tc_saturate)
then
649 if({ ix^d==0 .and. ^d==idims | .or.})
then
650 ixbmin^d=ixamin^d-ix^d;
651 ixbmax^d=ixamax^d-ix^d;
652 bcf(ixa^s,idims)=bcf(ixa^s,idims)+bc(ixb^s,idims)
656 bcf(ixa^s,idims)=bcf(ixa^s,idims)*0.5d0**(ndim-1)
657 ixb^l=ixa^l+kr(idims,^d);
658 qdd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bcf(ixa^s,idims))
659 {
do ix^db=ixamin^db,ixamax^db\}
660 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
661 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
669 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
672 {
do ix^db=ixamin^db,ixamax^db\}
674 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
675 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
676 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
677 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
679 if(fl%tc_perpendicular) &
680 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
681 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
683 else if(idims==2)
then
684 {
do ix^db=ixamin^db,ixamax^db\}
685 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
686 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
687 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
688 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
689 if(fl%tc_perpendicular) &
690 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
691 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
694 {
do ix^db=ixamin^db,ixamax^db\}
695 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
696 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
697 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
698 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
699 if(fl%tc_perpendicular) &
700 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
701 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
707 {
do ix^db=ixamin^db,ixamax^db\}
708 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
709 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
710 if(fl%tc_perpendicular) &
711 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
714 {
do ix^db=ixamin^db,ixamax^db\}
715 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
716 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
717 if(fl%tc_perpendicular) &
718 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
726 {
do ix^db=ixcmin^db,ixcmax^db\}
727 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
728 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
730 else if(idims==2)
then
731 {
do ix^db=ixcmin^db,ixcmax^db\}
732 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
733 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
736 {
do ix^db=ixcmin^db,ixcmax^db\}
737 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
738 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
744 {
do ix^db=ixcmin^db,ixcmax^db\}
745 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
748 {
do ix^db=ixcmin^db,ixcmax^db\}
749 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
756 {
do ix^db=ixamin^db,ixamax^db\}
757 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
758 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
759 if(qdd(ix^d)<minq)
then
761 else if(qdd(ix^d)>maxq)
then
766 if(qdd(ix1,ix2-1,ix3)<minq)
then
768 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
771 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
773 if(qdd(ix1,ix2,ix3-1)<minq)
then
775 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
778 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
780 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
782 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
785 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
787 qvec(ix^d,idims)=kaf(ix^d)*0.25d0*(bc(ix^d,idims)**2*qd(ix^d,1)+bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,2)&
788 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
789 if(fl%tc_perpendicular) &
790 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.25d0*(qd(ix^d,1)+qd(ix^d,2)+qd(ix^d,3)+qd(ix^d,4))
792 else if(idims==2)
then
793 {
do ix^db=ixamin^db,ixamax^db\}
794 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
795 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
796 if(qdd(ix^d)<minq)
then
798 else if(qdd(ix^d)>maxq)
then
803 if(qdd(ix1-1,ix2,ix3)<minq)
then
805 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
808 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
810 if(qdd(ix1,ix2,ix3-1)<minq)
then
812 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
815 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
817 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
819 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
822 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
824 qvec(ix^d,idims)=kaf(ix^d)*0.25d0*(bc(ix^d,idims)**2*qd(ix^d,1)+bc(ix1-1,ix2,ix3,idims)**2*qd(ix^d,2)&
825 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
826 if(fl%tc_perpendicular) &
827 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.25d0*(qd(ix^d,1)+qd(ix^d,2)+qd(ix^d,3)+qd(ix^d,4))
830 {
do ix^db=ixamin^db,ixamax^db\}
831 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
832 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
833 if(qdd(ix^d)<minq)
then
835 else if(qdd(ix^d)>maxq)
then
840 if(qdd(ix1-1,ix2,ix3)<minq)
then
842 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
845 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
847 if(qdd(ix1,ix2-1,ix3)<minq)
then
849 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
852 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
854 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
856 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
859 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
861 qvec(ix^d,idims)=kaf(ix^d)*0.25d0*(bc(ix^d,idims)**2*qd(ix^d,1)+bc(ix1-1,ix2,ix3,idims)**2*qd(ix^d,2)&
862 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
863 if(fl%tc_perpendicular) &
864 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.25d0*(qd(ix^d,1)+qd(ix^d,2)+qd(ix^d,3)+qd(ix^d,4))
870 {
do ix^db=ixamin^db,ixamax^db\}
871 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
872 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
873 if(qdd(ix^d)<minq)
then
875 else if(qdd(ix^d)>maxq)
then
880 if(qdd(ix1,ix2-1)<minq)
then
882 else if(qdd(ix1,ix2-1)>maxq)
then
885 qd(ix^d,2)=qdd(ix1,ix2-1)
887 qvec(ix^d,idims)=kaf(ix^d)*0.5d0*(bc(ix1,ix2,idims)**2*qd(ix^d,1)+bc(ix1,ix2-1,idims)**2*qd(ix^d,2))
888 if(fl%tc_perpendicular) &
889 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
892 {
do ix^db=ixamin^db,ixamax^db\}
893 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
894 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
895 if(qdd(ix^d)<minq)
then
897 else if(qdd(ix^d)>maxq)
then
902 if(qdd(ix1-1,ix2)<minq)
then
904 else if(qdd(ix1-1,ix2)>maxq)
then
907 qd(ix^d,2)=qdd(ix1-1,ix2)
909 qvec(ix^d,idims)=kaf(ix^d)*0.5d0*(bc(ix1,ix2,idims)**2*qd(ix^d,1)+bc(ix1-1,ix2,idims)**2*qd(ix^d,2))
910 if(fl%tc_perpendicular) &
911 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
916 ixb^l=ixa^l+kr(idims,^d);
917 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
920 ixbmax^d=ixamax^d+kr(idims,^d);
922 if(idir==idims) cycle
923 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
924 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
925 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
927 if(fl%tc_saturate)
then
930 ixb^l=ixa^l+kr(idims,^d);
931 qdd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bnorm(ixa^s))
932 {
do ix^db=ixamin^db,ixamax^db\}
933 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
934 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
944 integer,
intent(in) :: ixI^L, ixO^L
945 double precision,
intent(in) :: x(ixI^S,1:ndim)
946 double precision,
intent(in) :: w(ixI^S,1:nw)
948 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
949 double precision,
intent(in) :: alpha
950 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
953 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
954 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
955 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndim)
956 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
962 if(
allocated(iw_mag))
then
964 {
do ix^db=ixmin^db,ixmax^db\}
965 ^d&blocal(^d)=w({ix^d},iw_mag(^d))+
block%B0({ix^d},^d,0)\
967 if(blocal(1)/=0.d0)
then
968 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2)
972 if(blocal(2)/=0.d0)
then
973 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2)
979 if(blocal(1)/=0.d0)
then
980 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
984 if(blocal(2)/=0.d0)
then
985 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
989 if(blocal(3)/=0.d0)
then
990 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
997 {
do ix^db=ixmin^db,ixmax^db\}
999 if(w(ix^d,iw_mag(1))/=0.d0)
then
1000 mf(ix^d,1)=sign(1.d0,w(ix^d,iw_mag(1)))/dsqrt(1.d0+(w(ix^d,iw_mag(2))/w(ix^d,iw_mag(1)))**2)
1004 if(w(ix^d,iw_mag(2))/=0.d0)
then
1005 mf(ix^d,2)=sign(1.d0,w(ix^d,iw_mag(2)))/dsqrt(1.d0+(w(ix^d,iw_mag(1))/w(ix^d,iw_mag(2)))**2)
1011 if(w(ix^d,iw_mag(1))/=0.d0)
then
1012 mf(ix^d,1)=sign(1.d0,w(ix^d,iw_mag(1)))/dsqrt(1.d0+(w(ix^d,iw_mag(2))/w(ix^d,iw_mag(1)))**2+&
1013 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
1017 if(w(ix^d,iw_mag(2))/=0.d0)
then
1018 mf(ix^d,2)=sign(1.d0,w(ix^d,iw_mag(2)))/dsqrt(1.d0+(w(ix^d,iw_mag(1))/w(ix^d,iw_mag(2)))**2+&
1019 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
1023 if(w(ix^d,iw_mag(3))/=0.d0)
then
1024 mf(ix^d,3)=sign(1.d0,w(ix^d,iw_mag(3)))/dsqrt(1.d0+(w(ix^d,iw_mag(1))/w(ix^d,iw_mag(3)))**2+&
1025 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
1033 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
1036 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1040 {
do ix^db=ixcmin^db,ixcmax^db\}
1041 bc(ix^d,idims)=(mf(ix1,ix2,ix3,idims)*block%dvolume(ix1,ix2,ix3)+mf(ix1+1,ix2,ix3,idims)*block%dvolume(ix1+1,ix2,ix3)&
1042 +mf(ix1,ix2+1,ix3,idims)*block%dvolume(ix1,ix2+1,ix3)+mf(ix1+1,ix2+1,ix3,idims)*block%dvolume(ix1+1,ix2+1,ix3)&
1043 +mf(ix1,ix2,ix3+1,idims)*block%dvolume(ix1,ix2,ix3+1)+mf(ix1+1,ix2,ix3+1,idims)*block%dvolume(ix1+1,ix2,ix3+1)&
1044 +mf(ix1,ix2+1,ix3+1,idims)*block%dvolume(ix1,ix2+1,ix3+1)+mf(ix1+1,ix2+1,ix3+1,idims)*block%dvolume(ix1+1,ix2+1,ix3+1))&
1045 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1046 +block%dvolume(ix1,ix2,ix3+1)+block%dvolume(ix1+1,ix2,ix3+1)+block%dvolume(ix1,ix2+1,ix3+1)+block%dvolume(ix1+1,ix2+1,ix3+1))
1052 {
do ix^db=ixcmin^db,ixcmax^db\}
1053 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
1054 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
1055 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1062 ixbmax^d=ixmax^d-kr(idims,^d);
1063 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
1065 if(fl%tc_constant)
then
1066 if(fl%tc_perpendicular)
then
1067 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
1068 ke(ixc^s)=fl%tc_k_perp
1070 ka(ixc^s)=fl%tc_k_para
1075 {
do ix^db=ixmin^db,ixmax^db\}
1076 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1077 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1079 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1083 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1087 {
do ix^db=ixcmin^db,ixcmax^db\}
1088 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1089 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1090 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1091 +qdd(ix1,ix2+1,ix3+1)*block%dvolume(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1)*block%dvolume(ix1+1,ix2+1,ix3+1))&
1092 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1093 +block%dvolume(ix1,ix2,ix3+1)+block%dvolume(ix1+1,ix2,ix3+1)+block%dvolume(ix1,ix2+1,ix3+1)+block%dvolume(ix1+1,ix2+1,ix3+1))
1097 {
do ix^db=ixcmin^db,ixcmax^db\}
1098 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1099 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1100 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1104 if(fl%tc_perpendicular)
then
1106 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&(w(ix^s,iw_mag(^d))+block%B0(ix^s,^d,0))**2+)*dsqrt(te(ix^s))+smalldouble)
1108 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&w(ix^s,iw_mag(^d))**2+)*dsqrt(te(ix^s))+smalldouble)
1111 {
do ix^db=ixcmin^db,ixcmax^db\}
1112 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1113 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1114 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1115 +qdd(ix1,ix2+1,ix3+1)*block%dvolume(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1)*block%dvolume(ix1+1,ix2+1,ix3+1))&
1116 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1117 +block%dvolume(ix1,ix2,ix3+1)+block%dvolume(ix1+1,ix2,ix3+1)+block%dvolume(ix1,ix2+1,ix3+1)+block%dvolume(ix1+1,ix2+1,ix3+1))
1118 if(ke(ix^d)<ka(ix^d))
then
1119 ka(ix^d)=ka(ix^d)-ke(ix^d)
1127 {
do ix^db=ixcmin^db,ixcmax^db\}
1128 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1129 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1130 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1131 if(ke(ix^d)<ka(ix^d))
then
1132 ka(ix^d)=ka(ix^d)-ke(ix^d)
1141 if(fl%tc_slope_limiter==0)
then
1147 if({ ix^d==0 .and. ^d==idims | .or.})
then
1148 ixbmin^d=ixcmin^d+ix^d;
1149 ixbmax^d=ixcmax^d+ix^d;
1150 qdd(ixc^s)=qdd(ixc^s)+gradt(ixb^s,idims)
1154 qvec(ixc^s,idims)=qdd(ixc^s)*0.5d0**(ndim-1)
1157 qdd(ixc^s)=sum(qvec(ixc^s,1:ndim)*bc(ixc^s,1:ndim),dim=ndim+1)
1160 gradt(ixc^s,idims)=ka(ixc^s)*bc(ixc^s,idims)*qdd(ixc^s)
1161 if(fl%tc_perpendicular) gradt(ixc^s,idims)=gradt(ixc^s,idims)+ke(ixc^s)*qvec(ixc^s,idims)
1166 ixb^l=ixo^l-kr(idims,^d);
1167 ixamax^d=ixomax^d; ixamin^d=ixbmin^d;
1169 if({ ix^d==0 .and. ^d==idims | .or.})
then
1170 ixbmin^d=ixamin^d-ix^d;
1171 ixbmax^d=ixamax^d-ix^d;
1172 qvec(ixa^s,idims)=qvec(ixa^s,idims)+gradt(ixb^s,idims)
1175 qvec(ixa^s,idims)=qvec(ixa^s,idims)*0.5d0**(ndim-1)
1176 if(fl%tc_saturate)
then
1181 if({ ix^d==0 .and. ^d==idims | .or.})
then
1182 ixbmin^d=ixamin^d-ix^d;
1183 ixbmax^d=ixamax^d-ix^d;
1184 bcf(ixa^s,idims)=bcf(ixa^s,idims)+bc(ixb^s,idims)
1188 bcf(ixa^s,idims)=bcf(ixa^s,idims)*0.5d0**(ndim-1)
1189 ixb^l=ixa^l+kr(idims,^d);
1190 qdd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bcf(ixa^s,idims))
1191 {
do ix^db=ixamin^db,ixamax^db\}
1192 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1193 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1201 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1204 {
do ix^db=ixamin^db,ixamax^db\}
1206 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1207 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1208 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1209 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1211 if(fl%tc_perpendicular) &
1212 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1213 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1215 else if(idims==2)
then
1216 {
do ix^db=ixamin^db,ixamax^db\}
1217 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1218 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1219 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1220 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1221 if(fl%tc_perpendicular) &
1222 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1223 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1226 {
do ix^db=ixamin^db,ixamax^db\}
1227 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1228 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1229 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1230 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1231 if(fl%tc_perpendicular) &
1232 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1233 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1239 {
do ix^db=ixamin^db,ixamax^db\}
1240 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1241 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1242 if(fl%tc_perpendicular) &
1243 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1246 {
do ix^db=ixamin^db,ixamax^db\}
1247 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1248 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1249 if(fl%tc_perpendicular) &
1250 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1258 {
do ix^db=ixcmin^db,ixcmax^db\}
1259 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1260 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1261 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1262 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1263 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1264 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1))
1266 else if(idims==2)
then
1267 {
do ix^db=ixcmin^db,ixcmax^db\}
1268 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1269 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1270 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1271 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1272 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1273 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1276 {
do ix^db=ixcmin^db,ixcmax^db\}
1277 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1278 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1279 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1280 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1281 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1282 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1288 {
do ix^db=ixcmin^db,ixcmax^db\}
1289 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1290 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1291 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1294 {
do ix^db=ixcmin^db,ixcmax^db\}
1295 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1296 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1297 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2)+1.d-300)
1304 {
do ix^db=ixamin^db,ixamax^db\}
1305 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1306 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1307 if(qdd(ix^d)<minq)
then
1309 else if(qdd(ix^d)>maxq)
then
1312 qd(ix^d,1)=qdd(ix^d)
1314 if(qdd(ix1,ix2-1,ix3)<minq)
then
1316 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1319 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1321 if(qdd(ix1,ix2,ix3-1)<minq)
then
1323 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1326 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1328 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1330 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1333 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1335 qvec(ix^d,idims)=kaf(ix^d)*0.25d0*(bc(ix^d,idims)**2*qd(ix^d,1)+bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,2)&
1336 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1337 if(fl%tc_perpendicular) &
1338 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.25d0*(qd(ix^d,1)+qd(ix^d,2)+qd(ix^d,3)+qd(ix^d,4))
1340 else if(idims==2)
then
1341 {
do ix^db=ixamin^db,ixamax^db\}
1342 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1343 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1344 if(qdd(ix^d)<minq)
then
1346 else if(qdd(ix^d)>maxq)
then
1349 qd(ix^d,1)=qdd(ix^d)
1351 if(qdd(ix1-1,ix2,ix3)<minq)
then
1353 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1356 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1358 if(qdd(ix1,ix2,ix3-1)<minq)
then
1360 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1363 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1365 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1367 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1370 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1372 qvec(ix^d,idims)=kaf(ix^d)*0.25d0*(bc(ix^d,idims)**2*qd(ix^d,1)+bc(ix1-1,ix2,ix3,idims)**2*qd(ix^d,2)&
1373 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1374 if(fl%tc_perpendicular) &
1375 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.25d0*(qd(ix^d,1)+qd(ix^d,2)+qd(ix^d,3)+qd(ix^d,4))
1378 {
do ix^db=ixamin^db,ixamax^db\}
1379 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1380 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1381 if(qdd(ix^d)<minq)
then
1383 else if(qdd(ix^d)>maxq)
then
1386 qd(ix^d,1)=qdd(ix^d)
1388 if(qdd(ix1-1,ix2,ix3)<minq)
then
1390 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1393 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1395 if(qdd(ix1,ix2-1,ix3)<minq)
then
1397 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1400 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1402 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1404 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1407 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1409 qvec(ix^d,idims)=kaf(ix^d)*0.25d0*(bc(ix^d,idims)**2*qd(ix^d,1)+bc(ix1-1,ix2,ix3,idims)**2*qd(ix^d,2)&
1410 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1411 if(fl%tc_perpendicular) &
1412 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.25d0*(qd(ix^d,1)+qd(ix^d,2)+qd(ix^d,3)+qd(ix^d,4))
1418 {
do ix^db=ixamin^db,ixamax^db\}
1419 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1420 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1421 if(qdd(ix^d)<minq)
then
1423 else if(qdd(ix^d)>maxq)
then
1426 qd(ix^d,1)=qdd(ix^d)
1428 if(qdd(ix1,ix2-1)<minq)
then
1430 else if(qdd(ix1,ix2-1)>maxq)
then
1433 qd(ix^d,2)=qdd(ix1,ix2-1)
1435 qvec(ix^d,idims)=kaf(ix^d)*0.5d0*(bc(ix1,ix2,idims)**2*qd(ix^d,1)+bc(ix1,ix2-1,idims)**2*qd(ix^d,2))
1436 if(fl%tc_perpendicular) &
1437 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1440 {
do ix^db=ixamin^db,ixamax^db\}
1441 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1442 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1443 if(qdd(ix^d)<minq)
then
1445 else if(qdd(ix^d)>maxq)
then
1448 qd(ix^d,1)=qdd(ix^d)
1450 if(qdd(ix1-1,ix2)<minq)
then
1452 else if(qdd(ix1-1,ix2)>maxq)
then
1455 qd(ix^d,2)=qdd(ix1-1,ix2)
1457 qvec(ix^d,idims)=kaf(ix^d)*0.5d0*(bc(ix1,ix2,idims)**2*qd(ix^d,1)+bc(ix1-1,ix2,idims)**2*qd(ix^d,2))
1458 if(fl%tc_perpendicular) &
1459 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1464 ixb^l=ixa^l+kr(idims,^d);
1465 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1468 ixbmax^d=ixamax^d+kr(idims,^d);
1470 if(idir==idims) cycle
1471 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1472 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1473 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1475 if(fl%tc_saturate)
then
1478 ixb^l=ixa^l+kr(idims,^d);
1479 qdd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bnorm(ixa^s))
1480 {
do ix^db=ixamin^db,ixamax^db\}
1481 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1482 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1667 integer,
intent(in) :: ixI^L, ixO^L
1668 double precision,
intent(in) :: x(ixI^S,1:ndim)
1669 double precision,
intent(in) :: w(ixI^S,1:nw)
1671 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1672 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1673 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1674 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1678 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1684 ixbmax^d=ixmax^d-
kr(idims,^d);
1685 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1688 {
do ix^db=ixcmin^db,ixcmax^db\}
1689 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1690 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1692 else if(idims==2)
then
1693 {
do ix^db=ixcmin^db,ixcmax^db\}
1694 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1695 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1698 {
do ix^db=ixcmin^db,ixcmax^db\}
1699 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1700 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1706 {
do ix^db=ixcmin^db,ixcmax^db\}
1707 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1710 {
do ix^db=ixcmin^db,ixcmax^db\}
1711 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1716 do ix1=ixcmin1,ixcmax1
1717 qvec(ix1,idims)=ke(ix1)
1722 if(fl%tc_constant)
then
1723 qd(ix^s)=fl%tc_k_para
1726 {
do ix^db=ixmin^db,ixmax^db\}
1727 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1728 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1730 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1734 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1740 {
do ix^db=ixcmin^db,ixcmax^db\}
1741 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1742 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1743 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1744 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1745 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1746 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1747 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1751 {
do ix^db=ixcmin^db,ixcmax^db\}
1752 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+1))
1753 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1754 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1758 do ix1=ixcmin1,ixcmax1
1759 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1765 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1768 {
do ix^db=ixamin^db,ixamax^db\}
1769 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1770 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1772 else if(idims==2)
then
1773 {
do ix^db=ixamin^db,ixamax^db\}
1774 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1775 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1778 {
do ix^db=ixamin^db,ixamax^db\}
1779 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1780 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1786 {
do ix^db=ixamin^db,ixamax^db\}
1787 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1790 {
do ix^db=ixamin^db,ixamax^db\}
1791 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1796 do ix1=ixamin1,ixamax1
1797 qvec(ix1,idims)=gradt(ix1,idims)
1800 if(fl%tc_saturate)
then
1803 ixb^l=ixa^l+kr(idims,^d);
1804 qd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1805 {
do ix^db=ixamin^db,ixamax^db\}
1806 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1807 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1817 integer,
intent(in) :: ixI^L, ixO^L
1818 double precision,
intent(in) :: x(ixI^S,1:ndim)
1819 double precision,
intent(in) :: w(ixI^S,1:nw)
1821 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1822 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1823 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1824 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1828 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1834 ixbmax^d=ixmax^d-
kr(idims,^d);
1835 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1838 {
do ix^db=ixcmin^db,ixcmax^db\}
1839 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1840 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1841 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1842 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1843 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1844 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1))
1846 else if(idims==2)
then
1847 {
do ix^db=ixcmin^db,ixcmax^db\}
1848 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1849 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1850 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1851 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1852 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1853 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1857 {
do ix^db=ixcmin^db,ixcmax^db\}
1858 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1859 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1860 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1861 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1862 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1863 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1869 {
do ix^db=ixcmin^db,ixcmax^db\}
1870 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1871 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1874 {
do ix^db=ixcmin^db,ixcmax^db\}
1875 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1876 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1881 do ix1=ixcmin1,ixcmax1
1882 qvec(ix1,idims)=ke(ix1)
1887 if(fl%tc_constant)
then
1888 qd(ix^s)=fl%tc_k_para
1891 {
do ix^db=ixmin^db,ixmax^db\}
1892 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1893 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1895 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1899 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1905 {
do ix^db=ixcmin^db,ixcmax^db\}
1906 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1907 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1908 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1909 +qd(ix1,ix2+1,ix3+1)*block%dvolume(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1)*block%dvolume(ix1+1,ix2+1,ix3+1))&
1910 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1911 +block%dvolume(ix1,ix2,ix3+1)+block%dvolume(ix1+1,ix2,ix3+1)+block%dvolume(ix1,ix2+1,ix3+1)+block%dvolume(ix1+1,ix2+1,ix3+1))
1912 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1913 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1914 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1918 {
do ix^db=ixcmin^db,ixcmax^db\}
1919 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1920 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1921 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1922 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1923 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1927 do ix1=ixcmin1,ixcmax1
1928 gradt(ix^d,1)=(qd(ix1)*block%dvolume(ix1)+qd(ix1+1)*block%dvolume(ix1+1))/(block%dvolume(ix1)+block%dvolume(ix1+1))*qvec(ix^d,1)
1934 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1937 {
do ix^db=ixamin^db,ixamax^db\}
1938 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1939 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1941 else if(idims==2)
then
1942 {
do ix^db=ixamin^db,ixamax^db\}
1943 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1944 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1947 {
do ix^db=ixamin^db,ixamax^db\}
1948 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1949 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1955 {
do ix^db=ixamin^db,ixamax^db\}
1956 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1959 {
do ix^db=ixamin^db,ixamax^db\}
1960 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1965 do ix1=ixamin1,ixamax1
1966 qvec(ix1,idims)=gradt(ix1,idims)
1969 if(fl%tc_saturate)
then
1972 ixb^l=ixa^l+kr(idims,^d);
1973 qd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1974 {
do ix^db=ixamin^db,ixamax^db\}
1975 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1976 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)