Program Listing for File VolumeIntegration.h

Return to documentation for file (Utils/VolumeIntegration.h)

#ifndef __VOLUME_INTEGRATION_H__
#define __VOLUME_INTEGRATION_H__

#include <vector>
#include <string>
#include <iostream>

#include "Common/Common.h"

namespace Utilities
{
    class VolumeIntegration
    {

    private:
        int A;
        int B;
        int C;

        // projection integrals
        Real P1, Pa, Pb, Paa, Pab, Pbb, Paaa, Paab, Pabb, Pbbb;
        // face integrals
        Real Fa, Fb, Fc, Faa, Fbb, Fcc, Faaa, Fbbb, Fccc, Faab, Fbbc, Fcca;
        // volume integrals
        Real T0;
        Real T1[3];
        Real T2[3];
        Real TP[3];

    public:

        VolumeIntegration(const unsigned int nVertices, const unsigned int nFaces, Vector3r * const vertices, const unsigned int* indices);

        void compute_inertia_tensor(Real density);

        Real getMass() const { return m_mass; }
        Real getVolume() const { return m_volume; }
        Matrix3r const& getInertia() const { return m_theta; }
        Vector3r const& getCenterOfMass() const { return m_r; }

    private:

        void volume_integrals();
        void face_integrals(unsigned int i);

        void projection_integrals(unsigned int i);


        std::vector<Vector3r> m_face_normals;
        std::vector<Real> m_weights;
        unsigned int m_nVertices;
        unsigned int m_nFaces;
        std::vector<Vector3r> m_vertices;
        const unsigned int* m_indices;

        Real m_mass, m_volume;
        Vector3r m_r;
        Vector3r m_x;
        Matrix3r m_theta;
    };
}

#endif