Documentation Index
Fetch the complete documentation index at: https://mintlify.com/DedalusProject/dedalus/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The field module provides classes for representing data fields in spectral space. Fields can be scalars, vectors, or tensors, and support arithmetic operations, differential operators, and layout transformations between grid and coefficient space.
Field Classes
Field
Field(dist=None, bases=None, tensorsig=(), dtype=np.float64, name=None)
General field class for storing spectral data.
Parameters
- dist (Distributor, optional): Distributor object for parallelization
- bases (tuple of Basis, optional): Spectral bases for each dimension
- tensorsig (tuple of CoordinateSystems, optional): Tensor signature
- dtype (dtype, optional): Data type (default: np.float64)
- name (str, optional): Field name
Attributes
- data (ndarray): Field data in current layout
- layout: Current data layout (‘c’ for coefficients, ‘g’ for grid)
- domain (Domain): Field domain
- tensorsig (tuple): Tensor signature
Methods
[‘g’] - Access grid-space data
field['g'] = data # Set grid values
data = field['g'] # Get grid values
[‘c’] - Access coefficient-space data
field['c'] = coeffs # Set coefficients
coeffs = field['c'] # Get coefficients
change_scales(scales) - Change dealiasing scales
field.change_scales(2) # Dealias to 2x resolution
field.change_scales((1, 2, 1)) # Per-axis scales
copy() - Create a copy
field_copy = field.copy()
Arithmetic Operations
Fields support standard arithmetic:
f3 = f1 + f2 # Addition
f3 = f1 - f2 # Subtraction
f3 = f1 * f2 # Multiplication (NCC)
f3 = f1 / f2 # Division
f3 = f1 ** 2 # Powers
f3 = -f1 # Negation
Example
import dedalus.public as d3
import numpy as np
# Setup
coords = d3.CartesianCoordinates('x', 'y')
dist = d3.Distributor(coords, dtype=np.float64)
xbasis = d3.RealFourier(coords['x'], size=64, bounds=(0, 2*np.pi))
ybasis = d3.RealFourier(coords['y'], size=64, bounds=(0, 2*np.pi))
# Create field
u = dist.Field(bases=(xbasis, ybasis), name='u')
# Set values in grid space
x, y = dist.local_grids(xbasis, ybasis)
u['g'] = np.sin(x) * np.cos(y)
# Access coefficients
coeffs = u['c']
ScalarField
ScalarField(dist, bases=None, dtype=np.float64, name=None)
Convenience constructor for scalar fields (empty tensor signature).
Example
import dedalus.public as d3
coords = d3.CartesianCoordinates('x', 'y', 'z')
dist = d3.Distributor(coords)
T = dist.ScalarField(name='T') # Temperature
VectorField
VectorField(dist, coordsys, bases=None, dtype=np.float64, name=None)
Convenience constructor for vector fields.
Parameters
- coordsys (CoordinateSystem): Coordinate system for vector components
- Other parameters same as Field
Example
import dedalus.public as d3
import numpy as np
coords = d3.CartesianCoordinates('x', 'y', 'z')
dist = d3.Distributor(coords)
# Create velocity vector
u = dist.VectorField(coords, name='u')
# Set components
u['g'][0] = 1.0 # u_x
u['g'][1] = 0.0 # u_y
u['g'][2] = 0.0 # u_z
TensorField
TensorField(dist, coordsys_out, coordsys_in=None, bases=None, dtype=np.float64, name=None)
Convenience constructor for tensor fields.
Parameters
- coordsys_out (CoordinateSystem): Output coordinate system
- coordsys_in (CoordinateSystem, optional): Input coordinate system (default: same as output)
- Other parameters same as Field
Example
import dedalus.public as d3
coords = d3.CartesianCoordinates('x', 'y')
dist = d3.Distributor(coords)
# Create stress tensor
τ = dist.TensorField(coords, name='tau')
# Set components
τ['g'][0, 0] = 1.0 # τ_xx
τ['g'][0, 1] = 0.0 # τ_xy
τ['g'][1, 0] = 0.0 # τ_yx
τ['g'][1, 1] = 1.0 # τ_yy
Field Properties
Tensor Operations
T - Transpose tensor components
H - Hermitian transpose (conjugate transpose)
A_H = A.H # Conjugate transpose
Component Access
real - Real part
imag - Imaginary part
Advanced Usage
Non-Constant Coefficients (NCCs)
Fields can be used as non-constant coefficients in equations:
import dedalus.public as d3
# Setup domain
coord = d3.Coordinate('x')
dist = d3.Distributor(coord)
xbasis = d3.ChebyshevT(coord, size=64, bounds=(0, 1))
# Variable coefficient
kappa = dist.Field(bases=xbasis)
x = dist.local_grid(xbasis)
kappa['g'] = 1 + x**2
# Use in equation
u = dist.Field(bases=xbasis)
problem = d3.LBVP([u])
problem.add_equation("kappa*dx(u) = 1") # kappa is an NCC
Interpolation
Fields can be called to interpolate:
# Interpolate to specific point
value = field(x=0.5, y=0.3)
See Also