Hydro Data: First Inspection
This notebook provides a comprehensive introduction to loading and analyzing hydrodynamic simulation data using Mera.jl. You'll learn the fundamentals of working with RAMSES hydro data and AMR (Adaptive Mesh Refinement) structures.
Learning Objectives
- Load and inspect hydrodynamic simulation data
- Understand AMR (Adaptive Mesh Refinement) grid structures
- Analyze basic properties and statistics of hydro data
- Handle different variable types and unit conversions
- Work with IndexedTables data structures
- Apply memory management best practices
Quick Reference: Essential Hydro Functions
This section provides a comprehensive reference of key Mera.jl functions for hydro data analysis.
Data Loading Functions
# Load simulation metadata with hydro information
info = getinfo(output_number, "path/to/simulation")
info = getinfo(300, "/path/to/sim")                    # Specific output
info = getinfo("/path/to/sim")                         # First output
# Load hydro data - basic usage
gas = gethydro(info)                                   # Load all variables, all levels
Data Exploration Functions
# Analyze data structure and properties
overview_amr = amroverview(gas)                        # AMR grid structure analysis
data_overview = dataoverview(gas)                     # Statistical overview of variables
usedmemory(gas)                                        # Memory usage analysis
# Explore object structure
viewfields(gas)                                        # View HydroDataType structure
viewfields(info.descriptor)                           # View descriptor properties
propertynames(gas)                                     # List all available fieldsVariable and Descriptor Management
# Access and modify variable descriptors
info.descriptor.hydro                                  # Current hydro variable names
info.descriptor.hydro[2] = :vel_x                     # Customize variable names
propertynames(info.descriptor)                        # All descriptor properties
# Access predefined variables (always available)
# :rho, :vx, :vy, :vz, :p, :var6, :var7, ...IndexedTables Operations
# Work with data tables
using Mera.IndexedTables
# Select specific columns
select(gas.data, (:level, :cx, :cy, :cz, :rho))      # View spatial coordinates + density
select(data_overview, (:level, :mass, :rho_min, :rho_max)) # Statistical summary (table from before)
# Extract column data
column(data_overview, :mass)                          # Extract mass column as array
column(data_overview, :mass) * info.scale.Msol       # Convert to solar masses
# Transform data in-place
transform(data_overview, :mass => :mass => value->value * info.scale.Msol)Unit Conversion
# Access scaling factors
scale = gas.scale                                      # Shortcut to scaling factors
constants = gas.info.constants                        # Physical constants
create
Memory Management
# Monitor and optimize memory usage
usedmemory(gas)                                        # Check current memory usage
gas = nothing; GC.gc()                                # Clear variable and garbage collect
Common Analysis Workflow
# Standard hydro data analysis workflow
info = getinfo(300, "/path/to/simulation")            # Load simulation metadata
gas = gethydro(info)                                  # Load hydro data
usedmemory(gas)                                        # Check memory usage
# Analyze structure and properties
amr_overview = amroverview(gas)                        # AMR grid analysis
data_overview = dataoverview(gas)                     # Variable statistics
viewfields(gas)                                        # Explore data structure
# Convert units and extract specific data
scale = gas.scale                                      # Create scaling shortcut
density_gcm3 = select(gas.data, :rho) * scale.g_cm3   # Physical density
mass_dist = select(data_overview, (:level, :mass))    # Mass distribution by levelData Quality and Constraints
# Set physical constraints during loading
gas = gethydro(info, smallr=1e-11)                    # Minimum density floor
gas = gethydro(info, smallc=1e5)                      # Minimum sound speed
# Check data integrity
data_overview = dataoverview(gas)                     # Look for unrealistic values
select(data_overview, (:rho_min, :rho_max))          # Check density rangesGetting Started
This tutorial section will walk you through practical examples of hydro data analysis. We'll start with basic setup and progress through increasingly sophisticated analysis techniques.
Initial Setup and Data Loading
We'll begin by loading simulation data and exploring its properties to understand:
- Basic simulation parameters and hydro configuration
- Available hydrodynamic variables and their organization
- File structure and data layout
- AMR grid properties and refinement levels
Package Import and Initial Setup
Let's start by importing Mera.jl and loading simulation information for output 300:
using Mera
info = getinfo(300, "/Volumes/FASTStorage/Simulations/Mera-Tests/mw_L10");[Mera]: 2025-08-14T14:11:39.130
Code: RAMSES
output [300] summary:
mtime: 2023-04-09T05:34:09
ctime: 2025-06-21T18:31:24.020
=======================================================
simulation time: 445.89 [Myr]
boxlen: 48.0 [kpc]
ncpu: 640
ndim: 3
-------------------------------------------------------
amr:           true
level(s): 6 - 10 --> cellsize(s): 750.0 [pc] - 46.88 [pc]
-------------------------------------------------------
hydro:         true
hydro-variables:  7  --> (:rho, :vx, :vy, :vz, :p, :var6, :var7)
hydro-descriptor: (:density, :velocity_x, :velocity_y, :velocity_z, :pressure, :scalar_00, :scalar_01)
γ: 1.6667
-------------------------------------------------------
gravity:       true
gravity-variables: (:epot, :ax, :ay, :az)
-------------------------------------------------------
particles:     true
- Nstars:   5.445150e+05
particle-variables: 7  --> (:vx, :vy, :vz, :mass, :family, :tag, :birth)
particle-descriptor: (:position_x, :position_y, :position_z, :velocity_x, :velocity_y, :velocity_z, :mass, :identity, :levelp, :family, :tag, :birth_time)
-------------------------------------------------------
rt:            false
clumps:           false
-------------------------------------------------------
namelist-file: ("&COOLING_PARAMS", "&SF_PARAMS", "&AMR_PARAMS", "&BOUNDARY_PARAMS", "&OUTPUT_PARAMS", "&POISSON_PARAMS", "&RUN_PARAMS", "&FEEDBACK_PARAMS", "&HYDRO_PARAMS", "&INIT_PARAMS", "&REFINE_PARAMS")
-------------------------------------------------------
timer-file:       true
compilation-file: false
makefile:         true
patchfile:        true
=======================================================
Understanding Hydro Properties
The output above provides a comprehensive overview of the loaded hydro data properties:
- Hydro files status - Confirms existence and accessibility of hydro data files
- Variable count - Shows the number of predefined and available hydro variables
- Variable names - Lists the variable names from the RAMSES descriptor file
- Adiabatic index - Displays the thermodynamic properties used in the simulation
- Data organization - Reveals how the hydro data is structured and stored
Variable Names and Descriptors
Predefined Variable Names: Mera.jl recognizes standard hydro variable names such as :rho, :vx, :vy, :vz, :p, :var6, :var7, etc. These provide a consistent interface for accessing common hydrodynamic quantities across different simulations.
Custom Variable Descriptors: In future versions, you will be able to use variable names directly from the hydro descriptor by setting info.descriptor.usehydro = true. Currently, you can customize variable names by modifying the descriptor array manually.
Let's examine the current hydro descriptor configuration:
info.descriptor.hydro7-element Vector{Symbol}:
 :density
 :velocity_x
 :velocity_y
 :velocity_z
 :pressure
 :scalar_00
 :scalar_01Customizing Variable Names
