mirror of https://github.com/CGAL/cgal
Don't pass data members as arguments
This commit is contained in:
parent
63094e0582
commit
d460093a6e
|
|
@ -303,11 +303,11 @@ namespace Heat_method_3 {
|
||||||
return kronecker;
|
return kronecker;
|
||||||
}
|
}
|
||||||
|
|
||||||
void solve_cotan_laplace(const Matrix& M, const Matrix& c, const Matrix& x, int dimension)
|
void solve_cotan_laplace()
|
||||||
{
|
{
|
||||||
Matrix A, A0;
|
Matrix A, A0;
|
||||||
scale(A0, m_time_step, c);
|
scale(A0, m_time_step, m_cotan_matrix);
|
||||||
add(A,M,A0);
|
add(A,m_mass_matrix ,A0);
|
||||||
|
|
||||||
LA::Solver solver;
|
LA::Solver solver;
|
||||||
LA::compute(solver, A);
|
LA::compute(solver, A);
|
||||||
|
|
@ -316,7 +316,7 @@ namespace Heat_method_3 {
|
||||||
// decomposition failed
|
// decomposition failed
|
||||||
CGAL_error_msg("Eigen Decomposition in cotan failed");
|
CGAL_error_msg("Eigen Decomposition in cotan failed");
|
||||||
}
|
}
|
||||||
LA::solve(solver, x.eigen_object(), solved_u);
|
LA::solve(solver, kronecker, solved_u);
|
||||||
|
|
||||||
if(solver.info()!=Eigen::Success) {
|
if(solver.info()!=Eigen::Success) {
|
||||||
// solving failed
|
// solving failed
|
||||||
|
|
@ -380,9 +380,9 @@ namespace Heat_method_3 {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void compute_divergence( Matrix& result, const std::vector<Vector_3>& X, int rows) const
|
void compute_divergence()
|
||||||
{
|
{
|
||||||
Matrix indexD(rows,1);
|
Matrix indexD(dimension,1);
|
||||||
CGAL::Vertex_around_face_iterator<TriangleMesh> vbegin, vend, vmiddle;
|
CGAL::Vertex_around_face_iterator<TriangleMesh> vbegin, vend, vmiddle;
|
||||||
BOOST_FOREACH(face_descriptor f, faces(tm)) {
|
BOOST_FOREACH(face_descriptor f, faces(tm)) {
|
||||||
boost::tie(vbegin, vend) = vertices_around_face(halfedge(f,tm),tm);
|
boost::tie(vbegin, vend) = vertices_around_face(halfedge(f,tm),tm);
|
||||||
|
|
@ -419,11 +419,11 @@ namespace Heat_method_3 {
|
||||||
indexD.add_coef(j, 0, (1./2)*j_entry);
|
indexD.add_coef(j, 0, (1./2)*j_entry);
|
||||||
indexD.add_coef(k, 0, (1./2)*k_entry);
|
indexD.add_coef(k, 0, (1./2)*k_entry);
|
||||||
}
|
}
|
||||||
indexD.swap(result);
|
indexD.swap(m_index_divergence);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VectorXd value_at_source_set(const VectorXd& phi, int dimension) const
|
void value_at_source_set(const VectorXd& phi)
|
||||||
{
|
{
|
||||||
VectorXd source_set_val(dimension);
|
VectorXd source_set_val(dimension);
|
||||||
if(sources.empty())
|
if(sources.empty())
|
||||||
|
|
@ -461,17 +461,16 @@ namespace Heat_method_3 {
|
||||||
source_set_val(i,0) = min_val;
|
source_set_val(i,0) = min_val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return source_set_val;
|
solved_phi.swap(source_set_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VectorXd solve_phi(const Matrix& c, const Matrix& divergence, int dimension) const
|
void solve_phi()
|
||||||
{
|
{
|
||||||
|
|
||||||
VectorXd phi;
|
VectorXd phi;
|
||||||
LA::Solver solver;
|
LA::Solver solver;
|
||||||
|
|
||||||
LA::compute(solver, c);
|
LA::compute(solver, m_cotan_matrix);
|
||||||
|
|
||||||
if(solver.info()!=Eigen::Success) {
|
if(solver.info()!=Eigen::Success) {
|
||||||
// decomposition failed
|
// decomposition failed
|
||||||
|
|
@ -479,14 +478,14 @@ namespace Heat_method_3 {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LA::solve(solver, divergence, phi);
|
LA::solve(solver, m_index_divergence, phi);
|
||||||
|
|
||||||
if(solver.info()!=Eigen::Success) {
|
if(solver.info()!=Eigen::Success) {
|
||||||
// solving failed
|
// solving failed
|
||||||
CGAL_error_msg("Eigen Solving in phi failed");
|
CGAL_error_msg("Eigen Solving in phi failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
return value_at_source_set(phi, dimension);
|
value_at_source_set(phi);
|
||||||
}
|
}
|
||||||
|
|
||||||
//currently, this function will return a (number of vertices)x1 vector where
|
//currently, this function will return a (number of vertices)x1 vector where
|
||||||
|
|
@ -508,10 +507,10 @@ namespace Heat_method_3 {
|
||||||
{
|
{
|
||||||
//don't need to recompute Mass matrix, cotan matrix or timestep reflect that in this function
|
//don't need to recompute Mass matrix, cotan matrix or timestep reflect that in this function
|
||||||
update_kronecker_delta();
|
update_kronecker_delta();
|
||||||
solve_cotan_laplace(m_mass_matrix, m_cotan_matrix, kronecker, dimension);
|
solve_cotan_laplace();
|
||||||
compute_unit_gradient();
|
compute_unit_gradient();
|
||||||
compute_divergence(index_divergence, X, dimension);
|
compute_divergence();
|
||||||
solved_phi = solve_phi(m_cotan_matrix, index_divergence, dimension);
|
solve_phi();
|
||||||
source_change_flag = false;
|
source_change_flag = false;
|
||||||
std::cout<<"sources changed, recompute\n";
|
std::cout<<"sources changed, recompute\n";
|
||||||
}
|
}
|
||||||
|
|
@ -606,12 +605,12 @@ namespace Heat_method_3 {
|
||||||
m_time_step = m_time_step*summation_of_edges();
|
m_time_step = m_time_step*summation_of_edges();
|
||||||
m_time_step = m_time_step*m_time_step;
|
m_time_step = m_time_step*m_time_step;
|
||||||
update_kronecker_delta();
|
update_kronecker_delta();
|
||||||
solve_cotan_laplace(m_mass_matrix, m_cotan_matrix, kronecker, m);
|
solve_cotan_laplace();
|
||||||
//edit unit_grad
|
//edit unit_grad
|
||||||
compute_unit_gradient();
|
compute_unit_gradient();
|
||||||
//edit compute_divergence
|
//edit compute_divergence
|
||||||
compute_divergence(index_divergence, X, m);
|
compute_divergence();
|
||||||
solved_phi = solve_phi(m_cotan_matrix, index_divergence, m);
|
solve_phi();
|
||||||
}
|
}
|
||||||
|
|
||||||
int dimension;
|
int dimension;
|
||||||
|
|
@ -625,7 +624,7 @@ namespace Heat_method_3 {
|
||||||
Matrix m_mass_matrix, m_cotan_matrix;
|
Matrix m_mass_matrix, m_cotan_matrix;
|
||||||
VectorXd solved_u;
|
VectorXd solved_u;
|
||||||
std::vector<Vector_3> X;
|
std::vector<Vector_3> X;
|
||||||
Matrix index_divergence;
|
Matrix m_index_divergence;
|
||||||
Eigen::VectorXd solved_phi;
|
Eigen::VectorXd solved_phi;
|
||||||
std::set<Index> source_index;
|
std::set<Index> source_index;
|
||||||
bool source_change_flag;
|
bool source_change_flag;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue