18#ifndef DFTFE_EXE_HUBBARDCLASS_H
19#define DFTFE_EXE_HUBBARDCLASS_H
68 template <
typename ValueType, dftfe::utils::MemorySpace memorySpace>
81 const MPI_Comm &mpi_comm_domain,
82 const MPI_Comm &mpi_comm_interPool,
83 const MPI_Comm &mpi_comm_interBandGroup);
110 basisOperationsMemPtr,
113 FEBasisOperations<ValueType, double, dftfe::utils::MemorySpace::HOST>>
114 basisOperationsHostPtr,
120 const unsigned int matrixFreeVectorComponent,
121 const unsigned int densityQuadratureId,
122 const unsigned int sparsityPatternQuadratureId,
123 const unsigned int numberWaveFunctions,
124 const unsigned int numSpins,
126 const std::string & scratchFolderName,
127 const bool singlePrecNonLocalOperator,
128 const bool updateNonlocalSparsity,
129 const std::vector<std::vector<double>> &atomLocations,
130 const std::vector<std::vector<double>> &atomLocationsFrac,
131 const std::vector<int> & imageIds,
132 const std::vector<std::vector<double>> &imagePositions,
133 const std::vector<double> & kPointCoordinates,
134 const std::vector<double> & kPointWeights,
135 const std::vector<std::vector<double>> &domainBoundaries);
156 const std::vector<std::vector<double>> &orbitalOccupancy);
169 const unsigned int inputVecSize,
170 const unsigned int kPointIndex,
171 const unsigned int spinIndex);
181 const unsigned int inputVecSize,
182 const unsigned int kPointIndex,
183 const unsigned int spinIndex);
248 const std::shared_ptr<
283 const unsigned int vectorBlockSize,
284 const unsigned int spinIndex,
285 const unsigned int kpointIndex);
298 const std::vector<int> & imageIds,
299 const std::vector<std::vector<double>> &imagePositions);
307 FEBasisOperations<ValueType, double, dftfe::utils::MemorySpace::HOST>>
310 std::shared_ptr<AtomicCenteredNonLocalOperator<ValueType, memorySpace>>
319 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
326 std::map<std::pair<unsigned int, unsigned int>,
327 std::shared_ptr<AtomCenteredSphericalFunctionBase>>
330 std::shared_ptr<AtomCenteredSphericalFunctionContainer>
367 std::vector<dftfe::utils::MemoryStorage<ValueType, memorySpace>>
Definition AtomicCenteredNonLocalOperator.h:58
Definition FEBasisOperations.h:84
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:35
dftfe::linearAlgebra::MultiVector< typename dftfe::dataTypes::singlePrecType< ValueType >::type, memorySpace > d_hubbNonLocalProjectorTimesVectorBlockSinglePrec
Definition hubbardClass.h:391
unsigned int n_mpi_processes
Definition hubbardClass.h:347
std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::numberFP32, memorySpace > > d_nonLocalOperatorSinglePrec
Definition hubbardClass.h:315
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperMemPtr
Definition hubbardClass.h:320
std::vector< unsigned int > d_procLocalAtomId
Definition hubbardClass.h:352
const MPI_Comm d_mpi_comm_parent
Definition hubbardClass.h:342
void computeResidualOccMat()
std::map< std::pair< unsigned int, unsigned int >, std::shared_ptr< AtomCenteredSphericalFunctionBase > > d_atomicProjectorFnsMap
Definition hubbardClass.h:328
void applyPotentialDueToHubbardCorrection(const dftfe::linearAlgebra::MultiVector< typename dftfe::dataTypes::singlePrecType< ValueType >::type, memorySpace > &src, dftfe::linearAlgebra::MultiVector< typename dftfe::dataTypes::singlePrecType< ValueType >::type, memorySpace > &dst, const unsigned int inputVecSize, const unsigned int kPointIndex, const unsigned int spinIndex)
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > d_BLASWrapperHostPtr
Definition hubbardClass.h:324
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_hubbOccMatAfterMixing
Definition hubbardClass.h:398
std::vector< double > d_kPointWeights
Definition hubbardClass.h:333
std::vector< unsigned int > d_mapAtomToAtomicNumber
Definition hubbardClass.h:361
void writeHubbOccToFile()
bool d_useSinglePrec
Definition hubbardClass.h:317
unsigned int d_numTotalOccMatrixEntriesPerSpin
Definition hubbardClass.h:382
double d_spinPolarizedFactor
Definition hubbardClass.h:363
void readHubbardInput(const std::vector< std::vector< double > > &atomLocations, const std::vector< int > &imageIds, const std::vector< std::vector< double > > &imagePositions)
std::shared_ptr< AtomCenteredSphericalFunctionContainer > d_atomicProjectorFnsContainer
Definition hubbardClass.h:331
void computeOccupationMatrix(const dftfe::utils::MemoryStorage< ValueType, memorySpace > *X, const std::vector< std::vector< double > > &orbitalOccupancy)
dealii::ConditionalOStream pcout
Definition hubbardClass.h:354
std::map< HubbardOccFieldType, dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_occupationMatrix
Definition hubbardClass.h:377
std::vector< std::vector< double > > d_domainBoundaries
Definition hubbardClass.h:334
std::shared_ptr< dftfe::basis::FEBasisOperations< ValueType, double, memorySpace > > d_BasisOperatorMemPtr
Definition hubbardClass.h:304
unsigned int d_numSpins
Definition hubbardClass.h:351
unsigned int d_cellsBlockSizeApply
Definition hubbardClass.h:394
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > & getOccMatRes()
double d_hubbardEnergy
Definition hubbardClass.h:400
std::vector< std::vector< double > > d_periodicImagesCoords
Definition hubbardClass.h:358
void computeCouplingMatrix()
std::vector< int > d_imageIds
Definition hubbardClass.h:359
unsigned int getGlobalAtomId(unsigned int iAtom)
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > & getOccMatOut()
double getHubbardEnergy()
unsigned int d_totalNumHubbAtoms
Definition hubbardClass.h:277
std::vector< unsigned int > d_mapAtomToHubbardIds
Definition hubbardClass.h:360
void setInOccMatrix(const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &inputOccMatrix)
std::shared_ptr< dftfe::basis::FEBasisOperations< ValueType, double, dftfe::utils::MemorySpace::HOST > > d_BasisOperatorHostPtr
Definition hubbardClass.h:308
unsigned int d_noOfSpin
Definition hubbardClass.h:364
unsigned int d_verbosity
Definition hubbardClass.h:395
void createAtomCenteredSphericalFunctionsForProjectors()
void setInitialOccMatrix()
dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > d_hubbNonLocalProjectorTimesVectorBlock
Definition hubbardClass.h:386
const MPI_Comm d_mpi_comm_interBand
Definition hubbardClass.h:345
const dftParameters * d_dftParamsPtr
Definition hubbardClass.h:335
double d_expectationOfHubbardPotential
Definition hubbardClass.h:401
std::map< unsigned int, unsigned int > d_mapHubbardAtomToGlobalAtomId
Definition hubbardClass.h:275
std::shared_ptr< AtomicCenteredNonLocalOperator< ValueType, memorySpace > > d_nonLocalOperator
Definition hubbardClass.h:311
unsigned int d_numberWaveFunctions
Definition hubbardClass.h:380
unsigned int d_densityQuadratureId
Definition hubbardClass.h:380
std::map< unsigned int, hubbardSpecies > d_hubbardSpeciesData
Definition hubbardClass.h:325
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > & getOccMatIn()
hubbard(const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &mpi_comm_interPool, const MPI_Comm &mpi_comm_interBandGroup)
void computeHubbardOccNumberFromCTransOnX(const bool isOccOut, const unsigned int vectorBlockSize, const unsigned int spinIndex, const unsigned int kpointIndex)
std::vector< unsigned int > d_bandGroupLowHighPlusOneIndices
Definition hubbardClass.h:349
const std::shared_ptr< AtomicCenteredNonLocalOperator< ValueType, memorySpace > > getNonLocalOperator()
std::vector< unsigned int > d_OccMatrixEntryStartForAtom
Definition hubbardClass.h:383
const dftfe::utils::MemoryStorage< ValueType, memorySpace > & getCouplingMatrix(unsigned int spinIndex)
unsigned int d_numKPoints
Definition hubbardClass.h:338
unsigned int this_mpi_process
Definition hubbardClass.h:347
std::vector< double > d_initialAtomicSpin
Definition hubbardClass.h:357
unsigned int d_maxOccMatSizePerAtom
Definition hubbardClass.h:403
void computeEnergyFromOccupationMatrix()
std::vector< double > d_kPointCoordinates
Definition hubbardClass.h:336
void init(std::shared_ptr< dftfe::basis::FEBasisOperations< ValueType, double, memorySpace > > basisOperationsMemPtr, std::shared_ptr< dftfe::basis::FEBasisOperations< ValueType, double, dftfe::utils::MemorySpace::HOST > > basisOperationsHostPtr, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > BLASWrapperMemPtr, std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > BLASWrapperHostPtr, const unsigned int matrixFreeVectorComponent, const unsigned int densityQuadratureId, const unsigned int sparsityPatternQuadratureId, const unsigned int numberWaveFunctions, const unsigned int numSpins, const dftParameters &dftParam, const std::string &scratchFolderName, const bool singlePrecNonLocalOperator, const bool updateNonlocalSparsity, const std::vector< std::vector< double > > &atomLocations, const std::vector< std::vector< double > > &atomLocationsFrac, const std::vector< int > &imageIds, const std::vector< std::vector< double > > &imagePositions, const std::vector< double > &kPointCoordinates, const std::vector< double > &kPointWeights, const std::vector< std::vector< double > > &domainBoundaries)
unsigned int d_noSpecies
Definition hubbardClass.h:378
double d_atomOrbitalMaxLength
Definition hubbardClass.h:340
void readHubbOccFromFile()
double getExpectationOfHubbardPotential()
std::string d_dftfeScratchFolderName
Definition hubbardClass.h:365
const MPI_Comm d_mpi_comm_interPool
Definition hubbardClass.h:344
unsigned int getTotalNumberOfSphericalFunctionsForAtomId(unsigned int iAtom)
void initialiseFlattenedDataStructure(unsigned int numVectors)
void initialiseOperatorActionOnX(unsigned int kPointIndex)
std::vector< double > d_atomicCoords
Definition hubbardClass.h:356
void applyPotentialDueToHubbardCorrection(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &dst, const unsigned int inputVecSize, const unsigned int kPointIndex, const unsigned int spinIndex)
const MPI_Comm d_mpi_comm_domain
Definition hubbardClass.h:343
std::vector< dftfe::utils::MemoryStorage< ValueType, memorySpace > > d_couplingMatrixEntries
Definition hubbardClass.h:368
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > & getHubbMatrixForMixing()
std::vector< dftfe::utils::MemoryStorage< typename dftfe::dataTypes::singlePrecType< ValueType >::type, memorySpace > > d_couplingMatrixEntriesSinglePrec
Definition hubbardClass.h:373
Definition BLASWrapper.h:35
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition MultiVector.h:127
Definition MemoryStorage.h:33
Definition FEBasisOperations.h:30
Definition pseudoPotentialToDftfeConverter.cc:34
HubbardOccFieldType
This enum class provides the tags for the occupation matrices. This will be relevant during mixing.
Definition hubbardClass.h:56
@ Out
Definition hubbardClass.h:58
@ Residual
Definition hubbardClass.h:59
@ In
Definition hubbardClass.h:57
T type
Definition dftfeDataTypes.h:115
This structure provides the relevant information pertaining to hubbard correction such as U value,...
Definition hubbardClass.h:38
unsigned int numProj
Definition hubbardClass.h:42
double initialOccupation
Definition hubbardClass.h:45
unsigned int numberSphericalFunc
Definition hubbardClass.h:43
double hubbardValue
Definition hubbardClass.h:41
unsigned int numberSphericalFuncSq
Definition hubbardClass.h:44
unsigned int atomicNumber
Definition hubbardClass.h:40
std::vector< unsigned int > nQuantumNum
Definition hubbardClass.h:46
std::vector< unsigned int > lQuantumNum
Definition hubbardClass.h:47