122 int accuracy, std::vector<double>& evenFieldSampling) {
123 std::vector<double> fourierCoefficients(2 * accuracy - 1);
128 RealValues[ii] = evenFieldSampling[i];
129 RealValues[iii] = evenFieldSampling[i];
132 gsl_fft_real_wavetable* real = gsl_fft_real_wavetable_alloc(2 *
num_gridpz_m);
133 gsl_fft_real_workspace* work = gsl_fft_real_workspace_alloc(2 *
num_gridpz_m);
135 gsl_fft_real_transform(&RealValues[0], 1, 2 *
num_gridpz_m, real, work);
137 gsl_fft_real_workspace_free(work);
138 gsl_fft_real_wavetable_free(real);
141 fourierCoefficients[0] = RealValues[0] / (2 *
num_gridpz_m);
142 for (
int i = 1; i < 2 * accuracy - 1; i++) {
146 return fourierCoefficients;
150 double interiorDerivative, base;
151 double coskzl, sinkzl, z = 0.0;
153 std::vector<double> higherDerivatives[3];
162 for (
int l = 1; l < accuracy; ++l) {
163 int coefIndex = 2 * l - 1;
165 interiorDerivative = base;
166 coskzl = cos(kz * l);
167 sinkzl = sin(kz * l);
169 higherDerivatives[0][i] += interiorDerivative
170 * (-fourierComponents[coefIndex] * sinkzl
171 - fourierComponents[coefIndex + 1] * coskzl);
172 interiorDerivative *= base;
173 higherDerivatives[1][i] += interiorDerivative
174 * (-fourierComponents[coefIndex] * coskzl
175 + fourierComponents[coefIndex + 1] * sinkzl);
176 interiorDerivative *= base;
177 higherDerivatives[2][i] += interiorDerivative
178 * (fourierComponents[coefIndex] * sinkzl
179 + fourierComponents[coefIndex + 1] * coskzl);
183 for (
int i = 1; i < 4; ++i) {