Конечно-элементная реализация C ++

Я имею дело с кодом, который действительно плохо прокомментирован, так как мне нужно расширить несколько функций, мне нужно понять, что делает каждый фрагмент кода, чтобы знать, повлияют ли на него мои изменения.

Код касается генерации двумерной сетки (для нее используется библиотека Triangle) и решения PDE на ней.

Вот код, который я не понимаю:

void FiniteElement<Integrator, ORDER>::setPhiMaster()
{
Eigen::Matrix<Real,3*ORDER,1> coefficients;
for (auto i=0; i < 3*ORDER; i++)
{
coefficients = MatrixXr::Zero(3*ORDER,1);
coefficients(i) = 1;
for (auto iq=0; iq < Integrator::NNODES; iq++)
{
Real phi = evaluate_point<ORDER>(reference_,Integrator::NODES[iq],coefficients);
phiMapMaster_(i,iq) = phi;
}
}
}

В конце я хотел бы знать, что такое phiMapMaster_ и как его можно использовать!

Это метод внутри класса шаблона FiniteElement, предположим, ORDER = 1 и Integrator:

class IntegratorTriangleP2{
public:
static const UInt ORDER = 1;
//Number of nodes
static const UInt NNODES = 3;
//Point locations
static const std::vector<Point> NODES;
static const std::vector<Real> WEIGHTS;
};const std::vector<Real> IntegratorTriangleP2::WEIGHTS = std::vector<Real>{ {1./3, 1./3, 1./3} };
const std::vector<Point> IntegratorTriangleP2::NODES = std::vector<Point> { {Point(1./6,1./6),Point(2./3,1./6),Point(1./6,2./3)} };

(Точка такая же, как std :: complex), а вот метод valu_point, который принимает в качестве треугольника (просто 3 точки, упорядоченные против часовой стрелки), точку (которая является внутренней по отношению к треугольнику) и коэффициенты Фурье основание определено на треугольнике

template <>
inline Real evaluate_point<1>(const Triangle<3>& t, const Point& point,      const Eigen::Matrix<Real,3,1>& coefficients)
{
Eigen::Matrix<Real,3,1> bary_coeff = t.getBaryCoordinates(point);
//getBaryCoordinates retunrs the barycentric coordinates of the point wrt the triangle t
return(coefficients.dot(bary_coeff));
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]