DFT-EFE
 
Loading...
Searching...
No Matches
KineticFE.h
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (c) 2021. *
3 * The Regents of the University of Michigan and DFT-EFE developers. *
4 * *
5 * This file is part of the DFT-EFE code. *
6 * *
7 * DFT-EFE is free software: you can redistribute it and/or modify *
8 * it under the terms of the Lesser GNU General Public License as *
9 * published by the Free Software Foundation, either version 3 of *
10 * the License, or (at your option) any later version. *
11 * *
12 * DFT-EFE is distributed in the hope that it will be useful, but *
13 * WITHOUT ANY WARRANTY; without even the implied warranty *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
15 * See the Lesser GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU Lesser General Public *
18 * License at the top level of DFT-EFE distribution. If not, see *
19 * <https://www.gnu.org/licenses/>. *
20 ******************************************************************************/
21
22/*
23 * @author Avirup Sircar
24 */
25
26#ifndef dftefeKineticFE_h
27#define dftefeKineticFE_h
28
30#include <ksdft/Hamiltonian.h>
31#include <ksdft/Energy.h>
36#include <ksdft/KSAttributes.h>
38
39namespace dftefe
40{
41 namespace ksdft
42 {
43 template <typename ValueTypeBasisData,
44 typename ValueTypeBasisCoeff,
45 utils::MemorySpace memorySpace,
46 size_type dim>
48 : public Hamiltonian<ValueTypeBasisData, memorySpace>,
49 public Energy<linearAlgebra::blasLapack::real_type<
50 linearAlgebra::blasLapack::scalar_type<ValueTypeBasisData,
51 ValueTypeBasisCoeff>>>
52 {
53 public:
54 using ValueType =
56 ValueTypeBasisCoeff>;
57
59
61
62 public:
67 std::shared_ptr<
69 feBasisDataStorage,
71 linAlgOpContext,
72 const size_type maxCellBlock,
73 const size_type waveFuncBatchSize,
75
76 ~KineticFE() = default;
77
78 void
79 reinit(std::shared_ptr<
81 feBasisDataStorage);
82
83 void
84 getLocal(Storage &cellWiseStorage) const override;
85 void
86 evalEnergy(const std::vector<RealType> & occupation,
87 const basis::FEBasisManager<ValueTypeBasisCoeff,
88 ValueTypeBasisData,
89 memorySpace,
90 dim> & feBMPsi,
91 const linearAlgebra::MultiVector<ValueTypeBasisCoeff,
92 memorySpace> &waveFunc);
94 getEnergy() const override;
95
96 void
100 bool updateGhostX,
101 bool updateGhostY) const override;
102
103 bool
104 hasLocalComponent() const override;
105
106 bool
107 hasNonLocalComponent() const override;
108
109 private:
110 std::shared_ptr<
113 std::shared_ptr<basis::FEBasisOperations<ValueTypeBasisCoeff,
114 ValueTypeBasisData,
115 memorySpace,
116 dim>>
120 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
122 // quadrature::QuadratureValuesContainer<ValueType, memorySpace>
123 // *d_gradPsi;
124 std::shared_ptr<Storage> d_cellWiseStorageKineticEnergy;
125
129 std::vector<size_type> d_numCellDofs;
131
132 std::shared_ptr<linearAlgebra::MultiVector<ValueType, memorySpace>>
134 std::shared_ptr<const utils::mpi::MPIPatternP2P<memorySpace>>
136
137 std::shared_ptr<
139 ValueTypeBasisCoeff,
140 memorySpace,
141 dim>>
143
144 }; // end of class KineticFE
145 } // end of namespace ksdft
146} // end of namespace dftefe
147#include <ksdft/KineticFE.t.cpp>
148#endif // dftefeKineticFE_h
An abstract class to store and access data for a given basis, such as the basis function values on a ...
Definition: FEBasisDataStorage.h:54
An abstract class to encapsulate the partitioning of a finite element basis across multiple processor...
Definition: FEBasisManager.h:44
Definition: FEBasisOperations.h:64
A derived class of linearAlgebra::OperatorContext to encapsulate the action of a discrete operator on...
Definition: LaplaceOperatorContextFE.h:63
Definition: Energy.h:35
Definition: Hamiltonian.h:35
Definition: KineticFE.h:52
bool hasNonLocalComponent() const override
Definition: KineticFE.t.cpp:441
std::vector< size_type > d_numCellDofs
Definition: KineticFE.h:129
void applyNonLocal(linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &X, linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &Y, bool updateGhostX, bool updateGhostY) const override
Definition: KineticFE.t.cpp:414
size_type d_S
Definition: KineticFE.h:127
void getLocal(Storage &cellWiseStorage) const override
Definition: KineticFE.t.cpp:131
linearAlgebra::blasLapack::scalar_type< ValueTypeBasisData, ValueTypeBasisCoeff > ValueType
Definition: KineticFE.h:56
size_type d_basisOverlapSize
Definition: KineticFE.h:130
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_psiBatchSmall
Definition: KineticFE.h:133
void reinit(std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBasisDataStorage)
Definition: KineticFE.t.cpp:84
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_YBatch
Definition: KineticFE.h:133
SpinStorageLayout d_layout
Definition: KineticFE.h:128
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: KineticFE.h:121
std::shared_ptr< Storage > d_cellWiseStorageKineticEnergy
Definition: KineticFE.h:124
const size_type d_waveFuncBatchSize
Definition: KineticFE.h:119
std::shared_ptr< electrostatics::LaplaceOperatorContextFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_laplaceOp
Definition: KineticFE.h:142
RealType d_energy
Definition: KineticFE.h:118
RealType getEnergy() const override
Definition: KineticFE.t.cpp:403
const size_type d_maxCellBlock
Definition: KineticFE.h:119
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_YBatchSmall
Definition: KineticFE.h:133
SpinMode d_spinMode
Definition: KineticFE.h:126
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_psiBatch
Definition: KineticFE.h:133
void evalEnergy(const std::vector< RealType > &occupation, const basis::FEBasisManager< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > &feBMPsi, const linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &waveFunc)
Definition: KineticFE.t.cpp:163
std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > d_mpiPatternP2P
Definition: KineticFE.h:135
std::shared_ptr< basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBasisOp
Definition: KineticFE.h:117
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBasisDataStorage
Definition: KineticFE.h:112
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: KineticFE.h:58
bool hasLocalComponent() const override
Definition: KineticFE.t.cpp:430
Definition: LinAlgOpContext.h:52
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
SpinMode
Definition: KSAttributes.h:55
SpinStorageLayout
Definition: HamiltonianSpinBlockCopyKernels.h:40
typeInternal::real_type< ValueType > real_type
Definition: BlasLapackTypedef.h:177
typeInternal::scalar_type< ValueType1, ValueType2 > scalar_type
Definition: BlasLapackTypedef.h:183
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9