434 integer,
intent(in) :: ixI^L, ixO^L
435 double precision,
intent(in) :: x(ixI^S,1:ndim)
436 double precision,
intent(in) :: w(ixI^S,1:nw)
438 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
439 double precision,
intent(in) :: alpha
440 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
441 double precision :: rhos(ixI^S)
444 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
445 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
446 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
447 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
450 if(fl%tc_saturate)
call tc_sat_rho(ixi^l,w,x,fl,rho,rhos)
454 if(
allocated(iw_mag))
then
456 {
do ix^db=ixmin^db,ixmax^db\}
457 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
459 if(blocal(1)/=0.d0)
then
460 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
464 if(blocal(2)/=0.d0)
then
465 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
471 if(blocal(1)/=0.d0)
then
472 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
476 if(blocal(2)/=0.d0)
then
477 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
481 if(blocal(3)/=0.d0)
then
482 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
489 {
do ix^db=ixmin^db,ixmax^db\}
491 if(w(ix^d,iw_mag(1))/=0.d0)
then
492 mf(ix^d,1)=sign(1.d0,w(ix^d,iw_mag(1)))/dsqrt(1.d0+(^ce&(w(ix^d,iw_mag(^ce))/w(ix^d,iw_mag(1)))**2+))
496 if(w(ix^d,iw_mag(2))/=0.d0)
then
497 mf(ix^d,2)=sign(1.d0,w(ix^d,iw_mag(2)))/dsqrt(1.d0+(^cf&(w(ix^d,iw_mag(^cf))/w(ix^d,iw_mag(2)))**2+))
503 if(w(ix^d,iw_mag(1))/=0.d0)
then
504 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+&
505 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
509 if(w(ix^d,iw_mag(2))/=0.d0)
then
510 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+&
511 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
515 if(w(ix^d,iw_mag(3))/=0.d0)
then
516 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+&
517 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
525 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
528 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
532 {
do ix^db=ixcmin^db,ixcmax^db\}
533 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
534 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
535 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
536 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
542 {
do ix^db=ixcmin^db,ixcmax^db\}
543 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
544 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
551 ixbmax^d=ixmax^d-kr(idims,^d);
552 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
554 if(fl%tc_constant)
then
555 if(fl%tc_perpendicular)
then
556 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
557 ke(ixc^s)=fl%tc_k_perp
559 ka(ixc^s)=fl%tc_k_para
564 {
do ix^db=ixmin^db,ixmax^db\}
565 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
566 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
568 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
572 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
576 {
do ix^db=ixcmin^db,ixcmax^db\}
577 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
578 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
579 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
580 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
584 {
do ix^db=ixcmin^db,ixcmax^db\}
585 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
586 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
590 if(fl%tc_perpendicular)
then
592 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&(w(ix^s,iw_mag(^c))+block%B0(ix^s,^c,0))**2+)*dsqrt(te(ix^s))+smalldouble)
594 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
597 {
do ix^db=ixcmin^db,ixcmax^db\}
598 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
599 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
600 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
601 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
602 if(ke(ix^d)<ka(ix^d))
then
603 ka(ix^d)=ka(ix^d)-ke(ix^d)
611 {
do ix^db=ixcmin^db,ixcmax^db\}
612 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
613 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
614 if(ke(ix^d)<ka(ix^d))
then
615 ka(ix^d)=ka(ix^d)-ke(ix^d)
626 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
629 {
do ix^db=ixamin^db,ixamax^db\}
631 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
632 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
633 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
634 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
636 if(fl%tc_perpendicular) &
637 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
638 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
640 else if(idims==2)
then
641 {
do ix^db=ixamin^db,ixamax^db\}
642 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
643 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
644 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
645 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
646 if(fl%tc_perpendicular) &
647 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
648 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
651 {
do ix^db=ixamin^db,ixamax^db\}
652 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
653 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
654 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
655 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
656 if(fl%tc_perpendicular) &
657 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
658 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
664 {
do ix^db=ixamin^db,ixamax^db\}
665 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
666 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
667 if(fl%tc_perpendicular) &
668 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
671 {
do ix^db=ixamin^db,ixamax^db\}
672 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
673 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
674 if(fl%tc_perpendicular) &
675 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
683 {
do ix^db=ixcmin^db,ixcmax^db\}
684 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
685 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
687 else if(idims==2)
then
688 {
do ix^db=ixcmin^db,ixcmax^db\}
689 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
690 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
693 {
do ix^db=ixcmin^db,ixcmax^db\}
694 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
695 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
701 {
do ix^db=ixcmin^db,ixcmax^db\}
702 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
705 {
do ix^db=ixcmin^db,ixcmax^db\}
706 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
713 {
do ix^db=ixamin^db,ixamax^db\}
714 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
715 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
716 if(qdd(ix^d)<minq)
then
718 else if(qdd(ix^d)>maxq)
then
723 if(qdd(ix1,ix2-1,ix3)<minq)
then
725 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
728 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
730 if(qdd(ix1,ix2,ix3-1)<minq)
then
732 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
735 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
737 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
739 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
742 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
744 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)&
745 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
746 if(fl%tc_perpendicular) &
747 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))
749 else if(idims==2)
then
750 {
do ix^db=ixamin^db,ixamax^db\}
751 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
752 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
753 if(qdd(ix^d)<minq)
then
755 else if(qdd(ix^d)>maxq)
then
760 if(qdd(ix1-1,ix2,ix3)<minq)
then
762 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
765 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
767 if(qdd(ix1,ix2,ix3-1)<minq)
then
769 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
772 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
774 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
776 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
779 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
781 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)&
782 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
783 if(fl%tc_perpendicular) &
784 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))
787 {
do ix^db=ixamin^db,ixamax^db\}
788 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
789 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
790 if(qdd(ix^d)<minq)
then
792 else if(qdd(ix^d)>maxq)
then
797 if(qdd(ix1-1,ix2,ix3)<minq)
then
799 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
802 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
804 if(qdd(ix1,ix2-1,ix3)<minq)
then
806 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
809 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
811 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
813 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
816 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
818 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)&
819 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
820 if(fl%tc_perpendicular) &
821 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))
827 {
do ix^db=ixamin^db,ixamax^db\}
828 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
829 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
830 if(qdd(ix^d)<minq)
then
832 else if(qdd(ix^d)>maxq)
then
837 if(qdd(ix1,ix2-1)<minq)
then
839 else if(qdd(ix1,ix2-1)>maxq)
then
842 qd(ix^d,2)=qdd(ix1,ix2-1)
844 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))
845 if(fl%tc_perpendicular) &
846 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
849 {
do ix^db=ixamin^db,ixamax^db\}
850 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
851 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
852 if(qdd(ix^d)<minq)
then
854 else if(qdd(ix^d)>maxq)
then
859 if(qdd(ix1-1,ix2)<minq)
then
861 else if(qdd(ix1-1,ix2)>maxq)
then
864 qd(ix^d,2)=qdd(ix1-1,ix2)
866 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))
867 if(fl%tc_perpendicular) &
868 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
873 ixb^l=ixa^l+kr(idims,^d);
874 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
877 ixbmax^d=ixamax^d+kr(idims,^d);
879 if(idir==idims) cycle
880 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
881 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
882 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
884 if(fl%tc_saturate)
then
888 ixb^l=ixa^l+kr(idims,^d);
889 qdd(ixa^s)=0.75d0*fl%sat_fac*(rhos(ixa^s)+rhos(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bnorm(ixa^s))
890 {
do ix^db=ixamin^db,ixamax^db\}
891 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
892 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
900 integer,
intent(in) :: ixI^L, ixO^L
901 double precision,
intent(in) :: x(ixI^S,1:ndim)
902 double precision,
intent(in) :: w(ixI^S,1:nw)
904 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
905 double precision,
intent(in) :: alpha
906 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
907 double precision :: rhos(ixI^S)
910 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
911 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
912 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
913 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
916 if(fl%tc_saturate)
call tc_sat_rho(ixi^l,w,x,fl,rho,rhos)
920 if(
allocated(iw_mag))
then
922 {
do ix^db=ixmin^db,ixmax^db\}
923 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
925 if(blocal(1)/=0.d0)
then
926 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
930 if(blocal(2)/=0.d0)
then
931 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
937 if(blocal(1)/=0.d0)
then
938 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
942 if(blocal(2)/=0.d0)
then
943 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
947 if(blocal(3)/=0.d0)
then
948 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
955 {
do ix^db=ixmin^db,ixmax^db\}
957 if(w(ix^d,iw_mag(1))/=0.d0)
then
958 mf(ix^d,1)=sign(1.d0,w(ix^d,iw_mag(1)))/dsqrt(1.d0+(^ce&(w(ix^d,iw_mag(^ce))/w(ix^d,iw_mag(1)))**2+))
962 if(w(ix^d,iw_mag(2))/=0.d0)
then
963 mf(ix^d,2)=sign(1.d0,w(ix^d,iw_mag(2)))/dsqrt(1.d0+(^cf&(w(ix^d,iw_mag(^cf))/w(ix^d,iw_mag(2)))**2+))
969 if(w(ix^d,iw_mag(1))/=0.d0)
then
970 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+&
971 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
975 if(w(ix^d,iw_mag(2))/=0.d0)
then
976 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+&
977 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
981 if(w(ix^d,iw_mag(3))/=0.d0)
then
982 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+&
983 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
991 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
994 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
998 {
do ix^db=ixcmin^db,ixcmax^db\}
999 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)&
1000 +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)&
1001 +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)&
1002 +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))&
1003 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1004 +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))
1010 {
do ix^db=ixcmin^db,ixcmax^db\}
1011 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
1012 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
1013 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1020 ixbmax^d=ixmax^d-kr(idims,^d);
1021 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
1023 if(fl%tc_constant)
then
1024 if(fl%tc_perpendicular)
then
1025 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
1026 ke(ixc^s)=fl%tc_k_perp
1028 ka(ixc^s)=fl%tc_k_para
1033 {
do ix^db=ixmin^db,ixmax^db\}
1034 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1035 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1037 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1041 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1045 {
do ix^db=ixcmin^db,ixcmax^db\}
1046 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1047 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1048 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1049 +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))&
1050 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1051 +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))
1055 {
do ix^db=ixcmin^db,ixcmax^db\}
1056 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1057 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1058 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1062 if(fl%tc_perpendicular)
then
1064 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&(w(ix^s,iw_mag(^c))+block%B0(ix^s,^c,0))**2+)*dsqrt(te(ix^s))+smalldouble)
1066 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
1069 {
do ix^db=ixcmin^db,ixcmax^db\}
1070 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1071 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1072 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1073 +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))&
1074 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1075 +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))
1076 if(ke(ix^d)<ka(ix^d))
then
1077 ka(ix^d)=ka(ix^d)-ke(ix^d)
1085 {
do ix^db=ixcmin^db,ixcmax^db\}
1086 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1087 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1088 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1089 if(ke(ix^d)<ka(ix^d))
then
1090 ka(ix^d)=ka(ix^d)-ke(ix^d)
1101 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1104 {
do ix^db=ixamin^db,ixamax^db\}
1106 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1107 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1108 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1109 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1111 if(fl%tc_perpendicular) &
1112 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1113 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1115 else if(idims==2)
then
1116 {
do ix^db=ixamin^db,ixamax^db\}
1117 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1118 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1119 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1120 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1121 if(fl%tc_perpendicular) &
1122 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1123 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1126 {
do ix^db=ixamin^db,ixamax^db\}
1127 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1128 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1129 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1130 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1131 if(fl%tc_perpendicular) &
1132 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1133 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1139 {
do ix^db=ixamin^db,ixamax^db\}
1140 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1141 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1142 if(fl%tc_perpendicular) &
1143 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1146 {
do ix^db=ixamin^db,ixamax^db\}
1147 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1148 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1149 if(fl%tc_perpendicular) &
1150 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1158 {
do ix^db=ixcmin^db,ixcmax^db\}
1159 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1160 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1161 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1162 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1163 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1164 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1166 else if(idims==2)
then
1167 {
do ix^db=ixcmin^db,ixcmax^db\}
1168 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1169 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1170 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1171 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1172 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1173 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1176 {
do ix^db=ixcmin^db,ixcmax^db\}
1177 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1178 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1179 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1180 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1181 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1182 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1188 {
do ix^db=ixcmin^db,ixcmax^db\}
1189 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1190 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1191 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1194 {
do ix^db=ixcmin^db,ixcmax^db\}
1195 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1196 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1197 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2)+smalldouble)
1204 {
do ix^db=ixamin^db,ixamax^db\}
1205 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1206 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1207 if(qdd(ix^d)<minq)
then
1209 else if(qdd(ix^d)>maxq)
then
1212 qd(ix^d,1)=qdd(ix^d)
1214 if(qdd(ix1,ix2-1,ix3)<minq)
then
1216 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1219 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1221 if(qdd(ix1,ix2,ix3-1)<minq)
then
1223 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1226 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1228 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1230 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1233 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1235 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)&
1236 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1237 if(fl%tc_perpendicular) &
1238 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))
1240 else if(idims==2)
then
1241 {
do ix^db=ixamin^db,ixamax^db\}
1242 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1243 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1244 if(qdd(ix^d)<minq)
then
1246 else if(qdd(ix^d)>maxq)
then
1249 qd(ix^d,1)=qdd(ix^d)
1251 if(qdd(ix1-1,ix2,ix3)<minq)
then
1253 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1256 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1258 if(qdd(ix1,ix2,ix3-1)<minq)
then
1260 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1263 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1265 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1267 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1270 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1272 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)&
1273 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1274 if(fl%tc_perpendicular) &
1275 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))
1278 {
do ix^db=ixamin^db,ixamax^db\}
1279 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1280 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1281 if(qdd(ix^d)<minq)
then
1283 else if(qdd(ix^d)>maxq)
then
1286 qd(ix^d,1)=qdd(ix^d)
1288 if(qdd(ix1-1,ix2,ix3)<minq)
then
1290 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1293 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1295 if(qdd(ix1,ix2-1,ix3)<minq)
then
1297 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1300 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1302 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1304 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1307 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1309 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)&
1310 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1311 if(fl%tc_perpendicular) &
1312 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))
1318 {
do ix^db=ixamin^db,ixamax^db\}
1319 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1320 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1321 if(qdd(ix^d)<minq)
then
1323 else if(qdd(ix^d)>maxq)
then
1326 qd(ix^d,1)=qdd(ix^d)
1328 if(qdd(ix1,ix2-1)<minq)
then
1330 else if(qdd(ix1,ix2-1)>maxq)
then
1333 qd(ix^d,2)=qdd(ix1,ix2-1)
1335 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))
1336 if(fl%tc_perpendicular) &
1337 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
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)<minq)
then
1352 else if(qdd(ix1-1,ix2)>maxq)
then
1355 qd(ix^d,2)=qdd(ix1-1,ix2)
1357 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))
1358 if(fl%tc_perpendicular) &
1359 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1364 ixb^l=ixa^l+kr(idims,^d);
1365 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1368 ixbmax^d=ixamax^d+kr(idims,^d);
1370 if(idir==idims) cycle
1371 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1372 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1373 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1375 if(fl%tc_saturate)
then
1379 ixb^l=ixa^l+kr(idims,^d);
1380 qdd(ixa^s)=0.75d0*fl%sat_fac*(rhos(ixa^s)+rhos(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bnorm(ixa^s))
1381 {
do ix^db=ixamin^db,ixamax^db\}
1382 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1383 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1677 integer,
intent(in) :: ixI^L, ixO^L
1678 double precision,
intent(in) :: x(ixI^S,1:ndim)
1679 double precision,
intent(in) :: w(ixI^S,1:nw)
1681 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1682 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1683 double precision :: rhos(ixI^S)
1684 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1685 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1688 if(fl%tc_saturate)
call tc_sat_rho(ixi^l,w,x,fl,rho,rhos)
1690 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1696 ixbmax^d=ixmax^d-
kr(idims,^d);
1697 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1700 {
do ix^db=ixcmin^db,ixcmax^db\}
1701 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1702 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1704 else if(idims==2)
then
1705 {
do ix^db=ixcmin^db,ixcmax^db\}
1706 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1707 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1710 {
do ix^db=ixcmin^db,ixcmax^db\}
1711 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1712 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1718 {
do ix^db=ixcmin^db,ixcmax^db\}
1719 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1722 {
do ix^db=ixcmin^db,ixcmax^db\}
1723 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1728 do ix1=ixcmin1,ixcmax1
1729 qvec(ix1,idims)=ke(ix1)
1734 if(fl%tc_constant)
then
1735 qd(ix^s)=fl%tc_k_para
1738 {
do ix^db=ixmin^db,ixmax^db\}
1739 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1740 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1742 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1746 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1752 {
do ix^db=ixcmin^db,ixcmax^db\}
1753 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1754 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1755 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1756 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1757 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1758 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1759 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1763 {
do ix^db=ixcmin^db,ixcmax^db\}
1764 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+1))
1765 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1766 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1770 do ix1=ixcmin1,ixcmax1
1771 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1777 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1780 {
do ix^db=ixamin^db,ixamax^db\}
1781 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1782 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1784 else if(idims==2)
then
1785 {
do ix^db=ixamin^db,ixamax^db\}
1786 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1787 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1790 {
do ix^db=ixamin^db,ixamax^db\}
1791 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1792 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1798 {
do ix^db=ixamin^db,ixamax^db\}
1799 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1802 {
do ix^db=ixamin^db,ixamax^db\}
1803 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1808 do ix1=ixamin1,ixamax1
1809 qvec(ix1,idims)=gradt(ix1,idims)
1812 if(fl%tc_saturate)
then
1816 ixb^l=ixa^l+kr(idims,^d);
1817 qd(ixa^s)=0.75d0*fl%sat_fac*(rhos(ixa^s)+rhos(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1818 {
do ix^db=ixamin^db,ixamax^db\}
1819 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1820 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1828 integer,
intent(in) :: ixI^L, ixO^L
1829 double precision,
intent(in) :: x(ixI^S,1:ndim)
1830 double precision,
intent(in) :: w(ixI^S,1:nw)
1832 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1833 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1834 double precision :: rhos(ixI^S)
1835 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1836 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1839 if(fl%tc_saturate)
call tc_sat_rho(ixi^l,w,x,fl,rho,rhos)
1841 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1847 ixbmax^d=ixmax^d-
kr(idims,^d);
1848 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1851 {
do ix^db=ixcmin^db,ixcmax^db\}
1852 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1853 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1854 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1855 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1856 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1857 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1859 else if(idims==2)
then
1860 {
do ix^db=ixcmin^db,ixcmax^db\}
1861 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1862 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1863 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1864 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1865 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1866 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1870 {
do ix^db=ixcmin^db,ixcmax^db\}
1871 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1872 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1873 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1874 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1875 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1876 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1882 {
do ix^db=ixcmin^db,ixcmax^db\}
1883 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1884 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1887 {
do ix^db=ixcmin^db,ixcmax^db\}
1888 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1889 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1894 do ix1=ixcmin1,ixcmax1
1895 qvec(ix1,idims)=ke(ix1)
1900 if(fl%tc_constant)
then
1901 qd(ix^s)=fl%tc_k_para
1904 {
do ix^db=ixmin^db,ixmax^db\}
1905 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1906 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1908 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1912 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1918 {
do ix^db=ixcmin^db,ixcmax^db\}
1919 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1920 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1921 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1922 +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))&
1923 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1924 +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))
1925 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1926 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1927 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1931 {
do ix^db=ixcmin^db,ixcmax^db\}
1932 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1933 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1934 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1935 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1936 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1940 do ix1=ixcmin1,ixcmax1
1941 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)
1947 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1950 {
do ix^db=ixamin^db,ixamax^db\}
1951 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1952 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1954 else if(idims==2)
then
1955 {
do ix^db=ixamin^db,ixamax^db\}
1956 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1957 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1960 {
do ix^db=ixamin^db,ixamax^db\}
1961 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1962 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1968 {
do ix^db=ixamin^db,ixamax^db\}
1969 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1972 {
do ix^db=ixamin^db,ixamax^db\}
1973 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1978 do ix1=ixamin1,ixamax1
1979 qvec(ix1,idims)=gradt(ix1,idims)
1982 if(fl%tc_saturate)
then
1986 ixb^l=ixa^l+kr(idims,^d);
1987 qd(ixa^s)=0.75d0*fl%sat_fac*(rhos(ixa^s)+rhos(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1988 {
do ix^db=ixamin^db,ixamax^db\}
1989 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1990 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)