Commits  committed 16614d6

mhd docs

  • Participants
  • Parent commits 38a61ce

Comments (0)

Files changed (1)

File doc/manual/source/developer_guide/using_mhd.rst

     ====================== ==================== ===============
     quantity               MHD-RK               MHD-CT
     ====================== ==================== ===============
-    a                      b                    c
     Reconstruction         PLM                  PLM
     Splitting              Unsplit, Runge Kutta Split (strang)
     :math:`\nabla \cdot B` Few Percent          Machine Noise
 these variables.
 Dealing with the Magnetic Field
 ``CenteredB`` should be considered a read-only quantity-- it is
 replaced with a centered spatial average of ``MagneticField`` as necessary.  
 for fields that can be represented by a vector potential.
 Interpolation must be done, obviously, in a divergence-free manner.  Balsara
 2001 describes this method.  Interpolation is done on all three components of
 grids, MHDCT must use the magnetic information from the old fine grids.  This is
 done by first computing interpolation derivatives (done in ``Grid_MHD_CID.C``
 and stored in ``DyBx``, etc) then communicating this information to the relevant
-parent grids (done in ``Grid_SendOldFineGrids.C``)
+parent grids (done in ``Grid_SendOldFineGrids.C``)  This makes MHD-CT
+interpolation a 3 grid interaction (Parent, Child, Old Child) rather than a 2
+body interaction (Parent and Child) as all other fields.
-Future Work
+Projection and Flux Correction
-Make CenteredB a BaryonField.  Or at least, a pointer.
+As with other quantities, magnetic fields need to be projected to parents, then
+coarse zones next to projected zones need to be corrected to ensure
+conservation.  As described by Balsara 2001, this involves area weighted
+projection of face centered field on the fine grid, then a correction using the
+electric field.  In order to simplify the logic and machinery, Enzo MHD-CT
+actually projects the ``ElectricField``, then takes the curl over the new
+magnetic field.  This is formally equivalent to projection plus flux correction,
+but doesn't have as many cases to check and grid interactions to worry about.
+This is done in ``EvolveLevel`` by the routine ``Grid_MHD_UpdateMagneticField``
-Insertion of CT in the MHD-RK formualtion.  
-Fast sibling locator in MHD interpolation.
+Historically, Enzo MHDCT used conserved energy throughout, rather than specific
+energy as done in the rest of Enzo.  Upon porting to Enzo2.3, this was changed,
+but due to some unforeseen issues, this changes the answer.  This is provided to
+ensure compatibility with old answers, and because the author is suspicious
+about that which changes the answer.  This will be removed in the future.
-Non-3d:  MHD really requires 2.5D and 1.5D, since transverse gradients of V and
-B affect the orthogonal components.  Relatively straight forward, somewhat time
+Future Work (or, "Glitches")
+Most neighbor searching throughout Enzo is done with the Fast Neighbor Locator,
+which uses a chaining mesh to identify neighbors.  This is not done for the
+communication done in ``SendOldFineGrids,`` but should be.
+Additionally, both ``SendOldFineGrids`` and the electric field projection need
+to be updated to work with the 3 phase non-blocking communication
+In principle, the CT machinery can be used in conjunction with the MHD-RK
+machinery.  Interested students can contact dcollins for further instruction.
 Presently MHD-CT needs additional layers of ghost zones over the base hydro.  I
-belive that I can reduce this by communicating the electric field, which will
-improve memory overhead.
+believe that I can reduce this by communicating the electric field, which will
+improve memory overhead.  Again, bored students can contact me for details.
+Multi-species needs to be tested.
+Presently, the centered magnetic field is stored in ``CenteredB`` rather than an
+element of the ``BaryonField`` array.  This was done in order to signify that
+the array is "Read Only."  This should probably be changed.
+The mhd interpolation routine, ``mhd_interpolate.F``, is an abomination.  I
+apologize.  I'll fix it some day.