DFT-FE 1.1.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
operator.h
Go to the documentation of this file.
1//
2// -------------------------------------------------------------------------------------
3//
4// Copyright (c) 2017-2025 The Regents of the University of Michigan and DFT-FE
5// authors.
6//
7// This file is part of the DFT-FE code.
8//
9// The DFT-FE code is free software; you can use it, redistribute
10// it, and/or modify it under the terms of the GNU Lesser General
11// Public License as published by the Free Software Foundation; either
12// version 2.1 of the License, or (at your option) any later version.
13// The full text of the license can be found in the file LICENSE at
14// the top level of the DFT-FE distribution.
15//
16// --------------------------------------------------------------------------------------
17//
18// @author Phani Motamarri
19//
20#ifndef operatorDFTClass_h
21#define operatorDFTClass_h
22
24#include "headers.h"
25#include "process_grid.h"
26#include "scalapackWrapper.h"
27#include "elpaScalaManager.h"
28
29#include <vector>
30#if defined(DFTFE_WITH_DEVICE)
32#endif
33
34namespace dftfe
35{
36 /**
37 * @brief Base class for building the DFT operator and the action of operator on a vector
38 *
39 * @author Phani Motamarri, Sambit Das
40 */
41 template <dftfe::utils::MemorySpace memorySpace>
43 {
44 //
45 // methods
46 //
47 public:
48 /**
49 * @brief Destructor.
50 */
51 virtual ~operatorDFTClass(){};
52
53
55 getScratchFEMultivector(const unsigned int numVectors,
56 const unsigned int index) = 0;
57
59 memorySpace> &
60 getScratchFEMultivectorSinglePrec(const unsigned int numVectors,
61 const unsigned int index) = 0;
62
63 virtual void
64 init(const std::vector<double> &kPointCoordinates,
65 const std::vector<double> &kPointWeights) = 0;
66
67 virtual void
68 reinitkPointSpinIndex(const unsigned int kPointIndex,
69 const unsigned int spinIndex) = 0;
70
71 virtual void
72 reinitNumberWavefunctions(const unsigned int numWfc) = 0;
73
74
75 virtual void
77 const double scalarHX,
78 const double scalarY,
79 const double scalarX,
81 const bool onlyHPrimePartForFirstOrderDensityMatResponse = false) = 0;
82
83 virtual void
86 const double scalarHX,
87 const double scalarY,
88 const double scalarX,
90 const bool onlyHPrimePartForFirstOrderDensityMatResponse = false) = 0;
91
92 virtual void
95 const double scalarOX,
96 const double scalarY,
97 const double scalarX,
99 const bool useApproximateMatrixEntries = true) = 0;
100
101 virtual void
104 const double scalarOinvX,
105 const double scalarY,
106 const double scalarX,
108 &dst) = 0;
109
110 virtual void
113 & src,
114 const double scalarOinvX,
115 const double scalarY,
116 const double scalarX,
118 &dst) = 0;
119
120
121
122 virtual void
125 const double scalarHX,
126 const double scalarY,
127 const double scalarX,
129 const bool onlyHPrimePartForFirstOrderDensityMatResponse = false,
130 const bool skip1 = false,
131 const bool skip2 = false,
132 const bool skip3 = false) = 0;
133
134 virtual void
136 memorySpace> &src,
137 const double scalarHX,
138 const double scalarY,
139 const double scalarX,
141 memorySpace> &dst,
142 const bool onlyHPrimePartForFirstOrderDensityMatResponse = false,
143 const bool skip1 = false,
144 const bool skip2 = false,
145 const bool skip3 = false) = 0;
146
149
152
153 virtual const MPI_Comm &
155
158
161 };
162} // namespace dftfe
163#endif
Overloads dealii's distribute and distribute_local_to_global functions associated with constraints cl...
Definition constraintMatrixInfo.h:43
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition MultiVector.h:127
Base class for building the DFT operator and the action of operator on a vector.
Definition operator.h:43
virtual void HX(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)=0
virtual void overlapMatrixTimesX(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarOX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool useApproximateMatrixEntries=true)=0
virtual const dftfe::utils::MemoryStorage< double, memorySpace > & getSqrtMassVector()=0
virtual void overlapInverseMatrixTimesX(dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &src, const double scalarOinvX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &dst)=0
virtual void init(const std::vector< double > &kPointCoordinates, const std::vector< double > &kPointWeights)=0
virtual void HXWithLowdinOrthonormalisedInput(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)=0
virtual void overlapInverseMatrixTimesX(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarOinvX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst)=0
virtual void HXCheby(dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false, const bool skip1=false, const bool skip2=false, const bool skip3=false)=0
virtual void reinitkPointSpinIndex(const unsigned int kPointIndex, const unsigned int spinIndex)=0
virtual ~operatorDFTClass()
Destructor.
Definition operator.h:51
virtual dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > & getScratchFEMultivectorSinglePrec(const unsigned int numVectors, const unsigned int index)=0
virtual dftUtils::constraintMatrixInfo< memorySpace > * getOverloadedConstraintMatrix() const =0
virtual dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > * getOverloadedConstraintMatrixHost() const =0
virtual void reinitNumberWavefunctions(const unsigned int numWfc)=0
virtual void HXCheby(dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &src, const double scalarHX, const double scalarY, const double scalarX, dftfe::linearAlgebra::MultiVector< dataTypes::numberFP32, memorySpace > &dst, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false, const bool skip1=false, const bool skip2=false, const bool skip3=false)=0
virtual const MPI_Comm & getMPICommunicatorDomain()=0
virtual const dftfe::utils::MemoryStorage< double, memorySpace > & getInverseSqrtMassVector()=0
virtual dftfe::linearAlgebra::MultiVector< dataTypes::number, memorySpace > & getScratchFEMultivector(const unsigned int numVectors, const unsigned int index)=0
Definition MemoryStorage.h:33
float numberFP32
Definition dftfeDataTypes.h:45
Definition pseudoPotentialToDftfeConverter.cc:34