High Performance Plasticity  0.5.0
crystalCUDA.h
Go to the documentation of this file.
1 
7 #ifndef HPP_CRYSTAL_CUDA_H
8 #define HPP_CRYSTAL_CUDA_H
9 
10 
11 #include <hpp/config.h>
13 #include <type_traits>
14 #include <hpp/rotation.h>
15 #include <hpp/cudaUtils.h>
16 #include <hpp/tensorCUDA.h>
17 #include <hpp/spectralUtilsCUDA.h>
18 #include <hpp/gshCUDA.h>
19 
20 namespace hpp
21 {
22 
23 // Forward declarations
24 template <typename T, unsigned int N> class SpectralPolycrystalCUDA;
25 template <typename T> struct SpectralCrystalCUDA;
26 
36 template <typename T, unsigned int N>
38 public:
39  // Friends
40  friend class SpectralPolycrystalCUDA<T,N>;
41 
42  // Constructor
44 public:
45  unsigned int n_alpha;
46  T mu;
47  T kappa;
48  T m;
50  T h_0;
51  T s_s;
52  T a;
53  T q;
54  T volume = 1.0;
60 };
61 
62 template <typename T>
63 struct SpectralCrystalCUDA{
64  // Euler angles defining the current crystal orientation
66 
67  // The slip-system deformation resistance
68  T s;
69 
70  // Getters/setters (mainly intended for Python interface)
71  T getS() const {return s;}
72  void setS(const T& s) {this->s = s;}
73  EulerAngles<T> getAngles() const {return angles;}
74  void setAngles(const EulerAngles<T>& angles) {this->angles = angles;}
75 };
76 
77 template <typename T>
79  if (l.angles != r.angles) {
80  return false;
81  }
82  if (l.s != r.s) {
83  return false;
84  }
85 
86  // All checks passed
87  return true;
88 }
89 
98 template <typename T>
100 public:
102  SpectralCrystalListCUDA(unsigned int nCrystals, const SpectralCrystalCUDA<T> *crystals);
103  SpectralCrystalListCUDA(const std::vector<SpectralCrystalCUDA<T>>& crystals);
104 
105  // Get
106  __device__ SpectralCrystalCUDA<T> getCrystalD(unsigned int iCrystal) {
108  crystal.angles.alpha = anglesA[iCrystal];
109  crystal.angles.beta = anglesB[iCrystal];
110  crystal.angles.gamma = anglesC[iCrystal];
111  crystal.s = s[iCrystal];
112  return crystal;
113  }
114 
115  // Set
116  __device__ void setCrystalD(unsigned int iCrystal, const SpectralCrystalCUDA<T>& crystal) {
117  anglesA[iCrystal] = crystal.angles.alpha;
118  anglesB[iCrystal] = crystal.angles.beta;
119  anglesC[iCrystal] = crystal.angles.gamma;
120  s[iCrystal] = crystal.s;
121  }
122 private:
126  T *s;
127  std::vector<std::shared_ptr<T>> sharedPtrs;
128 };
129 
130 // Slip deformation resistance update
131 template <typename T, unsigned int N>
133 const T s_alpha, const T gammaSum, const T dt)
134 {
135  // Return
136  T sDot = (props->h_0)*powIntr((T)1.0 - s_alpha/(props->s_s), (props->a))*gammaSum;
137  return s_alpha + sDot*dt;
138 }
139 
140 // Get database coordinate
141 template<typename T, unsigned int P>
142 __device__ void getSpectralCrystalDatabaseCoordinate(SpectralCrystalCUDA<T>& crystal, SpectralDatabaseUnifiedCUDA<T,4,P>* db, Tensor2CUDA<T,3,3>& RStretchingTensor, T theta, unsigned int *dbCoord) {
143  // Get orientation in lab frame
145 
146  // Transform rotation matrix into stretching tensor frame
147  Tensor2CUDA<T,3,3> RInStretchingTensorFrame = RStretchingTensor.trans()*RLab;
148 
149  // Euler angles
150  EulerAngles<T> angles = getEulerZXZAngles(RInStretchingTensorFrame);
151 
152  // Database coordinate
153  T gridPos[4] = {angles.alpha, angles.beta, angles.gamma, theta};
154  T *gridStarts = db->getGridStarts();
155  T *gridSteps = db->getGridSteps();
156  unsigned int *gridDims = db->getGridDims();
157  for (unsigned int i=0; i<4; i++) {
158  dbCoord[i] = nearbyint((gridPos[i] - gridStarts[i])/gridSteps[i]);
159  // Periodicity
160  dbCoord[i] = dbCoord[i]%gridDims[i];
161  }
162 }
163 
164 // Step kernels
165 template<typename T, unsigned int N>
166 __global__ void SPECTRAL_POLYCRYSTAL_STEP(unsigned int nCrystals, SpectralCrystalCUDA<T>* crystals, CrystalPropertiesCUDA<T,N>* props,
167 Tensor2CUDA<T,3,3> RStretchingTensor, Tensor2AsymmCUDA<T,3> WNext, T theta, T eDot, T dt, SpectralDatabaseCUDA<T,4>* db, Tensor2CUDA<T,3,3> *TCauchyPerBlockSums);
168 
169 template<typename T, unsigned int N, unsigned int P>
170 __global__ void SPECTRAL_POLYCRYSTAL_STEP_UNIFIED(unsigned int nCrystals, SpectralCrystalCUDA<T>* crystals, CrystalPropertiesCUDA<T,N>* props,
171 Tensor2CUDA<T,3,3> RStretchingTensor, Tensor2AsymmCUDA<T,3> WNext, T theta, T eDot, T dt, SpectralDatabaseUnifiedCUDA<T,4,P>* db, Tensor2CUDA<T,3,3> *TCauchyPerBlockSums);
172 
173 // GSH kernel
174 template<typename T>
175 __global__ void GET_GSH_COEFFS(const SpectralCrystalCUDA<T>* crystals, unsigned int ncrystals, GSHCoeffsCUDA<T>* coeffsPerBlockSums);
176 
177 // Average kernel
178 template<typename T>
179 __global__ void GET_AVERAGE_TCAUCHY(unsigned int nCrystals, const SpectralCrystalCUDA<T>* crystals, Tensor2CUDA<T,3,3> *TCauchyGlobal);
180 
193 template <typename T, unsigned int N>
195 {
196 public:
197 
198  // Dataset index ordering
199  unsigned int nDsets = 9;
200 
201  // Constructors
203  SpectralPolycrystalCUDA(std::vector<SpectralCrystalCUDA<T>>& crystals, const CrystalPropertiesCUDA<T, N>& crystalProps, const SpectralDatabase<T>& dbIn);
204  SpectralPolycrystalCUDA(std::vector<SpectralCrystalCUDA<T>>& crystals, const CrystalPropertiesCUDA<T, N>& crystalProps, const SpectralDatabaseUnified<T>& dbIn);
205 
206  // Construction helpers
207  void doGPUSetup();
208  void doSetup(std::vector<SpectralCrystalCUDA<T>>& crystals, const CrystalPropertiesCUDA<T,N>& crystalProps);
209 
210  // Simulation
211  void resetRandomOrientations(T init_s, unsigned long int seed);
212  void resetGivenOrientations(T init_s, const std::vector<EulerAngles<T>>& angleList);
213  void resetHistories();
214  void step(const hpp::Tensor2<T>& L_next, T dt);
215  void step(const hpp::Tensor2<T>& F_next, const hpp::Tensor2<T>& L_next, T dt);
216  void evolve(T t_start, T t_end, T dt, std::function<hpp::Tensor2<T>(T t)> F_of_t, std::function<hpp::Tensor2<T>(T t)> L_of_t);
217 
218  // Output
219  std::vector<EulerAngles<T>> getEulerAnglesZXZActive();
220  GSHCoeffsCUDA<T> getGSHCoeffs();
221  Tensor2<T> getPoleHistogram(int p0, int p1, int p2);
222  void writeResultHDF5(std::string filename);
223 
224  // Extras
225  unsigned int getNTimestepsTaken();
226  unsigned int getNComponents();
227  unsigned long long int getNTermsComputedHardware();
228 
229  // Automatically-generated getters
230  const std::vector<T>& getTHistory() const {return tHistory;}
231 protected:
232 
233 private:
234  // List of crystals
235  unsigned int nCrystals;
236  unsigned int nCrystalPairs;
237  std::shared_ptr<SpectralCrystalCUDA<T>> crystalsD;
238 
239  // Crystal properties
240  std::shared_ptr<CrystalPropertiesCUDA<T,N>> crystalPropsD;
241 
242  // Spectral database to use for solving.
243 
244  // We maintain a host copy of the database, since
245  // the dynamically-allocated device memory in the host
246  // is freed when the host destructor is called. The alternative
247  // is to write a deep copy function from host to device memory
248  // for the database.
249  bool useUnifiedDB = false;
251  std::shared_ptr<SpectralDatabaseCUDA<T,4>> dbD;
253  std::shared_ptr<SpectralDatabaseUnifiedCUDA<T,4,9>> dbUnifiedD;
254 
255  // Global
257  std::shared_ptr<Tensor2CUDA<T,3,3>> TCauchyGlobalD;
258 
259  // Hardware configuration
260  int deviceID;
261  cudaDeviceProp devProp;
262  CudaKernelConfig stepKernelCfg;
263  CudaKernelConfig reduceKernelLevel0Cfg;
264  CudaKernelConfig reduceKernelLevel1Cfg;
265  CudaKernelConfig gshKernelCfg;
266  CudaKernelConfig gshReduceKernelLevel0Cfg;
267  CudaKernelConfig gshReduceKernelLevel1Cfg;
268 
269  // Working memory
270  std::shared_ptr<Tensor2CUDA<T,3,3>> TCauchyPerBlockSums;
271  std::shared_ptr<Tensor2CUDA<T,3,3>> TCauchyLevel0Sums;
272  std::shared_ptr<GSHCoeffsCUDA<T>> gshPerBlockSums;
273  std::shared_ptr<GSHCoeffsCUDA<T>> gshLevel0Sums;
274 
275  // Stress-strain history
276  std::vector<T> tHistory;
277  std::vector<Tensor2CUDA<T,3,3>> TCauchyHistory;
278 
279  // Texture history
280  std::shared_ptr<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>> getPoleHistogram(const VecCUDA<T,3>& pole);
281  void getPoleHistogram(Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>& hist, const VecCUDA<T,3>& pole);
282  void writePoleHistogramHistoryHDF5(H5::H5File& outfile, std::string dsetBaseName, std::vector<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>>& history, const VecCUDA<T,3>& pole);
283  std::vector<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>> poleHistogramHistory111;
284  std::vector<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>> poleHistogramHistory110;
285  std::vector<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>> poleHistogramHistory100;
286  std::vector<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>> poleHistogramHistory001;
287  std::vector<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>> poleHistogramHistory011;
288 
289  // Profiling
291  double maxMemUsedGB = 0.0;
292 };
293 
313 template <typename T, CrystalType CRYSTAL_TYPE>
315 {
316 public:
317  // Constructors
319  SpectralPolycrystalGSHCUDA(CrystalPropertiesCUDA<T, nSlipSystems(CRYSTAL_TYPE)>& crystalProps, const SpectralDatabaseUnified<T>& dbIn, T init_s) {
320  // Number of points in the orientation space = 72*8^{r}, where r is the resolution
321  unsigned int orientationSpaceResolution = 6;
322  switch (CRYSTAL_TYPE) {
323  case CRYSTAL_TYPE_NONE:
324  orientationSpace = SO3Discrete<T>(orientationSpaceResolution);
325  break;
326  case CRYSTAL_TYPE_FCC:
327  orientationSpace = SO3Discrete<T>(orientationSpaceResolution, SYMMETRY_TYPE_C4);
328  break;
329  default:
330  std::cerr << "No implementation for crystal type = " << CRYSTAL_TYPE << std::endl;
331  throw std::runtime_error("No implementation.");
332  }
333 
334  // Generate representative crystals
335  auto crystals = std::vector<SpectralCrystalCUDA<T>>(orientationSpace.size());
336  for (unsigned int i=0; i<orientationSpace.size(); i++) {
337  crystals[i].s = init_s;
338  crystals[i].angles = orientationSpace.getEulerAngle(i);
339  }
340  polycrystal = SpectralPolycrystalCUDA<T, nSlipSystems(CRYSTAL_TYPE)>(crystals, crystalProps, dbIn);
341 
342  // Initialize densities to a uniform distribution
343  densities = std::vector<T>(orientationSpace.size(), 1.0/orientationSpace.size());
344  }
345 
346  // Simulation
347  void resetRandomOrientations(T init_s, unsigned long int seed) {
348  polycrystal.resetRandomOrientations(init_s, seed);
349  }
350  void resetGivenGSHCoeffs(T init_s, const GSHCoeffsCUDA<T>& coeffs) {
351  ;
352  }
353 
354  // Output
355  // need to do a density-weighted GSH calculation here
357 protected:
358 
359 private:
362 
364  std::vector<T> densities;
365 
368 };
369 
370 template <typename T>
372  return EulerZXZRotationMatrixCUDA(angles.alpha, angles.beta, angles.gamma);
373 }
374 
375 }//END NAMESPACE HPP
376 
377 #endif /* HPP_CRYSTAL_CUDA_H */
Definition: spectralUtils.h:317
T a
Definition: crystalCUDA.h:52
Definition: crystal.h:49
SpectralDatabaseCUDA< T, 4 > dbH
Definition: crystalCUDA.h:250
Header file for tensor classes CUDA implementations. Note that for all of these implementations, dynamic memory is not used. All of the memory lives on whichever architecture the class is instantiated on. That is, the "CUDA" suffix indicates nothing about where the memory is, but just indicates that it&#39;s in a format that&#39;s most suitable for a CUDA implementation.
std::vector< Tensor2CUDA< T, HPP_POLE_FIG_HIST_DIM, HPP_POLE_FIG_HIST_DIM > > poleHistogramHistory111
Definition: crystalCUDA.h:283
T q
Definition: crystalCUDA.h:53
Tensor2CUDA< T, N, N > Q
Definition: crystalCUDA.h:59
EulerAngles< T > angles
Definition: crystalCUDA.h:65
void resetRandomOrientations(T init_s, unsigned long int seed)
Definition: crystalCUDA.h:347
std::shared_ptr< GSHCoeffsCUDA< T > > gshLevel0Sums
Definition: crystalCUDA.h:273
__device__ SpectralCrystalCUDA< T > getCrystalD(unsigned int iCrystal)
Definition: crystalCUDA.h:106
VecCUDA< T, 3 > n_0[N]
Definition: crystalCUDA.h:56
U slipDeformationResistanceStepSpectralSolver(const CrystalProperties< U > &props, const U s_alpha, const U gammaSum, const U dt)
From kalidindi2006 Equation 5.
Definition: crystal.cpp:551
T alpha
Definition: rotation.h:44
SpectralDatabaseUnifiedCUDA< T, 4, 9 > dbUnifiedH
Definition: crystalCUDA.h:252
T beta
Definition: rotation.h:45
CudaKernelConfig gshReduceKernelLevel1Cfg
Definition: crystalCUDA.h:267
GSHCoeffsCUDA< T > getGSHCoeffs()
Definition: crystalCUDA.h:356
Definition: crystal.h:110
Definition: casesUtils.cpp:4
void resetGivenGSHCoeffs(T init_s, const GSHCoeffsCUDA< T > &coeffs)
Definition: crystalCUDA.h:350
std::vector< Tensor2CUDA< T, HPP_POLE_FIG_HIST_DIM, HPP_POLE_FIG_HIST_DIM > > poleHistogramHistory110
Definition: crystalCUDA.h:284
T gammadot_0
Definition: crystalCUDA.h:49
__device__ T * getGridSteps()
Definition: spectralUtilsCUDA.h:313
#define HPP_CHECK_CUDA_ENABLED_BUILD
Definition: config.h:44
Header file for spectral utilities CUDA implementations.
Definition: spectralUtils.h:225
T h_0
Definition: crystalCUDA.h:50
CudaKernelConfig gshKernelCfg
Definition: crystalCUDA.h:265
unsigned int nCrystals
Definition: crystalCUDA.h:235
constexpr int nSlipSystems(CrystalType crystalType)
Definition: crystal.h:52
__global__ void GET_AVERAGE_TCAUCHY(unsigned int nCrystals, const SpectralCrystalCUDA< T > *crystals, Tensor2CUDA< T, 3, 3 > *TCauchyGlobal)
CudaKernelConfig gshReduceKernelLevel0Cfg
Definition: crystalCUDA.h:266
Definition: crystalCUDA.h:25
SpectralCrystalListCUDA()
Definition: crystalCUDA.h:101
VecCUDA< T, 3 > m_0[N]
Definition: crystalCUDA.h:55
std::shared_ptr< Tensor2CUDA< T, 3, 3 > > TCauchyGlobalD
Definition: crystalCUDA.h:257
Definition: crystalCUDA.h:99
CudaKernelConfig stepKernelCfg
Definition: crystalCUDA.h:262
Header file for rotation classes and functions.
Definition: crystal.h:48
T mu
Definition: crystalCUDA.h:46
Definition: rotation.h:376
__device__ void setCrystalD(unsigned int iCrystal, const SpectralCrystalCUDA< T > &crystal)
Definition: crystalCUDA.h:116
Definition: spectralUtilsCUDA.h:304
void writePoleHistogramHistoryHDF5(H5::H5File &outfile, const std::string &dsetBaseName, std::vector< Tensor2< T >> &history, const std::vector< T > &pole)
Definition: crystal.cpp:1694
bool operator==(const SpectralDatasetID &l, const SpectralDatasetID &r)
Definition: spectralUtils.cpp:132
Definition: crystalCUDA.h:37
void setS(const T &s)
Definition: crystalCUDA.h:72
std::vector< Tensor2CUDA< T, HPP_POLE_FIG_HIST_DIM, HPP_POLE_FIG_HIST_DIM > > poleHistogramHistory011
Definition: crystalCUDA.h:287
SpectralPolycrystalGSHCUDA(CrystalPropertiesCUDA< T, nSlipSystems(CRYSTAL_TYPE)> &crystalProps, const SpectralDatabaseUnified< T > &dbIn, T init_s)
Definition: crystalCUDA.h:319
Definition: tensorCUDA.h:32
A class for second order tensors.
Definition: tensor.h:303
std::shared_ptr< SpectralDatabaseCUDA< T, 4 > > dbD
Definition: crystalCUDA.h:251
T kappa
Definition: crystalCUDA.h:47
std::vector< T > densities
The density of each of the crystals.
Definition: crystalCUDA.h:364
Definition: gshCUDA.h:28
__global__ void SPECTRAL_POLYCRYSTAL_STEP(unsigned int nCrystals, SpectralCrystalCUDA< T > *crystals, CrystalPropertiesCUDA< T, N > *props, Tensor2CUDA< T, 3, 3 > RStretchingTensor, Tensor2AsymmCUDA< T, 3 > WNext, T theta, T eDot, T dt, SpectralDatabaseCUDA< T, 4 > *db, Tensor2CUDA< T, 3, 3 > *TCauchyPerBlockSums)
Tensor4CUDA< T, 3, 3, 3, 3 > L
Definition: crystalCUDA.h:58
T s
Definition: crystalCUDA.h:68
Header file CUDA utility functions.
__device__ Tensor2CUDA< T, 3, 3 > EulerZXZRotationMatrixCUDA(EulerAngles< T > angles)
Definition: crystalCUDA.h:371
CudaKernelConfig reduceKernelLevel0Cfg
Definition: crystalCUDA.h:263
__device__ T * getGridStarts()
Definition: spectralUtilsCUDA.h:312
std::vector< std::shared_ptr< T > > sharedPtrs
Definition: crystalCUDA.h:127
__global__ void SPECTRAL_POLYCRYSTAL_STEP_UNIFIED(unsigned int nCrystals, SpectralCrystalCUDA< T > *crystals, CrystalPropertiesCUDA< T, N > *props, Tensor2CUDA< T, 3, 3 > RStretchingTensor, Tensor2AsymmCUDA< T, 3 > WNext, T theta, T eDot, T dt, SpectralDatabaseUnifiedCUDA< T, 4, P > *db, Tensor2CUDA< T, 3, 3 > *TCauchyPerBlockSums)
std::shared_ptr< CrystalPropertiesCUDA< T, N > > crystalPropsD
Definition: crystalCUDA.h:240
T volume
Definition: crystalCUDA.h:54
std::vector< Tensor2CUDA< T, HPP_POLE_FIG_HIST_DIM, HPP_POLE_FIG_HIST_DIM > > poleHistogramHistory100
Definition: crystalCUDA.h:285
T * anglesA
Definition: crystalCUDA.h:123
T s_s
Definition: crystalCUDA.h:51
T gamma
Definition: rotation.h:46
std::vector< Tensor2CUDA< T, HPP_POLE_FIG_HIST_DIM, HPP_POLE_FIG_HIST_DIM > > poleHistogramHistory001
Definition: crystalCUDA.h:286
Tensor2CUDA< T, 3, 3 > S_0[N]
Definition: crystalCUDA.h:57
Definition: profUtils.h:15
Tensor2CUDA< T, 3, 3 > TCauchyGlobalH
Definition: crystalCUDA.h:256
SpectralPolycrystalCUDA< T, nSlipSystems(CRYSTAL_TYPE)> polycrystal
The underlying spectral polycrystal.
Definition: crystalCUDA.h:361
std::shared_ptr< SpectralDatabaseUnifiedCUDA< T, 4, 9 > > dbUnifiedD
Definition: crystalCUDA.h:253
Definition: crystal.py:1
__device__ void getSpectralCrystalDatabaseCoordinate(SpectralCrystalCUDA< T > &crystal, SpectralDatabaseUnifiedCUDA< T, 4, P > *db, Tensor2CUDA< T, 3, 3 > &RStretchingTensor, T theta, unsigned int *dbCoord)
Definition: crystalCUDA.h:142
hpp::Timer solveTimer
Definition: crystalCUDA.h:290
std::vector< T > tHistory
Definition: crystalCUDA.h:276
std::shared_ptr< Tensor2CUDA< T, 3, 3 > > TCauchyLevel0Sums
Definition: crystalCUDA.h:271
Header file for generalized spherical harmonic basis.
Definition: crystalCUDA.h:24
unsigned int nCrystalPairs
Definition: crystalCUDA.h:236
cudaDeviceProp devProp
Definition: crystalCUDA.h:261
std::vector< Tensor2CUDA< T, 3, 3 > > TCauchyHistory
Definition: crystalCUDA.h:277
__global__ void GET_GSH_COEFFS(const SpectralCrystalCUDA< T > *crystals, unsigned int ncrystals, GSHCoeffsCUDA< T > *coeffsPerBlockSums)
unsigned int n_alpha
Definition: crystalCUDA.h:45
EulerAngles< T > getEulerZXZAngles(Tensor2< T > R)
Get Euler angles from rotation matrix.
Definition: rotation.h:149
int deviceID
Definition: crystalCUDA.h:260
T * s
Definition: crystalCUDA.h:126
T * anglesC
Definition: crystalCUDA.h:125
CrystalPropertiesCUDA(const CrystalProperties< T > &propsIn)
std::shared_ptr< SpectralCrystalCUDA< T > > crystalsD
Definition: crystalCUDA.h:237
const std::vector< T > & getTHistory() const
Definition: crystalCUDA.h:230
SO3Discrete< T > orientationSpace
A dicrete colelction of points determining the orientation space for the crystal. ...
Definition: crystalCUDA.h:367
SpectralPolycrystalCUDA()
Definition: crystalCUDA.h:202
T m
Definition: crystalCUDA.h:48
SpectralPolycrystalGSHCUDA()
Definition: crystalCUDA.h:318
CudaKernelConfig reduceKernelLevel1Cfg
Definition: crystalCUDA.h:264
std::shared_ptr< GSHCoeffsCUDA< T > > gshPerBlockSums
Definition: crystalCUDA.h:272
std::shared_ptr< Tensor2CUDA< T, 3, 3 > > TCauchyPerBlockSums
Definition: crystalCUDA.h:270
__host__ __device__ Tensor2CUDA< T, N, M > trans() const
Definition: tensorCUDA.h:198
Definition: rotation.h:43
void setAngles(const EulerAngles< T > &angles)
Definition: crystalCUDA.h:74
Definition: rotation.h:19
T * anglesB
Definition: crystalCUDA.h:124
T getS() const
Definition: crystalCUDA.h:71
__device__ unsigned int * getGridDims()
Definition: spectralUtilsCUDA.h:314
Definition: crystalCUDA.h:314
EulerAngles< T > getAngles() const
Definition: crystalCUDA.h:73