You can modify variable names in the descriptor to better match your simulation setup or personal preferences. For example, changing the second hydro variable to a more descriptive name:
info.descriptor.hydro[2] = :vel_x;info.descriptor.hydro7-element Vector{Symbol}:
 :density
 :vel_x
 :velocity_y
 :velocity_z
 :pressure
 :scalar_00
 :scalar_01Exploring Descriptor Properties
Let's examine the complete structure of the descriptor object to understand all available configuration options:
viewfields(info.descriptor)
[Mera]: Descriptor overview
=================================
hversion	= 1
hydro	= [:density, :vel_x, :velocity_y, :velocity_z, :pressure, :scalar_00, :scalar_01]
htypes	= ["d", "d", "d", "d", "d", "d", "d"]
usehydro	= false
hydrofile	= true
pversion	= 1
particles	= [:position_x, :position_y, :position_z, :velocity_x, :velocity_y, :velocity_z, :mass, :identity, :levelp, :family, :tag, :birth_time]
ptypes	= ["d", "d", "d", "d", "d", "d", "d", "i", "i", "b", "b", "d"]
useparticles	= false
particlesfile	= true
gravity	= [:epot, :ax, :ay, :az]
usegravity	= false
gravityfile	= false
rtversion	= 0
rt	= Dict{Any, Any}()
rtPhotonGroups	= Dict{Any, Any}()
usert	= false
rtfile	= false
clumps	= Symbol[]
useclumps	= false
clumpsfile	= false
sinks	= Symbol[]
usesinks	= false
sinksfile	= false
For a simple list of all available descriptor fields:
propertynames(info.descriptor)(:hversion, :hydro, :htypes, :usehydro, :hydrofile, :pversion, :particles, :ptypes, :useparticles, :particlesfile, :gravity, :usegravity, :gravityfile, :rtversion, :rt, :rtPhotonGroups, :usert, :rtfile, :clumps, :useclumps, :clumpsfile, :sinks, :usesinks, :sinksfile)Loading Hydro Data
Now that we understand our simulation's structure and variable organization, let's load the actual hydrodynamic data. We'll use Mera's powerful data loading capabilities to read both the AMR grid structure and the hydrodynamic variables.
Data Loading Overview
The gethydro() function is the primary tool for loading hydrodynamic data from RAMSES simulations. It provides extensive options for:
- Variable selection - Choose specific hydro quantities
- Spatial filtering - Focus on regions of interest
- AMR level control - Select refinement levels
- Physical constraints - Set minimum values (e.g., density floors)
Resetting Simulation Information
First, let's reload the simulation information to reset any changes we made to the descriptor:
info = getinfo(300, "/Volumes/FASTStorage/Simulations/Mera-Tests/mw_L10", verbose=false); # here, used to overwrite the previous changesLoading Complete Hydro Dataset
Now let's load the AMR and hydro data from all files. This will read:
- Full simulation box - All spatial regions
- All available variables - All hydro quantities present in the files
- All AMR levels - Complete refinement hierarchy
- Cell positions - Only leaf cells (actual data cells, not parent cells)
gas = gethydro(info);[Mera]: Get hydro data: 2025-08-14T14:06:57.893
Key vars=(:level, :cx, :cy, :cz)
Using var(s)=(1, 2, 3, 4, 5, 6, 7) = (:rho, :vx, :vy, :vz, :p, :var6, :var7)
domain:
xmin::xmax: 0.0 :: 1.0  	==> 0.0 [kpc] :: 48.0 [kpc]
ymin::ymax: 0.0 :: 1.0  	==> 0.0 [kpc] :: 48.0 [kpc]
zmin::zmax: 0.0 :: 1.0  	==> 0.0 [kpc] :: 48.0 [kpc]
📊 Processing Configuration:
   Total CPU files available: 640
   Files to be processed: 640
   Compute threads: 8
   GC threads: 4
