# Overview: Tidal tensor classification

The cosmic web can be classified (void, sheet, filament, halo) by the eigenvalues (and eigenvectors) of the tidal tensor (see e.g. Section 3.3 of this). We provide a few methods that are useful for computing such a classification.

# Availiable methods

//=================================================================================
// Computes the Hessian matrix of a grid [norm * f] via Fourier transforms.
// If hessian_of_potential_of_f is true then we compute the Hessian
// phi_ij where D^2 phi = norm * f_real
// Since f_ij = f_ji we only compute the elements for j >= i and they are stored in
// the order fxx fxy ... fyy fyz ... etc. in hessian_real
// In 2D: [fxx fxy fyy]
// In 3D: [fxx fxy fxz fyy fyz fzz]
//=================================================================================
template<int N>
void ComputeHessianWithFT(
FFTWGrid<N> & f_real,
std::vector< FFTWGrid<N> > & hessian_real,
double norm = 1.0,
bool hessian_of_potential_of_f = false)

//=================================================================================
// For each point in the grid compute eigenvectors and eigenvalues of the tensor
// H_ij where tensor_real contains the N(N-1)/2 grids [ 00,01,02,..,11,12,...,NN ]
//
// Eigenvalues are ordered in descending order
// Eigenvectors are stored in row major order in the grid vector
// This allocates N grids if compute_eigenvectors = false and N(N+1) grids otherwise
//=================================================================================
template<int N>
void SymmetricTensorEigensystem(
std::vector< FFTWGrid<N> > & tensor_real,
std::vector< FFTWGrid<N> > & eigenvalues,
std::vector< FFTWGrid<N> > & eigenvectors,
bool compute_eigenvectors = false)