qimpy.grid.Field
- class Field(grid, *, shape_batch=(), data=None)
Bases:
Gradable
[FieldType
]Abstract base class for scalar/vector fields in real/reciprocal space. Provides common operators for fields in either space, but any fields used must specifically be in real (
FieldR
andFieldC
), full-reciprocal (FieldG
) or half-reciprocal (FieldH
) space.- Parameters:
grid (Grid) –
shape_batch (Sequence[int]) –
data (Tensor) –
- __init__(grid, *, shape_batch=(), data=None)
Initialize to zeros or specified data.
- Parameters:
grid (Grid) – Associated grid, which determines last three dimensions of data
shape_batch (Sequence[int]) – Optional preceding batch dimensions for vector fields, arrays of scalar fields etc. Not used if data is provided.
data (Tensor | None) – Initial data if provided; initialize to zero otherwise
- Return type:
None
Methods
Initialize to zeros or specified data.
Add in-place with optional scale factor (Mirroring torch.Tensor.add_).
Create field with cloned data (deep copy).
Convolve scalar field by reciprocal-space kernel_tilde.
Divergence of field.
Compute broadcasted inner product \(\int a^\dagger b\).
Data type for the Field type
Return index into local data of the spatial index = 0 component(s), which corresponds to r = 0 for real-space fields and to the G = 0 component for reciprocal-space fields.
Gradient of field.
Compute integral over unit cell, retaining batch dimensions in output.
Laplacian of field.
Norm of a field, defined by \(\sqrt{\int |a|^2}\).
Offset of local grid dimensions into global grid for Field type
Read field from cp_path.
requires_grad_
Set whether gradient with respect to this object is needed.
Global grid shape for the Field type
Local grid shape (last 3 data dimensions) for the Field type
Switch field to a grid that is different in shape or parallelization.
Vector-space dot product of data summed over all dimensions.
Write field to cp_path.
Create zero Field with same grid and batch dimensions.
Attributes
Whether this represents a complex scalar field.
Whether this field is in reciprocal space.
Slice of data corresponding to
get_origin_index()
.requires_grad
Return whether gradient with respect to this object is needed.
Associated grid that determines dimensions of field
Underlying data, with last three dimensions on grid
grad
optional gradient (of energy) with respect to this object.
- add_(other, *, alpha=1.0)
Add in-place with optional scale factor (Mirroring torch.Tensor.add_).
- Parameters:
self (FieldType) –
other (FieldType | float) –
alpha (float) –
- Return type:
FieldType
- clone()
Create field with cloned data (deep copy).
- Parameters:
self (FieldType) –
- Return type:
FieldType
- convolve(kernel_tilde, reduction='')
Convolve scalar field by reciprocal-space kernel_tilde. Amounts to an elementwise multiply for reciprocal space fields, but involve a forward and inverse fourier transform for real space fields. If specified, reduction must be an einsum index expression to contract certain indices of self and kernel_tilde (in that order).
- Parameters:
self (FieldType) –
kernel_tilde (Tensor) –
reduction (str) –
- Return type:
FieldType
- divergence(dim=0)
Divergence of field. A dimension of length 3 at dim, by default at the beginning, is contracted against the gradient operator.
- Parameters:
self (FieldType) –
dim (int) –
- Return type:
FieldType
- dot(other)
Compute broadcasted inner product \(\int a^\dagger b\). This includes appropriate volume / mesh prefactors to convert it to an integral. Batch dimensions must be broadcastable together. Note that a ^ b is exactly equivalent to a.dot(b).
- Parameters:
self (FieldType) –
other (FieldType) –
- Return type:
Tensor
- abstract dtype()
Data type for the Field type
- Return type:
dtype
- get_origin_index()
Return index into local data of the spatial index = 0 component(s), which corresponds to r = 0 for real-space fields and to the G = 0 component for reciprocal-space fields. Returns an empty index if the origin component is not local to this process. The o property provides convenient access to data at this index.
- gradient(dim=0)
Gradient of field. A new batch dimension of length 3 is inserted at the location specified by dim, by default at the beginning.
- Parameters:
self (FieldType) –
dim (int) –
- Return type:
FieldType
- integral()
Compute integral over unit cell, retaining batch dimensions in output.
- Return type:
Tensor
- laplacian()
Laplacian of field.
- Parameters:
self (FieldType) –
- Return type:
FieldType
- norm()
Norm of a field, defined by \(\sqrt{\int |a|^2}\). Returns a real tensor with shape equal to batch dimensions.
- Parameters:
self (FieldType) –
- Return type:
Tensor
- abstract offset_grid_mine()
Offset of local grid dimensions into global grid for Field type
- Return type:
tuple[int, …]
- read(cp_path)
Read field from cp_path.
- Parameters:
cp_path (CheckpointPath) –
- Return type:
None
- abstract shape_grid()
Global grid shape for the Field type
- Return type:
tuple[int, …]
- abstract shape_grid_mine()
Local grid shape (last 3 data dimensions) for the Field type
- Return type:
tuple[int, …]
- abstract to(grid)
Switch field to a grid that is different in shape or parallelization.
- Parameters:
self (FieldType) –
grid (Grid) –
- Return type:
FieldType
- vdot(other)
Vector-space dot product of data summed over all dimensions. (Scalar contraction needed for the Pulay or Minimizer algorithm templates.)
- Parameters:
self (FieldType) –
other (FieldType) –
- Return type:
float
- write(cp_path)
Write field to cp_path.
- Parameters:
cp_path (CheckpointPath) –
- Return type:
None
- zeros_like()
Create zero Field with same grid and batch dimensions.
- Parameters:
self (FieldType) –
- Return type:
FieldType
- data: torch.Tensor
Underlying data, with last three dimensions on grid
- abstract property is_complex: bool
Whether this represents a complex scalar field. Note that a real scalar field has complex Fourier transform coefficients, but would still be considered real here (i.e. this is False for FieldH).
- abstract property is_tilde: bool
Whether this field is in reciprocal space. (Corresponding variable names are typically suffixed by ‘_tilde’.)
- property o: Tensor
Slice of data corresponding to
get_origin_index()
.