7 #ifndef HPP_CRYSTAL_CUDA_H 8 #define HPP_CRYSTAL_CUDA_H 13 #include <type_traits> 36 template <
typename T,
unsigned int N>
72 void setS(
const T& s) {this->s = s;}
108 crystal.
angles.alpha = anglesA[iCrystal];
109 crystal.
angles.beta = anglesB[iCrystal];
110 crystal.
angles.gamma = anglesC[iCrystal];
111 crystal.
s = s[iCrystal];
117 anglesA[iCrystal] = crystal.
angles.alpha;
118 anglesB[iCrystal] = crystal.
angles.beta;
119 anglesC[iCrystal] = crystal.
angles.gamma;
120 s[iCrystal] = crystal.
s;
131 template <
typename T,
unsigned int N>
133 const T s_alpha,
const T gammaSum,
const T dt)
136 T sDot = (props->
h_0)*powIntr((T)1.0 - s_alpha/(props->
s_s), (props->
a))*gammaSum;
137 return s_alpha + sDot*dt;
141 template<
typename T,
unsigned int P>
157 for (
unsigned int i=0; i<4; i++) {
158 dbCoord[i] = nearbyint((gridPos[i] - gridStarts[i])/gridSteps[i]);
160 dbCoord[i] = dbCoord[i]%gridDims[i];
165 template<
typename T,
unsigned int N>
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);
169 template<
typename T,
unsigned int N,
unsigned int P>
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);
193 template <
typename T,
unsigned int N>
199 unsigned int nDsets = 9;
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();
219 std::vector<EulerAngles<T>> getEulerAnglesZXZActive();
221 Tensor2<T> getPoleHistogram(
int p0,
int p1,
int p2);
222 void writeResultHDF5(std::string filename);
225 unsigned int getNTimestepsTaken();
226 unsigned int getNComponents();
227 unsigned long long int getNTermsComputedHardware();
249 bool useUnifiedDB =
false;
251 std::shared_ptr<SpectralDatabaseCUDA<T,4>>
dbD;
253 std::shared_ptr<SpectralDatabaseUnifiedCUDA<T,4,9>>
dbUnifiedD;
280 std::shared_ptr<Tensor2CUDA<T,HPP_POLE_FIG_HIST_DIM,HPP_POLE_FIG_HIST_DIM>> getPoleHistogram(
const VecCUDA<T,3>& pole);
291 double maxMemUsedGB = 0.0;
313 template <
typename T, CrystalType CRYSTAL_TYPE>
321 unsigned int orientationSpaceResolution = 6;
322 switch (CRYSTAL_TYPE) {
330 std::cerr <<
"No implementation for crystal type = " << CRYSTAL_TYPE << std::endl;
331 throw std::runtime_error(
"No implementation.");
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);
343 densities = std::vector<T>(orientationSpace.size(), 1.0/orientationSpace.size());
348 polycrystal.resetRandomOrientations(init_s, seed);
370 template <
typename T>
Definition: spectralUtils.h:317
T a
Definition: crystalCUDA.h:52
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's in a format that'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.
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
__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
__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