420 integer,
intent(in) :: ixI^L, ixO^L
421 double precision,
intent(in) :: x(ixI^S,1:ndim)
422 double precision,
intent(in) :: w(ixI^S,1:nw)
424 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
425 double precision,
intent(in) :: alpha
426 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
429 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
430 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
431 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndim)
432 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
438 if(
allocated(iw_mag))
then
440 {
do ix^db=ixmin^db,ixmax^db\}
441 ^d&blocal(^d)=w({ix^d},iw_mag(^d))+
block%B0({ix^d},^d,0)\
443 if(blocal(1)/=0.d0)
then
444 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2)
448 if(blocal(2)/=0.d0)
then
449 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2)
455 if(blocal(1)/=0.d0)
then
456 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
460 if(blocal(2)/=0.d0)
then
461 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
465 if(blocal(3)/=0.d0)
then
466 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
473 {
do ix^db=ixmin^db,ixmax^db\}
475 if(w(ix^d,iw_mag(1))/=0.d0)
then
476 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)
480 if(w(ix^d,iw_mag(2))/=0.d0)
then
481 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)
487 if(w(ix^d,iw_mag(1))/=0.d0)
then
488 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+&
489 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
493 if(w(ix^d,iw_mag(2))/=0.d0)
then
494 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+&
495 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
499 if(w(ix^d,iw_mag(3))/=0.d0)
then
500 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+&
501 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
509 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
512 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
516 {
do ix^db=ixcmin^db,ixcmax^db\}
517 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
518 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
519 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
520 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
526 {
do ix^db=ixcmin^db,ixcmax^db\}
527 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
528 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
535 ixbmax^d=ixmax^d-kr(idims,^d);
536 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
538 if(fl%tc_constant)
then
539 if(fl%tc_perpendicular)
then
540 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
541 ke(ixc^s)=fl%tc_k_perp
543 ka(ixc^s)=fl%tc_k_para
548 {
do ix^db=ixmin^db,ixmax^db\}
549 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
550 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
552 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
556 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
560 {
do ix^db=ixcmin^db,ixcmax^db\}
561 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
562 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
563 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
564 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
568 {
do ix^db=ixcmin^db,ixcmax^db\}
569 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
570 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
574 if(fl%tc_perpendicular)
then
576 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)
578 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&w(ix^s,iw_mag(^d))**2+)*dsqrt(te(ix^s))+smalldouble)
581 {
do ix^db=ixcmin^db,ixcmax^db\}
582 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
583 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
584 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
585 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
586 if(ke(ix^d)<ka(ix^d))
then
587 ka(ix^d)=ka(ix^d)-ke(ix^d)
595 {
do ix^db=ixcmin^db,ixcmax^db\}
596 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
597 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
598 if(ke(ix^d)<ka(ix^d))
then
599 ka(ix^d)=ka(ix^d)-ke(ix^d)
608 if(fl%tc_slope_limiter==0)
then
614 if({ ix^d==0 .and. ^d==idims | .or.})
then
615 ixbmin^d=ixcmin^d+ix^d;
616 ixbmax^d=ixcmax^d+ix^d;
617 qdd(ixc^s)=qdd(ixc^s)+gradt(ixb^s,idims)
621 qvec(ixc^s,idims)=qdd(ixc^s)*0.5d0**(ndim-1)
624 qdd(ixc^s)=sum(qvec(ixc^s,1:ndim)*bc(ixc^s,1:ndim),dim=ndim+1)
627 gradt(ixc^s,idims)=ka(ixc^s)*bc(ixc^s,idims)*qdd(ixc^s)
628 if(fl%tc_perpendicular) gradt(ixc^s,idims)=gradt(ixc^s,idims)+ke(ixc^s)*qvec(ixc^s,idims)
633 ixb^l=ixo^l-kr(idims,^d);
634 ixamax^d=ixomax^d; ixamin^d=ixbmin^d;
636 if({ ix^d==0 .and. ^d==idims | .or.})
then
637 ixbmin^d=ixamin^d-ix^d;
638 ixbmax^d=ixamax^d-ix^d;
639 qvec(ixa^s,idims)=qvec(ixa^s,idims)+gradt(ixb^s,idims)
642 qvec(ixa^s,idims)=qvec(ixa^s,idims)*0.5d0**(ndim-1)
643 if(fl%tc_saturate)
then
648 if({ ix^d==0 .and. ^d==idims | .or.})
then
649 ixbmin^d=ixamin^d-ix^d;
650 ixbmax^d=ixamax^d-ix^d;
651 bcf(ixa^s,idims)=bcf(ixa^s,idims)+bc(ixb^s,idims)
655 bcf(ixa^s,idims)=bcf(ixa^s,idims)*0.5d0**(ndim-1)
656 ixb^l=ixa^l+kr(idims,^d);
657 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))
658 {
do ix^db=ixamin^db,ixamax^db\}
659 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
660 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
668 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
671 {
do ix^db=ixamin^db,ixamax^db\}
673 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
674 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
675 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
676 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
678 if(fl%tc_perpendicular) &
679 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
680 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
682 else if(idims==2)
then
683 {
do ix^db=ixamin^db,ixamax^db\}
684 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
685 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
686 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
687 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
688 if(fl%tc_perpendicular) &
689 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
690 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
693 {
do ix^db=ixamin^db,ixamax^db\}
694 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
695 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
696 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
697 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
698 if(fl%tc_perpendicular) &
699 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
700 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
706 {
do ix^db=ixamin^db,ixamax^db\}
707 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
708 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
709 if(fl%tc_perpendicular) &
710 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
713 {
do ix^db=ixamin^db,ixamax^db\}
714 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
715 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
716 if(fl%tc_perpendicular) &
717 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
725 {
do ix^db=ixcmin^db,ixcmax^db\}
726 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
727 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
729 else if(idims==2)
then
730 {
do ix^db=ixcmin^db,ixcmax^db\}
731 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
732 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
735 {
do ix^db=ixcmin^db,ixcmax^db\}
736 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
737 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
743 {
do ix^db=ixcmin^db,ixcmax^db\}
744 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
747 {
do ix^db=ixcmin^db,ixcmax^db\}
748 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
755 {
do ix^db=ixamin^db,ixamax^db\}
756 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
757 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
758 if(qdd(ix^d)<minq)
then
760 else if(qdd(ix^d)>maxq)
then
765 if(qdd(ix1,ix2-1,ix3)<minq)
then
767 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
770 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
772 if(qdd(ix1,ix2,ix3-1)<minq)
then
774 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
777 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
779 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
781 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
784 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
786 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)&
787 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
788 if(fl%tc_perpendicular) &
789 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))
791 else if(idims==2)
then
792 {
do ix^db=ixamin^db,ixamax^db\}
793 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
794 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
795 if(qdd(ix^d)<minq)
then
797 else if(qdd(ix^d)>maxq)
then
802 if(qdd(ix1-1,ix2,ix3)<minq)
then
804 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
807 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
809 if(qdd(ix1,ix2,ix3-1)<minq)
then
811 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
814 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
816 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
818 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
821 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
823 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)&
824 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
825 if(fl%tc_perpendicular) &
826 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))
829 {
do ix^db=ixamin^db,ixamax^db\}
830 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
831 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
832 if(qdd(ix^d)<minq)
then
834 else if(qdd(ix^d)>maxq)
then
839 if(qdd(ix1-1,ix2,ix3)<minq)
then
841 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
844 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
846 if(qdd(ix1,ix2-1,ix3)<minq)
then
848 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
851 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
853 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
855 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
858 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
860 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)&
861 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
862 if(fl%tc_perpendicular) &
863 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))
869 {
do ix^db=ixamin^db,ixamax^db\}
870 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
871 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
872 if(qdd(ix^d)<minq)
then
874 else if(qdd(ix^d)>maxq)
then
879 if(qdd(ix1,ix2-1)<minq)
then
881 else if(qdd(ix1,ix2-1)>maxq)
then
884 qd(ix^d,2)=qdd(ix1,ix2-1)
886 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))
887 if(fl%tc_perpendicular) &
888 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
891 {
do ix^db=ixamin^db,ixamax^db\}
892 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
893 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
894 if(qdd(ix^d)<minq)
then
896 else if(qdd(ix^d)>maxq)
then
901 if(qdd(ix1-1,ix2)<minq)
then
903 else if(qdd(ix1-1,ix2)>maxq)
then
906 qd(ix^d,2)=qdd(ix1-1,ix2)
908 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))
909 if(fl%tc_perpendicular) &
910 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
915 ixb^l=ixa^l+kr(idims,^d);
916 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
919 ixbmax^d=ixamax^d+kr(idims,^d);
921 if(idir==idims) cycle
922 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
923 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
924 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
926 if(fl%tc_saturate)
then
929 ixb^l=ixa^l+kr(idims,^d);
930 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))
931 {
do ix^db=ixamin^db,ixamax^db\}
932 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
933 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
943 integer,
intent(in) :: ixI^L, ixO^L
944 double precision,
intent(in) :: x(ixI^S,1:ndim)
945 double precision,
intent(in) :: w(ixI^S,1:nw)
947 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
948 double precision,
intent(in) :: alpha
949 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
952 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
953 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
954 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndim)
955 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
961 if(
allocated(iw_mag))
then
963 {
do ix^db=ixmin^db,ixmax^db\}
964 ^d&blocal(^d)=w({ix^d},iw_mag(^d))+
block%B0({ix^d},^d,0)\
966 if(blocal(1)/=0.d0)
then
967 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2)
971 if(blocal(2)/=0.d0)
then
972 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2)
978 if(blocal(1)/=0.d0)
then
979 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
983 if(blocal(2)/=0.d0)
then
984 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
988 if(blocal(3)/=0.d0)
then
989 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
996 {
do ix^db=ixmin^db,ixmax^db\}
998 if(w(ix^d,iw_mag(1))/=0.d0)
then
999 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)
1003 if(w(ix^d,iw_mag(2))/=0.d0)
then
1004 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)
1010 if(w(ix^d,iw_mag(1))/=0.d0)
then
1011 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+&
1012 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
1016 if(w(ix^d,iw_mag(2))/=0.d0)
then
1017 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+&
1018 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
1022 if(w(ix^d,iw_mag(3))/=0.d0)
then
1023 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+&
1024 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
1032 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
1035 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1039 {
do ix^db=ixcmin^db,ixcmax^db\}
1040 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)&
1041 +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)&
1042 +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)&
1043 +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))&
1044 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1045 +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))
1051 {
do ix^db=ixcmin^db,ixcmax^db\}
1052 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
1053 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
1054 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1061 ixbmax^d=ixmax^d-kr(idims,^d);
1062 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
1064 if(fl%tc_constant)
then
1065 if(fl%tc_perpendicular)
then
1066 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
1067 ke(ixc^s)=fl%tc_k_perp
1069 ka(ixc^s)=fl%tc_k_para
1074 {
do ix^db=ixmin^db,ixmax^db\}
1075 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1076 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1078 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1082 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1086 {
do ix^db=ixcmin^db,ixcmax^db\}
1087 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1088 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1089 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1090 +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))&
1091 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1092 +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))
1096 {
do ix^db=ixcmin^db,ixcmax^db\}
1097 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1098 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1099 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1103 if(fl%tc_perpendicular)
then
1105 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)
1107 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&w(ix^s,iw_mag(^d))**2+)*dsqrt(te(ix^s))+smalldouble)
1110 {
do ix^db=ixcmin^db,ixcmax^db\}
1111 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1112 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1113 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1114 +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))&
1115 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1116 +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))
1117 if(ke(ix^d)<ka(ix^d))
then
1118 ka(ix^d)=ka(ix^d)-ke(ix^d)
1126 {
do ix^db=ixcmin^db,ixcmax^db\}
1127 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1128 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1129 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1130 if(ke(ix^d)<ka(ix^d))
then
1131 ka(ix^d)=ka(ix^d)-ke(ix^d)
1140 if(fl%tc_slope_limiter==0)
then
1146 if({ ix^d==0 .and. ^d==idims | .or.})
then
1147 ixbmin^d=ixcmin^d+ix^d;
1148 ixbmax^d=ixcmax^d+ix^d;
1149 qdd(ixc^s)=qdd(ixc^s)+gradt(ixb^s,idims)
1153 qvec(ixc^s,idims)=qdd(ixc^s)*0.5d0**(ndim-1)
1156 qdd(ixc^s)=sum(qvec(ixc^s,1:ndim)*bc(ixc^s,1:ndim),dim=ndim+1)
1159 gradt(ixc^s,idims)=ka(ixc^s)*bc(ixc^s,idims)*qdd(ixc^s)
1160 if(fl%tc_perpendicular) gradt(ixc^s,idims)=gradt(ixc^s,idims)+ke(ixc^s)*qvec(ixc^s,idims)
1165 ixb^l=ixo^l-kr(idims,^d);
1166 ixamax^d=ixomax^d; ixamin^d=ixbmin^d;
1168 if({ ix^d==0 .and. ^d==idims | .or.})
then
1169 ixbmin^d=ixamin^d-ix^d;
1170 ixbmax^d=ixamax^d-ix^d;
1171 qvec(ixa^s,idims)=qvec(ixa^s,idims)+gradt(ixb^s,idims)
1174 qvec(ixa^s,idims)=qvec(ixa^s,idims)*0.5d0**(ndim-1)
1175 if(fl%tc_saturate)
then
1180 if({ ix^d==0 .and. ^d==idims | .or.})
then
1181 ixbmin^d=ixamin^d-ix^d;
1182 ixbmax^d=ixamax^d-ix^d;
1183 bcf(ixa^s,idims)=bcf(ixa^s,idims)+bc(ixb^s,idims)
1187 bcf(ixa^s,idims)=bcf(ixa^s,idims)*0.5d0**(ndim-1)
1188 ixb^l=ixa^l+kr(idims,^d);
1189 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))
1190 {
do ix^db=ixamin^db,ixamax^db\}
1191 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1192 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1200 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1203 {
do ix^db=ixamin^db,ixamax^db\}
1205 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1206 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1207 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1208 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1210 if(fl%tc_perpendicular) &
1211 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1212 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1214 else if(idims==2)
then
1215 {
do ix^db=ixamin^db,ixamax^db\}
1216 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1217 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1218 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1219 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1220 if(fl%tc_perpendicular) &
1221 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1222 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1225 {
do ix^db=ixamin^db,ixamax^db\}
1226 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1227 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1228 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1229 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1230 if(fl%tc_perpendicular) &
1231 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1232 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1238 {
do ix^db=ixamin^db,ixamax^db\}
1239 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1240 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1241 if(fl%tc_perpendicular) &
1242 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1245 {
do ix^db=ixamin^db,ixamax^db\}
1246 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1247 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1248 if(fl%tc_perpendicular) &
1249 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1257 {
do ix^db=ixcmin^db,ixcmax^db\}
1258 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1259 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1260 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1261 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1262 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1263 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1))
1265 else if(idims==2)
then
1266 {
do ix^db=ixcmin^db,ixcmax^db\}
1267 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1268 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1269 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1270 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1271 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1272 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1275 {
do ix^db=ixcmin^db,ixcmax^db\}
1276 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1277 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1278 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1279 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1280 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1281 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1287 {
do ix^db=ixcmin^db,ixcmax^db\}
1288 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1289 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1290 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1293 {
do ix^db=ixcmin^db,ixcmax^db\}
1294 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1295 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1296 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1303 {
do ix^db=ixamin^db,ixamax^db\}
1304 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1305 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1306 if(qdd(ix^d)<minq)
then
1308 else if(qdd(ix^d)>maxq)
then
1311 qd(ix^d,1)=qdd(ix^d)
1313 if(qdd(ix1,ix2-1,ix3)<minq)
then
1315 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1318 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1320 if(qdd(ix1,ix2,ix3-1)<minq)
then
1322 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1325 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1327 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1329 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1332 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1334 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)&
1335 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1336 if(fl%tc_perpendicular) &
1337 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))
1339 else if(idims==2)
then
1340 {
do ix^db=ixamin^db,ixamax^db\}
1341 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1342 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1343 if(qdd(ix^d)<minq)
then
1345 else if(qdd(ix^d)>maxq)
then
1348 qd(ix^d,1)=qdd(ix^d)
1350 if(qdd(ix1-1,ix2,ix3)<minq)
then
1352 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1355 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1357 if(qdd(ix1,ix2,ix3-1)<minq)
then
1359 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1362 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1364 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1366 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1369 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1371 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)&
1372 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1373 if(fl%tc_perpendicular) &
1374 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))
1377 {
do ix^db=ixamin^db,ixamax^db\}
1378 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1379 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1380 if(qdd(ix^d)<minq)
then
1382 else if(qdd(ix^d)>maxq)
then
1385 qd(ix^d,1)=qdd(ix^d)
1387 if(qdd(ix1-1,ix2,ix3)<minq)
then
1389 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1392 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1394 if(qdd(ix1,ix2-1,ix3)<minq)
then
1396 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1399 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1401 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1403 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1406 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1408 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)&
1409 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1410 if(fl%tc_perpendicular) &
1411 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))
1417 {
do ix^db=ixamin^db,ixamax^db\}
1418 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1419 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1420 if(qdd(ix^d)<minq)
then
1422 else if(qdd(ix^d)>maxq)
then
1425 qd(ix^d,1)=qdd(ix^d)
1427 if(qdd(ix1,ix2-1)<minq)
then
1429 else if(qdd(ix1,ix2-1)>maxq)
then
1432 qd(ix^d,2)=qdd(ix1,ix2-1)
1434 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))
1435 if(fl%tc_perpendicular) &
1436 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1439 {
do ix^db=ixamin^db,ixamax^db\}
1440 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1441 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1442 if(qdd(ix^d)<minq)
then
1444 else if(qdd(ix^d)>maxq)
then
1447 qd(ix^d,1)=qdd(ix^d)
1449 if(qdd(ix1-1,ix2)<minq)
then
1451 else if(qdd(ix1-1,ix2)>maxq)
then
1454 qd(ix^d,2)=qdd(ix1-1,ix2)
1456 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))
1457 if(fl%tc_perpendicular) &
1458 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1463 ixb^l=ixa^l+kr(idims,^d);
1464 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1467 ixbmax^d=ixamax^d+kr(idims,^d);
1469 if(idir==idims) cycle
1470 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1471 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1472 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1474 if(fl%tc_saturate)
then
1477 ixb^l=ixa^l+kr(idims,^d);
1478 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))
1479 {
do ix^db=ixamin^db,ixamax^db\}
1480 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1481 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1661 integer,
intent(in) :: ixI^L, ixO^L
1662 double precision,
intent(in) :: x(ixI^S,1:ndim)
1663 double precision,
intent(in) :: w(ixI^S,1:nw)
1665 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1666 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1667 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1668 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1672 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1678 ixbmax^d=ixmax^d-
kr(idims,^d);
1679 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1682 {
do ix^db=ixcmin^db,ixcmax^db\}
1683 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1684 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1686 else if(idims==2)
then
1687 {
do ix^db=ixcmin^db,ixcmax^db\}
1688 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1689 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1692 {
do ix^db=ixcmin^db,ixcmax^db\}
1693 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1694 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1700 {
do ix^db=ixcmin^db,ixcmax^db\}
1701 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1704 {
do ix^db=ixcmin^db,ixcmax^db\}
1705 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1710 do ix1=ixcmin1,ixcmax1
1711 qvec(ix1,idims)=ke(ix1)
1716 if(fl%tc_constant)
then
1717 qd(ix^s)=fl%tc_k_para
1720 {
do ix^db=ixmin^db,ixmax^db\}
1721 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1722 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1724 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1728 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1734 {
do ix^db=ixcmin^db,ixcmax^db\}
1735 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1736 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1737 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1738 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1739 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1740 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1741 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1745 {
do ix^db=ixcmin^db,ixcmax^db\}
1746 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+1))
1747 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1748 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1752 do ix1=ixcmin1,ixcmax1
1753 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1759 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1762 {
do ix^db=ixamin^db,ixamax^db\}
1763 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1764 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1766 else if(idims==2)
then
1767 {
do ix^db=ixamin^db,ixamax^db\}
1768 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1769 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1772 {
do ix^db=ixamin^db,ixamax^db\}
1773 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1774 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1780 {
do ix^db=ixamin^db,ixamax^db\}
1781 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1784 {
do ix^db=ixamin^db,ixamax^db\}
1785 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1790 do ix1=ixamin1,ixamax1
1791 qvec(ix1,idims)=gradt(ix1,idims)
1794 if(fl%tc_saturate)
then
1797 ixb^l=ixa^l+kr(idims,^d);
1798 qd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1799 {
do ix^db=ixamin^db,ixamax^db\}
1800 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1801 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1811 integer,
intent(in) :: ixI^L, ixO^L
1812 double precision,
intent(in) :: x(ixI^S,1:ndim)
1813 double precision,
intent(in) :: w(ixI^S,1:nw)
1815 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1816 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1817 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1818 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1822 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1828 ixbmax^d=ixmax^d-
kr(idims,^d);
1829 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1832 {
do ix^db=ixcmin^db,ixcmax^db\}
1833 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1834 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1835 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1836 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1837 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1838 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1))
1840 else if(idims==2)
then
1841 {
do ix^db=ixcmin^db,ixcmax^db\}
1842 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1843 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1844 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1845 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1846 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1847 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1851 {
do ix^db=ixcmin^db,ixcmax^db\}
1852 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1853 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1854 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1855 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1856 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1857 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1863 {
do ix^db=ixcmin^db,ixcmax^db\}
1864 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1865 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1868 {
do ix^db=ixcmin^db,ixcmax^db\}
1869 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1870 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1875 do ix1=ixcmin1,ixcmax1
1876 qvec(ix1,idims)=ke(ix1)
1881 if(fl%tc_constant)
then
1882 qd(ix^s)=fl%tc_k_para
1885 {
do ix^db=ixmin^db,ixmax^db\}
1886 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1887 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1889 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1893 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1899 {
do ix^db=ixcmin^db,ixcmax^db\}
1900 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1901 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1902 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1903 +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))&
1904 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1905 +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))
1906 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1907 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1908 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1912 {
do ix^db=ixcmin^db,ixcmax^db\}
1913 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1914 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1915 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1916 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1917 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1921 do ix1=ixcmin1,ixcmax1
1922 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)
1928 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1931 {
do ix^db=ixamin^db,ixamax^db\}
1932 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1933 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1935 else if(idims==2)
then
1936 {
do ix^db=ixamin^db,ixamax^db\}
1937 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1938 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1941 {
do ix^db=ixamin^db,ixamax^db\}
1942 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1943 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1949 {
do ix^db=ixamin^db,ixamax^db\}
1950 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1953 {
do ix^db=ixamin^db,ixamax^db\}
1954 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1959 do ix1=ixamin1,ixamax1
1960 qvec(ix1,idims)=gradt(ix1,idims)
1963 if(fl%tc_saturate)
then
1966 ixb^l=ixa^l+kr(idims,^d);
1967 qd(ixa^s)=2.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1968 {
do ix^db=ixamin^db,ixamax^db\}
1969 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1970 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)