Momentum Conserving Self Gravity

Making the momentum be conserved requires recasting the gravitational force as a total differential

so we need to find such that

Since

we can substitute for and we have

which is equivalent (in 1D) to

where we can identify the equivalent momentum flux tensor as

  • In more than 1D we have

or we can write it as

Momentum Conserving Self Gravity Source Terms in AstroBEAR

  • q - initial state
  • qLx - left edge of x - interface in predictor
  • qLy - lower edge of y - interface in predictor
  • qRy - upper edge of y - interface in predictor
  • q2 - intermediate cell centered quantities
  • q2Lx - updated left edge of x - interface used for final riemann solve
  • fx - predictor x flux
  • f2x - final x flux
  • q3 - new values

Normal CTU:

  • qLx = Reconstruct(q), etc… (for all 6 qxx states)
  • fx=Riemann_Solve(qLx,qRx), etc… (for all 3 edges)
  • q2 = q+fx+fy+fz
  • q2Lx=qLx+fy+fz etc… (for all 6 q2xx states)
  • f2x=Riemann_Solve(q2Lx,q2Rx) (for all 3 edges)
  • q3=q+f2x+f2y+f2z

Strang split self-gravity:

  • q = q + sg(q,phi)*hdt
  • qLx = Reconstruct(q), etc… (for all 6 qxx states)
  • fx=Riemann_Solve(qLx,qRx), etc… (for all 3 edges)
  • q2 = q+fx+fy+fz
  • q2Lx=qLx+fy+fz etc… (for all 6 q2xx states)
  • f2x=Riemann_Solve(q2Lx,q2Rx) (for all 3 edges)
  • q3=q+f2x+f2y+f2z
  • q3=q3+sq(q3,phi)*hdt

where

sg=sg_x+sg_y+sg+z and sg_x has two non-zero terms…

Momentum conserving self-gravity

  • qLx = Reconstruct(q), etc… (for all 6 qxx states)
  • qLx(px) =qLx(px)+sg_x(q,phi)*hdt
  • qLy(py) = qLy(py)+sg_y(q,phi)*hdt
  • qLy(pz) = qLy(pz)+sg_z(q,phi)*hdt
  • fx=Riemann_Solve(qLx,qRx), etc… (for all 3 edges)
  • q2 = q+fx+fy+fz + sg(q,phi)
  • q2Lx=qLx+fy+fz etc… (for all 6 q2xx states)
  • q2Lx=q2Lx+sg_y(q,phi)+sg_z(q,phi) (for all 6 q2xx states)
  • f2x=Riemann_Solve(q2Lx,q2Rx) (for all 3 edges)
  • f2x(p)=f2x(p)+SG_PFlux_x(phi) (same for y and z)
  • q3=q+f2x+f2y+f2z+SG_E(f2x(rho),f2y(rho), f2z(rho), phi)

The final updates for momentum include true 'fluxes'

SG_PFlux_x(phi) has only 1 non-zero term

and an energy update term that is derived from mass fluxes.

SG_E(f2x, f2y, f2z, phi)

For a description of an algorithm that also conserves energy see http://adsabs.harvard.edu/abs/2013NewA...19...48J

Attachments (2)

Download all attachments as: .zip

Comments

No comments.