https://gitlab.opengeosys.org/ogs/ogs.git
Raw File
Tip revision: df4a0f306518214148b5b2a1a96234d8d9b2fd07 authored by cbsilver on 27 July 2021, 11:26:28 UTC
Small bug fixes in the ModifiedCamClay report
Tip revision: df4a0f3
Node.cpp
/**
 * \file
 * \author Karsten Rink
 * \date   2012-05-02
 * \brief  Implementation of the Node class.
 *
 * \copyright
 * Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org)
 *            Distributed under a Modified BSD License.
 *              See accompanying file LICENSE.txt or
 *              http://www.opengeosys.org/project/license
 *
 */

#include "MeshLib/Node.h"

#include "Elements/Element.h"

namespace MeshLib
{
Node::Node(const double coords[3], std::size_t id)
    : MathLib::Point3dWithID(
          std::array<double, 3>{{coords[0], coords[1], coords[2]}}, id)
{
}

Node::Node(std::array<double, 3> const& coords, std::size_t id)
    : MathLib::Point3dWithID(coords, id)
{
}

Node::Node(double x, double y, double z, std::size_t id)
    : MathLib::Point3dWithID(std::array<double, 3>({{x, y, z}}), id)
{
}

Node::Node(const Node& node) : MathLib::Point3dWithID(node, node.getID()) {}

void Node::updateCoordinates(double x, double y, double z)
{
    (*this)[0] = x;
    (*this)[1] = y;
    (*this)[2] = z;

    const std::size_t nElements(this->_elements.size());
    for (std::size_t i = 0; i < nElements; i++)
    {
        _elements[i]->computeVolume();
    }
}

bool isBaseNode(Node const& node)
{
    // Check if node is connected.
    if (node.getNumberOfElements() == 0)
    {
        return true;
    }

    // In a mesh a node always belongs to at least one element.
    auto const e = node.getElement(0);

    auto const n_base_nodes = e->getNumberOfBaseNodes();
    auto const local_index = e->getNodeIDinElement(&node);
    return local_index < n_base_nodes;
}
}  // namespace MeshLib
back to top