// SpaFEDTe, a Template based C++ library for creating 
// Discontinuous Finite Element Spaces,
// Copyright (C) 2012 Lorenzo Alessio Botti

/* This library is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Lesser General Public */ 
/* License as published by the Free Software Foundation either */ 
/* version 3.0 of the License, or (at your option) any later version. */

/* This software is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU */
/* Lesser General Public License for more details. */

/* You should have received a copy of the GNU Lesser General Public */
/* License along with this software; if not, a copy of the full */
/* GNU Lesser General Public License can be found at */
/* http://www.gnu.org/licenses/. */

#ifndef __input_data_hpp__
#define __input_data_hpp__

#include <array>

namespace InputData
{
  const unsigned int dim = 2;
  const unsigned int p_order = 0;
  const unsigned int n_dofs = ((p_order+1)*(p_order+2))/2;
  const unsigned int n_dofs_ppo = ((p_order+2)*(p_order+3))/2;
  const unsigned int n_face_dofs = (p_order+1);
  const unsigned int n_var = 1;
  const bool lagrangeMultBC = false;

  constexpr int MajorOption(int p_order)
  {
    return p_order == 0 ? Eigen::ColMajor : Eigen::RowMajor;
  }
 
  const std::array<std::string,7> squareQuadMeshes = {std::string("../../meshes_vtu/square_01/square_01_4.vtu"),
                                                      std::string("../../meshes_vtu/square_01/square_01_8.vtu"),
					              std::string("../../meshes_vtu/square_01/square_01_16.vtu"),
					              std::string("../../meshes_vtu/square_01/square_01_32.vtu"),
					              std::string("../../meshes_vtu/square_01/square_01_64.vtu"),
                                                      std::string("../../meshes_vtu/square_01/square_01_128.vtu"),
                                                      std::string("../../meshes_vtu/square_01/square_01_256.vtu")};

  const std::array<std::string,7> squareDistQuadMeshes = {std::string("../../meshes_vtu/square_01/square_01_dist02Quad_4.vtu"),
                                                          std::string("../../meshes_vtu/square_01/square_01_dist02Quad_8.vtu"),
					                  std::string("../../meshes_vtu/square_01/square_01_dist02Quad_16.vtu"),
					                  std::string("../../meshes_vtu/square_01/square_01_dist02Quad_32.vtu"),
					                  std::string("../../meshes_vtu/square_01/square_01_dist02Quad_64.vtu"),
                                                          std::string("../../meshes_vtu/square_01/square_01_dist02Quad_128.vtu"),
                                                          std::string("../../meshes_vtu/square_01/square_01_dist02Quad_256.vtu")};

  const std::array<std::string,7> squareDistTriMeshes = {std::string("../../meshes_vtu/square_01/square_01_distTri_4.vtu"),
                                                         std::string("../../meshes_vtu/square_01/square_01_distTri_8.vtu"),
					                 std::string("../../meshes_vtu/square_01/square_01_distTri_16.vtu"),
					                 std::string("../../meshes_vtu/square_01/square_01_distTri_32.vtu"),
					                 std::string("../../meshes_vtu/square_01/square_01_distTri_64.vtu"),
                                                         std::string("../../meshes_vtu/square_01/square_01_distTri_128.vtu"),
                                                         std::string("../../meshes_vtu/square_01/square_01_distTri_256.vtu")};
  const auto meshSequence = squareQuadMeshes; 
  const double pi = 3.1415926535897932384626433832795029L;
}
#endif 
