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,
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<dftfe::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);
248 const std::shared_ptr<
298 const std::vector<dftfe::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<dftfe::uInt, dftfe::uInt>,
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:85
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:36
dftfe::linearAlgebra::MultiVector< typename dftfe::dataTypes::singlePrecType< ValueType >::type, memorySpace > d_hubbNonLocalProjectorTimesVectorBlockSinglePrec
Definition hubbardClass.h:391
void applyPotentialDueToHubbardCorrection(const dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &src, dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > &dst, const dftfe::uInt inputVecSize, const dftfe::uInt kPointIndex, const dftfe::uInt spinIndex)
std::shared_ptr< AtomicCenteredNonLocalOperator< dataTypes::numberFP32, memorySpace > > d_nonLocalOperatorSinglePrec
Definition hubbardClass.h:315
dftfe::uInt d_noOfSpin
Definition hubbardClass.h:364
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > d_BLASWrapperMemPtr
Definition hubbardClass.h:320
const MPI_Comm d_mpi_comm_parent
Definition hubbardClass.h:342
void computeResidualOccMat()
dftfe::uInt getTotalNumberOfSphericalFunctionsForAtomId(dftfe::uInt iAtom)
dftfe::uInt d_numTotalOccMatrixEntriesPerSpin
Definition hubbardClass.h:382
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > d_BLASWrapperHostPtr
Definition hubbardClass.h:324
void initialiseFlattenedDataStructure(dftfe::uInt numVectors)
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_hubbOccMatAfterMixing
Definition hubbardClass.h:398
std::vector< double > d_kPointWeights
Definition hubbardClass.h:333
void writeHubbOccToFile()
bool d_useSinglePrec
Definition hubbardClass.h:317
double d_spinPolarizedFactor
Definition hubbardClass.h:363
std::vector< dftfe::uInt > d_bandGroupLowHighPlusOneIndices
Definition hubbardClass.h:349
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
dftfe::uInt getGlobalAtomId(dftfe::uInt iAtom)
std::map< HubbardOccFieldType, dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_occupationMatrix
Definition hubbardClass.h:377
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 dftfe::uInt matrixFreeVectorComponent, const dftfe::uInt densityQuadratureId, const dftfe::uInt sparsityPatternQuadratureId, const dftfe::uInt numberWaveFunctions, const dftfe::uInt 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< dftfe::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)
std::vector< std::vector< double > > d_domainBoundaries
Definition hubbardClass.h:334
std::map< dftfe::uInt, hubbardSpecies > d_hubbardSpeciesData
Definition hubbardClass.h:325
std::vector< dftfe::uInt > d_OccMatrixEntryStartForAtom
Definition hubbardClass.h:383
std::shared_ptr< dftfe::basis::FEBasisOperations< ValueType, double, memorySpace > > d_BasisOperatorMemPtr
Definition hubbardClass.h:304
dftfe::uInt d_cellsBlockSizeApply
Definition hubbardClass.h:394
std::vector< dftfe::uInt > d_mapAtomToAtomicNumber
Definition hubbardClass.h:361
dftfe::uInt d_noSpecies
Definition hubbardClass.h:378
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
std::vector< dftfe::uInt > d_procLocalAtomId
Definition hubbardClass.h:352
void computeCouplingMatrix()
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > & getOccMatOut()
double getHubbardEnergy()
std::map< std::pair< dftfe::uInt, dftfe::uInt >, std::shared_ptr< AtomCenteredSphericalFunctionBase > > d_atomicProjectorFnsMap
Definition hubbardClass.h:328
dftfe::uInt this_mpi_process
Definition hubbardClass.h:347
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
void createAtomCenteredSphericalFunctionsForProjectors()
dftfe::uInt d_totalNumHubbAtoms
Definition hubbardClass.h:277
void setInitialOccMatrix()
dftfe::linearAlgebra::MultiVector< ValueType, memorySpace > d_hubbNonLocalProjectorTimesVectorBlock
Definition hubbardClass.h:386
const MPI_Comm d_mpi_comm_interBand
Definition hubbardClass.h:345
void computeHubbardOccNumberFromCTransOnX(const bool isOccOut, const dftfe::uInt vectorBlockSize, const dftfe::uInt spinIndex, const dftfe::uInt kpointIndex)
const dftParameters * d_dftParamsPtr
Definition hubbardClass.h:335
double d_expectationOfHubbardPotential
Definition hubbardClass.h:401
dftfe::uInt d_numberWaveFunctions
Definition hubbardClass.h:380
std::map< dftfe::uInt, dftfe::uInt > d_mapHubbardAtomToGlobalAtomId
Definition hubbardClass.h:275
std::shared_ptr< AtomicCenteredNonLocalOperator< ValueType, memorySpace > > d_nonLocalOperator
Definition hubbardClass.h:311
dftfe::uInt d_numSpins
Definition hubbardClass.h:351
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)
dftfe::uInt n_mpi_processes
Definition hubbardClass.h:347
const std::shared_ptr< AtomicCenteredNonLocalOperator< ValueType, memorySpace > > getNonLocalOperator()
void readHubbardInput(const std::vector< std::vector< double > > &atomLocations, const std::vector< dftfe::Int > &imageIds, const std::vector< std::vector< double > > &imagePositions)
dftfe::uInt d_maxOccMatSizePerAtom
Definition hubbardClass.h:403
std::vector< dftfe::uInt > d_mapAtomToHubbardIds
Definition hubbardClass.h:360
std::vector< double > d_initialAtomicSpin
Definition hubbardClass.h:357
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 dftfe::uInt inputVecSize, const dftfe::uInt kPointIndex, const dftfe::uInt spinIndex)
dftfe::uInt d_numKPoints
Definition hubbardClass.h:338
dftfe::uInt d_verbosity
Definition hubbardClass.h:395
void computeEnergyFromOccupationMatrix()
std::vector< double > d_kPointCoordinates
Definition hubbardClass.h:336
const dftfe::utils::MemoryStorage< ValueType, memorySpace > & getCouplingMatrix(dftfe::uInt spinIndex)
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
void initialiseOperatorActionOnX(dftfe::uInt kPointIndex)
std::vector< dftfe::Int > d_imageIds
Definition hubbardClass.h:359
std::vector< double > d_atomicCoords
Definition hubbardClass.h:356
dftfe::uInt d_densityQuadratureId
Definition hubbardClass.h:380
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
std::uint32_t uInt
Definition TypeConfig.h:10
T type
Definition dftfeDataTypes.h:113
This structure provides the relevant information pertaining to hubbard correction such as U value,...
Definition hubbardClass.h:38
dftfe::uInt numberSphericalFuncSq
Definition hubbardClass.h:44
double initialOccupation
Definition hubbardClass.h:45
std::vector< dftfe::uInt > nQuantumNum
Definition hubbardClass.h:46
double hubbardValue
Definition hubbardClass.h:41
dftfe::uInt atomicNumber
Definition hubbardClass.h:40
dftfe::uInt numProj
Definition hubbardClass.h:42
std::vector< dftfe::uInt > lQuantumNum
Definition hubbardClass.h:47
dftfe::uInt numberSphericalFunc
Definition hubbardClass.h:43