Skip to content
Snippets Groups Projects
Forked from ogs / ogs
27220 commits behind the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Mesh.cpp 2.17 KiB
/**
 * 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)
{
	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];
}

void Mesh::makeNodesUnique()
{
	//check for unique mesh nodes
	//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
	unsigned nNodes (elem->getNNodes());
	for (unsigned i=0; i<nNodes; i++)
		elem->_nodes[i]->addElement(elem);
}

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::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);
			
		}
	}
	*/
}

}