DFT-FE 1.3.0-pre
Density Functional Theory With Finite-Elements
Loading...
Searching...
No Matches
dft.h
Go to the documentation of this file.
1// ---------------------------------------------------------------------
2//
3// Copyright (c) 2017-2025 The Regents of the University of Michigan and DFT-FE
4// authors.
5//
6// This file is part of the DFT-FE code.
7//
8// The DFT-FE code is free software; you can use it, redistribute
9// it, and/or modify it under the terms of the GNU Lesser General
10// Public License as published by the Free Software Foundation; either
11// version 2.1 of the License, or (at your option) any later version.
12// The full text of the license can be found in the file LICENSE at
13// the top level of the DFT-FE distribution.
14//
15// ---------------------------------------------------------------------
16//
17
18#ifndef dft_H_
19#define dft_H_
20#include <constants.h>
22#include <elpaScalaManager.h>
23#include <headers.h>
24#include <MemorySpaceType.h>
25#include <MemoryStorage.h>
26#include <FEBasisOperations.h>
27#include <BLASWrapper.h>
28#include <AuxDensityMatrix.h>
29
30#include <complex>
31#include <deque>
32#include <iomanip>
33#include <iostream>
34#include <numeric>
35#include <sstream>
36
37#ifdef DFTFE_WITH_DEVICE
39# include "deviceKernelsGeneric.h"
40# include <linearSolverCGDevice.h>
42#endif
43
44// ************* For debugging purposes only. Remove afterwards
45#include "hubbardClass.h"
46
48#include <dealiiLinearSolver.h>
49#include <dftParameters.h>
50#include <eigenSolver.h>
51#include <interpolation.h>
57#include <vselfBinsManager.h>
58#include <excManager.h>
59#include <dftd.h>
60#include <force.h>
61#include "dftBase.h"
62#ifdef USE_PETSC
63# include <petsc.h>
64
65# include <slepceps.h>
66#endif
67
68#include <mixingClass.h>
69#include <oncvClass.h>
70#include <AuxDensityMatrix.h>
75#include <groupSymmetry.h>
76
77namespace dftfe
78{
79 //
80 // Initialize Namespace
81 //
82
83
84
85#ifndef DOXYGEN_SHOULD_SKIP_THIS
86
87 struct orbital
88 {
89 dftfe::uInt atomID;
90 dftfe::uInt waveID;
91 dftfe::uInt Z, n, l;
92 dftfe::Int m;
93 alglib::spline1dinterpolant psi;
94 };
95
96 /* code that must be skipped by Doxygen */
97 template <dftfe::utils::MemorySpace memory>
98 class forceClass;
99#endif /* DOXYGEN_SHOULD_SKIP_THIS */
100
101 /**
102 * @brief This class is the primary interface location of all other parts of the DFT-FE code
103 * for all steps involved in obtaining the Kohn-Sham DFT ground-state
104 * solution.
105 *
106 * @author Shiva Rudraraju, Phani Motamarri, Sambit Das
107 */
108 template <dftfe::utils::MemorySpace memorySpace>
109 class dftClass : public dftBase
110 {
111 friend class forceClass<memorySpace>;
112
113 public:
114 /**
115 * @brief dftClass constructor
116 *
117 * @param[in] mpi_comm_parent parent communicator
118 * @param[in] mpi_comm_domain mpi_communicator for domain decomposition
119 * parallelization
120 * @param[in] interpoolcomm mpi_communicator for parallelization over k
121 * points
122 * @param[in] interBandGroupComm mpi_communicator for parallelization over
123 * bands
124 * @param[in] scratchFolderName scratch folder name
125 * @param[in] dftParams dftParameters object containg parameter values
126 * parsed from an input parameter file in dftfeWrapper class
127 */
128 dftClass(const MPI_Comm &mpiCommParent,
129 const MPI_Comm &mpi_comm_domain,
130 const MPI_Comm &interpoolcomm,
131 const MPI_Comm &interBandGroupComm,
132 const std::string &scratchFolderName,
133 dftParameters &dftParams);
134
135 /**
136 * @brief dftClass destructor
137 */
139
140 /**
141 * @brief atomic system pre-processing steps.
142 *
143 * Reads the coordinates of the atoms.
144 * If periodic calculation, reads fractional coordinates of atoms in the
145 * unit-cell, lattice vectors, kPoint quadrature rules to be used and also
146 * generates image atoms. Also determines orbital-ordering
147 */
148 void
150
151 /**
152 * @brief Does KSDFT problem pre-processing steps including mesh generation calls.
153 */
154 void
156
157 /**
158 * @brief Does KSDFT problem pre-processing steps but without remeshing.
159 */
160 void
161 initNoRemesh(const bool updateImagesAndKPointsAndVselfBins = true,
162 const bool checkSmearedChargeWidthsForOverlap = true,
163 const bool useSingleAtomSolutionOverride = false,
164 const bool isMeshDeformed = false);
165
166
167
168 /**
169 * @brief FIXME: legacy call, move to main.cc
170 */
171 void
173
174
175 void
177
178 /**
179 * @brief Writes inital density and mesh to file.
180 */
181 void
183
184 /**
185 * @brief compute approximation to ground-state without solving the SCF iteration
186 */
187 void
189 /**
190 * @brief compute bands without solving the SCF iteration
191 */
192 void
194 /**
195 * @brief Kohn-Sham ground-state solve using SCF iteration
196 *
197 * @return tuple of boolean flag on whether scf converged,
198 * and L2 norm of residual electron-density of the last SCF iteration step
199 *
200 */
201 std::tuple<bool, double>
202 solve(const bool computeForces = true,
203 const bool computestress = true,
204 const bool restartGroundStateCalcFromChk = false);
205
206 void
208
209 void
211
212
213 void
221
222 /**
223 * @brief Copies the residual residualValues=outValues-inValues
224 */
225 double
228 &outValues,
230 &inValues,
232 &residualValues,
234 &JxW,
235 const bool computeNorm);
236
237
238 double
240 const distributedCPUVec<double> &inValues,
241 distributedCPUVec<double> &residualValues);
242
243
244 /**
245 * @brief Computes the diagonal mass matrix for rho nodal grid, used for nodal mixing
246 */
247 void
250 &massVec);
251
252 void
253 initializeKohnShamDFTOperator(const bool initializeCublas = true);
254
255
256 void
258
259
260 void
262
263
264 double
266
267 double
269
270 double
272
275
278
279 double
281
282 void
284
285 virtual void
287
288 /**
289 * @brief Number of Kohn-Sham eigen values to be computed
290 */
292
293
294 /**
295 * @brief Number of random wavefunctions
296 */
298
299 void
301
302 /**
303 *@brief Get local dofs global indices real
304 */
305 const std::vector<dealii::types::global_dof_index> &
307
308 /**
309 *@brief Get local dofs global indices imag
310 */
311 const std::vector<dealii::types::global_dof_index> &
313
314 /**
315 *@brief Get local dofs local proc indices real
316 */
317 const std::vector<dealii::types::global_dof_index> &
319
320 /**
321 *@brief Get local dofs local proc indices imag
322 */
323 const std::vector<dealii::types::global_dof_index> &
325
326 /**
327 *@brief Get matrix free data object
328 */
329 const dealii::MatrixFree<3, double> &
331
332
333 /** @brief Updates atom positions, remeshes/moves mesh and calls appropriate reinits.
334 *
335 * Function to update the atom positions and mesh based on the provided
336 * displacement input. Depending on the maximum displacement magnitude this
337 * function decides wether to do auto remeshing or move mesh using Gaussian
338 * functions. Additionaly this function also wraps the atom position across
339 * the periodic boundary if the atom moves across it beyond a certain
340 * magnitude. In case of floating atoms, only the atomic positions are
341 * updated keeping the mesh fixed. This function also calls initNoRemesh to
342 * reinitialize all the required FEM and KSDFT objects.
343 *
344 * @param[in] globalAtomsDisplacements vector containing the displacements
345 * (from current position) of all atoms (global).
346 * @return void.
347 */
348 void
350 const std::vector<dealii::Tensor<1, 3, double>> &globalAtomsDisplacements,
351 const double maxJacobianRatioFactor = 1.25,
352 const bool useSingleAtomSolutionsOverride = false);
353
354
355 /**
356 * @brief writes the current domain bounding vectors and atom coordinates to files, which are required for
357 * geometry relaxation restart
358
359 */
360 void
362
363 /**
364 * @brief writes the current domain bounding vectors and atom coordinates to files for
365 * structural optimization and dynamics restarts. The coordinates are stored
366 * as: 1. fractional for semi-periodic/periodic 2. Cartesian for
367 * non-periodic.
368 * @param[in] Path The folder path to store the atom coordinates required
369 * during restart.
370 */
371 void
372 writeDomainAndAtomCoordinates(const std::string Path) const;
373
374 /**
375 * @brief writes atomistics data for subsequent post-processing. Related to
376 * WRITE STRUCTURE ENERGY FORCES DATA POST PROCESS input parameter.
377 * @param[in] Path The folder path to store the atomistics data.
378 */
379 void
380 writeStructureEnergyForcesDataPostProcess(const std::string Path) const;
381
382 /**
383 * @brief writes quadrature grid information and associated spin-up
384 * and spin-down electron-density for post-processing
385 * @param[in] Path The folder path to store the atomistics data.
386 */
387 virtual void
388 writeGSElectronDensity(const std::string Path) const;
389
390
391 /**
392 * @brief Gets the current atom Locations in cartesian form
393 * (origin at center of domain) from dftClass
394 */
395 const std::vector<std::vector<double>> &
397
398 /**
399 * @brief Gets the nearest atom distance for each atom
400 */
401 const std::vector<double> &
403
404 /**
405 * @brief Gets the current image atom Locations in cartesian form
406 * (origin at center of domain) from dftClass
407 */
408 const std::vector<std::vector<double>> &
410
411 /**
412 * @brief Gets the current image atom ids from dftClass
413 */
414 const std::vector<dftfe::Int> &
416
417 /**
418 * @brief Gets the current atom Locations in fractional form
419 * from dftClass (only applicable for periodic and semi-periodic BCs)
420 */
421 const std::vector<std::vector<double>> &
423
424
425
426 /**
427 * @brief Gets the current cell lattice vectors
428 *
429 * @return std::vector<std::vector<double>> 3 \times 3 matrix,lattice[i][j]
430 * corresponds to jth component of ith lattice vector
431 */
432 const std::vector<std::vector<double>> &
433 getCell() const;
434
435 /**
436 * @brief Gets the current cell volume
437 *
438 */
439 double
441
442 /**
443 * @brief Gets the current atom types from dftClass
444 */
445 const std::set<dftfe::uInt> &
447
448 /**
449 * @brief Gets the current atomic forces from dftClass
450 */
451 const std::vector<double> &
453
454 /**
455 * @brief Gets the current cell stress from dftClass
456 */
457 const dealii::Tensor<2, 3, double> &
459
460 /**
461 * @brief Get reference to dftParameters object
462 */
465
466
467 /**
468 * @brief Get reference the memorySpace templated eigen vectors
469 */
472
473 /**
474 * @brief Get reference the host eigen vectors
475 */
479
480 /**
481 * @brief Get reference to the eigen values
482 */
483 const std::vector<std::vector<double>> &
485
486 /**
487 * @brief Get the value of fermi energy
488 */
489 double
491
492 /**
493 * @brief Get the number of electrons
494 */
495 double
497
498 void
499 setNumElectrons(dftfe::uInt inputNumElectrons);
500
503#ifdef DFTFE_WITH_DEVICE
504
505 /**
506 * @brief Get the Ptr to Chebyshev solver in device
507 */
508 chebyshevOrthogonalizedSubspaceIterationSolverDevice *
509 getSubspaceIterationSolverDevice();
510#endif
511 /**
512 * @brief Get the Ptr to Chebyshev solver in host
513 */
516
517 /**
518 * @brief Function that computes the Eigen space for the Kohn Sham operator.
519 */
520 void
522 const dftfe::uInt s,
523 const dftfe::uInt kPointIndex,
525 &kohnShamDFTEigenOperator,
526 elpaScalaManager &elpaScala,
527 chebyshevOrthogonalizedSubspaceIterationSolver &subspaceIterationSolver,
528 std::vector<double> &residualNormWaveFunctions,
529 const bool computeResidual,
530 const bool useMixedPrec = false,
531 const bool isFirstScf = false);
532
533
534#ifdef DFTFE_WITH_DEVICE
535 /**
536 * @brief Function that computes the Eigen space for the Kohn Sham operator in device.
537 */
538 void
540 const dftfe::uInt s,
541 const dftfe::uInt kPointIndex,
543 &kohnShamDFTEigenOperator,
544 elpaScalaManager &elpaScala,
545 chebyshevOrthogonalizedSubspaceIterationSolverDevice
546 &subspaceIterationSolverDevice,
547 std::vector<double> &residualNormWaveFunctions,
548 const bool computeResidual,
549 const dftfe::uInt numberRayleighRitzAvoidancePasses = 0,
550 const bool useMixedPrec = false,
551 const bool isFirstScf = false);
552#endif
553
554 /**
555 *@brief Computes Fermi-energy obtained by imposing constraint on the number of electrons
556 */
557 void
559 const std::vector<std::vector<double>> &eigenValuesInput,
560 const double numElectronsInput);
561
562 /**
563 *@brief find HOMO eigenvalue for pure state
564 */
565 void
567 const std::vector<std::vector<double>> &eigenValuesInput,
568 const double numElectronsInput);
569
570 /**
571 *@brief Computes the kinetic energy
572 */
573 double
576 &kineticEnergyDensityValues);
577
578 /**
579 *@brief get the Ptr to the operator class ( Kohn Sham Base Operator)
580 */
583
584 /**
585 *@brief get the index of the DoF Handler corresponding to
586 *
587 */
590
593
594 const std::vector<double> &
596
599
602
603 const dealii::MatrixFree<3, double> &
605
606 dealii::AffineConstraints<double> *
608
611
614
617
618
619 std::shared_ptr<
621 double,
624
625 std::shared_ptr<
628
629 std::shared_ptr<
630 dftfe::basis::
631 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
633
634 std::shared_ptr<
637
638 std::shared_ptr<dftfe::linearAlgebra::BLASWrapper<memorySpace>>
640
641
642 std::shared_ptr<
645
646 std::vector<
649
650 std::vector<
653
654 /**
655 *@brief l2 projection
656 */
657 void
659 const std::shared_ptr<
661 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
662 &basisOperationsPtr,
663 const dealii::AffineConstraints<double> &constraintMatrix,
664 const dftfe::uInt dofHandlerId,
665 const dftfe::uInt quadratureId,
667 &quadratureValueData,
668 distributedCPUVec<double> &nodalField);
669
670 /// map of atom node number and atomic weight
671 std::map<dealii::types::global_dof_index, double> &
673
674 /// non-intersecting smeared charges of all atoms at quad points
675 std::map<dealii::CellId, std::vector<double>> &
677
680
681 const dealii::AffineConstraints<double> *
683
684 const std::vector<std::vector<double>> &
686
687 const MPI_Comm &
688 getMPIDomain() const override;
689
690 const MPI_Comm &
691 getMPIParent() const override;
692
693 const MPI_Comm &
694 getMPIInterPool() const override;
695
696 const MPI_Comm &
697 getMPIInterBand() const override;
698
699 const std::map<dealii::CellId, std::vector<dftfe::uInt>> &
701
702 void
704
705 void
707 const std::shared_ptr<
709 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
710 &basisOperationsPtr,
711 const dftfe::uInt densityQuadratureId,
713 &rhoQuadValues,
714 const std::map<dealii::CellId, std::vector<double>> *bQuadValues);
715
718
719 /**
720 *@brief Returns the shared ptr to hubbard class
721 */
722 std::shared_ptr<hubbard<dataTypes::number, memorySpace>>
724
725 /**
726 *@brief Function to check if hubbard corrections is being used
727 */
728 bool
730
731 /**
732 *@brief write wavefunction solution fields
733 */
734 void
735 outputWfc(const std::string outputFileName = "wfcOutput");
736
737 /**
738 *@brief return the pseudo potential field
739 */
740 const std::map<dealii::CellId, std::vector<double>> &
742
743 private:
744 /**
745 * @brief generate image charges and update k point cartesian coordinates based
746 * on current lattice vectors
747 */
748 void
750
751 /**
752 * @brief Checks if the Exc functional requires Hubbard correction
753 * and sets up the Hubbard class if required.
754 */
755 void
757
758 void
760 const std::vector<std::vector<double>> &atomCoordinates);
761
762
763 /**
764 *@brief project ground state electron density from previous mesh into
765 * the new mesh to be used as initial guess for the new ground state solve
766 */
767 void
769
770 /**
771 *@brief save triangulation information and rho quadrature data to checkpoint file for restarts
772 */
773 void
775
776 /**
777 *@brief load triangulation information rho quadrature data from checkpoint file for restarted run
778 */
779 void
781 /**
782 * @brief save data of quad points to checkpoint file. Used for restart calculations, nscf and bands.
783 *
784 * @param[in] basisOperationsPtr basisoperationsPtr object
785 * @param[in] quadratureId quadrature Id of quad point used in checkpoint
786 * file
787 * @param[out] quadratureValueData quadrature data of field that is to be
788 * saved
789 * @param[in] fieldDimension dimension of field.
790 * @param[in] fieldName file name of checkpoint data to be saved
791 * @param[in] folderPath restart folder name
792 * @param[in] mpi_comm_parent parent communicator
793 * @param[in] mpi_comm_domain mpi_communicator for domain decomposition
794 * parallelization
795 * @param[in] interpoolcomm mpi_communicator for parallelization over k
796 * points
797 * @param[in] interBandGroupComm mpi_communicator for parallelization over
798 * bands
799 */
800 void
802 const std::shared_ptr<
804 double,
806 &basisOperationsPtr,
807 const dftfe::uInt quadratureId,
809 &quadratureValueData,
810 const dftfe::uInt fieldDimension,
811 const std::string &fieldName,
812 const std::string &folderPath,
813 const MPI_Comm &mpi_comm_parent,
814 const MPI_Comm &mpi_comm_domain,
815 const MPI_Comm &interpoolcomm,
816 const MPI_Comm &interBandGroupComm);
817 /**
818 * @brief loads data from quad points of checkpoint file. Used for restart calculations, nscf and bands.
819 *
820 * @param[in] basisOperationsPtr basisoperationsPtr object
821 * @param[in] quadratureId quadrature Id of quad point used in checkpoint
822 * file
823 * @param[out] quadratureValueData quadrature data of field that is to be
824 * loaded
825 * @param[in] fieldDimension dimension of field.
826 * @param[in] fieldName file name containing checkpoint data
827 * @param[in] folderPath restart folder name
828 * @param[in] mpi_comm_parent parent communicator
829 * @param[in] mpi_comm_domain mpi_communicator for domain decomposition
830 * parallelization
831 * @param[in] interpoolcomm mpi_communicator for parallelization over k
832 * points
833 * @param[in] interBandGroupComm mpi_communicator for parallelization over
834 * bands
835 */
836 void
838 const std::shared_ptr<
840 double,
842 &basisOperationsPtr,
843 const dftfe::uInt quadratureId,
845 &quadratureValueData,
846 const dftfe::uInt fieldDimension,
847 const std::string &fieldName,
848 const std::string &folderPath,
849 const MPI_Comm &mpi_comm_parent,
850 const MPI_Comm &mpi_comm_domain,
851 const MPI_Comm &interpoolcomm,
852 const MPI_Comm &interBandGroupComm);
853
854 void
856 void
857 writeMesh(std::string meshFileName);
858
859 /// creates datastructures related to periodic image charges
860 void
861 generateImageCharges(const double pspCutOff,
862 std::vector<dftfe::Int> &imageIds,
863 std::vector<double> &imageCharges,
864 std::vector<std::vector<double>> &imagePositions);
865
866 void
868 const double pspCutOff,
869 const std::vector<dftfe::Int> &imageIds,
870 const std::vector<std::vector<double>> &imagePositions,
871 std::vector<std::vector<dftfe::Int>> &globalChargeIdToImageIdMap);
872
873 void
875
876 //
877 // generate mesh using a-posteriori error estimates
878 //
879 void
882 computeTraceXtHX(dftfe::uInt numberWaveFunctionsEstimate);
883 double
884 computeTraceXtKX(dftfe::uInt numberWaveFunctionsEstimate);
885
886
887 /**
888 *@brief moves the triangulation vertices using Gaussians such that the all atoms are on triangulation vertices
889 */
890 void
891 moveMeshToAtoms(dealii::Triangulation<3, 3> &triangulationMove,
892 dealii::Triangulation<3, 3> &triangulationSerial,
893 bool reuseFlag = false,
894 bool moveSubdivided = false);
895
896 /**
897 *@brief a
898 */
899 void
901
902 /**
903 *@brief a
904 */
905 void
907
908 /**
909 * Initializes the guess of electron-density and single-atom wavefunctions
910 * on the mesh, maps finite-element nodes to given atomic positions,
911 * initializes pseudopotential files and exchange-correlation functionals to
912 * be used based on user-choice. In periodic problems, periodic faces are
913 * mapped here. Further finite-element nodes to be pinned for solving the
914 * Poisson problem electro-static potential is set here
915 */
916 void
918 dealii::parallel::distributed::Triangulation<3> &triangulation);
919 void
920 initBoundaryConditions(const bool recomputeBasisData = true,
921 const bool meshOnlyDeformed = false,
922 const bool vselfPerturbationUpdateForStress = false);
923 void
925 void
926 initPseudoPotentialAll(const bool updateNonlocalSparsity = true);
927
928 /**
929 * create a dofHandler containing finite-element interpolating polynomial
930 * twice of the original polynomial required for Kerker mixing and
931 * initialize various objects related to this refined dofHandler
932 */
933 void
935 dealii::parallel::distributed::Triangulation<3> &triangulation);
936 void
937 initpRefinedObjects(const bool recomputeBasisData,
938 const bool meshOnlyDeformed,
939 const bool vselfPerturbationUpdateForStress = false);
940
941
942 /**
943 *@brief Sets inhomegeneous dirichlet boundary conditions upto quadrupole for total potential constraints on
944 * non-periodic boundary (boundary id==0).
945 *
946 * @param[in] dofHandler
947 * @param[out] constraintMatrix dealii::AffineConstraints<double> object
948 *with inhomogeneous Dirichlet boundary condition entries added
949 */
950 void
952 const dealii::DoFHandler<3> &_dofHandler,
953 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints,
954 dealii::AffineConstraints<double> &constraintMatrix);
955
956
957 /**
958 *@brief add atomic densities at quadrature points
959 *
960 */
961 void
964 &quadratureValueData,
966 &quadratureGradValueData,
967 const bool isConsiderGradData = false);
968
969
970 /**
971 *@brief Finds the global dof ids of the nodes containing atoms.
972 *
973 * @param[in] dofHandler
974 * @param[out] atomNodeIdToChargeValueMap local map of global dof id to atom
975 *charge id
976 */
977 void
978 locateAtomCoreNodes(const dealii::DoFHandler<3> &_dofHandler,
979 std::map<dealii::types::global_dof_index, double>
980 &atomNodeIdToChargeValueMap);
981
982 /**
983 *@brief Sets homogeneous dirichlet boundary conditions on a node farthest from
984 * all atoms (pinned node). This is only done in case of periodic boundary
985 *conditions to get an unique solution to the total electrostatic potential
986 *problem.
987 *
988 * @param[in] dofHandler
989 * @param[in] constraintMatrixBase base dealii::AffineConstraints<double>
990 *object
991 * @param[out] constraintMatrix dealii::AffineConstraints<double> object
992 *with homogeneous Dirichlet boundary condition entries added
993 */
994 void
996 const dealii::DoFHandler<3> &_dofHandler,
997 const dealii::AffineConstraints<double> &constraintMatrixBase,
998 dealii::AffineConstraints<double> &constraintMatrix);
999
1000 void
1002
1004
1005 void
1007
1008 void
1010 void
1012 void
1014 std::vector<std::vector<distributedCPUVec<double>>> eigenVectors);
1015 void
1017
1018
1019 /**
1020 *@brief computes density nodal data from wavefunctions
1021 */
1022 void
1024
1025
1026 void
1030 distributedCPUVec<double> &fvSpin1);
1031
1032 void
1034 void
1036 void
1038 void
1040 dftfe::uInt n,
1041 dftfe::uInt l,
1042 dftfe::uInt &flag);
1043 void
1045 const dealii::DoFHandler<3> &_dofHandler,
1046 const dftfe::uInt lpspQuadratureId,
1047 const dealii::MatrixFree<3, double> &_matrix_free_data,
1048 const dftfe::uInt _phiExtDofHandlerIndex,
1049 const dealii::AffineConstraints<double> &phiExtConstraintMatrix,
1050 const std::map<dealii::types::global_dof_index, dealii::Point<3>>
1051 &supportPoints,
1052 const vselfBinsManager &vselfBinManager,
1054 std::map<dealii::CellId, std::vector<double>> &_pseudoValues,
1055 std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
1056 &_pseudoValuesAtoms);
1057
1058
1059
1060 /**
1061 *@brief Sets homegeneous dirichlet boundary conditions for total potential constraints on
1062 * non-periodic boundary (boundary id==0).
1063 *
1064 * @param[in] dofHandler
1065 * @param[out] constraintMatrix dealii::AffineConstraints<double> object
1066 *with homogeneous Dirichlet boundary condition entries added
1067 */
1068 void
1070 const dealii::DoFHandler<3> &_dofHandler,
1071 const dealii::AffineConstraints<double> &onlyHangingNodeConstraints,
1072 dealii::AffineConstraints<double> &constraintMatrix);
1073
1074
1075
1076 /**
1077 *@brief Computes total charge by integrating the electron-density
1078 */
1079 double
1080 totalCharge(const dealii::DoFHandler<3> &dofHandlerOfField,
1081 const distributedCPUVec<double> &rhoNodalField);
1082
1083
1084 double
1086 const dealii::DoFHandler<3> &dofHandlerOfField,
1087 const std::map<dealii::CellId, std::vector<double>> *rhoQuadValues);
1088
1089 double
1091 const dealii::DoFHandler<3> &dofHandlerOfField,
1093 &rhoQuadValues);
1094
1095
1096 double
1097 totalCharge(const dealii::MatrixFree<3, double> &matrixFreeDataObject,
1098 const distributedCPUVec<double> &rhoNodalField);
1099
1100
1101
1102 double
1103 rhofieldl2Norm(const dealii::MatrixFree<3, double> &matrixFreeDataObject,
1104 const distributedCPUVec<double> &rhoNodalField,
1105 const dftfe::uInt dofHandlerId,
1106 const dftfe::uInt quadratureId);
1107
1108 double
1110 const dealii::MatrixFree<3, double> &matrixFreeDataObject,
1111 const distributedCPUVec<double> &rhoNodalField1,
1112 const distributedCPUVec<double> &rhoNodalField2,
1113 const dftfe::uInt dofHandlerId,
1114 const dftfe::uInt quadratureId);
1115
1116
1117 double
1118 fieldGradl2Norm(const dealii::MatrixFree<3, double> &matrixFreeDataObject,
1119 const distributedCPUVec<double> &field);
1120
1121
1122 /**
1123 *@brief l2 projection
1124 */
1125 void
1127 const std::shared_ptr<
1128 dftfe::basis::
1129 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
1130 &basisOperationsPtr,
1131 const dealii::AffineConstraints<double> &constraintMatrix,
1132 const dftfe::uInt dofHandlerId,
1133 const dftfe::uInt quadratureId,
1135 &quadratureValueData,
1136 distributedCPUVec<double> &nodalField);
1137
1138 /**
1139 *@brief Computes net magnetization from the difference of local spin densities
1140 */
1141 void
1144 &magQuadValues);
1145
1146 /**
1147 *@brief normalize the input electron density
1148 */
1149 void
1151
1152 /**
1153 *@brief normalize input mag electron density to total magnetization
1154 *for use in constraint magnetization case (only for initial guess)
1155 */
1156 void
1158
1159
1160 /**
1161 *@brief normalize the output total electron density in each scf
1162 */
1163 void
1165
1166 /**
1167 *@brief normalize the electron density
1168 */
1169 void
1171
1172 /**
1173 *@brief Computes output electron-density from wavefunctions
1174 */
1175 void
1176 compute_rhoOut(const bool isGroundState = false);
1177
1178 /**
1179 *@brief Mixing schemes for mixing electron-density
1180 */
1181
1182 void
1184#ifdef DFTFE_WITH_DEVICE
1185 kerkerSolverProblemDeviceWrapperClass
1186 &kerkerPreconditionedResidualSolverProblemDevice,
1187 linearSolverCGDevice &CGSolverDevice,
1188#endif
1190 &kerkerPreconditionedResidualSolverProblem,
1191 dealiiLinearSolver &CGSolver,
1192 distributedCPUVec<double> &residualRho,
1193 distributedCPUVec<double> &preCondTotalDensityResidualVector);
1194
1195 double
1197
1198 double
1200 /**
1201 *@brief Computes Fermi-energy obtained by imposing separate constraints on the number of spin-up and spin-down electrons
1202 */
1203 void
1205 const std::vector<std::vector<double>> &eigenValuesInput);
1206
1207
1208 /**
1209 *@brief Find spin-up and spin-down channel HOMO eigenvalues
1210 */
1211 void
1213 const std::vector<std::vector<double>> &eigenValuesInput);
1214
1215
1216 /**
1217 *@brief compute density of states and local density of states
1218 */
1219 void
1220 compute_tdos(const std::vector<std::vector<double>> &eigenValuesInput,
1221 const std::string &fileName);
1222
1223 void
1224 compute_ldos(const std::vector<std::vector<double>> &eigenValuesInput,
1225 const std::string &fileName);
1226
1227 /**
1228 *@brief compute localization length
1229 */
1230 void
1231 compute_localizationLength(const std::string &locLengthFileName);
1232
1233 /**
1234 *@brief write electron density solution fields
1235 */
1236 void
1238
1239 /**
1240 *@brief write the KS eigen values for given BZ sampling/path
1241 */
1242 void
1244
1245 /**
1246 *@brief Computes the volume of the domain
1247 */
1248 double
1249 computeVolume(const dealii::DoFHandler<3> &_dofHandler);
1250
1251 /**
1252 *@brief Deforms the domain by the given deformation gradient and reinitializes the
1253 * dftClass datastructures.
1254 */
1255 void
1256 deformDomain(const dealii::Tensor<2, 3, double> &deformationGradient,
1257 const bool vselfPerturbationUpdateForStress = false,
1258 const bool useSingleAtomSolutionsOverride = false,
1259 const bool print = true);
1260
1261 /**
1262 *@brief Computes inner Product and Y = alpha*X + Y for complex vectors used during
1263 * periodic boundary conditions
1264 */
1265
1266#ifdef USE_COMPLEX
1267 std::complex<double>
1269
1270 void
1271 alphaTimesXPlusY(std::complex<double> alpha,
1274
1275#endif
1276 /**
1277 *@brief Sets dirichlet boundary conditions for total potential constraints on
1278 * non-periodic boundary (boundary id==0). Currently setting homogeneous bc
1279 *
1280 */
1281 void
1283
1284
1285 void
1287 const std::vector<
1289 &densityQuadValues,
1290 const std::vector<
1292 &gradDensityQuadValues,
1293 const std::vector<
1295 &tauQuadValues,
1296 const std::map<dealii::CellId, std::vector<double>> &rhoCore,
1297 const std::map<dealii::CellId, std::vector<double>> &gradRhoCore,
1299 &eigenVectorsFlattenedMemSpace,
1300 const std::vector<std::vector<double>> &eigenValues,
1301 const double fermiEnergy_,
1302 const double fermiEnergyUp_,
1303 const double fermiEnergyDown_,
1304 std::shared_ptr<AuxDensityMatrix<memorySpace>> auxDensityMatrixXCPtr);
1305
1306 std::shared_ptr<excManager<memorySpace>> d_excManagerPtr;
1308
1309 /**
1310 * stores required data for Kohn-Sham problem
1311 */
1314 std::set<dftfe::uInt> atomTypes;
1315
1316 /// FIXME: eventually it should be a map of atomic number to struct-
1317 /// {valence number, mesh input etc}
1318 std::map<dftfe::uInt, dftfe::uInt> d_atomTypeAtributes;
1319
1320 /// FIXME: remove atom type atributes from atomLocations
1321 std::vector<std::vector<double>> atomLocations, atomLocationsFractional,
1323 std::vector<std::vector<double>> d_atomLocationsInterestPseudopotential;
1324 std::map<dftfe::uInt, dftfe::uInt>
1326 std::vector<std::vector<double>> d_atomLocationsAutoMesh;
1327 std::vector<std::vector<double>> d_imagePositionsAutoMesh;
1328
1329 /// Gaussian displacements of atoms read from file
1330 std::vector<dealii::Tensor<1, 3, double>> d_atomsDisplacementsGaussianRead;
1331
1332 ///
1334
1335 ///
1337
1339
1340 /// Gaussian generator parameter for force computation and Gaussian
1341 /// deformation of atoms and FEM mesh Gaussian generator: Gamma(r)=
1342 /// exp(-(r/d_gaussianConstant)^2) Stored for all domain atoms
1343 std::vector<double> d_gaussianConstantsForce;
1344
1345 /// Gaussian constants for automesh mesh movement stored for all domain
1346 /// atoms
1347 std::vector<double> d_gaussianConstantsAutoMesh;
1348
1349 /// composite generator flat top widths for all domain atoms
1350 std::vector<double> d_generatorFlatTopWidths;
1351
1352 /// flat top widths for all domain atoms in case of automesh mesh movement
1353 /// composite gaussian
1354 std::vector<double> d_flatTopWidthsAutoMeshMove;
1355
1356 /// smeared charge widths for all domain atoms
1357 std::vector<double> d_smearedChargeWidths;
1358
1359 /// smeared charge normalization scaling for all domain atoms
1360 std::vector<double> d_smearedChargeScaling;
1361
1362 /// nearest atom ids for all domain atoms
1363 std::vector<dftfe::uInt> d_nearestAtomIds;
1364
1365 /// nearest atom distances for all domain atoms
1366 std::vector<double> d_nearestAtomDistances;
1367
1368 ///
1370
1371 /// vector of lendth number of periodic image charges with corresponding
1372 /// master chargeIds
1373 std::vector<dftfe::Int> d_imageIds;
1374 // std::vector<dftfe::Int> d_imageIdsAutoMesh;
1375
1376
1377 /// vector of length number of periodic image charges with corresponding
1378 /// charge values
1379 std::vector<double> d_imageCharges;
1380
1381 /// vector of length number of periodic image charges with corresponding
1382 /// positions in cartesian coordinates
1383 std::vector<std::vector<double>> d_imagePositions;
1384
1385 /// globalChargeId to ImageChargeId Map
1386 std::vector<std::vector<dftfe::Int>> d_globalChargeIdToImageIdMap;
1387
1388 /// vector of lendth number of periodic image charges with corresponding
1389 /// master chargeIds , generated with a truncated pspCutoff
1390 std::vector<dftfe::Int> d_imageIdsTrunc;
1391
1392 /// vector of length number of periodic image charges with corresponding
1393 /// charge values , generated with a truncated pspCutoff
1394 std::vector<double> d_imageChargesTrunc;
1395
1396 /// vector of length number of periodic image charges with corresponding
1397 /// positions in cartesian coordinates, generated with a truncated pspCutOff
1398 std::vector<std::vector<double>> d_imagePositionsTrunc;
1399
1400 /// globalChargeId to ImageChargeId Map generated with a truncated pspCutOff
1401 std::vector<std::vector<dftfe::Int>> d_globalChargeIdToImageIdMapTrunc;
1402
1403 /// distance from the domain till which periodic images will be considered
1404 double d_pspCutOff = 15.0;
1405
1406 /// distance from the domain till which periodic images will be considered
1407 const double d_pspCutOffTrunc = 15.0;
1408
1409 /// cut-off distance from atom till which non-local projectors are
1410 /// non-trivial
1411 double d_nlPSPCutOff = 8.0;
1412
1413 /// non-intersecting smeared charges of all atoms at quad points
1414 std::map<dealii::CellId, std::vector<double>> d_bQuadValuesAllAtoms;
1415
1416 /// non-intersecting smeared charge gradients of all atoms at quad points
1417 std::map<dealii::CellId, std::vector<double>> d_gradbQuadValuesAllAtoms;
1418
1419 /// non-intersecting smeared charges atom ids of all atoms at quad points
1420 std::map<dealii::CellId, std::vector<dftfe::Int>> d_bQuadAtomIdsAllAtoms;
1421
1422 /// non-intersecting smeared charges atom ids of all atoms (with image atom
1423 /// ids separately accounted) at quad points
1424 std::map<dealii::CellId, std::vector<dftfe::Int>>
1426
1427 /// map of cell and non-trivial global atom ids (no images) for smeared
1428 /// charges for each bin
1429 std::map<dealii::CellId, std::vector<dftfe::uInt>> d_bCellNonTrivialAtomIds;
1430
1431 /// map of cell and non-trivial global atom ids (no images) for smeared
1432 /// charge for each bin
1433 std::vector<std::map<dealii::CellId, std::vector<dftfe::uInt>>>
1435
1436 /// map of cell and non-trivial global atom and image ids for smeared
1437 /// charges for each bin
1438 std::map<dealii::CellId, std::vector<dftfe::uInt>>
1440
1441 /// map of cell and non-trivial global atom and image ids for smeared charge
1442 /// for each bin
1443 std::vector<std::map<dealii::CellId, std::vector<dftfe::uInt>>>
1445
1446 /// minimum smeared charge width
1447 const double d_smearedChargeWidthMin = 0.4;
1448
1449 std::vector<orbital> waveFunctionsVector;
1450 std::map<
1452 std::map<dftfe::uInt, std::map<dftfe::uInt, alglib::spline1dinterpolant>>>
1454 std::map<dftfe::uInt, std::map<dftfe::uInt, std::map<dftfe::uInt, double>>>
1456
1457 /**
1458 * meshGenerator based object
1459 */
1461
1464
1465
1466 /// affine transformation object
1468
1469 /// meshMovementGaussianClass object
1471
1472 std::vector<dealii::Tensor<1, 3, double>>
1474 std::vector<dealii::Point<3>> d_controlPointLocationsCurrentMove;
1475
1476 /// volume of the domain
1478
1479 /// init wfc trunctation radius
1481
1482 /**
1483 * dealii based FE data structres
1484 */
1485 dealii::FESystem<3> FE, FEEigen;
1511 dealii::MatrixFree<3, double> matrix_free_data, d_matrixFreeDataPRefined;
1512 std::shared_ptr<
1514 double,
1517 std::shared_ptr<
1518 dftfe::basis::
1519 FEBasisOperations<double, double, dftfe::utils::MemorySpace::HOST>>
1521#if defined(DFTFE_WITH_DEVICE)
1522 std::shared_ptr<
1524 double,
1526 d_basisOperationsPtrDevice;
1527 std::shared_ptr<
1528 dftfe::basis::
1529 FEBasisOperations<double, double, dftfe::utils::MemorySpace::DEVICE>>
1530 d_basisOperationsPtrElectroDevice;
1531#endif
1532
1533 std::shared_ptr<
1536
1537 std::shared_ptr<dftfe::oncvClass<dataTypes::number, memorySpace>>
1539
1540 std::shared_ptr<
1543
1544 std::shared_ptr<
1545#if defined(DFTFE_WITH_DEVICE)
1547#else
1549#endif
1551
1552 std::map<dealii::types::global_dof_index, dealii::Point<3>> d_supportPoints,
1554 std::vector<const dealii::AffineConstraints<double> *> d_constraintsVector;
1555 std::vector<const dealii::AffineConstraints<double> *>
1557
1558 /**
1559 * parallel objects
1560 */
1561 const MPI_Comm mpi_communicator;
1562#if defined(DFTFE_WITH_DEVICE)
1563 utils::DeviceCCLWrapper *d_devicecclMpiCommDomainPtr;
1564#endif
1565 const MPI_Comm d_mpiCommParent;
1566 const MPI_Comm interpoolcomm;
1567 const MPI_Comm interBandGroupComm;
1573 std::vector<dealii::types::global_dof_index> local_dof_indicesReal,
1575 std::vector<dealii::types::global_dof_index> localProc_dof_indicesReal,
1577 std::vector<bool> selectedDofsHanging;
1578
1580 std::shared_ptr<dftfe::groupSymmetryClass> groupSymmetryPtr;
1581
1583
1585
1587#ifdef DFTFE_WITH_DEVICE
1588 poissonSolverProblemDeviceWrapperClass d_phiTotalSolverProblemDevice;
1589
1590 poissonSolverProblemDeviceWrapperClass d_phiPrimeSolverProblemDevice;
1591#endif
1592
1594
1596
1597 const std::string d_dftfeScratchFolderName;
1598
1599 /**
1600 * chebyshev subspace iteration solver objects
1601 *
1602 */
1604#ifdef DFTFE_WITH_DEVICE
1605 chebyshevOrthogonalizedSubspaceIterationSolverDevice
1606 d_subspaceIterationSolverDevice;
1607#endif
1608
1609 /**
1610 * constraint Matrices
1611 */
1612
1613 /**
1614 *object which is used to store dealii constraint matrix information
1615 *using STL vectors. The relevant dealii constraint matrix
1616 *has hanging node constraints and periodic constraints(for periodic
1617 *problems) used in eigen solve
1618 */
1621
1622
1623 /**
1624 *object which is used to store dealii constraint matrix information
1625 *using STL vectors. The relevant dealii constraint matrix
1626 *has hanging node constraints used in Poisson problem solution
1627 *
1628 */
1631
1632
1633#ifdef DFTFE_WITH_DEVICE
1635 d_constraintsNoneDataInfoDevice;
1636#endif
1637
1638
1639 dealii::AffineConstraints<double> constraintsNone, constraintsNoneEigen,
1641
1642 dealii::AffineConstraints<double> d_constraintsForTotalPotentialElectro;
1643
1644 dealii::AffineConstraints<double> d_constraintsForPhiPrimeElectro;
1645
1646 dealii::AffineConstraints<double> d_constraintsForHelmholtzRhoNodal;
1647
1648 dealii::AffineConstraints<double> d_constraintsPRefined;
1649
1650 dealii::AffineConstraints<double> d_constraintsPRefinedOnlyHanging;
1651
1652 dealii::AffineConstraints<double> d_constraintsRhoNodal;
1653
1654 dealii::AffineConstraints<double> d_constraintsRhoNodalOnlyHanging;
1655
1658
1659 /**
1660 * data storage for Kohn-Sham eigenvalues and partial occupancies
1661 */
1662 std::vector<std::vector<double>> eigenValues;
1663 std::vector<std::vector<double>> d_partialOccupancies;
1664
1665 /**
1666 * data storage for the occupancy of Kohn-Sham wavefunctions
1667 */
1668 std::vector<std::vector<double>> d_fracOccupancy;
1669
1670 std::vector<std::vector<double>> d_densityMatDerFermiEnergy;
1671
1672 /**
1673 * The indexing of d_eigenVectorsFlattenedHost and
1674 * d_eigenVectorsFlattenedDevice [kPoint * numSpinComponents *
1675 * numLocallyOwnedNodes * numWaveFunctions + iSpin * numLocallyOwnedNodes *
1676 * numWaveFunctions + iNode * numWaveFunctions + iWaveFunction]
1677 */
1681
1685
1686 /// device eigenvectors
1687#ifdef DFTFE_WITH_DEVICE
1690 d_eigenVectorsFlattenedDevice;
1693 d_eigenVectorsDensityMatrixPrimeFlattenedDevice;
1694#endif
1695
1696 /// parallel message stream
1697 dealii::ConditionalOStream pcout;
1698
1699 /// compute-time logger
1700 dealii::TimerOutput computing_timer;
1701 dealii::TimerOutput computingTimerStandard;
1702
1703 /// A plain global timer to track only the total elapsed time after every
1704 /// ground-state solve
1705 dealii::Timer d_globalTimer;
1706
1707 // dft related objects
1708 std::vector<
1712 std::vector<distributedCPUVec<double>> d_densityInNodalValues,
1714 std::vector<distributedCPUVec<double>> d_tauOutNodalValues;
1715 std::vector<
1718
1719 // std::map<dealii::CellId, std::vector<double>> d_phiInValues,
1720 // d_phiOutValues;
1726
1730
1731
1733
1734
1738
1739 std::shared_ptr<AuxDensityMatrix<memorySpace>> d_auxDensityMatrixXCInPtr;
1740 std::shared_ptr<AuxDensityMatrix<memorySpace>> d_auxDensityMatrixXCOutPtr;
1741
1742 // For multipole boundary conditions
1744 std::vector<double> d_dipole;
1745 std::vector<double> d_quadrupole;
1746 std::vector<double> d_smearedChargeMoments;
1748
1749
1750 /// for low rank jacobian inverse approximation
1751 std::deque<distributedCPUVec<double>> d_vcontainerVals;
1752 std::deque<distributedCPUVec<double>> d_fvcontainerVals;
1753 std::deque<distributedCPUVec<double>> d_vSpin0containerVals;
1754 std::deque<distributedCPUVec<double>> d_fvSpin0containerVals;
1755 std::deque<distributedCPUVec<double>> d_vSpin1containerVals;
1756 std::deque<distributedCPUVec<double>> d_fvSpin1containerVals;
1762 static constexpr double d_tikhonovRegularizationConstantLRD = 1.0e-6;
1763
1764 /// for xl-bomd
1765 std::map<dealii::CellId, std::vector<double>> d_rhoAtomsValues,
1767 std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
1770
1771 std::vector<
1775
1776 // storage for total electrostatic potential solution vector corresponding
1777 // to input scf electron density
1779
1780 // storage for total electrostatic potential solution vector corresponding
1781 // to output scf electron density
1783
1784 // storage for electrostatic potential Gateaux derivate corresponding
1785 // to electron number preserving electron-density peturbation (required for
1786 // LRDM)
1788
1789 // storage for sum of nuclear electrostatic potential
1791
1792 // storage of densities for xl-bomd
1793 std::deque<distributedCPUVec<double>> d_groundStateDensityHistory;
1794
1795 std::map<dealii::CellId, std::vector<double>> d_pseudoVLoc;
1796
1797 /// Internal data:: map for cell id to Vpseudo local of individual atoms.
1798 /// Only for atoms whose psp tail intersects the local domain.
1799 std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
1801
1802
1803 std::vector<std::vector<double>> d_localVselfs;
1804
1805 // nonlocal pseudopotential related objects used only for pseudopotential
1806 // calculation
1807 std::map<dealii::CellId, std::vector<double>> d_rhoCore;
1808
1809 std::map<dealii::CellId, std::vector<double>> d_gradRhoCore;
1810
1811 std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
1813
1814 std::map<dealii::CellId, std::vector<double>> d_hessianRhoCore;
1815
1816 std::map<dftfe::uInt, std::map<dealii::CellId, std::vector<double>>>
1818
1819
1820
1821 /// map of atom node number and atomic weight
1822 std::map<dealii::types::global_dof_index, double> d_atomNodeIdToChargeMap;
1823
1824 /// vselfBinsManager object
1826
1827 /// Gateaux derivative of vself field with respect to affine strain tensor
1828 /// components using central finite difference. This is used for cell stress
1829 /// computation
1830 std::vector<distributedCPUVec<double>> d_vselfFieldGateauxDerStrainFDBins;
1831
1832 /// Compute Gateaux derivative of vself field in bins with respect to affine
1833 /// strain tensor components
1834 void
1836
1837 /// dftParameters object
1839
1840 /// kPoint cartesian coordinates
1841 std::vector<double> d_kPointCoordinates;
1842
1843 /// k point crystal coordinates
1844 std::vector<double> d_kPointCoordinatesFrac;
1845
1846 /// k point weights
1847 std::vector<double> d_kPointWeights;
1848
1849 /// closest tria vertex
1850 std::vector<dealii::Point<3>> d_closestTriaVertexToAtomsLocation;
1851 std::vector<dealii::Tensor<1, 3, double>> d_dispClosestTriaVerticesToAtoms;
1852
1853 /// global k index of lower bound of the local k point set
1855 /**
1856 * Recomputes the k point cartesian coordinates from the crystal k point
1857 * coordinates and the current lattice vectors, which can change in each
1858 * ground state solve dutring cell optimization.
1859 */
1860 void
1862
1863 /// fermi energy
1865
1867
1869
1870 /// entropic energy
1872
1873 // chebyshev filter variables and functions
1874 // dftfe::Int numPass ; // number of filter passes
1875
1876 std::vector<double> a0;
1877 std::vector<double> bLow;
1878
1879 /// stores flag for first ever call to chebyshev filtering for a given FEM
1880 /// mesh vector for each k point and spin
1881 std::vector<bool> d_isFirstFilteringCall;
1882
1884
1886
1888
1889
1890 /**
1891 * @ nscf variables
1892 */
1894 void
1896 KohnShamDFTBaseOperator<memorySpace> &kohnShamDFTEigenOperator,
1897 chebyshevOrthogonalizedSubspaceIterationSolver &subspaceIterationSolver);
1898
1899 /**
1900 * @brief compute the maximum of the residual norm of the highest occupied state among all k points
1901 */
1902 double
1904 const std::vector<std::vector<double>>
1905 &residualNormWaveFunctionsAllkPoints,
1906 const std::vector<std::vector<double>> &eigenValuesAllkPoints,
1907 const double _fermiEnergy,
1908 std::vector<double> &maxResidualsAllkPoints);
1909
1910
1911 /**
1912 * @brief compute the maximum of the residual norm of the highest state of interest among all k points
1913 */
1914 double
1916 const std::vector<std::vector<double>>
1917 &residualNormWaveFunctionsAllkPoints,
1918 const std::vector<std::vector<double>> &eigenValuesAllkPoints,
1919 const dftfe::uInt highestState,
1920 std::vector<double> &maxResidualsAllkPoints);
1921
1922
1923
1924#ifdef DFTFE_WITH_DEVICE
1925 void
1927 const dftfe::uInt s,
1928 const dftfe::uInt kPointIndex,
1930 &kohnShamDFTEigenOperator,
1931 elpaScalaManager &elpaScala,
1932 chebyshevOrthogonalizedSubspaceIterationSolverDevice
1933 &subspaceIterationSolverDevice);
1934
1935#endif
1936
1937 void
1939 const dftfe::uInt s,
1940 const dftfe::uInt kPointIndex,
1942 &kohnShamDFTEigenOperator,
1943 elpaScalaManager &elpaScala);
1944
1946 std::shared_ptr<hubbard<dataTypes::number, memorySpace>> d_hubbardClassPtr;
1948 };
1949
1950} // namespace dftfe
1951
1952#endif
Definition AuxDensityMatrix.h:40
Definition KohnShamDFTBaseOperator.h:36
This class performs the anderson mixing in a variable agnostic way This class takes can take differen...
Definition mixingClass.h:50
Definition atomCenteredPostProcessing.h:30
Definition FEBasisOperations.h:85
Concrete class implementing Chebyshev filtered orthogonalized subspace iteration solver.
Definition chebyshevOrthogonalizedSubspaceIterationSolver.h:38
dealii linear solver class wrapper
Definition dealiiLinearSolver.h:32
abstract base class for dft
Definition dftBase.h:34
dftfe::uInt getElectroQuadratureRhsId() const
void applyHomogeneousDirichletBC(const dealii::DoFHandler< 3 > &_dofHandler, const dealii::AffineConstraints< double > &onlyHangingNodeConstraints, dealii::AffineConstraints< double > &constraintMatrix)
Sets homegeneous dirichlet boundary conditions for total potential constraints on non-periodic bounda...
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_phiOutQuadValues
Definition dft.h:1722
void updateAtomPositionsAndMoveMesh(const std::vector< dealii::Tensor< 1, 3, double > > &globalAtomsDisplacements, const double maxJacobianRatioFactor=1.25, const bool useSingleAtomSolutionsOverride=false)
Updates atom positions, remeshes/moves mesh and calls appropriate reinits.
std::vector< std::vector< double > > d_atomLocationsAutoMesh
Definition dft.h:1326
void compute_fermienergy_purestate(const std::vector< std::vector< double > > &eigenValuesInput, const double numElectronsInput)
find HOMO eigenvalue for pure state
dftfe::uInt d_phiPrimeDofHandlerIndexElectro
Definition dft.h:1502
std::shared_ptr< excManager< memorySpace > > d_excManagerPtr
Definition dft.h:1306
dftfe::uInt d_feOrderPlusOneQuadratureId
Definition dft.h:1498
dealii::AffineConstraints< double > d_constraintsForPhiPrimeElectro
Definition dft.h:1644
std::vector< std::vector< double > > d_meshSizes
Definition dft.h:1322
const std::vector< std::vector< double > > & getCell() const
Gets the current cell lattice vectors.
dealii::DoFHandler< 3 > d_dofHandlerRhoNodal
Definition dft.h:1487
std::vector< std::vector< dftfe::Int > > d_globalChargeIdToImageIdMapTrunc
globalChargeId to ImageChargeId Map generated with a truncated pspCutOff
Definition dft.h:1401
std::vector< double > d_kPointWeights
k point weights
Definition dft.h:1847
std::map< dealii::CellId, std::vector< double > > d_rhoAtomsValues
for xl-bomd
Definition dft.h:1765
void computeOutputDensityDirectionalDerivative(distributedCPUVec< double > &v, distributedCPUVec< double > &vSpin0, distributedCPUVec< double > &vSpin1, distributedCPUVec< double > &fv, distributedCPUVec< double > &fvSpin0, distributedCPUVec< double > &fvSpin1)
std::map< dealii::CellId, std::vector< dftfe::uInt > > d_bCellNonTrivialAtomImageIds
Definition dft.h:1439
std::vector< orbital > waveFunctionsVector
Definition dft.h:1449
void kohnShamEigenSpaceFirstOrderDensityMatResponse(const dftfe::uInt s, const dftfe::uInt kPointIndex, KohnShamDFTBaseOperator< dftfe::utils::MemorySpace::HOST > &kohnShamDFTEigenOperator, elpaScalaManager &elpaScala)
bool scfConverged
Definition dft.h:1893
std::vector< distributedCPUVec< double > > d_densityInNodalValues
Definition dft.h:1712
void computeRhoNodalFirstOrderResponseFromPSIAndPSIPrime(distributedCPUVec< double > &fv, distributedCPUVec< double > &fvSpin0, distributedCPUVec< double > &fvSpin1)
std::vector< std::vector< double > > d_localVselfs
Definition dft.h:1803
std::vector< const dealii::AffineConstraints< double > * > d_constraintsVectorElectro
Definition dft.h:1556
void saveTriaInfoAndRhoNodalData()
save triangulation information and rho quadrature data to checkpoint file for restarts
dealii::AffineConstraints< double > d_constraintsPRefinedOnlyHanging
Definition dft.h:1650
const std::vector< std::vector< double > > & getLocalVselfs() const
std::vector< std::vector< double > > d_imagePositionsTrunc
Definition dft.h:1398
std::vector< double > d_upperBoundUnwantedSpectrumValues
Definition dft.h:1883
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > d_BLASWrapperPtr
Definition dft.h:1550
const MPI_Comm & getMPIParent() const override
std::vector< dealii::Tensor< 1, 3, double > > d_gaussianMovementAtomsNetDisplacements
Definition dft.h:1473
distributedCPUVec< double > d_residualPredicted
Definition dft.h:1757
dftfe::uInt d_phiTotDofHandlerIndexElectro
Definition dft.h:1501
std::deque< distributedCPUVec< double > > d_fvcontainerVals
Definition dft.h:1752
dealii::AffineConstraints< double > constraintsNoneEigen
Definition dft.h:1639
double d_pspCutOff
distance from the domain till which periodic images will be considered
Definition dft.h:1404
void compute_localizationLength(const std::string &locLengthFileName)
compute localization length
dealii::IndexSet d_locallyRelevantDofsRhoNodal
Definition dft.h:1572
void generateImageCharges(const double pspCutOff, std::vector< dftfe::Int > &imageIds, std::vector< double > &imageCharges, std::vector< std::vector< double > > &imagePositions)
creates datastructures related to periodic image charges
dftfe::uInt d_baseDofHandlerIndexElectro
Definition dft.h:1493
std::vector< double > d_nearestAtomDistances
nearest atom distances for all domain atoms
Definition dft.h:1366
bool isHubbardCorrectionsUsed()
Function to check if hubbard corrections is being used.
dealii::IndexSet locally_relevant_dofs
Definition dft.h:1571
const dealii::MatrixFree< 3, double > & getMatrixFreeData() const
Get matrix free data object.
void updatePRefinedConstraints()
void initHubbardOperator()
Checks if the Exc functional requires Hubbard correction and sets up the Hubbard class if required.
void moveMeshToAtoms(dealii::Triangulation< 3, 3 > &triangulationMove, dealii::Triangulation< 3, 3 > &triangulationSerial, bool reuseFlag=false, bool moveSubdivided=false)
moves the triangulation vertices using Gaussians such that the all atoms are on triangulation vertice...
void determineOrbitalFilling()
const MPI_Comm & getMPIDomain() const override
dftfe::uInt getSmearedChargeQuadratureIdElectro()
std::set< dftfe::uInt > atomTypes
Definition dft.h:1314
forceClass< memorySpace > * forcePtr
Definition dft.h:1579
std::deque< distributedCPUVec< double > > d_vcontainerVals
for low rank jacobian inverse approximation
Definition dft.h:1751
std::shared_ptr< dftfe::groupSymmetryClass > groupSymmetryPtr
Definition dft.h:1580
void noRemeshRhoDataInit()
double numElectronsUp
Definition dft.h:1313
std::shared_ptr< dftfe::atomCenteredOrbitalsPostProcessing< dataTypes::number, memorySpace > > d_atomCenteredOrbitalsPostProcessingPtr
Definition dft.h:1542
double d_entropicEnergy
entropic energy
Definition dft.h:1871
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_gradPhiInQuadValues
Definition dft.h:1724
void aposterioriMeshGenerate()
double numElectronsDown
Definition dft.h:1313
const double d_smearedChargeWidthMin
minimum smeared charge width
Definition dft.h:1447
dispersionCorrection d_dispersionCorr
Definition dft.h:1307
void initializeKohnShamDFTOperator(const bool initializeCublas=true)
void computeVselfFieldGateauxDerFD()
const std::string d_dftfeScratchFolderName
Definition dft.h:1597
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_gradDensityTotalInValuesLpspQuad
Definition dft.h:1737
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_gradPhiOutQuadValues
Definition dft.h:1724
std::vector< double > d_smearedChargeMoments
Definition dft.h:1746
void kohnShamEigenSpaceCompute(const dftfe::uInt s, const dftfe::uInt kPointIndex, KohnShamDFTBaseOperator< dftfe::utils::MemorySpace::HOST > &kohnShamDFTEigenOperator, elpaScalaManager &elpaScala, chebyshevOrthogonalizedSubspaceIterationSolver &subspaceIterationSolver, std::vector< double > &residualNormWaveFunctions, const bool computeResidual, const bool useMixedPrec=false, const bool isFirstScf=false)
Function that computes the Eigen space for the Kohn Sham operator.
dealii::AffineConstraints< double > d_constraintsForTotalPotentialElectro
Definition dft.h:1642
std::shared_ptr< AuxDensityMatrix< memorySpace > > d_auxDensityMatrixXCInPtr
Definition dft.h:1739
void writeDomainAndAtomCoordinates(const std::string Path) const
writes the current domain bounding vectors and atom coordinates to files for structural optimization ...
double d_freeEnergyInitial
Definition dft.h:1866
void createMasterChargeIdToImageIdMaps(const double pspCutOff, const std::vector< dftfe::Int > &imageIds, const std::vector< std::vector< double > > &imagePositions, std::vector< std::vector< dftfe::Int > > &globalChargeIdToImageIdMap)
double totalCharge(const dealii::DoFHandler< 3 > &dofHandlerOfField, const std::map< dealii::CellId, std::vector< double > > *rhoQuadValues)
std::vector< double > d_smearedChargeWidths
smeared charge widths for all domain atoms
Definition dft.h:1357
dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > constraintsNoneEigenDataInfo
Definition dft.h:1620
double computeMaximumHighestOccupiedStateResidualNorm(const std::vector< std::vector< double > > &residualNormWaveFunctionsAllkPoints, const std::vector< std::vector< double > > &eigenValuesAllkPoints, const dftfe::uInt highestState, std::vector< double > &maxResidualsAllkPoints)
compute the maximum of the residual norm of the highest state of interest among all k points
dealii::IndexSet locally_owned_dofsEigen
Definition dft.h:1570
std::vector< double > d_gaussianConstantsAutoMesh
Definition dft.h:1347
dftParameters * d_dftParamsPtr
dftParameters object
Definition dft.h:1838
double totalCharge(const dealii::MatrixFree< 3, double > &matrixFreeDataObject, const distributedCPUVec< double > &rhoNodalField)
void compute_rhoOut(const bool isGroundState=false)
Computes output electron-density from wavefunctions.
std::vector< std::vector< dftfe::Int > > d_globalChargeIdToImageIdMap
globalChargeId to ImageChargeId Map
Definition dft.h:1386
std::vector< double > d_flatTopWidthsAutoMeshMove
Definition dft.h:1354
void run()
FIXME: legacy call, move to main.cc.
std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > d_gradRhoAtomsValuesSeparate
Definition dft.h:1768
dealii::TimerOutput computing_timer
compute-time logger
Definition dft.h:1700
distributedCPUVec< double > d_preCondTotalDensityResidualVector
Definition dft.h:1728
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > getBLASWrapperHost()
const distributedCPUVec< double > & getRhoNodalSplitOut() const
void writeBands()
write the KS eigen values for given BZ sampling/path
void projectPreviousGroundStateRho()
project ground state electron density from previous mesh into the new mesh to be used as initial gues...
distributedCPUVec< double > d_rhoOutNodalValuesSplit
Definition dft.h:1727
void loadDensityFromQuadratureValues()
std::map< dealii::CellId, std::vector< double > > d_bQuadValuesAllAtoms
non-intersecting smeared charges of all atoms at quad points
Definition dft.h:1414
double computeMaximumHighestOccupiedStateResidualNorm(const std::vector< std::vector< double > > &residualNormWaveFunctionsAllkPoints, const std::vector< std::vector< double > > &eigenValuesAllkPoints, const double _fermiEnergy, std::vector< double > &maxResidualsAllkPoints)
compute the maximum of the residual norm of the highest occupied state among all k points
void writeMesh()
Writes inital density and mesh to file.
std::map< dealii::CellId, std::vector< double > > & getBQuadValuesAllAtoms()
non-intersecting smeared charges of all atoms at quad points
const std::vector< dealii::types::global_dof_index > & getLocalDofIndicesImag() const
Get local dofs global indices imag.
distributedCPUVec< double > d_rhoOutNodalValuesDistributed
Definition dft.h:1729
std::shared_ptr< AuxDensityMatrix< memorySpace > > d_auxDensityMatrixXCOutPtr
Definition dft.h:1740
std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > d_hessianRhoAtomsValuesSeparate
Definition dft.h:1769
dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > constraintsNoneDataInfo
Definition dft.h:1630
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > & getDensityOutValues()
distributedCPUVec< double > d_rhoInNodalValuesRead
Definition dft.h:1727
std::map< dftfe::uInt, dftfe::uInt > d_atomTypeAtributes
Definition dft.h:1318
void writeMesh(std::string meshFileName)
void resetRhoNodalIn(distributedCPUVec< double > &OutDensity)
dealii::IndexSet locally_owned_dofs
Definition dft.h:1570
std::vector< dealii::Tensor< 1, 3, double > > d_dispClosestTriaVerticesToAtoms
Definition dft.h:1851
std::map< dftfe::uInt, std::map< dftfe::uInt, std::map< dftfe::uInt, double > > > outerValues
Definition dft.h:1455
std::deque< distributedCPUVec< double > > d_fvSpin1containerVals
Definition dft.h:1756
std::shared_ptr< dftfe::oncvClass< dataTypes::number, memorySpace > > d_oncvClassPtr
Definition dft.h:1538
const MPI_Comm & getMPIInterBand() const override
const distributedCPUVec< double > & getRhoNodalOut() const
std::map< dealii::CellId, std::vector< dftfe::Int > > d_bQuadAtomIdsAllAtomsImages
Definition dft.h:1425
double computeAndPrintKE(dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &kineticEnergyDensityValues)
Computes the kinetic energy.
double d_autoMeshMaxJacobianRatio
Definition dft.h:1462
std::map< dealii::CellId, std::vector< double > > d_hessianRhoCore
Definition dft.h:1814
elpaScalaManager * d_elpaScala
Definition dft.h:1582
void totalMagnetization(const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &magQuadValues)
Computes net magnetization from the difference of local spin densities.
double d_monopole
Definition dft.h:1743
void initAtomicRho()
dftfe::uInt d_kerkerAXQuadratureIdElectro
Definition dft.h:1504
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_densityInQuadValues
Definition dft.h:1710
std::map< dealii::CellId, std::vector< double > > d_gradRhoCore
Definition dft.h:1809
void createpRefinedDofHandler(dealii::parallel::distributed::Triangulation< 3 > &triangulation)
double numElectrons
Definition dft.h:1313
double computeResidualQuadData(const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &outValues, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &inValues, dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &residualValues, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &JxW, const bool computeNorm)
Copies the residual residualValues=outValues-inValues.
dataTypes::number computeTraceXtHX(dftfe::uInt numberWaveFunctionsEstimate)
bool d_smearedChargeMomentsComputed
Definition dft.h:1747
distributedCPUVec< double > d_rhoNodalFieldRefined
Definition dft.h:1728
bool d_tolReached
Definition dft.h:1761
chebyshevOrthogonalizedSubspaceIterationSolver d_subspaceIterationSolver
Definition dft.h:1603
const MPI_Comm mpi_communicator
Definition dft.h:1561
std::vector< dealii::types::global_dof_index > local_dof_indicesImag
Definition dft.h:1574
std::vector< std::vector< double > > d_domainBoundingVectors
Definition dft.h:1322
dftfe::utils::MemoryStorage< dataTypes::number, dftfe::utils::MemorySpace::HOST > d_eigenVectorsDensityMatrixPrimeHost
Definition dft.h:1684
std::vector< double > d_imageCharges
Definition dft.h:1379
void l2ProjectionQuadToNodal(const std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > &basisOperationsPtr, const dealii::AffineConstraints< double > &constraintMatrix, const dftfe::uInt dofHandlerId, const dftfe::uInt quadratureId, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &quadratureValueData, distributedCPUVec< double > &nodalField)
l2 projection
const dftfe::utils::MemoryStorage< dataTypes::number, dftfe::utils::MemorySpace::HOST > & getEigenVectorsHost() const
Get reference the host eigen vectors.
dftfe::uInt getDensityQuadratureId()
dealii::IndexSet d_locallyRelevantDofsPRefined
Definition dft.h:1572
std::deque< distributedCPUVec< double > > d_vSpin1containerVals
Definition dft.h:1755
std::map< dealii::CellId, std::vector< dftfe::Int > > d_bQuadAtomIdsAllAtoms
non-intersecting smeared charges atom ids of all atoms at quad points
Definition dft.h:1420
void computeRhoNodalFromPSI()
computes density nodal data from wavefunctions
dftfe::uInt d_nOMPThreads
Definition dft.h:1510
distributedCPUVec< double > d_magInNodalValuesRead
Definition dft.h:1732
std::vector< dftfe::Int > d_imageIds
Definition dft.h:1373
std::map< dealii::CellId, std::vector< double > > d_hessianRhoAtomsValues
Definition dft.h:1766
dealii::DoFHandler< 3 > dofHandler
Definition dft.h:1486
dealii::ConditionalOStream pcout
device eigenvectors
Definition dft.h:1697
std::vector< dftfe::uInt > d_nearestAtomIds
nearest atom ids for all domain atoms
Definition dft.h:1363
dftfe::uInt d_gllQuadratureId
Definition dft.h:1500
std::vector< std::vector< double > > d_densityMatDerFermiEnergy
Definition dft.h:1670
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_densityOutQuadValues
Definition dft.h:1710
std::vector< dealii::Point< 3 > > d_controlPointLocationsCurrentMove
Definition dft.h:1474
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_tauResidualQuadValues
Definition dft.h:1717
std::vector< double > d_smearedChargeScaling
smeared charge normalization scaling for all domain atoms
Definition dft.h:1360
dftfe::uInt getElectroQuadratureAxId() const
std::map< dealii::CellId, std::vector< double > > d_gradbQuadValuesAllAtoms
non-intersecting smeared charge gradients of all atoms at quad points
Definition dft.h:1417
void compute_fermienergy_constraintMagnetization_purestate(const std::vector< std::vector< double > > &eigenValuesInput)
Find spin-up and spin-down channel HOMO eigenvalues.
std::map< dealii::types::global_dof_index, dealii::Point< 3 > > d_supportPoints
Definition dft.h:1552
double getInternalEnergy() const
std::vector< distributedCPUVec< double > > d_densityResidualNodalValues
Definition dft.h:1713
std::map< dealii::CellId, std::vector< double > > d_pseudoVLoc
Definition dft.h:1795
void setNumElectrons(dftfe::uInt inputNumElectrons)
void applyKerkerPreconditionerToTotalDensityResidual(kerkerSolverProblemWrapperClass &kerkerPreconditionedResidualSolverProblem, dealiiLinearSolver &CGSolver, distributedCPUVec< double > &residualRho, distributedCPUVec< double > &preCondTotalDensityResidualVector)
Mixing schemes for mixing electron-density.
void compute_fermienergy(const std::vector< std::vector< double > > &eigenValuesInput, const double numElectronsInput)
Computes Fermi-energy obtained by imposing constraint on the number of electrons.
dftfe::uInt d_autoMesh
Definition dft.h:1463
void loadQuadratureData(const std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > &basisOperationsPtr, const dftfe::uInt quadratureId, dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &quadratureValueData, const dftfe::uInt fieldDimension, const std::string &fieldName, const std::string &folderPath, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &interpoolcomm, const MPI_Comm &interBandGroupComm)
loads data from quad points of checkpoint file. Used for restart calculations, nscf and bands.
std::vector< bool > d_isFirstFilteringCall
Definition dft.h:1881
std::map< dealii::types::global_dof_index, dealii::Point< 3 > > d_supportPointsPRefined
Definition dft.h:1553
dealii::AffineConstraints< double > * getDensityConstraint()
std::vector< dftfe::Int > d_imageIdsTrunc
Definition dft.h:1390
const MPI_Comm interBandGroupComm
Definition dft.h:1567
const std::vector< std::vector< double > > & getImageAtomLocationsCart() const
Gets the current image atom Locations in cartesian form (origin at center of domain) from dftClass.
double d_wfcInitTruncation
init wfc trunctation radius
Definition dft.h:1480
dftfe::uInt d_densityQuadratureIdElectro
Definition dft.h:1508
dftClass(const MPI_Comm &mpiCommParent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &interpoolcomm, const MPI_Comm &interBandGroupComm, const std::string &scratchFolderName, dftParameters &dftParams)
dftClass constructor
std::vector< double > d_kPointCoordinatesFrac
k point crystal coordinates
Definition dft.h:1844
void applyPeriodicBCHigherOrderNodes()
Computes inner Product and Y = alpha*X + Y for complex vectors used during periodic boundary conditio...
double getCellVolume() const
Gets the current cell volume.
std::vector< double > d_quadrupole
Definition dft.h:1745
double rhofieldInnerProduct(const dealii::MatrixFree< 3, double > &matrixFreeDataObject, const distributedCPUVec< double > &rhoNodalField1, const distributedCPUVec< double > &rhoNodalField2, const dftfe::uInt dofHandlerId, const dftfe::uInt quadratureId)
void reInitializeKohnShamDFTOperator()
void initUnmovedTriangulation(dealii::parallel::distributed::Triangulation< 3 > &triangulation)
dealii::AffineConstraints< double > d_noConstraints
Definition dft.h:1640
distributedCPUVec< double > d_phiExt
Definition dft.h:1790
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > getBasisOperationsHost()
std::vector< std::vector< double > > d_imagePositionsAutoMesh
Definition dft.h:1327
double fermiEnergy
fermi energy
Definition dft.h:1864
const dealii::MatrixFree< 3, double > & getMatrixFreeDataElectro() const
virtual void writeGSElectronDensity(const std::string Path) const
writes quadrature grid information and associated spin-up and spin-down electron-density for post-pro...
const dealii::AffineConstraints< double > * getConstraintsVectorElectro()
void compute_fermienergy_constraintMagnetization(const std::vector< std::vector< double > > &eigenValuesInput)
Computes Fermi-energy obtained by imposing separate constraints on the number of spin-up and spin-dow...
const MPI_Comm & getMPIInterPool() const override
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_tauInQuadValues
Definition dft.h:1717
const std::vector< dealii::types::global_dof_index > & getLocalDofIndicesReal() const
Get local dofs global indices real.
std::vector< distributedCPUVec< double > > d_tauOutNodalValues
Definition dft.h:1714
void initpRefinedObjects(const bool recomputeBasisData, const bool meshOnlyDeformed, const bool vselfPerturbationUpdateForStress=false)
dftfe::uInt d_binsStartDofHandlerIndexElectro
Definition dft.h:1506
std::vector< dealii::Tensor< 1, 3, double > > d_atomsDisplacementsGaussianRead
Gaussian displacements of atoms read from file.
Definition dft.h:1330
std::vector< double > bLow
Definition dft.h:1877
const MPI_Comm d_mpiCommParent
Definition dft.h:1565
std::vector< bool > selectedDofsHanging
Definition dft.h:1577
std::shared_ptr< hubbard< dataTypes::number, memorySpace > > getHubbardClassPtr()
Returns the shared ptr to hubbard class.
std::map< dealii::types::global_dof_index, dealii::Point< 3 > > d_supportPointsEigen
Definition dft.h:1553
std::vector< std::vector< double > > eigenValues
Definition dft.h:1662
void writeStructureEnergyForcesDataPostProcess(const std::string Path) const
writes atomistics data for subsequent post-processing. Related to WRITE STRUCTURE ENERGY FORCES DATA ...
const std::vector< dftfe::Int > & getImageAtomIDs() const
Gets the current image atom ids from dftClass.
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > getBasisOperationsElectroHost()
std::vector< std::vector< double > > d_atomLocationsInterestPseudopotential
Definition dft.h:1323
distributedCPUVec< double > d_phiPrime
Definition dft.h:1787
dftfe::uInt getNumEigenValues() const
double lowrankApproxScfDielectricMatrixInv(const dftfe::uInt scfIter)
dealii::IndexSet locally_relevant_dofsEigen
Definition dft.h:1571
void computeRhoInitialGuessFromPSI(std::vector< std::vector< distributedCPUVec< double > > > eigenVectors)
dftfe::uInt d_forceDofHandlerIndex
Definition dft.h:1489
dftfe::uInt d_forceDofHandlerIndexElectro
Definition dft.h:1494
const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > & getEigenVectors() const
Get reference the memorySpace templated eigen vectors.
void compute_tdos(const std::vector< std::vector< double > > &eigenValuesInput, const std::string &fileName)
compute density of states and local density of states
std::map< dftfe::uInt, std::map< dftfe::uInt, std::map< dftfe::uInt, alglib::spline1dinterpolant > > > radValues
Definition dft.h:1453
double getFermiEnergy() const
Get the value of fermi energy.
dftfe::uInt d_nonAtomicWaveFunctions
Number of random wavefunctions.
Definition dft.h:297
dftfe::uInt d_rankCurrentLRD
Definition dft.h:1758
dftfe::uInt numLevels
Definition dft.h:1312
void writeDomainAndAtomCoordinates()
writes the current domain bounding vectors and atom coordinates to files, which are required for geom...
double d_freeEnergy
Definition dft.h:1868
dealii::DoFHandler< 3 > d_dofHandlerPRefined
Definition dft.h:1486
void set()
atomic system pre-processing steps.
triangulationManager * getTriangulationManager()
void saveQuadratureData(const std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > &basisOperationsPtr, const dftfe::uInt quadratureId, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &quadratureValueData, const dftfe::uInt fieldDimension, const std::string &fieldName, const std::string &folderPath, const MPI_Comm &mpi_comm_parent, const MPI_Comm &mpi_comm_domain, const MPI_Comm &interpoolcomm, const MPI_Comm &interBandGroupComm)
save data of quad points to checkpoint file. Used for restart calculations, nscf and bands.
void initLocalPseudoPotential(const dealii::DoFHandler< 3 > &_dofHandler, const dftfe::uInt lpspQuadratureId, const dealii::MatrixFree< 3, double > &_matrix_free_data, const dftfe::uInt _phiExtDofHandlerIndex, const dealii::AffineConstraints< double > &phiExtConstraintMatrix, const std::map< dealii::types::global_dof_index, dealii::Point< 3 > > &supportPoints, const vselfBinsManager &vselfBinManager, distributedCPUVec< double > &phiExt, std::map< dealii::CellId, std::vector< double > > &_pseudoValues, std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > &_pseudoValuesAtoms)
dealii::AffineConstraints< double > constraintsNone
Definition dft.h:1639
double d_relativeErrorJacInvApproxPrevScfLRD
Definition dft.h:1759
std::vector< std::map< dealii::CellId, std::vector< dftfe::uInt > > > d_bCellNonTrivialAtomIdsBins
Definition dft.h:1434
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtrHost
Definition dft.h:1516
std::vector< dealii::types::global_dof_index > localProc_dof_indicesReal
Definition dft.h:1575
const std::vector< dealii::types::global_dof_index > & getLocalProcDofIndicesReal() const
Get local dofs local proc indices real.
const std::vector< std::vector< double > > & getAtomLocationsFrac() const
Gets the current atom Locations in fractional form from dftClass (only applicable for periodic and se...
dftfe::utils::MemoryStorage< dataTypes::number, dftfe::utils::MemorySpace::HOST > d_eigenVectorsFlattenedHost
Definition dft.h:1680
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_phiInQuadValues
Definition dft.h:1722
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > d_BLASWrapperPtrHost
Definition dft.h:1535
std::vector< double > d_dipole
Definition dft.h:1744
double d_domainVolume
volume of the domain
Definition dft.h:1477
void readkPointData()
void initImageChargesUpdateKPoints(bool flag=true)
generate image charges and update k point cartesian coordinates based on current lattice vectors
std::vector< double > d_generatorFlatTopWidths
composite generator flat top widths for all domain atoms
Definition dft.h:1350
expConfiningPotential d_expConfiningPot
Definition dft.h:1945
void initBoundaryConditions(const bool recomputeBasisData=true, const bool meshOnlyDeformed=false, const bool vselfPerturbationUpdateForStress=false)
void outputDensity()
write electron density solution fields
void runFunctionalTest()
double d_nlPSPCutOff
Definition dft.h:1411
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_densityResidualQuadValues
Definition dft.h:1711
void solveNoSCF()
compute approximation to ground-state without solving the SCF iteration
const std::vector< dealii::types::global_dof_index > & getLocalProcDofIndicesImag() const
Get local dofs local proc indices imag.
void locatePeriodicPinnedNodes(const dealii::DoFHandler< 3 > &_dofHandler, const dealii::AffineConstraints< double > &constraintMatrixBase, dealii::AffineConstraints< double > &constraintMatrix)
Sets homogeneous dirichlet boundary conditions on a node farthest from all atoms (pinned node)....
dealii::Timer d_globalTimer
Definition dft.h:1705
double getEntropicEnergy() const
const std::vector< double > & getNearestAtomDistance() const
Gets the nearest atom distance for each atom.
std::vector< dealii::types::global_dof_index > local_dof_indicesReal
Definition dft.h:1573
poissonSolverProblemWrapperClass d_phiTotalSolverProblem
Definition dft.h:1584
dealii::MatrixFree< 3, double > matrix_free_data
Definition dft.h:1511
dealii::AffineConstraints< double > d_constraintsRhoNodalOnlyHanging
Definition dft.h:1654
double fermiEnergyDown
Definition dft.h:1864
std::vector< std::vector< double > > d_fracOccupancy
Definition dft.h:1668
std::vector< dealii::Point< 3 > > d_closestTriaVertexToAtomsLocation
closest tria vertex
Definition dft.h:1850
std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > d_gradRhoCoreAtoms
Definition dft.h:1812
bool d_isAtomsGaussianDisplacementsReadFromFile
Definition dft.h:1338
void computeStress()
poissonSolverProblemWrapperClass d_phiPrimeSolverProblem
Definition dft.h:1586
double d_residualNormPredicted
Definition dft.h:1760
static constexpr double d_tikhonovRegularizationConstantLRD
Definition dft.h:1762
std::map< dftfe::uInt, dftfe::uInt > d_atomIdPseudopotentialInterestToGlobalId
Definition dft.h:1325
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_gradDensityOutQuadValues
Definition dft.h:1773
dftfe::uInt d_lpspQuadratureIdElectro
Definition dft.h:1499
dftfe::uInt d_phiExtDofHandlerIndexElectro
Definition dft.h:1488
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_densityTotalInValuesLpspQuad
Definition dft.h:1736
std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > getBLASWrapperMemSpace()
dftfe::uInt getElectroDofHandlerIndex() const
const std::set< dftfe::uInt > & getAtomTypes() const
Gets the current atom types from dftClass.
std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > d_rhoAtomsValuesSeparate
Definition dft.h:1768
void outputWfc(const std::string outputFileName="wfcOutput")
write wavefunction solution fields
dealii::AffineConstraints< double > d_constraintsPRefined
Definition dft.h:1648
std::map< dealii::CellId, std::vector< double > > d_gradRhoAtomsValues
Definition dft.h:1766
std::map< dealii::CellId, std::vector< dftfe::uInt > > d_bCellNonTrivialAtomIds
Definition dft.h:1429
double getFreeEnergy() const
std::vector< std::vector< double > > d_reciprocalLatticeVectors
Definition dft.h:1322
MixingScheme d_mixingScheme
Definition dft.h:1725
std::map< dealii::types::global_dof_index, double > & getAtomNodeToChargeMap()
map of atom node number and atomic weight
void initElectronicFields()
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > d_basisOperationsPtrElectroHost
Definition dft.h:1520
meshMovementAffineTransform d_affineTransformMesh
affine transformation object
Definition dft.h:1467
std::vector< double > a0
Definition dft.h:1876
void l2ProjectionQuadDensityMinusAtomicDensity(const std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > &basisOperationsPtr, const dealii::AffineConstraints< double > &constraintMatrix, const dftfe::uInt dofHandlerId, const dftfe::uInt quadratureId, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &quadratureValueData, distributedCPUVec< double > &nodalField)
l2 projection
std::vector< std::vector< double > > d_imagePositions
Definition dft.h:1383
std::shared_ptr< dftfe::basis::FEBasisOperations< dataTypes::number, double, memorySpace > > getBasisOperationsMemSpace()
triangulationManager d_mesh
Definition dft.h:1460
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > & getDensityInValues()
std::vector< std::map< dealii::CellId, std::vector< dftfe::uInt > > > d_bCellNonTrivialAtomImageIdsBins
Definition dft.h:1444
double fermiEnergyUp
Definition dft.h:1864
std::map< dealii::types::global_dof_index, double > d_atomNodeIdToChargeMap
map of atom node number and atomic weight
Definition dft.h:1822
std::shared_ptr< hubbard< dataTypes::number, memorySpace > > d_hubbardClassPtr
Definition dft.h:1946
void applyMultipoleDirichletBC(const dealii::DoFHandler< 3 > &_dofHandler, const dealii::AffineConstraints< double > &onlyHangingNodeConstraints, dealii::AffineConstraints< double > &constraintMatrix)
Sets inhomegeneous dirichlet boundary conditions upto quadrupole for total potential constraints on n...
dftfe::uInt d_lpspQuadratureId
Definition dft.h:1497
elpaScalaManager * getElpaScalaManager() const
const std::vector< double > & getKPointWeights() const
std::vector< double > d_imageChargesTrunc
Definition dft.h:1394
void deformDomain(const dealii::Tensor< 2, 3, double > &deformationGradient, const bool vselfPerturbationUpdateForStress=false, const bool useSingleAtomSolutionsOverride=false, const bool print=true)
Deforms the domain by the given deformation gradient and reinitializes the dftClass datastructures.
void loadTriaInfoAndRhoNodalData()
load triangulation information rho quadrature data from checkpoint file for restarted run
std::deque< distributedCPUVec< double > > d_fvSpin0containerVals
Definition dft.h:1754
bool d_useHubbard
Definition dft.h:1947
dftParameters & getParametersObject() const
Get reference to dftParameters object.
dftfe::uInt d_phiTotAXQuadratureIdElectro
Definition dft.h:1503
dealii::AffineConstraints< double > d_constraintsRhoNodal
Definition dft.h:1652
double fieldGradl2Norm(const dealii::MatrixFree< 3, double > &matrixFreeDataObject, const distributedCPUVec< double > &field)
void normalizeRhoInQuadValues()
normalize the input electron density
double totalCharge(const dealii::DoFHandler< 3 > &dofHandlerOfField, const distributedCPUVec< double > &rhoNodalField)
Computes total charge by integrating the electron-density.
void compute_ldos(const std::vector< std::vector< double > > &eigenValuesInput, const std::string &fileName)
virtual void resetRhoNodalSplitIn(distributedCPUVec< double > &OutDensity)
distributedCPUVec< double > d_tempEigenVec
Definition dft.h:1885
dealii::MatrixFree< 3, double > d_matrixFreeDataPRefined
Definition dft.h:1511
const std::vector< std::vector< double > > & getAtomLocationsCart() const
Gets the current atom Locations in cartesian form (origin at center of domain) from dftClass.
std::tuple< bool, double > solve(const bool computeForces=true, const bool computestress=true, const bool restartGroundStateCalcFromChk=false)
Kohn-Sham ground-state solve using SCF iteration.
dftfe::uInt d_nonPeriodicDensityDofHandlerIndexElectro
Definition dft.h:1492
double computeTraceXtKX(dftfe::uInt numberWaveFunctionsEstimate)
void normalizeRhoOutQuadValues()
normalize the output total electron density in each scf
double d_groundStateEnergy
Definition dft.h:1864
dftfe::uInt d_smearedChargeQuadratureIdElectro
Definition dft.h:1495
double computeVolume(const dealii::DoFHandler< 3 > &_dofHandler)
Computes the volume of the domain.
const std::map< dealii::CellId, std::vector< double > > & getPseudoVLoc() const
return the pseudo potential field
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_gradDensityTotalOutValuesLpspQuad
Definition dft.h:1737
const std::map< dealii::CellId, std::vector< dftfe::uInt > > & getbCellNonTrivialAtomIds() const
double lowrankApproxScfDielectricMatrixInvSpinPolarized(const dftfe::uInt scfIter)
dftfe::uInt d_nlpspQuadratureId
Definition dft.h:1496
double getNumElectrons() const
Get the number of electrons.
dealii::FESystem< 3 > FEEigen
Definition dft.h:1485
void recomputeKPointCoordinates()
int lowerBoundKindex
global k index of lower bound of the local k point set
Definition dft.h:1854
std::vector< distributedCPUVec< double > > d_densityOutNodalValues
Definition dft.h:1713
dealii::FESystem< 3 > FE
Definition dft.h:1485
void trivialSolveForStress()
bool d_kohnShamDFTOperatorsInitialized
Definition dft.h:1593
std::vector< const dealii::AffineConstraints< double > * > d_constraintsVector
Definition dft.h:1554
dftfe::uInt getDensityDofHandlerIndex()
get the index of the DoF Handler corresponding to
std::vector< std::vector< double > > atomLocations
FIXME: remove atom type atributes from atomLocations.
Definition dft.h:1321
void updateAuxDensityXCMatrix(const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &densityQuadValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &gradDensityQuadValues, const std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > &tauQuadValues, const std::map< dealii::CellId, std::vector< double > > &rhoCore, const std::map< dealii::CellId, std::vector< double > > &gradRhoCore, const dftfe::utils::MemoryStorage< dataTypes::number, memorySpace > &eigenVectorsFlattenedMemSpace, const std::vector< std::vector< double > > &eigenValues, const double fermiEnergy_, const double fermiEnergyUp_, const double fermiEnergyDown_, std::shared_ptr< AuxDensityMatrix< memorySpace > > auxDensityMatrixXCPtr)
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_tauOutQuadValues
Definition dft.h:1717
KohnShamDFTBaseOperator< memorySpace > * getKohnShamDFTBaseOperatorClass()
get the Ptr to the operator class ( Kohn Sham Base Operator)
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_gradDensityResidualQuadValues
Definition dft.h:1774
void addAtomicRhoQuadValuesGradients(dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &quadratureValueData, dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &quadratureGradValueData, const bool isConsiderGradData=false)
add atomic densities at quadrature points
dealii::TimerOutput computingTimerStandard
Definition dft.h:1701
void normalizeAtomicRhoQuadValues()
normalize the electron density
void solveBands()
compute bands without solving the SCF iteration
const dftfe::uInt n_mpi_processes
Definition dft.h:1568
std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > d_pseudoVLocAtoms
Definition dft.h:1800
double d_atomicRhoScalingFac
Definition dft.h:1003
std::vector< dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > > d_gradDensityInQuadValues
Definition dft.h:1773
std::vector< dealii::types::global_dof_index > localProc_dof_indicesImag
Definition dft.h:1576
std::vector< double > d_netFloatingDispSinceLastCheckForSmearedChargeOverlaps
Definition dft.h:1336
std::vector< double > d_kPointCoordinates
kPoint cartesian coordinates
Definition dft.h:1841
std::map< dealii::CellId, std::vector< double > > d_rhoCore
Definition dft.h:1807
KohnShamDFTBaseOperator< memorySpace > * d_kohnShamDFTOperatorPtr
Definition dft.h:1595
dftfe::uInt d_numEigenValues
Number of Kohn-Sham eigen values to be computed.
Definition dft.h:291
const dealii::Tensor< 2, 3, double > & getCellStress() const
Gets the current cell stress from dftClass.
const dftfe::uInt this_mpi_process
Definition dft.h:1569
void computeRhoNodalMassVector(dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &massVec)
Computes the diagonal mass matrix for rho nodal grid, used for nodal mixing.
const std::vector< double > & getForceonAtoms() const
Gets the current atomic forces from dftClass.
void nscf(KohnShamDFTBaseOperator< memorySpace > &kohnShamDFTEigenOperator, chebyshevOrthogonalizedSubspaceIterationSolver &subspaceIterationSolver)
double rhofieldl2Norm(const dealii::MatrixFree< 3, double > &matrixFreeDataObject, const distributedCPUVec< double > &rhoNodalField, const dftfe::uInt dofHandlerId, const dftfe::uInt quadratureId)
double computeResidualNodalData(const distributedCPUVec< double > &outValues, const distributedCPUVec< double > &inValues, distributedCPUVec< double > &residualValues)
void finalizeKohnShamDFTOperator()
void determineAtomsOfInterstPseudopotential(const std::vector< std::vector< double > > &atomCoordinates)
std::vector< double > d_netFloatingDispSinceLastBinsUpdate
Definition dft.h:1333
distributedCPUVec< double > d_phiTotRhoOut
Definition dft.h:1782
bool d_isRestartGroundStateCalcFromChk
Definition dft.h:1887
dftUtils::constraintMatrixInfo< dftfe::utils::MemorySpace::HOST > d_constraintsRhoNodalInfo
Definition dft.h:1657
dftfe::uInt d_densityDofHandlerIndexElectro
Definition dft.h:1491
void locateAtomCoreNodes(const dealii::DoFHandler< 3 > &_dofHandler, std::map< dealii::types::global_dof_index, double > &atomNodeIdToChargeValueMap)
Finds the global dof ids of the nodes containing atoms.
const MPI_Comm interpoolcomm
Definition dft.h:1566
double totalCharge(const dealii::DoFHandler< 3 > &dofHandlerOfField, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &rhoQuadValues)
void initPseudoPotentialAll(const bool updateNonlocalSparsity=true)
dftfe::uInt d_helmholtzDofHandlerIndexElectro
Definition dft.h:1505
void computeMultipoleMoments(const std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, dftfe::utils::MemorySpace::HOST > > &basisOperationsPtr, const dftfe::uInt densityQuadratureId, const dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > &rhoQuadValues, const std::map< dealii::CellId, std::vector< double > > *bQuadValues)
dftfe::uInt d_densityDofHandlerIndex
Definition dft.h:1490
const expConfiningPotential & getConfiningPotential() const
std::shared_ptr< dftfe::basis::FEBasisOperations< double, double, memorySpace > > getBasisOperationsElectroMemSpace()
~dftClass()
dftClass destructor
std::vector< std::vector< double > > atomLocationsFractional
Definition dft.h:1321
void normalizeRhoMagInInitialGuessQuadValues()
normalize input mag electron density to total magnetization for use in constraint magnetization case ...
std::vector< std::vector< double > > d_partialOccupancies
Definition dft.h:1663
dealii::DoFHandler< 3 > dofHandlerEigen
Definition dft.h:1486
chebyshevOrthogonalizedSubspaceIterationSolver * getSubspaceIterationSolverHost()
Get the Ptr to Chebyshev solver in host.
vselfBinsManager d_vselfBinsManager
vselfBinsManager object
Definition dft.h:1825
std::vector< distributedCPUVec< double > > d_vselfFieldGateauxDerStrainFDBins
Definition dft.h:1830
std::vector< double > d_gaussianConstantsForce
Definition dft.h:1343
dealii::AffineConstraints< double > d_constraintsForHelmholtzRhoNodal
Definition dft.h:1646
std::map< dftfe::uInt, std::map< dealii::CellId, std::vector< double > > > d_hessianRhoCoreAtoms
Definition dft.h:1817
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_gradPhiResQuadValues
Definition dft.h:1724
const std::vector< std::vector< double > > & getEigenValues() const
Get reference to the eigen values.
void generateMPGrid()
const double d_pspCutOffTrunc
distance from the domain till which periodic images will be considered
Definition dft.h:1407
distributedCPUVec< double > d_phiTotRhoIn
Definition dft.h:1778
double d_minDist
Definition dft.h:1369
void init()
Does KSDFT problem pre-processing steps including mesh generation calls.
void readPSIRadialValues()
dftfe::utils::MemoryStorage< double, dftfe::utils::MemorySpace::HOST > d_densityTotalOutValuesLpspQuad
Definition dft.h:1736
std::deque< distributedCPUVec< double > > d_vSpin0containerVals
Definition dft.h:1753
std::deque< distributedCPUVec< double > > d_groundStateDensityHistory
Definition dft.h:1793
void initNoRemesh(const bool updateImagesAndKPointsAndVselfBins=true, const bool checkSmearedChargeWidthsForOverlap=true, const bool useSingleAtomSolutionOverride=false, const bool isMeshDeformed=false)
Does KSDFT problem pre-processing steps but without remeshing.
dftfe::uInt d_densityQuadratureId
Definition dft.h:1507
meshMovementGaussianClass d_gaussianMovePar
meshMovementGaussianClass object
Definition dft.h:1470
double getTotalChargeforRhoSplit()
dftfe::uInt d_sparsityPatternQuadratureId
Definition dft.h:1509
void calculateSmearedChargeWidths()
a
dftfe::uInt d_eigenDofHandlerIndex
Definition dft.h:1488
void calculateNearestAtomDistances()
a
void loadPSIFiles(dftfe::uInt Z, dftfe::uInt n, dftfe::uInt l, dftfe::uInt &flag)
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:36
Overloads dealii's distribute and distribute_local_to_global functions associated with constraints cl...
Definition constraintMatrixInfo.h:43
Calculates dispersion correction to energy, force and stress.
Definition dftd.h:37
Manager class for ELPA and ScaLAPACK.
Definition elpaScalaManager.h:38
Definition expConfiningPotential.h:29
computes configurational forces in KSDFT
Definition force.h:50
Definition kerkerSolverProblemWrapper.h:64
Definition BLASWrapper.h:35
Class to update triangulation under affine transformation.
Definition meshMovementAffineTransform.h:30
Class to move triangulation nodes using Gaussian functions attached to control points.
Definition meshMovementGaussian.h:30
Definition poissonSolverProblemWrapper.h:66
This class generates and stores adaptive finite element meshes for the real-space dft problem.
Definition triangulationManager.h:42
Definition MemoryStorage.h:33
Categorizes atoms into bins for efficient solution of nuclear electrostatic self-potential.
Definition vselfBinsManager.h:34
Definition FEBasisOperations.h:30
double number
Definition dftfeDataTypes.h:41
@ HOST
Definition MemorySpaceType.h:34
@ DEVICE
Definition MemorySpaceType.h:36
Definition pseudoPotentialToDftfeConverter.cc:34
dealii::LinearAlgebra::distributed::Vector< elem_type, dealii::MemorySpace::Host > distributedCPUVec
Definition headers.h:92
std::uint32_t uInt
Definition TypeConfig.h:10
std::int32_t Int
Definition TypeConfig.h:11