numerics
Loading...
Searching...
No Matches
grid3d.hpp
Go to the documentation of this file.
1/// @file spatial/grid3d.hpp
2/// @brief 3D Cartesian scalar grid backed by num::Vector storage.
3///
4/// Flat layout: idx = k*ny*nx + j*nx + i (x is fastest, z is slowest)
5/// Used by the field physics module for Poisson/diffusion solves.
6#pragma once
7
8#include "core/types.hpp"
9#include "core/vector.hpp"
10#include <vector>
11
12namespace num {
13
14class Grid3D {
15public:
16 /// @param nx,ny,nz Number of cells in each dimension
17 /// @param dx Uniform cell size [m]
18 Grid3D(int nx, int ny, int nz, double dx = 1.0);
19
20 int nx() const { return nx_; }
21 int ny() const { return ny_; }
22 int nz() const { return nz_; }
23 double dx() const { return dx_; }
24 int size() const { return nx_ * ny_ * nz_; }
25
26 real& operator()(int i, int j, int k) { return data_[flat(i,j,k)]; }
27 real operator()(int i, int j, int k) const { return data_[flat(i,j,k)]; }
28
29 void set(int i, int j, int k, real v) { data_[flat(i,j,k)] = v; }
30 void fill(real v);
31
32 /// Copy contents into a new Vector (for solver interop).
33 Vector to_vector() const;
34 /// Copy solver result back into grid.
35 void from_vector(const Vector& v);
36
37private:
38 int nx_, ny_, nz_;
39 double dx_;
40 std::vector<real> data_; // plain array for easy indexing
41
42 idx flat(int i, int j, int k) const {
43 return (idx)(k * ny_ * nx_ + j * nx_ + i);
44 }
45};
46
47} // namespace num
int size() const
Definition grid3d.hpp:24
double dx() const
Definition grid3d.hpp:23
void from_vector(const Vector &v)
Copy solver result back into grid.
Definition grid3d.cpp:19
int ny() const
Definition grid3d.hpp:21
real & operator()(int i, int j, int k)
Definition grid3d.hpp:26
int nz() const
Definition grid3d.hpp:22
int nx() const
Definition grid3d.hpp:20
real operator()(int i, int j, int k) const
Definition grid3d.hpp:27
Vector to_vector() const
Copy contents into a new Vector (for solver interop).
Definition grid3d.cpp:13
void fill(real v)
Definition grid3d.cpp:9
void set(int i, int j, int k, real v)
Definition grid3d.hpp:29
Core type definitions.
double real
Definition types.hpp:10
constexpr T ipow(T x) noexcept
Compute x^N at compile time via repeated squaring.
std::size_t idx
Definition types.hpp:11
Vector operations.