diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 1ee97df..557740b 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-09-27T02:40:52","documenter_version":"1.7.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.0","generation_timestamp":"2024-10-08T14:27:22","documenter_version":"1.7.0"}} \ No newline at end of file diff --git a/dev/examples/index.html b/dev/examples/index.html index 552eee0..5cc2207 100644 --- a/dev/examples/index.html +++ b/dev/examples/index.html @@ -17,4 +17,4 @@

2D contour animation using pyplot

-
+
diff --git a/dev/examples/visualization/demo_animate_1d/index.html b/dev/examples/visualization/demo_animate_1d/index.html index 93f67c7..2c402db 100644 --- a/dev/examples/visualization/demo_animate_1d/index.html +++ b/dev/examples/visualization/demo_animate_1d/index.html @@ -87,4 +87,4 @@ filter(pick_file, readdir(filedir)) end -animate1d(files, vars)

This page was generated using DemoCards.jl.

+animate1d(files, vars)

This page was generated using DemoCards.jl.

diff --git a/dev/examples/visualization/demo_animate_1d_lines/index.html b/dev/examples/visualization/demo_animate_1d_lines/index.html index b5eef82..ff7c577 100644 --- a/dev/examples/visualization/demo_animate_1d_lines/index.html +++ b/dev/examples/visualization/demo_animate_1d_lines/index.html @@ -205,4 +205,4 @@ axs, ls = create_figure() animate(files, axs, ls; icol=1, outdir="figures/", overwrite=true) -close()

This page was generated using DemoCards.jl.

+close()

This page was generated using DemoCards.jl.

diff --git a/dev/examples/visualization/demo_animate_2d/index.html b/dev/examples/visualization/demo_animate_2d/index.html index 5d6e95e..fe402c4 100644 --- a/dev/examples/visualization/demo_animate_2d/index.html +++ b/dev/examples/visualization/demo_animate_2d/index.html @@ -213,4 +213,4 @@ use_conventional_notation = true animate(files; filedir, outdir, var, vmin, vmax, orientation, cmap, streamvars, density, - extend, use_conventional_notation)

This page was generated using DemoCards.jl.

+ extend, use_conventional_notation)

This page was generated using DemoCards.jl.

diff --git a/dev/index.html b/dev/index.html index 9c70b09..4e95ffc 100644 --- a/dev/index.html +++ b/dev/index.html @@ -6,4 +6,4 @@ file = 'test/example.out' data = Batsrus.load(file)

With PyJulia:

from julia import Batsrus
 file = 'test/1d__raw_2_t25.60000_n00000258.out'
-data = Batsrus.load(file)
Python dependency

PyPlot package backend may be affected by the settings of PyJulia dependencies. If you want to set it back properly, you need to recompile the PyCall package in Julia.

Developers

This package inherits the ideas and code structures from its predecessor in IDL (developed by Gábor Tóth) and MATLAB.

Batsrus.jl is developed and maintained by Hongyang Zhou.

Acknowledgments

+data = Batsrus.load(file)
Python dependency

PyPlot package backend may be affected by the settings of PyJulia dependencies. If you want to set it back properly, you need to recompile the PyCall package in Julia.

Developers

This package inherits the ideas and code structures from its predecessor in IDL (developed by Gábor Tóth) and MATLAB.

Batsrus.jl is developed and maintained by Hongyang Zhou.

Acknowledgments

diff --git a/dev/man/internal/index.html b/dev/man/internal/index.html index e772a9e..030e253 100644 --- a/dev/man/internal/index.html +++ b/dev/man/internal/index.html @@ -1,14 +1,14 @@ -Internal · Batsrus.jl

APIs

Batsrus

Batsrus.convertIDLtoVTKMethod
convertIDLtoVTK(filename; gridType=1, verbose=false)

Convert 3D BATSRUS *.out to VTK. If gridType==1, it converts to the rectilinear grid; if gridType==2, it converts to the structured grid. If filename does not end with "out", it tries to find the ".info" and ".tree" file with the same name tag and generates 3D unstructured VTU file.

source
Batsrus.convertTECtoVTUFunction
convertTECtoVTU(file::AbstractString, outname="out")
+Internal · Batsrus.jl

APIs

Batsrus

Batsrus.convertIDLtoVTKMethod
convertIDLtoVTK(filename; gridType=1, verbose=false)

Convert 3D BATSRUS *.out to VTK. If gridType==1, it converts to the rectilinear grid; if gridType==2, it converts to the structured grid. If filename does not end with "out", it tries to find the ".info" and ".tree" file with the same name tag and generates 3D unstructured VTU file.

