Skip to content

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