This commit is contained in:
Vasco C. B. Ferreira
2026-05-07 15:23:21 +02:00
parent 6eb1e6faa1
commit 5a8622c7fe
10 changed files with 86 additions and 27 deletions
+11 -8
View File
@@ -83,6 +83,7 @@ void interpolate( real *coeffs, const real *values)
void operator()( const real *in, real *out ) const
{
#pragma omp parallel for
for ( size_t i = 0; i < Parameters::SPLINE_NX; ++i )
{
real result = 0;
@@ -145,24 +146,26 @@ void interpolate( real *coeffs, const real *values)
inline double integral_space_vector(const double *current_coeffs, double dx = Parameters::SPLINE_DX, size_t Nx = Parameters::SPLINE_NX)
{
double integral = 0.0;
double x = Parameters::X_DOMAIN_LEFT;
double xmin = Parameters::X_DOMAIN_LEFT;
#pragma omp parallel for reduction (+:integral)
for (size_t i=0; i<Nx ; ++i) {
x += dx;
integral += eval<1>(x, current_coeffs)*dx;
double x = xmin + i * dx;
integral += eval<1>(x, current_coeffs);
}
return integral;
return integral*dx;
};
inline double integral_space_vector_squared(const double *current_coeffs, double dx = Parameters::SPLINE_DX, size_t Nx = Parameters::SPLINE_NX)
{
double integral = 0.0;
double x = Parameters::X_DOMAIN_LEFT;
double xmin = Parameters::X_DOMAIN_LEFT;
#pragma omp parallel for reduction (+:integral)
for (size_t i=0; i<Nx ; ++i) {
x += dx;
double x = xmin + i*dx;
double val = eval<1>(x, current_coeffs);
integral += val*val*dx;
integral += val*val;
}
return integral;
return integral*dx;
};
class Gradient {
+1
View File
@@ -22,6 +22,7 @@ public:
void run();
double eval_rho(unsigned int n, double x, const double *E_coeffs, unsigned int Nv = Parameters::NV) const;
double eval_ftilda(unsigned int n, double x, double u, const double *E_coeffs) const;
double eval_f(unsigned int n, double x, double u, const double *E_coeffs) const;
private:
+7 -7
View File
@@ -13,16 +13,16 @@ namespace Parameters
constexpr double LX = std::abs(X_DOMAIN_RIGHT- X_DOMAIN_LEFT);
constexpr double LX_INV = 1/LX;
constexpr double V_DOMAIN_LEFT = -10.0;
constexpr double V_DOMAIN_RIGHT = 10.0;
constexpr double V_DOMAIN_LEFT = -10.;
constexpr double V_DOMAIN_RIGHT = 10.;
constexpr unsigned int NV = 512;
constexpr double DV = std::abs(V_DOMAIN_RIGHT - V_DOMAIN_LEFT)/NV;
// deal.ii options
constexpr unsigned int GLOBAL_REFINEMENT = 7;
constexpr unsigned int GLOBAL_REFINEMENT = 8;
constexpr unsigned int FE_DEGREE = 4;
constexpr unsigned int CONVERGENCE_ITERATIONS = 20000;
constexpr unsigned int CONVERGENCE_ITERATIONS = 10000;
constexpr double CONVERGENCE_LIMIT = 1e-12;
constexpr double EPS = 0.01;
@@ -30,8 +30,8 @@ namespace Parameters
constexpr double F0_FACTOR = 0.39894228040143267793994; // 1/sqrt(2pi)
// NUFI options
constexpr double DT=1./10.;
constexpr unsigned int TMAX = 50;
constexpr double DT=1./16.;
constexpr unsigned int TMAX = 500;
//spline options
constexpr int SPLINE_NX = 256;
@@ -40,7 +40,7 @@ namespace Parameters
constexpr size_t SPLINE_ORDER = 4;
//Plotting options
constexpr int PLOT_FREQUENCY = 5;
constexpr int PLOT_FREQUENCY = 10;
}
#endif
+1 -1
View File
@@ -5,7 +5,7 @@
#include "nufi/nufi_solver.h"
void save_ftilda( const NuFISolver &solver,
void save_f( const NuFISolver &solver,
unsigned int n,
const double *E_coeffs,
unsigned int Nx_out,