Skip to content

File fdbase.hpp

File List > include > multigrid > fdbase.hpp

Go to the documentation of this file

#pragma once

#include "multigrid/types.hpp"

namespace mgrid {

class FDBase {
  public:
    FDBase() = default;
    virtual ~FDBase() = default;
    FDBase(const FDBase &) = default;
    FDBase &operator=(const FDBase &) = default;
    FDBase(FDBase &&) = default;
    FDBase &operator=(FDBase &&) = default;

    [[nodiscard]] double spacing(int n) const { return n == 0 ? hx_ : hz_; }

    [[nodiscard]] const Axis &x_axis() const { return xAxis_; }
    [[nodiscard]] const Axis &z_axis() const { return zAxis_; }

  protected:
    void calculate_geometry(double aspect, int nx, int nz, AxisKind kx = AxisKind::bounded,
                            AxisKind kz = AxisKind::bounded);

    Axis xAxis_{};
    Axis zAxis_{};
    int nx_{0};
    int nz_{0};
    double aspect_{0.0};
    double hx_{0.0};
    double hz_{0.0};
    double xfactor_{0.0};
    double zfactor_{0.0};
    double xxfactor_{0.0};
    double zzfactor_{0.0};
    double xzfactor_{0.0};
};

} // namespace mgrid