File boundary_conditions.hpp
File List > include > multigrid > boundary_conditions.hpp
Go to the documentation of this file
#pragma once
#include "multigrid/exceptions.hpp"
#include "multigrid/types.hpp"
#include <array>
namespace mgrid {
inline constexpr BoundaryPoint zeroNeumannCondition{.conditionType = neumann, .value = 0.0};
inline constexpr BoundaryPoint zeroDirichletCondition{.conditionType = dirichlet, .value = 0.0};
class BoundaryConditions {
public:
BoundaryConditions() = default;
BoundaryConditions(const BoundaryConditions &) = default;
BoundaryConditions(BoundaryConditions &&) = default;
BoundaryConditions &operator=(const BoundaryConditions &) = default;
BoundaryConditions &operator=(BoundaryConditions &&) = default;
~BoundaryConditions() = default;
void resize(int nx, int nz);
[[nodiscard]] Boundary &get(BoundaryFlag f) { return edges_[f]; }
[[nodiscard]] const Boundary &get(BoundaryFlag f) const { return edges_[f]; }
void set(BoundaryFlag f, const Boundary &values);
void set(BoundaryFlag f, const BoundaryPoint &point);
void apply_default_conditions(int nx, int nz);
void apply_periodic(AxisKind kx, AxisKind kz, int nx, int nz);
private:
std::array<Boundary, 4> edges_{};
};
} // namespace mgrid