oILAB
Loading...
Searching...
No Matches
MesoState.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 12/11/23.
3//
4
5#ifndef OILAB_MESOSTATE_H
6#define OILAB_MESOSTATE_H
7
8#include "ReferenceState.h"
9#include "Gb.h"
10#include <set>
11#include "Dislocations.h"
12#include "OrderedTuplet.h"
13
14namespace oILAB {
15
16template <int dim>
17class MesoState : public ReferenceState<dim>, public Dislocations {
21 using Matrix =
22 typename Eigen::Matrix<IntScalarType, Eigen::Dynamic, Eigen::Dynamic>;
23 using Vector2d = Eigen::Vector2d;
24 using Matrix2d = Eigen::Matrix2d;
25
26public:
27 // currently storing states of only one lattice as we are restricted to STGB
28 std::vector<Triplet> currentState;
29 std::vector<Triplet> defectsIndices;
30
31 explicit MesoState(const Gb<dim> &gb,
33 const int &periodScaling, const double &a2,
34 const int &nImages);
35
36 explicit MesoState(const ReferenceState<dim> &rS, const double &a2,
37 const int &nImages);
38
39 double energy() const;
40 Eigen::VectorXi
41 getLocalStateCount(const int &numberOfInteractingPlanes) const {
42 Eigen::VectorXi output(numberOfInteractingPlanes);
43 for (int i = 0; i < numberOfInteractingPlanes; ++i)
44 output(i) = getOrthogonalPlaneIndices(i).size();
45 return output;
46 }
47
48 void insertDislocation(const Triplet &);
50 void removeDislocation(const Triplet &t);
51 Triplet insertRandomDislocation(const int &dipoleSign);
53 std::set<int> getOrthogonalPlaneIndices(const int &parallelPlaneIndex) const;
54
55 // template<int dm=dim>
56 typename std::enable_if<dim == 3, void>::type
57 box(const int &heightFactor, const int &dsclFactor,
58 const std::string &name) const;
59
60 template <typename T> int sgn(T val) const;
61 bool operator<(const MesoState &rhs) const;
62 };
63 } // namespace oILAB
64#endif //OILAB_MESOSTATE_H
Definition Gb.h:13
Eigen::Matrix2d Matrix2d
Definition MesoState.h:24
bool operator<(const MesoState &rhs) const
Eigen::Vector2d Vector2d
Definition MesoState.h:23
Eigen::VectorXi getLocalStateCount(const int &numberOfInteractingPlanes) const
Definition MesoState.h:41
int sgn(T val) const
LatticeCore< 3 >::VectorDimD VectorDimD
Definition MesoState.h:19
typename LatticeCore< dim >::IntScalarType IntScalarType
Definition MesoState.h:18
MesoState(const ReferenceState< dim > &rS, const double &a2, const int &nImages)
Triplet insertRandomDislocation()
MesoState(const Gb< dim > &gb, const ReciprocalLatticeVector< dim > &axis, const int &periodScaling, const double &a2, const int &nImages)
typename Eigen::Matrix< IntScalarType, Eigen::Dynamic, Eigen::Dynamic > Matrix
Definition MesoState.h:22
void removeDislocation(const Triplet &t)
double energy() const
void insertDislocation(const Triplet &)
Triplet removeRandomDislocation()
Triplet insertRandomDislocation(const int &dipoleSign)
std::vector< Triplet > currentState
Definition MesoState.h:28
std::vector< Triplet > defectsIndices
Definition MesoState.h:29
std::set< int > getOrthogonalPlaneIndices(const int &parallelPlaneIndex) const
std::enable_if< dim==3, void >::type box(const int &heightFactor, const int &dsclFactor, const std::string &name) const
typename LatticeCore< dim >::VectorDimI VectorDimI
Definition MesoState.h:20
const ReciprocalLatticeVector< dim > & axis
const Gb< dim > & gb
Eigen::Matrix< IntScalarType, dim, 1 > VectorDimI
Definition LatticeCore.h:23
long long int IntScalarType
Definition LatticeCore.h:22
Eigen::Matrix< double, dim, 1 > VectorDimD
Definition LatticeCore.h:20