StressStrainControlBoundary.h
Go to the documentation of this file.
1 // This file is part of the MercuryDPM project (https://www.mercurydpm.org).
2 // Copyright (c), The MercuryDPM Developers Team. All rights reserved.
3 // License: BSD 3-Clause License; see the LICENSE file in the root directory.
4 
5 #ifndef StressStrainControlBoundary_H
6 #define StressStrainControlBoundary_H
7 
8 #include "BaseBoundary.h"
9 #include "Math/ExtendedMath.h"
10 #include "Side.h"
11 #include "LeesEdwardsBoundary.h"
12 #include "PeriodicBoundary.h"
17 
34 {
35 public:
36 
39 
42 
44  virtual ~StressStrainControlBoundary() = default;
45 
47  void read(std::istream& is) override;
48 
50  void write(std::ostream& os) const override;
51 
53  std::string getName() const override;
54 
56  StressStrainControlBoundary* copy() const override;
57 
59  void checkBoundaryAfterParticlesMove(ParticleHandler& particleHandler) override;
60 
64  void set(const Matrix3D& stressGoal, const Matrix3D& strainRate, const Matrix3D& pGain,
65  bool isStrainRateControlled, const Matrix3D& iGain = {0, 0, 0, 0, 0, 0, 0, 0, 0});
66 
67  void setStrainRate(const Matrix3D& strainRate);
68 
70  void createPeriodicParticles(ParticleHandler& particleHandler) override;
71 
72  //helper functions
73 
76 
79 
81  void activateStrainRateControl(const ParticleHandler& particleHandler);
82 
84  void computeStrainRate();
85 
88 
90  void updateDomainSize();
91 
94 
97 
100 
101 
103 
104 
105 
106  double getIntegratedShift() const {return integratedShift_;}
107 
109  const PIController& getXX () const { return xx; }
111  const PIController& getXY () const { return xy; }
113  const PIController& getYY () const { return yy; }
115  const PIController& getZZ () const { return zz; }
116 
117 private:
118 
119  //Set by the user.
125 
131 
134 
137 
140 
141  //Defined in the set function.
142 
146  std::vector<LeesEdwardsBoundary> leesEdwardsBoundaries_;
147  std::vector<PeriodicBoundary> periodicBoundaries_;
148 };
149 
150 #endif
Scalar * b
Definition: benchVecAdd.cpp:17
Definition: BaseBoundary.h:28
Implementation of a 3D matrix.
Definition: Kernel/Math/Matrix.h:17
Definition: PIController.h:49
Container to store pointers to all particles.
Definition: ParticleHandler.h:28
Container to store pointers to all BasePeriodicBoundary objects.
Definition: PeriodicBoundaryHandler.h:24
A cuboid box consists of periodic boundaries that can be strain/stress controlled and achieve differe...
Definition: StressStrainControlBoundary.h:34
const PIController & getXX() const
getter for xx
Definition: StressStrainControlBoundary.h:109
bool isStrainRateControlled_
The boolean input, true means switch on the strain rate control for particles affine movements.
Definition: StressStrainControlBoundary.h:136
void set(const Matrix3D &stressGoal, const Matrix3D &strainRate, const Matrix3D &pGain, bool isStrainRateControlled, const Matrix3D &iGain={0, 0, 0, 0, 0, 0, 0, 0, 0})
Sets all boundary inputs at once and determines which deformation mode it is, then combine the right ...
Definition: StressStrainControlBoundary.cc:288
PIController xy
Definition: StressStrainControlBoundary.h:133
void write(std::ostream &os) const override
Adds object's id_ to given ostream.
Definition: StressStrainControlBoundary.cc:44
void checkPeriodicLeesEdwardsBoundariesAfterParticlesMove(ParticleHandler &particleHandler)
Call the boundary and update them based on the new domain size after the stress-control movement.
Definition: StressStrainControlBoundary.cc:121
Mdouble integratedShift_
Shift integrated for all the time when using Lees-Edwards Boundary.
Definition: StressStrainControlBoundary.h:139
std::vector< PeriodicBoundary > periodicBoundaries_
Definition: StressStrainControlBoundary.h:147
PIController xx
PI-Controllers for the strain rate in xx, xy, yy, zz directions.
Definition: StressStrainControlBoundary.h:133
Matrix3D getStressGoal() const
Accesses the target stress tensor.
Definition: StressStrainControlBoundary.h:96
void activateStrainRateControl(const ParticleHandler &particleHandler)
Activate the strainrate control for particle movement based on user's boolean input.
Definition: StressStrainControlBoundary.cc:176
PIController zz
Definition: StressStrainControlBoundary.h:133
virtual ~StressStrainControlBoundary()=default
destructor.
StressStrainControlBoundary * copy() const override
Used to create a copy of the object.
Definition: StressStrainControlBoundary.cc:35
const PIController & getXY() const
getter for xy
Definition: StressStrainControlBoundary.h:111
Mdouble computeStressError()
Definition: StressStrainControlBoundary.cc:28
std::string getName() const override
Sets the name of the boundary.
Definition: StressStrainControlBoundary.cc:87
Matrix3D getGainFactor() const
Accesses the gainFactor.
Definition: StressStrainControlBoundary.h:99
const PIController & getZZ() const
getter for zz
Definition: StressStrainControlBoundary.h:115
void createPeriodicParticles(ParticleHandler &particleHandler) override
Create the periodic particles after read in from a restart file to attain right information.
Definition: StressStrainControlBoundary.cc:374
Matrix3D pGainFactor_
Definition: StressStrainControlBoundary.h:124
Matrix3D strainRate_
Definition: StressStrainControlBoundary.h:124
Matrix3D getStrainRate() const
Accesses the strainrate tensor.
Definition: StressStrainControlBoundary.h:93
void determineLengthAndCentre()
Determine the length in x,y,z and center location of domain.
Definition: StressStrainControlBoundary.cc:138
void setStrainRate(const Matrix3D &strainRate)
Definition: StressStrainControlBoundary.cc:365
Matrix3D stressGoal_
Stores the stress value the boundary should attain.
Definition: StressStrainControlBoundary.h:124
Matrix3D iGainFactor_
Definition: StressStrainControlBoundary.h:130
void read(std::istream &is) override
Reads the object's id_ from given istream.
Definition: StressStrainControlBoundary.cc:70
void determineStressControlledShearBoundaries()
Determines stress-controlled shear Lees-Edwards boundary in x-y direction and normal periodic in z di...
Definition: StressStrainControlBoundary.cc:245
void checkBoundaryAfterParticlesMove(ParticleHandler &particleHandler) override
Virtual function that does things to particles, each timestep after particles have moved.
Definition: StressStrainControlBoundary.cc:97
void updateDomainSize()
Update the domain to new sizes.
Definition: StressStrainControlBoundary.cc:223
PIController yy
Definition: StressStrainControlBoundary.h:133
std::vector< LeesEdwardsBoundary > leesEdwardsBoundaries_
Definition: StressStrainControlBoundary.h:146
void computeStrainRate()
Compute the change of strainrate tensor based on the stress difference and then update the tensor.
Definition: StressStrainControlBoundary.cc:149
StressStrainControlBoundary()
default constructor.
Definition: StressStrainControlBoundary.cc:16
double getIntegratedShift() const
Definition: StressStrainControlBoundary.h:106
const PIController & getYY() const
getter for yy
Definition: StressStrainControlBoundary.h:113
StressStrainControlBoundary(const StressStrainControlBoundary &b)=default
copy constructor.
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286