APIs

Batsrus

Batsrus.classify_particlesMethod
classify_particles(data, region; vdim=3, bulk_vel=nothing, vth=nothing, nsigma=3.0)

Classify particles in a spatial region into core Maxwellian and suprathermal populations.

Arguments

  • data::AMReXParticle: Particle data.
  • region: Passed as kwargs x_range, y_range, z_range.
  • vdim: Velocity dimension (1, 2, or 3).
  • bulk_vel: Core bulk velocity. If nothing, estimated from peak density.
  • vth: Core thermal velocity. Must be provided.
  • nsigma: Threshold for classification in units of thermal velocity.

Returns

  • (core, suprathermal): Two matrices containing the classified particles.
source
Batsrus.cutdataMethod
cutdata(data, var; plotrange=[-Inf,Inf,-Inf,Inf], dir="x", sequence=1)

Get 2D plane cut in orientation dir for var out of 3D box data within plotrange. The returned 2D data lies in the sequence plane from - to + in dir.

source
Batsrus.fillCellNeighbors!Method
 fillCellNeighbors!(batl, iCell_G, DiLevelNei_III, iNodeNei_III, nBlock_P)

Fill neighbor cell indexes for the given block. The faces, edges, and vertices are ordered from left (-) to right (+) in x-y-z sequentially.

Vertices: Edges: (10,11 ignored)

7 ----- 8        . --4-- .
  • . - . 7 . 8 . 5 ––- 6 . . –3– . 12 . . . . . . . . . 3 ––- 4 9 . –2– . . - . - . 5 . 6 1 ––- 2 . –1– .

Only tested for 3D.

source
Batsrus.find_grid_blockMethod
 find_grid_block(batl, xyz_D)

Return processor local block index that contains a point. Input location should be given in Cartesian coordinates.

source
Batsrus.find_tree_nodeMethod
 find_tree_node(batl, Coord_D)

Find the node that contains a point. The point coordinates should be given in generalized coordinates normalized by the domain size.

source
Batsrus.generate_mock_amrex_dataMethod
 generate_mock_amrex_data(output_dir::String; num_particles::Int=10, 
    real_component_names::Vector{String}=["u", "v"],
    particle_gen::Function)

Generate mock AMReX particle data for testing and benchmarking.

Arguments

  • output_dir::String: Directory to save the mock data.
  • num_particles::Int: Number of particles to generate.
  • real_component_names::Vector{String}: Names of the extra real components (beyond x, y, z).
  • particle_gen::Function: A function (i, n_reals) -> tuple that takes an index i (1-based) and the total number of real components n_reals. It should return a tuple of n_reals Float64 values: (x, y, z, comp1, comp2, ...).
source
Batsrus.getRotationMatrixMethod
 getRotationMatrix(axis::AbstractVector, angle::Real) --> SMatrix{3,3}

Create a rotation matrix for rotating a 3D vector around a unit axis by an angle in radians. Reference: Rotation matrix from axis and angle

Example

using LinearAlgebra
v = [-0.5, 1.0, 1.0]
v̂ = normalize(v)
θ = deg2rad(-74)
R = getRotationMatrix(v̂, θ)
source
Batsrus.get_anisotropyMethod
get_anisotropy(bd::BatsrusIDL, species=0)

Calculate the pressure anisotropy for species, indexing from 0. The default method is based on the fact that the trace of the pressure tensor is a constant. The rotation method is based on rotating the tensor.

source
Batsrus.get_core_population_maskMethod
get_core_population_mask(velocities, bulk_vel, vth, nsigma=3.0)

Identify core population particles based on velocity distribution. Returns a BitVector where true indicates a core particle.

source
Batsrus.get_particle_field_aligned_transformFunction
get_particle_field_aligned_transform(b_field, e_field=nothing)

Return a transformation function that converts particle data to a field-aligned coordinate system.

If only b_field is provided, the velocity components are decomposed into parallel and perpendicular to the magnetic field. If e_field is also provided, an orthonormal basis ($\hat{\mathbf{b}}$, $\hat{\mathbf{e}}$, $\hat{\mathbf{d}}$) is created, where $\hat{\mathbf{d}} \propto \mathbf{B} \times \mathbf{E}$ and $\hat{\mathbf{e}} = \hat{\mathbf{d}} \times \hat{\mathbf{b}}$.

The returned function takes (data, names) and returns (new_data, new_names).

source
Batsrus.get_timeseriesMethod
get_timeseries(files::AbstractArray, loc; tstep = 1.0)