Processing files: 100%|██████████████████████████████████████████████████| Time: 0:00:26 (40.85 ms/it)
✓ File processing complete! Combining results...
✓ Data combination complete!
Final data size: 28320979 cells, 7 variables
Creating Table from 28320979 cells with max 8 threads...
  Threading: 8 threads for 11 columns
  Max threads requested: 8
  Available threads: 8
  Using parallel processing with 8 threads
  Creating IndexedTable with 11 columns...
 29.318513 seconds (623.38 M allocations: 26.965 GiB, 5.35% gc time, 3.77% compilation time)
✓ Table created in 29.506 seconds
Memory used for data table :2.321086215786636 GB
-------------------------------------------------------
Memory Usage Analysis
The memory consumption of the loaded data is displayed automatically. For detailed memory analysis of any object, Mera.jl provides the usedmemory() function:
usedmemory(gas);Memory used: 2.321 GB
Understanding Data Types
The loaded data object is now of type HydroDataType, which is specifically defined for hydro simulation data:
typeof(gas)HydroDataTypeType Hierarchy
HydroDataType is part of a well-organized type hierarchy. It's a sub-type of ContainMassDataSetType:
# Which in turn is a subtype of the general `DataSetType`.
supertype( ContainMassDataSetType )DataSetType# HydroDataType is a subtype of the combined HydroPartType, useful for functions that can handle hydro and particle data
supertype( HydroDataType )HydroPartTypesupertype( HydroPartType )ContainMassDataSetType
Data Organization and Structure
The hydro data is stored in an IndexedTables format, with user-selected variables and parameters organized into accessible fields. Let's explore the structure:
viewfields(gas)
data ==> IndexedTables: (:level, :cx, :cy, :cz, :rho, :vx, :vy, :vz, :p, :var6, :var7)
info ==> subfields: (:output, :path, :fnames, :simcode, :mtime, :ctime, :ncpu, :ndim, :levelmin, :levelmax, :boxlen, :time, :aexp, :H0, :omega_m, :omega_l, :omega_k, :omega_b, :unit_l, :unit_d, :unit_m, :unit_v, :unit_t, :gamma, :hydro, :nvarh, :nvarp, :nvarrt, :variable_list, :gravity_variable_list, :particles_variable_list, :rt_variable_list, :clumps_variable_list, :sinks_variable_list, :descriptor, :amr, :gravity, :particles, :rt, :clumps, :sinks, :namelist, :namelist_content, :headerfile, :makefile, :files_content, :timerfile, :compilationfile, :patchfile, :Narraysize, :scale, :grid_info, :part_info, :compilation, :constants)
lmin	= 6
lmax	= 10
boxlen	= 48.0
ranges	= [0.0, 1.0, 0.0, 1.0, 0.0, 1.0]
selected_hydrovars	= [1, 2, 3, 4, 5, 6, 7]
smallr	= 0.0
smallc	= 0.0
scale ==> subfields: (:Mpc, :kpc, :pc, :mpc, :ly, :Au, :km, :m, :cm, :mm, :μm, :Mpc3, :kpc3, :pc3, :mpc3, :ly3, :Au3, :km3, :m3, :cm3, :mm3, :μm3, :Msol_pc3, :Msun_pc3, :g_cm3, :Msol_pc2, :Msun_pc2, :g_cm2, :Gyr, :Myr, :yr, :s, :ms, :Msol, :Msun, :Mearth, :Mjupiter, :g, :km_s, :m_s, :cm_s, :nH, :erg, :g_cms2, :T_mu, :K_mu, :T, :K, :Ba, :g_cm_s2, :p_kB, :K_cm3, :erg_g_K, :keV_cm2, :erg_K, :J_K, :erg_cm3_K, :J_m3_K, :kB_per_particle, :J_s, :g_cm2_s, :kg_m2_s, :Gauss, :muG, :microG, :Tesla, :eV, :keV, :MeV, :erg_s, :Lsol, :Lsun, :cm_3, :pc_3, :n_e, :erg_g_s, :erg_cm3_s, :erg_cm2_s, :Jy, :mJy, :microJy, :atoms_cm2, :NH_cm2, :cm_s2, :m_s2, :km_s2, :pc_Myr2, :erg_g, :J_kg, :km2_s2, :u_grav, :erg_cell, :dyne, :s_2, :lambda_J, :M_J, :t_ff, :alpha_vir, :delta_rho, :a_mag, :v_esc, :ax, :ay, :az, :epot, :a_magnitude, :escape_speed, :gravitational_redshift, :gravitational_energy_density, :gravitational_binding_energy, :total_binding_energy, :specific_gravitational_energy, :gravitational_work, :jeans_length_gravity, :jeans_mass_gravity, :jeansmass, :freefall_time_gravity, :ekin, :etherm, :virial_parameter_local, :Fg, :poisson_source, :ar_cylinder, :aϕ_cylinder, :ar_sphere, :aθ_sphere, :aϕ_sphere, :r_cylinder, :r_sphere, :ϕ, :dimensionless, :rad, :deg)
Convenient Data Access
For convenience, all fields from the original InfoType object are now accessible through:
- gas.info- All simulation metadata and parameters
- gas.scale- Scaling relations for converting from code units to physical units
The data object also retains important structural information:
- Minimum and maximum AMR levels of the loaded data
- Box dimensions and coordinate ranges
- Selected spatial regions and filtering parameters
- Number and names of loaded hydro variables
Setting Physical Constraints
You can set minimum values for density and sound speed when loading data. This is useful for:
- Overwriting negative densities that may arise from numerical errors
- Setting physical floors to prevent unphysical values
The constraints are stored in the smallr (density) and smallc (sound speed) fields. Example:
gas = gethydro(info, smallr=1e-11);[Mera]: Get hydro data: 2025-08-14T14:07:58.059
Key vars=(:level, :cx, :cy, :cz)
Using var(s)=(1, 2, 3, 4, 5, 6, 7) = (:rho, :vx, :vy, :vz, :p, :var6, :var7)
domain:
xmin::xmax: 0.0 :: 1.0  	==> 0.0 [kpc] :: 48.0 [kpc]
ymin::ymax: 0.0 :: 1.0  	==> 0.0 [kpc] :: 48.0 [kpc]
zmin::zmax: 0.0 :: 1.0  	==> 0.0 [kpc] :: 48.0 [kpc]
📊 Processing Configuration:
   Total CPU files available: 640
   Files to be processed: 640
   Compute threads: 8
   GC threads: 4
