9 const std::vector<double>& ,
10 const std::vector<double>& Tcurr,
11 std::vector<double>& Tnext)
const
13 const std::size_t N = g.
Nx;
14 const double dx = g.
dx;
15 const double r = D * dt / (dx * dx);
22 if (Tnext.size() != N)
32 const std::size_t M = N - 2;
36 std::vector<double> a(M, -r);
37 std::vector<double> b(M, 1.0 + 2.0 * r);
38 std::vector<double> c(M, -r);
39 std::vector<double> d(M, 0.0);
42 for (std::size_t j = 0; j < M; ++j)
58 d[M - 1] += r * Tcurr[N - 1];
77 for (std::size_t i = 1; i < M; ++i)
79 double temp = 1.0 / (b[i] - a[i] * c[i - 1]);
81 d[i] = (d[i] - a[i] * d[i - 1]) * temp;
89 std::vector<double> x(M);
92 for (
int i =
static_cast<int>(M) - 2; i >= 0; --i)
94 x[i] = d[i] - c[i] * x[i + 1];
98 for (std::size_t j = 0; j < M; ++j)
void step(const Grid &g, double D, double dt, const std::vector< double > &Tprev, const std::vector< double > &Tcurr, std::vector< double > &Tnext) const override
Computes the temperature field at the next time step (T^{n+1}).