ContactEngineering / SurfaceTopography

Read and analyze surface topographies
https://contactengineering.github.io/SurfaceTopography/
MIT License
17 stars 10 forks source link

muFFT PocketFFT does not implement sufficient interface for all functionality of SurfaceTopography #382

Closed sannant closed 2 months ago

sannant commented 3 months ago

For example the calculation of Fourier derivatives, and, consequently, the bicubic interpolation.

I don't think we need to fix this because the simple solution is to install FFTW 3 .

This means that we recomment installing FFTW3 and then installing muFFT in --no-binary mode

pastewka commented 3 months ago

It would still be nice if muFFT had an interface layer that translated half-complex FFTs to the standard c2r and r2c FFTs. Not all FFT libraries support these halfcomplex transforms.

sannant commented 3 months ago

I am not sure it is not only the halfcomplex fft missing.

pastewka commented 3 months ago

What else is missing?

sannant commented 2 months ago
Traceback (most recent call last):
  File "/home/asanner/Research/CFJAX/CFJAX/FirstOrder.py", line 389, in <module>
    interpolator = Interpolator(topography)
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/CrackFront/Circular.py", line 355, in __init__
    self.interpolator = field.interpolate_bicubic()
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/HeightContainer.py", line 79, in func
    return self._functions[name](self, *args, **kwargs)
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Support/Bibliography.py", line 76, in func_with_doi
    retvals = func(*args, **kwargs)
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Uniform/Interpolation.py", line 118, in interpolate_bicubic
    derx, dery = self.fourier_derivative()
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/HeightContainer.py", line 79, in func
    return self._functions[name](self, *args, **kwargs)
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Support/Bibliography.py", line 76, in func_with_doi
    retvals = func(*args, **kwargs)
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Uniform/Derivative.py", line 406, in fourier_derivative
    return self.derivative(1, operator=(muFFT.FourierDerivative(dim, i) for i in range(dim)),
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/HeightContainer.py", line 79, in func
    return self._functions[name](self, *args, **kwargs)
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Support/Bibliography.py", line 76, in func_with_doi
    retvals = func(*args, **kwargs)
  File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Uniform/Derivative.py", line 279, in derivative
    real_field = fft.real_space_field('real_temporary', 1)
AttributeError: '_muFFT.PocketFFT' object has no attribute 'real_space_field'
pastewka commented 2 months ago

You have an old _muFFT binary and a new Python module. Try wiping your venv.

Am 23. Juli 2024 17:47:45 MESZ schrieb Antoine Sanner @.***>:

Traceback (most recent call last):
 File "/home/asanner/Research/CFJAX/CFJAX/FirstOrder.py", line 389, in <module>
   interpolator = Interpolator(topography)
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/CrackFront/Circular.py", line 355, in __init__
   self.interpolator = field.interpolate_bicubic()
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/HeightContainer.py", line 79, in func
   return self._functions[name](self, *args, **kwargs)
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Support/Bibliography.py", line 76, in func_with_doi
   retvals = func(*args, **kwargs)
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Uniform/Interpolation.py", line 118, in interpolate_bicubic
   derx, dery = self.fourier_derivative()
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/HeightContainer.py", line 79, in func
   return self._functions[name](self, *args, **kwargs)
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Support/Bibliography.py", line 76, in func_with_doi
   retvals = func(*args, **kwargs)
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Uniform/Derivative.py", line 406, in fourier_derivative
   return self.derivative(1, operator=(muFFT.FourierDerivative(dim, i) for i in range(dim)),
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/HeightContainer.py", line 79, in func
   return self._functions[name](self, *args, **kwargs)
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Support/Bibliography.py", line 76, in func_with_doi
   retvals = func(*args, **kwargs)
 File "/home/asanner/Research/CFJAX/.venv/lib/python3.10/site-packages/SurfaceTopography/Uniform/Derivative.py", line 279, in derivative
   real_field = fft.real_space_field('real_temporary', 1)
AttributeError: '_muFFT.PocketFFT' object has no attribute 'real_space_field'

-- Reply to this email directly or view it on GitHub: https://github.com/ContactEngineering/SurfaceTopography/issues/382#issuecomment-2245611378 You are receiving this because you commented.

Message ID: @.***>

sannant commented 2 months ago

Ah I think I understand, I had muSpectre in the requirements as well, which installs an old version of _muFFt . Thanks.

pastewka commented 2 months ago

Yes!