/*
 This Source Code Form is subject to the terms of the Mozilla Public
 License, v. 2.0. If a copy of the MPL was not distributed with this
 file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/

/**
 * \brief This module provides tools to generate and manipulate mesh-based
 * vector gradients.
 */
namespace Vitelotte
{

///**
// * \brief Concepts used in Vitelotte.
// */
//namespace Concept
//{

// TODO: Update this to match real code

///**
// * \brief ElementConcept represents an interpolation function over a
// * face.
// */
//template < class _Mesh, typename _Scalar >
//class ElementConcept
//{
//}


///**
// * \brief Describe the procedure to compute the stiffness matrix of an element.
// */
//template < class _Mesh, typename _Scalar >
//class ElementBuilderConcept
//{
//public:
//    /**
//     * \brief The scalar type used by the FEM solver.
//     *
//     * May be different from the scalar type used by the Mesh.
//     */
//    typedef _Scalar Scalar;

//    /**
//     * \brief The type of the mesh containing the elements.
//     */
//    typedef _Mesh Mesh;

//public:
//    /**
//     * \brief Return the number of coefficients in the element stiffness
//     * matrix.
//     *
//     * The returned value *must* be the number of coefficients pushed by
//     * addCoefficients().
//     */
//    unsigned nCoefficients(const Mesh& mesh, Face element) const;

//    /**
//     * \brief Compute the coefficients of the element stiffness matrix and
//     * add them to `it`.
//     *
//     * Note that the number of coefficients pushed *must* be the value returned
//     * by nCoefficients().
//     */
//    template < typename InIt >
//    void addCoefficients(InIt& it, const Mesh& mesh, Face element) const;

//};



//}

}
