JDFTx  1.2.0
operators.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------
2 Copyright 2011 Ravishankar Sundararaman
3 
4 This file is part of JDFTx.
5 
6 JDFTx is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10 
11 JDFTx is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with JDFTx. If not, see <http://www.gnu.org/licenses/>.
18 -------------------------------------------------------------------*/
19 
20 #ifndef JDFTX_ELECTRONIC_OPERATORS_H
21 #define JDFTX_ELECTRONIC_OPERATORS_H
22 
24 
25 #include <electronic/common.h>
26 #include <electronic/RadialFunction.h>
27 #include <core/VectorField.h>
28 #include <core/ScalarFieldArray.h>
29 #include <core/matrix3.h>
30 
35 void removePhase(size_t N, complex* data, double& meanPhase, double& sigmaPhase, double& rmsImagErr);
36 
37 //----------------- Scalar field operators ---------------------------
38 
39 ScalarFieldTilde D(const ScalarFieldTilde&, int iDir);
40 ScalarFieldTilde DD(const ScalarFieldTilde&, int iDir, int jDir);
43 
44 
47 
52 
57 
58 
60 ScalarField radialFunction(const GridInfo& gInfo, const RadialFunctionG& f, vector3<> r0); //calls ScalarFieldTilde radialFunctionG
61 
63 void radialFunctionG(const RadialFunctionG& f, RealKernel& Kernel); //calls ScalarFieldTilde radialFunctionG
64 
67 
70 
73 
76 
79 
80 
81 //------------------------------ ColumnBundle operators ---------------------------------
82 
86 
87 ColumnBundle L(const ColumnBundle &Y);
88 ColumnBundle Linv(const ColumnBundle &Y);
89 ColumnBundle O(const ColumnBundle &Y, std::vector<matrix>* VdagY=0);
90 ColumnBundle D(const ColumnBundle &Y, int iDir);
91 ColumnBundle DD(const ColumnBundle &Y, int iDir, int jDir);
92 
94 void precond_inv_kinetic(ColumnBundle &Y, double KErollover);
95 
96 diagMatrix diagDot(const ColumnBundle& X, const ColumnBundle& Y);
97 void precond_inv_kinetic_band(ColumnBundle& Y, const diagMatrix& KEref);
98 
101 void translateColumns(ColumnBundle&, const vector3<>* dr);
102 
103 ColumnBundle switchBasis(const ColumnBundle&, const Basis&);
104 
105 //------------------------------ ColumnBundle reductions ---------------------------------
106 
108 complex traceinner(const diagMatrix &F, const ColumnBundle &X,const ColumnBundle &Y);
109 
116 ScalarFieldArray diagouterI(const diagMatrix &F,const ColumnBundle &X, int nDensities, const GridInfo* gInfoOut=0);
117 
118 #endif // JDFTX_ELECTRONIC_OPERATORS_H
ColumnBundle Linv(const ColumnBundle &Y)
Apply Laplacian inverse.
std::vector< ScalarField > ScalarFieldArray
dynamic size collection of real space scalar fields
Definition: ScalarFieldArray.h:32
Simulation grid descriptor.
Definition: GridInfo.h:45
std::shared_ptr< ScalarFieldTildeData > ScalarFieldTilde
A smart reference-counting pointer to ScalarFieldTildeData.
Definition: ScalarField.h:45
ColumnBundle translate(ColumnBundle &&, vector3<> dr)
translate a column-bundle by dr in lattice coordinates (destructible input)
Real diagonal matrix.
Definition: matrix.h:31
ScalarFieldTilde lDivergence(const ScalarFieldTildeArray &, int l)
spherical tensor divergence of order l (2l+1 inputs, multiplied by Ylm(Ghat) (iG)^l, and summed)
ScalarFieldTilde D(const ScalarFieldTilde &, int iDir)
compute the gradient in the iDir&#39;th cartesian direction
ScalarFieldTildeArray lGradient(const ScalarFieldTilde &, int l)
spherical tensor gradient of order l (2l+1 outputs, multiplied by Ylm(Ghat) (iG)^l) ...
ColumnBundle O(const ColumnBundle &Y, std::vector< matrix > *VdagY=0)
Apply overlap (and optionally retrieve pseudopotential projections for later reuse) ...
ScalarField pointGroupScatter(const ScalarField &, const matrix3< int > &mMesh)
diagMatrix diagDot(const ColumnBundle &X, const ColumnBundle &Y)
compute diag(X^Y) efficiently (avoid the off-diagonals)
Definition: Basis.h:29
void translateColumns(ColumnBundle &, const vector3<> *dr)
translate each column of a column bundle by a different dr (in-place)
ColumnBundle Idag_DiagV_I(const ColumnBundle &C, const ScalarFieldArray &V)
ScalarFieldTilde operator*(const RadialFunctionG &, const ScalarFieldTilde &)
Convolve a scalar field by a radial function (preserve input)
ScalarField radialFunction(const GridInfo &gInfo, const RadialFunctionG &f, vector3<> r0)
Create a spherically symmetric real scalar field centered at lattice coordinates r0, given its radial fourier transform f.
void removePhase(size_t N, complex *data, double &meanPhase, double &sigmaPhase, double &rmsImagErr)
void precond_inv_kinetic_band(ColumnBundle &Y, const diagMatrix &KEref)
In-place inverse kinetic preconditioner with band-by-band KE reference (Used by BandDavidson) ...
void multiplyBlochPhase(complexScalarField &, const vector3<> &k)
Multiply complex scalar field by Block phase for wave-vector k (in reciprocal lattice coordinates) ...
std::shared_ptr< complexScalarFieldData > complexScalarField
A smart reference-counting pointer to complexScalarFieldData.
Definition: ScalarField.h:46
ScalarFieldArray diagouterI(const diagMatrix &F, const ColumnBundle &X, int nDensities, const GridInfo *gInfoOut=0)
G-space radial function stored on a uniform grid (of |G|)
Definition: RadialFunction.h:28
Generic multiplet of data arrays (and specialized to triplets for vector fields in real/reciprocal sp...
void precond_inv_kinetic(ColumnBundle &Y, double KErollover)
Apply inverse kinetic preconditioner (Roughly inv((k+G)^2/2)) in-place.
classes ScalarFieldArray, ScalarFieldTildeArray and just enough operators to enable CG w...
void radialFunctionG(const RadialFunctionG &f, RealKernel &Kernel)
Create a spherically symmetric scalar G-space kernel given its radial form f.
complex traceinner(const diagMatrix &F, const ColumnBundle &X, const ColumnBundle &Y)
Return trace(F*X^Y)
Special class for storing real reciprocal-space kernels encountered ever so often for convolutions...
Definition: ScalarField.h:180
ScalarField pointGroupGather(const ScalarField &, const matrix3< int > &mMesh)
std::shared_ptr< ScalarFieldData > ScalarField
A smart reference-counting pointer to ScalarFieldData.
Definition: ScalarField.h:41
Complex number (need to define our own because we need operators for gpu code as well) ...
Definition: scalar.h:49
ColumnBundle L(const ColumnBundle &Y)
Apply Laplacian.
ScalarFieldTilde DD(const ScalarFieldTilde &, int iDir, int jDir)
second derivative along iDir&#39;th and jDir&#39;th cartesian directions
ColumnBundle switchBasis(const ColumnBundle &, const Basis &)
return wavefunction projected to a different basis
Generic multiplet object with overloaded arithmetic.
Definition: VectorField.h:49
std::vector< ScalarFieldTilde > ScalarFieldTildeArray
dynamic size collection of reciprocal space scalar fields
Definition: ScalarFieldArray.h:33
Definition: ColumnBundle.h:30