From 946d44c17950b9929798a8f059ac521d0c8b24e1 Mon Sep 17 00:00:00 2001 From: Niklas Schnierstein <schni@draco01.mpcdf.mpg.de> Date: Wed, 15 Jan 2020 14:06:22 +0100 Subject: [PATCH] introduced wavenumber multiplication in spectrum calc --- cpp/kspace.cpp | 84 +++++++++++++++++++++++++++++++++----------------- cpp/kspace.hpp | 6 ++-- 2 files changed, 60 insertions(+), 30 deletions(-) diff --git a/cpp/kspace.cpp b/cpp/kspace.cpp index d6013457..694e188c 100644 --- a/cpp/kspace.cpp +++ b/cpp/kspace.cpp @@ -684,7 +684,8 @@ void kspace<be, dt>::cospectrum( const rnumber(* __restrict b)[2], const hid_t group, const std::string dset_name, - const hsize_t toffset) + const hsize_t toffset, + const double wavenumber_exp) { TIMEZONE("field::cospectrum2"); shared_array<double> spec_local_thread(this->nshells*ncomp(fc)*ncomp(fc),[&](double* spec_local){ @@ -704,7 +705,8 @@ void kspace<be, dt>::cospectrum( int tmp_int = int(sqrt(k2) / this->dk)*ncomp(fc)*ncomp(fc); for (hsize_t i=0; i<ncomp(fc); i++) for (hsize_t j=0; j<ncomp(fc); j++){ - spec_local[tmp_int + i*ncomp(fc)+j] += nxmodes * ( + spec_local[tmp_int + i*ncomp(fc)+j] += pow(k2,wavenumber_exp/2.)* + nxmodes * ( (a[ncomp(fc)*cindex + i][0] * b[ncomp(fc)*cindex + j][0]) + (a[ncomp(fc)*cindex + i][1] * b[ncomp(fc)*cindex + j][1])); } @@ -762,7 +764,8 @@ void kspace<be, dt>::cospectrum( const rnumber(* __restrict a)[2], const hid_t group, const std::string dset_name, - const hsize_t toffset) + const hsize_t toffset, + const double wavenumber_exp) { TIMEZONE("field::cospectrum1"); shared_array<double> spec_local_thread(this->nshells*ncomp(fc)*ncomp(fc),[&](double* spec_local){ @@ -782,7 +785,8 @@ void kspace<be, dt>::cospectrum( int tmp_int = int(sqrt(k2) / this->dk)*ncomp(fc)*ncomp(fc); for (hsize_t i=0; i<ncomp(fc); i++) for (hsize_t j=0; j<ncomp(fc); j++){ - spec_local[tmp_int + i*ncomp(fc)+j] += nxmodes * ( + spec_local[tmp_int + i*ncomp(fc)+j] += pow(k2, wavenumber_exp/2.)* + nxmodes * ( (a[ncomp(fc)*cindex + i][0] * a[ncomp(fc)*cindex + j][0]) + (a[ncomp(fc)*cindex + i][1] * a[ncomp(fc)*cindex + j][1])); } @@ -1007,136 +1011,160 @@ template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, ONE>( const typename fftw_interface<float>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREE>( const typename fftw_interface<float>::complex *__restrict__ a, const typename fftw_interface<float>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREExTHREE>( const typename fftw_interface<float>::complex *__restrict__ a, const typename fftw_interface<float>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, ONE>( const typename fftw_interface<double>::complex *__restrict__ a, const typename fftw_interface<double>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREE>( const typename fftw_interface<double>::complex *__restrict__ a, const typename fftw_interface<double>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREExTHREE>( const typename fftw_interface<double>::complex *__restrict__ a, const typename fftw_interface<double>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<float, ONE>( const typename fftw_interface<float>::complex *__restrict__ a, const typename fftw_interface<float>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<float, THREE>( const typename fftw_interface<float>::complex *__restrict__ a, const typename fftw_interface<float>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<float, THREExTHREE>( const typename fftw_interface<float>::complex *__restrict__ a, const typename fftw_interface<float>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<double, ONE>( const typename fftw_interface<double>::complex *__restrict__ a, const typename fftw_interface<double>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<double, THREE>( const typename fftw_interface<double>::complex *__restrict__ a, const typename fftw_interface<double>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<double, THREExTHREE>( const typename fftw_interface<double>::complex *__restrict__ a, const typename fftw_interface<double>::complex *__restrict__ b, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, ONE>( const typename fftw_interface<float>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREE>( const typename fftw_interface<float>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<float, THREExTHREE>( const typename fftw_interface<float>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, ONE>( const typename fftw_interface<double>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREE>( const typename fftw_interface<double>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, TWO_THIRDS>::cospectrum<double, THREExTHREE>( const typename fftw_interface<double>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<float, ONE>( const typename fftw_interface<float>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<float, THREE>( const typename fftw_interface<float>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<float, THREExTHREE>( const typename fftw_interface<float>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<double, ONE>( const typename fftw_interface<double>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<double, THREE>( const typename fftw_interface<double>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template void kspace<FFTW, SMOOTH>::cospectrum<double, THREExTHREE>( const typename fftw_interface<double>::complex *__restrict__ a, const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp); template double kspace<FFTW, TWO_THIRDS>::L2norm<float, ONE>( const typename fftw_interface<float>::complex *__restrict__ a); diff --git a/cpp/kspace.hpp b/cpp/kspace.hpp index 80d89f25..6933df2c 100644 --- a/cpp/kspace.hpp +++ b/cpp/kspace.hpp @@ -129,7 +129,8 @@ class kspace const rnumber(* __restrict__ b)[2], const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp = 0); template <typename rnumber, field_components fc> @@ -137,7 +138,8 @@ class kspace const rnumber(* __restrict__ a)[2], const hid_t group, const std::string dset_name, - const hsize_t toffset); + const hsize_t toffset, + const double wavenumber_exp = 0); template <typename rnumber, field_components fc> -- GitLab