GPUE  v1.0
GPU Gross-Pitaevskii Equation numerical solver for Bose-Einstein condensates
node.cu
Go to the documentation of this file.
1 
2 //##############################################################################
3 
4 #include "../include/node.h"
5 #include <memory>
6 #include <iostream>
7 
8 using namespace LatticeGraph;
9 
10 //##############################################################################
11 //##################### Ceiling Cat & Basement Cat ######################
12 //##############################################################################
13 
14 Node::Node():uid(++suid){
15 }
16 
17 Node::~Node(){
18  this->removeEdges();
19 }
20 
21 Node::Node(Vtx::Vortex& data):uid(++suid){
22  this->data = data;
23 }
24 
25 //##############################################################################
26 //##################### Get stuff ######################
27 //##############################################################################
28 
29 unsigned int Node::getUid(){
30  return uid;
31 }
32 
33 Vtx::Vortex& Node::getData(){
34  return this->data;
35 }
36 
37 std::vector<std::weak_ptr <Edge> >& Node::getEdges(){
38  return this->edges;
39 }
40 
41 std::weak_ptr<Edge> Node::getEdge(int idx) {
42  return this->edges.at(idx);
43 }
44 
45 std::shared_ptr<Node> Node::getConnectedNode(std::shared_ptr<Edge> e){
46  return (e->getVortex(0).lock()->getUid() != this->Node::getUid()) ? e->getVortex(0).lock() : e->getVortex(1).lock() ;
47 }
48 
49 //##############################################################################
50 //##################### Set stuff ######################
51 //##############################################################################
52 
53 void Node::setData(Vtx::Vortex& data){
54  this->data = data;
55 }
56 
57 //##############################################################################
58 //##################### +/- stuff ######################
59 //##############################################################################
60 
61 void Node::addEdge(std::weak_ptr<Edge> e){
62  this->edges.push_back(e);
63 }
64 
65 void Node::removeEdgeUid(unsigned int uid){
66  for (size_t ii=0; ii < this->Node::edges.size(); ++ii){
67  if(this->Node::getEdge(ii).lock()->getUid() == uid){
68  this->Node::getEdges().erase(this->Node::getEdges().begin()+ii);
69  break;
70  }
71  }
72 }
73 
74 void Node::removeEdgeIdx(unsigned int idx){
75  this->Node::getEdges().erase(this->Node::getEdges().begin()+idx);
76 }
77 
78 void Node::removeEdge(std::shared_ptr<Node> n) {
79  for(std::weak_ptr<Edge> e1 : this->Node::getEdges()){
80  for(std::weak_ptr<Edge> e2 : n->getEdges()){
81  if (Node::getConnectedNode(e1.lock())->getUid() == e2.lock()->getUid()){
82  this->Node::removeEdgeUid(e2.lock()->getUid());
83  return;
84  }
85  }
86  }
87 }
88 
89 void Node::removeEdge(std::weak_ptr<Edge> edge){
90  this->Node::removeEdgeUid(edge.lock()->getUid());
91 }
92 
93 void Node::removeEdges(){
94  for(size_t ii=0; ii<this->getEdges().size(); ++ii){
95  this->Node::removeEdge(this->Node::getEdge(ii));
96  }
97  this->Node::getEdges().clear();
98 }
99 
100 //##############################################################################