Skip to content
Snippets Groups Projects
Mesh.cpp 2.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * 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];
    }
    
    
    {
    	//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);
    			
    		}
    	}
    	*/
    }