StatMech
Loading...
Searching...
No Matches
statmech_gpu.cuh File Reference

Functions

template<typename TypeComplex >
magma_int_t EigenValues (std::vector< double > &eigenvalue, magma_int_t const dim, matrix_gpu< TypeComplex > &dHamiltonian)
 
template<typename TypeComplex >
double SpectralRange (double &OpMin, magma_int_t const dim, matrix_gpu< TypeComplex > &dHamiltonian)
 
template<typename TypeComplex >
magma_int_t Diagonalize (magma_int_t const dim, matrix_gpu< TypeComplex > &dHamiltonian, std::vector< double > &eigenvalue_h)
 
template<typename TypeComplex >
magma_int_t EigenMatrixElements (std::vector< double > &eigenvalue_h, magma_int_t const dim, matrix_gpu< TypeComplex > &dHamiltonian, matrix_gpu< TypeComplex > &dOperator, GPUconfig const &GPUconf)
 
template<typename TypeComplex >
magma_int_t EigenExpValue (std::vector< double > &EXPvalue_h, std::vector< double > &eigenvalue_h, magma_int_t const dim, matrix_gpu< TypeComplex > &dHamiltonian, matrix_gpu< TypeComplex > &dOperator, GPUconfig const &GPUconf)
 

Function Documentation

◆ Diagonalize()

template<typename TypeComplex >
magma_int_t Diagonalize ( magma_int_t const  dim,
matrix_gpu< TypeComplex > &  dHamiltonian,
std::vector< double > &  eigenvalue_h 
)

◆ EigenExpValue()

template<typename TypeComplex >
magma_int_t EigenExpValue ( std::vector< double > &  EXPvalue_h,
std::vector< double > &  eigenvalue_h,
magma_int_t const  dim,
matrix_gpu< TypeComplex > &  dHamiltonian,
matrix_gpu< TypeComplex > &  dOperator,
GPUconfig const &  GPUconf 
)
127 {
128 debug_print("# " << __func__ << "_gpu: dim=" << dim);
129 magma_int_t info = EigenMatrixElements(eigenvalue_h, dim, dHamiltonian, dOperator, GPUconf);
130
131 std::vector<TypeComplex> vector(dim);
132 magma_getvector(dim, sizeof(TypeComplex), dOperator.ptr(), dOperator.LD() + 1, &*vector.begin(),
133 1, GPUconf.queue());
134
135#pragma omp parallel for
136 for(size_t i = 0; i < dim; ++i) {
137 EXPvalue_h[i] = (double)real(vector[i]);
138 if(isnan(EXPvalue_h[i])) {
139#pragma omp critical
140 std::cerr << "Error(" << __func__ << "): EXPvalue_h[" << i << "] = NaN." << std::endl;
141 }
142 }
143 return info;
144}
void queue(magma_queue_t x)
Definition mytypes.hpp:297
debug_print("# Determining GPU configuration.")
GPUconfig GPUconf(dim3(nBlock, nBlock, 1), dim3(nThread, nThread, 1), 0, queue)
magma_int_t EigenMatrixElements(std::vector< double > &eigenvalue_h, magma_int_t const dim, matrix_gpu< TypeComplex > &dHamiltonian, matrix_gpu< TypeComplex > &dOperator, GPUconfig const &GPUconf)
Definition statmech_gpu.cu:95

◆ EigenMatrixElements()

template<typename TypeComplex >
magma_int_t EigenMatrixElements ( std::vector< double > &  eigenvalue_h,
magma_int_t const  dim,
matrix_gpu< TypeComplex > &  dHamiltonian,
matrix_gpu< TypeComplex > &  dOperator,
GPUconfig const &  GPUconf 
)
97 {
98 debug_print("# " << __func__ << "_gpu: dim=" << dim);
99 magma_int_t const LD = dHamiltonian.LD();
100 magma_int_t const LDT = magma_roundup(dim, 32);
101 magma_int_t info = Diagonalize(dim, dHamiltonian, eigenvalue_h);
102 if(info != 0) return info;
103
104 matrix_gpu<TypeComplex> ztemp(LDT, dim);
105 matrixProduct_hemm(MagmaLeft, MagmaLower, dim, dim, dOperator, dHamiltonian, ztemp, GPUconf);
106 matrixProduct_gemm(MagmaConjTrans, MagmaNoTrans, dim, dim, dim, dHamiltonian, ztemp, dOperator,
107 GPUconf);
108 return info;
109}
magma_int_t Diagonalize(magma_int_t const dim, matrix_gpu< TypeComplex > &dHamiltonian, std::vector< double > &eigenvalue_h)

◆ EigenValues()

template<typename TypeComplex >
magma_int_t EigenValues ( std::vector< double > &  eigenvalue,
magma_int_t const  dim,
matrix_gpu< TypeComplex > &  dHamiltonian 
)

◆ SpectralRange()

template<typename TypeComplex >
double SpectralRange ( double &  OpMin,
magma_int_t const  dim,
matrix_gpu< TypeComplex > &  dHamiltonian 
)