Processing files: 100%|██████████████████████████████████████████████████| Time: 0:00:26 (41.14 ms/it)
✓ File processing complete! Combining results...
✓ Data combination complete!
Final data size: 28320979 cells, 7 variables
Creating Table from 28320979 cells with max 8 threads...
  Threading: 8 threads for 11 columns
  Max threads requested: 8
  Available threads: 8
  Using parallel processing with 8 threads
  Creating IndexedTable with 11 columns...
 27.856846 seconds (618.29 M allocations: 26.622 GiB, 5.49% gc time)
✓ Table created in 28.061 seconds
Memory used for data table :2.321086215786636 GB
-------------------------------------------------------
Quick Field Reference
For a simple list of all available fields in the hydro data object:
propertynames(gas)(:data, :info, :lmin, :lmax, :boxlen, :ranges, :selected_hydrovars, :used_descriptors, :smallr, :smallc, :scale)Data Analysis and Exploration
Now that we have loaded our hydro data, let's explore its structure and properties in detail. This section demonstrates the key analysis functions available in Mera.jl.
Analysis Overview
We'll cover two main types of analysis:
- AMR Structure Analysis - Understanding the adaptive mesh refinement hierarchy, analyzing refinement level distribution, and examining grid properties and spatial organization 
- Statistical Data Overview - Computing basic statistical properties of hydro variables, understanding data ranges and distributions, and assessing data quality 
AMR Grid Structure Analysis
The amroverview() function provides detailed information about the adaptive mesh refinement structure associated with our hydro data. The analysis includes:
- Level distribution - Number of cells at each refinement level
The results are returned as an IndexedTables in code units, ready for further analysis:
overview_amr = amroverview(gas)Counting...
Table with 5 rows, 3 columns:
level  cells     cellsize
─────────────────────────
6      66568     0.75
7      374908    0.375
8      7806793   0.1875
9      12774134  0.09375
10     7298576   0.046875Statistical Data Analysis
The dataoverview() function computes comprehensive statistics for all hydro variables in our dataset. This analysis provides:
- Variable ranges - Minimum and maximum values for each quantity
The calculated information is stored in code units and can be accessed for further analysis:
data_overview = dataoverview(gas)Calculating...
 100%|███████████████████████████████████████████████████| Time: 0:02:22
