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>
35
36namespace dftefe
37{
38 namespace ksdft
39 {
40 template <typename ValueTypeBasisData,
41 typename ValueTypeBasisCoeff,
42 utils::MemorySpace memorySpace,
43 size_type dim>
45 : public Hamiltonian<ValueTypeBasisData, memorySpace>,
46 public Energy<linearAlgebra::blasLapack::real_type<
47 linearAlgebra::blasLapack::scalar_type<ValueTypeBasisData,
48 ValueTypeBasisCoeff>>>
49 {
50 public:
51 using ValueType =
53 ValueTypeBasisCoeff>;
54
56
58
59 public:
64 std::shared_ptr<
66 feBasisDataStorage,
68 linAlgOpContext,
69 const size_type maxCellBlock,
70 const size_type waveFuncBatchSize);
71
72 ~KineticFE() = default;
73
74 void
75 reinit(std::shared_ptr<
77 feBasisDataStorage);
78
79 void
80 getLocal(Storage &cellWiseStorage) const override;
81 void
82 evalEnergy(const std::vector<RealType> & occupation,
83 const basis::FEBasisManager<ValueTypeBasisCoeff,
84 ValueTypeBasisData,
85 memorySpace,
86 dim> & feBMPsi,
87 const linearAlgebra::MultiVector<ValueTypeBasisCoeff,
88 memorySpace> &waveFunc);
90 getEnergy() const override;
91
92 void
96 bool updateGhostX,
97 bool updateGhostY) const override;
98
99 bool
100 hasLocalComponent() const override;
101
102 bool
103 hasNonLocalComponent() const override;
104
105 private:
106 std::shared_ptr<
109 std::shared_ptr<basis::FEBasisOperations<ValueTypeBasisCoeff,
110 ValueTypeBasisData,
111 memorySpace,
112 dim>>
116 std::shared_ptr<linearAlgebra::LinAlgOpContext<memorySpace>>
118 // quadrature::QuadratureValuesContainer<ValueType, memorySpace>
119 // *d_gradPsi;
120 std::shared_ptr<Storage> d_cellWiseStorageKineticEnergy;
121
122 std::shared_ptr<linearAlgebra::MultiVector<ValueType, memorySpace>>
124 std::shared_ptr<const utils::mpi::MPIPatternP2P<memorySpace>>
126
127 std::shared_ptr<
129 ValueTypeBasisCoeff,
130 memorySpace,
131 dim>>
133
134 }; // end of class KineticFE
135 } // end of namespace ksdft
136} // end of namespace dftefe
137#include <ksdft/KineticFE.t.cpp>
138#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:57
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:49
bool hasNonLocalComponent() const override
Definition: KineticFE.t.cpp:380
void applyNonLocal(linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &X, linearAlgebra::MultiVector< ValueTypeBasisCoeff, memorySpace > &Y, bool updateGhostX, bool updateGhostY) const override
Definition: KineticFE.t.cpp:353
void getLocal(Storage &cellWiseStorage) const override
Definition: KineticFE.t.cpp:110
linearAlgebra::blasLapack::scalar_type< ValueTypeBasisData, ValueTypeBasisCoeff > ValueType
Definition: KineticFE.h:53
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_psiBatchSmall
Definition: KineticFE.h:123
void reinit(std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > feBasisDataStorage)
Definition: KineticFE.t.cpp:73
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_YBatch
Definition: KineticFE.h:123
std::shared_ptr< linearAlgebra::LinAlgOpContext< memorySpace > > d_linAlgOpContext
Definition: KineticFE.h:117
std::shared_ptr< Storage > d_cellWiseStorageKineticEnergy
Definition: KineticFE.h:120
const size_type d_waveFuncBatchSize
Definition: KineticFE.h:115
std::shared_ptr< electrostatics::LaplaceOperatorContextFE< ValueTypeBasisData, ValueTypeBasisCoeff, memorySpace, dim > > d_laplaceOp
Definition: KineticFE.h:132
RealType d_energy
Definition: KineticFE.h:114
RealType getEnergy() const override
Definition: KineticFE.t.cpp:342
const size_type d_maxCellBlock
Definition: KineticFE.h:115
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_YBatchSmall
Definition: KineticFE.h:123
std::shared_ptr< linearAlgebra::MultiVector< ValueType, memorySpace > > d_psiBatch
Definition: KineticFE.h:123
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:121
std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > d_mpiPatternP2P
Definition: KineticFE.h:125
std::shared_ptr< basis::FEBasisOperations< ValueTypeBasisCoeff, ValueTypeBasisData, memorySpace, dim > > d_feBasisOp
Definition: KineticFE.h:113
std::shared_ptr< const basis::FEBasisDataStorage< ValueTypeBasisData, memorySpace > > d_feBasisDataStorage
Definition: KineticFE.h:108
linearAlgebra::blasLapack::real_type< ValueType > RealType
Definition: KineticFE.h:55
bool hasLocalComponent() const override
Definition: KineticFE.t.cpp:369
Definition: LinAlgOpContext.h:38
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition: MultiVector.h:134
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
unsigned int size_type
Definition: TypeConfig.h:8