424 integer,
intent(in) :: ixI^L, ixO^L
425 double precision,
intent(in) :: x(ixI^S,1:ndim)
426 double precision,
intent(in) :: w(ixI^S,1:nw)
428 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
429 double precision,
intent(in) :: alpha
430 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
433 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
434 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
435 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
436 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
442 if(
allocated(iw_mag))
then
444 {
do ix^db=ixmin^db,ixmax^db\}
445 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
447 if(blocal(1)/=0.d0)
then
448 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
452 if(blocal(2)/=0.d0)
then
453 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
459 if(blocal(1)/=0.d0)
then
460 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
464 if(blocal(2)/=0.d0)
then
465 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
469 if(blocal(3)/=0.d0)
then
470 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
477 {
do ix^db=ixmin^db,ixmax^db\}
479 if(w(ix^d,iw_mag(1))/=0.d0)
then
480 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+))
484 if(w(ix^d,iw_mag(2))/=0.d0)
then
485 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+))
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+(w(ix^d,iw_mag(2))/w(ix^d,iw_mag(1)))**2+&
493 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
497 if(w(ix^d,iw_mag(2))/=0.d0)
then
498 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+&
499 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
503 if(w(ix^d,iw_mag(3))/=0.d0)
then
504 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+&
505 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
513 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
516 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
520 {
do ix^db=ixcmin^db,ixcmax^db\}
521 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
522 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
523 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
524 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
530 {
do ix^db=ixcmin^db,ixcmax^db\}
531 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
532 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
539 ixbmax^d=ixmax^d-kr(idims,^d);
540 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
542 if(fl%tc_constant)
then
543 if(fl%tc_perpendicular)
then
544 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
545 ke(ixc^s)=fl%tc_k_perp
547 ka(ixc^s)=fl%tc_k_para
552 {
do ix^db=ixmin^db,ixmax^db\}
553 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
554 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
556 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
560 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
564 {
do ix^db=ixcmin^db,ixcmax^db\}
565 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
566 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
567 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
568 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
572 {
do ix^db=ixcmin^db,ixcmax^db\}
573 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
574 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
578 if(fl%tc_perpendicular)
then
580 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)
582 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
585 {
do ix^db=ixcmin^db,ixcmax^db\}
586 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
587 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
588 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
589 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
590 if(ke(ix^d)<ka(ix^d))
then
591 ka(ix^d)=ka(ix^d)-ke(ix^d)
599 {
do ix^db=ixcmin^db,ixcmax^db\}
600 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
601 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
602 if(ke(ix^d)<ka(ix^d))
then
603 ka(ix^d)=ka(ix^d)-ke(ix^d)
614 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
617 {
do ix^db=ixamin^db,ixamax^db\}
619 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
620 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
621 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
622 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
624 if(fl%tc_perpendicular) &
625 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
626 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
628 else if(idims==2)
then
629 {
do ix^db=ixamin^db,ixamax^db\}
630 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
631 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
632 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
633 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
634 if(fl%tc_perpendicular) &
635 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
636 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
639 {
do ix^db=ixamin^db,ixamax^db\}
640 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
641 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
642 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
643 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
644 if(fl%tc_perpendicular) &
645 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
646 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
652 {
do ix^db=ixamin^db,ixamax^db\}
653 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
654 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
655 if(fl%tc_perpendicular) &
656 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
659 {
do ix^db=ixamin^db,ixamax^db\}
660 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
661 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
662 if(fl%tc_perpendicular) &
663 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
671 {
do ix^db=ixcmin^db,ixcmax^db\}
672 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
673 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
675 else if(idims==2)
then
676 {
do ix^db=ixcmin^db,ixcmax^db\}
677 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
678 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
681 {
do ix^db=ixcmin^db,ixcmax^db\}
682 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
683 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
689 {
do ix^db=ixcmin^db,ixcmax^db\}
690 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
693 {
do ix^db=ixcmin^db,ixcmax^db\}
694 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
701 {
do ix^db=ixamin^db,ixamax^db\}
702 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
703 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
704 if(qdd(ix^d)<minq)
then
706 else if(qdd(ix^d)>maxq)
then
711 if(qdd(ix1,ix2-1,ix3)<minq)
then
713 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
716 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
718 if(qdd(ix1,ix2,ix3-1)<minq)
then
720 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
723 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
725 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
727 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
730 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
732 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)&
733 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
734 if(fl%tc_perpendicular) &
735 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))
737 else if(idims==2)
then
738 {
do ix^db=ixamin^db,ixamax^db\}
739 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
740 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
741 if(qdd(ix^d)<minq)
then
743 else if(qdd(ix^d)>maxq)
then
748 if(qdd(ix1-1,ix2,ix3)<minq)
then
750 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
753 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
755 if(qdd(ix1,ix2,ix3-1)<minq)
then
757 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
760 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
762 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
764 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
767 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
769 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)&
770 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
771 if(fl%tc_perpendicular) &
772 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))
775 {
do ix^db=ixamin^db,ixamax^db\}
776 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
777 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
778 if(qdd(ix^d)<minq)
then
780 else if(qdd(ix^d)>maxq)
then
785 if(qdd(ix1-1,ix2,ix3)<minq)
then
787 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
790 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
792 if(qdd(ix1,ix2-1,ix3)<minq)
then
794 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
797 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
799 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
801 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
804 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
806 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)&
807 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
808 if(fl%tc_perpendicular) &
809 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))
815 {
do ix^db=ixamin^db,ixamax^db\}
816 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
817 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
818 if(qdd(ix^d)<minq)
then
820 else if(qdd(ix^d)>maxq)
then
825 if(qdd(ix1,ix2-1)<minq)
then
827 else if(qdd(ix1,ix2-1)>maxq)
then
830 qd(ix^d,2)=qdd(ix1,ix2-1)
832 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))
833 if(fl%tc_perpendicular) &
834 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
837 {
do ix^db=ixamin^db,ixamax^db\}
838 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
839 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
840 if(qdd(ix^d)<minq)
then
842 else if(qdd(ix^d)>maxq)
then
847 if(qdd(ix1-1,ix2)<minq)
then
849 else if(qdd(ix1-1,ix2)>maxq)
then
852 qd(ix^d,2)=qdd(ix1-1,ix2)
854 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))
855 if(fl%tc_perpendicular) &
856 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
861 ixb^l=ixa^l+kr(idims,^d);
862 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
865 ixbmax^d=ixamax^d+kr(idims,^d);
867 if(idir==idims) cycle
868 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
869 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
870 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
872 if(fl%tc_saturate)
then
875 ixb^l=ixa^l+kr(idims,^d);
876 qdd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bnorm(ixa^s))
877 {
do ix^db=ixamin^db,ixamax^db\}
878 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
879 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
888 integer,
intent(in) :: ixI^L, ixO^L
889 double precision,
intent(in) :: x(ixI^S,1:ndim)
890 double precision,
intent(in) :: w(ixI^S,1:nw)
892 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
893 double precision,
intent(in) :: alpha
894 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
897 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
898 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
899 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
900 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
906 if(
allocated(iw_mag))
then
908 {
do ix^db=ixmin^db,ixmax^db\}
909 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
911 if(blocal(1)/=0.d0)
then
912 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
916 if(blocal(2)/=0.d0)
then
917 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
923 if(blocal(1)/=0.d0)
then
924 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
928 if(blocal(2)/=0.d0)
then
929 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
933 if(blocal(3)/=0.d0)
then
934 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
941 {
do ix^db=ixmin^db,ixmax^db\}
943 if(w(ix^d,iw_mag(1))/=0.d0)
then
944 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+))
948 if(w(ix^d,iw_mag(2))/=0.d0)
then
949 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+))
955 if(w(ix^d,iw_mag(1))/=0.d0)
then
956 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+&
957 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
961 if(w(ix^d,iw_mag(2))/=0.d0)
then
962 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+&
963 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
967 if(w(ix^d,iw_mag(3))/=0.d0)
then
968 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+&
969 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
977 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
980 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
984 {
do ix^db=ixcmin^db,ixcmax^db\}
985 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)&
986 +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)&
987 +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)&
988 +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))&
989 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
990 +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))
996 {
do ix^db=ixcmin^db,ixcmax^db\}
997 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
998 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
999 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1006 ixbmax^d=ixmax^d-kr(idims,^d);
1007 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
1009 if(fl%tc_constant)
then
1010 if(fl%tc_perpendicular)
then
1011 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
1012 ke(ixc^s)=fl%tc_k_perp
1014 ka(ixc^s)=fl%tc_k_para
1019 {
do ix^db=ixmin^db,ixmax^db\}
1020 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1021 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1023 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1027 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1031 {
do ix^db=ixcmin^db,ixcmax^db\}
1032 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1033 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1034 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1035 +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))&
1036 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1037 +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))
1041 {
do ix^db=ixcmin^db,ixcmax^db\}
1042 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1043 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1044 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1048 if(fl%tc_perpendicular)
then
1050 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)
1052 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
1055 {
do ix^db=ixcmin^db,ixcmax^db\}
1056 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1057 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1058 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1059 +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))&
1060 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1061 +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))
1062 if(ke(ix^d)<ka(ix^d))
then
1063 ka(ix^d)=ka(ix^d)-ke(ix^d)
1071 {
do ix^db=ixcmin^db,ixcmax^db\}
1072 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1073 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1074 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1075 if(ke(ix^d)<ka(ix^d))
then
1076 ka(ix^d)=ka(ix^d)-ke(ix^d)
1087 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1090 {
do ix^db=ixamin^db,ixamax^db\}
1092 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1093 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1094 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1095 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1097 if(fl%tc_perpendicular) &
1098 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1099 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1101 else if(idims==2)
then
1102 {
do ix^db=ixamin^db,ixamax^db\}
1103 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1104 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1105 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1106 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1107 if(fl%tc_perpendicular) &
1108 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1109 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1112 {
do ix^db=ixamin^db,ixamax^db\}
1113 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1114 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1115 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1116 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1117 if(fl%tc_perpendicular) &
1118 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1119 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1125 {
do ix^db=ixamin^db,ixamax^db\}
1126 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1127 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1128 if(fl%tc_perpendicular) &
1129 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1132 {
do ix^db=ixamin^db,ixamax^db\}
1133 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1134 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1135 if(fl%tc_perpendicular) &
1136 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1144 {
do ix^db=ixcmin^db,ixcmax^db\}
1145 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1146 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1147 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1148 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1149 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1150 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1))
1152 else if(idims==2)
then
1153 {
do ix^db=ixcmin^db,ixcmax^db\}
1154 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1155 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1156 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1157 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1158 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1159 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1162 {
do ix^db=ixcmin^db,ixcmax^db\}
1163 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1164 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1165 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1166 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1167 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1168 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1174 {
do ix^db=ixcmin^db,ixcmax^db\}
1175 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1176 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1177 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1180 {
do ix^db=ixcmin^db,ixcmax^db\}
1181 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1182 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1183 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2)+1.d-300)
1190 {
do ix^db=ixamin^db,ixamax^db\}
1191 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1192 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1193 if(qdd(ix^d)<minq)
then
1195 else if(qdd(ix^d)>maxq)
then
1198 qd(ix^d,1)=qdd(ix^d)
1200 if(qdd(ix1,ix2-1,ix3)<minq)
then
1202 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1205 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1207 if(qdd(ix1,ix2,ix3-1)<minq)
then
1209 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1212 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1214 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1216 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1219 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1221 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)&
1222 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1223 if(fl%tc_perpendicular) &
1224 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))
1226 else if(idims==2)
then
1227 {
do ix^db=ixamin^db,ixamax^db\}
1228 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1229 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1230 if(qdd(ix^d)<minq)
then
1232 else if(qdd(ix^d)>maxq)
then
1235 qd(ix^d,1)=qdd(ix^d)
1237 if(qdd(ix1-1,ix2,ix3)<minq)
then
1239 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1242 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1244 if(qdd(ix1,ix2,ix3-1)<minq)
then
1246 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1249 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1251 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1253 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1256 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1258 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)&
1259 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1260 if(fl%tc_perpendicular) &
1261 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))
1264 {
do ix^db=ixamin^db,ixamax^db\}
1265 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1266 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1267 if(qdd(ix^d)<minq)
then
1269 else if(qdd(ix^d)>maxq)
then
1272 qd(ix^d,1)=qdd(ix^d)
1274 if(qdd(ix1-1,ix2,ix3)<minq)
then
1276 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1279 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1281 if(qdd(ix1,ix2-1,ix3)<minq)
then
1283 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1286 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1288 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1290 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1293 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1295 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)&
1296 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1297 if(fl%tc_perpendicular) &
1298 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))
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)<minq)
then
1316 else if(qdd(ix1,ix2-1)>maxq)
then
1319 qd(ix^d,2)=qdd(ix1,ix2-1)
1321 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))
1322 if(fl%tc_perpendicular) &
1323 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1326 {
do ix^db=ixamin^db,ixamax^db\}
1327 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1328 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1329 if(qdd(ix^d)<minq)
then
1331 else if(qdd(ix^d)>maxq)
then
1334 qd(ix^d,1)=qdd(ix^d)
1336 if(qdd(ix1-1,ix2)<minq)
then
1338 else if(qdd(ix1-1,ix2)>maxq)
then
1341 qd(ix^d,2)=qdd(ix1-1,ix2)
1343 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))
1344 if(fl%tc_perpendicular) &
1345 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1350 ixb^l=ixa^l+kr(idims,^d);
1351 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1354 ixbmax^d=ixamax^d+kr(idims,^d);
1356 if(idir==idims) cycle
1357 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1358 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1359 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1361 if(fl%tc_saturate)
then
1364 ixb^l=ixa^l+kr(idims,^d);
1365 qdd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bnorm(ixa^s))
1366 {
do ix^db=ixamin^db,ixamax^db\}
1367 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1368 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1556 integer,
intent(in) :: ixI^L, ixO^L
1557 double precision,
intent(in) :: x(ixI^S,1:ndim)
1558 double precision,
intent(in) :: w(ixI^S,1:nw)
1560 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1561 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1562 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1563 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1567 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1573 ixbmax^d=ixmax^d-
kr(idims,^d);
1574 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1577 {
do ix^db=ixcmin^db,ixcmax^db\}
1578 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1579 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1581 else if(idims==2)
then
1582 {
do ix^db=ixcmin^db,ixcmax^db\}
1583 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1584 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1587 {
do ix^db=ixcmin^db,ixcmax^db\}
1588 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1589 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1595 {
do ix^db=ixcmin^db,ixcmax^db\}
1596 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1599 {
do ix^db=ixcmin^db,ixcmax^db\}
1600 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1605 do ix1=ixcmin1,ixcmax1
1606 qvec(ix1,idims)=ke(ix1)
1611 if(fl%tc_constant)
then
1612 qd(ix^s)=fl%tc_k_para
1615 {
do ix^db=ixmin^db,ixmax^db\}
1616 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1617 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1619 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1623 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1629 {
do ix^db=ixcmin^db,ixcmax^db\}
1630 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1631 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1632 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1633 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1634 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1635 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1636 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1640 {
do ix^db=ixcmin^db,ixcmax^db\}
1641 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+1))
1642 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1643 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1647 do ix1=ixcmin1,ixcmax1
1648 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1654 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1657 {
do ix^db=ixamin^db,ixamax^db\}
1658 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1659 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1661 else if(idims==2)
then
1662 {
do ix^db=ixamin^db,ixamax^db\}
1663 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1664 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1667 {
do ix^db=ixamin^db,ixamax^db\}
1668 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1669 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1675 {
do ix^db=ixamin^db,ixamax^db\}
1676 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1679 {
do ix^db=ixamin^db,ixamax^db\}
1680 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1685 do ix1=ixamin1,ixamax1
1686 qvec(ix1,idims)=gradt(ix1,idims)
1689 if(fl%tc_saturate)
then
1692 ixb^l=ixa^l+kr(idims,^d);
1693 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1694 {
do ix^db=ixamin^db,ixamax^db\}
1695 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1696 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1706 integer,
intent(in) :: ixI^L, ixO^L
1707 double precision,
intent(in) :: x(ixI^S,1:ndim)
1708 double precision,
intent(in) :: w(ixI^S,1:nw)
1710 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1711 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1712 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1713 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1717 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1723 ixbmax^d=ixmax^d-
kr(idims,^d);
1724 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1727 {
do ix^db=ixcmin^db,ixcmax^db\}
1728 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1729 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1730 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1731 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1732 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1733 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1))
1735 else if(idims==2)
then
1736 {
do ix^db=ixcmin^db,ixcmax^db\}
1737 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1738 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1739 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1740 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1741 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1742 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1746 {
do ix^db=ixcmin^db,ixcmax^db\}
1747 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1748 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1749 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1750 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1751 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1752 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1758 {
do ix^db=ixcmin^db,ixcmax^db\}
1759 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1760 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1763 {
do ix^db=ixcmin^db,ixcmax^db\}
1764 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1765 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1770 do ix1=ixcmin1,ixcmax1
1771 qvec(ix1,idims)=ke(ix1)
1776 if(fl%tc_constant)
then
1777 qd(ix^s)=fl%tc_k_para
1780 {
do ix^db=ixmin^db,ixmax^db\}
1781 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1782 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1784 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1788 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1794 {
do ix^db=ixcmin^db,ixcmax^db\}
1795 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1796 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1797 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1798 +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))&
1799 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1800 +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))
1801 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1802 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1803 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1807 {
do ix^db=ixcmin^db,ixcmax^db\}
1808 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1809 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1810 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1811 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1812 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1816 do ix1=ixcmin1,ixcmax1
1817 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)
1823 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1826 {
do ix^db=ixamin^db,ixamax^db\}
1827 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1828 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1830 else if(idims==2)
then
1831 {
do ix^db=ixamin^db,ixamax^db\}
1832 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1833 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1836 {
do ix^db=ixamin^db,ixamax^db\}
1837 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1838 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1844 {
do ix^db=ixamin^db,ixamax^db\}
1845 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1848 {
do ix^db=ixamin^db,ixamax^db\}
1849 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1854 do ix1=ixamin1,ixamax1
1855 qvec(ix1,idims)=gradt(ix1,idims)
1858 if(fl%tc_saturate)
then
1861 ixb^l=ixa^l+kr(idims,^d);
1862 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1863 {
do ix^db=ixamin^db,ixamax^db\}
1864 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1865 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)