Newer
Older
/**
* Mesh.cpp
*
* Date: 2012/05/02
* Author: KR
*/
#include "Mesh.h"
#include "Node.h"
#include "Elements/Tri.h"
#include "Elements/Quad.h"
#include "Elements/Tet.h"
#include "Elements/Hex.h"
#include "Elements/Pyramid.h"
#include "Elements/Prism.h"
namespace MeshLib {
Mesh::Mesh(const std::string &name, const std::vector<Node*> &nodes, const std::vector<Element*> &elements)
: _name(name), _nodes(nodes), _elements(elements)
{
_edge_length[0] = 0;
_edge_length[1] = 0;
Karsten Rink
committed
this->makeNodesUnique();
this->setElementInformationForNodes();
this->setNeighborInformationForElements();
}
Mesh::Mesh(const Mesh &mesh)
: _name(mesh.getName()), _nodes(mesh.getNodes()), _elements(mesh.getElements())
{
}
Mesh::~Mesh()
{
const size_t nElements (_elements.size());
for (size_t i=0; i<nElements; i++)
delete _elements[i];
const size_t nNodes (_nodes.size());
for (size_t i=0; i<nNodes; i++)
delete _nodes[i];
}
Karsten Rink
committed
void Mesh::makeNodesUnique()
{
//check for unique mesh nodes
Karsten Rink
committed
//PointVec::makePntsUnique
//replace node pointers in elements
unsigned nElements (_elements.size());
for (unsigned i=0; i<nElements; i++)
{
unsigned nNodes (_elements[i]->getNNodes());
for (unsigned j=0; j<nNodes; j++)
_elements[i]->getNodeIndex(j);
}
//set correct id for each node
void Mesh::addNode(Node* node)
{
_nodes.push_back(node);
}
void Mesh::addElement(Element* elem)
{
_elements.push_back(elem);
// add element informatin to nodes
Karsten Rink
committed
unsigned nNodes (elem->getNNodes());
for (unsigned i=0; i<nNodes; i++)
elem->_nodes[i]->addElement(elem);
}
Karsten Rink
committed
void Mesh::setElementInformationForNodes()
{
const size_t nElements (_elements.size());
for (unsigned i=0; i<nElements; i++)
{
const unsigned nNodes (_elements[i]->getNNodes());
for (unsigned j=0; j<nNodes; j++)
_elements[i]->_nodes[j]->addElement(_elements[i]);
}
}
void Mesh::setEdgeLengthRange(const double &min_length, const double &max_length)
{
if (min_length <= max_length)
{
_edge_length[0] = min_length;
_edge_length[1] = max_length;
}
std::cerr << "Error in MeshLib::Mesh::setEdgeLengthRange() - min length < max length." << std::endl;
}
Karsten Rink
committed
void Mesh::setNeighborInformationForElements()
{
/* TODO
const size_t nElements(_elements.size());
std::vector<std::vector<char>> nb (nElements, std::vector<char>(nElements));
for (unsigned i=0; i<nElements; i++)
{
Element* elem = _elements[i];
const size_t nNodes (elem->getNNodes());
for (unsigned j=0; j<nNodes; j++)
{
const Node* node = elem->getNode(j);
}
}
*/
}