numerics 0.1.0
Loading...
Searching...
No Matches
num::FieldSolver Class Reference

#include <fields.hpp>

Classes

struct  DirichletBC
 Dirichlet boundary condition: fix phi = value at grid node flat_idx. More...
 

Static Public Member Functions

static SolverResult solve_poisson (ScalarField3D &phi, const ScalarField3D &source, double tol=1e-6, int max_iter=500)
 
static SolverResult solve_var_poisson (ScalarField3D &phi, const ScalarField3D &coeff, const std::vector< DirichletBC > &bcs, double tol=1e-6, int max_iter=500)
 
static VectorField3D gradient (const ScalarField3D &phi)
 
static ScalarField3D divergence (const VectorField3D &f)
 Compute div(f) via central finite differences.
 
static VectorField3D curl (const VectorField3D &A)
 

Detailed Description

Definition at line 111 of file fields.hpp.

Member Function Documentation

◆ curl()

◆ divergence()

◆ gradient()

VectorField3D num::FieldSolver::gradient ( const ScalarField3D phi)
static

Compute grad(phi) via central finite differences (one-sided at boundaries).

Definition at line 165 of file fields.cpp.

References num::gradient_3d(), num::ScalarField3D::grid(), num::phi, num::VectorField3D::x, num::VectorField3D::y, and num::VectorField3D::z.

Referenced by num::MagneticSolver::current_density().

◆ solve_poisson()

SolverResult num::FieldSolver::solve_poisson ( ScalarField3D phi,
const ScalarField3D source,
double  tol = 1e-6,
int  max_iter = 500 
)
static

Solve Laplacian(phi) = source with phi=0 on all boundaries (Dirichlet). phi is both the initial guess and the output solution. Internally solves the SPD system (-Laplacian)phi = -source via matrix-free CG.

Definition at line 65 of file fields.cpp.

References num::cg_matfree(), num::Grid3D::dx(), num::ScalarField3D::grid(), num::matvec(), num::neg_laplacian_3d(), num::Grid3D::nx(), num::Grid3D::ny(), num::Grid3D::nz(), and num::phi.

Referenced by num::MagneticSolver::solve_magnetic_field().

◆ solve_var_poisson()

SolverResult num::FieldSolver::solve_var_poisson ( ScalarField3D phi,
const ScalarField3D coeff,
const std::vector< DirichletBC > &  bcs,
double  tol = 1e-6,
int  max_iter = 500 
)
static

Solve div(coeff * grad(phi)) = 0 with arbitrary Dirichlet BCs.

Typical use: current flow in a heterogeneous conductor (coeff = conductivity sigma). Imposes BCs via symmetric penalty elimination so the system remains SPD -> CG converges. Neumann (zero normal flux) on all non-BC boundaries.

Definition at line 92 of file fields.cpp.

References num::cg(), num::cg_matfree(), num::Grid3D::dx(), num::e, num::ScalarField3D::grid(), num::matvec(), num::Grid3D::nx(), num::Grid3D::ny(), num::Grid3D::nz(), and num::phi.


The documentation for this class was generated from the following files: