433 integer,
intent(in) :: ixI^L, ixO^L
434 double precision,
intent(in) :: x(ixI^S,1:ndim)
435 double precision,
intent(in) :: w(ixI^S,1:nw)
437 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S),ciso2(ixI^S)
438 double precision,
intent(in) :: alpha
439 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
442 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
443 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
444 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
445 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
451 if(
allocated(iw_mag))
then
453 {
do ix^db=ixmin^db,ixmax^db\}
454 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
456 if(blocal(1)/=0.d0)
then
457 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
461 if(blocal(2)/=0.d0)
then
462 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
468 if(blocal(1)/=0.d0)
then
469 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
473 if(blocal(2)/=0.d0)
then
474 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
478 if(blocal(3)/=0.d0)
then
479 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
486 {
do ix^db=ixmin^db,ixmax^db\}
488 if(w(ix^d,iw_mag(1))/=0.d0)
then
489 mf(ix^d,1)=sign(1.d0,w(ix^d,iw_mag(1)))/dsqrt(1.d0+(^ce&(w(ix^d,iw_mag(^ce))/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+(^cf&(w(ix^d,iw_mag(^cf))/w(ix^d,iw_mag(2)))**2+))
500 if(w(ix^d,iw_mag(1))/=0.d0)
then
501 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+&
502 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
506 if(w(ix^d,iw_mag(2))/=0.d0)
then
507 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+&
508 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
512 if(w(ix^d,iw_mag(3))/=0.d0)
then
513 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+&
514 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
522 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
525 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
529 {
do ix^db=ixcmin^db,ixcmax^db\}
530 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
531 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
532 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
533 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
539 {
do ix^db=ixcmin^db,ixcmax^db\}
540 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
541 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
548 ixbmax^d=ixmax^d-kr(idims,^d);
549 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
551 if(fl%tc_constant)
then
552 if(fl%tc_perpendicular)
then
553 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
554 ke(ixc^s)=fl%tc_k_perp
556 ka(ixc^s)=fl%tc_k_para
561 {
do ix^db=ixmin^db,ixmax^db\}
562 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
563 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
565 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
569 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
573 {
do ix^db=ixcmin^db,ixcmax^db\}
574 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
575 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
576 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
577 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
581 {
do ix^db=ixcmin^db,ixcmax^db\}
582 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
583 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
587 if(fl%tc_perpendicular)
then
589 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)
591 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
594 {
do ix^db=ixcmin^db,ixcmax^db\}
595 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
596 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
597 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
598 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
599 if(ke(ix^d)<ka(ix^d))
then
600 ka(ix^d)=ka(ix^d)-ke(ix^d)
608 {
do ix^db=ixcmin^db,ixcmax^db\}
609 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
610 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
611 if(ke(ix^d)<ka(ix^d))
then
612 ka(ix^d)=ka(ix^d)-ke(ix^d)
623 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
626 {
do ix^db=ixamin^db,ixamax^db\}
628 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
629 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
630 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
631 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
633 if(fl%tc_perpendicular) &
634 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
635 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
637 else if(idims==2)
then
638 {
do ix^db=ixamin^db,ixamax^db\}
639 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
640 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
641 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
642 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
643 if(fl%tc_perpendicular) &
644 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
645 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
648 {
do ix^db=ixamin^db,ixamax^db\}
649 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
650 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
651 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
652 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
653 if(fl%tc_perpendicular) &
654 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
655 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
661 {
do ix^db=ixamin^db,ixamax^db\}
662 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
663 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
664 if(fl%tc_perpendicular) &
665 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
668 {
do ix^db=ixamin^db,ixamax^db\}
669 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
670 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
671 if(fl%tc_perpendicular) &
672 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
680 {
do ix^db=ixcmin^db,ixcmax^db\}
681 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
682 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
684 else if(idims==2)
then
685 {
do ix^db=ixcmin^db,ixcmax^db\}
686 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
687 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
690 {
do ix^db=ixcmin^db,ixcmax^db\}
691 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
692 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
698 {
do ix^db=ixcmin^db,ixcmax^db\}
699 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
702 {
do ix^db=ixcmin^db,ixcmax^db\}
703 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
710 {
do ix^db=ixamin^db,ixamax^db\}
711 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
712 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
713 if(qdd(ix^d)<minq)
then
715 else if(qdd(ix^d)>maxq)
then
720 if(qdd(ix1,ix2-1,ix3)<minq)
then
722 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
725 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
727 if(qdd(ix1,ix2,ix3-1)<minq)
then
729 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
732 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
734 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
736 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
739 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
741 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)&
742 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
743 if(fl%tc_perpendicular) &
744 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))
746 else if(idims==2)
then
747 {
do ix^db=ixamin^db,ixamax^db\}
748 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
749 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
750 if(qdd(ix^d)<minq)
then
752 else if(qdd(ix^d)>maxq)
then
757 if(qdd(ix1-1,ix2,ix3)<minq)
then
759 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
762 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
764 if(qdd(ix1,ix2,ix3-1)<minq)
then
766 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
769 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
771 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
773 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
776 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
778 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)&
779 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
780 if(fl%tc_perpendicular) &
781 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))
784 {
do ix^db=ixamin^db,ixamax^db\}
785 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
786 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
787 if(qdd(ix^d)<minq)
then
789 else if(qdd(ix^d)>maxq)
then
794 if(qdd(ix1-1,ix2,ix3)<minq)
then
796 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
799 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
801 if(qdd(ix1,ix2-1,ix3)<minq)
then
803 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
806 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
808 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
810 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
813 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
815 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)&
816 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
817 if(fl%tc_perpendicular) &
818 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))
824 {
do ix^db=ixamin^db,ixamax^db\}
825 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
826 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
827 if(qdd(ix^d)<minq)
then
829 else if(qdd(ix^d)>maxq)
then
834 if(qdd(ix1,ix2-1)<minq)
then
836 else if(qdd(ix1,ix2-1)>maxq)
then
839 qd(ix^d,2)=qdd(ix1,ix2-1)
841 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))
842 if(fl%tc_perpendicular) &
843 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
846 {
do ix^db=ixamin^db,ixamax^db\}
847 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
848 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
849 if(qdd(ix^d)<minq)
then
851 else if(qdd(ix^d)>maxq)
then
856 if(qdd(ix1-1,ix2)<minq)
then
858 else if(qdd(ix1-1,ix2)>maxq)
then
861 qd(ix^d,2)=qdd(ix1-1,ix2)
863 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))
864 if(fl%tc_perpendicular) &
865 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
870 ixb^l=ixa^l+kr(idims,^d);
871 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
874 ixbmax^d=ixamax^d+kr(idims,^d);
876 if(idir==idims) cycle
877 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
878 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
879 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
881 if(fl%tc_saturate)
then
884 ixb^l=ixa^l+kr(idims,^d);
885 qdd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(ciso2(ixa^s)+ciso2(ixb^s)))**3*dabs(bnorm(ixa^s))
886 {
do ix^db=ixamin^db,ixamax^db\}
887 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
888 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
896 integer,
intent(in) :: ixI^L, ixO^L
897 double precision,
intent(in) :: x(ixI^S,1:ndim)
898 double precision,
intent(in) :: w(ixI^S,1:nw)
900 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S),ciso2(ixI^S)
901 double precision,
intent(in) :: alpha
902 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
905 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
906 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
907 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
908 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
914 if(
allocated(iw_mag))
then
916 {
do ix^db=ixmin^db,ixmax^db\}
917 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
919 if(blocal(1)/=0.d0)
then
920 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
924 if(blocal(2)/=0.d0)
then
925 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
931 if(blocal(1)/=0.d0)
then
932 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
936 if(blocal(2)/=0.d0)
then
937 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
941 if(blocal(3)/=0.d0)
then
942 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
949 {
do ix^db=ixmin^db,ixmax^db\}
951 if(w(ix^d,iw_mag(1))/=0.d0)
then
952 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+))
956 if(w(ix^d,iw_mag(2))/=0.d0)
then
957 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+))
963 if(w(ix^d,iw_mag(1))/=0.d0)
then
964 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+&
965 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
969 if(w(ix^d,iw_mag(2))/=0.d0)
then
970 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+&
971 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
975 if(w(ix^d,iw_mag(3))/=0.d0)
then
976 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+&
977 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
985 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
988 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
992 {
do ix^db=ixcmin^db,ixcmax^db\}
993 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)&
994 +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)&
995 +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)&
996 +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))&
997 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
998 +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))
1004 {
do ix^db=ixcmin^db,ixcmax^db\}
1005 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
1006 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
1007 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1014 ixbmax^d=ixmax^d-kr(idims,^d);
1015 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
1017 if(fl%tc_constant)
then
1018 if(fl%tc_perpendicular)
then
1019 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
1020 ke(ixc^s)=fl%tc_k_perp
1022 ka(ixc^s)=fl%tc_k_para
1027 {
do ix^db=ixmin^db,ixmax^db\}
1028 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1029 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1031 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1035 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1039 {
do ix^db=ixcmin^db,ixcmax^db\}
1040 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1041 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1042 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1043 +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))&
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))
1049 {
do ix^db=ixcmin^db,ixcmax^db\}
1050 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1051 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1052 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1056 if(fl%tc_perpendicular)
then
1058 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)
1060 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
1063 {
do ix^db=ixcmin^db,ixcmax^db\}
1064 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1065 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1066 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1067 +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))&
1068 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1069 +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))
1070 if(ke(ix^d)<ka(ix^d))
then
1071 ka(ix^d)=ka(ix^d)-ke(ix^d)
1079 {
do ix^db=ixcmin^db,ixcmax^db\}
1080 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1081 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1082 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1083 if(ke(ix^d)<ka(ix^d))
then
1084 ka(ix^d)=ka(ix^d)-ke(ix^d)
1095 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1098 {
do ix^db=ixamin^db,ixamax^db\}
1100 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1101 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1102 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1103 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1105 if(fl%tc_perpendicular) &
1106 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1107 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1109 else if(idims==2)
then
1110 {
do ix^db=ixamin^db,ixamax^db\}
1111 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1112 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1113 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1114 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1115 if(fl%tc_perpendicular) &
1116 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1117 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1120 {
do ix^db=ixamin^db,ixamax^db\}
1121 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1122 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1123 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1124 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1125 if(fl%tc_perpendicular) &
1126 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1127 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1133 {
do ix^db=ixamin^db,ixamax^db\}
1134 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1135 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1136 if(fl%tc_perpendicular) &
1137 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1140 {
do ix^db=ixamin^db,ixamax^db\}
1141 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1142 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1143 if(fl%tc_perpendicular) &
1144 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1152 {
do ix^db=ixcmin^db,ixcmax^db\}
1153 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1154 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1155 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1156 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1157 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1158 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1160 else if(idims==2)
then
1161 {
do ix^db=ixcmin^db,ixcmax^db\}
1162 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1163 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1164 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1165 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1166 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1167 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1170 {
do ix^db=ixcmin^db,ixcmax^db\}
1171 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1172 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1173 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1174 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1175 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1176 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1182 {
do ix^db=ixcmin^db,ixcmax^db\}
1183 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1184 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1185 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1188 {
do ix^db=ixcmin^db,ixcmax^db\}
1189 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1190 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1191 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2)+smalldouble)
1198 {
do ix^db=ixamin^db,ixamax^db\}
1199 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1200 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1201 if(qdd(ix^d)<minq)
then
1203 else if(qdd(ix^d)>maxq)
then
1206 qd(ix^d,1)=qdd(ix^d)
1208 if(qdd(ix1,ix2-1,ix3)<minq)
then
1210 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1213 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1215 if(qdd(ix1,ix2,ix3-1)<minq)
then
1217 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1220 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1222 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1224 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1227 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1229 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)&
1230 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1231 if(fl%tc_perpendicular) &
1232 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))
1234 else if(idims==2)
then
1235 {
do ix^db=ixamin^db,ixamax^db\}
1236 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1237 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1238 if(qdd(ix^d)<minq)
then
1240 else if(qdd(ix^d)>maxq)
then
1243 qd(ix^d,1)=qdd(ix^d)
1245 if(qdd(ix1-1,ix2,ix3)<minq)
then
1247 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1250 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1252 if(qdd(ix1,ix2,ix3-1)<minq)
then
1254 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1257 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1259 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1261 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1264 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1266 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)&
1267 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1268 if(fl%tc_perpendicular) &
1269 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))
1272 {
do ix^db=ixamin^db,ixamax^db\}
1273 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1274 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1275 if(qdd(ix^d)<minq)
then
1277 else if(qdd(ix^d)>maxq)
then
1280 qd(ix^d,1)=qdd(ix^d)
1282 if(qdd(ix1-1,ix2,ix3)<minq)
then
1284 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1287 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1289 if(qdd(ix1,ix2-1,ix3)<minq)
then
1291 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1294 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1296 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1298 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1301 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1303 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)&
1304 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1305 if(fl%tc_perpendicular) &
1306 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))
1312 {
do ix^db=ixamin^db,ixamax^db\}
1313 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1314 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1315 if(qdd(ix^d)<minq)
then
1317 else if(qdd(ix^d)>maxq)
then
1320 qd(ix^d,1)=qdd(ix^d)
1322 if(qdd(ix1,ix2-1)<minq)
then
1324 else if(qdd(ix1,ix2-1)>maxq)
then
1327 qd(ix^d,2)=qdd(ix1,ix2-1)
1329 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))
1330 if(fl%tc_perpendicular) &
1331 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1334 {
do ix^db=ixamin^db,ixamax^db\}
1335 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1336 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1337 if(qdd(ix^d)<minq)
then
1339 else if(qdd(ix^d)>maxq)
then
1342 qd(ix^d,1)=qdd(ix^d)
1344 if(qdd(ix1-1,ix2)<minq)
then
1346 else if(qdd(ix1-1,ix2)>maxq)
then
1349 qd(ix^d,2)=qdd(ix1-1,ix2)
1351 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))
1352 if(fl%tc_perpendicular) &
1353 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1358 ixb^l=ixa^l+kr(idims,^d);
1359 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1362 ixbmax^d=ixamax^d+kr(idims,^d);
1364 if(idir==idims) cycle
1365 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1366 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1367 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1369 if(fl%tc_saturate)
then
1372 ixb^l=ixa^l+kr(idims,^d);
1373 qdd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(ciso2(ixa^s)+ciso2(ixb^s)))**3*dabs(bnorm(ixa^s))
1374 {
do ix^db=ixamin^db,ixamax^db\}
1375 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1376 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1683 integer,
intent(in) :: ixI^L, ixO^L
1684 double precision,
intent(in) :: x(ixI^S,1:ndim)
1685 double precision,
intent(in) :: w(ixI^S,1:nw)
1687 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S),ciso2(ixI^S)
1688 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1689 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1690 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1694 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1700 ixbmax^d=ixmax^d-
kr(idims,^d);
1701 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1704 {
do ix^db=ixcmin^db,ixcmax^db\}
1705 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1706 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1708 else if(idims==2)
then
1709 {
do ix^db=ixcmin^db,ixcmax^db\}
1710 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1711 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1714 {
do ix^db=ixcmin^db,ixcmax^db\}
1715 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1716 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1722 {
do ix^db=ixcmin^db,ixcmax^db\}
1723 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1726 {
do ix^db=ixcmin^db,ixcmax^db\}
1727 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1732 do ix1=ixcmin1,ixcmax1
1733 qvec(ix1,idims)=ke(ix1)
1738 if(fl%tc_constant)
then
1739 qd(ix^s)=fl%tc_k_para
1742 {
do ix^db=ixmin^db,ixmax^db\}
1743 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1744 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1746 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1750 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1756 {
do ix^db=ixcmin^db,ixcmax^db\}
1757 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1758 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1759 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1760 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1761 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1762 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1763 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1767 {
do ix^db=ixcmin^db,ixcmax^db\}
1768 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+1))
1769 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1770 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1774 do ix1=ixcmin1,ixcmax1
1775 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1781 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1784 {
do ix^db=ixamin^db,ixamax^db\}
1785 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1786 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1788 else if(idims==2)
then
1789 {
do ix^db=ixamin^db,ixamax^db\}
1790 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1791 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1794 {
do ix^db=ixamin^db,ixamax^db\}
1795 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1796 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1802 {
do ix^db=ixamin^db,ixamax^db\}
1803 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1806 {
do ix^db=ixamin^db,ixamax^db\}
1807 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1812 do ix1=ixamin1,ixamax1
1813 qvec(ix1,idims)=gradt(ix1,idims)
1816 if(fl%tc_saturate)
then
1819 ixb^l=ixa^l+kr(idims,^d);
1820 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(ciso2(ixa^s)+ciso2(ixb^s)))**3
1821 {
do ix^db=ixamin^db,ixamax^db\}
1822 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1823 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1831 integer,
intent(in) :: ixI^L, ixO^L
1832 double precision,
intent(in) :: x(ixI^S,1:ndim)
1833 double precision,
intent(in) :: w(ixI^S,1:nw)
1835 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S),ciso2(ixI^S)
1836 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1837 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1838 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1842 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1848 ixbmax^d=ixmax^d-
kr(idims,^d);
1849 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1852 {
do ix^db=ixcmin^db,ixcmax^db\}
1853 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1854 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1855 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1856 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1857 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1858 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1860 else if(idims==2)
then
1861 {
do ix^db=ixcmin^db,ixcmax^db\}
1862 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1863 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1864 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1865 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1866 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1867 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1871 {
do ix^db=ixcmin^db,ixcmax^db\}
1872 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1873 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1874 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1875 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1876 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1877 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1883 {
do ix^db=ixcmin^db,ixcmax^db\}
1884 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1885 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1888 {
do ix^db=ixcmin^db,ixcmax^db\}
1889 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1890 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1895 do ix1=ixcmin1,ixcmax1
1896 qvec(ix1,idims)=ke(ix1)
1901 if(fl%tc_constant)
then
1902 qd(ix^s)=fl%tc_k_para
1905 {
do ix^db=ixmin^db,ixmax^db\}
1906 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1907 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1909 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1913 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1919 {
do ix^db=ixcmin^db,ixcmax^db\}
1920 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1921 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1922 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1923 +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))&
1924 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1925 +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))
1926 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1927 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1928 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1932 {
do ix^db=ixcmin^db,ixcmax^db\}
1933 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1934 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1935 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1936 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1937 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1941 do ix1=ixcmin1,ixcmax1
1942 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)
1948 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1951 {
do ix^db=ixamin^db,ixamax^db\}
1952 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1953 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1955 else if(idims==2)
then
1956 {
do ix^db=ixamin^db,ixamax^db\}
1957 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1958 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1961 {
do ix^db=ixamin^db,ixamax^db\}
1962 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1963 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1969 {
do ix^db=ixamin^db,ixamax^db\}
1970 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1973 {
do ix^db=ixamin^db,ixamax^db\}
1974 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1979 do ix1=ixamin1,ixamax1
1980 qvec(ix1,idims)=gradt(ix1,idims)
1983 if(fl%tc_saturate)
then
1986 ixb^l=ixa^l+kr(idims,^d);
1987 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(ciso2(ixa^s)+ciso2(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)