source
Batsrus.convertTECtoVTUFunction
convertTECtoVTU(file::AbstractString, outname="out")
 convertTECtoVTU(head, data, connectivity, outname="out")

Convert unstructured Tecplot data to VTK. Note that if using voxel type data in VTK, the connectivity sequence is different from Tecplot: the 3D connectivity sequence in Tecplot is the same as the hexahedron type in VTK, but different with the voxel type. The 2D connectivity sequence is the same as the quad type, but different with the pixel type. For example, in 3D the index conversion is:

# PLT to VTK voxel index_ = [1 2 4 3 5 6 8 7]
 for i in 1:2
    connectivity = swaprows!(connectivity, 4*i-1, 4*i)
-end
source
Batsrus.create_pvdMethod
create_pvd(filepattern)

Generate PVD file for a time series collection of VTK data.

Example

create_pvd("*.vtu)
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.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
getvars(bd::BATLData, var::AbstractString) -> Array

Return variable data from string var. This is also supported via direct indexing,

Examples

bd["rho"]

See also: getvars.

source
Batsrus.getvarsMethod
getvars(bd::BATLData, names::Vector) -> Dict

Return variables' data as a dictionary from vector of names. See also: getvar.

source
Batsrus.interp1dMethod
interp1d(bd::BATLData, var::AbstractString, loc::AbstractVector{<:AbstractFloat})

Interpolate var at spatial point loc in bd.

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

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

source
Batsrus.interp2dMethod
interp2d(bd::BATLData, 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 (somehow faster) or NaturalNeighbours for scattered interpolation.
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.setunitsMethod
setunits(filehead, type; distance=1.0, mp=1.0, me=1.0)

Set the units for the output files. If type is given as "SI", "CGS", "NORMALIZED", "PIC", "PLANETARY", "SOLAR", set typeunit = type, otherwise try to guess from the fileheader. Based on typeunit set units for distance [xSI], time [tSI], density [rhoSI], pressure [pSI], magnetic field [bSI] and current density [jSI] in SI units. Distance unit [rplanet | rstar], ion and electron mass in [amu] can be set with optional distance, mp and me.

Also calculate convenient constants ti0, cs0 ... for typical formulas. This function is currently not used anywhere!

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

Batsrus.UnitfulBatsrus.@bu_strMacro
macro bu_str(unit)

String macro to easily recall Batsrus units located in the UnitfulBatsrus package. Although all unit symbols in that package are suffixed with _bu, the suffix should not be used when using this macro. Note that what goes inside must be parsable as a valid Julia expression.

Example

julia> 1.0bu"u"
+end
source
Batsrus.create_pvdMethod
create_pvd(filepattern)

Generate PVD file for a time series collection of VTK data.

Example

create_pvd("*.vtu)
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.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
getvars(bd::BATLData, var::AbstractString) -> Array

Return variable data from string var. This is also supported via direct indexing,

Examples

bd["rho"]

See also: getvars.

source
Batsrus.getvarsMethod
getvars(bd::BATLData, names::Vector) -> Dict

Return variables' data as a dictionary from vector of names. See also: getvar.

source
Batsrus.interp1dMethod
interp1d(bd::BATLData, var::AbstractString, loc::AbstractVector{<:AbstractFloat})

Interpolate var at spatial point loc in bd.

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

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

source
Batsrus.interp2dMethod
interp2d(bd::BATLData, 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 (somehow faster) or NaturalNeighbours for scattered interpolation.
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.setunitsMethod
setunits(filehead, type; distance=1.0, mp=1.0, me=1.0)

Set the units for the output files. If type is given as "SI", "CGS", "NORMALIZED", "PIC", "PLANETARY", "SOLAR", set typeunit = type, otherwise try to guess from the fileheader. Based on typeunit set units for distance [xSI], time [tSI], density [rhoSI], pressure [pSI], magnetic field [bSI] and current density [jSI] in SI units. Distance unit [rplanet | rstar], ion and electron mass in [amu] can be set with optional distance, mp and me.

Also calculate convenient constants ti0, cs0 ... for typical formulas. This function is currently not used anywhere!

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

Batsrus.UnitfulBatsrus.@bu_strMacro
macro bu_str(unit)

String macro to easily recall Batsrus units located in the UnitfulBatsrus package. Although all unit symbols in that package are suffixed with _bu, the suffix should not be used when using this macro. Note that what goes inside must be parsable as a valid Julia expression.

Example

julia> 1.0bu"u"
 1.0 u
 julia> 1.0bu"amucc"
-1.0 amu/cc
source

HDF

Batsrus.HDF.HDF5CommonType

BATSRUS hdf5 file wrapper.

The data are stored in blocks, i.e., each field component is stored in a 4D array in the order (iblock, iz, iy, ix). This is a generic wrapper and does not assume grid type, i.e., uniform, stretched nonuniform, or AMR, etc. Classes to handle data with different grids can be derived from this class.

source
Batsrus.HDF.extract_varMethod
extract_var(file::BatsrusHDF5Uniform, var::String; kwargs...)

Extract variable var from HDF5 file.

Keywords

  • xmin: minimum extracted coordinate in x.
  • xmax: maximum extracted coordinate in x.
  • stepx: extracted stride in x.
  • ymin: minimum extracted coordinate in y.
  • ymax: maximum extracted coordinate in y.
  • stepy: extracted stride in y.
  • zmin: minimum extracted coordinate in z.
  • zmax: maximum extracted coordinate in z.
  • stepz: extracted stride in z.
  • verbose::Bool=true: display type and size information of output variable.
source
Batsrus.HDF.prep_extractMethod
prep_extract(file::BatsrusHDF5Uniform, vmin=-Inf, vmax=Inf, step=1)

Get info for data extraction in 1D.

Keywords

  • vmin, vmax: requested coordinate range (corner values).
  • step: stride.

Returns:

  • gslc: global slice.
  • vmin_new, vmax_new: adjusted coordinate range (corner values).
  • ibmin:ibmax: block range.
source
Batsrus.HDF.prep_extract_per_blockMethod
prep_extract_per_block(file::BatsrusHDF5Uniform, dim, gslc, ib)

Get info for data extraction on a single block.

Arguments

  • gslc: global slice from prep_extract.
  • ib::Int: block index.

Returns

  • lslc: range to be used on the current block.
  • ix0:ix1: index range in the global array.
source
Batsrus.HDF.prepsliceMethod
prepslice(file::BatsrusHDF5Uniform; dim::Int, vmin, vmax, step=1)

Return range that covers [vmin, vmax) along dimension dim.

Returns

  • slc_new: trimed slice. If the object's Nx==1, then 1:1 will be returned.
  • xl_new: adjusted lower corner coordinate matching slc_new.start.
  • xu_new: adjusted lower corner coordinate matching slc_new.stop.
source
Batsrus.HDF.trimsliceMethod
trimslice(start, stop, step, stop_max)

Set slice's start to be nonnegative and start/stop to be within bound. Reverse slicing is not handled.

source
+1.0 amu/cc
source

HDF

Batsrus.HDF.HDF5CommonType

BATSRUS hdf5 file wrapper.

The data are stored in blocks, i.e., each field component is stored in a 4D array in the order (iblock, iz, iy, ix). This is a generic wrapper and does not assume grid type, i.e., uniform, stretched nonuniform, or AMR, etc. Classes to handle data with different grids can be derived from this class.

source
Batsrus.HDF.extract_varMethod
extract_var(file::BatsrusHDF5Uniform, var::String; kwargs...)

Extract variable var from HDF5 file.

Keywords

  • xmin: minimum extracted coordinate in x.
  • xmax: maximum extracted coordinate in x.
  • stepx: extracted stride in x.
  • ymin: minimum extracted coordinate in y.
  • ymax: maximum extracted coordinate in y.
  • stepy: extracted stride in y.
  • zmin: minimum extracted coordinate in z.
  • zmax: maximum extracted coordinate in z.
  • stepz: extracted stride in z.
  • verbose::Bool=true: display type and size information of output variable.
source
Batsrus.HDF.prep_extractMethod
prep_extract(file::BatsrusHDF5Uniform, vmin=-Inf, vmax=Inf, step=1)

Get info for data extraction in 1D.

Keywords

  • vmin, vmax: requested coordinate range (corner values).
  • step: stride.

Returns:

  • gslc: global slice.
  • vmin_new, vmax_new: adjusted coordinate range (corner values).
  • ibmin:ibmax: block range.
source
Batsrus.HDF.prep_extract_per_blockMethod
prep_extract_per_block(file::BatsrusHDF5Uniform, dim, gslc, ib)

Get info for data extraction on a single block.

Arguments

  • gslc: global slice from prep_extract.
  • ib::Int: block index.

Returns

  • lslc: range to be used on the current block.
  • ix0:ix1: index range in the global array.
source
Batsrus.HDF.prepsliceMethod
prepslice(file::BatsrusHDF5Uniform; dim::Int, vmin, vmax, step=1)

Return range that covers [vmin, vmax) along dimension dim.

Returns

  • slc_new: trimed slice. If the object's Nx==1, then 1:1 will be returned.
  • xl_new: adjusted lower corner coordinate matching slc_new.start.
  • xu_new: adjusted lower corner coordinate matching slc_new.stop.
source
Batsrus.HDF.trimsliceMethod
trimslice(start, stop, step, stop_max)

Set slice's start to be nonnegative and start/stop to be within bound. Reverse slicing is not handled.

source
diff --git a/dev/man/log/index.html b/dev/man/log/index.html index 1a7de22..9135264 100644 --- a/dev/man/log/index.html +++ b/dev/man/log/index.html @@ -1,4 +1,4 @@ Log · Batsrus.jl

Development Log

All the workflows here is not restricted to one type of model output. After being familiar with new ideas and new models, one can easily make use of existing samples and create reader of their own. Because of the embarrassing parallelism nature of postprocessing, it is quite easy to take advantage of parallel approaches to process the data.

For the plotting, streamline tracing and particle tracing, a common problem is the grid and related interpolation process. Now I have FieldTracer.jl and TestParticle.jl designed specifically for these tasks.

Test Data

If you don't have SWMF data at hand, Batsrus.jl provides some test data for you to begin with.

using LazyArtifacts
 
-datapath = artifact"testdata" # where you can find multiple test data files

These are also used in the standard test. These will be automatically downloaded from batsrus_data if you run the package test locally.

VTK AMR Grid Structure

vtkOverlappingAMR implements a somewhat strict Berger-Collela AMR scheme:

  1. All grids are Cartesian.
  2. Grids at the same level do not overlap.
  3. The refinement ratios, RL, between adjacent levels are integer (typically 2 or 4) and uniform within the same level.
  4. Grid cells are never partially refined; i.e., each cell is refined to four quads in 2D or eight hexahedra in 3D.

Or in other words,

  • Refinement ratio across levels is constant.
  • Each block at levels > 0 need to be covered 100% by one parent block of

previous level.

  • Some other restriction about what happens at the boundary.

You can directly use vtkUniformGridAMR, which does not impose any restrictions. Most filters should work for this class - there just wouldn't be any specialized filters such as the dual-grid contour / clip ones for the vtkOverlappingAMR.

The vtkAMRInformation documentation consists only of

  • Refinement ratio between AMR levels
  • Grid spacing for each level
  • The file block index for each block parent child information, if requested

sample_2DAMR Sample 2D AMR Dataset with two levels and refinement ratio, RL=4. The root level (L0) consists of a single grid shown in black wireframe while the next level (L1) consists of two grids, depicted in green wireframe and red wireframe respectively. The two grids at L1 are projected from the root level to illustrate that the cells underneath are “hidden.”

In VTK, the collection of AMR grids is stored in a vtkHierarchicalBoxDataSet data-structure. Each grid, G(Li,k), is represented by a vtkUniformGrid data structure where the unique key pair (Li,k) denotes the corresponding level (Li) and the grid index within the level (k) with respect to the underlying hierarchical structure. An array historically known as IBLANK, stored as a cell attribute in vtkUniformGrid, denotes whether a cell is hidden or not. The blanking array is subsequently used by the mapper to hide lower resolution cells accordingly when visualizing the dataset.

To enable the execution of data queries without loading the entire dataset in memory, metadata information is employed. The metadata stores a minimal set of geometric information for each grid in the AMR hierarchy. Specifically, the AMR metadata, B(Li,k), corresponding to the grid G(Li,k), is represented using a vtkAMRBox object and it consists of the following information:

  1. N={Nx, Ny, Nz} — the cell dimensions of the grid (since the data is cell-centered)
  2. The grid spacing at level L, hL={hx,hy,hz}
  3. The grid level Li and grid index k
  4. The global dataset origin, X=(X0, Y0, Z0), i.e., the minimum origin from all grids in level L0
  5. The LoCorner and HiCorner, which describe the low and high corners of the rectangular region covered by the corresponding grid in a virtual integer lattice with the same spacing (h) that covers the entire domain.

sample_2DAMR

Given the metadata information stored in the AMR box of each grid, the refinement ratio at each level can be easily computed using relationship (1) from Table 1. Further, the cartesian bounds the corresponding grid covers and the number of points and cells is also available (see relationships 2-4 in Table 1). Notably, geometric queries such as determining which cell contains a given point, or if a grid intersects a user-supplied slice plane, can be answered using just the metadata.

There is a vtkAMRDualExtractionFilter, which constructs a dual-mesh (i.e., the mesh constructed by connecting the cell-centers) over the computational domain. If we can directly tell ParaView that the mesh we have is a dual-mesh, then the initial trial with multi-block data may work directly.

AMRGaussianPulseSource

See Multi-Resolution Rendering with Overlapping AMR for the implementation of C++ reader in VTK.

+datapath = artifact"testdata" # where you can find multiple test data files

These are also used in the standard test. These will be automatically downloaded from batsrus_data if you run the package test locally.

VTK AMR Grid Structure

vtkOverlappingAMR implements a somewhat strict Berger-Collela AMR scheme:

  1. All grids are Cartesian.
  2. Grids at the same level do not overlap.
  3. The refinement ratios, RL, between adjacent levels are integer (typically 2 or 4) and uniform within the same level.
  4. Grid cells are never partially refined; i.e., each cell is refined to four quads in 2D or eight hexahedra in 3D.

Or in other words,

previous level.

You can directly use vtkUniformGridAMR, which does not impose any restrictions. Most filters should work for this class - there just wouldn't be any specialized filters such as the dual-grid contour / clip ones for the vtkOverlappingAMR.

The vtkAMRInformation documentation consists only of

sample_2DAMR Sample 2D AMR Dataset with two levels and refinement ratio, RL=4. The root level (L0) consists of a single grid shown in black wireframe while the next level (L1) consists of two grids, depicted in green wireframe and red wireframe respectively. The two grids at L1 are projected from the root level to illustrate that the cells underneath are “hidden.”

In VTK, the collection of AMR grids is stored in a vtkHierarchicalBoxDataSet data-structure. Each grid, G(Li,k), is represented by a vtkUniformGrid data structure where the unique key pair (Li,k) denotes the corresponding level (Li) and the grid index within the level (k) with respect to the underlying hierarchical structure. An array historically known as IBLANK, stored as a cell attribute in vtkUniformGrid, denotes whether a cell is hidden or not. The blanking array is subsequently used by the mapper to hide lower resolution cells accordingly when visualizing the dataset.

To enable the execution of data queries without loading the entire dataset in memory, metadata information is employed. The metadata stores a minimal set of geometric information for each grid in the AMR hierarchy. Specifically, the AMR metadata, B(Li,k), corresponding to the grid G(Li,k), is represented using a vtkAMRBox object and it consists of the following information:

  1. N={Nx, Ny, Nz} — the cell dimensions of the grid (since the data is cell-centered)
  2. The grid spacing at level L, hL={hx,hy,hz}
  3. The grid level Li and grid index k
  4. The global dataset origin, X=(X0, Y0, Z0), i.e., the minimum origin from all grids in level L0
  5. The LoCorner and HiCorner, which describe the low and high corners of the rectangular region covered by the corresponding grid in a virtual integer lattice with the same spacing (h) that covers the entire domain.

sample_2DAMR

Given the metadata information stored in the AMR box of each grid, the refinement ratio at each level can be easily computed using relationship (1) from Table 1. Further, the cartesian bounds the corresponding grid covers and the number of points and cells is also available (see relationships 2-4 in Table 1). Notably, geometric queries such as determining which cell contains a given point, or if a grid intersects a user-supplied slice plane, can be answered using just the metadata.

There is a vtkAMRDualExtractionFilter, which constructs a dual-mesh (i.e., the mesh constructed by connecting the cell-centers) over the computational domain. If we can directly tell ParaView that the mesh we have is a dual-mesh, then the initial trial with multi-block data may work directly.

AMRGaussianPulseSource

See Multi-Resolution Rendering with Overlapping AMR for the implementation of C++ reader in VTK.

diff --git a/dev/man/manual/index.html b/dev/man/manual/index.html index 1681f36..27059ab 100644 --- a/dev/man/manual/index.html +++ b/dev/man/manual/index.html @@ -80,4 +80,4 @@ x1, z1 = trace2d_eul(bx, bz, xs, zs, x, z, ds=0.1, maxstep=1000, gridType="ndgrid") plot(x1, z1, "--") end -axis("equal")

Currently the select_seeds function uses pseudo random number generator that produces the same seeds every time.

+axis("equal")

Currently the select_seeds function uses pseudo random number generator that produces the same seeds every time.

diff --git a/dev/objects.inv b/dev/objects.inv index c709a9b..57ba628 100644 Binary files a/dev/objects.inv and b/dev/objects.inv differ