Page MenuHomec4science

surface_generator_filter.hh
No OneTemporary

File Metadata

Created
Wed, May 1, 06:21

surface_generator_filter.hh

/**
* @file
* @section LICENSE
*
* Copyright (©) 2016-2020 EPFL (École Polytechnique Fédérale de Lausanne),
* Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
/* -------------------------------------------------------------------------- */
#ifndef SURFACE_GENERATOR_FILTER_H
#define SURFACE_GENERATOR_FILTER_H
/* -------------------------------------------------------------------------- */
#include "filter.hh"
#include "surface_generator.hh"
#include "tamaas.hh"
/* -------------------------------------------------------------------------- */
namespace tamaas {
template <UInt dim>
class SurfaceGeneratorFilter : public SurfaceGenerator<dim> {
public:
/// Default constructor
SurfaceGeneratorFilter() = default;
public:
/// Build surface with Hu & Tonder algorithm
Grid<Real, dim>& buildSurface() override;
/// Set filter object
void setFilter(std::shared_ptr<Filter<dim>> new_filter) {
setSpectrum(new_filter);
}
/// Set spectrum
void setSpectrum(std::shared_ptr<Filter<dim>> spectrum) { filter = spectrum; }
protected:
/// Apply filter coefficients on white noise
void applyFilterOnSource();
/// Generate white noise with given distribution
template <typename T>
void generateWhiteNoise();
protected:
std::shared_ptr<Filter<dim>> filter = nullptr; ///< not owned
GridHermitian<Real, dim> filter_coefficients;
Grid<Real, dim> white_noise;
};
/* -------------------------------------------------------------------------- */
/* Template implementations */
/* -------------------------------------------------------------------------- */
template <UInt dim>
template <typename T>
void SurfaceGeneratorFilter<dim>::generateWhiteNoise() {
random_engine gen(this->random_seed);
T distribution;
for (auto& noise : white_noise)
noise = distribution(gen);
}
} // namespace tamaas
#endif

Event Timeline