|
@@ -884,12 +884,10 @@ template <class Real> const Matrix<Real>& SphericalHarmonics<Real>::MatFourierIn
|
|
template <class Real> const FFT<Real>& SphericalHarmonics<Real>::OpFourier(Long Np){
|
|
template <class Real> const FFT<Real>& SphericalHarmonics<Real>::OpFourier(Long Np){
|
|
assert(Np<SCTL_SHMAXDEG);
|
|
assert(Np<SCTL_SHMAXDEG);
|
|
auto& Mf =MatrixStore().Mfftinv_ [Np];
|
|
auto& Mf =MatrixStore().Mfftinv_ [Np];
|
|
|
|
+ #pragma omp critical (SCTL_FFT_PLAN0)
|
|
if(!Mf.Dim(0)){
|
|
if(!Mf.Dim(0)){
|
|
- #pragma omp critical (SCTL_FFT_PLAN0)
|
|
|
|
- if(!Mf.Dim(0)){
|
|
|
|
- StaticArray<Long,1> fft_dim = {Np};
|
|
|
|
- Mf.Setup(FFT_Type::C2R, 1, Vector<Long>(1,fft_dim,false));
|
|
|
|
- }
|
|
|
|
|
|
+ StaticArray<Long,1> fft_dim = {Np};
|
|
|
|
+ Mf.Setup(FFT_Type::C2R, 1, Vector<Long>(1,fft_dim,false));
|
|
}
|
|
}
|
|
return Mf;
|
|
return Mf;
|
|
}
|
|
}
|
|
@@ -897,12 +895,10 @@ template <class Real> const FFT<Real>& SphericalHarmonics<Real>::OpFourier(Long
|
|
template <class Real> const FFT<Real>& SphericalHarmonics<Real>::OpFourierInv(Long Np){
|
|
template <class Real> const FFT<Real>& SphericalHarmonics<Real>::OpFourierInv(Long Np){
|
|
assert(Np<SCTL_SHMAXDEG);
|
|
assert(Np<SCTL_SHMAXDEG);
|
|
auto& Mf =MatrixStore().Mfft_ [Np];
|
|
auto& Mf =MatrixStore().Mfft_ [Np];
|
|
|
|
+ #pragma omp critical (SCTL_FFT_PLAN1)
|
|
if(!Mf.Dim(0)){
|
|
if(!Mf.Dim(0)){
|
|
- #pragma omp critical (SCTL_FFT_PLAN1)
|
|
|
|
- if(!Mf.Dim(0)){
|
|
|
|
- StaticArray<Long,1> fft_dim = {Np};
|
|
|
|
- Mf.Setup(FFT_Type::R2C, 1, Vector<Long>(1,fft_dim,false));
|
|
|
|
- }
|
|
|
|
|
|
+ StaticArray<Long,1> fft_dim = {Np};
|
|
|
|
+ Mf.Setup(FFT_Type::R2C, 1, Vector<Long>(1,fft_dim,false));
|
|
}
|
|
}
|
|
return Mf;
|
|
return Mf;
|
|
}
|
|
}
|