Skip to content
Snippets Groups Projects

M-filter

Merged Cristian Lalescu requested to merge misc/filter into master
Files
2
+ 0
49
@@ -330,43 +330,6 @@ void kspace<be, dt>::ball_filter(
});
}
/** \brief Filter a field using a M-filter to reproduce dissipation range.
*
* Filter's Fourier space expression:
* \f[
* \hat{\phi^M_\ell}(k) =
* \exp(-\frac{(3.54 k \ell)^{122 \ell^{0.0836}}}{2})
* \left( 1 + \frac{(k \eta/0.0636)^{3.44}}{1 + (k \eta/ 0.0621)^{3.44}} \right)^{1/2}
* \f]
*/
template <field_backend be,
kspace_dealias_type dt>
template <typename rnumber,
field_components fc>
void kspace<be, dt>::general_M_filter(
typename fftw_interface<rnumber>::complex *__restrict__ a,
const double ell)
{
const double prefactor0 = 1.0;
this->CLOOP_K2(
[&](const ptrdiff_t cindex,
const ptrdiff_t xindex,
const ptrdiff_t yindex,
const ptrdiff_t zindex,
const double k2){
if (k2 > 0)
{
const double argument = std::sqrt(k2)*ell;
const double prefactor = prefactor0;
for (unsigned int tcounter=0; tcounter<2*ncomp(fc); tcounter++)
((rnumber*)a)[2*ncomp(fc)*cindex + tcounter] *= (
// prefactor * (std::exp(-0.5*std::pow((2.9*argument),(68.0*(std::pow(ell,0.74))))) * std::sqrt(1.0 + (std::pow((argument/0.06),3.8))/(1.0 + (std::pow((argument/0.057),3.8))))));
prefactor * (std::exp(-1.7*argument)) * std::sqrt(1.0 + 0.68*(std::pow((argument/0.065),4.6))/(1.0 + (std::pow((argument/0.065),4.6)))));
}
});
}
/** \brief Filter a field using a Gaussian kernel.
*
* \tparam rnumber type of real number, float or double.
@@ -472,12 +435,6 @@ int kspace<be, dt>::filter(
a,
2*acos(0.)/wavenumber);
}
else if (filter_type == std::string("general_M"))
{
this->template general_M_filter<rnumber, fc>(
a,
2*acos(0.)/wavenumber);
}
return EXIT_SUCCESS;
}
@@ -561,12 +518,6 @@ int kspace<be, dt>::filter_calibrated_ell(
a,
ell);
}
else if (filter_type == std::string("general_M"))
{
this->template general_M_filter<rnumber, fc>(
a,
ell);
}
return EXIT_SUCCESS;
}
Loading