425 integer,
intent(in) :: ixI^L, ixO^L
426 double precision,
intent(in) :: x(ixI^S,1:ndim)
427 double precision,
intent(in) :: w(ixI^S,1:nw)
429 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
430 double precision,
intent(in) :: alpha
431 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
434 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
435 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
436 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndim)
437 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
443 if(
allocated(iw_mag))
then
445 {
do ix^db=ixmin^db,ixmax^db\}
446 ^d&blocal(^d)=w({ix^d},iw_mag(^d))+
block%B0({ix^d},^d,0)\
448 if(blocal(1)/=0.d0)
then
449 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2)
453 if(blocal(2)/=0.d0)
then
454 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2)
460 if(blocal(1)/=0.d0)
then
461 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
465 if(blocal(2)/=0.d0)
then
466 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
470 if(blocal(3)/=0.d0)
then
471 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
478 {
do ix^db=ixmin^db,ixmax^db\}
480 if(w(ix^d,iw_mag(1))/=0.d0)
then
481 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)
485 if(w(ix^d,iw_mag(2))/=0.d0)
then
486 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)
492 if(w(ix^d,iw_mag(1))/=0.d0)
then
493 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+&
494 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
498 if(w(ix^d,iw_mag(2))/=0.d0)
then
499 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+&
500 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
504 if(w(ix^d,iw_mag(3))/=0.d0)
then
505 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+&
506 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
514 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
517 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
521 {
do ix^db=ixcmin^db,ixcmax^db\}
522 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
523 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
524 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
525 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
531 {
do ix^db=ixcmin^db,ixcmax^db\}
532 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
533 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
540 ixbmax^d=ixmax^d-kr(idims,^d);
541 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
543 if(fl%tc_constant)
then
544 if(fl%tc_perpendicular)
then
545 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
546 ke(ixc^s)=fl%tc_k_perp
548 ka(ixc^s)=fl%tc_k_para
553 {
do ix^db=ixmin^db,ixmax^db\}
554 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
555 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
557 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
561 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
565 {
do ix^db=ixcmin^db,ixcmax^db\}
566 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
567 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
568 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
569 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
573 {
do ix^db=ixcmin^db,ixcmax^db\}
574 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
575 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
579 if(fl%tc_perpendicular)
then
581 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&(w(ix^s,iw_mag(^d))+block%B0(ix^s,^d,0))**2+)*dsqrt(te(ix^s))+smalldouble)
583 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&w(ix^s,iw_mag(^d))**2+)*dsqrt(te(ix^s))+smalldouble)
586 {
do ix^db=ixcmin^db,ixcmax^db\}
587 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
588 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
589 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
590 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
591 if(ke(ix^d)<ka(ix^d))
then
592 ka(ix^d)=ka(ix^d)-ke(ix^d)
600 {
do ix^db=ixcmin^db,ixcmax^db\}
601 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
602 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
603 if(ke(ix^d)<ka(ix^d))
then
604 ka(ix^d)=ka(ix^d)-ke(ix^d)
613 if(fl%tc_slope_limiter==0)
then
619 if({ ix^d==0 .and. ^d==idims | .or.})
then
620 ixbmin^d=ixcmin^d+ix^d;
621 ixbmax^d=ixcmax^d+ix^d;
622 qdd(ixc^s)=qdd(ixc^s)+gradt(ixb^s,idims)
626 qvec(ixc^s,idims)=qdd(ixc^s)*0.5d0**(ndim-1)
629 qdd(ixc^s)=sum(qvec(ixc^s,1:ndim)*bc(ixc^s,1:ndim),dim=ndim+1)
632 gradt(ixc^s,idims)=ka(ixc^s)*bc(ixc^s,idims)*qdd(ixc^s)
633 if(fl%tc_perpendicular) gradt(ixc^s,idims)=gradt(ixc^s,idims)+ke(ixc^s)*qvec(ixc^s,idims)
638 ixb^l=ixo^l-kr(idims,^d);
639 ixamax^d=ixomax^d; ixamin^d=ixbmin^d;
641 if({ ix^d==0 .and. ^d==idims | .or.})
then
642 ixbmin^d=ixamin^d-ix^d;
643 ixbmax^d=ixamax^d-ix^d;
644 qvec(ixa^s,idims)=qvec(ixa^s,idims)+gradt(ixb^s,idims)
647 qvec(ixa^s,idims)=qvec(ixa^s,idims)*0.5d0**(ndim-1)
648 if(fl%tc_saturate)
then
653 if({ ix^d==0 .and. ^d==idims | .or.})
then
654 ixbmin^d=ixamin^d-ix^d;
655 ixbmax^d=ixamax^d-ix^d;
656 bcf(ixa^s,idims)=bcf(ixa^s,idims)+bc(ixb^s,idims)
660 bcf(ixa^s,idims)=bcf(ixa^s,idims)*0.5d0**(ndim-1)
661 ixb^l=ixa^l+kr(idims,^d);
662 qdd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bcf(ixa^s,idims))
663 {
do ix^db=ixamin^db,ixamax^db\}
664 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
665 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
673 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
676 {
do ix^db=ixamin^db,ixamax^db\}
678 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
679 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
680 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
681 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
683 if(fl%tc_perpendicular) &
684 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
685 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
687 else if(idims==2)
then
688 {
do ix^db=ixamin^db,ixamax^db\}
689 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
690 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
691 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
692 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
693 if(fl%tc_perpendicular) &
694 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
695 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
698 {
do ix^db=ixamin^db,ixamax^db\}
699 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
700 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
701 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
702 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
703 if(fl%tc_perpendicular) &
704 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
705 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
711 {
do ix^db=ixamin^db,ixamax^db\}
712 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
713 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
714 if(fl%tc_perpendicular) &
715 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
718 {
do ix^db=ixamin^db,ixamax^db\}
719 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
720 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
721 if(fl%tc_perpendicular) &
722 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
730 {
do ix^db=ixcmin^db,ixcmax^db\}
731 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
732 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
734 else if(idims==2)
then
735 {
do ix^db=ixcmin^db,ixcmax^db\}
736 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
737 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
740 {
do ix^db=ixcmin^db,ixcmax^db\}
741 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
742 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
748 {
do ix^db=ixcmin^db,ixcmax^db\}
749 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
752 {
do ix^db=ixcmin^db,ixcmax^db\}
753 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
760 {
do ix^db=ixamin^db,ixamax^db\}
761 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
762 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
763 if(qdd(ix^d)<minq)
then
765 else if(qdd(ix^d)>maxq)
then
770 if(qdd(ix1,ix2-1,ix3)<minq)
then
772 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
775 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
777 if(qdd(ix1,ix2,ix3-1)<minq)
then
779 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
782 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
784 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
786 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
789 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
791 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)&
792 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
793 if(fl%tc_perpendicular) &
794 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))
796 else if(idims==2)
then
797 {
do ix^db=ixamin^db,ixamax^db\}
798 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
799 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
800 if(qdd(ix^d)<minq)
then
802 else if(qdd(ix^d)>maxq)
then
807 if(qdd(ix1-1,ix2,ix3)<minq)
then
809 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
812 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
814 if(qdd(ix1,ix2,ix3-1)<minq)
then
816 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
819 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
821 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
823 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
826 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
828 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)&
829 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
830 if(fl%tc_perpendicular) &
831 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))
834 {
do ix^db=ixamin^db,ixamax^db\}
835 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
836 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
837 if(qdd(ix^d)<minq)
then
839 else if(qdd(ix^d)>maxq)
then
844 if(qdd(ix1-1,ix2,ix3)<minq)
then
846 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
849 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
851 if(qdd(ix1,ix2-1,ix3)<minq)
then
853 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
856 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
858 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
860 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
863 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
865 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)&
866 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
867 if(fl%tc_perpendicular) &
868 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))
874 {
do ix^db=ixamin^db,ixamax^db\}
875 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
876 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
877 if(qdd(ix^d)<minq)
then
879 else if(qdd(ix^d)>maxq)
then
884 if(qdd(ix1,ix2-1)<minq)
then
886 else if(qdd(ix1,ix2-1)>maxq)
then
889 qd(ix^d,2)=qdd(ix1,ix2-1)
891 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))
892 if(fl%tc_perpendicular) &
893 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
896 {
do ix^db=ixamin^db,ixamax^db\}
897 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
898 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
899 if(qdd(ix^d)<minq)
then
901 else if(qdd(ix^d)>maxq)
then
906 if(qdd(ix1-1,ix2)<minq)
then
908 else if(qdd(ix1-1,ix2)>maxq)
then
911 qd(ix^d,2)=qdd(ix1-1,ix2)
913 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))
914 if(fl%tc_perpendicular) &
915 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
920 ixb^l=ixa^l+kr(idims,^d);
921 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
924 ixbmax^d=ixamax^d+kr(idims,^d);
926 if(idir==idims) cycle
927 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
928 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
929 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
931 if(fl%tc_saturate)
then
934 ixb^l=ixa^l+kr(idims,^d);
935 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))
936 {
do ix^db=ixamin^db,ixamax^db\}
937 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
938 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
948 integer,
intent(in) :: ixI^L, ixO^L
949 double precision,
intent(in) :: x(ixI^S,1:ndim)
950 double precision,
intent(in) :: w(ixI^S,1:nw)
952 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
953 double precision,
intent(in) :: alpha
954 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
957 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
958 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
959 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndim)
960 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
966 if(
allocated(iw_mag))
then
968 {
do ix^db=ixmin^db,ixmax^db\}
969 ^d&blocal(^d)=w({ix^d},iw_mag(^d))+
block%B0({ix^d},^d,0)\
971 if(blocal(1)/=0.d0)
then
972 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2)
976 if(blocal(2)/=0.d0)
then
977 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2)
983 if(blocal(1)/=0.d0)
then
984 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
988 if(blocal(2)/=0.d0)
then
989 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
993 if(blocal(3)/=0.d0)
then
994 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
1001 {
do ix^db=ixmin^db,ixmax^db\}
1003 if(w(ix^d,iw_mag(1))/=0.d0)
then
1004 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)
1008 if(w(ix^d,iw_mag(2))/=0.d0)
then
1009 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)
1015 if(w(ix^d,iw_mag(1))/=0.d0)
then
1016 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+&
1017 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
1021 if(w(ix^d,iw_mag(2))/=0.d0)
then
1022 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+&
1023 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
1027 if(w(ix^d,iw_mag(3))/=0.d0)
then
1028 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+&
1029 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
1037 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
1040 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1044 {
do ix^db=ixcmin^db,ixcmax^db\}
1045 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)&
1046 +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)&
1047 +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)&
1048 +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))&
1049 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1050 +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))
1056 {
do ix^db=ixcmin^db,ixcmax^db\}
1057 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
1058 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
1059 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1066 ixbmax^d=ixmax^d-kr(idims,^d);
1067 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
1069 if(fl%tc_constant)
then
1070 if(fl%tc_perpendicular)
then
1071 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
1072 ke(ixc^s)=fl%tc_k_perp
1074 ka(ixc^s)=fl%tc_k_para
1079 {
do ix^db=ixmin^db,ixmax^db\}
1080 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1081 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1083 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1087 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1091 {
do ix^db=ixcmin^db,ixcmax^db\}
1092 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1093 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1094 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1095 +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))&
1096 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1097 +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))
1101 {
do ix^db=ixcmin^db,ixcmax^db\}
1102 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1103 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1104 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1108 if(fl%tc_perpendicular)
then
1110 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&(w(ix^s,iw_mag(^d))+block%B0(ix^s,^d,0))**2+)*dsqrt(te(ix^s))+smalldouble)
1112 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^d&w(ix^s,iw_mag(^d))**2+)*dsqrt(te(ix^s))+smalldouble)
1115 {
do ix^db=ixcmin^db,ixcmax^db\}
1116 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1117 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1118 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1119 +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))&
1120 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1121 +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))
1122 if(ke(ix^d)<ka(ix^d))
then
1123 ka(ix^d)=ka(ix^d)-ke(ix^d)
1131 {
do ix^db=ixcmin^db,ixcmax^db\}
1132 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1133 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1134 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1135 if(ke(ix^d)<ka(ix^d))
then
1136 ka(ix^d)=ka(ix^d)-ke(ix^d)
1145 if(fl%tc_slope_limiter==0)
then
1151 if({ ix^d==0 .and. ^d==idims | .or.})
then
1152 ixbmin^d=ixcmin^d+ix^d;
1153 ixbmax^d=ixcmax^d+ix^d;
1154 qdd(ixc^s)=qdd(ixc^s)+gradt(ixb^s,idims)
1158 qvec(ixc^s,idims)=qdd(ixc^s)*0.5d0**(ndim-1)
1161 qdd(ixc^s)=sum(qvec(ixc^s,1:ndim)*bc(ixc^s,1:ndim),dim=ndim+1)
1164 gradt(ixc^s,idims)=ka(ixc^s)*bc(ixc^s,idims)*qdd(ixc^s)
1165 if(fl%tc_perpendicular) gradt(ixc^s,idims)=gradt(ixc^s,idims)+ke(ixc^s)*qvec(ixc^s,idims)
1170 ixb^l=ixo^l-kr(idims,^d);
1171 ixamax^d=ixomax^d; ixamin^d=ixbmin^d;
1173 if({ ix^d==0 .and. ^d==idims | .or.})
then
1174 ixbmin^d=ixamin^d-ix^d;
1175 ixbmax^d=ixamax^d-ix^d;
1176 qvec(ixa^s,idims)=qvec(ixa^s,idims)+gradt(ixb^s,idims)
1179 qvec(ixa^s,idims)=qvec(ixa^s,idims)*0.5d0**(ndim-1)
1180 if(fl%tc_saturate)
then
1185 if({ ix^d==0 .and. ^d==idims | .or.})
then
1186 ixbmin^d=ixamin^d-ix^d;
1187 ixbmax^d=ixamax^d-ix^d;
1188 bcf(ixa^s,idims)=bcf(ixa^s,idims)+bc(ixb^s,idims)
1192 bcf(ixa^s,idims)=bcf(ixa^s,idims)*0.5d0**(ndim-1)
1193 ixb^l=ixa^l+kr(idims,^d);
1194 qdd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3*dabs(bcf(ixa^s,idims))
1195 {
do ix^db=ixamin^db,ixamax^db\}
1196 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1197 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1205 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1208 {
do ix^db=ixamin^db,ixamax^db\}
1210 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1211 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1212 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1213 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1215 if(fl%tc_perpendicular) &
1216 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1217 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1219 else if(idims==2)
then
1220 {
do ix^db=ixamin^db,ixamax^db\}
1221 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1222 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1223 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1224 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1225 if(fl%tc_perpendicular) &
1226 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1227 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1230 {
do ix^db=ixamin^db,ixamax^db\}
1231 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1232 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1233 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1234 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1235 if(fl%tc_perpendicular) &
1236 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1237 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1243 {
do ix^db=ixamin^db,ixamax^db\}
1244 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1245 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1246 if(fl%tc_perpendicular) &
1247 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1250 {
do ix^db=ixamin^db,ixamax^db\}
1251 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1252 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1253 if(fl%tc_perpendicular) &
1254 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1262 {
do ix^db=ixcmin^db,ixcmax^db\}
1263 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1264 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1265 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1266 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1267 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1268 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1))
1270 else if(idims==2)
then
1271 {
do ix^db=ixcmin^db,ixcmax^db\}
1272 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1273 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1274 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1275 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1276 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1277 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1280 {
do ix^db=ixcmin^db,ixcmax^db\}
1281 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1282 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1283 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1284 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1285 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1286 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1292 {
do ix^db=ixcmin^db,ixcmax^db\}
1293 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1294 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1295 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1298 {
do ix^db=ixcmin^db,ixcmax^db\}
1299 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1300 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1301 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2)+1.d-300)
1308 {
do ix^db=ixamin^db,ixamax^db\}
1309 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1310 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1311 if(qdd(ix^d)<minq)
then
1313 else if(qdd(ix^d)>maxq)
then
1316 qd(ix^d,1)=qdd(ix^d)
1318 if(qdd(ix1,ix2-1,ix3)<minq)
then
1320 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1323 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1325 if(qdd(ix1,ix2,ix3-1)<minq)
then
1327 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1330 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1332 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1334 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1337 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1339 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)&
1340 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1341 if(fl%tc_perpendicular) &
1342 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))
1344 else if(idims==2)
then
1345 {
do ix^db=ixamin^db,ixamax^db\}
1346 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1347 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1348 if(qdd(ix^d)<minq)
then
1350 else if(qdd(ix^d)>maxq)
then
1353 qd(ix^d,1)=qdd(ix^d)
1355 if(qdd(ix1-1,ix2,ix3)<minq)
then
1357 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1360 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1362 if(qdd(ix1,ix2,ix3-1)<minq)
then
1364 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1367 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1369 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1371 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1374 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1376 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)&
1377 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1378 if(fl%tc_perpendicular) &
1379 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))
1382 {
do ix^db=ixamin^db,ixamax^db\}
1383 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1384 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1385 if(qdd(ix^d)<minq)
then
1387 else if(qdd(ix^d)>maxq)
then
1390 qd(ix^d,1)=qdd(ix^d)
1392 if(qdd(ix1-1,ix2,ix3)<minq)
then
1394 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1397 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1399 if(qdd(ix1,ix2-1,ix3)<minq)
then
1401 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1404 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1406 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1408 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1411 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1413 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)&
1414 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1415 if(fl%tc_perpendicular) &
1416 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))
1422 {
do ix^db=ixamin^db,ixamax^db\}
1423 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1424 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1425 if(qdd(ix^d)<minq)
then
1427 else if(qdd(ix^d)>maxq)
then
1430 qd(ix^d,1)=qdd(ix^d)
1432 if(qdd(ix1,ix2-1)<minq)
then
1434 else if(qdd(ix1,ix2-1)>maxq)
then
1437 qd(ix^d,2)=qdd(ix1,ix2-1)
1439 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))
1440 if(fl%tc_perpendicular) &
1441 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1444 {
do ix^db=ixamin^db,ixamax^db\}
1445 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1446 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1447 if(qdd(ix^d)<minq)
then
1449 else if(qdd(ix^d)>maxq)
then
1452 qd(ix^d,1)=qdd(ix^d)
1454 if(qdd(ix1-1,ix2)<minq)
then
1456 else if(qdd(ix1-1,ix2)>maxq)
then
1459 qd(ix^d,2)=qdd(ix1-1,ix2)
1461 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))
1462 if(fl%tc_perpendicular) &
1463 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1468 ixb^l=ixa^l+kr(idims,^d);
1469 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1472 ixbmax^d=ixamax^d+kr(idims,^d);
1474 if(idir==idims) cycle
1475 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1476 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1477 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1479 if(fl%tc_saturate)
then
1482 ixb^l=ixa^l+kr(idims,^d);
1483 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))
1484 {
do ix^db=ixamin^db,ixamax^db\}
1485 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1486 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1675 integer,
intent(in) :: ixI^L, ixO^L
1676 double precision,
intent(in) :: x(ixI^S,1:ndim)
1677 double precision,
intent(in) :: w(ixI^S,1:nw)
1679 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1680 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1681 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1682 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1686 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1692 ixbmax^d=ixmax^d-
kr(idims,^d);
1693 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1696 {
do ix^db=ixcmin^db,ixcmax^db\}
1697 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1698 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1700 else if(idims==2)
then
1701 {
do ix^db=ixcmin^db,ixcmax^db\}
1702 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1703 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1706 {
do ix^db=ixcmin^db,ixcmax^db\}
1707 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1708 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1714 {
do ix^db=ixcmin^db,ixcmax^db\}
1715 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1718 {
do ix^db=ixcmin^db,ixcmax^db\}
1719 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1724 do ix1=ixcmin1,ixcmax1
1725 qvec(ix1,idims)=ke(ix1)
1730 if(fl%tc_constant)
then
1731 qd(ix^s)=fl%tc_k_para
1734 {
do ix^db=ixmin^db,ixmax^db\}
1735 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1736 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1738 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1742 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1748 {
do ix^db=ixcmin^db,ixcmax^db\}
1749 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1750 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1751 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1752 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1753 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1754 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1755 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1759 {
do ix^db=ixcmin^db,ixcmax^db\}
1760 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+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)
1766 do ix1=ixcmin1,ixcmax1
1767 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1773 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1776 {
do ix^db=ixamin^db,ixamax^db\}
1777 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1778 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1780 else if(idims==2)
then
1781 {
do ix^db=ixamin^db,ixamax^db\}
1782 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1783 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1786 {
do ix^db=ixamin^db,ixamax^db\}
1787 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1788 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1794 {
do ix^db=ixamin^db,ixamax^db\}
1795 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1798 {
do ix^db=ixamin^db,ixamax^db\}
1799 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1804 do ix1=ixamin1,ixamax1
1805 qvec(ix1,idims)=gradt(ix1,idims)
1808 if(fl%tc_saturate)
then
1811 ixb^l=ixa^l+kr(idims,^d);
1812 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1813 {
do ix^db=ixamin^db,ixamax^db\}
1814 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1815 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1825 integer,
intent(in) :: ixI^L, ixO^L
1826 double precision,
intent(in) :: x(ixI^S,1:ndim)
1827 double precision,
intent(in) :: w(ixI^S,1:nw)
1829 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1830 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1831 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1832 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1836 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1842 ixbmax^d=ixmax^d-
kr(idims,^d);
1843 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1846 {
do ix^db=ixcmin^db,ixcmax^db\}
1847 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1848 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1849 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1850 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1851 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1852 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1))
1854 else if(idims==2)
then
1855 {
do ix^db=ixcmin^db,ixcmax^db\}
1856 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1857 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1858 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1859 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1860 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1861 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+1.d-300)
1865 {
do ix^db=ixcmin^db,ixcmax^db\}
1866 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1867 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1868 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1869 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1870 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1871 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1877 {
do ix^db=ixcmin^db,ixcmax^db\}
1878 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1879 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1882 {
do ix^db=ixcmin^db,ixcmax^db\}
1883 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1884 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1889 do ix1=ixcmin1,ixcmax1
1890 qvec(ix1,idims)=ke(ix1)
1895 if(fl%tc_constant)
then
1896 qd(ix^s)=fl%tc_k_para
1899 {
do ix^db=ixmin^db,ixmax^db\}
1900 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1901 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1903 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1907 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1913 {
do ix^db=ixcmin^db,ixcmax^db\}
1914 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1915 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1916 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1917 +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))&
1918 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1919 +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))
1920 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1921 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1922 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1926 {
do ix^db=ixcmin^db,ixcmax^db\}
1927 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1928 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1929 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1930 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1931 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1935 do ix1=ixcmin1,ixcmax1
1936 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)
1942 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1945 {
do ix^db=ixamin^db,ixamax^db\}
1946 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1947 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1949 else if(idims==2)
then
1950 {
do ix^db=ixamin^db,ixamax^db\}
1951 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1952 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1955 {
do ix^db=ixamin^db,ixamax^db\}
1956 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1957 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1963 {
do ix^db=ixamin^db,ixamax^db\}
1964 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1967 {
do ix^db=ixamin^db,ixamax^db\}
1968 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1973 do ix1=ixamin1,ixamax1
1974 qvec(ix1,idims)=gradt(ix1,idims)
1977 if(fl%tc_saturate)
then
1980 ixb^l=ixa^l+kr(idims,^d);
1981 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1982 {
do ix^db=ixamin^db,ixamax^db\}
1983 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1984 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)