Skip to content

Commit

Permalink
cleaning up mixingClass
Browse files Browse the repository at this point in the history
  • Loading branch information
vishal-subbu committed Sep 19, 2023
1 parent dabad02 commit b8d4956
Show file tree
Hide file tree
Showing 4 changed files with 1,370 additions and 993 deletions.
19 changes: 19 additions & 0 deletions include/dft.h
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,25 @@ namespace dftfe
distributedCPUVec<double> & fvSpin0,
distributedCPUVec<double> & fvSpin1);

void copyDensityToVector( std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoValues,
std::vector<double> &rhoValuesVector);

void copyDensityFromVector( std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoValues,
std::vector<double> &rhoValuesVector);

void copyGradDensityToVector( std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoValues,
std::vector<double> &gradRhoValuesVector);

void copyGradDensityFromVector( std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoValues,
std::vector<double> &gradRhoValuesVector);

void computeTotalDensityFromSpinPolarised(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoValues,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoSpinValues);

void computeTotalGradDensityFromSpinPolarised(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoValues,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoSpinValues);

void computeJxWForRho(std::vector<double> &vecJxW);
void
initializeKohnShamDFTOperator(const bool initializeCublas = true);

Expand Down
113 changes: 44 additions & 69 deletions include/mixingClass.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,102 +24,77 @@

namespace dftfe
{

enum mixingVariable
{
rho,
gradRho
};
class MixingScheme
{
public:

MixingScheme(const dftParameters &dftParam,
const MPI_Comm &mpi_comm_domain);

void init(const dealii::MatrixFree<3, double> & matrixFreeData,
const unsigned int matrixFreeVectorComponent,
const unsigned int matrixFreeQuadratureComponent,
excManager * excManagerPtr);

void dotProduct(const std::deque<std::vector<double>> &inHist,
const std::deque<std::vector<double>> &outHist,
std::vector<double> &A,
std::vector<double> &c,
std::string fieldName);

void copyDensityToInHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoInValues);

void copyDensityToOutHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoOutValues);
MixingScheme(const MPI_Comm &mpi_comm_domain);

unsigned int lengthOfHistory();

void computeAndersonMixingCoeff();

void popOldHistory();

void popRhoInHist();

void popRhoOutHist();

void copyDensityFromInHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoInValues);
void copyDensityFromOutHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoOutValues);

void copyGradDensityFromInHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradInput);
void copyGradDensityFromOutHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradOutput);

void copySpinGradDensityFromInHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradInputSpin);
void copySpinGradDensityFromOutHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradOutputSpin);

void copyGradDensityToInHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradInput);
void copyGradDensityToOutHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradOutput);

void copySpinGradDensityToInHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradInputSpin);
void copySpinGradDensityToOutHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradOutputSpin);
void clearHistory();

void computeMixingMatricesDensity(const std::deque<std::vector<double>> &inHist,
const std::deque<std::vector<double>> &outHist,
std::vector<double> &A,
std::vector<double> &c);
void addMixingVariable(mixingVariable &mixingVariableList,
std::vector<double> &weightDotProducts,
bool performMPIReduce,
double mixingValue);

double mixDensity(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoInValues,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoOutValues,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoInValuesSpinPolarized,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoOutValuesSpinPolarized,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoInValues,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoOutValues,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoInValuesSpinPolarized,
std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoOutValuesSpinPolarized);
void addVariableToInHist(mixingVariable &mixingVariableName,
std::vector<double> &inputVariableToInHist);

void popOldHistory();
void addVariableToOutHist(mixingVariable &mixingVariableName,
std::vector<double> &inputVariableToOutHist);

void clearHistory();
double mixVariable(mixingVariable &mixingVariableName,
std::vector<double> &outputVariable);

void popGradRhoInHist();
void popGradRhoOutHist();
void popGradRhoSpinInHist();
void popGradRhoSpinOutHist();

private:

void computeMixingMatrices(const std::deque<std::vector<double>> &inHist,
const std::deque<std::vector<double>> &outHist,
const std::vector<double> &weightDotProducts,
const bool isMPIAllReduce,
std::vector<double> &A,
std::vector<double> &c);

std::vector<double> d_A, d_c;
double d_cFinal;
std::deque<std::vector<double>> d_rhoInVals,
d_rhoOutVals, d_rhoInValsSpinPolarized, d_rhoOutValsSpinPolarized;

std::deque<std::shared_ptr<std::map<dealii::CellId, std::vector<double>>>> d_gradRhoInVals,
d_gradRhoInValsSpinPolarized, d_gradRhoOutVals, d_gradRhoOutValsSpinPolarized;

const dealii::MatrixFree<3,double> *d_matrixFreeDataPtr;
unsigned int d_matrixFreeVectorComponent,d_matrixFreeQuadratureComponent;

unsigned int d_numberQuadraturePointsPerCell;
unsigned int d_numCells;
const dealii::DoFHandler<3> * d_dofHandler;

std::vector<double> d_vecJxW;

const excManager * d_excManagerPtr;
std::map<mixingVariable, std::deque<std::vector<double>>> d_variableHistoryIn, d_variableHistoryOut ;
std:map<mixingVariable, std::vector<double>> d_vectorDotProductWeights;
std:map<mixingVariable, bool> d_performMPIReduce;

const MPI_Comm d_mpi_comm_domain;

const dftParameters *d_dftParamsPtr;
std:map<mixingVariable, double> d_mixingParameter;

};
} // end of namespace dftfe


#endif // DFTFE_MIXINGCLASS_H

//
//double mixDensity(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoInValues,
// std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoOutValues,
// std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoInValuesSpinPolarized,
// std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoOutValuesSpinPolarized,
// std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoInValues,
// std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoOutValues,
// std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoInValuesSpinPolarized,
// std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &gradRhoOutValuesSpinPolarized);

// void copyDensityToInHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoInValues);
//
// void copyDensityToOutHist(std::shared_ptr<std::map<dealii::CellId, std::vector<double>>> &rhoOutValues);
Loading

0 comments on commit b8d4956

Please sign in to comment.