MercuryDPM  Trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
PolydisperseInsertionBoundary.h
Go to the documentation of this file.
1 //Copyright (c) 2013-2020, The MercuryDPM Developers Team. All rights reserved.
2 //For the list of developers, see <http://www.MercuryDPM.org/Team>.
3 //
4 //Redistribution and use in source and binary forms, with or without
5 //modification, are permitted provided that the following conditions are met:
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above copyright
9 // notice, this list of conditions and the following disclaimer in the
10 // documentation and/or other materials provided with the distribution.
11 // * Neither the name MercuryDPM nor the
12 // names of its contributors may be used to endorse or promote products
13 // derived from this software without specific prior written permission.
14 //
15 //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16 //ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 //WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 //DISCLAIMED. IN NO EVENT SHALL THE MERCURYDPM DEVELOPERS TEAM BE LIABLE FOR ANY
19 //DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 //(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 //LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 //ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 //(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 //SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 
26 #ifndef BOUNDARIES_POLYDISPERSEINSERTIONBOUNDARY_H
27 #define BOUNDARIES_POLYDISPERSEINSERTIONBOUNDARY_H
28 
29 #include "BaseBoundary.h"
30 #include "InsertionBoundary.h"
31 #include "Particles/BaseParticle.h"
32 #include "Math/RNG.h"
33 #include "Math/Vector.h"
34 
35 #include <vector>
36 
47 {
48 public:
53 
58 
63 
67  PolydisperseInsertionBoundary* copy() const override;
68 
72  void setGeometry(int maxFailed, Vec3D posMin, Vec3D posMax, Vec3D velMin, Vec3D velMax);
73 
77  BaseParticle* getGenerandum(unsigned int spec) const;
78 
82  void addGenerandum(BaseParticle* generandum, double probability, double sizeDispersity);
83 
87  void setGenerandum(unsigned int spec, BaseParticle* generandum, double probability, double sizeDispersity);
88 
92  BaseParticle* generateParticle(RNG& random) override;
93 
97  void placeParticle(BaseParticle* p, RNG& random) override;
98 
102  void read(std::istream& is) override;
103 
107  void write(std::ostream& os) const override;
108 
112  std::string getName() const override;
113 
114 // private:
115 
119  std::vector<BaseParticle*> generanda_;
120 
125  std::vector<Mdouble> probabilitates_;
126 
130  std::vector<Mdouble> sizeDispersities_; // size dispersity in the radii
131 
139 
143  std::vector<unsigned int> numbersInserted_;
144  std::vector<Mdouble> massesInserted_;
145  std::vector<Mdouble> volumesInserted_;
146 };
147 
148 #endif
~PolydisperseInsertionBoundary() override
Destructor: default destructor.
BaseParticle * generateParticle(RNG &random) override
Generates a particle from the possible species.
void placeParticle(BaseParticle *p, RNG &random) override
Places the particle in a random position with a random velocity.
Boundary structure for boundaries used for insertion of particles.
PolydisperseInsertionBoundary()
Constructor; sets everything to 0.
BaseParticle * getGenerandum(unsigned int spec) const
Get the particles that need to be copied.
void setGeometry(int maxFailed, Vec3D posMin, Vec3D posMax, Vec3D velMin, Vec3D velMax)
Set position and velocity of inserted particles.
void read(std::istream &is) override
reads boundary properties from istream
This is a class that generates random numbers i.e. named the Random Number Generator (RNG)...
Definition: RNG.h:52
Vec3D posMin_
As in CubeInsertionBoundary. JMFT: TODO: Later we should completely separate InsertionBoundary geomet...
PolydisperseInsertionBoundary * copy() const override
Creates a copy on the heap and returns a pointer.
void setGenerandum(unsigned int spec, BaseParticle *generandum, double probability, double sizeDispersity)
Change a particle to be copied.
Like an InsertionBoundary but generates particles of multiple types. Note that, as a child of Inserti...
std::vector< Mdouble > sizeDispersities_
The dispersity allowed in the particle size.
std::vector< Mdouble > probabilitates_
The probabilities of generating each type of particle. These probabilities are not normalised...
void addGenerandum(BaseParticle *generandum, double probability, double sizeDispersity)
Add a new prototype of particle to be copied.
std::vector< unsigned int > numbersInserted_
For keeping track of how much of each prototype we have inserted.
Definition: Vector.h:49
std::string getName() const override
Returns the name of the object.
std::vector< BaseParticle * > generanda_
Prototypes of the particles that can be generated.
void write(std::ostream &os) const override
writes boundary properties to ostream