Extract plasma moments and EM field from PIC output files at loc with nearest neighbor. Currently only works for 2D outputs. If a single point variable is needed, see interp1d.

source
Batsrus.get_vectorsMethod
get_vectors(bd::BatsrusIDL, var)

Return a tuple of vectors of var. var can be :B, :E, :U, or any :U followed by an index (e.g. :U0 for species 0, :U1 for species 1, etc.).

source
Batsrus.getfileheadMethod
getfilehead(fileID::IoStream, filelist::FileList) -> NameTuple

Obtain the header information from BATSRUS output file of type linked to fileID.

Input arguments

  • fileID::IOStream: file identifier.
  • filelist::FileList: file information.
source
Batsrus.getvarMethod
 getvar(bd::BATS, var::AbstractString) -> Array

Return variable data from string var. This is also supported via direct indexing. Note that the query variable var must be in lowercase!

Examples

bd["rho"]
source
Batsrus.interp1dMethod
 interp1d(bd::BatsrusIDLStructured, var::AbstractString, loc::AbstractVector{<:AbstractFloat})

Interpolate var at spatial point loc in bd.

source
Batsrus.interp1dMethod
 interp1d(bd::BatsrusIDLStructured, var::AbstractString, point1::Vector, point2::Vector)

Interpolate var along a line from point1 to point2 in bd.

source
Batsrus.interp2dFunction
 interp2d(bd::BatsrusIDL, var::AbstractString, plotrange=[-Inf, Inf, -Inf, Inf],
	 plotinterval=Inf; kwargs...)

Return 2D interpolated slices of data var from bd. If plotrange is not set, output data resolution is the same as the original.

Keyword Arguments

  • innermask=false: Whether to mask the inner boundary with NaN.
  • rbody=1.0: Radius of the inner mask. Used when the rbody parameter is not found in the header.
  • useMatplotlib=true: Whether to Matplotlib (faster) or NaturalNeighbours for scattered interpolation. If true, a linear interpolation is performed on a constructed triangle mesh.
source
Batsrus.loadMethod
load(filename; npict=1, verbose=false)

Read BATSRUS output files. Stores the npict snapshot from an ascii or binary data file into the arrays of coordinates x and data w.

source
Batsrus.order_children!Method
 order_children!(batl::Batl, iNode, iMorton::Int, iNodeMorton_I::Vector{Int32})

Recursively apply Morton ordering for nodes below a root block. Store result into iNodeMortonI and iMortonNodeA using the iMorton index.

source
Batsrus.order_treeMethod
 order_tree(batl)

Return maximum AMR level in the used block and the Morton curve order. Set iNodeMorton_I indirect index arrays according to

  1. root node order
  2. Morton ordering for each root node
source
Batsrus.readtecdataMethod
readtecdata(file; verbose=false)

Return header, data and connectivity from BATSRUS Tecplot outputs. Both 2D and 3D binary and ASCII formats are supported.

Examples

file = "3d_ascii.dat"
head, data, connectivity = readtecdata(file)
source
Batsrus.rotateTensorToVectorZMethod
 rotateTensorToVectorZ(tensor::AbstractMatrix, v::AbstractVector) -> SMatrix{3,3}

Rotate tensor with a rotation matrix that aligns the 3rd direction with vector, which is equivalent to change the basis from (i,j,k) to (i′,j′,k′) where k′ ∥ vector. Reference: Tensor rotation

source
Batsrus.showheadFunction
showhead(file, head)
showhead(data)
showhead(io, data)

Displaying file header information of BATSRUS data.

source
Batsrus.slice1dFunction
 slice1d(bd, var, icut::Int=1, dir::Int=2)

Return view of variable var in bd along 1D slice. icut is the index along axis dir. dir == 1 means align with the 2nd (y) axis, dir == 2 means align with the 1st (x) axis.

source
Batsrus.subsurfaceMethod
subsurface(x, y, data, limits)
subsurface(x, y, u, v, limits)

Extract subset of 2D surface dataset in ndgrid format. See also: subvolume.

source
Batsrus.subvolumeMethod
subvolume(x, y, z, data, limits)
subvolume(x, y, z, u, v, w, limits)

Extract subset of 3D dataset in ndgrid format. See also: subsurface.

source

UnitfulBatsrus

HDF5 Extension

The HDF5 functionality is provided via a package extension. Load HDF5 alongside Batsrus to enable it:

using Batsrus, HDF5