407 integer,
intent(in) :: ixI^L, ixO^L
408 double precision,
intent(in) :: x(ixI^S,1:ndim)
409 double precision,
intent(in) :: w(ixI^S,1:nw)
411 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
412 double precision,
intent(in) :: alpha
413 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
416 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
417 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
418 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
419 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
425 if(
allocated(iw_mag))
then
427 {
do ix^db=ixmin^db,ixmax^db\}
428 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
430 if(blocal(1)/=0.d0)
then
431 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
435 if(blocal(2)/=0.d0)
then
436 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
442 if(blocal(1)/=0.d0)
then
443 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
447 if(blocal(2)/=0.d0)
then
448 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
452 if(blocal(3)/=0.d0)
then
453 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
460 {
do ix^db=ixmin^db,ixmax^db\}
462 if(w(ix^d,iw_mag(1))/=0.d0)
then
463 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+))
467 if(w(ix^d,iw_mag(2))/=0.d0)
then
468 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+))
474 if(w(ix^d,iw_mag(1))/=0.d0)
then
475 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+&
476 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
480 if(w(ix^d,iw_mag(2))/=0.d0)
then
481 mf(ix^d,2)=sign(1.d0,w(ix^d,iw_mag(2)))/dsqrt(1.d0+(w(ix^d,iw_mag(1))/w(ix^d,iw_mag(2)))**2+&
482 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
486 if(w(ix^d,iw_mag(3))/=0.d0)
then
487 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+&
488 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
496 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
499 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
503 {
do ix^db=ixcmin^db,ixcmax^db\}
504 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
505 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
506 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
507 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
513 {
do ix^db=ixcmin^db,ixcmax^db\}
514 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
515 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
522 ixbmax^d=ixmax^d-kr(idims,^d);
523 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
525 if(fl%tc_constant)
then
526 if(fl%tc_perpendicular)
then
527 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
528 ke(ixc^s)=fl%tc_k_perp
530 ka(ixc^s)=fl%tc_k_para
535 {
do ix^db=ixmin^db,ixmax^db\}
536 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
537 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
539 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
543 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
547 {
do ix^db=ixcmin^db,ixcmax^db\}
548 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
549 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
550 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
551 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
555 {
do ix^db=ixcmin^db,ixcmax^db\}
556 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
557 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
561 if(fl%tc_perpendicular)
then
563 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)
565 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
568 {
do ix^db=ixcmin^db,ixcmax^db\}
569 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
570 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
571 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
572 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
573 if(ke(ix^d)<ka(ix^d))
then
574 ka(ix^d)=ka(ix^d)-ke(ix^d)
582 {
do ix^db=ixcmin^db,ixcmax^db\}
583 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
584 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
585 if(ke(ix^d)<ka(ix^d))
then
586 ka(ix^d)=ka(ix^d)-ke(ix^d)
597 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
600 {
do ix^db=ixamin^db,ixamax^db\}
602 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
603 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
604 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
605 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
607 if(fl%tc_perpendicular) &
608 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
609 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
611 else if(idims==2)
then
612 {
do ix^db=ixamin^db,ixamax^db\}
613 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
614 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
615 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
616 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
617 if(fl%tc_perpendicular) &
618 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
619 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
622 {
do ix^db=ixamin^db,ixamax^db\}
623 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
624 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
625 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
626 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
627 if(fl%tc_perpendicular) &
628 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
629 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
635 {
do ix^db=ixamin^db,ixamax^db\}
636 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
637 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
638 if(fl%tc_perpendicular) &
639 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
642 {
do ix^db=ixamin^db,ixamax^db\}
643 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
644 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
645 if(fl%tc_perpendicular) &
646 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
654 {
do ix^db=ixcmin^db,ixcmax^db\}
655 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
656 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
658 else if(idims==2)
then
659 {
do ix^db=ixcmin^db,ixcmax^db\}
660 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
661 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
664 {
do ix^db=ixcmin^db,ixcmax^db\}
665 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
666 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
672 {
do ix^db=ixcmin^db,ixcmax^db\}
673 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
676 {
do ix^db=ixcmin^db,ixcmax^db\}
677 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
684 {
do ix^db=ixamin^db,ixamax^db\}
685 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
686 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
687 if(qdd(ix^d)<minq)
then
689 else if(qdd(ix^d)>maxq)
then
694 if(qdd(ix1,ix2-1,ix3)<minq)
then
696 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
699 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
701 if(qdd(ix1,ix2,ix3-1)<minq)
then
703 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
706 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
708 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
710 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
713 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
715 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)&
716 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
717 if(fl%tc_perpendicular) &
718 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))
720 else if(idims==2)
then
721 {
do ix^db=ixamin^db,ixamax^db\}
722 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
723 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
724 if(qdd(ix^d)<minq)
then
726 else if(qdd(ix^d)>maxq)
then
731 if(qdd(ix1-1,ix2,ix3)<minq)
then
733 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
736 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
738 if(qdd(ix1,ix2,ix3-1)<minq)
then
740 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
743 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
745 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
747 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
750 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
752 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)&
753 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
754 if(fl%tc_perpendicular) &
755 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))
758 {
do ix^db=ixamin^db,ixamax^db\}
759 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
760 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
761 if(qdd(ix^d)<minq)
then
763 else if(qdd(ix^d)>maxq)
then
768 if(qdd(ix1-1,ix2,ix3)<minq)
then
770 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
773 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
775 if(qdd(ix1,ix2-1,ix3)<minq)
then
777 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
780 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
782 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
784 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
787 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
789 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)&
790 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
791 if(fl%tc_perpendicular) &
792 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))
798 {
do ix^db=ixamin^db,ixamax^db\}
799 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
800 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
801 if(qdd(ix^d)<minq)
then
803 else if(qdd(ix^d)>maxq)
then
808 if(qdd(ix1,ix2-1)<minq)
then
810 else if(qdd(ix1,ix2-1)>maxq)
then
813 qd(ix^d,2)=qdd(ix1,ix2-1)
815 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))
816 if(fl%tc_perpendicular) &
817 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
820 {
do ix^db=ixamin^db,ixamax^db\}
821 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
822 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
823 if(qdd(ix^d)<minq)
then
825 else if(qdd(ix^d)>maxq)
then
830 if(qdd(ix1-1,ix2)<minq)
then
832 else if(qdd(ix1-1,ix2)>maxq)
then
835 qd(ix^d,2)=qdd(ix1-1,ix2)
837 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))
838 if(fl%tc_perpendicular) &
839 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
844 ixb^l=ixa^l+kr(idims,^d);
845 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
848 ixbmax^d=ixamax^d+kr(idims,^d);
850 if(idir==idims) cycle
851 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
852 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
853 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
855 if(fl%tc_saturate)
then
858 ixb^l=ixa^l+kr(idims,^d);
859 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))
860 {
do ix^db=ixamin^db,ixamax^db\}
861 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
862 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
870 integer,
intent(in) :: ixI^L, ixO^L
871 double precision,
intent(in) :: x(ixI^S,1:ndim)
872 double precision,
intent(in) :: w(ixI^S,1:nw)
874 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
875 double precision,
intent(in) :: alpha
876 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
879 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
880 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
881 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
882 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
888 if(
allocated(iw_mag))
then
890 {
do ix^db=ixmin^db,ixmax^db\}
891 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
893 if(blocal(1)/=0.d0)
then
894 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
898 if(blocal(2)/=0.d0)
then
899 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
905 if(blocal(1)/=0.d0)
then
906 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
910 if(blocal(2)/=0.d0)
then
911 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
915 if(blocal(3)/=0.d0)
then
916 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
923 {
do ix^db=ixmin^db,ixmax^db\}
925 if(w(ix^d,iw_mag(1))/=0.d0)
then
926 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+))
930 if(w(ix^d,iw_mag(2))/=0.d0)
then
931 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+))
937 if(w(ix^d,iw_mag(1))/=0.d0)
then
938 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+&
939 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
943 if(w(ix^d,iw_mag(2))/=0.d0)
then
944 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+&
945 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
949 if(w(ix^d,iw_mag(3))/=0.d0)
then
950 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+&
951 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
959 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
962 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
966 {
do ix^db=ixcmin^db,ixcmax^db\}
967 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)&
968 +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)&
969 +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)&
970 +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))&
971 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
972 +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))
978 {
do ix^db=ixcmin^db,ixcmax^db\}
979 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
980 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
981 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
988 ixbmax^d=ixmax^d-kr(idims,^d);
989 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
991 if(fl%tc_constant)
then
992 if(fl%tc_perpendicular)
then
993 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
994 ke(ixc^s)=fl%tc_k_perp
996 ka(ixc^s)=fl%tc_k_para
1001 {
do ix^db=ixmin^db,ixmax^db\}
1002 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1003 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1005 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1009 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1013 {
do ix^db=ixcmin^db,ixcmax^db\}
1014 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1015 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1016 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1017 +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))&
1018 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1019 +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))
1023 {
do ix^db=ixcmin^db,ixcmax^db\}
1024 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1025 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1026 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1030 if(fl%tc_perpendicular)
then
1032 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)
1034 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
1037 {
do ix^db=ixcmin^db,ixcmax^db\}
1038 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1039 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1040 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1041 +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))&
1042 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1043 +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))
1044 if(ke(ix^d)<ka(ix^d))
then
1045 ka(ix^d)=ka(ix^d)-ke(ix^d)
1053 {
do ix^db=ixcmin^db,ixcmax^db\}
1054 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1055 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1056 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1057 if(ke(ix^d)<ka(ix^d))
then
1058 ka(ix^d)=ka(ix^d)-ke(ix^d)
1069 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1072 {
do ix^db=ixamin^db,ixamax^db\}
1074 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1075 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1076 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1077 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1079 if(fl%tc_perpendicular) &
1080 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1081 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1083 else if(idims==2)
then
1084 {
do ix^db=ixamin^db,ixamax^db\}
1085 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1086 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1087 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1088 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1089 if(fl%tc_perpendicular) &
1090 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1091 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1094 {
do ix^db=ixamin^db,ixamax^db\}
1095 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1096 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1097 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1098 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1099 if(fl%tc_perpendicular) &
1100 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1101 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1107 {
do ix^db=ixamin^db,ixamax^db\}
1108 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1109 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1110 if(fl%tc_perpendicular) &
1111 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1114 {
do ix^db=ixamin^db,ixamax^db\}
1115 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1116 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1117 if(fl%tc_perpendicular) &
1118 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1126 {
do ix^db=ixcmin^db,ixcmax^db\}
1127 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1128 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1129 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1130 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1131 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1132 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1134 else if(idims==2)
then
1135 {
do ix^db=ixcmin^db,ixcmax^db\}
1136 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1137 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1138 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1139 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1140 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1141 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1144 {
do ix^db=ixcmin^db,ixcmax^db\}
1145 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1146 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1147 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1148 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1149 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1150 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1156 {
do ix^db=ixcmin^db,ixcmax^db\}
1157 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1158 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1159 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1162 {
do ix^db=ixcmin^db,ixcmax^db\}
1163 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1164 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1165 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2)+smalldouble)
1172 {
do ix^db=ixamin^db,ixamax^db\}
1173 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1174 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1175 if(qdd(ix^d)<minq)
then
1177 else if(qdd(ix^d)>maxq)
then
1180 qd(ix^d,1)=qdd(ix^d)
1182 if(qdd(ix1,ix2-1,ix3)<minq)
then
1184 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1187 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1189 if(qdd(ix1,ix2,ix3-1)<minq)
then
1191 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1194 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1196 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1198 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1201 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1203 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)&
1204 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1205 if(fl%tc_perpendicular) &
1206 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))
1208 else if(idims==2)
then
1209 {
do ix^db=ixamin^db,ixamax^db\}
1210 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1211 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1212 if(qdd(ix^d)<minq)
then
1214 else if(qdd(ix^d)>maxq)
then
1217 qd(ix^d,1)=qdd(ix^d)
1219 if(qdd(ix1-1,ix2,ix3)<minq)
then
1221 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1224 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1226 if(qdd(ix1,ix2,ix3-1)<minq)
then
1228 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1231 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1233 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1235 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1238 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1240 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)&
1241 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1242 if(fl%tc_perpendicular) &
1243 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))
1246 {
do ix^db=ixamin^db,ixamax^db\}
1247 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1248 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1249 if(qdd(ix^d)<minq)
then
1251 else if(qdd(ix^d)>maxq)
then
1254 qd(ix^d,1)=qdd(ix^d)
1256 if(qdd(ix1-1,ix2,ix3)<minq)
then
1258 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1261 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1263 if(qdd(ix1,ix2-1,ix3)<minq)
then
1265 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1268 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1270 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1272 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1275 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1277 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)&
1278 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1279 if(fl%tc_perpendicular) &
1280 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))
1286 {
do ix^db=ixamin^db,ixamax^db\}
1287 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1288 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1289 if(qdd(ix^d)<minq)
then
1291 else if(qdd(ix^d)>maxq)
then
1294 qd(ix^d,1)=qdd(ix^d)
1296 if(qdd(ix1,ix2-1)<minq)
then
1298 else if(qdd(ix1,ix2-1)>maxq)
then
1301 qd(ix^d,2)=qdd(ix1,ix2-1)
1303 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))
1304 if(fl%tc_perpendicular) &
1305 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
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-1,ix2)<minq)
then
1320 else if(qdd(ix1-1,ix2)>maxq)
then
1323 qd(ix^d,2)=qdd(ix1-1,ix2)
1325 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))
1326 if(fl%tc_perpendicular) &
1327 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1332 ixb^l=ixa^l+kr(idims,^d);
1333 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1336 ixbmax^d=ixamax^d+kr(idims,^d);
1338 if(idir==idims) cycle
1339 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1340 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1341 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1343 if(fl%tc_saturate)
then
1346 ixb^l=ixa^l+kr(idims,^d);
1347 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))
1348 {
do ix^db=ixamin^db,ixamax^db\}
1349 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1350 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1540 integer,
intent(in) :: ixI^L, ixO^L
1541 double precision,
intent(in) :: x(ixI^S,1:ndim)
1542 double precision,
intent(in) :: w(ixI^S,1:nw)
1544 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1545 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1546 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1547 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1551 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1557 ixbmax^d=ixmax^d-
kr(idims,^d);
1558 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1561 {
do ix^db=ixcmin^db,ixcmax^db\}
1562 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1563 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1565 else if(idims==2)
then
1566 {
do ix^db=ixcmin^db,ixcmax^db\}
1567 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1568 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1571 {
do ix^db=ixcmin^db,ixcmax^db\}
1572 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1573 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1579 {
do ix^db=ixcmin^db,ixcmax^db\}
1580 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1583 {
do ix^db=ixcmin^db,ixcmax^db\}
1584 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1589 do ix1=ixcmin1,ixcmax1
1590 qvec(ix1,idims)=ke(ix1)
1595 if(fl%tc_constant)
then
1596 qd(ix^s)=fl%tc_k_para
1599 {
do ix^db=ixmin^db,ixmax^db\}
1600 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1601 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1603 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1607 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1613 {
do ix^db=ixcmin^db,ixcmax^db\}
1614 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1615 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1616 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1617 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1618 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1619 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1620 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1624 {
do ix^db=ixcmin^db,ixcmax^db\}
1625 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+1))
1626 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1627 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1631 do ix1=ixcmin1,ixcmax1
1632 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1638 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1641 {
do ix^db=ixamin^db,ixamax^db\}
1642 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1643 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1645 else if(idims==2)
then
1646 {
do ix^db=ixamin^db,ixamax^db\}
1647 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1648 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1651 {
do ix^db=ixamin^db,ixamax^db\}
1652 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1653 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1659 {
do ix^db=ixamin^db,ixamax^db\}
1660 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1663 {
do ix^db=ixamin^db,ixamax^db\}
1664 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1669 do ix1=ixamin1,ixamax1
1670 qvec(ix1,idims)=gradt(ix1,idims)
1673 if(fl%tc_saturate)
then
1676 ixb^l=ixa^l+kr(idims,^d);
1677 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1678 {
do ix^db=ixamin^db,ixamax^db\}
1679 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1680 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1688 integer,
intent(in) :: ixI^L, ixO^L
1689 double precision,
intent(in) :: x(ixI^S,1:ndim)
1690 double precision,
intent(in) :: w(ixI^S,1:nw)
1692 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1693 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1694 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1695 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1699 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1705 ixbmax^d=ixmax^d-
kr(idims,^d);
1706 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1709 {
do ix^db=ixcmin^db,ixcmax^db\}
1710 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1711 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1712 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1713 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1714 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1715 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1717 else if(idims==2)
then
1718 {
do ix^db=ixcmin^db,ixcmax^db\}
1719 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1720 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1721 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1722 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1723 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1724 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1728 {
do ix^db=ixcmin^db,ixcmax^db\}
1729 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1730 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1731 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1732 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1733 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1734 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1740 {
do ix^db=ixcmin^db,ixcmax^db\}
1741 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1742 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1745 {
do ix^db=ixcmin^db,ixcmax^db\}
1746 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1747 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1752 do ix1=ixcmin1,ixcmax1
1753 qvec(ix1,idims)=ke(ix1)
1758 if(fl%tc_constant)
then
1759 qd(ix^s)=fl%tc_k_para
1762 {
do ix^db=ixmin^db,ixmax^db\}
1763 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1764 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1766 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1770 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1776 {
do ix^db=ixcmin^db,ixcmax^db\}
1777 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1778 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1779 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1780 +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))&
1781 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1782 +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))
1783 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1784 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1785 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1789 {
do ix^db=ixcmin^db,ixcmax^db\}
1790 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1791 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1792 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1793 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1794 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1798 do ix1=ixcmin1,ixcmax1
1799 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)
1805 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1808 {
do ix^db=ixamin^db,ixamax^db\}
1809 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1810 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1812 else if(idims==2)
then
1813 {
do ix^db=ixamin^db,ixamax^db\}
1814 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1815 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1818 {
do ix^db=ixamin^db,ixamax^db\}
1819 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1820 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1826 {
do ix^db=ixamin^db,ixamax^db\}
1827 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1830 {
do ix^db=ixamin^db,ixamax^db\}
1831 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1836 do ix1=ixamin1,ixamax1
1837 qvec(ix1,idims)=gradt(ix1,idims)
1840 if(fl%tc_saturate)
then
1843 ixb^l=ixa^l+kr(idims,^d);
1844 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1845 {
do ix^db=ixamin^db,ixamax^db\}
1846 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1847 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)