Operators should handle zero-sized arrays
Created originally on Bitbucket by avmo (Ashwin Vishnu)
Certailn 2D and 3D FFT libraries are capable of operating with zero-sized arrays. Related operators functions assume a non-zero size as of now.
Short term
Raise NotImplementedError to avoid strange tracebacks.
Long term
Algorithm to work with zero sized arrays for various functions.
Examples of errors thrown:
1024^3 array with 1024 procs
Traceback (most recent call last):
File "/var//opt/cray/alps/spool/13580068/fluidsim", line 11, in <module>
load_entry_point('fluidsim', 'console_scripts', 'fluidsim')()
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/__main__.py", line 61, in run
args.func(args)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/profile.py", line 212, in run
it_end=args.it_end,
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/profile.py", line 160, in profile
_profile(type_fft)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/profile.py", line 124, in _profile
sim = Simul(params)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/base/solvers/base.py", line 115, in __init__
self.oper = Operators(params=params)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/operators/operators3d.py", line 105, in __init__
coef_dealiasing=params.oper.coef_dealiasing,
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidfft/fluidfft/fft3d/operators.py", line 226, in __init__
CONDKY = abs(self.Ky) >= self.coef_dealiasing * self.k1.max()
File "/cfs/klemming/nobackup/a/avmo/my-envs/fluidmeta/lib/python3.6/site-packages/numpy/core/_methods.py", line 26, in _amax
return umr_maximum(a, axis, None, out, keepdims)
ValueError: zero-size array to reduction operation maximum which has no identity
1024^2 array with 64 procs
Traceback (most recent call last):
File "/var//opt/cray/alps/spool/13579943/fluidsim", line 11, in <module>
load_entry_point('fluidsim', 'console_scripts', 'fluidsim')()
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/__main__.py", line 61, in run
args.func(args)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/profile.py", line 212, in run
it_end=args.it_end,
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/profile.py", line 160, in profile
_profile(type_fft)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/util/console/profile.py", line 124, in _profile
sim = Simul(params)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/base/solvers/base.py", line 156, in __init__
self.output.init_with_oper_and_state()
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/base/output/base.py", line 480, in init_with_oper_and_state
super(OutputBasePseudoSpectral, self).init_with_oper_and_state()
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/base/output/base.py", line 303, in init_with_oper_and_state
self.init_with_initialized_state()
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/base/output/base.py", line 361, in init_with_initialized_state
self.print_stdout.complete_init_with_state()
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/base/output/print_stdout.py", line 51, in complete_init_with_state
self.energy0 = self.output.compute_energy()
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidsim/fluidsim/solvers/ns2d/output/__init__.py", line 105, in compute_energy
return self.sum_wavenumbers(energy_fft)
File "/cfs/klemming/nobackup/a/avmo/src/fluidmeta/fluidfft/fluidfft/fft2d/operators.py", line 287, in sum_wavenumbers
return self.opfft.sum_wavenumbers(np.ascontiguousarray(field_fft))
File "fluidfft/fft2d/fft2dmpi_with_fftwmpi2d.pyx", line 213, in fluidfft.fft2d.mpi_with_fftwmpi2d.FFT2DMPIWithFFTWMPI2D.sum_wavenumbers
IndexError: Out of bounds on buffer access (axis 0)