#include "FELib.hpp"
#include "LiftingOperator.hpp"
#include "OrthoNormalPhysicalSpaceFEManager.hpp"
#include "ReferenceSpaceFEManager.hpp"
#include "VTKWriterSpaMesh.hpp"
#include "ReadMeshVtu.hpp"
#include "WriteMeshVtu.hpp"

#include "eigen/Dense"
#include "eigen/Sparse"

#ifndef __common_template_types_hpp__
#define __common_template_types_hpp__

#include "InputData.hpp"

struct CommonTemplateTypes 
{
  typedef OrthoNormalPhysicalSpaceFEManager<InputData::dim> FEManagerType;
  //typedef ReferenceSpaceFEManager<InputData::dim> FEManagerType;
  typedef Eigen::SparseMatrix<double, Eigen::RowMajor> GlobalMatrixType;
  typedef Eigen::Matrix<double, Eigen::Dynamic, 1> GlobalVectorType;
  typedef Eigen::Matrix<double, InputData::n_dofs, InputData::n_dofs> LocalMatrixType;
  typedef Eigen::Matrix<double, InputData::n_dofs, 1> LocalVectorType;
  typedef LiftingOperator<InputData::dim> LiftingOperatorType;
  typedef SpaMesh::Mesh<InputData::dim> MeshType;
};
#endif
