High Performance Plasticity  0.5.0
crystal.h
Go to the documentation of this file.
1 
17 #ifndef HPP_CRYSTAL_H
18 #define HPP_CRYSTAL_H
19 
20 #include <vector>
21 #include <functional>
22 #include <complex>
23 #include <stdlib.h>
24 
25 #include "mpi.h"
26 #include <omp.h>
27 
28 #include <hpp/config.h>
29 #include <hpp/tensor.h>
30 #include <hpp/continuum.h>
31 #include <hpp/rotation.h>
32 #include <hpp/gsh.h>
33 #include <hpp/mpiUtils.h>
34 #include <hpp/spectralUtils.h>
35 #include <hpp/profUtils.h>
36 
37 namespace hpp
38 {
39 #define HPP_POLE_FIG_HIST_DIM 512
40 
41 class CrystalError: public std::runtime_error
42 {
43 public:
44  explicit CrystalError (const std::string &val) : std::runtime_error::runtime_error(val) {}
45 };
46 
50 };
51 
52 constexpr int nSlipSystems(CrystalType crystalType) {
53  return crystalType==CRYSTAL_TYPE_FCC ? 12 : 0;
54 }
55 
59 };
60 
62  // Symmetric sigma in Voigt order
63  // It is the deviatoric component, so sigma_22 = -sigma_11 - sigma_00
64  // Therefore sigma_22 is excluded
70  // Anti-symmetric Wp
74  // Gamma
76 };
77 std::vector<SpectralDatasetID> defaultCrystalSpectralDatasetIDs();
78 
79 // Forward declarations are necessarry for some operations
80 template <typename U>
81 class Crystal;
82 template <typename U>
84 
85 /*## A recordclass for the material properties of a crystal
86 ##
87 ## A recordclass is a mutable named tuple
88 ## Members:
89 ## - **crystal_type**: the type of crystal. Currently only 'fcc' is supported.
90 ## - **mu**: the elastic shear modulus \f$\mu\f$
91 ## - **kappa**: the elastic bulk modulus \f$\kappa\f$
92 ## - **m**: the rate sensitivty of slip, \f$m\f$
93 ## - **gammadot_0**: the reference shearing rate \f$\dot{gamma}_0\f$
94 ## - **h_0**, **s_s**, **a**: slip system hardening parameters. Journal page 548 in Kalidindi1992.
95 ## - **q**: ratio of the latent hardening rate to the self-hardening rate
96 ## - **n_alpha**: the number of slip systems
97 ## - **m_0**: a list of the slip directions, \f$\mathbf{m}_0^\alpha\f$, for each slip system \f$\alpha\f$
98 ## - **n_0**: a list of the slip plane normals, \f$\mathbf{n}_0^\alpha\f$ for each slip system \f$\alpha\f$
99 ## - **S_0**: a list of the products \f$\mathbf{S}_0^\alpha \equiv \mathbf{m}_0^\alpha \otimes \mathbf{n}_0^\alpha\f$ for each slip system \f$\alpha\f$
100 ## - **L**: the elasticity tensor \f$\mathcal{L}\f$ */
101 
109 template <typename U>
113  unsigned int n_alpha;
114  U mu;
115  U kappa;
116  U c11, c12, c44;
117  U m;
119  U h_0;
120  U s_s;
121  U a;
122  U q;
123  U volume = 1.0;
124  std::vector<std::vector<U>> m_0;
125  std::vector<std::vector<U>> n_0;
126  std::vector<hpp::Tensor2<U>> S_0;
129 };
130 
131 template <typename U>
133 {
134  CrystalProperties<U> props;
135 
136  // Crystal type
138 
139  // Hardening behaviour
141 
142  // Scalar parameters
143  props.n_alpha = 12;
144 
145  // Elastic constants from Kalidindi1992
146  props.mu = 46.5*GPA;
147  props.kappa = 124.0*GPA;
148 
149  // Elastic constants from Anders and Thompson 1961
150  // See Ledbetter and Naimon 1974, page 908 for the values actually tabulated
151  //props.c11 = 168.7*GPA;
152  //props.c12 = 121.7*GPA;
153  //props.c44 = 75.0*GPA;
154 
155  // Values in Kneer 1965
156  props.c11 = 169.05*GPA;
157  props.c12 = 121.93*GPA;
158  props.c44 = 75.5*GPA;
159 
160  // From Kalidindi1992
161  props.m = 0.012;
162  props.gammadot_0 = 0.001;
163  props.h_0 = 180.0*MPA;
164  props.s_s = 148.0*MPA;
165  props.a = 2.25;
166  props.q = 1.4;
167 
168  // Tensor Q
169  hpp::Tensor2<U> Q(12,12);
170  for (unsigned int i=0; i<4; i++) {
171  for (unsigned int j=0; j<4; j++) {
172  U val;
173  if (i==j) {
174  val = props.q;
175  } else {
176  val = 1.0;
177  }
178  for (unsigned int k=0; k<3; k++) {
179  for (unsigned int l=0; l<3; l++) {
180  Q(3*i+k,3*j+l) = val;
181  }
182  }
183  }
184  }
185  props.Q = Q;
186 
187  // Slip directions
188  std::vector<std::vector<U>> m_0(props.n_alpha);
189  m_0[0] = {1, -1, 0};
190  m_0[1] = {-1,0,1};
191  m_0[2] = {0,1,-1};
192  m_0[3] = {1,0,1};
193  m_0[4] = {-1,-1,0};
194  m_0[5] = {0,1,-1};
195  m_0[6] = {-1,0,1};
196  m_0[7] = {0,-1,-1};
197  m_0[8] = {1,1,0};
198  m_0[9] = {-1,1,0};
199  m_0[10] = {1,0,1};
200  m_0[11] = {0,-1,-1};
201  m_0 = m_0/std::sqrt((U)2.0);
202  props.m_0 = m_0;
203 
204  // Slip plane normals
205  std::vector<std::vector<U>> n_0(props.n_alpha);
206  for (int i=0; i<3; i++) {
207  n_0[i] = {1,1,1};
208  }
209  for (int i=3; i<6; i++) {
210  n_0[i] = {-1,1,1};
211  }
212  for (int i=6; i<9; i++) {
213  n_0[i] = {1,-1,1};
214  }
215  for (int i=9; i<12; i++) {
216  n_0[i] = {-1,-1,1};
217  }
218  n_0 = n_0/std::sqrt((U)3.0);
219  props.n_0 = n_0;
220 
221  // Slip systems
222  std::vector<hpp::Tensor2<U>> S_0(props.n_alpha);
223  for (unsigned int i=0; i<props.n_alpha; i++) {
224  S_0[i] = hpp::outer(m_0[i],n_0[i]);
225  }
226  props.S_0 = S_0;
227 
228  // Elasticity tensor
229  props.L = cubeSymmetricElasticityTensor(props.c11, props.c12, props.c44);
230 
231  // Return
232  return props;
233 };
234 
235 template <typename U>
237 {
238  CrystalProperties<U> propsNew = propsOld;
239  for (unsigned int i=0; i<propsOld.n_alpha; i++) {
240  propsNew.m_0[i] = rotTensor*propsOld.m_0[i];
241  propsNew.n_0[i] = rotTensor*propsOld.n_0[i];
242  propsNew.S_0[i] = hpp::outer(propsNew.m_0[i], propsNew.n_0[i]);
243  }
244  propsNew.L = transformOutOfFrame(propsOld.L, rotTensor);
245  return propsNew;
246 }
247 
248 template <typename U>
254  U r_min;
256  U r_max;
259  unsigned int algebraic_max_iter;
261  U r_t;
262 
263  // Convergence tolerances for the two-level scheme
264  // Defined on journal page 545 of Kalidindi1992
265  U DT_tol_factor = 1e-4;
266  // Defined on journal page 545 of Kalidindi1992
267  U Ds_tol_factor = 1e-3;
268  // Constraint on the Newton corrections for T
269  // Defined on journal page 545 of Kalidindi1992
270  U DT_max_factor = (2.0/3.0);
271 
272  // Verbosity
273  bool verbose = false;
274 };
275 template <typename U>
277 {
278  CrystalSolverConfig<U> config;
279  config.Dgamma_max = 1e-2;
280  config.r_min = 0.8;
281  config.r_max = 1.25;
282  config.algebraic_max_iter = 50;
283  config.r_t = 0.75;
284  return config;
285 };
286 template <typename U>
288 {
289  CrystalSolverConfig<U> config = defaultCrystalSolverConfig<U>();
290  config.Dgamma_max = 2e-3;
291  return config;
292 };
293 
302  bool verbose = false;
303 };
304 
305 template <typename U>
308  U s_0;
311 
312  // Getters/setters (mainly intended for Python interface)
313  U getS0() const {return s_0;}
314  void setS0(const U& s_0) {this->s_0 = s_0;}
315  EulerAngles<U> getEulerAngles() const {return getEulerZXZAngles<U>(this->crystalRotation);}
316  void setEulerAngles(const EulerAngles<U>& angles) {this->crystalRotation = EulerZXZRotationMatrix<U>(angles);}
317 };
318 template <typename U>
320 {
322  init.T_init = hpp::Tensor2<U>(3,3);
323  init.s_0 = 16.0*MPA;
324  init.F_p_0 = hpp::identityTensor2<U>(3);
325  init.crystalRotation = hpp::identityTensor2<U>(3);
326  return init;
327 };
328 
334 template <typename T>
336 {
337  PolarDecomposition<T> decomp = F_star.polarDecomposition();
338  EulerAngles<T> EAngles = hpp::getEulerZXZAngles(decomp.R);
339  return EAngles;
340 }
341 
342 template <typename U>
343 class Crystal
344 {
345  friend class Polycrystal<U>;
346 
347 public:
348  // Constructor
349  Crystal();
350  Crystal(const CrystalProperties<U>& unrotatedProps, const CrystalSolverConfig<U>& config,
351  const CrystalInitialConditions<U>& init);
352  Crystal(const CrystalProperties<U>& unrotatedProps, const CrystalSolverConfig<U>& config,
353  const CrystalInitialConditions<U>& init, const CrystalOutputConfig& outputConfig);
354 
355  // Stepping
356  bool tryStep(const hpp::Tensor2<U>& F_next, U dt);
357  void acceptStep();
358  void rejectStep();
359  U recommendNextTimestepSize(U dt);
360 
361  // Getters
362  std::vector<std::vector<U>> getM_alphas() const;
363  std::vector<std::vector<U>> getN_alphas() const;
365  return (F_e*T)*(F_e.trans())/F_e.det();
366  }
367  U getVolume() const {
368  return props.volume;
369  }
370  const std::vector<U>& getSAlphas() const {
371  return s_alphas;
372  }
373  EulerAngles<U> getEulerAngles() const;
374  GSHCoeffs<U> getGSHCoeffs() const;
375 
376  // Getting derived properties
377  std::vector<U> getShearStrainRates();
378  Tensor2<U> getPlasticSpinTensor();
379 
380 protected:
381  // Initializing
382  void applyInitialConditions();
383 
384 private:
385  // PROBLEM AND SOLVER SETTINGS //
390 
391  // Output settings
393 
394  // Solver tolerances and constraintsbased on initial conditions
401 
402  // CURRENT STATE //
404  std::vector<U> s_alphas;
406  bool step_accepted = false;
407  bool step_rejected = false;
408 
409  // Derived quantities
411  std::vector<U> Dgamma_alphas;
412 
413  // Stepping
414  bool updateT(const hpp::Tensor2<U>& A, U dt);
415  bool updateS(U dt);
416  bool updateTandS(const hpp::Tensor2<U>& A, U dt);
417  void assertAcceptedOrRejectedStep();
418 
419  // Slip systems
420  std::vector<std::vector<U>> m_alphas;
421  std::vector<std::vector<U>> n_alphas;
422 
423  // STATE AT NEXT STEP //
425  std::vector<U> s_alphas_next;
427  std::vector<U> Dgamma_alphas_next;
429 
430  // DUMMY VARIABLES
431  std::vector<U> dumDgamma_alphas;
432  std::vector<Tensor2<U>> dum2ndOrders;
433  std::vector<Tensor4<U>> dum4thOrders;
434  std::vector<hpp::Tensor2<U>> dumC_alphas;
435 };
436 
437 template <typename U>
438 bool operator==(const Crystal<U>& l, const Crystal<U>& r) {
439  throw std::runtime_error("No implementation of crystal comparison function. "
440  "This was only put here to allow the boost Python vector indexing suite to"
441  "make a vector of crystals available as a Python container.");
442 }
443 
452  bool verbose = false;
453  bool writeTextureHistory = false;
454  double textureHistoryTimeInterval = 1e-15;
455 };
456 
457 template <typename U>
458 class Polycrystal
459 {
460 public:
461  Polycrystal(const std::vector<Crystal<U>>& crystal_list);
462  Polycrystal(const std::vector<Crystal<U>>& crystal_list, MPI_Comm comm);
463  Polycrystal(const std::vector<Crystal<U>>& crystal_list, MPI_Comm comm, const PolycrystalOutputConfig& outputConfig);
464  bool step(hpp::Tensor2<U> F_next, U dt);
465  U recommendNextTimestepSize(U dt);
466  void evolve(U t_start, U t_end, U dt_initial, std::function<hpp::Tensor2<U>(U t)> F_of_t);
467 
468  // Get crystal
470  return crystal_list.at(i);
471  }
472 
473  // Write
474  void writeResultHDF5(std::string filename);
475 
476  // Getters
477  const std::vector<U>& getTHistory() const {return t_history;}
478 
479  // Higher level interface, meant for Python functionality
480  void resetHistories();
481  void resetRandomOrientations(U init_s, unsigned long int seed);
482  void resetGivenOrientations(U init_s, const std::vector<EulerAngles<U>>& angleList);
483  void stepVelocityGradient(hpp::Tensor2<U> L_next, U DeltaT);
484  std::vector<EulerAngles<U>> getEulerAnglesZXZActive();
485  GSHCoeffs<U> getGSHCoeffs();
486 
487 protected:
488 
489 private:
490  std::vector<Crystal<U>> crystal_list;
492 
493  // Derived quantities
494  void updateDerivedQuantities();
496 
497  // Initializing
498  void applyInitialConditions();
499 
500  // State
502 
503  // History
504  std::vector<U> t_history;
505  std::vector<Tensor2<U>> T_cauchy_history;
506  std::vector<Tensor2<U>> poleHistogramHistory111;
507  std::vector<Tensor2<U>> poleHistogramHistory110;
508  std::vector<Tensor2<U>> poleHistogramHistory100;
509  std::vector<Tensor2<U>> poleHistogramHistory001;
510  std::vector<Tensor2<U>> poleHistogramHistory011;
511  void addTextureToHistory();
512 
513  // MPI
514  bool useMPI = true;
515  MPI_Comm comm;
518 };
519 
520 
522 // SPECTRAL SOLVER //
524 
525 template <typename U>
527  unsigned int nTerms;
528 };
529 
530 template <typename U>
532 {
533 public:
534  // Constructor
535  SpectralCrystal();
537  const CrystalInitialConditions<U>& init);
538 
539  // Stepping
540  void step(const hpp::Tensor2<U>& F_next, const hpp::Tensor2<U>& L_next, const hpp::SpectralDatabase<U>& db, U dt);
541 
542  // Getting quantities
544  return TCauchy;
545  }
546  U getVolume() const {
547  return props.volume;
548  }
549 
550 private:
551  // CURRENT STATE //
553  U s;
555 
556  // Initial conditions
558 
559  // Material properties
561 
562  // Solver configuration
564 };
565 
566 template <typename U>
568 {
569 public:
570  SpectralPolycrystal(const std::vector<SpectralCrystal<U>>& crystal_list, unsigned int nOmpThreads);
571  void step(const hpp::Tensor2<U>& F_next, const hpp::Tensor2<U>& L_next, const hpp::SpectralDatabase<U>& db, U dt);
572  void evolve(U t_start, U t_end, U dt, std::function<hpp::Tensor2<U>(U t)> F_of_t, std::function<hpp::Tensor2<U>(U t)> L_of_t, const hpp::SpectralDatabase<U>& db);
573 
574  // Get crystal
576  return crystal_list.at(i);
577  }
578 
579  // Gather values
580  Tensor2<U> getGlobalTCauchy();
581 
582  // Write
583  void writeResultNumpy(std::string filename);
584 protected:
585 
586 private:
587  // List of crystal
588  std::vector<SpectralCrystal<U>> crystal_list;
589 
590  // History
591  std::vector<U> t_history;
592  std::vector<hpp::Tensor2<U>> T_cauchy_history;
593 
594  // OpenMP configuration
595  unsigned int nOmpThreads = 1;
596 
597  // Timing
599 };
600 
601 }//END NAMESPACE HPP
602 
603 #endif /* HPP_CRYSTAL_H */
SpectralCrystal< U > getCrystal(int i)
Definition: crystal.h:575
std::vector< hpp::Tensor2< U > > S_0
Definition: crystal.h:126
Definition: crystal.h:49
U r_t
Defined on journal page 547 of Kalidindi1992.
Definition: crystal.h:261
Tensor2< T > transformOutOfFrame(const Tensor2< T > &A_star, const Tensor2< T > &Q)
Transform tensor out of the frame given by the columns of .
Definition: tensor.h:1613
std::vector< U > s_alphas_next
Definition: crystal.h:425
CrystalProperties< U > rotate(const CrystalProperties< U > &propsOld, hpp::Tensor2< U > rotTensor)
Definition: crystal.h:236
U kappa
Definition: crystal.h:115
hpp::Tensor2< U > F_p_next
Definition: crystal.h:426
hpp::Tensor2< U > T
Definition: crystal.h:403
HardeningLaw hardeningLaw
Definition: crystal.h:112
Tensor2< T > outer(const std::vector< T > &A, const std::vector< T > &B)
Definition: tensor.h:640
std::vector< SpectralDatasetID > defaultCrystalSpectralDatasetIDs()
Definition: crystal.cpp:5
U gammadot_0
Definition: crystal.h:118
PolycrystalOutputConfig outputConfig
Definition: crystal.h:491
std::vector< Tensor2< U > > T_cauchy_history
Definition: crystal.h:505
EulerAngles< U > getEulerAngles() const
Definition: crystal.h:315
Definition: crystal.h:531
std::vector< std::vector< U > > m_0
Definition: crystal.h:124
Definition: crystal.h:110
Definition: casesUtils.cpp:4
T det() const
The determinant of the tensor.
Definition: tensor.cpp:471
SpectralCrystalSolverConfig< U > config
Definition: crystal.h:563
U s_0
Definition: crystal.h:308
U r_max
Defined on journal page 546 of Kalidindi1992.
Definition: crystal.h:256
CrystalOutputConfig outputConfig
Definition: crystal.h:392
std::vector< hpp::Tensor2< U > > T_cauchy_history
Definition: crystal.h:592
CrystalError(const std::string &val)
Definition: crystal.h:44
Tensor2< T > R
Definition: tensor.h:310
Definition: crystal.h:72
Definition: spectralUtils.h:225
Definition: crystal.h:68
unsigned int nTerms
Definition: crystal.h:527
#define MPA
Definition: continuum.h:13
constexpr int nSlipSystems(CrystalType crystalType)
Definition: crystal.h:52
U m
Definition: crystal.h:117
Crystal< U > getCrystal(int i)
Definition: crystal.h:469
Definition: crystal.h:249
U q
Definition: crystal.h:122
CrystalSolverConfig< U > config
Definition: crystal.h:388
Definition: crystal.h:69
Definition: crystal.h:567
U s_s
Definition: crystal.h:120
Header file for rotation classes and functions.
std::vector< U > dumDgamma_alphas
Definition: crystal.h:431
Tensor2< U > RStar
Definition: crystal.h:552
Definition: crystal.h:48
Definition: crystal.h:75
PolarDecomposition< T > polarDecomposition() const
Polar decomposition of the tensor.
Definition: tensor.cpp:826
hpp::Tensor2< U > F_e
Definition: crystal.h:410
CrystalDatasetIdx
Definition: crystal.h:61
unsigned int algebraic_max_iter
Timestep control by algebraic system convergence Defined on journal page 546 of Kalidindi1992.
Definition: crystal.h:259
std::vector< Tensor2< U > > poleHistogramHistory110
Definition: crystal.h:507
CrystalProperties< U > defaultCrystalProperties()
Definition: crystal.h:132
std::vector< Tensor2< U > > dum2ndOrders
Definition: crystal.h:432
U DT_max
Defined on journal page 545 of Kalidindi1992.
Definition: crystal.h:396
Header file for tensor classes.
Definition: tensor.h:309
bool operator==(const SpectralDatasetID &l, const SpectralDatasetID &r)
Definition: spectralUtils.cpp:132
const std::vector< U > & getTHistory() const
Definition: crystal.h:477
Definition: crystal.h:306
Definition: gsh.h:27
MPI_Comm comm
Definition: crystal.h:515
std::vector< std::vector< U > > m_alphas
Definition: crystal.h:420
std::vector< Crystal< U > > crystal_list
Definition: crystal.h:490
Tensor2< U > TCauchy
Definition: crystal.h:554
Definition: crystal.h:57
std::vector< SpectralCrystal< U > > crystal_list
Definition: crystal.h:588
Definition: crystal.h:71
unsigned int n_alpha
Definition: crystal.h:113
std::vector< Tensor2< U > > poleHistogramHistory100
Definition: crystal.h:508
U DT_tol
Defined on journal page 545 of Kalidindi1992.
Definition: crystal.h:398
std::vector< Tensor2< U > > poleHistogramHistory001
Definition: crystal.h:509
Definition: crystal.h:58
Definition: crystal.h:65
Definition: crystal.h:41
std::vector< U > Dgamma_alphas
Definition: crystal.h:411
U volume
Definition: crystal.h:123
Tensor2< U > getTCauchy() const
Definition: crystal.h:364
CrystalType
Definition: crystal.h:47
Definition: crystal.h:301
CrystalProperties< U > props
Definition: crystal.h:560
U s
Definition: crystal.h:553
U getVolume() const
Definition: crystal.h:546
Tensor2< U > F_p_0
Definition: crystal.h:309
std::vector< U > t_history
Definition: crystal.h:591
Header file for continuum mechanics classes and functions.
hpp::Tensor2< U > F_e_next
Definition: crystal.h:428
CrystalInitialConditions< U > init
Definition: crystal.h:557
U getS0() const
Definition: crystal.h:313
void setS0(const U &s_0)
Definition: crystal.h:314
U Ds_tol
Defined on journal page 545 of Kalidindi1992.
Definition: crystal.h:400
U mu
Definition: crystal.h:114
Definition: crystal.h:66
U c44
Definition: crystal.h:116
Definition: profUtils.h:15
std::vector< Tensor2< U > > poleHistogramHistory011
Definition: crystal.h:510
void setEulerAngles(const EulerAngles< U > &angles)
Definition: crystal.h:316
Tensor2< U > getTCauchy() const
Definition: crystal.h:543
Tensor4< U > cubeSymmetricElasticityTensor(U c11, U c12, U c44)
Construct a fourth order elasticity tensor accounting for cubic symmetry.
Definition: continuum.h:166
hpp::Timer solveTimer
Definition: crystal.h:598
std::vector< Tensor2< U > > poleHistogramHistory111
Definition: crystal.h:506
std::vector< U > Dgamma_alphas_next
Definition: crystal.h:427
int comm_size
Definition: crystal.h:516
The complex generalized spherical harmonic coefficients for real data.
hpp::Tensor2< U > Q
Definition: crystal.h:128
hpp::Tensor2< U > T_next
Definition: crystal.h:424
Definition: crystal.h:67
U h_0
Definition: crystal.h:119
hpp::Tensor2< U > F
Definition: crystal.h:501
U c11
Definition: crystal.h:116
Definition: crystal.h:451
hpp::Tensor2< U > T_cauchy
Definition: crystal.h:495
U getVolume() const
Definition: crystal.h:367
std::vector< std::vector< U > > n_0
Definition: crystal.h:125
std::vector< hpp::Tensor2< U > > dumC_alphas
Definition: crystal.h:434
U a
Definition: crystal.h:121
CrystalInitialConditions< U > init
Definition: crystal.h:389
EulerAngles< T > getEulerZXZAngles(Tensor2< T > R)
Get Euler angles from rotation matrix.
Definition: rotation.h:149
Tensor2< U > crystalRotation
Definition: crystal.h:310
int comm_rank
Definition: crystal.h:517
std::vector< U > t_history
Definition: crystal.h:504
HardeningLaw
Definition: crystal.h:56
Definition: crystal.h:73
Definition: crystal.h:81
#define GPA
Definition: continuum.h:12
U r_min
Defined on journal page 546 of Kalidindi1992.
Definition: crystal.h:254
std::vector< std::vector< U > > n_alphas
Definition: crystal.h:421
const std::vector< U > & getSAlphas() const
Definition: crystal.h:370
CrystalProperties< U > unrotatedProps
Definition: crystal.h:386
Tensor2< U > T_init
Definition: crystal.h:307
Definition: crystal.h:526
A simple deleter for malloc&#39;d memory.
EulerAngles< T > getEulerAnglesFromDeformationGradient(const hpp::Tensor2< T > &F_star)
Get the corresponding Euler angles for the rotation induced by this deformation.
Definition: crystal.h:335
CrystalProperties< U > props
Definition: crystal.h:387
Definition: rotation.h:43
CrystalSolverConfig< U > defaultCrystalSolverConfig()
Definition: crystal.h:276
hpp::Tensor4< U > L
Definition: crystal.h:127
std::vector< U > s_alphas
Definition: crystal.h:404
CrystalInitialConditions< U > defaultCrystalInitialConditions()
Definition: crystal.h:319
CrystalSolverConfig< U > defaultConservativeCrystalSolverConfig()
Definition: crystal.h:287
hpp::Tensor2< U > F_p
Definition: crystal.h:405
std::vector< Tensor4< U > > dum4thOrders
Definition: crystal.h:433
Definition: crystal.h:83
U c12
Definition: crystal.h:116
CrystalType crystal_type
Definition: crystal.h:111
U Dgamma_max
Timestep control by shear rate Defined on journal page 546 of Kalidindi1992.
Definition: crystal.h:252