406 integer,
intent(in) :: ixI^L, ixO^L
407 double precision,
intent(in) :: x(ixI^S,1:ndim)
408 double precision,
intent(in) :: w(ixI^S,1:nw)
410 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
411 double precision,
intent(in) :: alpha
412 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
415 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
416 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
417 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
418 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
424 if(
allocated(iw_mag))
then
426 {
do ix^db=ixmin^db,ixmax^db\}
427 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
429 if(blocal(1)/=0.d0)
then
430 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
434 if(blocal(2)/=0.d0)
then
435 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
441 if(blocal(1)/=0.d0)
then
442 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
446 if(blocal(2)/=0.d0)
then
447 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
451 if(blocal(3)/=0.d0)
then
452 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
459 {
do ix^db=ixmin^db,ixmax^db\}
461 if(w(ix^d,iw_mag(1))/=0.d0)
then
462 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+))
466 if(w(ix^d,iw_mag(2))/=0.d0)
then
467 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+))
473 if(w(ix^d,iw_mag(1))/=0.d0)
then
474 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+&
475 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
479 if(w(ix^d,iw_mag(2))/=0.d0)
then
480 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+&
481 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
485 if(w(ix^d,iw_mag(3))/=0.d0)
then
486 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+&
487 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
495 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
498 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
502 {
do ix^db=ixcmin^db,ixcmax^db\}
503 bc(ix^d,idims)=0.125d0*(mf(ix1,ix2,ix3,idims)+mf(ix1+1,ix2,ix3,idims)&
504 +mf(ix1,ix2+1,ix3,idims)+mf(ix1+1,ix2+1,ix3,idims)&
505 +mf(ix1,ix2,ix3+1,idims)+mf(ix1+1,ix2,ix3+1,idims)&
506 +mf(ix1,ix2+1,ix3+1,idims)+mf(ix1+1,ix2+1,ix3+1,idims))
512 {
do ix^db=ixcmin^db,ixcmax^db\}
513 bc(ix^d,idims)=0.25d0*(mf(ix1,ix2,idims)+mf(ix1+1,ix2,idims)&
514 +mf(ix1,ix2+1,idims)+mf(ix1+1,ix2+1,idims))
521 ixbmax^d=ixmax^d-kr(idims,^d);
522 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
524 if(fl%tc_constant)
then
525 if(fl%tc_perpendicular)
then
526 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
527 ke(ixc^s)=fl%tc_k_perp
529 ka(ixc^s)=fl%tc_k_para
534 {
do ix^db=ixmin^db,ixmax^db\}
535 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
536 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
538 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
542 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
546 {
do ix^db=ixcmin^db,ixcmax^db\}
547 ka(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
548 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
549 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
550 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
554 {
do ix^db=ixcmin^db,ixcmax^db\}
555 ka(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
556 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
560 if(fl%tc_perpendicular)
then
562 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)
564 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
567 {
do ix^db=ixcmin^db,ixcmax^db\}
568 ke(ix^d)=0.125d0*(qdd(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)&
569 +qdd(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)&
570 +qdd(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)&
571 +qdd(ix1,ix2+1,ix3+1)+qdd(ix1+1,ix2+1,ix3+1))
572 if(ke(ix^d)<ka(ix^d))
then
573 ka(ix^d)=ka(ix^d)-ke(ix^d)
581 {
do ix^db=ixcmin^db,ixcmax^db\}
582 ke(ix^d)=0.25d0*(qdd(ix1,ix2)+qdd(ix1+1,ix2)&
583 +qdd(ix1,ix2+1)+qdd(ix1+1,ix2+1))
584 if(ke(ix^d)<ka(ix^d))
then
585 ka(ix^d)=ka(ix^d)-ke(ix^d)
596 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
599 {
do ix^db=ixamin^db,ixamax^db\}
601 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
602 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
603 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
604 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
606 if(fl%tc_perpendicular) &
607 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
608 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
610 else if(idims==2)
then
611 {
do ix^db=ixamin^db,ixamax^db\}
612 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
613 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
614 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
615 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
616 if(fl%tc_perpendicular) &
617 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
618 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
621 {
do ix^db=ixamin^db,ixamax^db\}
622 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
623 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
624 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
625 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
626 if(fl%tc_perpendicular) &
627 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
628 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
634 {
do ix^db=ixamin^db,ixamax^db\}
635 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
636 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
637 if(fl%tc_perpendicular) &
638 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
641 {
do ix^db=ixamin^db,ixamax^db\}
642 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
643 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
644 if(fl%tc_perpendicular) &
645 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
653 {
do ix^db=ixcmin^db,ixcmax^db\}
654 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2+1,ix3,idims)&
655 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1,ix2+1,ix3+1,idims))
657 else if(idims==2)
then
658 {
do ix^db=ixcmin^db,ixcmax^db\}
659 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
660 +gradt(ix1,ix2,ix3+1,idims)+gradt(ix1+1,ix2,ix3+1,idims))
663 {
do ix^db=ixcmin^db,ixcmax^db\}
664 qdd(ix^d)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1+1,ix2,ix3,idims)&
665 +gradt(ix1,ix2+1,ix3,idims)+gradt(ix1+1,ix2+1,ix3,idims))
671 {
do ix^db=ixcmin^db,ixcmax^db\}
672 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2+1,idims))
675 {
do ix^db=ixcmin^db,ixcmax^db\}
676 qdd(ix^d)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1+1,ix2,idims))
683 {
do ix^db=ixamin^db,ixamax^db\}
684 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
685 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
686 if(qdd(ix^d)<minq)
then
688 else if(qdd(ix^d)>maxq)
then
693 if(qdd(ix1,ix2-1,ix3)<minq)
then
695 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
698 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
700 if(qdd(ix1,ix2,ix3-1)<minq)
then
702 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
705 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
707 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
709 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
712 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
714 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)&
715 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
716 if(fl%tc_perpendicular) &
717 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))
719 else if(idims==2)
then
720 {
do ix^db=ixamin^db,ixamax^db\}
721 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
722 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
723 if(qdd(ix^d)<minq)
then
725 else if(qdd(ix^d)>maxq)
then
730 if(qdd(ix1-1,ix2,ix3)<minq)
then
732 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
735 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
737 if(qdd(ix1,ix2,ix3-1)<minq)
then
739 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
742 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
744 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
746 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
749 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
751 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)&
752 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
753 if(fl%tc_perpendicular) &
754 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))
757 {
do ix^db=ixamin^db,ixamax^db\}
758 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
759 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
760 if(qdd(ix^d)<minq)
then
762 else if(qdd(ix^d)>maxq)
then
767 if(qdd(ix1-1,ix2,ix3)<minq)
then
769 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
772 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
774 if(qdd(ix1,ix2-1,ix3)<minq)
then
776 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
779 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
781 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
783 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
786 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
788 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)&
789 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
790 if(fl%tc_perpendicular) &
791 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))
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,ix2-1)<minq)
then
809 else if(qdd(ix1,ix2-1)>maxq)
then
812 qd(ix^d,2)=qdd(ix1,ix2-1)
814 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))
815 if(fl%tc_perpendicular) &
816 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
819 {
do ix^db=ixamin^db,ixamax^db\}
820 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
821 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
822 if(qdd(ix^d)<minq)
then
824 else if(qdd(ix^d)>maxq)
then
829 if(qdd(ix1-1,ix2)<minq)
then
831 else if(qdd(ix1-1,ix2)>maxq)
then
834 qd(ix^d,2)=qdd(ix1-1,ix2)
836 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))
837 if(fl%tc_perpendicular) &
838 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
843 ixb^l=ixa^l+kr(idims,^d);
844 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
847 ixbmax^d=ixamax^d+kr(idims,^d);
849 if(idir==idims) cycle
850 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
851 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
852 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
854 if(fl%tc_saturate)
then
857 ixb^l=ixa^l+kr(idims,^d);
858 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))
859 {
do ix^db=ixamin^db,ixamax^db\}
860 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
861 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
869 integer,
intent(in) :: ixI^L, ixO^L
870 double precision,
intent(in) :: x(ixI^S,1:ndim)
871 double precision,
intent(in) :: w(ixI^S,1:nw)
873 double precision,
intent(in) :: rho(ixI^S),Te(ixI^S)
874 double precision,
intent(in) :: alpha
875 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
878 double precision,
dimension(ixI^S,1:ndim) :: mf,Bc,Bcf,gradT
879 double precision,
dimension(ixI^S) :: ka,kaf,ke,kef,qdd,Bnorm
880 double precision :: minq,maxq,qd(ixI^S,2**(ndim-1)), blocal(ndir)
881 integer :: idims,idir,ix^D,ix^L,ixC^L,ixA^L,ixB^L
887 if(
allocated(iw_mag))
then
889 {
do ix^db=ixmin^db,ixmax^db\}
890 ^c&blocal(^c)=w({ix^d},iw_mag(^c))+
block%B0({ix^d},^c,0)\
892 if(blocal(1)/=0.d0)
then
893 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(^ce&(blocal(^ce)/blocal(1))**2+))
897 if(blocal(2)/=0.d0)
then
898 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(^cf&(blocal(^cf)/blocal(2))**2+))
904 if(blocal(1)/=0.d0)
then
905 mf(ix^d,1)=sign(1.d0,blocal(1))/dsqrt(1.d0+(blocal(2)/blocal(1))**2+(blocal(3)/blocal(1))**2)
909 if(blocal(2)/=0.d0)
then
910 mf(ix^d,2)=sign(1.d0,blocal(2))/dsqrt(1.d0+(blocal(1)/blocal(2))**2+(blocal(3)/blocal(2))**2)
914 if(blocal(3)/=0.d0)
then
915 mf(ix^d,3)=sign(1.d0,blocal(3))/dsqrt(1.d0+(blocal(1)/blocal(3))**2+(blocal(2)/blocal(3))**2)
922 {
do ix^db=ixmin^db,ixmax^db\}
924 if(w(ix^d,iw_mag(1))/=0.d0)
then
925 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+))
929 if(w(ix^d,iw_mag(2))/=0.d0)
then
930 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+))
936 if(w(ix^d,iw_mag(1))/=0.d0)
then
937 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+&
938 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(1)))**2)
942 if(w(ix^d,iw_mag(2))/=0.d0)
then
943 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+&
944 (w(ix^d,iw_mag(3))/w(ix^d,iw_mag(2)))**2)
948 if(w(ix^d,iw_mag(3))/=0.d0)
then
949 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+&
950 (w(ix^d,iw_mag(2))/w(ix^d,iw_mag(3)))**2)
958 mf(ix^s,1:ndim)=block%B0(ix^s,1:ndim,0)
961 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
965 {
do ix^db=ixcmin^db,ixcmax^db\}
966 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)&
967 +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)&
968 +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)&
969 +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))&
970 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
971 +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))
977 {
do ix^db=ixcmin^db,ixcmax^db\}
978 bc(ix^d,idims)=(mf(ix1,ix2,idims)*block%dvolume(ix1,ix2)+mf(ix1+1,ix2,idims)*block%dvolume(ix1+1,ix2)&
979 +mf(ix1,ix2+1,idims)*block%dvolume(ix1,ix2+1)+mf(ix1+1,ix2+1,idims)*block%dvolume(ix1+1,ix2+1))&
980 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
987 ixbmax^d=ixmax^d-kr(idims,^d);
988 call gradientf(te,x,ixi^l,ixb^l,idims,gradt(ixi^s,idims))
990 if(fl%tc_constant)
then
991 if(fl%tc_perpendicular)
then
992 ka(ixc^s)=fl%tc_k_para-fl%tc_k_perp
993 ke(ixc^s)=fl%tc_k_perp
995 ka(ixc^s)=fl%tc_k_para
1000 {
do ix^db=ixmin^db,ixmax^db\}
1001 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1002 qdd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1004 qdd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1008 qdd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1012 {
do ix^db=ixcmin^db,ixcmax^db\}
1013 ka(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1014 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1015 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1016 +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))&
1017 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1018 +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))
1022 {
do ix^db=ixcmin^db,ixcmax^db\}
1023 ka(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1024 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1025 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1029 if(fl%tc_perpendicular)
then
1031 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)
1033 qdd(ix^s)=fl%tc_k_perp*rho(ix^s)**2/((^c&w(ix^s,iw_mag(^c))**2+)*dsqrt(te(ix^s))+smalldouble)
1036 {
do ix^db=ixcmin^db,ixcmax^db\}
1037 ke(ix^d)=(qdd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qdd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1038 +qdd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qdd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1039 +qdd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qdd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1040 +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))&
1041 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1042 +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))
1043 if(ke(ix^d)<ka(ix^d))
then
1044 ka(ix^d)=ka(ix^d)-ke(ix^d)
1052 {
do ix^db=ixcmin^db,ixcmax^db\}
1053 ke(ix^d)=(qdd(ix1,ix2)*block%dvolume(ix1,ix2)+qdd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1054 +qdd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qdd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1055 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1056 if(ke(ix^d)<ka(ix^d))
then
1057 ka(ix^d)=ka(ix^d)-ke(ix^d)
1068 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1071 {
do ix^db=ixamin^db,ixamax^db\}
1073 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1074 +bc(ix1,ix2,ix3-1,^d)+bc(ix1,ix2-1,ix3-1,^d))\
1075 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1076 +ka(ix1,ix2,ix3-1)+ka(ix1,ix2-1,ix3-1))
1078 if(fl%tc_perpendicular) &
1079 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1080 +ke(ix1,ix2,ix3-1)+ke(ix1,ix2-1,ix3-1))
1082 else if(idims==2)
then
1083 {
do ix^db=ixamin^db,ixamax^db\}
1084 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1-1,ix2,ix3,^d)&
1085 +bc(ix1,ix2,ix3-1,^d)+bc(ix1-1,ix2,ix3-1,^d))\
1086 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1-1,ix2,ix3)&
1087 +ka(ix1,ix2,ix3-1)+ka(ix1-1,ix2,ix3-1))
1088 if(fl%tc_perpendicular) &
1089 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1-1,ix2,ix3)&
1090 +ke(ix1,ix2,ix3-1)+ke(ix1-1,ix2,ix3-1))
1093 {
do ix^db=ixamin^db,ixamax^db\}
1094 ^d&bcf({ix^d},^d)=0.25d0*(bc({ix^d},^d)+bc(ix1,ix2-1,ix3,^d)&
1095 +bc(ix1-1,ix2,ix3,^d)+bc(ix1-1,ix2-1,ix3,^d))\
1096 kaf(ix^d)=0.25d0*(ka(ix1,ix2,ix3)+ka(ix1,ix2-1,ix3)&
1097 +ka(ix1-1,ix2,ix3)+ka(ix1-1,ix2-1,ix3))
1098 if(fl%tc_perpendicular) &
1099 kef(ix^d)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2-1,ix3)&
1100 +ke(ix1-1,ix2,ix3)+ke(ix1-1,ix2-1,ix3))
1106 {
do ix^db=ixamin^db,ixamax^db\}
1107 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1,ix2-1,^d))\
1108 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1,ix2-1))
1109 if(fl%tc_perpendicular) &
1110 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2-1))
1113 {
do ix^db=ixamin^db,ixamax^db\}
1114 ^d&bcf({ix^d},^d)=0.5d0*(bc(ix1,ix2,^d)+bc(ix1-1,ix2,^d))\
1115 kaf(ix^d)=0.5d0*(ka(ix1,ix2)+ka(ix1-1,ix2))
1116 if(fl%tc_perpendicular) &
1117 kef(ix^d)=0.5d0*(ke(ix1,ix2)+ke(ix1-1,ix2))
1125 {
do ix^db=ixcmin^db,ixcmax^db\}
1126 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,1)&
1127 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,1)&
1128 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,1)&
1129 +gradt(ix1,ix2+1,ix3+1,idims)*block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1130 (block%surfaceC(ix1,ix2,ix3,1)+block%surfaceC(ix1,ix2+1,ix3,1)&
1131 +block%surfaceC(ix1,ix2,ix3+1,1)+block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1133 else if(idims==2)
then
1134 {
do ix^db=ixcmin^db,ixcmax^db\}
1135 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,2)&
1136 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,2)&
1137 +gradt(ix1,ix2,ix3+1,idims)*block%surfaceC(ix1,ix2,ix3+1,2)&
1138 +gradt(ix1+1,ix2,ix3+1,idims)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1139 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1140 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1143 {
do ix^db=ixcmin^db,ixcmax^db\}
1144 qdd(ix^d)=(gradt(ix1,ix2,ix3,idims)*block%surfaceC(ix1,ix2,ix3,3)&
1145 +gradt(ix1+1,ix2,ix3,idims)*block%surfaceC(ix1+1,ix2,ix3,3)&
1146 +gradt(ix1,ix2+1,ix3,idims)*block%surfaceC(ix1,ix2+1,ix3,3)&
1147 +gradt(ix1+1,ix2+1,ix3,idims)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1148 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1149 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1155 {
do ix^db=ixcmin^db,ixcmax^db\}
1156 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,1)&
1157 +gradt(ix1,ix2+1,idims)*block%surfaceC(ix1,ix2+1,1))/&
1158 (block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1161 {
do ix^db=ixcmin^db,ixcmax^db\}
1162 qdd(ix^d)=(gradt(ix1,ix2,idims)*block%surfaceC(ix1,ix2,2)&
1163 +gradt(ix1+1,ix2,idims)*block%surfaceC(ix1+1,ix2,2))/&
1164 (block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2)+smalldouble)
1171 {
do ix^db=ixamin^db,ixamax^db\}
1172 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1173 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1174 if(qdd(ix^d)<minq)
then
1176 else if(qdd(ix^d)>maxq)
then
1179 qd(ix^d,1)=qdd(ix^d)
1181 if(qdd(ix1,ix2-1,ix3)<minq)
then
1183 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1186 qd(ix^d,2)=qdd(ix1,ix2-1,ix3)
1188 if(qdd(ix1,ix2,ix3-1)<minq)
then
1190 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1193 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1195 if(qdd(ix1,ix2-1,ix3-1)<minq)
then
1197 else if(qdd(ix1,ix2-1,ix3-1)>maxq)
then
1200 qd(ix^d,4)=qdd(ix1,ix2-1,ix3-1)
1202 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)&
1203 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1,ix2-1,ix3-1,idims)**2*qd(ix^d,4))
1204 if(fl%tc_perpendicular) &
1205 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))
1207 else if(idims==2)
then
1208 {
do ix^db=ixamin^db,ixamax^db\}
1209 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1210 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1211 if(qdd(ix^d)<minq)
then
1213 else if(qdd(ix^d)>maxq)
then
1216 qd(ix^d,1)=qdd(ix^d)
1218 if(qdd(ix1-1,ix2,ix3)<minq)
then
1220 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1223 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1225 if(qdd(ix1,ix2,ix3-1)<minq)
then
1227 else if(qdd(ix1,ix2,ix3-1)>maxq)
then
1230 qd(ix^d,3)=qdd(ix1,ix2,ix3-1)
1232 if(qdd(ix1-1,ix2,ix3-1)<minq)
then
1234 else if(qdd(ix1-1,ix2,ix3-1)>maxq)
then
1237 qd(ix^d,4)=qdd(ix1-1,ix2,ix3-1)
1239 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)&
1240 +bc(ix1,ix2,ix3-1,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2,ix3-1,idims)**2*qd(ix^d,4))
1241 if(fl%tc_perpendicular) &
1242 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))
1245 {
do ix^db=ixamin^db,ixamax^db\}
1246 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1247 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1248 if(qdd(ix^d)<minq)
then
1250 else if(qdd(ix^d)>maxq)
then
1253 qd(ix^d,1)=qdd(ix^d)
1255 if(qdd(ix1-1,ix2,ix3)<minq)
then
1257 else if(qdd(ix1-1,ix2,ix3)>maxq)
then
1260 qd(ix^d,2)=qdd(ix1-1,ix2,ix3)
1262 if(qdd(ix1,ix2-1,ix3)<minq)
then
1264 else if(qdd(ix1,ix2-1,ix3)>maxq)
then
1267 qd(ix^d,3)=qdd(ix1,ix2-1,ix3)
1269 if(qdd(ix1-1,ix2-1,ix3)<minq)
then
1271 else if(qdd(ix1-1,ix2-1,ix3)>maxq)
then
1274 qd(ix^d,4)=qdd(ix1-1,ix2-1,ix3)
1276 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)&
1277 +bc(ix1,ix2-1,ix3,idims)**2*qd(ix^d,3)+bc(ix1-1,ix2-1,ix3,idims)**2*qd(ix^d,4))
1278 if(fl%tc_perpendicular) &
1279 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))
1285 {
do ix^db=ixamin^db,ixamax^db\}
1286 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1287 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1288 if(qdd(ix^d)<minq)
then
1290 else if(qdd(ix^d)>maxq)
then
1293 qd(ix^d,1)=qdd(ix^d)
1295 if(qdd(ix1,ix2-1)<minq)
then
1297 else if(qdd(ix1,ix2-1)>maxq)
then
1300 qd(ix^d,2)=qdd(ix1,ix2-1)
1302 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))
1303 if(fl%tc_perpendicular) &
1304 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1307 {
do ix^db=ixamin^db,ixamax^db\}
1308 minq=min(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1309 maxq=max(alpha*gradt(ix^d,idims),gradt(ix^d,idims)/alpha)
1310 if(qdd(ix^d)<minq)
then
1312 else if(qdd(ix^d)>maxq)
then
1315 qd(ix^d,1)=qdd(ix^d)
1317 if(qdd(ix1-1,ix2)<minq)
then
1319 else if(qdd(ix1-1,ix2)>maxq)
then
1322 qd(ix^d,2)=qdd(ix1-1,ix2)
1324 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))
1325 if(fl%tc_perpendicular) &
1326 qvec(ix^d,idims)=qvec(ix^d,idims)+kef(ix^d)*0.5d0*(qd(ix^d,1)+qd(ix^d,2))
1331 ixb^l=ixa^l+kr(idims,^d);
1332 bnorm(ixa^s)=0.5d0*(mf(ixa^s,idims)+mf(ixb^s,idims))
1335 ixbmax^d=ixamax^d+kr(idims,^d);
1337 if(idir==idims) cycle
1338 qdd(ixi^s)=
slope_limiter(gradt(ixi^s,idir),ixi^l,ixb^l,idir,-1,fl%tc_slope_limiter)
1339 qdd(ixi^s)=
slope_limiter(qdd,ixi^l,ixa^l,idims,1,fl%tc_slope_limiter)
1340 qvec(ixa^s,idims)=qvec(ixa^s,idims)+kaf(ixa^s)*bnorm(ixa^s)*bcf(ixa^s,idir)*qdd(ixa^s)
1342 if(fl%tc_saturate)
then
1345 ixb^l=ixa^l+kr(idims,^d);
1346 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))
1347 {
do ix^db=ixamin^db,ixamax^db\}
1348 if(dabs(qvec(ix^d,idims))>qdd(ix^d))
then
1349 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qdd(ix^d)
1539 integer,
intent(in) :: ixI^L, ixO^L
1540 double precision,
intent(in) :: x(ixI^S,1:ndim)
1541 double precision,
intent(in) :: w(ixI^S,1:nw)
1543 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1544 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1545 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1546 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1550 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1556 ixbmax^d=ixmax^d-
kr(idims,^d);
1557 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1560 {
do ix^db=ixcmin^db,ixcmax^db\}
1561 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1,ix2+1,ix3)&
1562 +ke(ix1,ix2,ix3+1)+ke(ix1,ix2+1,ix3+1))
1564 else if(idims==2)
then
1565 {
do ix^db=ixcmin^db,ixcmax^db\}
1566 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1567 +ke(ix1,ix2,ix3+1)+ke(ix1+1,ix2,ix3+1))
1570 {
do ix^db=ixcmin^db,ixcmax^db\}
1571 qvec(ix^d,idims)=0.25d0*(ke(ix1,ix2,ix3)+ke(ix1+1,ix2,ix3)&
1572 +ke(ix1,ix2+1,ix3)+ke(ix1+1,ix2+1,ix3))
1578 {
do ix^db=ixcmin^db,ixcmax^db\}
1579 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1,ix2+1))
1582 {
do ix^db=ixcmin^db,ixcmax^db\}
1583 qvec(ix^d,idims)=0.5d0*(ke(ix1,ix2)+ke(ix1+1,ix2))
1588 do ix1=ixcmin1,ixcmax1
1589 qvec(ix1,idims)=ke(ix1)
1594 if(fl%tc_constant)
then
1595 qd(ix^s)=fl%tc_k_para
1598 {
do ix^db=ixmin^db,ixmax^db\}
1599 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1600 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1602 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1606 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1612 {
do ix^db=ixcmin^db,ixcmax^db\}
1613 ke(ix^d)=0.125d0*(qd(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)&
1614 +qd(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)&
1615 +qd(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)&
1616 +qd(ix1,ix2+1,ix3+1)+qd(ix1+1,ix2+1,ix3+1))
1617 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1618 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1619 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1623 {
do ix^db=ixcmin^db,ixcmax^db\}
1624 ke(ix^d)=0.25d0*(qd(ix1,ix2)+qd(ix1+1,ix2)+qd(ix1,ix2+1)+qd(ix1+1,ix2+1))
1625 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1626 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1630 do ix1=ixcmin1,ixcmax1
1631 gradt(ix^d,1)=0.5d0*(qd(ix1)+qd(ix1+1))*qvec(ix^d,1)
1637 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1640 {
do ix^db=ixamin^db,ixamax^db\}
1641 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1642 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1644 else if(idims==2)
then
1645 {
do ix^db=ixamin^db,ixamax^db\}
1646 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1647 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1650 {
do ix^db=ixamin^db,ixamax^db\}
1651 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1652 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1658 {
do ix^db=ixamin^db,ixamax^db\}
1659 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1662 {
do ix^db=ixamin^db,ixamax^db\}
1663 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1668 do ix1=ixamin1,ixamax1
1669 qvec(ix1,idims)=gradt(ix1,idims)
1672 if(fl%tc_saturate)
then
1675 ixb^l=ixa^l+kr(idims,^d);
1676 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1677 {
do ix^db=ixamin^db,ixamax^db\}
1678 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1679 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)
1687 integer,
intent(in) :: ixI^L, ixO^L
1688 double precision,
intent(in) :: x(ixI^S,1:ndim)
1689 double precision,
intent(in) :: w(ixI^S,1:nw)
1691 double precision,
intent(in) :: Te(ixI^S),rho(ixI^S)
1692 double precision,
intent(out) :: qvec(ixI^S,1:ndim)
1693 double precision :: gradT(ixI^S,1:ndim),ke(ixI^S),qd(ixI^S)
1694 integer :: idims,ix^D,ix^L,ixC^L,ixA^L,ixB^L
1698 ixcmax^d=ixomax^d; ixcmin^d=ixomin^d-1;
1704 ixbmax^d=ixmax^d-
kr(idims,^d);
1705 call gradientf(te,x,ixi^l,ixb^l,idims,ke)
1708 {
do ix^db=ixcmin^db,ixcmax^db\}
1709 qvec(ix^d,1)=(ke(ix1,ix2,ix3)*
block%surfaceC(ix1,ix2,ix3,1)&
1710 +ke(ix1,ix2+1,ix3)*
block%surfaceC(ix1,ix2+1,ix3,1)&
1711 +ke(ix1,ix2,ix3+1)*
block%surfaceC(ix1,ix2,ix3+1,1)&
1712 +ke(ix1,ix2+1,ix3+1)*
block%surfaceC(ix1,ix2+1,ix3+1,1))/&
1713 (
block%surfaceC(ix1,ix2,ix3,1)+
block%surfaceC(ix1,ix2+1,ix3,1)&
1714 +
block%surfaceC(ix1,ix2,ix3+1,1)+
block%surfaceC(ix1,ix2+1,ix3+1,1)+smalldouble**2)
1716 else if(idims==2)
then
1717 {
do ix^db=ixcmin^db,ixcmax^db\}
1718 qvec(ix^d,2)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,2)&
1719 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,2)&
1720 +ke(ix1,ix2,ix3+1)*block%surfaceC(ix1,ix2,ix3+1,2)&
1721 +ke(ix1+1,ix2,ix3+1)*block%surfaceC(ix1+1,ix2,ix3+1,2))/&
1722 (block%surfaceC(ix1,ix2,ix3,2)+block%surfaceC(ix1+1,ix2,ix3,2)&
1723 +block%surfaceC(ix1,ix2,ix3+1,2)+block%surfaceC(ix1+1,ix2,ix3+1,2)+smalldouble**2)
1727 {
do ix^db=ixcmin^db,ixcmax^db\}
1728 qvec(ix^d,3)=(ke(ix1,ix2,ix3)*block%surfaceC(ix1,ix2,ix3,3)&
1729 +ke(ix1+1,ix2,ix3)*block%surfaceC(ix1+1,ix2,ix3,3)&
1730 +ke(ix1,ix2+1,ix3)*block%surfaceC(ix1,ix2+1,ix3,3)&
1731 +ke(ix1+1,ix2+1,ix3)*block%surfaceC(ix1+1,ix2+1,ix3,3))/&
1732 (block%surfaceC(ix1,ix2,ix3,3)+block%surfaceC(ix1+1,ix2,ix3,3)&
1733 +block%surfaceC(ix1,ix2+1,ix3,3)+block%surfaceC(ix1+1,ix2+1,ix3,3))
1739 {
do ix^db=ixcmin^db,ixcmax^db\}
1740 qvec(ix^d,1)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,1)+ke(ix1,ix2+1)*block%surfaceC(ix1,ix2+1,1))&
1741 /(block%surfaceC(ix1,ix2,1)+block%surfaceC(ix1,ix2+1,1))
1744 {
do ix^db=ixcmin^db,ixcmax^db\}
1745 qvec(ix^d,2)=(ke(ix1,ix2)*block%surfaceC(ix1,ix2,2)+ke(ix1+1,ix2)*block%surfaceC(ix1+1,ix2,2))&
1746 /(block%surfaceC(ix1,ix2,2)+block%surfaceC(ix1+1,ix2,2))
1751 do ix1=ixcmin1,ixcmax1
1752 qvec(ix1,idims)=ke(ix1)
1757 if(fl%tc_constant)
then
1758 qd(ix^s)=fl%tc_k_para
1761 {
do ix^db=ixmin^db,ixmax^db\}
1762 if(te(ix^d) < block%wextra(ix^d,fl%Tcoff_))
then
1763 qd(ix^d)=fl%tc_k_para*dsqrt(block%wextra(ix^d,fl%Tcoff_)**5)
1765 qd(ix^d)=fl%tc_k_para*dsqrt(te(ix^d)**5)
1769 qd(ix^s)=fl%tc_k_para*dsqrt(te(ix^s)**5)
1775 {
do ix^db=ixcmin^db,ixcmax^db\}
1776 ke(ix^d)=(qd(ix1,ix2,ix3)*block%dvolume(ix1,ix2,ix3)+qd(ix1+1,ix2,ix3)*block%dvolume(ix1+1,ix2,ix3)&
1777 +qd(ix1,ix2+1,ix3)*block%dvolume(ix1,ix2+1,ix3)+qd(ix1+1,ix2+1,ix3)*block%dvolume(ix1+1,ix2+1,ix3)&
1778 +qd(ix1,ix2,ix3+1)*block%dvolume(ix1,ix2,ix3+1)+qd(ix1+1,ix2,ix3+1)*block%dvolume(ix1+1,ix2,ix3+1)&
1779 +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))&
1780 /(block%dvolume(ix1,ix2,ix3)+block%dvolume(ix1+1,ix2,ix3)+block%dvolume(ix1,ix2+1,ix3)+block%dvolume(ix1+1,ix2+1,ix3)&
1781 +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))
1782 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1783 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1784 gradt(ix^d,3)=ke(ix^d)*qvec(ix^d,3)
1788 {
do ix^db=ixcmin^db,ixcmax^db\}
1789 ke(ix^d)=(qd(ix1,ix2)*block%dvolume(ix1,ix2)+qd(ix1+1,ix2)*block%dvolume(ix1+1,ix2)&
1790 +qd(ix1,ix2+1)*block%dvolume(ix1,ix2+1)+qd(ix1+1,ix2+1)*block%dvolume(ix1+1,ix2+1))&
1791 /(block%dvolume(ix1,ix2)+block%dvolume(ix1+1,ix2)+block%dvolume(ix1,ix2+1)+block%dvolume(ix1+1,ix2+1))
1792 gradt(ix^d,1)=ke(ix^d)*qvec(ix^d,1)
1793 gradt(ix^d,2)=ke(ix^d)*qvec(ix^d,2)
1797 do ix1=ixcmin1,ixcmax1
1798 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)
1804 ixamax^d=ixomax^d; ixamin^d=ixomin^d-kr(idims,^d);
1807 {
do ix^db=ixamin^db,ixamax^db\}
1808 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1809 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1,ix2-1,ix3-1,idims))
1811 else if(idims==2)
then
1812 {
do ix^db=ixamin^db,ixamax^db\}
1813 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1-1,ix2,ix3,idims)&
1814 +gradt(ix1,ix2,ix3-1,idims)+gradt(ix1-1,ix2,ix3-1,idims))
1817 {
do ix^db=ixamin^db,ixamax^db\}
1818 qvec(ix^d,idims)=0.25d0*(gradt(ix1,ix2,ix3,idims)+gradt(ix1,ix2-1,ix3,idims)&
1819 +gradt(ix1-1,ix2,ix3,idims)+gradt(ix1-1,ix2-1,ix3,idims))
1825 {
do ix^db=ixamin^db,ixamax^db\}
1826 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1,ix2-1,idims))
1829 {
do ix^db=ixamin^db,ixamax^db\}
1830 qvec(ix^d,idims)=0.5d0*(gradt(ix1,ix2,idims)+gradt(ix1-1,ix2,idims))
1835 do ix1=ixamin1,ixamax1
1836 qvec(ix1,idims)=gradt(ix1,idims)
1839 if(fl%tc_saturate)
then
1842 ixb^l=ixa^l+kr(idims,^d);
1843 qd(ixa^s)=0.75d0*(rho(ixa^s)+rho(ixb^s))*dsqrt(0.5d0*(te(ixa^s)+te(ixb^s)))**3
1844 {
do ix^db=ixamin^db,ixamax^db\}
1845 if(dabs(qvec(ix^d,idims))>qd(ix^d))
then
1846 qvec(ix^d,idims)=sign(1.d0,qvec(ix^d,idims))*qd(ix^d)