Commit 5767d0c6 authored by Tomáš Jakubec's avatar Tomáš Jakubec
Browse files

The debugging functions are complete :D

parent 3968b0b9
Loading
Loading
Loading
Loading
+42 −16
Original line number Original line Diff line number Diff line
@@ -654,30 +654,44 @@ static MeshDataContainer<unsigned int, FromDim> colour(






template<unsigned int MeshDimension, typename IndexType, typename Real, unsigned int ...Reserve>
template<typename IndexType, typename Real, unsigned int ...Reserve>
bool edgeIsLeft(MeshElements<MeshDimension, IndexType, Real, Reserve...>& mesh,
bool edgeIsLeft(MeshElements<2, IndexType, Real, Reserve...>& mesh,
                typename MeshElements<MeshDimension, IndexType, Real, Reserve...>::template ElementType<2>& face,
                typename MeshElements<2, IndexType, Real, Reserve...>::template ElementType<2>& face,
                typename MeshElements<MeshDimension, IndexType, Real, Reserve...>::Edge& edge
                typename MeshElements<2, IndexType, Real, Reserve...>::Edge& edge
                ) {
                ) {


    Vertex<MeshDimension, Real> AminC = mesh.getVertices().at(edge.getVertexAIndex()) - face.getCenter();
    Vertex<2, Real> AminC = mesh.getVertices().at(edge.getVertexAIndex()) - face.getCenter();
    Vertex<MeshDimension, Real> BminC = mesh.getVertices().at(edge.getVertexBIndex()) - face.getCenter();
    Vertex<2, Real> BminC = mesh.getVertices().at(edge.getVertexBIndex()) - face.getCenter();





    for (IndexType i = 0; i < MeshDimension; i++){
    Real res = AminC[0]*BminC[1]-BminC[0]*AminC[1];
        IndexType ipo = (i+1)%(MeshDimension);
        IndexType ipt = (i+2)%(MeshDimension);
        Real res = AminC[ipo]*BminC[ipt]-BminC[ipo]*AminC[ipt];
        if ((MeshDimension + i + 1)% 2 == 0)
            res *= -1;
        if (abs(res) > 1e-4) {
    return res > 0;
    return res > 0;
        }
    }
    throw std::runtime_error("can not determine orientation of edge " +
    throw std::runtime_error("can not determine orientation of edge " +
                             std::to_string(edge.getIndex()) + " wrt face: " + std::to_string(face.getIndex()));
                             std::to_string(edge.getIndex()) + " wrt face: " + std::to_string(face.getIndex()));
}
}


template<typename IndexType, typename Real, unsigned int ...Reserve>
bool edgeIsLeft(MeshElements<3, IndexType, Real, Reserve...>& mesh,
                typename MeshElements<3, IndexType, Real, Reserve...>::template ElementType<2>& face,
                typename MeshElements<3, IndexType, Real, Reserve...>::Edge& edge,
                Vector<3, Real> faceNormal
                ) {

    Vertex<3, Real> AminC = mesh.getVertices().at(edge.getVertexAIndex()) - face.getCenter();
    Vertex<3, Real> BminC = mesh.getVertices().at(edge.getVertexBIndex()) - face.getCenter();

    Real res = Real(0);

    for (IndexType i = 0; i < 3; i++){
        IndexType ipo = (i+1)%(3);
        IndexType ipt = (i+2)%(3);
        res += AminC[i]*BminC[ipo]*faceNormal[ipt]-AminC[ipt]*BminC[ipo]*faceNormal[i];

    }
    return res > 0;
}

template<unsigned int MeshDimension, typename IndexType, typename Real, unsigned int ...Reserve>
template<unsigned int MeshDimension, typename IndexType, typename Real, unsigned int ...Reserve>
bool edgeIsLeft(MeshElements<MeshDimension, IndexType, Real, Reserve...>& mesh, IndexType faceIndex, IndexType edgeIndex) {
bool edgeIsLeft(MeshElements<MeshDimension, IndexType, Real, Reserve...>& mesh, IndexType faceIndex, IndexType edgeIndex) {


@@ -688,6 +702,18 @@ bool edgeIsLeft(MeshElements<MeshDimension, IndexType, Real, Reserve...>& mesh,


}
}


template<typename IndexType, typename Real, unsigned int ...Reserve>
bool edgeIsLeft(MeshElements<3, IndexType, Real, Reserve...>& mesh, IndexType faceIndex, IndexType edgeIndex) {

    typename MeshElements<3, IndexType, Real, Reserve...>::Edge& edge = mesh.getEdges().at(edgeIndex);
    typename MeshElements<3, IndexType, Real, Reserve...>::template ElementType<2>& face = mesh.template getElements<2>().at(faceIndex);

    auto normals = ComputeFaceNormals(mesh);

    return edgeIsLeft(mesh, face, edge, normals[face]);

}







+1 −0
Original line number Original line Diff line number Diff line
@@ -8,6 +8,7 @@ SOURCES += \
    ../debug/debug.cpp
    ../debug/debug.cpp


HEADERS += \
HEADERS += \
    ../debug/VariableExport.h \
    ../debug/consolelogger.h \
    ../debug/consolelogger.h \
    CellBoundaryConnection.h \
    CellBoundaryConnection.h \
    CellConnection.h \
    CellConnection.h \
+1 −1
Original line number Original line Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.10.0, 2019-10-05T13:24:56. -->
<!-- Written by QtCreator 4.10.0, 2019-10-07T13:49:40. -->
<qtcreator>
<qtcreator>
 <data>
 <data>
  <variable>EnvironmentId</variable>
  <variable>EnvironmentId</variable>
+4 −17
Original line number Original line Diff line number Diff line
@@ -40,6 +40,10 @@ public:
        return coordinates[pos];
        return coordinates[pos];
    }
    }


    unsigned int size() const {
        return Dim;
    }

    Real normEukleid();
    Real normEukleid();


    inline Real sumOfSquares() {
    inline Real sumOfSquares() {
@@ -206,23 +210,6 @@ bool Vector<Dim, Real>::operator !=(const Vector<Dim, Real>& v) const {
    return !(*this == v);
    return !(*this == v);
}
}


template <unsigned int Dim, typename Real = double>
std::ostream& operator <<(std::ostream& ost, const Vector<Dim,Real>& v) {
    for (unsigned int i = 0; i < Dim; i++) {
        ost << v[i] << ' ';
    }

    return ost;
}


template <unsigned int Dim, typename Real = double>
std::istream& operator >>(std::istream& ist, Vector<Dim,Real>& v) {
    for (unsigned int i = 0; i < Dim; i++) {
        ist >> v[i];
    }
    return ist;
}






+4 −17
Original line number Original line Diff line number Diff line
@@ -38,6 +38,10 @@ public:
        return coordinates[pos];
        return coordinates[pos];
    }
    }


    unsigned int size() const {
        return Dim;
    }

    Real normEukleid();
    Real normEukleid();


    inline Real sumOfSquares() {
    inline Real sumOfSquares() {
@@ -191,23 +195,6 @@ bool Vertex<Dim, Real>::operator !=(const Vertex<Dim, Real>& v) const {
    return !(*this == v);
    return !(*this == v);
}
}


template <unsigned int Dim, typename Real = double>
std::ostream& operator <<(std::ostream& ost, const Vertex<Dim,Real>& v) {
    for (unsigned int i = 0; i < Dim; i++) {
        ost << v[i] << ' ';
    }

    return ost;
}


template <unsigned int Dim, typename Real = double>
std::istream& operator >>(std::istream& ist, Vertex<Dim,Real>& v) {
    for (unsigned int i = 0; i < Dim; i++) {
        ist >> v[i];
    }
    return ist;
}




#endif // VERTEX_H
#endif // VERTEX_H
Loading