| 45 | |
| 46 | |
| 47 | === How max speeds are calculated === |
| 48 | ==== Elliptic max speed depends on the solver ==== |
| 49 | * Poisson |
| 50 | {{{ |
| 51 | elliptic_maxspeed(level)=max(elliptic_maxspeed(level),sqrt(nDim*& |
| 52 | maxval(abs(Info%q(ir(1,1):ir(1,2),ir(2,1):ir(2,2),ir(3,1):ir(3,2),iPhiGas)-& |
| 53 | Info%q(il(1,1):il(1,2),il(2,1):il(2,2),il(3,1):il(3,2),iPhiGas))))) |
| 54 | }}} |
| 55 | ==== Hydro max speed ==== |
| 56 | * MUSCL uses maximum speed from the riemann solvers - which is usually just the max of the left and right most waves |
| 57 | {{{ |
| 58 | max(ABS(SL),ABS(SR)) |
| 59 | }}} |
| 60 | * sweep uses the GetMaxSpeed routine to find the fastest eigen speed on the grid after an update |
| 61 | {{{ |
| 62 | SUBROUTINE GetMaxSpeed(Info) |
| 63 | TYPE(InfoDef) :: Info |
| 64 | REAL(KIND=qPrec), DIMENSION(:,:,:,:), POINTER :: q |
| 65 | REAL(KIND=qPREC) :: myMaxSpeed, fast_speed(3), A2, B2, B, dx, A |
| 66 | INTEGER :: i,j,k,level |
| 67 | level=Info%level |
| 68 | dx=levels(level)%dx |
| 69 | q=>Info%q |
| 70 | myMaxSpeed=0d0 |
| 71 | DO i=1, Info%mX(1) |
| 72 | DO j=1, Info%mX(2) |
| 73 | DO k=1, Info%mX(3) |
| 74 | A=SoundSpeed(q(i,j,k,:)) |
| 75 | A2=q(i,j,k,1)*A**2 |
| 76 | IF (iE_rad /= 0) THEN |
| 77 | A2=A2+4d0/9d0*q(i,j,k,iE_rad)*(1d0-exp(-q(i,j,k,iKappa)*dx)) |
| 78 | A=sqrt(A2/q(i,j,k,1)) |
| 79 | END IF |
| 80 | IF (lMHD) THEN |
| 81 | B2 = SUM(q(i,j,k,iBx:iBz)**2) |
| 82 | B = A2+B2 |
| 83 | fast_speed(1:nDim) = sqrt(half*(B+sqrt(B**2-4d0*A2*q(i,j,k,iB(1:nDim))**2))/q(i,j,k,1)) |
| 84 | mymaxspeed= maxval(abs(q(i,j,k,imom(1:nDim)))/q(i,j,k,1)+fast_speed(1:nDim)) |
| 85 | ELSE |
| 86 | ! mymaxspeed=maxval(abs(q(i,j,k,imom(1:nDim)))+A2)/q(i,j,k,1) |
| 87 | mymaxspeed=sqrt(sum(q(i,j,k,imom(1:nDim))**2))/q(i,j,k,1)+A |
| 88 | END IF |
| 89 | IF (mymaxspeed > maxspeed(level)) THEN |
| 90 | maxspeed(level)=mymaxspeed |
| 91 | maxspeed_location(level,:)=CellPos(Info, i, j, k) |
| 92 | END IF |
| 93 | END DO |
| 94 | END DO |
| 95 | END DO |
| 96 | END SUBROUTINE GetMaxSpeed |
| 97 | }}} |
| 98 | |
| 99 | ==== Particle max speed ==== |
| 100 | This just finds the fastest particle speed |
| 101 | {{{ |
| 102 | ParticleMaxSpeed=max(ParticleMaxSpeed, sqrt(sum(vel(i,1:nDim)**2))) |
| 103 | }}} |