Rocstar  1.0
Rocstar multiphysics simulation application
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
points.cpp
Go to the documentation of this file.
1 #include "points.h"
2 
3 
4 
5 /* points -- base class for point storage --------------------------------*/
6 
8  this->num_points = 0;
9  this->num_vars = 0;
10  this->num_indep_vars = 0;
11  this->pt_str = NULL;
12  return;
13 }
14 
16 
17  if(num_points > 0){
18 
19  for(int i=0; i<num_points; i++){
20  if(pt_set.check_value(i)){
21  delete pt_str[i];
22  }
23  }
24  delete[] pt_str;
25  }
26 
27  return;
28 }
29 
31 
33  num_vars = p.num_vars;
35 
36  if(num_points > 0)
37  pt_str = new pnt*[num_points];
38 
39  pt_set = p.pt_set;
40 
41  for(int i=0; i<num_points; i++){
42  if(pt_set.check_value(i)){
43 
44  pt_str[i] = new pnt( *(p.pt_str[i]) );
45 
46  }
47  }
48 
49 }
50 
52 
53  if(this != &p){
54 
55  for(int i=0; i<num_points; i++){
56  if(pt_set.check_value(i))
57  delete pt_str[i];
58  }
59 
60  if(pt_str != NULL)
61  delete[] pt_str;
62 
63  num_points = p.num_points;
64  num_vars = p.num_vars;
66 
67  pt_set = p.pt_set;
68  pt_str = new pnt*[num_points];
69 
70  for(int i=0; i<num_points; i++){
71  if(pt_set.check_value(i)){
72  pt_str[i] = new pnt( *(p.pt_str[i]) );
73  }
74  }
75  }
76 
77  return *this;
78 }
79 
81  return new points(*this);
82 }
83 
85 
86  if(num_points <= 0){
87  pt_str = new pnt*[n];
88  }
89  else{
90  pnt **temp;
91  temp = new pnt*[n];
92 
93  for(int i=0; i<get_num_points(); i++){
94  if(pt_set.check_value(i)){
95  temp[i] = pt_str[i];
96  delete pt_str[i];
97  }
98  }
99 
100  delete[] pt_str;
101  pt_str = temp;
102  }
103 
104  this->num_points = n;
105  pt_set.set_size(n);
106 
107 }
108 
110  num_vars = n;
111 }
112 
113 void points::set_num_indep_vars(int indep_vars){
114  num_indep_vars = indep_vars;
115 }
116 
118  return num_points;
119 }
120 
122  return num_vars;
123 }
124 
126  return num_indep_vars;
127 }
128 
129 void points::set_point_val(int point_number, int var, long double val){
130 
131  //Check point index
132  if(point_number > num_points)
133  return;
134 
135  //Check if the pnt object has already been created
136  if(pt_set.check_value(point_number)){
137 
138  //Check size of point object
139  if(pt_str[point_number]->size != num_vars && num_vars > pt_str[point_number]->size){
140  pnt *temp = new pnt;
141 
142  temp->vals = new long double[num_vars];
143  temp->size = num_vars;
144 
145  for(int m=0; m<pt_str[point_number]->size; m++){
146  temp->vals[m] = pt_str[point_number]->vals[m];
147  }
148 
149  delete[] pt_str[point_number]->vals;
150  delete[] pt_str[point_number];
151 
152  pt_str[point_number] = temp;
153  }
154 
155  if(pt_str[point_number]->size > var)
156  pt_str[point_number]->vals[var] = val;
157  }
158  else{
159  pt_str[point_number] = new pnt;
160  pt_str[point_number]->vals = new long double[num_vars];
161  pt_str[point_number]->size = num_vars;
162 
163  pt_set.set_value(point_number);
164 
165  if(pt_str[point_number]->size > var)
166  pt_str[point_number]->vals[var] = val;
167 
168  }
169 }
170 
171 void points::clear_dep_vars(int point_number){
172 
173  long double *temp = new long double[num_indep_vars];
174 
175  for(int i=0; i<num_indep_vars; i++){
176  temp[i] = pt_str[point_number]->vals[i];
177  }
178 
179  delete[] pt_str[point_number]->vals;
180  pt_str[point_number]->vals = temp;
181 }
182 
184  if(pt_set.check_value(n))
185  return *(pt_str[n]);
186  else{
187  pnt blank;
188  return blank;
189  }
190 }
191 
192 int points::get_closest(long double *coord){
193  return -1;
194 }
195 
196 std::vector<int> points::get_connected_points(int point_num){
197  std::vector<int> ret;
198  return ret;
199 }
200 
202  return;
203 }
204 
205 long double points::largest_val(int dim){
206  long double largest = -std::numeric_limits<long double>::infinity();
207 
208  for(int i=0; i<num_points; i++){
209  if(pt_str[i]->vals[dim] > largest)
210  largest = pt_str[i]->vals[dim];
211  }
212 
213  return largest;
214 }
215 
216 long double points::smallest_val(int dim){
217  long double smallest = std::numeric_limits<long double>::infinity();
218 
219  for(int i=0; i<num_points; i++){
220  if(pt_str[i]->vals[dim] < smallest)
221  smallest = pt_str[i]->vals[dim];
222  }
223 
224  return smallest;
225 }
226 
227 void points::delete_all(std::vector<points*> points_vector){
228  for(int set_num = 0; set_num < points_vector.size(); set_num++){
229  if(points_vector[set_num] != NULL){
230  delete points_vector[set_num];
231  }
232  }
233 
234  points_vector.erase(points_vector.begin(), points_vector.end());
235 }
236 
237 bool points::contains_null(std::vector<points*> points_vector){
238  for(int set_num = 0; set_num < points_vector.size(); set_num++){
239  if(points_vector[set_num] == NULL)
240  return true;
241  }
242 
243  return false;
244 }
245 
246 
247 
248 /* connect_points -- class for points with connectivity info -------------*/
249 
251  c_points = NULL;
252 }
253 
255  delete[] c_points;
256 }
257 
259 
260  if(cp.num_points > 0){
261 
263 
264  for(int i=0; i<num_points; i++){
265  c_points[i] = cp.c_points[i];
266  }
267  }
268 }
269 
271  if(this != &cp){
272 
273  int curr_pts = num_points;
274 
276 
277  delete[] c_points;
278 
279  c_points = new conn_points[cp.num_points];
280 
281  for(int i=0; i<cp.num_points; i++){
282  c_points[i] = cp.c_points[i];
283  }
284  }
285 
286  return *this;
287 }
288 
290  return new connect_points(*this);
291 }
292 
294 
295  long double low_dist = std::numeric_limits<long double>::infinity();
296  int low_point = -1;
297 
298  //Iterate through all points and find the point that's closest
299  //to the specified point
300  for(int i=0; i<num_points; i++){
301 
302  long double *d_calc = new long double[num_indep_vars];
303 
304  for(int m=0; m<num_indep_vars; m++){
305  d_calc[m] = pt_str[i]->vals[m];
306  }
307 
308  long double distance = dist(coord, d_calc, num_indep_vars);
309 
310  if( distance < low_dist ){
311  low_dist = distance;
312  low_point = i;
313  }
314 
315  delete[] d_calc;
316  }
317 
318  return low_point;
319 }
320 
321 void connect_points::set_connectivity(int point_num, int c_point){
322 
323  //Point numbers start at 1
324  //Subtract 1 for array storage (starting at 0)
325  point_num = point_num - 1;
326 
327  if(c_points == NULL && num_points > 0){
329  }
330 
331  bool dup = false;
332 
333  for(int i=0; i<c_points[point_num].points.size(); i++){
334  if(c_points[point_num].points[i] == c_point){
335  dup = true;
336  break;
337  }
338  }
339 
340  if(!dup)
341  c_points[point_num].set_next(c_point);
342 }
343 
344 std::vector<int> connect_points::get_connected_points(int point_num){
345 
346  std::vector<int> ret;
347 
348  //Point numbers start at 1
349  //Subtract 1 for array storage (starting at 0)
350  point_num = point_num - 1;
351 
352  if(point_num < 0)
353  return ret;
354 
355  for(int i=0; i<c_points[point_num].points.size(); i++){
356  ret.push_back(c_points[point_num].points[i]);
357  }
358 
359  return ret;
360 
361 }
362 
364  return;
365 }
366 
368 }
369 
371 }
372 
374  points = cp.points;
375 }
376 
377 //TODO
378 //Move implementation here
379 /*
380 conn_points & connect_points::conn_points::operator = (const conn_points &cp){
381 
382 }
383 */
384 
386  points.push_back(n);
387 }
388 
389 
390 
391 /* indexed_points -- class for indexed point storage ---------------------*/
392 
394  index_set = false;
395  return;
396 }
397 
399  return;
400 }
401 
403 
404  index_set = ip.index_set;
406 
407  index = ip.index;
408 }
409 
411 
412  if(this != &ip){
413 
415 
416  index_set = ip.index_set;
418 
419  index = ip.index;
420  }
421 
422  return *this;
423 }
424 
426  return new indexed_points(*this);
427 }
428 
430  return;
431 }
432 
433 pnt indexed_points::get_indexed_point(std::vector<int> loc){
434 
435  int index_loc = index.getValue(loc);
436 
437  return *(pt_str[ index_loc ]);
438 }
439 
441 
442  //TODO
443  //Data is ordered;
444  //Improve search algorithm
445 
446  long double low_dist = std::numeric_limits<long double>::infinity();
447  int low_point = -1;
448 
449  //Iterate through all points and find the point in the dataset
450  //that's closest to the specified point
451  for(int i=0; i<num_points; i++){
452 
453  long double *d_calc = new long double[num_indep_vars];
454 
455  for(int m=0; m<num_indep_vars; m++){
456  d_calc[m] = pt_str[i]->vals[m];
457  }
458 
459  long double distance = dist(coord, d_calc, num_indep_vars);
460 
461  if( distance < low_dist ){
462  low_dist = distance;
463  low_point = i;
464  }
465 
466  delete[] d_calc;
467  }
468 
469  return low_point;
470 }
471 
472 std::vector<int> indexed_points::get_connected_points(int point_num){
473 
474  std::vector<int> coords = index.translate_index_to_coords(point_num);
475 
476  std::vector<int> ret;
477 
478  //Iterate through each independent variable
479  for(int i=0; i<coords.size(); i++){
480  std::vector<int> loc;
481 
482  //Positive Direction
483  for(int j=0; j<coords.size(); j++){
484  if(j == i)
485  loc.push_back(coords[j] + 1);
486  else
487  loc.push_back(coords[j]);
488  }
489  int ptup = index.translate_coord_to_index(loc);
490 
491  //Erase coordinates
492  loc.erase(loc.begin(), loc.end());
493 
494  //Negative Direction
495  for(int j=0; j<coords.size(); j++){
496  if(j == i)
497  loc.push_back(coords[j] - 1);
498  else
499  loc.push_back(coords[j]);
500  }
501  int ptdown = index.translate_coord_to_index(loc);
502 
503  if(ptup > 0)
504  ret.push_back(ptup);
505  if(ptdown > 0)
506  ret.push_back(ptdown);
507  }
508 
509  return ret;
510 }
511 
512 std::vector<int> indexed_points::get_dim(){
513  return index_layout;
514 }
515 
516 
517 
518 /* manual_index_pts -- class for indexed points with manual index --------*/
519 
521  return;
522 }
523 
525  return;
526 }
527 
529  return;
530 }
531 
534  return *this;
535 }
536 
538  return new manual_index_pts(*this);
539 }
540 
541 void manual_index_pts::set_layout(std::vector<int> index_layout){
542 
543  this->index_layout.erase(this->index_layout.begin(), this->index_layout.end());
544 
545  for(int i=0; i<index_layout.size(); i++){
546  this->index_layout.push_back(index_layout[i]);
547  }
548 
549  index.initArray(index_layout);
550 
551  index_set = true;
552 
553 }
554 
555 void manual_index_pts::set_index(int point_num, std::vector<int> loc){
556  index.setValue(loc, point_num);
557 }
int get_num_vars()
Definition: points.cpp:121
indexed_points & operator=(const indexed_points &ip)
Definition: points.cpp:410
bitmap pt_set
Definition: points.h:89
virtual std::vector< int > get_connected_points(int point_num)
Definition: points.cpp:344
virtual std::vector< int > get_connected_points(int point_num)
Definition: points.cpp:196
int size
Definition: datatypedef.h:70
long double largest_val(int dim)
Definition: points.cpp:205
std::vector< int > index_layout
Definition: points.h:178
std::vector< int > translate_index_to_coords(int index)
Translate index to coordinates.
Definition: datatypedef.h:245
void set_num_indep_vars(int indep_vars)
Definition: points.cpp:113
virtual connect_points * clone()
Definition: points.cpp:289
int num_points
Definition: points.h:80
bool index_set
Definition: points.h:176
Definition: points.h:30
virtual indexed_points * clone()
Definition: points.cpp:425
int coord[NPANE][NROW *NCOL][3]
Definition: blastest.C:86
virtual manual_index_pts * clone()
Definition: points.cpp:537
void set_index(int point_num, std::vector< int > loc)
Definition: points.cpp:555
long double * vals
Definition: datatypedef.h:69
long double smallest_val(int dim)
Definition: points.cpp:216
manual_index_pts & operator=(const manual_index_pts &mip)
Definition: points.cpp:532
virtual ~points()
Definition: points.cpp:15
virtual std::vector< int > get_dim()
Definition: points.cpp:512
void set_point_val(int point_number, int var, long double val)
Definition: points.cpp:129
pnt get_point(int n)
Definition: points.cpp:183
Point object that represents a single point.
Definition: datatypedef.h:68
void set_num_points(int n)
Definition: points.cpp:84
int num_vars
Definition: points.h:81
virtual std::vector< int > get_connected_points(int point_num)
Definition: points.cpp:472
void set_value(int n)
virtual void sort()
Definition: points.cpp:429
pnt ** pt_str
Definition: points.h:85
points()
Definition: points.cpp:7
std::vector< int > points
Definition: points.h:121
bool check_value(int n)
pnt get_indexed_point(std::vector< int > loc)
Definition: points.cpp:433
virtual void sort()
Definition: points.cpp:363
blockLoc i
Definition: read.cpp:79
virtual void sort()
Definition: points.cpp:201
virtual ~indexed_points()
Definition: points.cpp:398
void set_size(int n)
int translate_coord_to_index(std::vector< int > vals)
Translate coordinates to the flat index actually used for storage.
Definition: datatypedef.h:220
const NT & n
void setValue(std::vector< int > rLoc, int rVal)
Set the value at the given coordinates.
Definition: datatypedef.h:286
virtual ~connect_points()
Definition: points.cpp:254
void set_connectivity(int point_num, int c_point)
Definition: points.cpp:321
static void delete_all(std::vector< points * > points_vector)
Definition: points.cpp:227
j indices j
Definition: Indexing.h:6
connect_points & operator=(const connect_points &cp)
Definition: points.cpp:270
int get_num_indep_vars()
Definition: points.cpp:125
VariableDimensionArray index
Definition: points.h:175
void set_layout(std::vector< int > index_layout)
Definition: points.cpp:541
static bool contains_null(std::vector< points * > points_vector)
Definition: points.cpp:237
virtual int get_closest(long double *coord)
Definition: points.cpp:192
void clear_dep_vars(int point_number)
Definition: points.cpp:171
virtual int get_closest(long double *coord)
Definition: points.cpp:293
long double dist(long double *coord1, long double *coord2, int size)
void set_num_vars(int n)
Definition: points.cpp:109
int num_indep_vars
Definition: points.h:82
int getValue(std::vector< int > rLoc)
Get the value specified by the loc coordinates.
Definition: datatypedef.h:272
conn_points * c_points
Definition: points.h:144
int get_num_points()
Definition: points.cpp:117
void initArray(std::vector< int > dim_sizes)
Initialize the array with the specified dimensions.
Definition: datatypedef.h:194
virtual int get_closest(long double *coord)
Definition: points.cpp:440
points & operator=(const points &p)
Definition: points.cpp:51
virtual points * clone()
Definition: points.cpp:80