Table with 5 rows, 16 columns:
Columns:
#   colname   type
──────────────────
1   level     Any
2   mass      Any
3   rho_min   Any
4   rho_max   Any
5   vx_min    Any
6   vx_max    Any
7   vy_min    Any
8   vy_max    Any
9   vz_min    Any
10  vz_max    Any
11  p_min     Any
12  p_max     Any
13  var6_min  Any
14  var6_max  Any
15  var7_min  Any
16  var7_max  AnyWorking with IndexedTables
When dealing with tables containing many columns, only a summary view is typically displayed. To access specific columns, use the select() function.
Important Notes:
- Column names are specified as quoted Symbols (:column_name)
- For more details, see the Julia documentation on Symbols
- The select()function maintains data order and relationships
Let's select specific columns to examine level-wise mass and density statistics:
using Mera.IndexedTables # to import the IndexedTables package, which is a dependency of Meraselect(data_overview, (:level,:mass, :rho_min, :rho_max ) )Table with 5 rows, 4 columns:
level  mass         rho_min     rho_max
───────────────────────────────────────────
6      0.000698165  2.61776e-9  1.16831e-7
7      0.00126374   1.15139e-8  2.21103e-7
8      0.0201245    2.44071e-8  0.000222309
9      0.204407     1.2142e-7   0.0141484
10     6.83618      4.49036e-7  3.32984Unit Conversion Example
Extract mass data from a specific column and convert it to solar masses. The column() function retrieves data from a specific table column, maintaining the order consistent with the table structure:
column(data_overview, :mass) * info.scale.Msol5-element Vector{Float64}:
 697971.5415380469
      1.2633877595077453e6
      2.01189316548175e7
      2.0435047070331135e8
      6.834288803451587e9In-Place Unit Conversion
