The .dx attribute only make sense for fields defined on a grid, and can be uniquely found from the shape of OnGrid.params and the size of the domain.
It is much more natural to define the domain as
domain = Domain(size: tuple)
# Or, potentially
domain = Domain.from_grid(N, dx)
It would be even better to define domains that are not rectangular, for example
domain = Domain() # Abstract domain
class RectangularDomain(Domain):
L: tuple
class SphericalDomain(Domain):
R: float
which then allows to define non standard discretizations. For example, Continuous can work on arbitrarily shaped domains, FourierSeries probably only makes sense on RectangularDomain while something like a SphericalFourierSeries (see for example s2fft) could be implemented on a SphericalDomain.
This is clearly a breaking change.
The
.dxattribute only make sense for fields defined on a grid, and can be uniquely found from the shape ofOnGrid.paramsand the size of the domain.It is much more natural to define the domain as
It would be even better to define domains that are not rectangular, for example
which then allows to define non standard discretizations. For example,
Continuouscan work on arbitrarily shaped domains,FourierSeriesprobably only makes sense onRectangularDomainwhile something like aSphericalFourierSeries(see for example s2fft) could be implemented on aSphericalDomain.This is clearly a breaking change.