eval_f and ftilda and rho now take vector of x and output vector on x

This commit is contained in:
Vasco C. B. Ferreira
2026-06-30 14:11:59 +02:00
parent b6c891bc70
commit be8cf7aa31
5 changed files with 132 additions and 57 deletions
+15 -6
View File
@@ -4,8 +4,10 @@
#include "nufi/parameters.h"
#include "nufi/poisson_problem.h"
#include <cmath>
#include <cstddef>
#include <deal.II/base/function.h>
#include <deal.II/base/point.h>
#include <vector>
using namespace dealii;
@@ -69,15 +71,22 @@ inline double f0(const double x, const double v,
}
// wrapper for eval_point() { VectorTools::point_values() }
inline double eval(double x, const PoissonProblem<1> &poisson,
const Vector<double> &solution) noexcept {
inline std::vector<double> eval(std::vector<double> &X,
const PoissonProblem<1> &poisson,
const Vector<double> &solution) noexcept {
size_t x_size = X.size();
std::vector<double> evals(x_size);
std::vector<Point<1>> Points(x_size);
x -= Parameters::X_DOMAIN_LEFT;
for (size_t i = 0; i < x_size; ++i) {
X[i] = X[i] - Parameters::X_DOMAIN_LEFT;
X[i] = X[i] - Parameters::LX * std::floor(X[i] * Parameters::LX_INV);
x = x - Parameters::LX * std::floor(x * Parameters::LX_INV); // in domain
Points[i][0] = X[i];
}
return eval_point_grad<1>(poisson.get_mapping(), poisson.get_dof_handler(),
solution, Point<1>(x));
return eval_vector_grad(poisson.get_mapping(), poisson.get_dof_handler(),
solution, Points);
}
inline double integral_space_vector(const PoissonProblem<1> &poisson,
+12 -10
View File
@@ -19,16 +19,18 @@ public:
NuFISolver();
void run();
double eval_rho(unsigned int n, const double x,
const PoissonProblem<1> &poisson,
const std::vector<Vector<double>> &phi_history,
const unsigned int Nv = Parameters::NV) const;
double eval_ftilda(unsigned int n, double x, double u,
const PoissonProblem<1> &poisson,
const std::vector<Vector<double>> &phi_history) const;
double eval_f(unsigned int n, double x, double u,
const PoissonProblem<1> &poisson,
const std::vector<Vector<double>> &phi_history) const;
std::vector<double> eval_rho(unsigned int n, std::vector<double> &x,
const PoissonProblem<1> &poisson,
const std::vector<Vector<double>> &phi_history,
const unsigned int Nv = Parameters::NV) const;
std::vector<double>
eval_ftilda(unsigned int, std::vector<double> &x, double u,
const PoissonProblem<1> &poisson,
const std::vector<Vector<double>> &phi_history) const;
std::vector<double>
eval_f(unsigned int n, std::vector<double> &x, double u,
const PoissonProblem<1> &poisson,
const std::vector<Vector<double>> &phi_history) const;
private:
unsigned int Nt = std::floor(Parameters::TMAX / Parameters::DT);
+14
View File
@@ -184,6 +184,20 @@ eval_point_grad(const Mapping<dim> &mapping, const DoFHandler<dim> &dof_handler,
return Ex;
}
template <int dim>
std::vector<double> eval_vector_grad(const Mapping<dim> &mapping,
const DoFHandler<dim> &dof_handler,
const Vector<double> &solution,
const std::vector<Point<dim>> &points) {
size_t p_size = points.size();
std::vector<double> Ex(p_size);
for (size_t i = 0; i < p_size; ++i)
Ex[i] = eval_point_grad(mapping, dof_handler, solution, points[i]);
return Ex;
}
template <int dim>
double eval_point_value(const Mapping<dim> &mapping,
const DoFHandler<dim> &dof_handler,