Alternatively, you can directly convert the data within the table using the transform() function. This modifies the table in-place, converting the :mass column to solar mass units:
data_overview = transform(data_overview, :mass => :mass => value->value * info.scale.Msol);select(data_overview, (:level, :mass, :rho_min, :rho_max ) )Table with 5 rows, 4 columns:
level  mass       rho_min     rho_max
─────────────────────────────────────────
6      6.97972e5  2.61776e-9  1.16831e-7
7      1.26339e6  1.15139e-8  2.21103e-7
8      2.01189e7  2.44071e-8  0.000222309
9      2.0435e8   1.2142e-7   0.0141484
10     6.83429e9  4.49036e-7  3.32984Data Structure Deep Dive
Now let's examine the detailed structure of our hydro data. Understanding this organization is crucial for effective data manipulation and analysis.
IndexedTables Storage Format
The data is stored in gas.data as an IndexedTables table (in code units), which provides several key advantages:
- Row-based organization: Each row represents a single cell in the simulation
- Column-based access: Each column represents a specific physical property
- Efficient operations: Built-in support for filtering, mapping, and aggregation
- Memory efficiency: Optimized storage and access patterns
- Functional interface: Clean, composable operations for data manipulation
For comprehensive information on working with this data structure:
- Mera.jl documentation and tutorials
- JuliaDB API Reference
- IndexedTables.jl documentation
Understanding the Data Layout
The table structure reflects the AMR grid organization:
Spatial Coordinates
- Integer cell positions (cx, cy, cz) form a uniform 3D array within each refinement level
- Level-specific ranges: Each refinement level has its own coordinate system- Level 8: coordinates range from 1-256
- Level 14: coordinates range from 1-16384
 
- Sparse occupancy: Not all coordinate positions exist due to adaptive refinement
Critical Data Integrity Notes
- Coordinate preservation: The integers cx, cy, cz are essential for grid reconstruction
- Do not modify: These coordinates maintain the AMR spatial relationships
- Unique identifiers: Each (level, cx, cy, cz) combination uniquely identifies a cell
Let's examine the complete data table:
gas.dataTable with 28320979 rows, 11 columns:
Columns:
#   colname  type
────────────────────
1   level    Int64
2   cx       Int64
3   cy       Int64
4   cz       Int64
5   rho      Float64
6   vx       Float64
7   vy       Float64
8   vz       Float64
9   p        Float64
10  var6     Float64
11  var7     Float64Focused Data Examination
For a more detailed view of specific columns, we can select key fields to understand the data organization better:
select(gas.data, (:level,:cx, :cy, :cz, :rho) )Table with 28320979 rows, 5 columns:
level  cx   cy   cz   rho
─────────────────────────────────
6      1    1    1    3.18647e-9
6      1    1    2    3.58591e-9
6      1    1    3    3.906e-9
6      1    1    4    4.27441e-9
6      1    1    5    4.61042e-9
6      1    1    6    4.83977e-9
6      1    1    7    4.974e-9
6      1    1    8    5.08112e-9
6      1    1    9    5.20596e-9
6      1    1    10   5.38372e-9
6      1    1    11   5.67209e-9
6      1    1    12   6.14423e-9
⋮
10     814  493  514  0.000321702
10     814  494  509  1.42963e-6
10     814  494  510  1.4351e-6
10     814  494  511  0.00029515
10     814  494  512  0.000395273
10     814  494  513  0.000321133
10     814  494  514  0.000319678
10     814  495  511  0.00024646
10     814  495  512  0.000269009
10     814  496  511  0.000235329
10     814  496  512  0.000242422Summary and Next Steps
What You've Learned
In this tutorial, you've mastered the fundamentals of working with hydrodynamic data in Mera.jl:
- Data Loading: How to load hydro data using gethydro()with various options
- Structure Understanding: The organization of AMR grids and IndexedTables
- Variable Management: Working with predefined and custom variable names
- Data Analysis: Using amroverview()anddataoverview()for comprehensive analysis
- Unit Handling: Converting between code units and physical units
- Memory Management: Monitoring and optimizing memory usage
- Data Manipulation: Using IndexedTables operations for efficient data processing
Key Takeaways
- Hydro data is stored in IndexedTables format for efficient access and manipulation
- AMR coordinates (level, cx, cy, cz) are critical for spatial relationships
- Always be conscious of units - raw data is in code units
- Memory management is crucial for large datasets
- Mera.jl provides powerful tools for statistical analysis and data exploration
Continue Your Learning
Now that you understand hydro data fundamentals, you can explore:
- Advanced hydro analysis: Spatial filtering, custom calculations, and derived quantities
- Data visualization: Creating plots and visualizations of your hydro data
- Multi-physics analysis: Combining hydro data with gravity and particle data
- Time series analysis: Working with multiple simulation outputs
- Performance optimization: Advanced techniques for large-scale data processing