oILAB
Loading...
Searching...
No Matches
GbContinuum.h
Go to the documentation of this file.
1//
2// Created by Nikhil Chandra Admal on 5/16/24.
3//
4
5#ifndef OILAB_GBPLASTICITY_H
6#define OILAB_GBPLASTICITY_H
7
8#include <LatticeCore.h>
9#include "Eigen/Dense"
10#include <PeriodicFunction.h>
11#include <LatticeFunction.h>
12#include <Function.h>
13#include <GbMaterialTensors.h>
14#include <OrderedTuplet.h>
15
16namespace gbLAB {
17
18 class DisplacementKernel : public Function<DisplacementKernel, double> {
19 private:
20 Eigen::Vector<double, Eigen::Dynamic> normal;
21 public:
22 explicit DisplacementKernel(const Eigen::Vector<double, Eigen::Dynamic>& _normal);
23 double operator()(const Eigen::Vector<double, Eigen::Dynamic> &x) const;
24 };
25
26 class ShiftedDisplacementKernelFT : public Function<ShiftedDisplacementKernelFT, std::complex<double>>{
27 private:
28 Eigen::Vector<double, Eigen::Dynamic> x, normal;
29 public:
30 explicit ShiftedDisplacementKernelFT(const Eigen::VectorXd& x, const Eigen::VectorXd& normal);
31 std::complex<double> operator()(const Eigen::VectorXd& xi) const;
32 };
33
34 class HhatInvFunction: public Function<HhatInvFunction, std::complex<double>>, GbMaterialTensors
35 {
36 private:
37 const Eigen::VectorXd e1,e3;
38 public:
39 const int t,i;
40 explicit HhatInvFunction(const int& t, const int& i, const Eigen::MatrixXd& domain);
41 std::complex<double> operator()(const Eigen::VectorXd& xi) const;
42 };
43
44 template<int dim>
47 using FunctionFFTPair= typename std::pair<std::vector<PeriodicFunction<double,dim-1>>,
48 std::vector<LatticeFunction<std::complex<double>,dim-1>>>;
49 using GbLatticeFunctions= typename std::vector<LatticeFunction<std::complex<double>,dim-1>> ;
50
51 private:
52
54 //static FunctionFFTPair pipihat;
55 static thread_local std::map<OrderedTuplet<dim+1>,PeriodicFunction<double, dim - 1>> piPeriodicFunctions;
56 static thread_local std::map<OrderedTuplet<dim+1>,LatticeFunction<std::complex<double>, dim - 1>> pihatLatticeFunctions;
57 // GBMesostateEnsemble should generate the bicrystal (member variable <OrderedTuplet,VectorDimD>) and pass it as a reference to each mesostate
58 // pipihat should be map from OrderedTuplet to FunctionFFTPair. should be computed once in calculateb
59 // at the same time, compute pipihat once
60 // change xuPairs type to <Tiplet,VectorDimD>
61
63 static FunctionFFTPair calculateb(const Eigen::Matrix<double, dim,dim-1>& domain,
65 const std::array<Eigen::Index,dim-1>& n,
66 const std::map<OrderedTuplet<dim+1>,VectorDimD>& points);
67 static GbLatticeFunctions getHhatInvComponents(const Eigen::Matrix<double, dim,dim-1>& domain,
68 const std::array<Eigen::Index,dim-1>& n);
69 static PeriodicFunction<double,dim-1>get_pi(const Eigen::Matrix<double,dim,dim-1>& domain,
70 const std::array<Eigen::Index,dim-1>& n,
71 const VectorDimD& point);
72 static LatticeFunction<std::complex<double>,dim-1>get_pihat(const Eigen::Matrix<double,dim,dim-1>& domain,
73 const std::array<Eigen::Index,dim-1>& n,
74 const VectorDimD& point);
75
76 public:
77
78
79 const Eigen::Matrix<double,dim,dim-1> gbDomain;
80 const std::map<OrderedTuplet<dim+1>,VectorDimD> xuPairs;
81 std::array<Eigen::Index,dim-1> n;
82 std::vector<PeriodicFunction<double,dim-1>> b;
83
84 std::vector<LatticeFunction<std::complex<double>,dim-1>> bhat;
85 std::map<OrderedTuplet<dim+1>,VectorDimD> atoms;
87
88 double energy;
89
90 GbContinuum(const Eigen::Matrix<double, dim,dim-1>& domain,
91 const std::map<OrderedTuplet<dim+1>, VectorDimD>& xuPairs,
92 const std::array<Eigen::Index,dim-1>& n,
93 const std::map<OrderedTuplet<dim+1>,VectorDimD>& atoms,
94 const bool& verbosity=false);
95
97
98 VectorDimD displacement(const VectorDimD& x) const;
99
100
105 std::vector<PeriodicFunction<double,dim-1>> get_b() const;
106
112 std::vector<PeriodicFunction<double,dim-1>> get_alpha() const;
113
114 static void reset(){
115 std::map<OrderedTuplet<dim+1>,PeriodicFunction<double, dim - 1>>().swap(piPeriodicFunctions);
116 std::map<OrderedTuplet<dim+1>,LatticeFunction<std::complex<double>, dim - 1>>().swap(pihatLatticeFunctions);
118
119 //HhatInvComponents.clear();
120 //piPeriodicFunctions.clear();
121 //pihatLatticeFunctions.clear();
122 }
123 };
124
125
126 template<int dim>
127 thread_local std::vector<LatticeFunction<std::complex<double>,dim-1>> GbContinuum<dim>::HhatInvComponents;
128
129 template<int dim>
130 thread_local std::map<OrderedTuplet<dim+1>,PeriodicFunction<double, dim - 1>> GbContinuum<dim>::piPeriodicFunctions;
131
132 template<int dim>
133 thread_local std::map<OrderedTuplet<dim+1>,LatticeFunction<std::complex<double>, dim - 1>> GbContinuum<dim>::pihatLatticeFunctions;
134
135}
136
138#endif //OILAB_GBPLASTICITY_H
double operator()(const Eigen::Vector< double, Eigen::Dynamic > &x) const
Eigen::Vector< double, Eigen::Dynamic > normal
Definition GbContinuum.h:20
typename std::vector< LatticeFunction< std::complex< double >, dim-1 > > GbLatticeFunctions
Definition GbContinuum.h:49
VectorDimD displacement(const OrderedTuplet< dim+1 > &x) const
std::vector< LatticeFunction< std::complex< double >, dim-1 > > bhat
Definition GbContinuum.h:84
static void reset()
VectorDimD uAverage
Definition GbContinuum.h:86
typename std::pair< std::vector< PeriodicFunction< double, dim-1 > >, std::vector< LatticeFunction< std::complex< double >, dim-1 > > > FunctionFFTPair
Definition GbContinuum.h:48
static thread_local std::map< OrderedTuplet< dim+1 >, PeriodicFunction< double, dim - 1 > > piPeriodicFunctions
Definition GbContinuum.h:55
static PeriodicFunction< double, dim-1 > get_pi(const Eigen::Matrix< double, dim, dim-1 > &domain, const std::array< Eigen::Index, dim-1 > &n, const VectorDimD &point)
static thread_local std::map< OrderedTuplet< dim+1 >, LatticeFunction< std::complex< double >, dim - 1 > > pihatLatticeFunctions
Definition GbContinuum.h:56
std::map< OrderedTuplet< dim+1 >, VectorDimD > atoms
Definition GbContinuum.h:85
static GbLatticeFunctions getHhatInvComponents(const Eigen::Matrix< double, dim, dim-1 > &domain, const std::array< Eigen::Index, dim-1 > &n)
std::vector< PeriodicFunction< double, dim-1 > > get_b() const
std::array< Eigen::Index, dim-1 > n
Definition GbContinuum.h:81
FunctionFFTPair bbhat
Definition GbContinuum.h:62
typename LatticeCore< dim >::VectorDimD VectorDimD
Definition GbContinuum.h:46
static LatticeFunction< std::complex< double >, dim-1 > get_pihat(const Eigen::Matrix< double, dim, dim-1 > &domain, const std::array< Eigen::Index, dim-1 > &n, const VectorDimD &point)
static thread_local GbLatticeFunctions HhatInvComponents
Definition GbContinuum.h:53
std::vector< PeriodicFunction< double, dim-1 > > b
Definition GbContinuum.h:82
const std::map< OrderedTuplet< dim+1 >, VectorDimD > xuPairs
Definition GbContinuum.h:80
static FunctionFFTPair calculateb(const Eigen::Matrix< double, dim, dim-1 > &domain, const std::map< OrderedTuplet< dim+1 >, VectorDimD > &xuPairs, const std::array< Eigen::Index, dim-1 > &n, const std::map< OrderedTuplet< dim+1 >, VectorDimD > &points)
const Eigen::Matrix< double, dim, dim-1 > gbDomain
Definition GbContinuum.h:79
std::vector< PeriodicFunction< double, dim-1 > > get_alpha() const
const Eigen::VectorXd e3
Definition GbContinuum.h:37
std::complex< double > operator()(const Eigen::VectorXd &xi) const
const Eigen::VectorXd e1
Definition GbContinuum.h:37
Eigen::Vector< double, Eigen::Dynamic > normal
Definition GbContinuum.h:28
std::complex< double > operator()(const Eigen::VectorXd &xi) const
Eigen::Vector< double, Eigen::Dynamic > x
Definition GbContinuum.h:28
Eigen::Matrix< double, dim, 1 > VectorDimD
Definition LatticeCore.h:24