ESyS-Particle  4.0.1
ScalarInteractionFieldSlave.hpp
1 
2 // //
3 // Copyright (c) 2003-2011 by The University of Queensland //
4 // Earth Systems Science Computational Centre (ESSCC) //
5 // http://www.uq.edu.au/esscc //
6 // //
7 // Primary Business: Brisbane, Queensland, Australia //
8 // Licensed under the Open Software License version 3.0 //
9 // http://www.opensource.org/licenses/osl-3.0.php //
10 // //
12 
13 //-- STL includes --
14 #include <vector>
15 #include <utility>
16 
17 using std::vector;
18 using std::pair;
19 
20 // -- IO includes --
21 #include <iostream>
22 
23 using std::cout;
24 using std::endl;
25 
26 #include "Foundation/quadtuple.h"
27 #include "pis/pi_storage.h"
28 
36 template <typename T>
38 {
39  m_rdf=rdf;
40 }
41 
45 template <typename T>
47 {
48  vector<pair<Vec3,double> > data;
49 
50  data=this->m_pis->forAllInnerInteractionsGetWithPos(m_rdf);
51 
52  // send data to master
53  this->m_comm->send_gather(data,0);
54 }
55 
59 template <typename T>
61 {
62  vector<pair<esys::lsm::quintuple<Vec3,double,Vec3,double,Vec3>,double> > data;
63 
64  data=this->m_pis->forAllInnerInteractionsGetRaw2(m_rdf);
65 
66  // send data to master
67  this->m_comm->send_gather(data,0);
68 }
69 
73 template <typename T>
75 {
76  vector<double> data_vec;
77 
78  // get data from interactions
79  this->m_pis->forAllInnerInteractionsGet(data_vec,m_rdf);
80 
81  // sum data
82  double sum=0.0;
83  for(vector<double>::iterator iter=data_vec.begin();
84  iter!=data_vec.end();
85  iter++){
86  sum+=*iter;
87  }
88 
89  vector<double> sum_vec;
90  sum_vec.push_back(sum);
91  this->m_comm->send_gather(sum_vec,0);
92 }
93 
97 template <typename T>
99 {
100  vector<pair<esys::lsm::triplet<int,int,Vec3>, double> > data;
101 
102  // debug output
103  console.XDebug() << "ScalarInteractionFieldSlave<T>::SendDataWithID()\n";
104 
105  data=this->m_pis->forAllInnerInteractionsGetDataWithID(m_rdf);
106 
107  // debug output
108  console.XDebug() << "sending " << data.size() << " data\n";
109 
110  // send data to master
111  this->m_comm->send_gather(data,0);
112 }
113 
114 
118 template <typename T>
120 {
121  vector<double> data_vec;
122 
123  // get data from interactions
124  this->m_pis->forAllInnerInteractionsGet(data_vec,m_rdf);
125 
126  // sum data
127  double max=*(data_vec.begin());
128  for(vector<double>::iterator iter=data_vec.begin();
129  iter!=data_vec.end();
130  iter++){
131  max=(*iter > max) ? *iter : max;
132  }
133 
134  vector<double> max_vec;
135  max_vec.push_back(max);
136  this->m_comm->send_gather(max_vec,0);
137 }