|
numerics 0.1.0
|
#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) |
Definition at line 111 of file fields.hpp.
|
static |
Compute curl(A) via central finite differences (one-sided at boundaries).
Definition at line 179 of file fields.cpp.
References num::curl_3d(), num::ScalarField3D::dx(), num::ScalarField3D::grid(), num::ScalarField3D::nx(), num::ScalarField3D::ny(), num::ScalarField3D::nz(), num::ScalarField3D::ox(), num::ScalarField3D::oy(), num::ScalarField3D::oz(), num::VectorField3D::x, num::VectorField3D::y, and num::VectorField3D::z.
Referenced by num::MagneticSolver::solve_magnetic_field().
|
static |
Compute div(f) via central finite differences.
Definition at line 172 of file fields.cpp.
References num::divergence_3d(), num::ScalarField3D::dx(), num::ScalarField3D::grid(), num::ScalarField3D::nx(), num::ScalarField3D::ny(), num::ScalarField3D::nz(), num::ScalarField3D::ox(), num::ScalarField3D::oy(), num::ScalarField3D::oz(), num::VectorField3D::x, num::VectorField3D::y, and num::VectorField3D::z.
|
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().
|
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().
|
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.