📄 blas_poisson.h
字号:
#ifndef POISSON_SOLVER_FLENS_IMPL_BLAS_POISSON_H#define POISSON_SOLVER_FLENS_IMPL_BLAS_POISSON_H 1#include <poisson_solver/flens_impl/gauss_seidel.h>#include <poisson_solver/flens_impl/gridvector.h>#include <poisson_solver/flens_impl/poissonmatrix.h>#include <poisson_solver/flens_impl/prolongation.h>#include <poisson_solver/flens_impl/restriction.h>namespace flens {//-- BLAS for GridVector1D -----------------------------------------------------voidaxpy(double alpha, const GridVector1D &x, GridVector1D &y);voidcopy(const GridVector1D &x, GridVector1D &y);doublenormInf(const GridVector1D &v);doublenormL2(const GridVector1D &v);//-- BLAS for GridVector2D -----------------------------------------------------voidcopy(const GridVector2D &x, GridVector2D &y);voidscal(double alpha, GridVector2D &x);doubledot(const GridVector2D &x, const GridVector2D &y);voidaxpy(double alpha, const GridVector2D &x, GridVector2D &y);doublenormInf(const GridVector2D &v);doublenormL2(const GridVector2D &v);voidmv(double alpha, const DirichletPoisson2D &A, const GridVector2D &x, double beta, GridVector2D &y);//-- BLAS for StaggeredGridVector2D --------------------------------------------template <bool DX, bool DY>voidaxpy(double alpha, const StaggeredGridVector2D<DX,DY> &x, StaggeredGridVector2D<DX,DY> &y);template <bool DX, bool DY>voidcopy(const StaggeredGridVector2D<DX,DY> &x, StaggeredGridVector2D<DX,DY> &y);template <bool DX, bool DY>doublenormInf(const StaggeredGridVector2D<DX,DY> &v);template <bool DX, bool DY>doublenormL2(const StaggeredGridVector2D<DX,DY> &v);//-- Residual: r = f - A*u -----------------------------------------------------voidresidual(const GridVector1D &f, const DirichletPoisson1D &A, const GridVector1D &u, GridVector1D &r);voidresidual(const GridVector1D &f, const NeumannPoisson1D &A, const GridVector1D &u, GridVector1D &r);voidresidual(const GridVector2D &f, const DirichletPoisson2D &A, const GridVector2D &u, GridVector2D &r);template <bool DX, bool DY>voidresidual(const StaggeredGridVector2D<DX,DY> &f, const DirichletPoisson2D &A, const StaggeredGridVector2D<DX,DY> &u, StaggeredGridVector2D<DX,DY> &r);template <bool DX, bool DY>voidresidual(const StaggeredGridVector2D<DX,DY> &f, const NeumannPoisson2D &A, const StaggeredGridVector2D<DX,DY> &u, StaggeredGridVector2D<DX,DY> &r);//-- Gauss-Seidel: u = S(A,f)*u_1 ---------------------------------------------voidmv(Transpose trans, double alpha, const GaussSeidel<DirichletPoisson1D, GridVector1D> &GS, const GridVector1D &u_1, double beta, GridVector1D &u);voidmv(Transpose trans, double alpha, const GaussSeidel<NeumannPoisson1D, GridVector1D> &GS, const GridVector1D &u_1, double beta, GridVector1D &u);//-- Gauss-Seidel Red-Black: u = S(A,f)*u_1 -----------------------------------voidmv(Transpose trans, double alpha, const GaussSeidelRedBlack<DirichletPoisson2D, GridVector2D> &GS, const GridVector2D &u_1, double beta, GridVector2D &u);template <bool DX, bool DY>voidmv(Transpose trans, double alpha, const GaussSeidelRedBlack<DirichletPoisson2D, StaggeredGridVector2D<DX,DY> > &GS, const StaggeredGridVector2D<DX,DY> &u_1, double beta, StaggeredGridVector2D<DX,DY> &u);template <bool DX, bool DY>voidmv(Transpose trans, double alpha, const GaussSeidelRedBlack<NeumannPoisson2D, StaggeredGridVector2D<DX,DY> > &GS, const StaggeredGridVector2D<DX,DY> &u_1, double beta, StaggeredGridVector2D<DX,DY> &u);//-- Restriction: vc = R*v ----------------------------------------------------//---- dirichlet poisson 1d ----------------------------------------------------voidmv(Transpose trans, double alpha, const Restriction &R, const GridVector1D &v, double beta, GridVector1D &vc);//---- dirichlet poisson 2d ----------------------------------------------------voidmv(Transpose trans, double alpha, const Restriction &R, const GridVector2D &v, double beta, GridVector2D &vc);//-- neumann poisson 1d --------------------------------------------------------voidmv(Transpose trans, double alpha, const Restriction_NBC &R, const GridVector1D &v, double beta, GridVector1D &vc);//-- neumann poisson 2d --------------------------------------------------------template <bool DX, bool DY>voidmv(Transpose trans, double alpha, const Restriction &R, const StaggeredGridVector2D<DX,DY> &v, double beta, StaggeredGridVector2D<DX,DY> &vc);//-- Prolongation: v += P*v_c -------------------------------------------------//-- dirichlet poisson 1d ------------------------------------------------------voidmv(Transpose trans, double alpha, const Prolongation &P, const GridVector1D &vc, double beta, GridVector1D &v);voidmv(Transpose trans, double alpha, const Prolongation &P, const GridVector2D &vc, double beta, GridVector2D &v);//-- neumann poisson 1d --------------------------------------------------------voidmv(Transpose trans, double alpha, const Prolongation_NBC &P, const GridVector1D &vc, double beta, GridVector1D &v);//-- neumann poisson 2d --------------------------------------------------------template <bool DX, bool DY>voidmv(Transpose trans, double alpha, const Prolongation &R, const StaggeredGridVector2D<DX,DY> &v, double beta, StaggeredGridVector2D<DX,DY> &vc);} // namespace flens#include <poisson_solver/flens_impl/blas_poisson.tcc>#endif // POISSON_SOLVER_FLENS_IMPL_BLAS_POISSON_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -