Skip to content

Commit befca43

Browse files
knikhil1995phanimotamarri
authored andcommitted
Merged in NCSOCPR (pull request #694)
Non-collinear magentism and SOC for ONCV Approved-by: Sambit Das Approved-by: Phani Motamarri
2 parents 152bdc9 + 909ce4c commit befca43

123 files changed

Lines changed: 19626 additions & 1882 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎include/AuxDensityMatrix.h‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ namespace dftfe
2525
hessianSpinUp,
2626
hessianSpinDown,
2727
laplacianSpinUp,
28-
laplacianSpinDown
28+
laplacianSpinDown,
29+
magAxisValues
2930
};
3031

3132
enum class WfcDescriptorDataAttributes

‎include/AuxDensityMatrixFE.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ namespace dftfe
114114
d_densityValsSpinUpAllQuads;
115115
dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>
116116
d_densityValsSpinDownAllQuads;
117+
dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>
118+
d_magAxisAllQuads;
117119
dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>
118120
d_gradDensityValsSpinUpAllQuads;
119121
dftfe::utils::MemoryStorage<double, dftfe::utils::MemorySpace::HOST>

‎include/FEBasisOperations.h‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ namespace dftfe
4343
update_inversejacobians = 0x0010,
4444

4545
update_jxw = 0x0020,
46+
47+
update_collocation_gradients = 0x0040,
4648
};
4749

4850
inline UpdateFlags
@@ -378,6 +380,12 @@ namespace dftfe
378380
const dftfe::utils::MemoryStorage<ValueTypeBasisCoeff, memorySpace> &
379381
shapeFunctionGradientData(bool transpose = false) const;
380382

383+
/**
384+
* @brief Collocation shape function gradient values at quadrature points.
385+
*/
386+
const dftfe::utils::MemoryStorage<ValueTypeBasisCoeff, memorySpace> &
387+
collocationShapeFunctionGradientData() const;
388+
381389
/**
382390
* @brief Inverse Jacobian matrices, for cartesian cells returns the
383391
* diagonal elements of the inverse Jacobian matrices for each cell, for
@@ -461,6 +469,26 @@ namespace dftfe
461469
}
462470
}
463471

472+
/**
473+
* @brief Collocation shape function gradient values at quadrature points in ValueTypeBasisData.
474+
*/
475+
const auto &
476+
collocationShapeFunctionGradientBasisData() const
477+
{
478+
if constexpr (std::is_same<ValueTypeBasisCoeff,
479+
ValueTypeBasisData>::value)
480+
{
481+
return d_collocationShapeFunctionGradientData.find(d_quadratureID)
482+
->second;
483+
}
484+
else
485+
{
486+
return d_collocationShapeFunctionGradientBasisData
487+
.find(d_quadratureID)
488+
->second;
489+
}
490+
}
491+
464492
/**
465493
* @brief Inverse Jacobian matrices in ValueTypeBasisData, for cartesian cells returns the
466494
* diagonal elements of the inverse Jacobian matrices for each cell, for
@@ -942,6 +970,9 @@ namespace dftfe
942970
std::map<dftfe::uInt,
943971
dftfe::utils::MemoryStorage<ValueTypeBasisCoeff, memorySpace>>
944972
d_shapeFunctionGradientDataInternalLayout;
973+
std::map<dftfe::uInt,
974+
dftfe::utils::MemoryStorage<ValueTypeBasisCoeff, memorySpace>>
975+
d_collocationShapeFunctionGradientData;
945976
std::map<dftfe::uInt,
946977
dftfe::utils::MemoryStorage<ValueTypeBasisCoeff, memorySpace>>
947978
d_shapeFunctionGradientData;
@@ -961,6 +992,9 @@ namespace dftfe
961992
std::map<dftfe::uInt,
962993
dftfe::utils::MemoryStorage<ValueTypeBasisData, memorySpace>>
963994
d_shapeFunctionBasisData;
995+
std::map<dftfe::uInt,
996+
dftfe::utils::MemoryStorage<ValueTypeBasisData, memorySpace>>
997+
d_collocationShapeFunctionGradientBasisData;
964998
std::map<dftfe::uInt,
965999
dftfe::utils::MemoryStorage<ValueTypeBasisData, memorySpace>>
9661000
d_shapeFunctionGradientBasisData;

‎include/KohnShamDFTBaseOperator.h‎

Lines changed: 19 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ namespace dftfe
3838
KohnShamDFTBaseOperator(
3939
std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
4040
BLASWrapperPtr,
41+
std::shared_ptr<
42+
dftfe::linearAlgebra::BLASWrapper<dftfe::utils::MemorySpace::HOST>>
43+
BLASWrapperPtrHost,
4144
std::shared_ptr<
4245
dftfe::basis::FEBasisOperations<dataTypes::number, double, memorySpace>>
4346
basisOperationsPtr,
@@ -221,119 +224,6 @@ namespace dftfe
221224
dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &dst,
222225
const bool onlyHPrimePartForFirstOrderDensityMatResponse = false);
223226

224-
// /**
225-
// * @brief Computing Y = scalarOX*OX + scalarX*X + scalarY*Y for a given X and Y in full precision
226-
// *
227-
// * @param src X vector
228-
// * @param scalarHX scalar for OX
229-
// * @param scalarY scalar for Y
230-
// * @param scalarX scalar for X
231-
// * @param dst Y vector
232-
// * @param useApproximateMatrixEntries flag to use approximate overlap matrix
233-
// */
234-
// void
235-
// overlapMatrixTimesX(
236-
// dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &src,
237-
// const double scalarOX,
238-
// const double scalarY,
239-
// const double scalarX,
240-
// dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &dst,
241-
// const bool useApproximateMatrixEntries = true);
242-
243-
244-
245-
// /**
246-
// * @brief Computing Y = scalarOinvX*O^{-1}X + scalarX*X + scalarY*Y for a given X and Y in full precision
247-
// *
248-
// * @param src X vector
249-
// * @param scalarOinvX scalar for O^{-1}X
250-
// * @param scalarY scalar for Y
251-
// * @param scalarX scalar for X
252-
// * @param dst Y vector
253-
// */
254-
// void
255-
// overlapInverseMatrixTimesX(
256-
// dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &src,
257-
// const double scalarOinvX,
258-
// const double scalarY,
259-
// const double scalarX,
260-
// dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace>
261-
// &dst);
262-
263-
// /**
264-
// * @brief Computing Y = scalarOinvX*O^{-1}X + scalarX*X + scalarY*Y for a given X and Y in Reduced precision
265-
// *
266-
// * @param src X vector
267-
// * @param scalarOinvX scalar for O^{-1}X
268-
// * @param scalarY scalar for Y
269-
// * @param scalarX scalar for X
270-
// * @param dst Y vector
271-
// */
272-
// void
273-
// overlapInverseMatrixTimesX(
274-
// dftfe::linearAlgebra::MultiVector<dataTypes::numberFP32, memorySpace>
275-
// & src,
276-
// const double scalarOinvX,
277-
// const double scalarY,
278-
// const double scalarX,
279-
// dftfe::linearAlgebra::MultiVector<dataTypes::numberFP32, memorySpace>
280-
// &dst);
281-
282-
// /**
283-
// * @brief Computing Y = scalarHX*HM^{-1}X + scalarX*X + scalarY*Y for a given X and Y in reduced precision
284-
// *
285-
// * @param src X vector
286-
// * @param scalarHX scalar for HX
287-
// * @param scalarY scalar for Y
288-
// * @param scalarX scalar for X
289-
// * @param dst Y vector
290-
// * @param onlyHPrimePartForFirstOrderDensityMatResponse flag to compute only HPrime part for first order density matrix response
291-
// * @param skip1 flag to skip extraction
292-
// * @param skip2 flag to skip nonLoal All Reduce
293-
// * @param skip3 flag to skip local HX and Assembly
294-
// */
295-
296-
// void
297-
// HXCheby(dftfe::linearAlgebra::MultiVector<dataTypes::numberFP32,
298-
// memorySpace> &src,
299-
// const double scalarHX,
300-
// const double scalarY,
301-
// const double scalarX,
302-
// dftfe::linearAlgebra::MultiVector<dataTypes::numberFP32,
303-
// memorySpace> &dst,
304-
// const bool onlyHPrimePartForFirstOrderDensityMatResponse,
305-
// const bool skip1,
306-
// const bool skip2,
307-
// const bool skip3);
308-
309-
// /**
310-
// * @brief Computing Y = scalarHX*M^{-1}HX + scalarX*X + scalarY*Y for a given X and Y in full precision
311-
// *
312-
// * @param src X vector
313-
// * @param scalarHX scalar for HX
314-
// * @param scalarY scalar for Y
315-
// * @param scalarX scalar for X
316-
// * @param dst Y vector
317-
// * @param onlyHPrimePartForFirstOrderDensityMatResponse flag to compute only HPrime part for first order density matrix response
318-
// * @param skip1 flag to skip extraction
319-
// * @param skip2 flag to skip nonLoal All Reduce
320-
// * @param skip3 flag to skip local HX and Assembly
321-
// */
322-
323-
// void
324-
// HXCheby(
325-
// dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &src,
326-
// const double scalarHX,
327-
// const double scalarY,
328-
// const double scalarX,
329-
// dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &dst,
330-
// const bool onlyHPrimePartForFirstOrderDensityMatResponse = false,
331-
// const bool skip1 = false,
332-
// const bool skip2 = false,
333-
// const bool skip3 = false);
334-
335-
336-
337227
void
338228
setVEffExternalPotCorrToZero();
339229

@@ -342,23 +232,15 @@ namespace dftfe
342232
AtomicCenteredNonLocalOperator<dataTypes::number, memorySpace>>
343233
d_pseudopotentialNonLocalOperator;
344234

345-
346-
/*
347-
* TODO ------------------------------
348-
* TODO For debugging Purposes: remove afterwards
349-
* TODO --------------------------------
350-
*/
351-
352-
// std::shared_ptr<
353-
// AtomicCenteredNonLocalOperator<dataTypes::number, memorySpace>>
354-
// d_HubbnonLocalOperator;
355-
356235
std::shared_ptr<
357236
AtomicCenteredNonLocalOperator<dataTypes::numberFP32, memorySpace>>
358237
d_pseudopotentialNonLocalOperatorSinglePrec;
359238

360239
std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
361240
d_BLASWrapperPtr;
241+
std::shared_ptr<
242+
dftfe::linearAlgebra::BLASWrapper<dftfe::utils::MemorySpace::HOST>>
243+
d_BLASWrapperPtrHost;
362244
std::shared_ptr<
363245
dftfe::basis::FEBasisOperations<dataTypes::number, double, memorySpace>>
364246
d_basisOperationsPtr;
@@ -402,11 +284,15 @@ namespace dftfe
402284
d_tempBlockVectorOverlapInvXSinglePrec;
403285

404286

405-
dftfe::utils::MemoryStorage<double, memorySpace> d_VeffJxW;
287+
dftfe::utils::MemoryStorage<double, memorySpace> d_VeffJxW, d_BeffxJxW,
288+
d_BeffyJxW, d_BeffzJxW;
406289
dftfe::utils::MemoryStorage<double, memorySpace> d_VeffExtPotJxW;
407290

408291
dftfe::utils::MemoryStorage<double, memorySpace>
409-
d_invJacderExcWithSigmaTimesGradRhoJxW;
292+
d_invJacderExcWithSigmaTimesGradRhoJxW,
293+
d_invJacderExcWithSigmaTimesMagXTimesGradRhoJxW,
294+
d_invJacderExcWithSigmaTimesMagYTimesGradRhoJxW,
295+
d_invJacderExcWithSigmaTimesMagZTimesGradRhoJxW;
410296
dftfe::utils::MemoryStorage<double, memorySpace>
411297
d_invJacinvJacderExcWithTauJxW;
412298
std::vector<dftfe::utils::MemoryStorage<double, memorySpace>>
@@ -427,6 +313,13 @@ namespace dftfe
427313

428314
dftfe::utils::MemoryStorage<double, memorySpace> tempHamMatrixRealBlock;
429315
dftfe::utils::MemoryStorage<double, memorySpace> tempHamMatrixImagBlock;
316+
dftfe::utils::MemoryStorage<double, memorySpace>
317+
tempHamMatrixBXBlockNonCollin;
318+
dftfe::utils::MemoryStorage<double, memorySpace>
319+
tempHamMatrixBYBlockNonCollin;
320+
dftfe::utils::MemoryStorage<double, memorySpace>
321+
tempHamMatrixBZBlockNonCollin;
322+
430323

431324
const dftfe::uInt d_densityQuadratureID;
432325
const dftfe::uInt d_lpspQuadratureID;

‎include/KohnShamDFTOperatorKernels.h‎

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,26 @@ namespace dftfe
4141
const dftfe::utils::MemoryStorage<double, memorySpace> &jxwVector,
4242
dftfe::utils::MemoryStorage<double, memorySpace> &VeffJxW);
4343

44+
template <dftfe::utils::MemorySpace memorySpace>
45+
void
46+
computeVeffBeffJxWEntries(
47+
const std::pair<dftfe::uInt, dftfe::uInt> cellRange,
48+
const dftfe::uInt numQuadsPerCell,
49+
const dftfe::utils::MemoryStorage<double, memorySpace> &phiVector,
50+
const dftfe::utils::MemoryStorage<double, memorySpace> &pdecVectorSpinUp,
51+
const dftfe::utils::MemoryStorage<double, memorySpace>
52+
&pdecVectorSpinDown,
53+
const dftfe::utils::MemoryStorage<double, memorySpace> &pdexVectorSpinUp,
54+
const dftfe::utils::MemoryStorage<double, memorySpace>
55+
&pdexVectorSpinDown,
56+
const dftfe::utils::MemoryStorage<double, memorySpace> &magAxis,
57+
const dftfe::utils::MemoryStorage<double, memorySpace> &jxwVector,
58+
dftfe::utils::MemoryStorage<double, memorySpace> &VeffJxW,
59+
dftfe::utils::MemoryStorage<double, memorySpace> &BeffxJxW,
60+
dftfe::utils::MemoryStorage<double, memorySpace> &BeffyJxW,
61+
dftfe::utils::MemoryStorage<double, memorySpace> &BeffzJxW);
62+
63+
4464
template <dftfe::utils::MemorySpace memorySpace>
4565
void
4666
computeInvJacderExcWithSigmaTimesGradRhoJxWEntries(
@@ -60,6 +80,31 @@ namespace dftfe
6080
dftfe::utils::MemoryStorage<double, memorySpace>
6181
&invJacderExcWithSigmaTimesGradRhoJxW);
6282

83+
template <dftfe::utils::MemorySpace memorySpace>
84+
void
85+
computeInvJacderExcWithSigmaTimesGradRhoMagJxWEntries(
86+
const std::pair<dftfe::uInt, dftfe::uInt> cellRange,
87+
const dftfe::uInt numQuadsPerCell,
88+
const dftfe::Int spinIndex,
89+
const dftfe::Int cellsTypeFlag,
90+
const dftfe::utils::MemoryStorage<double, memorySpace> &pdecVector,
91+
const dftfe::utils::MemoryStorage<double, memorySpace> &pdexVector,
92+
const dftfe::utils::MemoryStorage<double, memorySpace> &magAxis,
93+
const dftfe::utils::MemoryStorage<double, memorySpace> &jxwVector,
94+
const dftfe::utils::MemoryStorage<double, memorySpace>
95+
&invJacobianEntries,
96+
const dftfe::utils::MemoryStorage<double, memorySpace> &gradientRhoSpinUp,
97+
const dftfe::utils::MemoryStorage<double, memorySpace>
98+
&gradientRhoSpinDown,
99+
dftfe::utils::MemoryStorage<double, memorySpace>
100+
&invJacderExcWithSigmaTimesGradRhoJxW,
101+
dftfe::utils::MemoryStorage<double, memorySpace>
102+
&invJacderExcWithSigmaTimesMagXTimesGradRhoJxWHost,
103+
dftfe::utils::MemoryStorage<double, memorySpace>
104+
&invJacderExcWithSigmaTimesMagYTimesGradRhoJxWHost,
105+
dftfe::utils::MemoryStorage<double, memorySpace>
106+
&invJacderExcWithSigmaTimesMagZTimesGradRhoJxWHost);
107+
63108
template <dftfe::utils::MemorySpace memorySpace>
64109
void
65110
computeHalfInvJacinvJacderExcWithTauJxWEntries(
@@ -90,6 +135,23 @@ namespace dftfe
90135
&halfKSquareTimesDerExcwithTauJxW,
91136
dftfe::utils::MemoryStorage<double, memorySpace>
92137
&invJacKpointTimesderExcwithTauJxW);
138+
template <dftfe::utils::MemorySpace memorySpace>
139+
void
140+
computeCellHamiltonianMatrixNonCollinearFromBlocks(
141+
const std::pair<dftfe::uInt, dftfe::uInt> cellRange,
142+
const dftfe::uInt nDofsPerCell,
143+
const dftfe::utils::MemoryStorage<double, memorySpace>
144+
&tempHamMatrixRealBlock,
145+
const dftfe::utils::MemoryStorage<double, memorySpace>
146+
&tempHamMatrixImagBlock,
147+
const dftfe::utils::MemoryStorage<double, memorySpace>
148+
&tempHamMatrixBZBlockNonCollin,
149+
const dftfe::utils::MemoryStorage<double, memorySpace>
150+
&tempHamMatrixBYBlockNonCollin,
151+
const dftfe::utils::MemoryStorage<double, memorySpace>
152+
&tempHamMatrixBXBlockNonCollin,
153+
dftfe::utils::MemoryStorage<std::complex<double>, memorySpace>
154+
&cellHamiltonianMatrix);
93155
}; // namespace internal
94156
} // namespace dftfe
95157
#endif

‎include/KohnShamDFTStandardEigenOperator.h‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ namespace dftfe
4343
KohnShamDFTStandardEigenOperator(
4444
std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
4545
BLASWrapperPtr,
46+
std::shared_ptr<
47+
dftfe::linearAlgebra::BLASWrapper<dftfe::utils::MemorySpace::HOST>>
48+
BLASWrapperPtrHost,
4649
std::shared_ptr<
4750
dftfe::basis::FEBasisOperations<dataTypes::number, double, memorySpace>>
4851
basisOperationsPtr,
@@ -102,6 +105,23 @@ namespace dftfe
102105
const double scalarX,
103106
dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &dst);
104107

108+
/**
109+
* @brief Computing Y = scalarOinvX*O^{-1/2}X + scalarX*X + scalarY*Y for a given X and Y in full precision
110+
*
111+
* @param src X vector
112+
* @param scalarOinvX scalar for O^{-1}X
113+
* @param scalarY scalar for Y
114+
* @param scalarX scalar for X
115+
* @param dst Y vector
116+
*/
117+
void
118+
overlapSqrtInverseMatrixTimesX(
119+
dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &src,
120+
const double scalarOinvX,
121+
const double scalarY,
122+
const double scalarX,
123+
dftfe::linearAlgebra::MultiVector<dataTypes::number, memorySpace> &dst);
124+
105125
/**
106126
* @brief Computing Y = scalarOinvX*O^{-1}X + scalarX*X + scalarY*Y for a given X and Y in Reduced precision
107127
*

0 commit comments

Comments
 (0)