Miind
AlgorithmInterface.hpp
Go to the documentation of this file.
1 // Copyright (c) 2005 - 2012 Marc de Kamps
2 // 2012 David-Matthias Sichau
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
6 //
7 // * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation
9 // and/or other materials provided with the distribution.
10 // * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software
11 // without specific prior written permission.
12 //
13 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
15 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
16 // USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
17 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
18 //
19 
20 #ifndef MPILIB_ALGORITHMS_ALGORITHMINTERFACE_HPP_
21 #define MPILIB_ALGORITHMS_ALGORITHMINTERFACE_HPP_
22 
28 #include <vector>
29 
30 namespace MPILib {
31 
37 template<class WeightValue>
39 public:
40 
41  typedef WeightValue WeightType;
42 
43  AlgorithmInterface()=default
44  ;
45  virtual ~AlgorithmInterface() {
46  }
47  ;
48 
53  virtual AlgorithmInterface* clone() const = 0;
54 
59  virtual void configure(const SimulationRunParameter& simParam) = 0;
60 
68  virtual void evolveNodeState(const std::vector<Rate>& rateVector,
69  const std::vector<WeightValue>& weightVector, Time time) {
70  throw utilities::Exception("You need to overwrite this method in your algorithm"
71  " if you want to use it");
72  }
73 
83  virtual void evolveNodeState(const std::vector<Rate>& nodeVector,
84  const std::vector<WeightValue>& weightVector, Time time,
85  const std::vector<NodeType>& typeVector) {
86  this->evolveNodeState(nodeVector, weightVector, time);
87  }
88 
95  virtual void prepareEvolve(const std::vector<Rate>& nodeVector,
96  const std::vector<WeightValue>& weightVector,
97  const std::vector<NodeType>& typeVector){};
98 
103  virtual Time getCurrentTime() const = 0;
104 
109  virtual Rate getCurrentRate() const = 0;
110 
117  virtual AlgorithmGrid getGrid(NodeId, bool b_state = true) const = 0;
118 
119 
120  std::valarray<double>& getArrayState(AlgorithmGrid& grid) const
121  {
122  return grid.getArrayState();
123  }
124 
125  std::valarray<double>& getArrayInterpretation(AlgorithmGrid& grid) const
126  {
127  return grid.getArrayInterpretation();
128  }
129 
131  {
132  return grid.getStateSize();
133  }
134 
135  Number getStateSize(const AlgorithmGrid & grid) const
136  {
137  return grid.getStateSize();
138  }
139 
140 };
141 
142 } /* namespace MPILib */
143 #endif /* MPILIB_ALGORITHMS_ALGORITHMINTERFACE_HPP_ */
Number getStateSize(const AlgorithmGrid &grid) const
std::valarray< double > & getArrayInterpretation()
virtual AlgorithmInterface * clone() const =0
unsigned int Number
double Time
The interface for all algorithm classes.
virtual void prepareEvolve(const std::vector< Rate > &nodeVector, const std::vector< WeightValue > &weightVector, const std::vector< NodeType > &typeVector)
virtual Rate getCurrentRate() const =0
std::valarray< double > & getArrayState(AlgorithmGrid &grid) const
virtual Time getCurrentTime() const =0
virtual void evolveNodeState(const std::vector< Rate > &nodeVector, const std::vector< WeightValue > &weightVector, Time time, const std::vector< NodeType > &typeVector)
virtual void configure(const SimulationRunParameter &simParam)=0
unsigned int NodeId
Parameter determining how a simulation is run. Specifiying begin and end time, log file names...
Number & getStateSize(AlgorithmGrid &grid) const
std::valarray< double > & getArrayInterpretation(AlgorithmGrid &grid) const
virtual void evolveNodeState(const std::vector< Rate > &rateVector, const std::vector< WeightValue > &weightVector, Time time)
std::valarray< double > & getArrayState()
virtual AlgorithmGrid getGrid(NodeId, bool b_state=true) const =0
double Rate