The University of Michigan magnetohydrodynamic
(MHD) code BATSRUS solves the MHD equations on a
blockadaptive grid. The code is based on a finite volume approach
with selfsimilar blocks. The parallel AMR solver was designed from
the ground up with a view to achieving very high performance on
massively parallel architectures. The hierarchical data structure and
selfsimilar blocks make domain decomposition easy and readily enable
good loadbalancing, a crucial element for truly scalable
computing. The computational cells are embedded in regular structured
blocks. Starting with an initial mesh, adaptation is accomplished by
the dividing and refining of appropriate solution blocks or the
converse. Other features of the parallel implementation include the
use of FORTRAN 90 as the programming language and the message passing
interface (MPI) library for performing the interprocessor
communication. Use of these standards greatly enhances the
portability of the code and leads to very good serial and parallel
performance. The message passing is performed in an asynchronous
fashion with gathered wait states and message
consolidation. BATSRUS nearly perfectly scales to 1,500
processors.
The present implementation of BATSRUS supports Cartesian (x,y,z),
cylindrical (r,φ,z), or spherical (R or log(R),φ,θ)
coordinate systems. Both the cylindrical and spherical grids are
applicable for simulating toroidal plasma configurations. Cylindrical
grids one better suited for configurations in which the axis of
symmetry (or pole) is isolated from the simulation domain (such as
tokamak, stellarator, FRS). On the other hand, spherical coordinates
are favorable for spheromaklike configurations. The use of classical
toroidal coordinates for a simulation is challenging due to the
strongly stretched control volumes near the toroidal pole, but such
toroidal grids will be available at least for presenting and
visualizing the simulation results. A powerful parallel "coupling
toolkit" has been recently developed at Michigan that can efficiently
interpolate from one type of grid to another (like
cylindricaltotoroidal).
