From f9abd129710015b5908d3990a2c1f0aad3877a4c Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Tue, 8 Nov 2022 08:38:28 +0530 Subject: [PATCH 01/53] NEB initial commit --- CMakeLists.txt | 1 + include/nudgedElasticBandClass.h | 116 ++ src/neb/nudgedElasticBandClass.cc | 1382 ++++++++++++++++++++++++ src/neb/nudgedElasticBandClass.inst.cc | 56 + 4 files changed, 1555 insertions(+) create mode 100644 include/nudgedElasticBandClass.h create mode 100644 src/neb/nudgedElasticBandClass.cc create mode 100644 src/neb/nudgedElasticBandClass.inst.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 07adf3731..25a7de6ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ SET(TARGET_SRC ./src/solvers/dealiiLinearSolver.cc ./src/solvers/dealiiLinearSolverProblem.cc ./src/md/molecularDynamicsClass.cc + ./src/neb/nudgedElasticBandClass.cc ./src/geoOpt/geometryOptimizationClass.cc ./utils/fileReaders.cc ./utils/dftParameters.cc diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h new file mode 100644 index 000000000..e08545f3e --- /dev/null +++ b/include/nudgedElasticBandClass.h @@ -0,0 +1,116 @@ +#ifndef nebGlobalClass_H_ +#define nebGlobalClass_H_ +#include "constants.h" +#include "headers.h" +#include +#include "nonlinearSolverProblem.h" +#include "dft.h" +namespace dftfe +{ + using namespace dealii; + template + class dftClass; + template + class nebGlobalClass : public nonlinearSolverProblem + { + public: + + const double haPerBohrToeVPerAng = 27.211386245988 / 0.529177210903; + const double haToeV = 27.211386245988; + const double bohrToAng = 0.529177210903; + const double pi = 3.14159265359; + const double AngTobohr = 1.0 / bohrToAng; + double kmax = 0.1; //0.1 Ha/bohr + double kmin = 0.1; //0.1Ha/bohr + unsigned int NEBImageno ; + + nebGlobalClass(std::vector*> &_dftPtr, + const MPI_Comm &mpi_comm_parent, + int startStep); + + + + void runNEB(); + void ReturnNormedVector(std::vector & , int); + void LNorm(double &, std::vector , int, int); + void gradient(std::vector &gradient); + + + unsigned int + getNumberUnknowns() const; + + void + update(const std::vector &solution, + const bool computeForces = true, + const bool useSingleAtomSolutionsInitialGuess = false); + + void + save(); + + void value(std::vector &functionValue); + + void + precondition(std::vector & s, + const std::vector &gradient) const; + + void + solution(std::vector &solution); + void + Fire(); + + + std::vector + getUnknownCountFlag() const; + + private: + std::vector*> dftPtr; + + // parallel communication objects + const MPI_Comm d_mpiCommParent; + const unsigned int n_mpi_processes; + const unsigned int this_mpi_process; + + // conditional stream object + dealii::ConditionalOStream pcout; + + /// total number of calls to update() + unsigned int d_totalUpdateCalls; + int d_startStep; + + unsigned int restartFlag; + unsigned int numberGlobalCharges; + unsigned int numberofAtomTypes; + double d_maximumAtomForceToBeRelaxed; + unsigned int numberofImages; + unsigned int maximumIterationNEB; + double optimizertolerance; + unsigned int optimizermatItr; + double Forcecutoff; + unsigned int countrelaxationFlags; + std::vector d_relaxationFlags; + std::vector d_externalForceOnAtom; + std::vector ForceonImages; + std::vector d_ImageError; + std::vector d_Length; + const MPI_Comm & + getMPICommunicator(); + void CalculatePathTangent(int , std::vector &); + void CalculateForceparallel(int , std::vector & , std::vector ); + void CalculateForceperpendicular(int , std::vector & , std::vector , std::vector); + void CalculateSpringForce(int , std::vector &, std::vector ); + void CalculateForceonImage(std::vector, std::vector, std::vector &); + void CalculatePathLength(double &); + void WriteRestartFiles(int step); + void CalculateSpringConstant(int, double & ); + void ImageError(int image, double &Force); + + + + + + + }; + + +} +#endif \ No newline at end of file diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc new file mode 100644 index 000000000..4c826dbd8 --- /dev/null +++ b/src/neb/nudgedElasticBandClass.cc @@ -0,0 +1,1382 @@ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "nudgedElasticBandClass.h" +#include +#include +#include +#include + + +namespace dftfe +{ + template + nebGlobalClass::nebGlobalClass( + std::vector*> &_dftPtr, + const MPI_Comm &mpi_comm_parent, + int startStep) + : d_mpiCommParent(mpi_comm_parent) + , n_mpi_processes(Utilities::MPI::n_mpi_processes(mpi_comm_parent)) + , this_mpi_process(Utilities::MPI::this_mpi_process(mpi_comm_parent)) + , pcout(std::cout, + (Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0 && + !dftParameters::reproducible_output)) + { + dftPtr = _dftPtr; + numberGlobalCharges = + dftParameters::natoms; + numberofImages = + dftParameters::TotalImages; + kmax=dftParameters::k_max; + kmin = dftParameters::k_min; + Forcecutoff =dftParameters::cutoffForce/haPerBohrToeVPerAng; + d_maximumAtomForceToBeRelaxed = numberGlobalCharges; + optimizertolerance =dftParameters::optimizer_tolerance/haPerBohrToeVPerAng; + maximumIterationNEB = dftParameters::maximumNEBiteration; + optimizermatItr =dftParameters::maximumOptimizeriteration + startStep; + d_startStep = startStep; + pcout<<"Optimizer Tolerance set to: "<> s1; + int step; + pcout<<" NEB Global is in Restart Mode"<> initialatomLocations; + dftfe::dftUtils::readFile(5,initialatomLocations,FileName); + AssertThrow( + dftfe::dftParameters::natoms*numberofImages == initialatomLocations.size(), + ExcMessage( + "DFT-FE Error: The number atoms" + "read from the atomic coordinates file (input through ATOMIC COORDINATES FILE) doesn't" + "match the NATOMS input. Please check your atomic coordinates file. Sometimes an extra" + "blank row at the end can cause this issue too.")); + pcout << "number of atoms: " << initialatomLocations.size() << "\n"; + dftfe::dftParameters::coordinatesFile = FileName; + } + + + } + + + template + const MPI_Comm & + nebGlobalClass::getMPICommunicator() + { + return d_mpiCommParent; + } + + template + void + nebGlobalClass::CalculatePathTangent(int image , std::vector &tangent ) + { + unsigned int count = 0; + if(image !=0 && image != numberofImages-1) + { + std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; + atomLocationsi=dftPtr[image]->getAtomLocationsCart(); + atomLocationsiminus=dftPtr[image-1]->getAtomLocationsCart(); + atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart(); + double GSEnergyminus, GSEnergyplus,GSEnergy; + GSEnergyminus = dftPtr[image-1]->getInternalEnergy() ; + GSEnergyplus = dftPtr[image+1]->getInternalEnergy() ; + GSEnergy = dftPtr[image]->getInternalEnergy(); + if(GSEnergyplus > GSEnergy && GSEnergy > GSEnergyminus) + { + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + double temp = atomLocationsiplus[iCharge][j+2] - atomLocationsi[iCharge][j+2]; + if(temp > d_Length[j]/2) + { + //pcout<<"Before: "< GSEnergy && GSEnergy > GSEnergyplus) + { + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + double temp = atomLocationsi[iCharge][j+2] - atomLocationsiminus[iCharge][j+2]; + if(temp > d_Length[j]/2) + { + //pcout<<"Before: "< GSEnergyminus) + { + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + double temp1 = atomLocationsiplus[iCharge][j+2] - atomLocationsi[iCharge][j+2]; + double temp2 = atomLocationsi[iCharge][j+2] - atomLocationsiminus[iCharge][j+2]; + if(temp1 > d_Length[j]/2) + { + //pcout<<"Before: "< d_Length[j]/2) + { + //pcout<<"Before: "< d_Length[j]/2) + { + //pcout<<"Before: "< d_Length[j]/2) + { + //pcout<<"Before: "< d_Length[j]/2) + { + //pcout<<"Before: "<> atomLocationsi,atomLocationsiplus; + atomLocationsi=dftPtr[image]->getAtomLocationsCart(); + atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart(); + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + double temp = (atomLocationsiplus[iCharge][j+2] - atomLocationsi[iCharge][j+2]); + if(temp > d_Length[j]/2) + { + //pcout<> atomLocationsi, atomLocationsiminus; + atomLocationsi=dftPtr[image]->getAtomLocationsCart(); + atomLocationsiminus=dftPtr[image-1]->getAtomLocationsCart(); + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + double temp = (atomLocationsi[iCharge][j+2] - atomLocationsiminus[iCharge][j+2]); + if(temp > d_Length[j]/2) + { + //pcout< + void + nebGlobalClass::ReturnNormedVector(std::vector &v, int len ) + { + int i; + double norm = 0.0000; + for(i = 0; i 0.000000000001, + ExcMessage("DFT-FE Error: cordinates have 0 displacement between images")); + for(i = 0; i + void + nebGlobalClass::CalculateSpringForce(int image , std::vector & ForceSpring, std::vector tangent ) + { + + unsigned int count = 0; + double innerproduct = 0.0; + if(image != 0 && image != numberofImages-1 ) + { + double norm1=0.0; + double norm2 = 0.0; + std::vector v1(countrelaxationFlags,0.0); + std::vector v2(countrelaxationFlags,0.0); + std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; + atomLocationsi=dftPtr[image]->getAtomLocationsCart( ); + atomLocationsiminus=dftPtr[image-1]->getAtomLocationsCart(); + atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart(); + int count = 0; + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + v1[count] = std::fabs(atomLocationsiplus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); + v2[count] = std::fabs(atomLocationsiminus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); + + if(d_Length[j]/2 <= v1[count] ) + { + //pcout<<"Before: "<> atomLocationsi, atomLocationsiminus,atomLocationsiplus; + std::vector v1(countrelaxationFlags,0.0); + atomLocationsi=dftPtr[image]->getAtomLocationsCart( ); + atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart( ); + int count = 0; + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + v1[count] = std::fabs(atomLocationsiplus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); + if(d_Length[j]/2 <= v1[count] ) + { + //pcout<<"Before: "<> atomLocationsi, atomLocationsiminus,atomLocationsplus; + std::vector v2(countrelaxationFlags,0.0); + atomLocationsi=dftPtr[image]->getAtomLocationsCart(); + atomLocationsiminus= dftPtr[image-1]->getAtomLocationsCart( ); + int count = 0; + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0;j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + v2[count] = std::fabs(atomLocationsiminus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); + if(d_Length[j]/2 <= v2[count] ) + { + //pcout<<"Before: "< + void + nebGlobalClass::CalculateForceparallel(int image , std::vector & Forceparallel, std::vector tangent ) + { + if(true) + { + std::vector forceonAtoms(3 * numberGlobalCharges, 0.0); + forceonAtoms=dftPtr[image]->getForceonAtoms(); + double Innerproduct = 0.0; + unsigned int count = 0; + + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0; j < 3; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + Innerproduct = Innerproduct-forceonAtoms[3*iCharge+j]*tangent[count]; + count++; + } + } + + + } + for(count = 0; count < countrelaxationFlags; count++) + { + + Forceparallel[count] = Innerproduct*tangent[count]; + + + } + + } + } + + template + void + nebGlobalClass::CalculateForceperpendicular(int image , std::vector & Forceperpendicular, std::vector Forceparallel, std::vector tangent ) + { + + std::vector forceonAtoms(3 * numberGlobalCharges, 0.0); + forceonAtoms=dftPtr[image]->getForceonAtoms(); + unsigned int count = 0; + + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0; j < 3 ; j++) + { + if(d_relaxationFlags[3 * iCharge + j] == 1) + { + Forceperpendicular[count] = -forceonAtoms[3*iCharge+j] - Forceparallel[count]; + count++; + } + } + + + } + /*pcout<<"----Computing Forceparallel.Forceperpendicular---"< + void + nebGlobalClass::runNEB() + { + // Freezing of atoms to be implemented later.... + double step_time; + std::vector> temp_domainBoundingVectors; + dftUtils::readFile(3,temp_domainBoundingVectors,dftParameters::domainBoundingVectorsFile) ; + + for(int i = 0; i < 3; i++) + { + double temp = temp_domainBoundingVectors[i][0]*temp_domainBoundingVectors[i][0] + + temp_domainBoundingVectors[i][1]*temp_domainBoundingVectors[i][1] + + temp_domainBoundingVectors[i][2]*temp_domainBoundingVectors[i][2] ; + d_Length.push_back( pow(temp,0.5)); + } + pcout<<"--$ Domain Length$ --"<> tempRelaxFlagsData; + std::vector> tempForceData; + dftUtils::readRelaxationFlagsFile(6, + tempRelaxFlagsData, + tempForceData, + dftParameters::ionRelaxFlagsFile); + AssertThrow(tempRelaxFlagsData.size() == numberGlobalCharges, + ExcMessage( + "Incorrect number of entries in relaxationFlags file")); + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); + + + + for (unsigned int i = 0; i < numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + d_relaxationFlags.push_back(tempRelaxFlagsData[i][j]); + d_externalForceOnAtom.push_back(tempForceData[i][j]); + } + } + // print relaxation flags + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; + for (unsigned int i = 0; i < numberGlobalCharges; ++i) + { + pcout << tempRelaxFlagsData[i][0] << " " + << tempRelaxFlagsData[i][1] << " " + << tempRelaxFlagsData[i][2] << std::endl; + } + pcout << " --------------------------------------------------" + << std::endl; + } + else + { + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); + for (unsigned int i = 0; i < numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + d_relaxationFlags.push_back(1.0); + d_externalForceOnAtom.push_back(0.0); + } + } + // print relaxation flags + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; + for (unsigned int i = 0; i < numberGlobalCharges; ++i) + { + pcout << 1.0 << " " << 1.0 << " " << 1.0 << std::endl; + } + pcout << " --------------------------------------------------" + << std::endl; + } + countrelaxationFlags = 0; + for(int i = 0; i < d_relaxationFlags.size(); i++) + { + if(d_relaxationFlags[i]==1) + countrelaxationFlags++; + } + pcout<<" Total No. of relaxation flags: "<solve(true,false,false,false); + dftPtr[NEBImageno]->setAtomLocationsinitial(); + pcout<<"##Completed initial GS of image: "<> atomLocations; + atomLocations=dftPtr[i]->getAtomLocationsCart(); + Force = 0.0; + ImageError(NEBImageno,Force); + double Energy = (dftPtr[i]->getInternalEnergy() )*haToeV; + pcout<<" "< Forcecutoff && i > 0 && i < numberofImages-1) + { flag = false; + + } + + } + MPI_Barrier(d_mpiCommParent); + double Length = 0.0; + CalculatePathLength(Length); + pcout<= 1 && dftParameters::restartFromChk) + pcout << "Re starting Ion force relaxation using nonlinear CG solver... " + << std::endl; + else + pcout << "Starting Ion force relaxation using nonlinear CG solver... " + << std::endl; + if (dftParameters::verbosity >= 1) + { + pcout << " ---Non-linear CG Parameters-------------- " << std::endl; + pcout << " stopping tol: " << tol << std::endl; + pcout << " maxIter: " << maxIter << std::endl; + pcout << " lineSearch tol: " << lineSearchTol << std::endl; + pcout << " lineSearch maxIter: " << maxLineSearchIter << std::endl; + pcout << " lineSearch damping parameter: " + << lineSearchDampingParameter << std::endl; + pcout << " ------------------------------ " << std::endl; + } + + MPI_Barrier(d_mpiCommParent); + step_time = MPI_Wtime(); + if (getNumberUnknowns() > 0) + { + nonLinearSolver::ReturnValueType cgReturn = nonLinearSolver::FAILURE; + bool cgSuccess; + + if (dftParameters::chkType >= 1 && dftParameters::restartFromChk && + dftParameters::ionOptSolver == "CGPRP") + cgReturn = cgSolver.solve(*this, std::string("ionRelaxCG.chk"), true); + else if (dftParameters::chkType >= 1 && + !dftParameters::restartFromChk && + dftParameters::ionOptSolver == "CGPRP") + cgReturn = cgSolver.solve(*this, std::string("ionRelaxCG.chk")); + else if (dftParameters::ionOptSolver == "CGPRP") + cgReturn = cgSolver.solve(*this); + else if (dftParameters::ionOptSolver == "LBFGS") + { + cg_descent.set_step(0.8); + cg_descent.set_lbfgs(true); + if (this_mpi_process == 0) + cg_descent.set_PrintLevel(2); + + unsigned int memory = + std::min((unsigned int)100, getNumberUnknowns()); + if (memory <= 2) + memory = 0; + cg_descent.set_memory(memory); + cgSuccess = cg_descent.run(*this); + } + else if (dftParameters::ionOptSolver == "BFGS") + { + cgReturn = bfgsSolver.solve(*this); + } + else + { + cg_descent.set_step(0.8); + if (this_mpi_process == 0) + cg_descent.set_PrintLevel(2); + cg_descent.set_AWolfe(true); + + unsigned int memory = + std::min((unsigned int)100, getNumberUnknowns()); + if (memory <= 2) + memory = 0; + cg_descent.set_memory(memory); + cgSuccess = cg_descent.run(*this); + } + + if (cgReturn == nonLinearSolver::SUCCESS || cgSuccess) + { + pcout + << " ...Ion force relaxation completed as maximum force magnitude is less than FORCE TOL: " + << dftParameters::forceRelaxTol + << ", total number of ion position updates: " + << d_totalUpdateCalls << std::endl; + + + + } + else if (cgReturn == nonLinearSolver::FAILURE || !cgSuccess) + { + pcout << " ...Ion force relaxation failed " << std::endl; + } + else if (cgReturn == nonLinearSolver::MAX_ITER_REACHED) + { + pcout << " ...Maximum iterations reached " << std::endl; + } + } + flag = true; + pcout<> filePositionData(numberGlobalCharges*numberofImages, + std::vector(5,0.0)); + for (int i = 0; i < numberofImages; i++) + { + NEBImageno = i; + std::vector> atomLocations; + atomLocations=dftPtr[i]->getAtomLocationsCart(); + Force = 0.0; + ImageError(NEBImageno,Force); + double Energy = (dftPtr[i]->getInternalEnergy())*haToeV; + pcout<<" "< Forcecutoff && i > 0 && i < numberofImages-1) + { flag = false; + + } + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + for(int j = 0; j < 5; j++) + filePositionData[count][j] = atomLocations[iCharge][j]; + count++; + } + + } + MPI_Barrier(d_mpiCommParent); + Length = 0.0; + CalculatePathLength(Length); + pcout< tangent(countrelaxationFlags,0.0); + std::vector Forceparallel(countrelaxationFlags,0.0); + std::vector Forceperpendicular(countrelaxationFlags,0.0); + double Force = 0.0; + + CalculatePathTangent(NEBImageno, tangent); + CalculateForceparallel(NEBImageno, Forceparallel, tangent); + CalculateForceperpendicular(NEBImageno,Forceperpendicular,Forceparallel,tangent); + LNorm(Force,Forceperpendicular,0,countrelaxationFlags); + pcout<<"Error of Image: "< +void +nebGlobalClass::LNorm(double & norm, std::vector v, int L, int len) +{ + norm = 0.0; + if(L == 2) + { + for(int i = 0; i < len; i++) + norm = norm + v[i]*v[i]; + norm = sqrt(norm); + } + if(L == 0) + { + norm = -1; + for(int i = 0; i < len; i++) + norm = std::max(norm,fabs(v[i])); + } + if(L == 1) + { + norm = 0.0; + for(int i = 0; i < len; i++) + norm = norm + std::fabs(v[i]); + } + +} + +template +void +nebGlobalClass::gradient(std::vector &gradient) + { + gradient.clear(); + std::vector flagmultiplier(numberofImages,1); + bool flag = false; + pcout<<" "<<" Image No "<<" "<<"Internal Energy in eV"<<" "<<"Free Energy in eV"<<" "<getInternalEnergy() - dftPtr[i]->getEntropicEnergy())*haToeV; + double InternalEnergy = (dftPtr[i]->getInternalEnergy())*haToeV; + pcout<<" "< optimizertolerance ) + flag = false; + + } + + ImageError(numberofImages-1,Force); + d_ImageError[numberofImages-1]=Force; + + if(flag == true) + pcout<<"Optimization Criteria Met!!"< tangent(countrelaxationFlags,0.0); + std::vector Forceparallel(countrelaxationFlags,0.0); + std::vector Forceperpendicular(countrelaxationFlags,0.0); + std::vector SpringForce(countrelaxationFlags,0.0); + std::vector ForceonImage(countrelaxationFlags,0.0); + CalculatePathTangent(image, tangent); + CalculateForceparallel(image, Forceparallel, tangent); + CalculateForceperpendicular(image,Forceperpendicular,Forceparallel,tangent); + CalculateSpringForce(image,SpringForce,tangent); + CalculateForceonImage(Forceperpendicular,SpringForce,ForceonImage); + double F_spring = 0.0; + double F_per = 0.0; + LNorm(F_per,Forceperpendicular,0,countrelaxationFlags); + LNorm(F_spring,SpringForce,0,countrelaxationFlags); + pcout< d_maximumAtomForceToBeRelaxed) + d_maximumAtomForceToBeRelaxed = temp; + } + pcout< +void +nebGlobalClass::CalculateForceonImage(std::vector Forceperpendicular, std::vector SpringForce, + std::vector &ForceonImage) + { + unsigned int count = 0; + // pcout<<"Forces on Image "< 0 && NEBImageno < numberofImages ) + ForceonImage[count] = SpringForce[count] +Forceperpendicular[count]; + else + ForceonImage[count] = Forceperpendicular[count]; + //pcout< +void +nebGlobalClass::update(const std::vector &solution, + const bool computeForces, + const bool useSingleAtomSolutionsInitialGuess) + { + + std::vector> globalAtomsDisplacements(numberGlobalCharges); + + for(int image = 1; image< numberofImages-1; image++) + { + int multiplier = 1; + pcout<<"Update called for image: "< 0.4) + globalAtomsDisplacements[i][j] = 0.4; + else if (globalAtomsDisplacements[i][j] < -0.4) + globalAtomsDisplacements[i][j] = -0.4; + + count++; + } + } + } + pcout<= 1e-03) + factor = 1.30;//Modified + else if (d_maximumAtomForceToBeRelaxed < 1e-03 && + d_maximumAtomForceToBeRelaxed >= 1e-04) + factor = 1.25; + else if (d_maximumAtomForceToBeRelaxed < 1e-04) + factor = 1.15; + //MPI_Barrier required here... + factor = 1.0; + if(multiplier == 1) + { + MPI_Barrier(d_mpiCommParent); + dftPtr[image]->updateAtomPositionsAndMoveMesh(globalAtomsDisplacements, + factor, + useSingleAtomSolutionsInitialGuess); + pcout<<"--Positions of image: "<solve(true,false,false,false); + } + + + + + } + d_totalUpdateCalls += 1; + + } + + + + + template + void + nebGlobalClass::precondition( + std::vector & s, + const std::vector &gradient) const + { + s.clear(); + s.resize(getNumberUnknowns() * getNumberUnknowns(), 0.0); + for (auto i = 0; i < getNumberUnknowns(); ++i) + { + s[i + i * getNumberUnknowns()] = 1.0; + } + } + + + template + void + nebGlobalClass::solution(std::vector &solution) + { + // AssertThrow(false,dftUtils::ExcNotImplementedYet()); + solution.clear(); + pcout<<"The size of solution vector is: "<> atomLocations, atomLocationsInitial; + atomLocations=dftPtr[image]->getAtomLocationsCart(); + dftPtr[image]->getAtomLocationsinitial(atomLocationsInitial); + pcout<<"AtomLocation size "< + void + nebGlobalClass::save() + { + + d_startStep++; + WriteRestartFiles(d_startStep); + pcout<> atomLocations; + atomLocations=dftPtr[i]->getAtomLocationsCart(); + Force = 0.0; + ImageError(NEBImageno,Force); + double Energy = (dftPtr[i]->getInternalEnergy() )*haToeV; + pcout<<" "<getEntropicEnergy()< + std::vector + nebGlobalClass::getUnknownCountFlag() const + { + AssertThrow(false, dftUtils::ExcNotImplementedYet()); + } + + template + void + nebGlobalClass::value(std::vector &functionValue) + { + // AssertThrow(false,dftUtils::ExcNotImplementedYet()); + functionValue.clear(); + + + // Relative to initial free energy supressed in case of CGPRP + // as that would not work in case of restarted CGPRP + + + functionValue.push_back( dftPtr[3]->getInternalEnergy()); + + } + + + template + unsigned int + nebGlobalClass::getNumberUnknowns() const + { + + return (countrelaxationFlags*(numberofImages-2)); + } + + + template + void + nebGlobalClass::CalculatePathLength(double & length) + { + length = 0.0; + std::vector> atomLocations, atomLocationsInitial; + + for (int i = 0 ; i < numberofImages-1; i++) + { + atomLocations=dftPtr[i+1]->getAtomLocationsCart(); + atomLocationsInitial=dftPtr[i]->getAtomLocationsCart(); + double tempx,tempy,tempz,temp; + temp=0.0; + for(int iCharge = 0; iCharge < numberGlobalCharges ; iCharge++) + { + + tempx = std::fabs(atomLocations[iCharge][2]-atomLocationsInitial[iCharge][2]); + tempy = std::fabs(atomLocations[iCharge][3]-atomLocationsInitial[iCharge][3]); + tempz = std::fabs(atomLocations[iCharge][4]-atomLocationsInitial[iCharge][4]); + if (d_Length[0]/2 <= tempx) + tempx -= d_Length[0]; + if (d_Length[1]/2 <= tempy) + tempy -= d_Length[1]; + if (d_Length[2]/2 <= tempz) + tempz -= d_Length[2]; + temp+= tempx*tempx + tempy*tempy + tempz*tempz; + } + length += std::sqrt(temp); + + + } + + } +template +void +nebGlobalClass::CalculateSpringConstant( int NEBImage, double & SpringConstant) +{ + SpringConstant = 0.0; + double Emin,ksum,kdiff,deltaE,Emax; + ksum = kmax+kmin; + kdiff = kmax-kmin; + double Ei; + Emax = -5000000; + Emin = 500; +for (int image = 0; image < numberofImages-1; image++) +{ + Emax = std::max(Emax,dftPtr[image]->getInternalEnergy() - dftPtr[image]->getEntropicEnergy() ); + Emin = std::min(Emin,dftPtr[image]->getInternalEnergy() - dftPtr[image]->getEntropicEnergy()); +} +deltaE = Emax-Emin; + +Ei = dftPtr[NEBImage]->getInternalEnergy() - dftPtr[NEBImage]->getEntropicEnergy(); + + + +SpringConstant =0.5*( ksum - kdiff*std::cos(pi*(Ei - Emin)/(deltaE))); + +pcout<<"Image number "< +void +nebGlobalClass::WriteRestartFiles(int step) +{ + std::vector> stepIndexData(1, std::vector(1, 0)); + stepIndexData[0][0] = double(step); + pcout<<"Writing restart files for step: "<NEBwriteDomainAndAtomCoordinates(cordFolder,std::to_string(i)); + } + dftUtils::writeDataIntoFile(stepIndexData, newFolder3,d_mpiCommParent); + if(this_mpi_process == 0) + { + std::ofstream outfile; + outfile.open(tempfolder+"/coordinates.inp", std::ios_base::app); + for(int i=0; i < numberofImages; i++) + { + std::vector> atomLocations; + std::string coordinatesfolder = tempfolder+"/coordinates.inp"+std::to_string(i); + dftUtils::readFile(5,atomLocations,coordinatesfolder); + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + outfile< +void +nebGlobalClass::ImageError(int image, double &Force) +{ + Force = 0.0; + std::vector tangent(countrelaxationFlags,0.0); + std::vector Forceparallel(countrelaxationFlags,0.0); + std::vector Forceperpendicular(countrelaxationFlags,0.0); + CalculatePathTangent(image, tangent); + CalculateForceparallel(image, Forceparallel, tangent); + CalculateForceperpendicular(image,Forceperpendicular,Forceparallel,tangent); + LNorm(Force,Forceperpendicular,0,countrelaxationFlags); +} + + +#include "nebGlobalClass.inst.cc" +} diff --git a/src/neb/nudgedElasticBandClass.inst.cc b/src/neb/nudgedElasticBandClass.inst.cc new file mode 100644 index 000000000..5bf26e0d7 --- /dev/null +++ b/src/neb/nudgedElasticBandClass.inst.cc @@ -0,0 +1,56 @@ +#ifdef DFTFE_MINIMAL_COMPILE +template class nebGlobalClass<2, 2>; +template class nebGlobalClass<3, 3>; +template class nebGlobalClass<4, 4>; +template class nebGlobalClass<5, 5>; +template class nebGlobalClass<6, 6>; +template class nebGlobalClass<6, 7>; +template class nebGlobalClass<6, 8>; +template class nebGlobalClass<6, 9>; +template class nebGlobalClass<7, 7>; +#else +template class nebGlobalClass<1, 1>; +template class nebGlobalClass<1, 2>; +template class nebGlobalClass<2, 2>; +template class nebGlobalClass<2, 3>; +template class nebGlobalClass<2, 4>; +template class nebGlobalClass<3, 3>; +template class nebGlobalClass<3, 4>; +template class nebGlobalClass<3, 5>; +template class nebGlobalClass<3, 6>; +template class nebGlobalClass<4, 4>; +template class nebGlobalClass<4, 5>; +template class nebGlobalClass<4, 6>; +template class nebGlobalClass<4, 7>; +template class nebGlobalClass<4, 8>; +template class nebGlobalClass<5, 5>; +template class nebGlobalClass<5, 6>; +template class nebGlobalClass<5, 7>; +template class nebGlobalClass<5, 8>; +template class nebGlobalClass<5, 9>; +template class nebGlobalClass<5, 10>; +template class nebGlobalClass<6, 6>; +template class nebGlobalClass<6, 7>; +template class nebGlobalClass<6, 8>; +template class nebGlobalClass<6, 9>; +template class nebGlobalClass<6, 10>; +template class nebGlobalClass<6, 11>; +template class nebGlobalClass<6, 12>; +template class nebGlobalClass<7, 7>; +template class nebGlobalClass<7, 8>; +template class nebGlobalClass<7, 9>; +template class nebGlobalClass<7, 10>; +template class nebGlobalClass<7, 11>; +template class nebGlobalClass<7, 12>; +template class nebGlobalClass<7, 13>; +template class nebGlobalClass<7, 14>; +template class nebGlobalClass<8, 8>; +template class nebGlobalClass<8, 9>; +template class nebGlobalClass<8, 10>; +template class nebGlobalClass<8, 11>; +template class nebGlobalClass<8, 12>; +template class nebGlobalClass<8, 13>; +template class nebGlobalClass<8, 14>; +template class nebGlobalClass<8, 15>; +template class nebGlobalClass<8, 16>; +#endif From 14f8e873de78724e66059e1e483a7fc17b9a1d23 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 10 Nov 2022 17:24:51 +0530 Subject: [PATCH 02/53] Compilation success.. Cleanups. --- include/nudgedElasticBandClass.h | 118 ++++++---- include/runParameters.h | 7 + src/dft/dft.cc | 1 - src/main.cc | 10 +- src/neb/nudgedElasticBandClass.cc | 300 +++++++++++++------------ src/neb/nudgedElasticBandClass.inst.cc | 56 ----- utils/dftParameters.cc | 55 +++++ utils/runParameters.cc | 72 +++++- 8 files changed, 379 insertions(+), 240 deletions(-) delete mode 100644 src/neb/nudgedElasticBandClass.inst.cc diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index e08545f3e..0653b813e 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -1,36 +1,64 @@ -#ifndef nebGlobalClass_H_ -#define nebGlobalClass_H_ -#include "constants.h" -#include "headers.h" +// --------------------------------------------------------------------- +// +// Copyright (c) 2017-2022 The Regents of the University of Michigan and DFT-FE +// authors. +// +// This file is part of the DFT-FE code. +// +// The DFT-FE code is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE at +// the top level of the DFT-FE distribution. +// +// --------------------------------------------------------------------- + + + +#ifndef nudgedElasticBandClass_H_ +#define nudgedElasticBandClass_H_ #include #include "nonlinearSolverProblem.h" -#include "dft.h" +#include "nonLinearSolver.h" +#include "dftBase.h" +#include "dftfeWrapper.h" +#include "headers.h" + namespace dftfe { - using namespace dealii; - template - class dftClass; - template - class nebGlobalClass : public nonlinearSolverProblem + + class nudgedElasticBandClass : public nonlinearSolverProblem { public: + + + nudgedElasticBandClass( + const std::string parameter_file, + const std::string restartFilesPath, + const MPI_Comm & mpi_comm_parent, + const bool restart, + const int verbosity, + int numberOfImages, + bool imageFreeze, + double Kmax, + double Kmin, + double pathThreshold, + int maximumNEBIteration, + const std::string &coordinatesFileNEB, + const std::string &domainVectorsFile ); + //~nudgedElasticBandClass(); const double haPerBohrToeVPerAng = 27.211386245988 / 0.529177210903; const double haToeV = 27.211386245988; const double bohrToAng = 0.529177210903; const double pi = 3.14159265359; const double AngTobohr = 1.0 / bohrToAng; - double kmax = 0.1; //0.1 Ha/bohr - double kmin = 0.1; //0.1Ha/bohr + double d_kmax = 0.1; //0.1 Ha/bohr + double d_kmin = 0.1; //0.1Ha/bohr unsigned int NEBImageno ; - nebGlobalClass(std::vector*> &_dftPtr, - const MPI_Comm &mpi_comm_parent, - int startStep); - - - - void runNEB(); + int runNEB(); void ReturnNormedVector(std::vector & , int); void LNorm(double &, std::vector , int, int); void gradient(std::vector &gradient); @@ -49,49 +77,52 @@ namespace dftfe void value(std::vector &functionValue); - void - precondition(std::vector & s, - const std::vector &gradient) const; + /// not implemented + void + precondition(std::vector &s, const std::vector &gradient); void solution(std::vector &solution); - void - Fire(); + std::vector getUnknownCountFlag() const; private: - std::vector*> dftPtr; - + std::vector> d_dftfeWrapper; + //std::vector d_dftPtr; // parallel communication objects const MPI_Comm d_mpiCommParent; - const unsigned int n_mpi_processes; - const unsigned int this_mpi_process; + //const unsigned int n_mpi_processes; + const unsigned int d_this_mpi_process; // conditional stream object dealii::ConditionalOStream pcout; + int d_verbosity; + std::string d_restartFilesPath; + bool d_imageFreeze; + /// total number of calls to update() unsigned int d_totalUpdateCalls; int d_startStep; - unsigned int restartFlag; - unsigned int numberGlobalCharges; - unsigned int numberofAtomTypes; + unsigned int d_restartFlag; + unsigned int d_numberGlobalCharges; double d_maximumAtomForceToBeRelaxed; - unsigned int numberofImages; - unsigned int maximumIterationNEB; - double optimizertolerance; + unsigned int d_numberOfImages; + unsigned int d_maximumNEBIteration; + double d_optimizertolerance; unsigned int optimizermatItr; double Forcecutoff; - unsigned int countrelaxationFlags; + unsigned int d_countrelaxationFlags; std::vector d_relaxationFlags; std::vector d_externalForceOnAtom; - std::vector ForceonImages; + std::vector d_ForceonImages; std::vector d_ImageError; std::vector d_Length; + std::string d_coordinatesFileNEB, d_domainVectorsFileNEB; const MPI_Comm & getMPICommunicator(); void CalculatePathTangent(int , std::vector &); @@ -104,13 +135,22 @@ namespace dftfe void CalculateSpringConstant(int, double & ); void ImageError(int image, double &Force); - - + /** + * @brief set() initalises all the private datamembers of nudgedElasticBandClass object from the parameters declared by user. + */ + void + set(); + /** + * @brief check for convergence. + * + */ + bool + isConverged() const; }; -} +}// namespace dftfe #endif \ No newline at end of file diff --git a/include/runParameters.h b/include/runParameters.h index 8163dc050..5f9aa7536 100644 --- a/include/runParameters.h +++ b/include/runParameters.h @@ -36,6 +36,13 @@ namespace dftfe std::string solvermode; bool restart; std::string restartFilesPath; + int numberOfImages; + bool imageFreeze; + double Kmax; + double Kmin; + double pathThreshold; + int maximumNEBiteration; + std::string coordinatesFileNEB, domainVectorsFileNEB; runParameters() = default; /** diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 49a79fa19..86893cfef 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -35,7 +35,6 @@ #include #include #include -#include "molecularDynamicsClass.h" #include #include #include diff --git a/src/main.cc b/src/main.cc index e752f0ede..527db49a0 100644 --- a/src/main.cc +++ b/src/main.cc @@ -23,6 +23,7 @@ #include "dftfeWrapper.h" #include "runParameters.h" #include "molecularDynamicsClass.h" +#include "nudgedElasticBandClass.h" #include "geometryOptimizationClass.h" // @@ -169,7 +170,14 @@ main(int argc, char *argv[]) } else if (runParams.solvermode == "NEB") - {} + { + dftfe::nudgedElasticBandClass nebClass(parameter_file,runParams.restartFilesPath,MPI_COMM_WORLD,runParams.restart,runParams.verbosity, + runParams.numberOfImages, runParams.imageFreeze,runParams.Kmax,runParams.Kmin,runParams.pathThreshold, + runParams.maximumNEBiteration, runParams.coordinatesFileNEB, runParams.domainVectorsFileNEB); + + int status = nebClass.runNEB(); + + } else if (runParams.solvermode == "GEOOPT") { dftfe::geometryOptimizationClass geoOpt(parameter_file, diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 4c826dbd8..2cbeb0f24 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -1,93 +1,113 @@ -#include -#include -#include -#include -#include +// --------------------------------------------------------------------- +// +// Copyright (c) 2017-2022 The Regents of the University of Michigan and DFT-FE +// authors. +// +// This file is part of the DFT-FE code. +// +// The DFT-FE code is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE at +// the top level of the DFT-FE distribution. +// +// --------------------------------------------------------------------- +// +// @author Kartick Ramakrishnan +// #include -#include #include -#include +#include +#include #include #include #include -#include -#include #include "nudgedElasticBandClass.h" -#include -#include -#include #include namespace dftfe { - template - nebGlobalClass::nebGlobalClass( - std::vector*> &_dftPtr, - const MPI_Comm &mpi_comm_parent, - int startStep) + + nudgedElasticBandClass::nudgedElasticBandClass( + const std::string parameter_file, + const std::string restartFilesPath, + const MPI_Comm & mpi_comm_parent, + const bool restart, + const int verbosity, + int numberOfImages, + bool imageFreeze, + double Kmax, + double Kmin, + double pathThreshold, + int maximumNEBIteration, + const std::string & coordinatesFileNEB, + const std::string & domainVectorsFile ) : d_mpiCommParent(mpi_comm_parent) - , n_mpi_processes(Utilities::MPI::n_mpi_processes(mpi_comm_parent)) - , this_mpi_process(Utilities::MPI::this_mpi_process(mpi_comm_parent)) - , pcout(std::cout, - (Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0 && - !dftParameters::reproducible_output)) + , d_this_mpi_process(Utilities::MPI::this_mpi_process(mpi_comm_parent)) + , pcout(std::cout, (Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) + , d_restartFilesPath(restartFilesPath) + , d_verbosity(verbosity) + , d_numberOfImages(numberOfImages) + , d_imageFreeze(imageFreeze) + , d_kmax(Kmax) + , d_kmin(Kmin) + , d_optimizertolerance(pathThreshold) + , d_maximumNEBIteration(maximumNEBIteration) + { - dftPtr = _dftPtr; - numberGlobalCharges = - dftParameters::natoms; - numberofImages = - dftParameters::TotalImages; - kmax=dftParameters::k_max; - kmin = dftParameters::k_min; - Forcecutoff =dftParameters::cutoffForce/haPerBohrToeVPerAng; - d_maximumAtomForceToBeRelaxed = numberGlobalCharges; - optimizertolerance =dftParameters::optimizer_tolerance/haPerBohrToeVPerAng; - maximumIterationNEB = dftParameters::maximumNEBiteration; - optimizermatItr =dftParameters::maximumOptimizeriteration + startStep; - d_startStep = startStep; - pcout<<"Optimizer Tolerance set to: "<> s1; - int step; - pcout<<" NEB Global is in Restart Mode"<> initialatomLocations; - dftfe::dftUtils::readFile(5,initialatomLocations,FileName); - AssertThrow( - dftfe::dftParameters::natoms*numberofImages == initialatomLocations.size(), - ExcMessage( - "DFT-FE Error: The number atoms" - "read from the atomic coordinates file (input through ATOMIC COORDINATES FILE) doesn't" - "match the NATOMS input. Please check your atomic coordinates file. Sometimes an extra" - "blank row at the end can cause this issue too.")); - pcout << "number of atoms: " << initialatomLocations.size() << "\n"; - dftfe::dftParameters::coordinatesFile = FileName; - } + + pcout<<"Optimizer Tolerance set to: "<(parameter_file, + coordinatesFile, + domainVectorsFile, + d_mpiCommParent, + true, + true, + "MD", + d_restartFilesPath, + false)); + // d_dftPtr.push_back(d_dftfeWrapper->getDftfeBasePtr())); + + + + } + + + } - - - template + int + nudgedElasticBandClass::runNEB() + { + pcout<<"Here"<::getMPICommunicator() + nudgedElasticBandClass::getMPICommunicator() { return d_mpiCommParent; } - template + void - nebGlobalClass::CalculatePathTangent(int image , std::vector &tangent ) + nudgedElasticBandClass::CalculatePathTangent(int image , std::vector &tangent ) { - unsigned int count = 0; + /* unsigned int count = 0; if(image !=0 && image != numberofImages-1) { std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; @@ -360,14 +380,14 @@ namespace dftfe ReturnNormedVector(tangent,countrelaxationFlags); } - + */ } - template + void - nebGlobalClass::ReturnNormedVector(std::vector &v, int len ) + nudgedElasticBandClass::ReturnNormedVector(std::vector &v, int len ) { - int i; + /*int i; double norm = 0.0000; for(i = 0; i + void - nebGlobalClass::CalculateSpringForce(int image , std::vector & ForceSpring, std::vector tangent ) + nudgedElasticBandClass::CalculateSpringForce(int image , std::vector & ForceSpring, std::vector tangent ) { - unsigned int count = 0; + /*unsigned int count = 0; double innerproduct = 0.0; if(image != 0 && image != numberofImages-1 ) { @@ -520,15 +540,15 @@ namespace dftfe //pcout< + void - nebGlobalClass::CalculateForceparallel(int image , std::vector & Forceparallel, std::vector tangent ) + nudgedElasticBandClass::CalculateForceparallel(int image , std::vector & Forceparallel, std::vector tangent ) { - if(true) + /*if(true) { std::vector forceonAtoms(3 * numberGlobalCharges, 0.0); forceonAtoms=dftPtr[image]->getForceonAtoms(); @@ -556,15 +576,15 @@ namespace dftfe } - } + } */ } - template + void - nebGlobalClass::CalculateForceperpendicular(int image , std::vector & Forceperpendicular, std::vector Forceparallel, std::vector tangent ) + nudgedElasticBandClass::CalculateForceperpendicular(int image , std::vector & Forceperpendicular, std::vector Forceparallel, std::vector tangent ) { - std::vector forceonAtoms(3 * numberGlobalCharges, 0.0); + /*std::vector forceonAtoms(3 * numberGlobalCharges, 0.0); forceonAtoms=dftPtr[image]->getForceonAtoms(); unsigned int count = 0; @@ -581,20 +601,13 @@ namespace dftfe } - /*pcout<<"----Computing Forceparallel.Forceperpendicular---"< + /* void - nebGlobalClass::runNEB() + nudgedElasticBandClass::runNEB() { // Freezing of atoms to be implemented later.... double step_time; @@ -919,11 +932,11 @@ namespace dftfe } + */ - -template + void -nebGlobalClass::LNorm(double & norm, std::vector v, int L, int len) + nudgedElasticBandClass::LNorm(double & norm, std::vector v, int L, int len) { norm = 0.0; if(L == 2) @@ -947,11 +960,11 @@ nebGlobalClass::LNorm(double & norm, std::vector + void -nebGlobalClass::gradient(std::vector &gradient) + nudgedElasticBandClass::gradient(std::vector &gradient) { - gradient.clear(); + /*gradient.clear(); std::vector flagmultiplier(numberofImages,1); bool flag = false; pcout<<" "<<" Image No "<<" "<<"Internal Energy in eV"<<" "<<"Free Energy in eV"<<" "<::gradient(std::vector &gradient) d_maximumAtomForceToBeRelaxed = temp; } pcout< + void -nebGlobalClass::CalculateForceonImage(std::vector Forceperpendicular, std::vector SpringForce, + nudgedElasticBandClass::CalculateForceonImage(std::vector Forceperpendicular, std::vector SpringForce, std::vector &ForceonImage) { - unsigned int count = 0; + /*unsigned int count = 0; // pcout<<"Forces on Image "< 0 && NEBImageno < numberofImages ) @@ -1062,17 +1075,17 @@ nebGlobalClass::CalculateForceonImage(std::vector + void -nebGlobalClass::update(const std::vector &solution, + nudgedElasticBandClass::update(const std::vector &solution, const bool computeForces, const bool useSingleAtomSolutionsInitialGuess) { - std::vector> globalAtomsDisplacements(numberGlobalCharges); + /*std::vector> globalAtomsDisplacements(numberGlobalCharges); for(int image = 1; image< numberofImages-1; image++) { @@ -1144,17 +1157,17 @@ nebGlobalClass::update(const std::vector &solut } d_totalUpdateCalls += 1; - + */ } - template + void - nebGlobalClass::precondition( + nudgedElasticBandClass::precondition( std::vector & s, - const std::vector &gradient) const + const std::vector &gradient) { s.clear(); s.resize(getNumberUnknowns() * getNumberUnknowns(), 0.0); @@ -1165,11 +1178,11 @@ nebGlobalClass::update(const std::vector &solut } - template + void - nebGlobalClass::solution(std::vector &solution) + nudgedElasticBandClass::solution(std::vector &solution) { - // AssertThrow(false,dftUtils::ExcNotImplementedYet()); + /* // AssertThrow(false,dftUtils::ExcNotImplementedYet()); solution.clear(); pcout<<"The size of solution vector is: "<::update(const std::vector &solut } } } - // pcout<<"The size of solution vector is: "< + void - nebGlobalClass::save() + nudgedElasticBandClass::save() { - + /* d_startStep++; WriteRestartFiles(d_startStep); pcout<::update(const std::vector &solut CalculatePathLength(Length); pcout< + std::vector - nebGlobalClass::getUnknownCountFlag() const + nudgedElasticBandClass::getUnknownCountFlag() const { AssertThrow(false, dftUtils::ExcNotImplementedYet()); } - template + void - nebGlobalClass::value(std::vector &functionValue) + nudgedElasticBandClass::value(std::vector &functionValue) { // AssertThrow(false,dftUtils::ExcNotImplementedYet()); functionValue.clear(); @@ -1248,25 +1261,25 @@ nebGlobalClass::update(const std::vector &solut // as that would not work in case of restarted CGPRP - functionValue.push_back( dftPtr[3]->getInternalEnergy()); + //functionValue.push_back( dftPtr[3]->getInternalEnergy()); } - template + unsigned int - nebGlobalClass::getNumberUnknowns() const + nudgedElasticBandClass::getNumberUnknowns() const { - return (countrelaxationFlags*(numberofImages-2)); + //return (countrelaxationFlags*(numberofImages-2)); } - template + void - nebGlobalClass::CalculatePathLength(double & length) + nudgedElasticBandClass::CalculatePathLength(double & length) { - length = 0.0; + /*length = 0.0; std::vector> atomLocations, atomLocationsInitial; for (int i = 0 ; i < numberofImages-1; i++) @@ -1293,13 +1306,13 @@ nebGlobalClass::update(const std::vector &solut } - + */ } -template + void -nebGlobalClass::CalculateSpringConstant( int NEBImage, double & SpringConstant) + nudgedElasticBandClass::CalculateSpringConstant( int NEBImage, double & SpringConstant) { - SpringConstant = 0.0; + /*SpringConstant = 0.0; double Emin,ksum,kdiff,deltaE,Emax; ksum = kmax+kmin; kdiff = kmax-kmin; @@ -1321,15 +1334,15 @@ SpringConstant =0.5*( ksum - kdiff*std::cos(pi*(Ei - Emin)/(deltaE))); pcout<<"Image number "< + void -nebGlobalClass::WriteRestartFiles(int step) + nudgedElasticBandClass::WriteRestartFiles(int step) { - std::vector> stepIndexData(1, std::vector(1, 0)); + /*std::vector> stepIndexData(1, std::vector(1, 0)); stepIndexData[0][0] = double(step); pcout<<"Writing restart files for step: "<::WriteRestartFiles(int step) } outfile.close(); } - + */ } -template + void -nebGlobalClass::ImageError(int image, double &Force) + nudgedElasticBandClass::ImageError(int image, double &Force) { - Force = 0.0; + /*Force = 0.0; std::vector tangent(countrelaxationFlags,0.0); std::vector Forceparallel(countrelaxationFlags,0.0); std::vector Forceperpendicular(countrelaxationFlags,0.0); @@ -1375,8 +1388,11 @@ nebGlobalClass::ImageError(int image, double &Force) CalculateForceparallel(image, Forceparallel, tangent); CalculateForceperpendicular(image,Forceperpendicular,Forceparallel,tangent); LNorm(Force,Forceperpendicular,0,countrelaxationFlags); + */ } +bool +nudgedElasticBandClass::isConverged() const +{} -#include "nebGlobalClass.inst.cc" } diff --git a/src/neb/nudgedElasticBandClass.inst.cc b/src/neb/nudgedElasticBandClass.inst.cc deleted file mode 100644 index 5bf26e0d7..000000000 --- a/src/neb/nudgedElasticBandClass.inst.cc +++ /dev/null @@ -1,56 +0,0 @@ -#ifdef DFTFE_MINIMAL_COMPILE -template class nebGlobalClass<2, 2>; -template class nebGlobalClass<3, 3>; -template class nebGlobalClass<4, 4>; -template class nebGlobalClass<5, 5>; -template class nebGlobalClass<6, 6>; -template class nebGlobalClass<6, 7>; -template class nebGlobalClass<6, 8>; -template class nebGlobalClass<6, 9>; -template class nebGlobalClass<7, 7>; -#else -template class nebGlobalClass<1, 1>; -template class nebGlobalClass<1, 2>; -template class nebGlobalClass<2, 2>; -template class nebGlobalClass<2, 3>; -template class nebGlobalClass<2, 4>; -template class nebGlobalClass<3, 3>; -template class nebGlobalClass<3, 4>; -template class nebGlobalClass<3, 5>; -template class nebGlobalClass<3, 6>; -template class nebGlobalClass<4, 4>; -template class nebGlobalClass<4, 5>; -template class nebGlobalClass<4, 6>; -template class nebGlobalClass<4, 7>; -template class nebGlobalClass<4, 8>; -template class nebGlobalClass<5, 5>; -template class nebGlobalClass<5, 6>; -template class nebGlobalClass<5, 7>; -template class nebGlobalClass<5, 8>; -template class nebGlobalClass<5, 9>; -template class nebGlobalClass<5, 10>; -template class nebGlobalClass<6, 6>; -template class nebGlobalClass<6, 7>; -template class nebGlobalClass<6, 8>; -template class nebGlobalClass<6, 9>; -template class nebGlobalClass<6, 10>; -template class nebGlobalClass<6, 11>; -template class nebGlobalClass<6, 12>; -template class nebGlobalClass<7, 7>; -template class nebGlobalClass<7, 8>; -template class nebGlobalClass<7, 9>; -template class nebGlobalClass<7, 10>; -template class nebGlobalClass<7, 11>; -template class nebGlobalClass<7, 12>; -template class nebGlobalClass<7, 13>; -template class nebGlobalClass<7, 14>; -template class nebGlobalClass<8, 8>; -template class nebGlobalClass<8, 9>; -template class nebGlobalClass<8, 10>; -template class nebGlobalClass<8, 11>; -template class nebGlobalClass<8, 12>; -template class nebGlobalClass<8, 13>; -template class nebGlobalClass<8, 14>; -template class nebGlobalClass<8, 15>; -template class nebGlobalClass<8, 16>; -#endif diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 5b73484fe..32f65713a 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1016,7 +1016,62 @@ namespace dftfe "[Advanced] Absolute tolerance on the residual as stopping criterion for Helmholtz problem convergence."); } prm.leave_subsection(); + prm.enter_subsection("NEB"); + { + + prm.declare_entry( + "ALLOW IMAGE FREEZING", + "false", + Patterns::Bool(), + "If true images less than threshold will freeze for optimization step"); + + prm.declare_entry( + "NUMBER OF IMAGES", + "1", + Patterns::Integer(1,50), + "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); + prm.declare_entry( + "MAXIMUM SPRING CONSTANT", + "1e-1", + Patterns::Double(), + "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); + + prm.declare_entry( + "MINIMUM SPRING CONSTANT", + "5e-2", + Patterns::Double(), + "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); + + prm.declare_entry( + "PATH THRESHOLD", + "1e-1", + Patterns::Double(), + "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); + + + prm.declare_entry( + "MAXIMUM NUMBER OF NEB ITERATIONS", + "100", + Patterns::Integer(1, 250), + "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); + + prm.declare_entry( + "NEB COORDINATES FILE", + "", + Patterns::Anything(), + "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); + + prm.declare_entry( + "NEB DOMAIN VECTORS FILE", + "", + Patterns::Anything(), + "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); + + + + } + prm.leave_subsection(); prm.enter_subsection("Molecular Dynamics"); { diff --git a/utils/runParameters.cc b/utils/runParameters.cc index 464486400..bf296e284 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -35,7 +35,7 @@ namespace dftfe "SOLVER MODE", "GS", Patterns::Selection("GS|MD|NEB|GEOOPT"), - "[Standard] DFT-FE SOLVER MODE: If GS: performs GroundState calculations. If MD: performs Molecular Dynamics Simulation. If NEB: performs a NEB calculation. If GEOOPT: performs an ion and/or cell optimization calculation."); + "[Standard] DFT-FE SOLVER MODE: If GS: performs GroundState calculations. If MD: performs Molecular Dynamics Simulation. If NEB: performs a Nudged Elastic Band calculation. If GEOOPT: performs an ion and/or cell optimization calculation."); prm.declare_entry( @@ -54,6 +54,60 @@ namespace dftfe ".", Patterns::Anything(), "[Standard] Folder to store restart files."); + prm.enter_subsection("NEB"); + { + + prm.declare_entry( + "ALLOW IMAGE FREEZING", + "false", + Patterns::Bool(), + "If true images less than threshold will freeze for optimization step"); + + prm.declare_entry( + "NUMBER OF IMAGES", + "1", + Patterns::Integer(1,50), + "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); + + prm.declare_entry( + "MAXIMUM SPRING CONSTANT", + "1e-1", + Patterns::Double(), + "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); + + prm.declare_entry( + "MINIMUM SPRING CONSTANT", + "5e-2", + Patterns::Double(), + "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); + + prm.declare_entry( + "PATH THRESHOLD", + "1e-1", + Patterns::Double(), + "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); + + + prm.declare_entry( + "MAXIMUM NUMBER OF NEB ITERATIONS", + "100", + Patterns::Integer(1, 250), + "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); + + prm.declare_entry( + "NEB COORDINATES FILE", + "", + Patterns::Anything(), + "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); + + prm.declare_entry( + "NEB DOMAIN VECTORS FILE", + "", + Patterns::Anything(), + "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); + + } + prm.leave_subsection(); } } // namespace internalRunParameters @@ -70,6 +124,22 @@ namespace dftfe solvermode = prm.get("SOLVER MODE"); restart = prm.get_bool("RESTART"); restartFilesPath = prm.get("RESTART FOLDER"); + prm.enter_subsection("NEB"); + { + numberOfImages = prm.get_integer("NUMBER OF IMAGES"); + imageFreeze = prm.get_bool("ALLOW IMAGE FREEZING"); + Kmax = prm.get_double("MAXIMUM SPRING CONSTANT"); + Kmin = prm.get_double("MINIMUM SPRING CONSTANT"); + pathThreshold = prm.get_double("maximumNEBiteration"); + coordinatesFileNEB = prm.get("NEB COORDINATES FILE"); + domainVectorsFileNEB = prm.get("NEB DOMAIN VECTORS FILE"); + + } + + + + + const bool printParametersToFile = false; if (printParametersToFile && From f6f0c870c975c5fa8a6f3ed1a162fb28e2bf14c3 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 10 Nov 2022 19:03:07 +0530 Subject: [PATCH 03/53] Cleanups. COmpiling. runNEB pending --- include/dft.h | 6 +- include/dftBase.h | 3 + include/nudgedElasticBandClass.h | 1 + src/dft/dft.cc | 6 +- src/neb/nudgedElasticBandClass.cc | 280 +++++++++++++++--------------- 5 files changed, 154 insertions(+), 142 deletions(-) diff --git a/include/dft.h b/include/dft.h index 8a9a7c595..34b14dcaa 100644 --- a/include/dft.h +++ b/include/dft.h @@ -344,6 +344,10 @@ namespace dftfe std::vector> getAtomLocationsFrac() const; + + + + /** * @brief Gets the current cell lattice vectors * @@ -1018,7 +1022,7 @@ namespace dftfe /// FIXME: remove atom type atributes from atomLocations std::vector> atomLocations, atomLocationsFractional, - d_reciprocalLatticeVectors, d_domainBoundingVectors; + d_reciprocalLatticeVectors, d_domainBoundingVectors,d_atomLocationsInitial; std::vector> d_atomLocationsAutoMesh; std::vector> d_imagePositionsAutoMesh; diff --git a/include/dftBase.h b/include/dftBase.h index efa7d93dc..c1fa1e460 100644 --- a/include/dftBase.h +++ b/include/dftBase.h @@ -112,6 +112,9 @@ namespace dftfe getAtomLocationsFrac() const = 0; + + + /** * @brief Gets the current cell lattice vectors * diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 0653b813e..56d9b4eda 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -117,6 +117,7 @@ namespace dftfe unsigned int optimizermatItr; double Forcecutoff; unsigned int d_countrelaxationFlags; + std::map>> d_atomLocationsInitial; std::vector d_relaxationFlags; std::vector d_externalForceOnAtom; std::vector d_ForceonImages; diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 86893cfef..65fad4914 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -978,6 +978,7 @@ namespace dftfe d_imagePositionsTrunc, d_globalChargeIdToImageIdMapTrunc); } + } // dft init @@ -991,7 +992,8 @@ namespace dftfe dftUtils::printCurrentMemoryUsage(mpi_communicator, "Entering init"); initImageChargesUpdateKPoints(); - + //Set Initial atomLocations + d_atomLocationsInitial = atomLocations; calculateNearestAtomDistances(); computing_timer.enter_subsection("mesh generation"); @@ -4218,5 +4220,7 @@ namespace dftfe d_rhoOutNodalValuesSplit = OutDensity; } + + #include "dft.inst.cc" } // namespace dftfe diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 2cbeb0f24..2e3014221 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -37,7 +37,7 @@ namespace dftfe const MPI_Comm & mpi_comm_parent, const bool restart, const int verbosity, - int numberOfImages, + int d_numberOfImages, bool imageFreeze, double Kmax, double Kmin, @@ -50,7 +50,7 @@ namespace dftfe , pcout(std::cout, (Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) , d_restartFilesPath(restartFilesPath) , d_verbosity(verbosity) - , d_numberOfImages(numberOfImages) + , d_numberOfImages(d_numberOfImages) , d_imageFreeze(imageFreeze) , d_kmax(Kmax) , d_kmin(Kmin) @@ -107,20 +107,20 @@ namespace dftfe void nudgedElasticBandClass::CalculatePathTangent(int image , std::vector &tangent ) { - /* unsigned int count = 0; - if(image !=0 && image != numberofImages-1) + unsigned int count = 0; + if(image !=0 && image != d_numberOfImages-1) { std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; - atomLocationsi=dftPtr[image]->getAtomLocationsCart(); - atomLocationsiminus=dftPtr[image-1]->getAtomLocationsCart(); - atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart(); + atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiminus=(d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart(); double GSEnergyminus, GSEnergyplus,GSEnergy; - GSEnergyminus = dftPtr[image-1]->getInternalEnergy() ; - GSEnergyplus = dftPtr[image+1]->getInternalEnergy() ; - GSEnergy = dftPtr[image]->getInternalEnergy(); + GSEnergyminus = (d_dftfeWrapper[image-1]->getDftfeBasePtr())->getInternalEnergy() ; + GSEnergyplus = (d_dftfeWrapper[image+1]->getDftfeBasePtr())->getInternalEnergy() ; + GSEnergy = (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy(); if(GSEnergyplus > GSEnergy && GSEnergy > GSEnergyminus) { - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -149,7 +149,7 @@ namespace dftfe } else if(GSEnergyminus > GSEnergy && GSEnergy > GSEnergyplus) { - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -186,7 +186,7 @@ namespace dftfe if(GSEnergyplus > GSEnergyminus) { - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -235,7 +235,7 @@ namespace dftfe } else if(GSEnergyplus < GSEnergyminus) { - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -282,7 +282,7 @@ namespace dftfe } else - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -310,14 +310,14 @@ namespace dftfe } } - ReturnNormedVector(tangent, countrelaxationFlags); + ReturnNormedVector(tangent, d_countrelaxationFlags); } else if(image == 0) { std::vector> atomLocationsi,atomLocationsiplus; - atomLocationsi=dftPtr[image]->getAtomLocationsCart(); - atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart(); - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart(); + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -343,15 +343,15 @@ namespace dftfe } } } - ReturnNormedVector(tangent, countrelaxationFlags); + ReturnNormedVector(tangent, d_countrelaxationFlags); } - else if(image == numberofImages-1 ) + else if(image == d_numberOfImages-1 ) { std::vector> atomLocationsi, atomLocationsiminus; - atomLocationsi=dftPtr[image]->getAtomLocationsCart(); - atomLocationsiminus=dftPtr[image-1]->getAtomLocationsCart(); - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiminus=(d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -377,17 +377,17 @@ namespace dftfe } } } - ReturnNormedVector(tangent,countrelaxationFlags); + ReturnNormedVector(tangent,d_countrelaxationFlags); } - */ + } void nudgedElasticBandClass::ReturnNormedVector(std::vector &v, int len ) { - /*int i; + int i; double norm = 0.0000; for(i = 0; i & ForceSpring, std::vector tangent ) { - /*unsigned int count = 0; + unsigned int count = 0; double innerproduct = 0.0; - if(image != 0 && image != numberofImages-1 ) + if(image != 0 && image != d_numberOfImages-1 ) { double norm1=0.0; double norm2 = 0.0; - std::vector v1(countrelaxationFlags,0.0); - std::vector v2(countrelaxationFlags,0.0); + std::vector v1(d_countrelaxationFlags,0.0); + std::vector v2(d_countrelaxationFlags,0.0); std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; - atomLocationsi=dftPtr[image]->getAtomLocationsCart( ); - atomLocationsiminus=dftPtr[image-1]->getAtomLocationsCart(); - atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart(); + atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart( ); + atomLocationsiminus=(d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart(); int count = 0; - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -455,8 +455,8 @@ namespace dftfe } - LNorm(norm1,v1,2,countrelaxationFlags); - LNorm(norm2,v2,2,countrelaxationFlags); + LNorm(norm1,v1,2,d_countrelaxationFlags); + LNorm(norm2,v2,2,d_countrelaxationFlags); double kplus,kminus,k; CalculateSpringConstant(image+1,kplus); @@ -469,11 +469,11 @@ namespace dftfe { double norm1=0.0; std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; - std::vector v1(countrelaxationFlags,0.0); - atomLocationsi=dftPtr[image]->getAtomLocationsCart( ); - atomLocationsiplus=dftPtr[image+1]->getAtomLocationsCart( ); + std::vector v1(d_countrelaxationFlags,0.0); + atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart( ); + atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart( ); int count = 0; - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -492,22 +492,22 @@ namespace dftfe } - LNorm(norm1,v1,2,countrelaxationFlags); + LNorm(norm1,v1,2,d_countrelaxationFlags); double k,kplus; CalculateSpringConstant(image+1,kplus); CalculateSpringConstant(image,k); innerproduct = 0.5*(kplus+k)*norm1; } - else if(image == numberofImages -1) + else if(image == d_numberOfImages -1) { double norm2 = 0.0; std::vector> atomLocationsi, atomLocationsiminus,atomLocationsplus; - std::vector v2(countrelaxationFlags,0.0); - atomLocationsi=dftPtr[image]->getAtomLocationsCart(); - atomLocationsiminus= dftPtr[image-1]->getAtomLocationsCart( ); + std::vector v2(d_countrelaxationFlags,0.0); + atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiminus= (d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); int count = 0; - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0;j < 3; j++) { @@ -526,7 +526,7 @@ namespace dftfe } - LNorm(norm2,v2,2,countrelaxationFlags); + LNorm(norm2,v2,2,d_countrelaxationFlags); double k, kminus; CalculateSpringConstant(image,k); CalculateSpringConstant(image-1,kminus); @@ -534,13 +534,13 @@ namespace dftfe } pcout<<"Spring Force on image: "< & Forceparallel, std::vector tangent ) { - /*if(true) + if(true) { - std::vector forceonAtoms(3 * numberGlobalCharges, 0.0); - forceonAtoms=dftPtr[image]->getForceonAtoms(); + std::vector forceonAtoms(3 * d_numberGlobalCharges, 0.0); + forceonAtoms=(d_dftfeWrapper[image]->getDftfeBasePtr())->getForceonAtoms(); double Innerproduct = 0.0; unsigned int count = 0; - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0; j < 3; j++) { @@ -568,7 +568,7 @@ namespace dftfe } - for(count = 0; count < countrelaxationFlags; count++) + for(count = 0; count < d_countrelaxationFlags; count++) { Forceparallel[count] = Innerproduct*tangent[count]; @@ -576,7 +576,7 @@ namespace dftfe } - } */ + } } @@ -584,11 +584,11 @@ namespace dftfe nudgedElasticBandClass::CalculateForceperpendicular(int image , std::vector & Forceperpendicular, std::vector Forceparallel, std::vector tangent ) { - /*std::vector forceonAtoms(3 * numberGlobalCharges, 0.0); - forceonAtoms=dftPtr[image]->getForceonAtoms(); + std::vector forceonAtoms(3 * d_numberGlobalCharges, 0.0); + forceonAtoms=(d_dftfeWrapper[image]->getDftfeBasePtr())->getForceonAtoms(); unsigned int count = 0; - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for(int j = 0; j < 3 ; j++) { @@ -601,7 +601,7 @@ namespace dftfe } - */ + } @@ -700,12 +700,12 @@ namespace dftfe - d_ImageError.resize(numberofImages); + d_ImageError.resize(d_numberOfImages); double Force; MPI_Barrier(d_mpiCommParent); step_time = MPI_Wtime(); - for(int i = 0; i < numberofImages; i++) + for(int i = 0; i < d_numberOfImages; i++) { NEBImageno = i; dftPtr[NEBImageno]->solve(true,false,false,false); @@ -718,7 +718,7 @@ namespace dftfe pcout<<" "<<" Image No "<<" "<<"Force perpendicular in eV/A"<<" "<<"Internal Energy in eV"<<" "<> atomLocations; @@ -728,7 +728,7 @@ namespace dftfe double Energy = (dftPtr[i]->getInternalEnergy() )*haToeV; pcout<<" "< Forcecutoff && i > 0 && i < numberofImages-1) + if (Force > Forcecutoff && i > 0 && i < d_numberOfImages-1) { flag = false; } @@ -753,7 +753,7 @@ namespace dftfe dftParameters::maxLineSearchIterCGPRP; const double maxDisplacmentInAnyComponent = 0.5; // Bohr const unsigned int debugLevel = - Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0 ? + Utilities::MPI::d_this_mpi_process(MPI_COMM_WORLD) == 0 ? dftParameters::verbosity : 0; @@ -808,7 +808,7 @@ namespace dftfe { cg_descent.set_step(0.8); cg_descent.set_lbfgs(true); - if (this_mpi_process == 0) + if (d_this_mpi_process == 0) cg_descent.set_PrintLevel(2); unsigned int memory = @@ -825,7 +825,7 @@ namespace dftfe else { cg_descent.set_step(0.8); - if (this_mpi_process == 0) + if (d_this_mpi_process == 0) cg_descent.set_PrintLevel(2); cg_descent.set_AWolfe(true); @@ -864,9 +864,9 @@ namespace dftfe ForceonImages.clear(); count = 0; - std::vector> filePositionData(numberGlobalCharges*numberofImages, + std::vector> filePositionData(numberGlobalCharges*d_numberOfImages, std::vector(5,0.0)); - for (int i = 0; i < numberofImages; i++) + for (int i = 0; i < d_numberOfImages; i++) { NEBImageno = i; std::vector> atomLocations; @@ -876,7 +876,7 @@ namespace dftfe double Energy = (dftPtr[i]->getInternalEnergy())*haToeV; pcout<<" "< Forcecutoff && i > 0 && i < numberofImages-1) + if (Force > Forcecutoff && i > 0 && i < d_numberOfImages-1) { flag = false; } @@ -902,12 +902,12 @@ namespace dftfe pcout<<"--------------Final Ground State Results-------------"< tangent(countrelaxationFlags,0.0); @@ -964,14 +964,14 @@ void void nudgedElasticBandClass::gradient(std::vector &gradient) { - /*gradient.clear(); - std::vector flagmultiplier(numberofImages,1); + gradient.clear(); + std::vector flagmultiplier(d_numberOfImages,1); bool flag = false; pcout<<" "<<" Image No "<<" "<<"Internal Energy in eV"<<" "<<"Free Energy in eV"<<" "<getInternalEnergy() - dftPtr[i]->getEntropicEnergy())*haToeV; - double InternalEnergy = (dftPtr[i]->getInternalEnergy())*haToeV; + double FreeEnergy = ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[i]->getDftfeBasePtr())->getEntropicEnergy())*haToeV; + double InternalEnergy = ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy())*haToeV; pcout<<" "< optimizertolerance ) + else if(Force > d_optimizertolerance ) flag = false; } - ImageError(numberofImages-1,Force); - d_ImageError[numberofImages-1]=Force; + ImageError(d_numberOfImages-1,Force); + d_ImageError[d_numberOfImages-1]=Force; if(flag == true) pcout<<"Optimization Criteria Met!!"< tangent(countrelaxationFlags,0.0); - std::vector Forceparallel(countrelaxationFlags,0.0); - std::vector Forceperpendicular(countrelaxationFlags,0.0); - std::vector SpringForce(countrelaxationFlags,0.0); - std::vector ForceonImage(countrelaxationFlags,0.0); + std::vector tangent(d_countrelaxationFlags,0.0); + std::vector Forceparallel(d_countrelaxationFlags,0.0); + std::vector Forceperpendicular(d_countrelaxationFlags,0.0); + std::vector SpringForce(d_countrelaxationFlags,0.0); + std::vector ForceonImage(d_countrelaxationFlags,0.0); CalculatePathTangent(image, tangent); CalculateForceparallel(image, Forceparallel, tangent); CalculateForceperpendicular(image,Forceperpendicular,Forceparallel,tangent); @@ -1020,13 +1020,13 @@ void CalculateForceonImage(Forceperpendicular,SpringForce,ForceonImage); double F_spring = 0.0; double F_per = 0.0; - LNorm(F_per,Forceperpendicular,0,countrelaxationFlags); - LNorm(F_spring,SpringForce,0,countrelaxationFlags); + LNorm(F_per,Forceperpendicular,0,d_countrelaxationFlags); + LNorm(F_spring,SpringForce,0,d_countrelaxationFlags); pcout< Forceperpendicular, std::vector SpringForce, std::vector &ForceonImage) { - /*unsigned int count = 0; + unsigned int count = 0; // pcout<<"Forces on Image "< 0 && NEBImageno < numberofImages ) + for(count = 0; count < d_countrelaxationFlags; count++) + { if(NEBImageno > 0 && NEBImageno < d_numberOfImages ) ForceonImage[count] = SpringForce[count] +Forceperpendicular[count]; else ForceonImage[count] = Forceperpendicular[count]; @@ -1075,7 +1075,7 @@ void } // pcout<<"****************************"<> globalAtomsDisplacements(numberGlobalCharges); + std::vector> globalAtomsDisplacements(d_numberGlobalCharges); - for(int image = 1; image< numberofImages-1; image++) + for(int image = 1; image< d_numberOfImages-1; image++) { int multiplier = 1; pcout<<"Update called for image: "< 0.4) globalAtomsDisplacements[i][j] = 0.4; else if (globalAtomsDisplacements[i][j] < -0.4) @@ -1144,12 +1144,12 @@ void if(multiplier == 1) { MPI_Barrier(d_mpiCommParent); - dftPtr[image]->updateAtomPositionsAndMoveMesh(globalAtomsDisplacements, + (d_dftfeWrapper[image]->getDftfeBasePtr())->updateAtomPositionsAndMoveMesh(globalAtomsDisplacements, factor, useSingleAtomSolutionsInitialGuess); pcout<<"--Positions of image: "<solve(true,false,false,false); + (d_dftfeWrapper[image]->getDftfeBasePtr())->solve(true,false); } @@ -1157,7 +1157,7 @@ void } d_totalUpdateCalls += 1; - */ + } @@ -1182,18 +1182,18 @@ void void nudgedElasticBandClass::solution(std::vector &solution) { - /* // AssertThrow(false,dftUtils::ExcNotImplementedYet()); + // AssertThrow(false,dftUtils::ExcNotImplementedYet()); solution.clear(); pcout<<"The size of solution vector is: "<> atomLocations, atomLocationsInitial; - atomLocations=dftPtr[image]->getAtomLocationsCart(); - dftPtr[image]->getAtomLocationsinitial(atomLocationsInitial); + atomLocations=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsInitial = d_atomLocationsInitial[image]; pcout<<"AtomLocation size "<> atomLocations; @@ -1271,7 +1271,7 @@ void nudgedElasticBandClass::getNumberUnknowns() const { - //return (countrelaxationFlags*(numberofImages-2)); + return (d_countrelaxationFlags*(d_numberOfImages-2)); } @@ -1279,16 +1279,16 @@ void void nudgedElasticBandClass::CalculatePathLength(double & length) { - /*length = 0.0; + length = 0.0; std::vector> atomLocations, atomLocationsInitial; - for (int i = 0 ; i < numberofImages-1; i++) + for (int i = 0 ; i < d_numberOfImages-1; i++) { - atomLocations=dftPtr[i+1]->getAtomLocationsCart(); - atomLocationsInitial=dftPtr[i]->getAtomLocationsCart(); + atomLocations=(d_dftfeWrapper[i+1]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsInitial=(d_dftfeWrapper[i]->getDftfeBasePtr())->getAtomLocationsCart(); double tempx,tempy,tempz,temp; temp=0.0; - for(int iCharge = 0; iCharge < numberGlobalCharges ; iCharge++) + for(int iCharge = 0; iCharge < d_numberGlobalCharges ; iCharge++) { tempx = std::fabs(atomLocations[iCharge][2]-atomLocationsInitial[iCharge][2]); @@ -1306,27 +1306,27 @@ void } - */ + } void nudgedElasticBandClass::CalculateSpringConstant( int NEBImage, double & SpringConstant) { - /*SpringConstant = 0.0; + SpringConstant = 0.0; double Emin,ksum,kdiff,deltaE,Emax; - ksum = kmax+kmin; - kdiff = kmax-kmin; + ksum = d_kmax+d_kmin; + kdiff = d_kmax-d_kmin; double Ei; Emax = -5000000; Emin = 500; -for (int image = 0; image < numberofImages-1; image++) +for (int image = 0; image < d_numberOfImages-1; image++) { - Emax = std::max(Emax,dftPtr[image]->getInternalEnergy() - dftPtr[image]->getEntropicEnergy() ); - Emin = std::min(Emin,dftPtr[image]->getInternalEnergy() - dftPtr[image]->getEntropicEnergy()); + Emax = std::max(Emax,(d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy() ); + Emin = std::min(Emin,(d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy()); } deltaE = Emax-Emin; -Ei = dftPtr[NEBImage]->getInternalEnergy() - dftPtr[NEBImage]->getEntropicEnergy(); +Ei = (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getEntropicEnergy(); @@ -1334,7 +1334,7 @@ SpringConstant =0.5*( ksum - kdiff*std::cos(pi*(Ei - Emin)/(deltaE))); pcout<<"Image number "<NEBwriteDomainAndAtomCoordinates(cordFolder,std::to_string(i)); } dftUtils::writeDataIntoFile(stepIndexData, newFolder3,d_mpiCommParent); - if(this_mpi_process == 0) + if(d_this_mpi_process == 0) { std::ofstream outfile; outfile.open(tempfolder+"/coordinates.inp", std::ios_base::app); - for(int i=0; i < numberofImages; i++) + for(int i=0; i < d_numberOfImages; i++) { std::vector> atomLocations; std::string coordinatesfolder = tempfolder+"/coordinates.inp"+std::to_string(i); @@ -1380,15 +1380,15 @@ void void nudgedElasticBandClass::ImageError(int image, double &Force) { - /*Force = 0.0; - std::vector tangent(countrelaxationFlags,0.0); - std::vector Forceparallel(countrelaxationFlags,0.0); - std::vector Forceperpendicular(countrelaxationFlags,0.0); + Force = 0.0; + std::vector tangent(d_countrelaxationFlags,0.0); + std::vector Forceparallel(d_countrelaxationFlags,0.0); + std::vector Forceperpendicular(d_countrelaxationFlags,0.0); CalculatePathTangent(image, tangent); CalculateForceparallel(image, Forceparallel, tangent); CalculateForceperpendicular(image,Forceperpendicular,Forceparallel,tangent); - LNorm(Force,Forceperpendicular,0,countrelaxationFlags); - */ + LNorm(Force,Forceperpendicular,0,d_countrelaxationFlags); + } bool From 01a9467f145723dde0c5cc1b763ce82dbca0d997 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Sat, 12 Nov 2022 12:36:02 +0530 Subject: [PATCH 04/53] Clean ups. Compilation success. --- include/dft.h | 5 +- include/dftBase.h | 2 - include/nudgedElasticBandClass.h | 239 +-- include/runParameters.h | 12 +- src/dft/dft.cc | 3 +- src/main.cc | 21 +- src/neb/nudgedElasticBandClass.cc | 2401 ++++++++++++++++------------- utils/dftParameters.cc | 50 +- utils/runParameters.cc | 70 +- 9 files changed, 1497 insertions(+), 1306 deletions(-) diff --git a/include/dft.h b/include/dft.h index 34b14dcaa..2b5bdadc0 100644 --- a/include/dft.h +++ b/include/dft.h @@ -346,8 +346,6 @@ namespace dftfe - - /** * @brief Gets the current cell lattice vectors * @@ -1022,7 +1020,8 @@ namespace dftfe /// FIXME: remove atom type atributes from atomLocations std::vector> atomLocations, atomLocationsFractional, - d_reciprocalLatticeVectors, d_domainBoundingVectors,d_atomLocationsInitial; + d_reciprocalLatticeVectors, d_domainBoundingVectors, + d_atomLocationsInitial; std::vector> d_atomLocationsAutoMesh; std::vector> d_imagePositionsAutoMesh; diff --git a/include/dftBase.h b/include/dftBase.h index c1fa1e460..77745860b 100644 --- a/include/dftBase.h +++ b/include/dftBase.h @@ -113,8 +113,6 @@ namespace dftfe - - /** * @brief Gets the current cell lattice vectors * diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 56d9b4eda..f9c046d14 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -27,120 +27,145 @@ namespace dftfe { + class nudgedElasticBandClass : public nonlinearSolverProblem + { + public: + nudgedElasticBandClass(const std::string parameter_file, + const std::string restartFilesPath, + const MPI_Comm & mpi_comm_parent, + const bool restart, + const int verbosity, + int numberOfImages, + bool imageFreeze, + double Kmax, + double Kmin, + double pathThreshold, + int maximumNEBIteration, + const std::string &coordinatesFileNEB, + const std::string &domainVectorsFile); + //~nudgedElasticBandClass(); + const double haPerBohrToeVPerAng = 27.211386245988 / 0.529177210903; + const double haToeV = 27.211386245988; + const double bohrToAng = 0.529177210903; + const double pi = 3.14159265359; + const double AngTobohr = 1.0 / bohrToAng; + double d_kmax = 0.1; // 0.1 Ha/bohr + double d_kmin = 0.1; // 0.1Ha/bohr + int d_NEBImageno; + + int + run(); + void + ReturnNormedVector(std::vector &, int); + void + LNorm(double &, std::vector, int, int); + void + gradient(std::vector &gradient); + + + unsigned int + getNumberUnknowns() const; + + void + update(const std::vector &solution, + const bool computeForces = true, + const bool useSingleAtomSolutionsInitialGuess = false); + + void + save(); + /** + * @brief initializes the data member d_relaxationFlags. + * + */ + void + init(); - class nudgedElasticBandClass : public nonlinearSolverProblem - { - public: - - - - nudgedElasticBandClass( - const std::string parameter_file, - const std::string restartFilesPath, - const MPI_Comm & mpi_comm_parent, - const bool restart, - const int verbosity, - int numberOfImages, - bool imageFreeze, - double Kmax, - double Kmin, - double pathThreshold, - int maximumNEBIteration, - const std::string &coordinatesFileNEB, - const std::string &domainVectorsFile ); - //~nudgedElasticBandClass(); - const double haPerBohrToeVPerAng = 27.211386245988 / 0.529177210903; - const double haToeV = 27.211386245988; - const double bohrToAng = 0.529177210903; - const double pi = 3.14159265359; - const double AngTobohr = 1.0 / bohrToAng; - double d_kmax = 0.1; //0.1 Ha/bohr - double d_kmin = 0.1; //0.1Ha/bohr - unsigned int NEBImageno ; - - int runNEB(); - void ReturnNormedVector(std::vector & , int); - void LNorm(double &, std::vector , int, int); - void gradient(std::vector &gradient); - - - unsigned int - getNumberUnknowns() const; - - void - update(const std::vector &solution, - const bool computeForces = true, - const bool useSingleAtomSolutionsInitialGuess = false); - - void - save(); - - void value(std::vector &functionValue); + + void + value(std::vector &functionValue); /// not implemented void precondition(std::vector &s, const std::vector &gradient); - void - solution(std::vector &solution); - - - - std::vector - getUnknownCountFlag() const; - - private: - std::vector> d_dftfeWrapper; - //std::vector d_dftPtr; - // parallel communication objects - const MPI_Comm d_mpiCommParent; - //const unsigned int n_mpi_processes; - const unsigned int d_this_mpi_process; - - // conditional stream object - dealii::ConditionalOStream pcout; - - int d_verbosity; - std::string d_restartFilesPath; - bool d_imageFreeze; - - /// total number of calls to update() - unsigned int d_totalUpdateCalls; - int d_startStep; - - unsigned int d_restartFlag; - unsigned int d_numberGlobalCharges; - double d_maximumAtomForceToBeRelaxed; - unsigned int d_numberOfImages; - unsigned int d_maximumNEBIteration; - double d_optimizertolerance; - unsigned int optimizermatItr; - double Forcecutoff; - unsigned int d_countrelaxationFlags; - std::map>> d_atomLocationsInitial; - std::vector d_relaxationFlags; - std::vector d_externalForceOnAtom; - std::vector d_ForceonImages; - std::vector d_ImageError; - std::vector d_Length; - std::string d_coordinatesFileNEB, d_domainVectorsFileNEB; - const MPI_Comm & - getMPICommunicator(); - void CalculatePathTangent(int , std::vector &); - void CalculateForceparallel(int , std::vector & , std::vector ); - void CalculateForceperpendicular(int , std::vector & , std::vector , std::vector); - void CalculateSpringForce(int , std::vector &, std::vector ); - void CalculateForceonImage(std::vector, std::vector, std::vector &); - void CalculatePathLength(double &); - void WriteRestartFiles(int step); - void CalculateSpringConstant(int, double & ); - void ImageError(int image, double &Force); + void + solution(std::vector &solution); + + + + std::vector + getUnknownCountFlag() const; + + private: + std::vector> d_dftfeWrapper; + dftBase * d_dftPtr; + std::unique_ptr d_nonLinearSolverPtr; + // parallel communication objects + const MPI_Comm d_mpiCommParent; + // const unsigned int n_mpi_processes; + const unsigned int d_this_mpi_process; + + // conditional stream object + dealii::ConditionalOStream pcout; + + int d_verbosity; + std::string d_restartFilesPath; + bool d_imageFreeze; + + /// total number of calls to update() + unsigned int d_totalUpdateCalls; + int d_startStep; + int d_solver; + bool d_isRestart; + bool d_solverRestart; + unsigned int d_restartFlag; + unsigned int d_numberGlobalCharges; + double d_maximumAtomForceToBeRelaxed; + unsigned int d_numberOfImages; + unsigned int d_maximumNEBIteration; + double d_optimizertolerance; + unsigned int optimizermatItr; + double Forcecutoff; + unsigned int d_countrelaxationFlags; + std::vector d_forceOnImages; + std::map>> d_atomLocationsInitial; + std::vector d_relaxationFlags; + std::vector d_externalForceOnAtom; + std::vector d_ForceonImages; + std::vector d_ImageError; + std::vector d_Length; + std::string d_coordinatesFileNEB, d_domainVectorsFileNEB; + const MPI_Comm & + getMPICommunicator(); + void + CalculatePathTangent(int, std::vector &); + void + CalculateForceparallel(int, std::vector &, std::vector); + void + CalculateForceperpendicular(int, + std::vector &, + std::vector, + std::vector); + void + CalculateSpringForce(int, std::vector &, std::vector); + void + CalculateForceonImage(std::vector, + std::vector, + std::vector &); + void + CalculatePathLength(double &) const; + void + WriteRestartFiles(int step); + void + CalculateSpringConstant(int, double &); + void + ImageError(int image, double &Force); /** * @brief set() initalises all the private datamembers of nudgedElasticBandClass object from the parameters declared by user. */ void - set(); + set(); /** * @brief check for convergence. @@ -148,10 +173,8 @@ namespace dftfe */ bool isConverged() const; - - - }; + }; -}// namespace dftfe -#endif \ No newline at end of file +} // namespace dftfe +#endif diff --git a/include/runParameters.h b/include/runParameters.h index 5f9aa7536..c3361d79c 100644 --- a/include/runParameters.h +++ b/include/runParameters.h @@ -36,12 +36,12 @@ namespace dftfe std::string solvermode; bool restart; std::string restartFilesPath; - int numberOfImages; - bool imageFreeze; - double Kmax; - double Kmin; - double pathThreshold; - int maximumNEBiteration; + int numberOfImages; + bool imageFreeze; + double Kmax; + double Kmin; + double pathThreshold; + int maximumNEBiteration; std::string coordinatesFileNEB, domainVectorsFileNEB; runParameters() = default; diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 65fad4914..d1758fe82 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -978,7 +978,6 @@ namespace dftfe d_imagePositionsTrunc, d_globalChargeIdToImageIdMapTrunc); } - } // dft init @@ -992,7 +991,7 @@ namespace dftfe dftUtils::printCurrentMemoryUsage(mpi_communicator, "Entering init"); initImageChargesUpdateKPoints(); - //Set Initial atomLocations + // Set Initial atomLocations d_atomLocationsInitial = atomLocations; calculateNearestAtomDistances(); diff --git a/src/main.cc b/src/main.cc index 527db49a0..a0ade9799 100644 --- a/src/main.cc +++ b/src/main.cc @@ -171,12 +171,21 @@ main(int argc, char *argv[]) else if (runParams.solvermode == "NEB") { - dftfe::nudgedElasticBandClass nebClass(parameter_file,runParams.restartFilesPath,MPI_COMM_WORLD,runParams.restart,runParams.verbosity, - runParams.numberOfImages, runParams.imageFreeze,runParams.Kmax,runParams.Kmin,runParams.pathThreshold, - runParams.maximumNEBiteration, runParams.coordinatesFileNEB, runParams.domainVectorsFileNEB); - - int status = nebClass.runNEB(); - + dftfe::nudgedElasticBandClass nebClass(parameter_file, + runParams.restartFilesPath, + MPI_COMM_WORLD, + runParams.restart, + runParams.verbosity, + runParams.numberOfImages, + runParams.imageFreeze, + runParams.Kmax, + runParams.Kmin, + runParams.pathThreshold, + runParams.maximumNEBiteration, + runParams.coordinatesFileNEB, + runParams.domainVectorsFileNEB); + + int status = nebClass.run(); } else if (runParams.solvermode == "GEOOPT") { diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 2e3014221..6d1886d1b 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -27,1149 +27,954 @@ #include "nudgedElasticBandClass.h" #include - + namespace dftfe { - - nudgedElasticBandClass::nudgedElasticBandClass( - const std::string parameter_file, - const std::string restartFilesPath, - const MPI_Comm & mpi_comm_parent, - const bool restart, - const int verbosity, - int d_numberOfImages, - bool imageFreeze, - double Kmax, - double Kmin, - double pathThreshold, - int maximumNEBIteration, - const std::string & coordinatesFileNEB, - const std::string & domainVectorsFile ) + nudgedElasticBandClass::nudgedElasticBandClass( + const std::string parameter_file, + const std::string restartFilesPath, + const MPI_Comm & mpi_comm_parent, + const bool restart, + const int verbosity, + int d_numberOfImages, + bool imageFreeze, + double Kmax, + double Kmin, + double pathThreshold, + int maximumNEBIteration, + const std::string &coordinatesFileNEB, + const std::string &domainVectorsFile) : d_mpiCommParent(mpi_comm_parent) , d_this_mpi_process(Utilities::MPI::this_mpi_process(mpi_comm_parent)) , pcout(std::cout, (Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) , d_restartFilesPath(restartFilesPath) - , d_verbosity(verbosity) + , d_isRestart(restart) + , d_verbosity(verbosity) , d_numberOfImages(d_numberOfImages) , d_imageFreeze(imageFreeze) , d_kmax(Kmax) , d_kmin(Kmin) , d_optimizertolerance(pathThreshold) - , d_maximumNEBIteration(maximumNEBIteration) - - { - - pcout<<"Optimizer Tolerance set to: "<(parameter_file, + d_dftfeWrapper.push_back( + std::make_unique(parameter_file, coordinatesFile, domainVectorsFile, d_mpiCommParent, true, true, - "MD", + "NEB", d_restartFilesPath, false)); - // d_dftPtr.push_back(d_dftfeWrapper->getDftfeBasePtr())); - - - - } - - - - } - int - nudgedElasticBandClass::runNEB() - { - pcout<<"Here"<getDftfeBasePtr())); + } + d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); + /* + std::vector> temp_domainBoundingVectors; + dftUtils::readFile(3, + temp_domainBoundingVectors, + dftParameters::domainBoundingVectorsFile); + + for (int i = 0; i < 3; i++) + { + double temp = + temp_domainBoundingVectors[i][0] * + temp_domainBoundingVectors[i][0] + temp_domainBoundingVectors[i][1] * + temp_domainBoundingVectors[i][1] + temp_domainBoundingVectors[i][2] * + temp_domainBoundingVectors[i][2]; d_Length.push_back(pow(temp, 0.5)); + } + pcout << "--$ Domain Length$ --" << std::endl; + pcout << "Lx:= " << d_Length[0] << " Ly:=" << d_Length[1] + << " Lz:=" << d_Length[2] << std::endl; */ + init(); } - + + const MPI_Comm & - nudgedElasticBandClass::getMPICommunicator() + nudgedElasticBandClass::getMPICommunicator() { return d_mpiCommParent; - } - - + } + + void - nudgedElasticBandClass::CalculatePathTangent(int image , std::vector &tangent ) + nudgedElasticBandClass::CalculatePathTangent(int image, + std::vector &tangent) { - unsigned int count = 0; - if(image !=0 && image != d_numberOfImages-1) + unsigned int count = 0; + if (image != 0 && image != d_numberOfImages - 1) { - std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; - atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiminus=(d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart(); - double GSEnergyminus, GSEnergyplus,GSEnergy; - GSEnergyminus = (d_dftfeWrapper[image-1]->getDftfeBasePtr())->getInternalEnergy() ; - GSEnergyplus = (d_dftfeWrapper[image+1]->getDftfeBasePtr())->getInternalEnergy() ; - GSEnergy = (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy(); - if(GSEnergyplus > GSEnergy && GSEnergy > GSEnergyminus) - { - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + std::vector> atomLocationsi, atomLocationsiminus, + atomLocationsiplus; + atomLocationsi = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); + atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); + double GSEnergyminus, GSEnergyplus, GSEnergy; + GSEnergyminus = + (d_dftfeWrapper[image - 1]->getDftfeBasePtr())->getInternalEnergy(); + GSEnergyplus = + (d_dftfeWrapper[image + 1]->getDftfeBasePtr())->getInternalEnergy(); + GSEnergy = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy(); + if (GSEnergyplus > GSEnergy && GSEnergy > GSEnergyminus) { - for(int j = 0;j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - double temp = atomLocationsiplus[iCharge][j+2] - atomLocationsi[iCharge][j+2]; - if(temp > d_Length[j]/2) + for (int j = 0; j < 3; j++) { - //pcout<<"Before: "< d_Length[j] / 2) + { + // pcout<<"Before: "< GSEnergy && GSEnergy > GSEnergyplus) - { - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + else if (GSEnergyminus > GSEnergy && GSEnergy > GSEnergyplus) { - for(int j = 0;j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - double temp = atomLocationsi[iCharge][j+2] - atomLocationsiminus[iCharge][j+2]; - if(temp > d_Length[j]/2) + for (int j = 0; j < 3; j++) { - //pcout<<"Before: "< d_Length[j] / 2) + { + // pcout<<"Before: "< GSEnergyminus) - { - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + if (GSEnergyplus > GSEnergyminus) { - for(int j = 0;j < 3; j++) + for (int iCharge = 0; iCharge < d_numberGlobalCharges; + iCharge++) { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int j = 0; j < 3; j++) { - double temp1 = atomLocationsiplus[iCharge][j+2] - atomLocationsi[iCharge][j+2]; - double temp2 = atomLocationsi[iCharge][j+2] - atomLocationsiminus[iCharge][j+2]; - if(temp1 > d_Length[j]/2) - { - //pcout<<"Before: "< d_Length[j]/2) - { - //pcout<<"Before: "< d_Length[j] / 2) + { + // pcout<<"Before: "< d_Length[j] / 2) + { + // pcout<<"Before: "< d_Length[j]/2) - { - //pcout<<"Before: "< d_Length[j]/2) - { - //pcout<<"Before: "< d_Length[j] / 2) + { + // pcout<<"Before: "< d_Length[j] / 2) + { + // pcout<<"Before: "< d_Length[j]/2) + } + } + } + + else + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + { + for (int j = 0; j < 3; j++) + { + if (d_relaxationFlags[3 * iCharge + j] == 1) + { + double temp = (atomLocationsiplus[iCharge][j + 2] - + atomLocationsiminus[iCharge][j + 2]); + if (temp > d_Length[j] / 2) { - //pcout<<"Before: "<> atomLocationsi,atomLocationsiplus; - atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart(); - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + else if (image == 0) + { + std::vector> atomLocationsi, atomLocationsiplus; + atomLocationsi = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - for(int j = 0;j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int j = 0; j < 3; j++) { - double temp = (atomLocationsiplus[iCharge][j+2] - atomLocationsi[iCharge][j+2]); - if(temp > d_Length[j]/2) - { - //pcout< d_Length[j] / 2) + { + // pcout<> atomLocationsi, atomLocationsiminus; - atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiminus=(d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + } + ReturnNormedVector(tangent, d_countrelaxationFlags); + } + else if (image == d_numberOfImages - 1) + { + std::vector> atomLocationsi, atomLocationsiminus; + atomLocationsi = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - for(int j = 0;j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int j = 0; j < 3; j++) { - double temp = (atomLocationsi[iCharge][j+2] - atomLocationsiminus[iCharge][j+2]); - if(temp > d_Length[j]/2) - { - //pcout< d_Length[j] / 2) + { + // pcout< &v, int len ) + nudgedElasticBandClass::ReturnNormedVector(std::vector &v, int len) { - int i; - double norm = 0.0000; - for(i = 0; i 0.000000000001, - ExcMessage("DFT-FE Error: cordinates have 0 displacement between images")); - for(i = 0; i 0.000000000001, + ExcMessage( + "DFT-FE Error: cordinates have 0 displacement between images")); + for (i = 0; i < len; i++) { - v[i] = v[i]/norm; - } - + v[i] = v[i] / norm; + } + } - } - void - nudgedElasticBandClass::CalculateSpringForce(int image , std::vector & ForceSpring, std::vector tangent ) + nudgedElasticBandClass::CalculateSpringForce(int image, + std::vector &ForceSpring, + std::vector tangent) { - - unsigned int count = 0; - double innerproduct = 0.0; - if(image != 0 && image != d_numberOfImages-1 ) - { - double norm1=0.0; - double norm2 = 0.0; - std::vector v1(d_countrelaxationFlags,0.0); - std::vector v2(d_countrelaxationFlags,0.0); - std::vector> atomLocationsi, atomLocationsiminus,atomLocationsiplus; - atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart( ); - atomLocationsiminus=(d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart(); - int count = 0; - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + unsigned int count = 0; + double innerproduct = 0.0; + if (image != 0 && image != d_numberOfImages - 1) + { + double norm1 = 0.0; + double norm2 = 0.0; + std::vector v1(d_countrelaxationFlags, 0.0); + std::vector v2(d_countrelaxationFlags, 0.0); + std::vector> atomLocationsi, atomLocationsiminus, + atomLocationsiplus; + atomLocationsi = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); + atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); + int count = 0; + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - for(int j = 0;j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int j = 0; j < 3; j++) { - v1[count] = std::fabs(atomLocationsiplus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); - v2[count] = std::fabs(atomLocationsiminus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); - - if(d_Length[j]/2 <= v1[count] ) - { - //pcout<<"Before: "<> atomLocationsi, atomLocationsiminus,atomLocationsiplus; - std::vector v1(d_countrelaxationFlags,0.0); - atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart( ); - atomLocationsiplus=(d_dftfeWrapper[image+1]->getDftfeBasePtr())->getAtomLocationsCart( ); + double norm1 = 0.0; + std::vector> atomLocationsi, atomLocationsiminus, + atomLocationsiplus; + std::vector v1(d_countrelaxationFlags, 0.0); + atomLocationsi = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); int count = 0; - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - for(int j = 0;j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int j = 0; j < 3; j++) { - v1[count] = std::fabs(atomLocationsiplus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); - if(d_Length[j]/2 <= v1[count] ) - { - //pcout<<"Before: "<> atomLocationsi, atomLocationsiminus,atomLocationsplus; - std::vector v2(d_countrelaxationFlags,0.0); - atomLocationsi=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiminus= (d_dftfeWrapper[image-1]->getDftfeBasePtr())->getAtomLocationsCart(); + double norm2 = 0.0; + std::vector> atomLocationsi, atomLocationsiminus, + atomLocationsplus; + std::vector v2(d_countrelaxationFlags, 0.0); + atomLocationsi = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) + ->getAtomLocationsCart(); int count = 0; - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - for(int j = 0;j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int j = 0; j < 3; j++) { - v2[count] = std::fabs(atomLocationsiminus[iCharge][j+2]-atomLocationsi[iCharge][j+2]); - if(d_Length[j]/2 <= v2[count] ) - { - //pcout<<"Before: "< & Forceparallel, std::vector tangent ) - { - if(true) + nudgedElasticBandClass::CalculateForceparallel( + int image, + std::vector &Forceparallel, + std::vector tangent) + { + if (true) { std::vector forceonAtoms(3 * d_numberGlobalCharges, 0.0); - forceonAtoms=(d_dftfeWrapper[image]->getDftfeBasePtr())->getForceonAtoms(); - double Innerproduct = 0.0; - unsigned int count = 0; + forceonAtoms = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getForceonAtoms(); + double Innerproduct = 0.0; + unsigned int count = 0; - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - for(int j = 0; j < 3; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) + for (int j = 0; j < 3; j++) { - Innerproduct = Innerproduct-forceonAtoms[3*iCharge+j]*tangent[count]; - count++; + if (d_relaxationFlags[3 * iCharge + j] == 1) + { + Innerproduct = + Innerproduct - + forceonAtoms[3 * iCharge + j] * tangent[count]; + count++; + } } - } - - } - for(count = 0; count < d_countrelaxationFlags; count++) + for (count = 0; count < d_countrelaxationFlags; count++) { - - Forceparallel[count] = Innerproduct*tangent[count]; - - - } - - } - } - - - void - nudgedElasticBandClass::CalculateForceperpendicular(int image , std::vector & Forceperpendicular, std::vector Forceparallel, std::vector tangent ) - { - - std::vector forceonAtoms(3 * d_numberGlobalCharges, 0.0); - forceonAtoms=(d_dftfeWrapper[image]->getDftfeBasePtr())->getForceonAtoms(); - unsigned int count = 0; - - for(int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) - { - for(int j = 0; j < 3 ; j++) - { - if(d_relaxationFlags[3 * iCharge + j] == 1) - { - Forceperpendicular[count] = -forceonAtoms[3*iCharge+j] - Forceparallel[count]; - count++; - } - } - - + Forceparallel[count] = Innerproduct * tangent[count]; } - + } + } - } - /* void - nudgedElasticBandClass::runNEB() + nudgedElasticBandClass::CalculateForceperpendicular( + int image, + std::vector &Forceperpendicular, + std::vector Forceparallel, + std::vector tangent) { - // Freezing of atoms to be implemented later.... - double step_time; - std::vector> temp_domainBoundingVectors; - dftUtils::readFile(3,temp_domainBoundingVectors,dftParameters::domainBoundingVectorsFile) ; - - for(int i = 0; i < 3; i++) - { - double temp = temp_domainBoundingVectors[i][0]*temp_domainBoundingVectors[i][0] + - temp_domainBoundingVectors[i][1]*temp_domainBoundingVectors[i][1] + - temp_domainBoundingVectors[i][2]*temp_domainBoundingVectors[i][2] ; - d_Length.push_back( pow(temp,0.5)); - } - pcout<<"--$ Domain Length$ --"<> tempRelaxFlagsData; - std::vector> tempForceData; - dftUtils::readRelaxationFlagsFile(6, - tempRelaxFlagsData, - tempForceData, - dftParameters::ionRelaxFlagsFile); - AssertThrow(tempRelaxFlagsData.size() == numberGlobalCharges, - ExcMessage( - "Incorrect number of entries in relaxationFlags file")); - d_relaxationFlags.clear(); - d_externalForceOnAtom.clear(); - - - - for (unsigned int i = 0; i < numberGlobalCharges; ++i) + for (int j = 0; j < 3; j++) { - for (unsigned int j = 0; j < 3; ++j) + if (d_relaxationFlags[3 * iCharge + j] == 1) { - d_relaxationFlags.push_back(tempRelaxFlagsData[i][j]); - d_externalForceOnAtom.push_back(tempForceData[i][j]); + Forceperpendicular[count] = + -forceonAtoms[3 * iCharge + j] - Forceparallel[count]; + count++; } } - // print relaxation flags - pcout << " --------------Ion force relaxation flags----------------" - << std::endl; - for (unsigned int i = 0; i < numberGlobalCharges; ++i) - { - pcout << tempRelaxFlagsData[i][0] << " " - << tempRelaxFlagsData[i][1] << " " - << tempRelaxFlagsData[i][2] << std::endl; - } - pcout << " --------------------------------------------------" - << std::endl; } - else + } + + + int + nudgedElasticBandClass::run() + { + nonLinearSolver::ReturnValueType solverReturn = + d_nonLinearSolverPtr->solve(*this, + d_restartFilesPath + "/ionRelax.chk", + d_restartFlag); + + if (solverReturn == nonLinearSolver::SUCCESS && + d_dftPtr->getParametersObject().verbosity >= 1) { - d_relaxationFlags.clear(); - d_externalForceOnAtom.clear(); - for (unsigned int i = 0; i < numberGlobalCharges; ++i) + pcout + << " ...Ion force relaxation completed as maximum force magnitude is less than FORCE TOL: " + << d_dftPtr->getParametersObject().forceRelaxTol + << ", total number of ion position updates: " << d_totalUpdateCalls + << std::endl; + pcout << "--------------Final Ground State Results-------------" + << std::endl; + for (int i = 0; i < d_numberOfImages; i++) { - for (unsigned int j = 0; j < 3; ++j) - { - d_relaxationFlags.push_back(1.0); - d_externalForceOnAtom.push_back(0.0); - } + pcout << "Internal Energy of Image: " << i + 1 << " = " + << (d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() + << std::endl; } - // print relaxation flags - pcout << " --------------Ion force relaxation flags----------------" + pcout << "--------------Final Error Results(eV/A)-------------" << std::endl; - for (unsigned int i = 0; i < numberGlobalCharges; ++i) + for (int i = 0; i < d_numberOfImages; i++) { - pcout << 1.0 << " " << 1.0 << " " << 1.0 << std::endl; + d_NEBImageno = i; + std::vector tangent(d_countrelaxationFlags, 0.0); + std::vector Forceparallel(d_countrelaxationFlags, 0.0); + std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); + double Force = 0.0; + + CalculatePathTangent(d_NEBImageno, tangent); + CalculateForceparallel(d_NEBImageno, Forceparallel, tangent); + CalculateForceperpendicular(d_NEBImageno, + Forceperpendicular, + Forceparallel, + tangent); + LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); + pcout << "Error of Image: " << i + 1 << " = " + << Force * haPerBohrToeVPerAng << " eV/A" << std::endl; } - pcout << " --------------------------------------------------" - << std::endl; + return d_totalUpdateCalls; } - countrelaxationFlags = 0; - for(int i = 0; i < d_relaxationFlags.size(); i++) - { - if(d_relaxationFlags[i]==1) - countrelaxationFlags++; - } - pcout<<" Total No. of relaxation flags: "<solve(true,false,false,false); - dftPtr[NEBImageno]->setAtomLocationsinitial(); - pcout<<"##Completed initial GS of image: "<> atomLocations; - atomLocations=dftPtr[i]->getAtomLocationsCart(); - Force = 0.0; - ImageError(NEBImageno,Force); - double Energy = (dftPtr[i]->getInternalEnergy() )*haToeV; - pcout<<" "< Forcecutoff && i > 0 && i < d_numberOfImages-1) - { flag = false; - - } - } - MPI_Barrier(d_mpiCommParent); - double Length = 0.0; - CalculatePathLength(Length); - pcout<= 1 && dftParameters::restartFromChk) - pcout << "Re starting Ion force relaxation using nonlinear CG solver... " - << std::endl; - else - pcout << "Starting Ion force relaxation using nonlinear CG solver... " - << std::endl; - if (dftParameters::verbosity >= 1) + else if (solverReturn == nonLinearSolver::FAILURE) { - pcout << " ---Non-linear CG Parameters-------------- " << std::endl; - pcout << " stopping tol: " << tol << std::endl; - pcout << " maxIter: " << maxIter << std::endl; - pcout << " lineSearch tol: " << lineSearchTol << std::endl; - pcout << " lineSearch maxIter: " << maxLineSearchIter << std::endl; - pcout << " lineSearch damping parameter: " - << lineSearchDampingParameter << std::endl; - pcout << " ------------------------------ " << std::endl; + pcout << " ...Ion force relaxation failed " << std::endl; + d_totalUpdateCalls = -1; } - - MPI_Barrier(d_mpiCommParent); - step_time = MPI_Wtime(); - if (getNumberUnknowns() > 0) + else if (solverReturn == nonLinearSolver::MAX_ITER_REACHED) { - nonLinearSolver::ReturnValueType cgReturn = nonLinearSolver::FAILURE; - bool cgSuccess; - - if (dftParameters::chkType >= 1 && dftParameters::restartFromChk && - dftParameters::ionOptSolver == "CGPRP") - cgReturn = cgSolver.solve(*this, std::string("ionRelaxCG.chk"), true); - else if (dftParameters::chkType >= 1 && - !dftParameters::restartFromChk && - dftParameters::ionOptSolver == "CGPRP") - cgReturn = cgSolver.solve(*this, std::string("ionRelaxCG.chk")); - else if (dftParameters::ionOptSolver == "CGPRP") - cgReturn = cgSolver.solve(*this); - else if (dftParameters::ionOptSolver == "LBFGS") - { - cg_descent.set_step(0.8); - cg_descent.set_lbfgs(true); - if (d_this_mpi_process == 0) - cg_descent.set_PrintLevel(2); - - unsigned int memory = - std::min((unsigned int)100, getNumberUnknowns()); - if (memory <= 2) - memory = 0; - cg_descent.set_memory(memory); - cgSuccess = cg_descent.run(*this); - } - else if (dftParameters::ionOptSolver == "BFGS") - { - cgReturn = bfgsSolver.solve(*this); - } - else - { - cg_descent.set_step(0.8); - if (d_this_mpi_process == 0) - cg_descent.set_PrintLevel(2); - cg_descent.set_AWolfe(true); - - unsigned int memory = - std::min((unsigned int)100, getNumberUnknowns()); - if (memory <= 2) - memory = 0; - cg_descent.set_memory(memory); - cgSuccess = cg_descent.run(*this); - } - - if (cgReturn == nonLinearSolver::SUCCESS || cgSuccess) - { - pcout - << " ...Ion force relaxation completed as maximum force magnitude is less than FORCE TOL: " - << dftParameters::forceRelaxTol - << ", total number of ion position updates: " - << d_totalUpdateCalls << std::endl; - - - - } - else if (cgReturn == nonLinearSolver::FAILURE || !cgSuccess) - { - pcout << " ...Ion force relaxation failed " << std::endl; - } - else if (cgReturn == nonLinearSolver::MAX_ITER_REACHED) - { - pcout << " ...Maximum iterations reached " << std::endl; - } - } - flag = true; - pcout<> filePositionData(numberGlobalCharges*d_numberOfImages, - std::vector(5,0.0)); - for (int i = 0; i < d_numberOfImages; i++) - { - NEBImageno = i; - std::vector> atomLocations; - atomLocations=dftPtr[i]->getAtomLocationsCart(); - Force = 0.0; - ImageError(NEBImageno,Force); - double Energy = (dftPtr[i]->getInternalEnergy())*haToeV; - pcout<<" "< Forcecutoff && i > 0 && i < d_numberOfImages-1) - { flag = false; - - } - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) - { - for(int j = 0; j < 5; j++) - filePositionData[count][j] = atomLocations[iCharge][j]; - count++; - } - - } - MPI_Barrier(d_mpiCommParent); - Length = 0.0; - CalculatePathLength(Length); - pcout< tangent(countrelaxationFlags,0.0); - std::vector Forceparallel(countrelaxationFlags,0.0); - std::vector Forceperpendicular(countrelaxationFlags,0.0); - double Force = 0.0; - - CalculatePathTangent(NEBImageno, tangent); - CalculateForceparallel(NEBImageno, Forceparallel, tangent); - CalculateForceperpendicular(NEBImageno,Forceperpendicular,Forceparallel,tangent); - LNorm(Force,Forceperpendicular,0,countrelaxationFlags); - pcout<<"Error of Image: "< tangent(d_countrelaxationFlags, 0.0); + std::vector Forceparallel(d_countrelaxationFlags, 0.0); + std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); + double Force = 0.0; + + CalculatePathTangent(d_NEBImageno, tangent); + CalculateForceparallel(d_NEBImageno, Forceparallel, tangent); + CalculateForceperpendicular(d_NEBImageno, + Forceperpendicular, + Forceparallel, + tangent); + LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); + pcout << "Error of Image: " << i + 1 << " = " + << Force * haPerBohrToeVPerAng << " eV/A" << std::endl; + } + return d_totalUpdateCalls; } - */ - -void - nudgedElasticBandClass::LNorm(double & norm, std::vector v, int L, int len) -{ + + void + nudgedElasticBandClass::LNorm(double & norm, + std::vector v, + int L, + int len) + { norm = 0.0; - if(L == 2) - { - for(int i = 0; i < len; i++) - norm = norm + v[i]*v[i]; + if (L == 2) + { + for (int i = 0; i < len; i++) + norm = norm + v[i] * v[i]; norm = sqrt(norm); - } - if(L == 0) - { + } + if (L == 0) + { norm = -1; - for(int i = 0; i < len; i++) - norm = std::max(norm,fabs(v[i])); - } - if(L == 1) - { - norm = 0.0; - for(int i = 0; i < len; i++) + for (int i = 0; i < len; i++) + norm = std::max(norm, fabs(v[i])); + } + if (L == 1) + { + norm = 0.0; + for (int i = 0; i < len; i++) norm = norm + std::fabs(v[i]); - } + } + } -} - -void + void nudgedElasticBandClass::gradient(std::vector &gradient) - { + { gradient.clear(); - std::vector flagmultiplier(d_numberOfImages,1); - bool flag = false; - pcout<<" "<<" Image No "<<" "<<"Internal Energy in eV"<<" "<<"Free Energy in eV"<<" "<getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[i]->getDftfeBasePtr())->getEntropicEnergy())*haToeV; - double InternalEnergy = ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy())*haToeV; - pcout<<" "< flagmultiplier(d_numberOfImages, 1); + bool flag = false; + pcout << " " + << " Image No " + << " " + << "Internal Energy in eV" + << " " + << "Free Energy in eV" + << " " << std::endl; + for (int i = 0; i < d_numberOfImages; i++) + { + double FreeEnergy = + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() - + (d_dftfeWrapper[i]->getDftfeBasePtr())->getEntropicEnergy()) * + haToeV; + double InternalEnergy = + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * + haToeV; + pcout << " " << i << " " << InternalEnergy << " " << FreeEnergy + << " " << std::endl; + } + pcout << "************Error in gradient***************" << std::endl; double Force = 0.0; - ImageError(0,Force); - d_ImageError[0]=Force; - - for(int i = 1; i < d_numberOfImages-1; i++) - { - - NEBImageno = i; - ImageError(i,Force); - d_ImageError[i]=Force; - - pcout<<"The Force on image no. "< d_optimizertolerance) + flag = false; + } + + ImageError(d_numberOfImages - 1, Force); + d_ImageError[d_numberOfImages - 1] = Force; + + if (flag == true) + pcout << "Optimization Criteria Met!!" << std::endl; + + pcout << "Image No. Norm of F_per Norm of Spring Force" << std::endl; + for (int image = 1; image < d_numberOfImages - 1; image++) + { + std::vector tangent(d_countrelaxationFlags, 0.0); + std::vector Forceparallel(d_countrelaxationFlags, 0.0); + std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); + std::vector SpringForce(d_countrelaxationFlags, 0.0); + std::vector ForceonImage(d_countrelaxationFlags, 0.0); + CalculatePathTangent(image, tangent); + CalculateForceparallel(image, Forceparallel, tangent); + CalculateForceperpendicular(image, + Forceperpendicular, + Forceparallel, + tangent); + CalculateSpringForce(image, SpringForce, tangent); + CalculateForceonImage(Forceperpendicular, SpringForce, ForceonImage); + double F_spring = 0.0; + double F_per = 0.0; + LNorm(F_per, Forceperpendicular, 0, d_countrelaxationFlags); + LNorm(F_spring, SpringForce, 0, d_countrelaxationFlags); + pcout << image << " " << F_per << " " << F_spring << std::endl; + + // pcout<<"Before start of optimization Image Force: "< d_optimizertolerance ) - flag = false; - - } - - ImageError(d_numberOfImages-1,Force); - d_ImageError[d_numberOfImages-1]=Force; - - if(flag == true) - pcout<<"Optimization Criteria Met!!"< tangent(d_countrelaxationFlags,0.0); - std::vector Forceparallel(d_countrelaxationFlags,0.0); - std::vector Forceperpendicular(d_countrelaxationFlags,0.0); - std::vector SpringForce(d_countrelaxationFlags,0.0); - std::vector ForceonImage(d_countrelaxationFlags,0.0); - CalculatePathTangent(image, tangent); - CalculateForceparallel(image, Forceparallel, tangent); - CalculateForceperpendicular(image,Forceperpendicular,Forceparallel,tangent); - CalculateSpringForce(image,SpringForce,tangent); - CalculateForceonImage(Forceperpendicular,SpringForce,ForceonImage); - double F_spring = 0.0; - double F_per = 0.0; - LNorm(F_per,Forceperpendicular,0,d_countrelaxationFlags); - LNorm(F_spring,SpringForce,0,d_countrelaxationFlags); - pcout< d_maximumAtomForceToBeRelaxed) d_maximumAtomForceToBeRelaxed = temp; } - pcout< Forceperpendicular, std::vector SpringForce, - std::vector &ForceonImage) - { - unsigned int count = 0; - // pcout<<"Forces on Image "< 0 && NEBImageno < d_numberOfImages ) - ForceonImage[count] = SpringForce[count] +Forceperpendicular[count]; - else - ForceonImage[count] = Forceperpendicular[count]; - //pcout< Forceperpendicular, + std::vector SpringForce, + std::vector &ForceonImage) + { + unsigned int count = 0; + // pcout<<"Forces on Image "< 0 && d_NEBImageno < d_numberOfImages) + ForceonImage[count] = SpringForce[count] + Forceperpendicular[count]; + else + ForceonImage[count] = Forceperpendicular[count]; + // pcout< &solution, - const bool computeForces, - const bool useSingleAtomSolutionsInitialGuess) - { - - std::vector> globalAtomsDisplacements(d_numberGlobalCharges); - - for(int image = 1; image< d_numberOfImages-1; image++) - { - int multiplier = 1; - pcout<<"Update called for image: "<> globalAtomsDisplacements( + d_numberGlobalCharges); + d_forceOnImages.clear(); + for (int image = 1; image < d_numberOfImages - 1; image++) { - for (unsigned int j = 0; j < 3; ++j) + int multiplier = 1; + pcout << "Update called for image: " << image << std::endl; + + if (d_ImageError[image] < 0.95 * d_optimizertolerance && d_imageFreeze) + { + multiplier = 0; + pcout << "!!Frozen image " << image << " with Image force: " + << d_ImageError[image] * haPerBohrToeVPerAng << std::endl; + } + MPI_Bcast(&multiplier, 1, MPI_INT, 0, MPI_COMM_WORLD); + int count = 0; + pcout << "###Displacements for image: " << image << std::endl; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { - - if (d_this_mpi_process == 0) + for (unsigned int j = 0; j < 3; ++j) { - globalAtomsDisplacements[i][j] = 0.0; - if (d_relaxationFlags[3 * i + j] == 1) + if (d_this_mpi_process == 0) { - globalAtomsDisplacements[i][j] = solution[(image-1)*d_countrelaxationFlags +count]*multiplier; - if(globalAtomsDisplacements[i][j] > 0.4) - globalAtomsDisplacements[i][j] = 0.4; - else if (globalAtomsDisplacements[i][j] < -0.4) - globalAtomsDisplacements[i][j] = -0.4; - - count++; + globalAtomsDisplacements[i][j] = 0.0; + if (d_relaxationFlags[3 * i + j] == 1) + { + globalAtomsDisplacements[i][j] = + solution[(image - 1) * d_countrelaxationFlags + + count] * + multiplier; + if (globalAtomsDisplacements[i][j] > 0.4) + globalAtomsDisplacements[i][j] = 0.4; + else if (globalAtomsDisplacements[i][j] < -0.4) + globalAtomsDisplacements[i][j] = -0.4; + + count++; + } } } + pcout << globalAtomsDisplacements[i][0] << " " + << globalAtomsDisplacements[i][1] << " " + << globalAtomsDisplacements[i][2] << std::endl; + MPI_Bcast(&(globalAtomsDisplacements[i][0]), + 3, + MPI_DOUBLE, + 0, + MPI_COMM_WORLD); } - pcout<= 1e-03) - factor = 1.30;//Modified + factor = 1.30; // Modified else if (d_maximumAtomForceToBeRelaxed < 1e-03 && - d_maximumAtomForceToBeRelaxed >= 1e-04) - factor = 1.25; + d_maximumAtomForceToBeRelaxed >= 1e-04) + factor = 1.25; else if (d_maximumAtomForceToBeRelaxed < 1e-04) - factor = 1.15; - //MPI_Barrier required here... - factor = 1.0; - if(multiplier == 1) - { - MPI_Barrier(d_mpiCommParent); - (d_dftfeWrapper[image]->getDftfeBasePtr())->updateAtomPositionsAndMoveMesh(globalAtomsDisplacements, - factor, - useSingleAtomSolutionsInitialGuess); - pcout<<"--Positions of image: "<getDftfeBasePtr())->solve(true,false); - } - - - - - } - d_totalUpdateCalls += 1; - + factor = 1.15; + // MPI_Barrier required here... + factor = 1.0; + if (multiplier == 1) + { + MPI_Barrier(d_mpiCommParent); + (d_dftfeWrapper[image]->getDftfeBasePtr()) + ->updateAtomPositionsAndMoveMesh( + globalAtomsDisplacements, + factor, + useSingleAtomSolutionsInitialGuess); + pcout << "--Positions of image: " << image << " updated--" + << std::endl; + MPI_Barrier(d_mpiCommParent); + (d_dftfeWrapper[image]->getDftfeBasePtr())->solve(true, false); + } + double Force = 0.0; + d_NEBImageno = image; + ImageError(d_NEBImageno, Force); + d_forceOnImages.push_back(Force); + } + d_totalUpdateCalls += 1; } - - void - nudgedElasticBandClass::precondition( - std::vector & s, - const std::vector &gradient) + nudgedElasticBandClass::precondition(std::vector & s, + const std::vector &gradient) { - s.clear(); + s.clear(); s.resize(getNumberUnknowns() * getNumberUnknowns(), 0.0); for (auto i = 0; i < getNumberUnknowns(); ++i) { @@ -1178,221 +983,589 @@ void } - + void - nudgedElasticBandClass::solution(std::vector &solution) + nudgedElasticBandClass::solution(std::vector &solution) { // AssertThrow(false,dftUtils::ExcNotImplementedYet()); - solution.clear(); - pcout<<"The size of solution vector is: "<> atomLocations, atomLocationsInitial; - atomLocations=(d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsInitial = d_atomLocationsInitial[image]; - pcout<<"AtomLocation size "<> atomLocations, atomLocationsInitial; + atomLocations = + (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsInitial = d_atomLocationsInitial[image]; + pcout << "AtomLocation size " << atomLocations.size() << " " + << atomLocationsInitial.size() << std::endl; + for (int i = 0; i < d_numberGlobalCharges; ++i) { - if (d_relaxationFlags[3 * i + j] == 1) + for (int j = 0; j < 3; ++j) { - solution.push_back(atomLocations[i][j + 2] - - atomLocationsInitial[i][j + 2]); - + if (d_relaxationFlags[3 * i + j] == 1) + { + solution.push_back(atomLocations[i][j + 2] - + atomLocationsInitial[i][j + 2]); + } } } } - } - // pcout<<"The size of solution vector is: "<> atomLocations; - atomLocations=dftPtr[i]->getAtomLocationsCart(); - Force = 0.0; - ImageError(NEBImageno,Force); - double Energy = (dftPtr[i]->getInternalEnergy() )*haToeV; - pcout<<" "<getEntropicEnergy()<> atomLocations; + atomLocations=dftPtr[i]->getAtomLocationsCart(); + Force = 0.0; + ImageError(d_NEBImageno,Force); + double Energy = (dftPtr[i]->getInternalEnergy() )*haToeV; + pcout<<" "<getEntropicEnergy()< - nudgedElasticBandClass::getUnknownCountFlag() const + nudgedElasticBandClass::getUnknownCountFlag() const { AssertThrow(false, dftUtils::ExcNotImplementedYet()); } - + void - nudgedElasticBandClass::value(std::vector &functionValue) + nudgedElasticBandClass::value(std::vector &functionValue) { // AssertThrow(false,dftUtils::ExcNotImplementedYet()); functionValue.clear(); - + // Relative to initial free energy supressed in case of CGPRP // as that would not work in case of restarted CGPRP - //functionValue.push_back( dftPtr[3]->getInternalEnergy()); - + // functionValue.push_back( dftPtr[3]->getInternalEnergy()); } - + unsigned int - nudgedElasticBandClass::getNumberUnknowns() const + nudgedElasticBandClass::getNumberUnknowns() const { - - return (d_countrelaxationFlags*(d_numberOfImages-2)); + return (d_countrelaxationFlags * (d_numberOfImages - 2)); } - + void - nudgedElasticBandClass::CalculatePathLength(double & length) + nudgedElasticBandClass::CalculatePathLength(double &length) const { length = 0.0; std::vector> atomLocations, atomLocationsInitial; - for (int i = 0 ; i < d_numberOfImages-1; i++) + for (int i = 0; i < d_numberOfImages - 1; i++) { - atomLocations=(d_dftfeWrapper[i+1]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsInitial=(d_dftfeWrapper[i]->getDftfeBasePtr())->getAtomLocationsCart(); - double tempx,tempy,tempz,temp; - temp=0.0; - for(int iCharge = 0; iCharge < d_numberGlobalCharges ; iCharge++) + atomLocations = + (d_dftfeWrapper[i + 1]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocationsInitial = + (d_dftfeWrapper[i]->getDftfeBasePtr())->getAtomLocationsCart(); + double tempx, tempy, tempz, temp; + temp = 0.0; + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - - tempx = std::fabs(atomLocations[iCharge][2]-atomLocationsInitial[iCharge][2]); - tempy = std::fabs(atomLocations[iCharge][3]-atomLocationsInitial[iCharge][3]); - tempz = std::fabs(atomLocations[iCharge][4]-atomLocationsInitial[iCharge][4]); - if (d_Length[0]/2 <= tempx) + tempx = std::fabs(atomLocations[iCharge][2] - + atomLocationsInitial[iCharge][2]); + tempy = std::fabs(atomLocations[iCharge][3] - + atomLocationsInitial[iCharge][3]); + tempz = std::fabs(atomLocations[iCharge][4] - + atomLocationsInitial[iCharge][4]); + if (d_Length[0] / 2 <= tempx) tempx -= d_Length[0]; - if (d_Length[1]/2 <= tempy) + if (d_Length[1] / 2 <= tempy) tempy -= d_Length[1]; - if (d_Length[2]/2 <= tempz) + if (d_Length[2] / 2 <= tempz) tempz -= d_Length[2]; - temp+= tempx*tempx + tempy*tempy + tempz*tempz; + temp += tempx * tempx + tempy * tempy + tempz * tempz; + } + length += std::sqrt(temp); + } + } + + void + nudgedElasticBandClass::CalculateSpringConstant(int NEBImage, + double &SpringConstant) + { + SpringConstant = 0.0; + double Emin, ksum, kdiff, deltaE, Emax; + ksum = d_kmax + d_kmin; + kdiff = d_kmax - d_kmin; + double Ei; + Emax = -5000000; + Emin = 500; + for (int image = 0; image < d_numberOfImages - 1; image++) + { + Emax = std::max( + Emax, + (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - + (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy()); + Emin = std::min( + Emin, + (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - + (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy()); + } + deltaE = Emax - Emin; + + Ei = (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getInternalEnergy() - + (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getEntropicEnergy(); + + + + SpringConstant = + 0.5 * (ksum - kdiff * std::cos(pi * (Ei - Emin) / (deltaE))); + + pcout << "Image number " << NEBImage + << " Spring Constant: " << SpringConstant << std::endl; + } + + + void + nudgedElasticBandClass::WriteRestartFiles(int step) + { + /*std::vector> stepIndexData(1, std::vector(1, + 0)); stepIndexData[0][0] = double(step); pcout<<"Writing restart files for + step: "<NEBwriteDomainAndAtomCoordinates(cordFolder,std::to_string(i)); + } + dftUtils::writeDataIntoFile(stepIndexData, newFolder3,d_mpiCommParent); + if(d_this_mpi_process == 0) + { + std::ofstream outfile; + outfile.open(tempfolder+"/coordinates.inp", std::ios_base::app); + for(int i=0; i < d_numberOfImages; i++) + { + std::vector> atomLocations; + std::string coordinatesfolder = + tempfolder+"/coordinates.inp"+std::to_string(i); + dftUtils::readFile(5,atomLocations,coordinatesfolder); + for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) + { + outfile< tangent(d_countrelaxationFlags, 0.0); + std::vector Forceparallel(d_countrelaxationFlags, 0.0); + std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); + CalculatePathTangent(image, tangent); + CalculateForceparallel(image, Forceparallel, tangent); + CalculateForceperpendicular(image, + Forceperpendicular, + Forceparallel, + tangent); + LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); + } + bool + nudgedElasticBandClass::isConverged() const + { + bool flag = true; + pcout + << std::endl + << "-------------------------------------------------------------------------------" + << std::endl; + pcout << " --------------------NEB Attempt Completed " + << "---------------------------------------" << std::endl; + pcout << " " + << " Image No " + << " " + << "Force perpendicular in eV/A" + << " " + << "Internal Energy in eV" + << " " << std::endl; + + + for (int i = 0; i < d_numberOfImages; i++) + { + double Force = d_forceOnImages[i]; + double Energy = + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * + haToeV; + pcout << " " << i << " " << Force * haPerBohrToeVPerAng << " " + << Energy << " " << std::endl; + if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) + { + flag = false; + } } - + MPI_Barrier(d_mpiCommParent); + double Length = 0.0; + CalculatePathLength(Length); + pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; + pcout + << std::endl + << "-------------------------------------------------------------------------------" + << std::endl; + + return flag; } - -void - nudgedElasticBandClass::CalculateSpringConstant( int NEBImage, double & SpringConstant) -{ - SpringConstant = 0.0; - double Emin,ksum,kdiff,deltaE,Emax; - ksum = d_kmax+d_kmin; - kdiff = d_kmax-d_kmin; - double Ei; - Emax = -5000000; - Emin = 500; -for (int image = 0; image < d_numberOfImages-1; image++) -{ - Emax = std::max(Emax,(d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy() ); - Emin = std::min(Emin,(d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy()); -} -deltaE = Emax-Emin; -Ei = (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getEntropicEnergy(); + void + nudgedElasticBandClass::init() + { + d_solverRestart = d_isRestart; + if (d_dftPtr->getParametersObject().ionOptSolver == "BFGS") + d_solver = 0; + else if (d_dftPtr->getParametersObject().ionOptSolver == "LBFGS") + d_solver = 1; + else if (d_dftPtr->getParametersObject().ionOptSolver == "CGPRP") + d_solver = 2; -SpringConstant =0.5*( ksum - kdiff*std::cos(pi*(Ei - Emin)/(deltaE))); + double step_time; -pcout<<"Image number "<getParametersObject().ionRelaxFlagsFile != "") + { + std::vector> tempRelaxFlagsData; + std::vector> tempForceData; + dftUtils::readRelaxationFlagsFile( + 6, + tempRelaxFlagsData, + tempForceData, + d_dftPtr->getParametersObject().ionRelaxFlagsFile); + AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, + ExcMessage( + "Incorrect number of entries in relaxationFlags file")); + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); -} - -void - nudgedElasticBandClass::WriteRestartFiles(int step) -{ - /*std::vector> stepIndexData(1, std::vector(1, 0)); - stepIndexData[0][0] = double(step); - pcout<<"Writing restart files for step: "<NEBwriteDomainAndAtomCoordinates(cordFolder,std::to_string(i)); - } - dftUtils::writeDataIntoFile(stepIndexData, newFolder3,d_mpiCommParent); - if(d_this_mpi_process == 0) - { - std::ofstream outfile; - outfile.open(tempfolder+"/coordinates.inp", std::ios_base::app); - for(int i=0; i < d_numberOfImages; i++) + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + d_relaxationFlags.push_back(tempRelaxFlagsData[i][j]); + d_externalForceOnAtom.push_back(tempForceData[i][j]); + } + } + // print relaxation flags + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + pcout << tempRelaxFlagsData[i][0] << " " + << tempRelaxFlagsData[i][1] << " " + << tempRelaxFlagsData[i][2] << std::endl; + } + pcout << " --------------------------------------------------" + << std::endl; + } + else + { + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + d_relaxationFlags.push_back(1.0); + d_externalForceOnAtom.push_back(0.0); + } + } + + d_countrelaxationFlags = 0; + for (int i = 0; i < d_relaxationFlags.size(); i++) + { + if (d_relaxationFlags[i] == 1) + d_countrelaxationFlags++; + } + + + + d_totalUpdateCalls = 0; + if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) + mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + std::vector> ionOptData( + 2 + d_numberGlobalCharges * 3, std::vector(1, 0.0)); + ionOptData[0][0] = d_solver; + ionOptData[1][0] = + d_dftPtr->getParametersObject().usePreconditioner ? 1 : 0; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + ionOptData[i * 3 + j + 2][0] = d_relaxationFlags[i * 3 + j]; + } + } + /*if (!d_dftPtr->getParametersObject().reproducible_output) + dftUtils::writeDataIntoFile(ionOptData, + d_restartPath + "/ionOpt.dat", + mpi_communicator);*/ + d_ImageError.resize(d_numberOfImages); + double Force; + MPI_Barrier(d_mpiCommParent); + step_time = MPI_Wtime(); + + for (int i = 0; i < d_numberOfImages; i++) + { + d_NEBImageno = i; + (d_dftfeWrapper[d_NEBImageno]->getDftfeBasePtr()) + ->solve(true, false); + pcout << "##Completed initial GS of image: " << d_NEBImageno + 1 + << std::endl; + } + bool flag = true; + pcout + << std::endl + << "-------------------------------------------------------------------------------" + << std::endl; + pcout << " --------------------Initial NEB Data " + << "---------------------------------------" << std::endl; + pcout << " " + << " Image No " + << " " + << "Force perpendicular in eV/A" + << " " + << "Internal Energy in eV" + << " " << std::endl; + std::vector ForceonImages; + ForceonImages.clear(); + int count = 0; + for (int i = 0; i < d_numberOfImages; i++) { + d_NEBImageno = i; std::vector> atomLocations; - std::string coordinatesfolder = tempfolder+"/coordinates.inp"+std::to_string(i); - dftUtils::readFile(5,atomLocations,coordinatesfolder); - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) - { - outfile<getDftfeBasePtr())->getAtomLocationsCart(); + Force = 0.0; + ImageError(d_NEBImageno, Force); + double Energy = + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * + haToeV; + pcout << " " << i << " " << Force * haPerBohrToeVPerAng + << " " << Energy << " " << std::endl; + ForceonImages.push_back(Force); + if (Force > Forcecutoff && i > 0 && i < d_numberOfImages - 1) + { + flag = false; + } } - outfile.close(); - } - */ -} - -void - nudgedElasticBandClass::ImageError(int image, double &Force) -{ - Force = 0.0; - std::vector tangent(d_countrelaxationFlags,0.0); - std::vector Forceparallel(d_countrelaxationFlags,0.0); - std::vector Forceperpendicular(d_countrelaxationFlags,0.0); - CalculatePathTangent(image, tangent); - CalculateForceparallel(image, Forceparallel, tangent); - CalculateForceperpendicular(image,Forceperpendicular,Forceparallel,tangent); - LNorm(Force,Forceperpendicular,0,d_countrelaxationFlags); - -} - -bool -nudgedElasticBandClass::isConverged() const -{} - -} + MPI_Barrier(d_mpiCommParent); + double Length = 0.0; + CalculatePathLength(Length); + pcout << std::endl + << "--Path Length: " << Length << " Bohr" << std::endl; + step_time = MPI_Wtime() - step_time; + pcout << "Time taken for initial dft solve of all images: " << step_time + << std::endl; + pcout + << std::endl + << "-------------------------------------------------------------------------------" + << std::endl; + + + + if (d_solver == 0) + d_nonLinearSolverPtr = std::make_unique( + d_dftPtr->getParametersObject().usePreconditioner, + d_dftPtr->getParametersObject().bfgsStepMethod == "RFO", + d_dftPtr->getParametersObject().maxOptIter, + d_dftPtr->getParametersObject().verbosity, + d_mpiCommParent, + d_dftPtr->getParametersObject().maxIonUpdateStep); + else if (d_solver == 1) + d_nonLinearSolverPtr = std::make_unique( + d_dftPtr->getParametersObject().usePreconditioner, + d_dftPtr->getParametersObject().maxIonUpdateStep, + d_dftPtr->getParametersObject().maxOptIter, + d_dftPtr->getParametersObject().lbfgsNumPastSteps, + d_dftPtr->getParametersObject().verbosity, + d_mpiCommParent); + else + d_nonLinearSolverPtr = std::make_unique( + d_dftPtr->getParametersObject().maxOptIter, + d_dftPtr->getParametersObject().verbosity, + d_mpiCommParent, + 1e-4, + d_dftPtr->getParametersObject().maxLineSearchIterCGPRP, + 0.8, + d_dftPtr->getParametersObject().maxIonUpdateStep); + // print relaxation flags + if (d_dftPtr->getParametersObject().verbosity >= 1) + { + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + pcout << d_relaxationFlags[i * 3] << " " + << d_relaxationFlags[i * 3 + 1] << " " + << d_relaxationFlags[i * 3 + 2] << std::endl; + } + pcout << " --------------------------------------------------------" + << std::endl; + pcout << " Total No. of relaxation flags: " + << d_countrelaxationFlags << std::endl; + pcout << " --------------------------------------------------" + << std::endl; + } + if (d_dftPtr->getParametersObject().verbosity >= 1) + { + if (d_solver == 0) + { + pcout << " ---Non-linear BFGS Parameters----------- " + << std::endl; + pcout << " stopping tol: " << d_optimizertolerance + << std::endl; + + pcout << " maxIter: " << d_maximumNEBIteration + << std::endl; + + pcout << " preconditioner: " + << d_dftPtr->getParametersObject().usePreconditioner + << std::endl; + + pcout << " step method: " + << d_dftPtr->getParametersObject().bfgsStepMethod + << std::endl; + + pcout << " maxiumum step length: " + << d_dftPtr->getParametersObject().maxIonUpdateStep + << std::endl; + + + pcout << " ----------------------------------------- " + << std::endl; + } + if (d_solver == 1) + { + pcout << " ---Non-linear LBFGS Parameters---------- " + << std::endl; + pcout << " stopping tol: " << d_optimizertolerance + << std::endl; + pcout << " maxIter: " << d_maximumNEBIteration + << std::endl; + pcout << " preconditioner: " + << d_dftPtr->getParametersObject().usePreconditioner + << std::endl; + pcout << " lbfgs history: " + << d_dftPtr->getParametersObject().lbfgsNumPastSteps + << std::endl; + pcout << " maxiumum step length: " + << d_dftPtr->getParametersObject().maxIonUpdateStep + << std::endl; + pcout << " ----------------------------------------- " + << std::endl; + } + if (d_solver == 2) + { + pcout << " ---Non-linear CG Parameters-------------- " + << std::endl; + pcout << " stopping tol: " << d_optimizertolerance + << std::endl; + pcout << " maxIter: " << d_maximumNEBIteration + << std::endl; + pcout << " lineSearch tol: " << 1e-4 << std::endl; + pcout << " lineSearch maxIter: " + << d_dftPtr->getParametersObject().maxLineSearchIterCGPRP + << std::endl; + pcout << " lineSearch damping parameter: " << 0.8 + << std::endl; + pcout << " maxiumum step length: " + << d_dftPtr->getParametersObject().maxIonUpdateStep + << std::endl; + pcout << " ----------------------------------------- " + << std::endl; + } + if (d_isRestart) + { + if (d_solver == 2) + { + pcout + << " Re starting Ion force relaxation using nonlinear CG solver... " + << std::endl; + } + else if (d_solver == 0) + { + pcout + << " Re starting Ion force relaxation using nonlinear BFGS solver... " + << std::endl; + } + else if (d_solver == 1) + { + pcout + << " Re starting Ion force relaxation using nonlinear LBFGS solver... " + << std::endl; + } + } + else + { + if (d_solver == 2) + { + pcout + << " Starting Ion force relaxation using nonlinear CG solver... " + << std::endl; + } + else if (d_solver == 0) + { + pcout + << " Starting Ion force relaxation using nonlinear BFGS solver... " + << std::endl; + } + else if (d_solver == 1) + { + pcout + << " Starting Ion force relaxation using nonlinear LBFGS solver... " + << std::endl; + } + } + } + d_isRestart = false; + } + } +} // namespace dftfe diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 32f65713a..b4164f589 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1018,45 +1018,44 @@ namespace dftfe prm.leave_subsection(); prm.enter_subsection("NEB"); { - prm.declare_entry( "ALLOW IMAGE FREEZING", "false", Patterns::Bool(), - "If true images less than threshold will freeze for optimization step"); - + "If true images less than threshold will freeze for optimization step"); + prm.declare_entry( "NUMBER OF IMAGES", "1", - Patterns::Integer(1,50), - "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); + Patterns::Integer(1, 50), + "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); - prm.declare_entry( - "MAXIMUM SPRING CONSTANT", - "1e-1", - Patterns::Double(), - "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); + prm.declare_entry( + "MAXIMUM SPRING CONSTANT", + "1e-1", + Patterns::Double(), + "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); - prm.declare_entry( - "MINIMUM SPRING CONSTANT", - "5e-2", - Patterns::Double(), - "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); + prm.declare_entry( + "MINIMUM SPRING CONSTANT", + "5e-2", + Patterns::Double(), + "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); - prm.declare_entry( - "PATH THRESHOLD", - "1e-1", - Patterns::Double(), - "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); + prm.declare_entry( + "PATH THRESHOLD", + "1e-1", + Patterns::Double(), + "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); prm.declare_entry( "MAXIMUM NUMBER OF NEB ITERATIONS", "100", Patterns::Integer(1, 250), - "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); + "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); - prm.declare_entry( + prm.declare_entry( "NEB COORDINATES FILE", "", Patterns::Anything(), @@ -1066,12 +1065,9 @@ namespace dftfe "NEB DOMAIN VECTORS FILE", "", Patterns::Anything(), - "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); - - - + "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); } - prm.leave_subsection(); + prm.leave_subsection(); prm.enter_subsection("Molecular Dynamics"); { diff --git a/utils/runParameters.cc b/utils/runParameters.cc index bf296e284..19384772f 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -56,43 +56,42 @@ namespace dftfe "[Standard] Folder to store restart files."); prm.enter_subsection("NEB"); { - prm.declare_entry( "ALLOW IMAGE FREEZING", "false", Patterns::Bool(), - "If true images less than threshold will freeze for optimization step"); - + "If true images less than threshold will freeze for optimization step"); + prm.declare_entry( "NUMBER OF IMAGES", "1", - Patterns::Integer(1,50), - "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); + Patterns::Integer(1, 50), + "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); - prm.declare_entry( - "MAXIMUM SPRING CONSTANT", - "1e-1", - Patterns::Double(), - "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); + prm.declare_entry( + "MAXIMUM SPRING CONSTANT", + "1e-1", + Patterns::Double(), + "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); - prm.declare_entry( - "MINIMUM SPRING CONSTANT", - "5e-2", - Patterns::Double(), - "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); + prm.declare_entry( + "MINIMUM SPRING CONSTANT", + "5e-2", + Patterns::Double(), + "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); - prm.declare_entry( - "PATH THRESHOLD", - "1e-1", - Patterns::Double(), - "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); + prm.declare_entry( + "PATH THRESHOLD", + "1e-1", + Patterns::Double(), + "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); prm.declare_entry( "MAXIMUM NUMBER OF NEB ITERATIONS", "100", Patterns::Integer(1, 250), - "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); + "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); prm.declare_entry( "NEB COORDINATES FILE", @@ -104,10 +103,9 @@ namespace dftfe "NEB DOMAIN VECTORS FILE", "", Patterns::Anything(), - "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); - + "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); } - prm.leave_subsection(); + prm.leave_subsection(); } } // namespace internalRunParameters @@ -124,20 +122,16 @@ namespace dftfe solvermode = prm.get("SOLVER MODE"); restart = prm.get_bool("RESTART"); restartFilesPath = prm.get("RESTART FOLDER"); - prm.enter_subsection("NEB"); - { - numberOfImages = prm.get_integer("NUMBER OF IMAGES"); - imageFreeze = prm.get_bool("ALLOW IMAGE FREEZING"); - Kmax = prm.get_double("MAXIMUM SPRING CONSTANT"); - Kmin = prm.get_double("MINIMUM SPRING CONSTANT"); - pathThreshold = prm.get_double("maximumNEBiteration"); - coordinatesFileNEB = prm.get("NEB COORDINATES FILE"); - domainVectorsFileNEB = prm.get("NEB DOMAIN VECTORS FILE"); - - } - - - + prm.enter_subsection("NEB"); + { + numberOfImages = prm.get_integer("NUMBER OF IMAGES"); + imageFreeze = prm.get_bool("ALLOW IMAGE FREEZING"); + Kmax = prm.get_double("MAXIMUM SPRING CONSTANT"); + Kmin = prm.get_double("MINIMUM SPRING CONSTANT"); + pathThreshold = prm.get_double("maximumNEBiteration"); + coordinatesFileNEB = prm.get("NEB COORDINATES FILE"); + domainVectorsFileNEB = prm.get("NEB DOMAIN VECTORS FILE"); + } From 9654fb2ffbcbc311c1f814731a11eadbd69c7fd9 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Tue, 15 Nov 2022 15:07:01 +0530 Subject: [PATCH 05/53] Run Begins, Inital GS success --- include/dft.h | 3 +- include/nudgedElasticBandClass.h | 2 +- src/dft/dft.cc | 3 +- src/dftfeWrapper.cc | 2 +- src/neb/nudgedElasticBandClass.cc | 560 ++++++++++++++++-------------- utils/runParameters.cc | 13 +- 6 files changed, 319 insertions(+), 264 deletions(-) diff --git a/include/dft.h b/include/dft.h index 2b5bdadc0..7c1e7a86d 100644 --- a/include/dft.h +++ b/include/dft.h @@ -1020,8 +1020,7 @@ namespace dftfe /// FIXME: remove atom type atributes from atomLocations std::vector> atomLocations, atomLocationsFractional, - d_reciprocalLatticeVectors, d_domainBoundingVectors, - d_atomLocationsInitial; + d_reciprocalLatticeVectors, d_domainBoundingVectors; std::vector> d_atomLocationsAutoMesh; std::vector> d_imagePositionsAutoMesh; diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index f9c046d14..79a776bb7 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -42,7 +42,7 @@ namespace dftfe double pathThreshold, int maximumNEBIteration, const std::string &coordinatesFileNEB, - const std::string &domainVectorsFile); + const std::string &domainVectorsFileNEB); //~nudgedElasticBandClass(); const double haPerBohrToeVPerAng = 27.211386245988 / 0.529177210903; const double haToeV = 27.211386245988; diff --git a/src/dft/dft.cc b/src/dft/dft.cc index d1758fe82..aec071d04 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -991,8 +991,7 @@ namespace dftfe dftUtils::printCurrentMemoryUsage(mpi_communicator, "Entering init"); initImageChargesUpdateKPoints(); - // Set Initial atomLocations - d_atomLocationsInitial = atomLocations; + calculateNearestAtomDistances(); computing_timer.enter_subsection("mesh generation"); diff --git a/src/dftfeWrapper.cc b/src/dftfeWrapper.cc index 9eea091d0..118d9aa16 100644 --- a/src/dftfeWrapper.cc +++ b/src/dftfeWrapper.cc @@ -287,7 +287,7 @@ namespace dftfe clear(); if (mpi_comm_parent != MPI_COMM_NULL) MPI_Comm_dup(mpi_comm_parent, &d_mpi_comm_parent); - + // if(!(printParams == false && mode =="NEB")) createScratchFolder(); if (d_mpi_comm_parent != MPI_COMM_NULL) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 6d1886d1b..fc620126a 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -43,7 +43,7 @@ namespace dftfe double pathThreshold, int maximumNEBIteration, const std::string &coordinatesFileNEB, - const std::string &domainVectorsFile) + const std::string &domainVectorsFileNEB) : d_mpiCommParent(mpi_comm_parent) , d_this_mpi_process(Utilities::MPI::this_mpi_process(mpi_comm_parent)) , pcout(std::cout, (Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) @@ -59,46 +59,105 @@ namespace dftfe { // Read Coordinates file and create coordinates for each image + if (d_this_mpi_process == 0) + { + if (d_restartFilesPath != ".") + { + mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + } + else + { + d_restartFilesPath = "./nebRestart"; + mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + } + } + MPI_Barrier(d_mpiCommParent); + if (!d_isRestart) + { + std::string Folder = d_restartFilesPath + "/Step0"; + if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) + mkdir(Folder.c_str(), ACCESSPERMS); + std::vector> initialatomLocations; + std::vector> LatticeVectors; + dftUtils::readFile(5, initialatomLocations, coordinatesFileNEB); + dftUtils::readFile(3, LatticeVectors, domainVectorsFileNEB); + d_numberGlobalCharges = initialatomLocations.size() / d_numberOfImages; + for (int Image = 0; Image < d_numberOfImages; Image++) + { + std::string coordinatesFile, domainVectorsFile; + coordinatesFile = + "./nebRestart/Step0/coordinates" + std::to_string(Image) + ".inp"; + domainVectorsFile = "./nebRestart/Step0/domainVectors" + + std::to_string(Image) + ".inp"; + std::vector> coordinates, domainVectors; + for (int i = Image * d_numberGlobalCharges; + i < (Image + 1) * d_numberGlobalCharges; + i++) + coordinates.push_back(initialatomLocations[i]); + if (LatticeVectors.size() == 3) + { + for (int i = 0; i < 3; i++) + domainVectors.push_back(LatticeVectors[i]); + } + else + { + for (int i = Image * 3; i < (Image + 1) * 3; i++) + domainVectors.push_back(LatticeVectors[i]); + } + + dftUtils::writeDataIntoFile(coordinates, + coordinatesFile, + d_mpiCommParent); + dftUtils::writeDataIntoFile(domainVectors, + domainVectorsFile, + d_mpiCommParent); + + d_dftfeWrapper.push_back( + std::make_unique(parameter_file, + coordinatesFile, + domainVectorsFile, + d_mpiCommParent, + Image == 0 ? true : false, + true, + "NEB", + d_restartFilesPath, + false)); + } + d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); + AssertThrow( + d_dftPtr->getParametersObject().natoms == d_numberGlobalCharges, + ExcMessage( + "DFT-FE Error: The number atoms" + "read from the atomic coordinates file (input through ATOMIC COORDINATES FILE) doesn't" + "match the NATOMS input. Please check your atomic coordinates file. Sometimes an extra" + "blank row at the end can cause this issue too.")); - for (int Image = 0; Image < d_numberOfImages; Image++) - { - std::string coordinatesFile, domainVectorsFile; - // Write coordinatesFile - // Write domainVectors File - - d_dftfeWrapper.push_back( - std::make_unique(parameter_file, - coordinatesFile, - domainVectorsFile, - d_mpiCommParent, - true, - true, - "NEB", - d_restartFilesPath, - false)); - // d_dftPtr.push_back(d_dftfeWrapper->getDftfeBasePtr())); - } - d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); - /* std::vector> temp_domainBoundingVectors; - dftUtils::readFile(3, - temp_domainBoundingVectors, - dftParameters::domainBoundingVectorsFile); + dftUtils::readFile( + 3, + temp_domainBoundingVectors, + d_dftPtr->getParametersObject().domainBoundingVectorsFile); for (int i = 0; i < 3; i++) { - double temp = - temp_domainBoundingVectors[i][0] * - temp_domainBoundingVectors[i][0] + temp_domainBoundingVectors[i][1] * - temp_domainBoundingVectors[i][1] + temp_domainBoundingVectors[i][2] * - temp_domainBoundingVectors[i][2]; d_Length.push_back(pow(temp, 0.5)); + double temp = temp_domainBoundingVectors[i][0] * + temp_domainBoundingVectors[i][0] + + temp_domainBoundingVectors[i][1] * + temp_domainBoundingVectors[i][1] + + temp_domainBoundingVectors[i][2] * + temp_domainBoundingVectors[i][2]; + d_Length.push_back(pow(temp, 0.5)); } pcout << "--$ Domain Length$ --" << std::endl; pcout << "Lx:= " << d_Length[0] << " Ly:=" << d_Length[1] - << " Lz:=" << d_Length[2] << std::endl; */ - init(); + << " Lz:=" << d_Length[2] << std::endl; + + + + init(); + } } @@ -900,7 +959,7 @@ namespace dftfe pcout << "!!Frozen image " << image << " with Image force: " << d_ImageError[image] * haPerBohrToeVPerAng << std::endl; } - MPI_Bcast(&multiplier, 1, MPI_INT, 0, MPI_COMM_WORLD); + MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; pcout << "###Displacements for image: " << image << std::endl; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) @@ -932,7 +991,7 @@ namespace dftfe 3, MPI_DOUBLE, 0, - MPI_COMM_WORLD); + d_mpiCommParent); } @@ -987,8 +1046,8 @@ namespace dftfe void nudgedElasticBandClass::solution(std::vector &solution) { - // AssertThrow(false,dftUtils::ExcNotImplementedYet()); - solution.clear(); + AssertThrow(false, dftUtils::ExcNotImplementedYet()); + /*solution.clear(); pcout << "The size of solution vector is: " << solution.size() << std::endl; pcout << "Size of relaxation flags: " << d_relaxationFlags.size() << std::endl; @@ -1013,7 +1072,7 @@ namespace dftfe } } } - // pcout<<"The size of solution vector is: "<> ionOptData(2 + d_numberGlobalCharges * 3, + std::vector(1, 0.0)); + ionOptData[0][0] = d_solver; + ionOptData[1][0] = + d_dftPtr->getParametersObject().usePreconditioner ? 1 : 0; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) { - if (d_relaxationFlags[i] == 1) - d_countrelaxationFlags++; + ionOptData[i * 3 + j + 2][0] = d_relaxationFlags[i * 3 + j]; } + } + /*if (!d_dftPtr->getParametersObject().reproducible_output) + dftUtils::writeDataIntoFile(ionOptData, + d_restartPath + "/ionOpt.dat", + mpi_communicator);*/ + d_ImageError.resize(d_numberOfImages); + double Force; + MPI_Barrier(d_mpiCommParent); + step_time = MPI_Wtime(); + for (int i = 0; i < d_numberOfImages; i++) + { + pcout << "Here line 1410" << std::endl; + d_NEBImageno = i; + (d_dftfeWrapper[d_NEBImageno]->getDftfeBasePtr())->solve(true, false); + pcout << "##Completed initial GS of image: " << d_NEBImageno + << std::endl; + } + bool flag = true; + pcout + << std::endl + << "-------------------------------------------------------------------------------" + << std::endl; + pcout << " --------------------Initial NEB Data " + << "---------------------------------------" << std::endl; + pcout << " " + << " Image No " + << " " + << "Force perpendicular in eV/A" + << " " + << "Internal Energy in eV" + << " " << std::endl; + std::vector ForceonImages; + ForceonImages.clear(); + int count = 0; + for (int i = 0; i < d_numberOfImages; i++) + { + d_NEBImageno = i; + std::vector> atomLocations; + atomLocations = + (d_dftfeWrapper[i]->getDftfeBasePtr())->getAtomLocationsCart(); + Force = 0.0; + ImageError(d_NEBImageno, Force); + double Energy = + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * + haToeV; + pcout << " " << i << " " << Force * haPerBohrToeVPerAng << " " + << Energy << " " << std::endl; + ForceonImages.push_back(Force); + if (Force > Forcecutoff && i > 0 && i < d_numberOfImages - 1) + { + flag = false; + } + } + MPI_Barrier(d_mpiCommParent); + double Length = 0.0; + CalculatePathLength(Length); + pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; + step_time = MPI_Wtime() - step_time; + pcout << "Time taken for initial dft solve of all images: " << step_time + << std::endl; + pcout + << std::endl + << "-------------------------------------------------------------------------------" + << std::endl; - d_totalUpdateCalls = 0; - if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) - mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); - std::vector> ionOptData( - 2 + d_numberGlobalCharges * 3, std::vector(1, 0.0)); - ionOptData[0][0] = d_solver; - ionOptData[1][0] = - d_dftPtr->getParametersObject().usePreconditioner ? 1 : 0; + + if (d_solver == 0) + d_nonLinearSolverPtr = std::make_unique( + d_dftPtr->getParametersObject().usePreconditioner, + d_dftPtr->getParametersObject().bfgsStepMethod == "RFO", + d_dftPtr->getParametersObject().maxOptIter, + d_dftPtr->getParametersObject().verbosity, + d_mpiCommParent, + d_dftPtr->getParametersObject().maxIonUpdateStep); + else if (d_solver == 1) + d_nonLinearSolverPtr = std::make_unique( + d_dftPtr->getParametersObject().usePreconditioner, + d_dftPtr->getParametersObject().maxIonUpdateStep, + d_dftPtr->getParametersObject().maxOptIter, + d_dftPtr->getParametersObject().lbfgsNumPastSteps, + d_dftPtr->getParametersObject().verbosity, + d_mpiCommParent); + else + d_nonLinearSolverPtr = std::make_unique( + d_dftPtr->getParametersObject().maxOptIter, + d_dftPtr->getParametersObject().verbosity, + d_mpiCommParent, + 1e-4, + d_dftPtr->getParametersObject().maxLineSearchIterCGPRP, + 0.8, + d_dftPtr->getParametersObject().maxIonUpdateStep); + // print relaxation flags + if (d_dftPtr->getParametersObject().verbosity >= 1) + { + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { - for (unsigned int j = 0; j < 3; ++j) - { - ionOptData[i * 3 + j + 2][0] = d_relaxationFlags[i * 3 + j]; - } + pcout << d_relaxationFlags[i * 3] << " " + << d_relaxationFlags[i * 3 + 1] << " " + << d_relaxationFlags[i * 3 + 2] << std::endl; } - /*if (!d_dftPtr->getParametersObject().reproducible_output) - dftUtils::writeDataIntoFile(ionOptData, - d_restartPath + "/ionOpt.dat", - mpi_communicator);*/ - d_ImageError.resize(d_numberOfImages); - double Force; - MPI_Barrier(d_mpiCommParent); - step_time = MPI_Wtime(); - - for (int i = 0; i < d_numberOfImages; i++) + pcout << " --------------------------------------------------------" + << std::endl; + pcout << " Total No. of relaxation flags: " << d_countrelaxationFlags + << std::endl; + pcout << " --------------------------------------------------" + << std::endl; + } + if (d_dftPtr->getParametersObject().verbosity >= 1) + { + if (d_solver == 0) { - d_NEBImageno = i; - (d_dftfeWrapper[d_NEBImageno]->getDftfeBasePtr()) - ->solve(true, false); - pcout << "##Completed initial GS of image: " << d_NEBImageno + 1 + pcout << " ---Non-linear BFGS Parameters----------- " + << std::endl; + pcout << " stopping tol: " << d_optimizertolerance << std::endl; - } - bool flag = true; - pcout - << std::endl - << "-------------------------------------------------------------------------------" - << std::endl; - pcout << " --------------------Initial NEB Data " - << "---------------------------------------" << std::endl; - pcout << " " - << " Image No " - << " " - << "Force perpendicular in eV/A" - << " " - << "Internal Energy in eV" - << " " << std::endl; - std::vector ForceonImages; - ForceonImages.clear(); - int count = 0; - for (int i = 0; i < d_numberOfImages; i++) - { - d_NEBImageno = i; - std::vector> atomLocations; - atomLocations = - (d_dftfeWrapper[i]->getDftfeBasePtr())->getAtomLocationsCart(); - Force = 0.0; - ImageError(d_NEBImageno, Force); - double Energy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * - haToeV; - pcout << " " << i << " " << Force * haPerBohrToeVPerAng - << " " << Energy << " " << std::endl; - ForceonImages.push_back(Force); - if (Force > Forcecutoff && i > 0 && i < d_numberOfImages - 1) - { - flag = false; - } - } - MPI_Barrier(d_mpiCommParent); - double Length = 0.0; - CalculatePathLength(Length); - pcout << std::endl - << "--Path Length: " << Length << " Bohr" << std::endl; - step_time = MPI_Wtime() - step_time; - pcout << "Time taken for initial dft solve of all images: " << step_time - << std::endl; - pcout - << std::endl - << "-------------------------------------------------------------------------------" - << std::endl; + pcout << " maxIter: " << d_maximumNEBIteration << std::endl; + pcout << " preconditioner: " + << d_dftPtr->getParametersObject().usePreconditioner + << std::endl; - if (d_solver == 0) - d_nonLinearSolverPtr = std::make_unique( - d_dftPtr->getParametersObject().usePreconditioner, - d_dftPtr->getParametersObject().bfgsStepMethod == "RFO", - d_dftPtr->getParametersObject().maxOptIter, - d_dftPtr->getParametersObject().verbosity, - d_mpiCommParent, - d_dftPtr->getParametersObject().maxIonUpdateStep); - else if (d_solver == 1) - d_nonLinearSolverPtr = std::make_unique( - d_dftPtr->getParametersObject().usePreconditioner, - d_dftPtr->getParametersObject().maxIonUpdateStep, - d_dftPtr->getParametersObject().maxOptIter, - d_dftPtr->getParametersObject().lbfgsNumPastSteps, - d_dftPtr->getParametersObject().verbosity, - d_mpiCommParent); - else - d_nonLinearSolverPtr = std::make_unique( - d_dftPtr->getParametersObject().maxOptIter, - d_dftPtr->getParametersObject().verbosity, - d_mpiCommParent, - 1e-4, - d_dftPtr->getParametersObject().maxLineSearchIterCGPRP, - 0.8, - d_dftPtr->getParametersObject().maxIonUpdateStep); - // print relaxation flags - if (d_dftPtr->getParametersObject().verbosity >= 1) + pcout << " step method: " + << d_dftPtr->getParametersObject().bfgsStepMethod + << std::endl; + + pcout << " maxiumum step length: " + << d_dftPtr->getParametersObject().maxIonUpdateStep + << std::endl; + + + pcout << " ----------------------------------------- " + << std::endl; + } + if (d_solver == 1) { - pcout << " --------------Ion force relaxation flags----------------" + pcout << " ---Non-linear LBFGS Parameters---------- " << std::endl; - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - pcout << d_relaxationFlags[i * 3] << " " - << d_relaxationFlags[i * 3 + 1] << " " - << d_relaxationFlags[i * 3 + 2] << std::endl; - } - pcout << " --------------------------------------------------------" + pcout << " stopping tol: " << d_optimizertolerance + << std::endl; + pcout << " maxIter: " << d_maximumNEBIteration << std::endl; + pcout << " preconditioner: " + << d_dftPtr->getParametersObject().usePreconditioner + << std::endl; + pcout << " lbfgs history: " + << d_dftPtr->getParametersObject().lbfgsNumPastSteps << std::endl; - pcout << " Total No. of relaxation flags: " - << d_countrelaxationFlags << std::endl; - pcout << " --------------------------------------------------" + pcout << " maxiumum step length: " + << d_dftPtr->getParametersObject().maxIonUpdateStep + << std::endl; + pcout << " ----------------------------------------- " << std::endl; } - if (d_dftPtr->getParametersObject().verbosity >= 1) + if (d_solver == 2) { - if (d_solver == 0) + pcout << " ---Non-linear CG Parameters-------------- " + << std::endl; + pcout << " stopping tol: " << d_optimizertolerance + << std::endl; + pcout << " maxIter: " << d_maximumNEBIteration << std::endl; + pcout << " lineSearch tol: " << 1e-4 << std::endl; + pcout << " lineSearch maxIter: " + << d_dftPtr->getParametersObject().maxLineSearchIterCGPRP + << std::endl; + pcout << " lineSearch damping parameter: " << 0.8 << std::endl; + pcout << " maxiumum step length: " + << d_dftPtr->getParametersObject().maxIonUpdateStep + << std::endl; + pcout << " ----------------------------------------- " + << std::endl; + } + if (d_isRestart) + { + if (d_solver == 2) { - pcout << " ---Non-linear BFGS Parameters----------- " - << std::endl; - pcout << " stopping tol: " << d_optimizertolerance - << std::endl; - - pcout << " maxIter: " << d_maximumNEBIteration - << std::endl; - - pcout << " preconditioner: " - << d_dftPtr->getParametersObject().usePreconditioner - << std::endl; - - pcout << " step method: " - << d_dftPtr->getParametersObject().bfgsStepMethod - << std::endl; - - pcout << " maxiumum step length: " - << d_dftPtr->getParametersObject().maxIonUpdateStep - << std::endl; - - - pcout << " ----------------------------------------- " - << std::endl; + pcout + << " Re starting Ion force relaxation using nonlinear CG solver... " + << std::endl; } - if (d_solver == 1) + else if (d_solver == 0) { - pcout << " ---Non-linear LBFGS Parameters---------- " - << std::endl; - pcout << " stopping tol: " << d_optimizertolerance - << std::endl; - pcout << " maxIter: " << d_maximumNEBIteration - << std::endl; - pcout << " preconditioner: " - << d_dftPtr->getParametersObject().usePreconditioner - << std::endl; - pcout << " lbfgs history: " - << d_dftPtr->getParametersObject().lbfgsNumPastSteps - << std::endl; - pcout << " maxiumum step length: " - << d_dftPtr->getParametersObject().maxIonUpdateStep - << std::endl; - pcout << " ----------------------------------------- " - << std::endl; + pcout + << " Re starting Ion force relaxation using nonlinear BFGS solver... " + << std::endl; } + else if (d_solver == 1) + { + pcout + << " Re starting Ion force relaxation using nonlinear LBFGS solver... " + << std::endl; + } + } + else + { if (d_solver == 2) { - pcout << " ---Non-linear CG Parameters-------------- " - << std::endl; - pcout << " stopping tol: " << d_optimizertolerance - << std::endl; - pcout << " maxIter: " << d_maximumNEBIteration - << std::endl; - pcout << " lineSearch tol: " << 1e-4 << std::endl; - pcout << " lineSearch maxIter: " - << d_dftPtr->getParametersObject().maxLineSearchIterCGPRP - << std::endl; - pcout << " lineSearch damping parameter: " << 0.8 - << std::endl; - pcout << " maxiumum step length: " - << d_dftPtr->getParametersObject().maxIonUpdateStep - << std::endl; - pcout << " ----------------------------------------- " - << std::endl; + pcout + << " Starting Ion force relaxation using nonlinear CG solver... " + << std::endl; } - if (d_isRestart) + else if (d_solver == 0) { - if (d_solver == 2) - { - pcout - << " Re starting Ion force relaxation using nonlinear CG solver... " - << std::endl; - } - else if (d_solver == 0) - { - pcout - << " Re starting Ion force relaxation using nonlinear BFGS solver... " - << std::endl; - } - else if (d_solver == 1) - { - pcout - << " Re starting Ion force relaxation using nonlinear LBFGS solver... " - << std::endl; - } + pcout + << " Starting Ion force relaxation using nonlinear BFGS solver... " + << std::endl; } - else + else if (d_solver == 1) { - if (d_solver == 2) - { - pcout - << " Starting Ion force relaxation using nonlinear CG solver... " - << std::endl; - } - else if (d_solver == 0) - { - pcout - << " Starting Ion force relaxation using nonlinear BFGS solver... " - << std::endl; - } - else if (d_solver == 1) - { - pcout - << " Starting Ion force relaxation using nonlinear LBFGS solver... " - << std::endl; - } + pcout + << " Starting Ion force relaxation using nonlinear LBFGS solver... " + << std::endl; } } - d_isRestart = false; } + d_isRestart = false; } + + } // namespace dftfe diff --git a/utils/runParameters.cc b/utils/runParameters.cc index 19384772f..0c95d0dfc 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -124,12 +124,13 @@ namespace dftfe restartFilesPath = prm.get("RESTART FOLDER"); prm.enter_subsection("NEB"); { - numberOfImages = prm.get_integer("NUMBER OF IMAGES"); - imageFreeze = prm.get_bool("ALLOW IMAGE FREEZING"); - Kmax = prm.get_double("MAXIMUM SPRING CONSTANT"); - Kmin = prm.get_double("MINIMUM SPRING CONSTANT"); - pathThreshold = prm.get_double("maximumNEBiteration"); - coordinatesFileNEB = prm.get("NEB COORDINATES FILE"); + numberOfImages = prm.get_integer("NUMBER OF IMAGES"); + imageFreeze = prm.get_bool("ALLOW IMAGE FREEZING"); + Kmax = prm.get_double("MAXIMUM SPRING CONSTANT"); + Kmin = prm.get_double("MINIMUM SPRING CONSTANT"); + pathThreshold = prm.get_double("PATH THRESHOLD"); + maximumNEBiteration = prm.get_integer("MAXIMUM NUMBER OF NEB ITERATIONS"); + coordinatesFileNEB = prm.get("NEB COORDINATES FILE"); domainVectorsFileNEB = prm.get("NEB DOMAIN VECTORS FILE"); } From 9e7ff9a262186fe9c25d00cee6d33a20e6d474f1 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Wed, 16 Nov 2022 18:55:57 +0530 Subject: [PATCH 06/53] H3 NEB converges. Optimization required --- include/BFGSNonLinearSolver.h | 6 +- include/LBFGSNonLinearSolver.h | 8 ++- include/cgPRPNonLinearSolver.h | 6 +- include/nudgedElasticBandClass.h | 1 - src/neb/nudgedElasticBandClass.cc | 71 +++++++++---------- src/solvers/cgSolvers/BFGSNonLinearSolver.cc | 32 ++++++--- src/solvers/cgSolvers/LBFGSNonLinearSolver.cc | 37 +++++++--- src/solvers/cgSolvers/cgPRPNonLinearSolver.cc | 4 +- utils/dftParameters.cc | 2 +- utils/runParameters.cc | 2 +- 10 files changed, 109 insertions(+), 60 deletions(-) diff --git a/include/BFGSNonLinearSolver.h b/include/BFGSNonLinearSolver.h index 65527217f..956933449 100644 --- a/include/BFGSNonLinearSolver.h +++ b/include/BFGSNonLinearSolver.h @@ -53,7 +53,8 @@ namespace dftfe const MPI_Comm & mpi_comm_parent, const double trustRadius_maximum = 0.5, const double trustRadius_initial = 0.02, - const double trustRadius_minimum = 1.0e-4); + const double trustRadius_minimum = 1.0e-4, + const bool isGradientOnlyOptimization = false); /** * @brief Destructor. @@ -199,6 +200,9 @@ namespace dftfe /// bool d_hessianScaled; + // + bool d_isGradientOnlyOptimization; + /// Flag to store the reset state, 0 if step is accepted, 1 if reset occured /// and no steps are accepted, 2 if two resets occur without step being /// accepted (failure of BFGS). diff --git a/include/LBFGSNonLinearSolver.h b/include/LBFGSNonLinearSolver.h index 759538141..ea53332c7 100644 --- a/include/LBFGSNonLinearSolver.h +++ b/include/LBFGSNonLinearSolver.h @@ -49,7 +49,8 @@ namespace dftfe const unsigned int maxNumberIterations, const int maxNumPastSteps, const unsigned int debugLevel, - const MPI_Comm & mpi_comm_parent); + const MPI_Comm & mpi_comm_parent, + const bool isGradientOnlyOptimization = false); /** * @brief Destructor. @@ -203,6 +204,11 @@ namespace dftfe bool d_useSingleAtomSolutionsInitialGuess, d_noHistory; + // + bool d_isGradientOnlyOptimization; + + + // parallel objects MPI_Comm mpi_communicator; dealii::ConditionalOStream pcout; diff --git a/include/cgPRPNonLinearSolver.h b/include/cgPRPNonLinearSolver.h index f18415f3c..53adcdcef 100644 --- a/include/cgPRPNonLinearSolver.h +++ b/include/cgPRPNonLinearSolver.h @@ -52,7 +52,8 @@ namespace dftfe const double lineSearchTolerance = 1.0e-6, const unsigned int lineSearchMaxIterations = 10, const double lineSeachDampingParameter = 1.0, - const double maxIncrementSolLinf = 1e+6); + const double maxIncrementSolLinf = 1e+6, + const bool isGradientOnlyOptimization= false); /** * @brief Destructor. @@ -268,6 +269,9 @@ namespace dftfe /// bool d_useSingleAtomSolutionsInitialGuess; + // + bool d_isGradientOnlyOptimization; + // parallel objects MPI_Comm mpi_communicator; const unsigned int n_mpi_processes; diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 79a776bb7..4166d75df 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -131,7 +131,6 @@ namespace dftfe std::map>> d_atomLocationsInitial; std::vector d_relaxationFlags; std::vector d_externalForceOnAtom; - std::vector d_ForceonImages; std::vector d_ImageError; std::vector d_Length; std::string d_coordinatesFileNEB, d_domainVectorsFileNEB; diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index fc620126a..d2c92f365 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -691,7 +691,7 @@ namespace dftfe nonLinearSolver::ReturnValueType solverReturn = d_nonLinearSolverPtr->solve(*this, d_restartFilesPath + "/ionRelax.chk", - d_restartFlag); + false); if (solverReturn == nonLinearSolver::SUCCESS && d_dftPtr->getParametersObject().verbosity >= 1) @@ -709,7 +709,7 @@ namespace dftfe << (d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() << std::endl; } - pcout << "--------------Final Error Results(eV/A)-------------" + pcout << "--------------Final Error Results(Ha/bohr)-------------" << std::endl; for (int i = 0; i < d_numberOfImages; i++) { @@ -727,7 +727,7 @@ namespace dftfe tangent); LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); pcout << "Error of Image: " << i + 1 << " = " - << Force * haPerBohrToeVPerAng << " eV/A" << std::endl; + << Force << " Ha/bohr" << std::endl; } return d_totalUpdateCalls; } @@ -752,7 +752,7 @@ namespace dftfe << (d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() << std::endl; } - pcout << "--------------Error Results(eV/A)-------------" << std::endl; + pcout << "--------------Error Results(Ha/bohr)-------------" << std::endl; for (int i = 0; i < d_numberOfImages; i++) { d_NEBImageno = i; @@ -769,7 +769,7 @@ namespace dftfe tangent); LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); pcout << "Error of Image: " << i + 1 << " = " - << Force * haPerBohrToeVPerAng << " eV/A" << std::endl; + << Force << " Ha/bohr" << std::endl; } return d_totalUpdateCalls; } @@ -813,19 +813,17 @@ namespace dftfe pcout << " " << " Image No " << " " - << "Internal Energy in eV" + << "Internal Energy in Ha" << " " - << "Free Energy in eV" + << "Free Energy in Ha" << " " << std::endl; for (int i = 0; i < d_numberOfImages; i++) { double FreeEnergy = ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() - - (d_dftfeWrapper[i]->getDftfeBasePtr())->getEntropicEnergy()) * - haToeV; + (d_dftfeWrapper[i]->getDftfeBasePtr())->getEntropicEnergy()); double InternalEnergy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * - haToeV; + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()); pcout << " " << i << " " << InternalEnergy << " " << FreeEnergy << " " << std::endl; } @@ -841,7 +839,7 @@ namespace dftfe d_ImageError[i] = Force; pcout << "The Force on image no. " << d_NEBImageno << " is " - << Force * haPerBohrToeVPerAng << " in eV/Ang" << std::endl; + << Force << " in Ha/bohr" << std::endl; if (Force < 0.95 * d_optimizertolerance && d_imageFreeze) flagmultiplier[i] = 0; if (Force <= d_optimizertolerance) @@ -914,7 +912,7 @@ namespace dftfe } pcout << std::endl << "Maximum Force " - << d_maximumAtomForceToBeRelaxed * haPerBohrToeVPerAng << "in eV/Ang" + << d_maximumAtomForceToBeRelaxed << "in Ha/bohr" << std::endl; } @@ -957,7 +955,7 @@ namespace dftfe { multiplier = 0; pcout << "!!Frozen image " << image << " with Image force: " - << d_ImageError[image] * haPerBohrToeVPerAng << std::endl; + << d_ImageError[image] << std::endl; } MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; @@ -1019,11 +1017,15 @@ namespace dftfe MPI_Barrier(d_mpiCommParent); (d_dftfeWrapper[image]->getDftfeBasePtr())->solve(true, false); } + + } + for(int image = 0; image < d_numberOfImages; image++) + { double Force = 0.0; d_NEBImageno = image; ImageError(d_NEBImageno, Force); d_forceOnImages.push_back(Force); - } + } d_totalUpdateCalls += 1; } @@ -1120,12 +1122,12 @@ namespace dftfe void nudgedElasticBandClass::value(std::vector &functionValue) { - // AssertThrow(false,dftUtils::ExcNotImplementedYet()); + functionValue.clear(); + int midImage = d_NEBImageno/2; + functionValue.push_back( (d_dftfeWrapper[midImage]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[midImage]->getDftfeBasePtr())->getEntropicEnergy()); - // Relative to initial free energy supressed in case of CGPRP - // as that would not work in case of restarted CGPRP // functionValue.push_back( dftPtr[3]->getInternalEnergy()); @@ -1281,9 +1283,9 @@ namespace dftfe pcout << " " << " Image No " << " " - << "Force perpendicular in eV/A" + << "Force perpendicular in Ha/bohr" << " " - << "Internal Energy in eV" + << "Internal Energy in Ha" << " " << std::endl; @@ -1291,9 +1293,8 @@ namespace dftfe { double Force = d_forceOnImages[i]; double Energy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * - haToeV; - pcout << " " << i << " " << Force * haPerBohrToeVPerAng << " " + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) ; + pcout << " " << i << " " << Force << " " << Energy << " " << std::endl; if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { @@ -1364,7 +1365,6 @@ namespace dftfe } pcout << " --------------------------------------------------" << std::endl; - pcout << " Hi 1361" << std::endl; } else { @@ -1386,7 +1386,6 @@ namespace dftfe d_countrelaxationFlags++; } - pcout << " Hi 1382" << std::endl; d_totalUpdateCalls = 0; if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) @@ -1430,12 +1429,13 @@ namespace dftfe pcout << " " << " Image No " << " " - << "Force perpendicular in eV/A" + << "Force perpendicular in Ha/bohr" << " " - << "Internal Energy in eV" + << "Internal Energy in Ha" << " " << std::endl; - std::vector ForceonImages; - ForceonImages.clear(); + + d_forceOnImages.clear(); + int count = 0; for (int i = 0; i < d_numberOfImages; i++) { @@ -1446,11 +1446,10 @@ namespace dftfe Force = 0.0; ImageError(d_NEBImageno, Force); double Energy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) * - haToeV; - pcout << " " << i << " " << Force * haPerBohrToeVPerAng << " " + ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()); + pcout << " " << i << " " << Force << " " << Energy << " " << std::endl; - ForceonImages.push_back(Force); + d_forceOnImages.push_back(Force); if (Force > Forcecutoff && i > 0 && i < d_numberOfImages - 1) { flag = false; @@ -1477,7 +1476,7 @@ namespace dftfe d_dftPtr->getParametersObject().maxOptIter, d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, - d_dftPtr->getParametersObject().maxIonUpdateStep); + d_dftPtr->getParametersObject().maxIonUpdateStep,true); else if (d_solver == 1) d_nonLinearSolverPtr = std::make_unique( d_dftPtr->getParametersObject().usePreconditioner, @@ -1485,7 +1484,7 @@ namespace dftfe d_dftPtr->getParametersObject().maxOptIter, d_dftPtr->getParametersObject().lbfgsNumPastSteps, d_dftPtr->getParametersObject().verbosity, - d_mpiCommParent); + d_mpiCommParent,true); else d_nonLinearSolverPtr = std::make_unique( d_dftPtr->getParametersObject().maxOptIter, @@ -1494,7 +1493,7 @@ namespace dftfe 1e-4, d_dftPtr->getParametersObject().maxLineSearchIterCGPRP, 0.8, - d_dftPtr->getParametersObject().maxIonUpdateStep); + d_dftPtr->getParametersObject().maxIonUpdateStep,true); // print relaxation flags if (d_dftPtr->getParametersObject().verbosity >= 1) { diff --git a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc index d0c7e3a65..ac294fe7a 100644 --- a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc @@ -33,13 +33,15 @@ namespace dftfe const MPI_Comm & mpi_comm_parent, const double trustRadius_maximum, const double trustRadius_initial, - const double trustRadius_minimum) + const double trustRadius_minimum, + const bool isGradientOnlyOptimization) : nonLinearSolver(debugLevel, maxNumberIterations) , mpi_communicator(mpi_comm_parent) , d_usePreconditioner(usePreconditioner) , d_useRFOStep(useRFOStep) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) + ,d_isGradientOnlyOptimization(isGradientOnlyOptimization) { d_isReset = 0; d_useSingleAtomSolutionsInitialGuess = false; @@ -597,16 +599,21 @@ namespace dftfe double gtdx = internalBFGS::dot(d_deltaXNew, d_gradient); double gntdx = internalBFGS::dot(d_deltaXNew, d_gradientNew); - d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; + if(!d_isGradientOnlyOptimization) + d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; + else + d_wolfeSufficientDec = false; d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); d_wolfeSatisfied = d_wolfeSufficientDec && d_wolfeCurvature; if (d_debugLevel >= 1) { - if (d_wolfeSatisfied) + if (d_wolfeSatisfied && !d_isGradientOnlyOptimization) pcout << "Wolfe conditions satisfied." << std::endl; - else if (d_wolfeSufficientDec) + else if (d_wolfeSufficientDec && !d_isGradientOnlyOptimization) pcout << "Only Armijo condition satisfied." << std::endl; + else if(d_isGradientOnlyOptimization && d_wolfeCurvature) + pcout << "Curvature condition satisfied." << std::endl; } } @@ -637,9 +644,11 @@ namespace dftfe else { double gtdx = internalBFGS::dot(d_deltaX, d_gradient); - - d_trustRadius = + if(!d_isGradientOnlyOptimization) + d_trustRadius = -0.5 * gtdx * d_trustRadius / ((d_valueNew[0] - d_value[0]) - gtdx); + else + d_trustRadius/=2; if (d_trustRadius < d_trustRadiusMin) { if (d_debugLevel >= 1) @@ -878,7 +887,7 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_wolfeSufficientDec; + d_stepAccepted = d_isGradientOnlyOptimization?d_wolfeCurvature:d_wolfeSufficientDec; if (d_stepAccepted) { if (d_iter == 0 || !d_hessianScaled) @@ -894,8 +903,15 @@ namespace dftfe else { if (d_debugLevel >= 1) - pcout << "Step rejected as Armijo condition was not satisfied." + { + if(!d_isGradientOnlyOptimization) + pcout << "Step rejected as Armijo condition was not satisfied." + << std::endl; + else + pcout << "Step rejected as Curvature condition was not satisfied." << std::endl; + + } d_deltaX = d_deltaXNew; } MPI_Barrier(mpi_communicator); diff --git a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc index dcdf787b3..45a9acd36 100644 --- a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc @@ -31,7 +31,8 @@ namespace dftfe const unsigned int maxNumberIterations, const int maxNumPastSteps, const unsigned int debugLevel, - const MPI_Comm & mpi_comm_parent) + const MPI_Comm & mpi_comm_parent, + const bool isGradientOnlyOptimization) : nonLinearSolver(debugLevel, maxNumberIterations) , d_maxStepLength(maxUpdate) , mpi_communicator(mpi_comm_parent) @@ -39,6 +40,7 @@ namespace dftfe , d_usePreconditioner(usePreconditioner) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) + , d_isGradientOnlyOptimization(isGradientOnlyOptimization) { d_useSingleAtomSolutionsInitialGuess = false; } @@ -501,16 +503,23 @@ namespace dftfe { double gtdx = internalLBFGS::dot(d_deltaXNew, d_gradient); double gntdx = internalLBFGS::dot(d_deltaXNew, d_gradientNew); - - d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; - d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); + if(!d_isGradientOnlyOptimization) + d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; + else + d_wolfeSufficientDec = false; + if(!d_isGradientOnlyOptimization) + d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); + else + d_wolfeCurvature = std::abs(gntdx) < std::abs(gtdx); d_wolfeSatisfied = d_wolfeSufficientDec && d_wolfeCurvature; if (d_debugLevel >= 1) { - if (d_wolfeSatisfied) + if (d_wolfeSatisfied && !d_isGradientOnlyOptimization) pcout << "Wolfe conditions satisfied." << std::endl; - else if (d_wolfeSufficientDec) + else if (d_wolfeSufficientDec && !d_isGradientOnlyOptimization) pcout << "Only Armijo condition satisfied." << std::endl; + else if(d_isGradientOnlyOptimization && d_wolfeCurvature) + pcout << "Curvature condition satisfied." << std::endl; } } @@ -533,7 +542,10 @@ namespace dftfe else { double gtdx = internalLBFGS::dot(d_deltaX, d_gradient); - d_alpha = -0.5 * gtdx * d_alpha / ((d_valueNew[0] - d_value[0]) - gtdx); + if(!d_isGradientOnlyOptimization) + d_alpha = -0.5 * gtdx * d_alpha / ((d_valueNew[0] - d_value[0]) - gtdx); + else + d_alpha/=2; if (d_alpha < 0.1) { if (d_debugLevel >= 1) @@ -851,7 +863,7 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_wolfeSufficientDec; + d_stepAccepted = d_isGradientOnlyOptimization?d_wolfeCurvature:d_wolfeSufficientDec; if (d_stepAccepted) { updateHistory(); @@ -863,9 +875,16 @@ namespace dftfe else { if (d_debugLevel >= 1) - pcout << "Step rejected as Armijo condition was not satisfied." + { + if(!d_isGradientOnlyOptimization) + pcout << "Step rejected as Armijo condition was not satisfied." + << std::endl; + else + pcout << "Step rejected as Curvature condition was not satisfied." << std::endl; + } + d_deltaX = d_deltaXNew; } diff --git a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc index e94edbc46..e9c72fe0e 100644 --- a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc +++ b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc @@ -32,7 +32,8 @@ namespace dftfe const double lineSearchTolerance, const unsigned int lineSearchMaxIterations, const double lineSearchDampingParameter, - const double maxIncrementSolLinf) + const double maxIncrementSolLinf, + const bool isGradientOnlyOptimization) : d_lineSearchTolerance(lineSearchTolerance) , d_lineSearchMaxIterations(lineSearchMaxIterations) , d_lineSearchDampingParameter(lineSearchDampingParameter) @@ -44,6 +45,7 @@ namespace dftfe dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) + , d_isGradientOnlyOptimization(isGradientOnlyOptimization) { d_isCGRestartDueToLargeIncrement = false; d_useSingleAtomSolutionsInitialGuess = false; diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index b4164f589..eb45f6b55 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1046,7 +1046,7 @@ namespace dftfe "PATH THRESHOLD", "1e-1", Patterns::Double(), - "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); + "[Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD "); prm.declare_entry( diff --git a/utils/runParameters.cc b/utils/runParameters.cc index 0c95d0dfc..35fd61d42 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -84,7 +84,7 @@ namespace dftfe "PATH THRESHOLD", "1e-1", Patterns::Double(), - "[Standard] Simulation stops when the error(norm of force orthogonal to path in eV/A) is less than PATH THRESHOLD "); + "[Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD "); prm.declare_entry( From 38641aa9262032b50f36faf8b39ad032c9776c50 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 17 Nov 2022 12:23:12 +0530 Subject: [PATCH 07/53] Write restart files --- include/BFGSNonLinearSolver.h | 8 +- include/LBFGSNonLinearSolver.h | 2 +- include/cgPRPNonLinearSolver.h | 10 +- include/dftfeWrapper.h | 7 + include/nudgedElasticBandClass.h | 2 +- src/dftfeWrapper.cc | 13 + src/neb/nudgedElasticBandClass.cc | 342 +++++++++--------- src/solvers/cgSolvers/BFGSNonLinearSolver.cc | 38 +- src/solvers/cgSolvers/LBFGSNonLinearSolver.cc | 43 ++- src/solvers/cgSolvers/cgPRPNonLinearSolver.cc | 4 +- 10 files changed, 238 insertions(+), 231 deletions(-) diff --git a/include/BFGSNonLinearSolver.h b/include/BFGSNonLinearSolver.h index 956933449..c8ce861a1 100644 --- a/include/BFGSNonLinearSolver.h +++ b/include/BFGSNonLinearSolver.h @@ -51,10 +51,10 @@ namespace dftfe const unsigned int maxNumberIterations, const unsigned int debugLevel, const MPI_Comm & mpi_comm_parent, - const double trustRadius_maximum = 0.5, - const double trustRadius_initial = 0.02, - const double trustRadius_minimum = 1.0e-4, - const bool isGradientOnlyOptimization = false); + const double trustRadius_maximum = 0.5, + const double trustRadius_initial = 0.02, + const double trustRadius_minimum = 1.0e-4, + const bool isGradientOnlyOptimization = false); /** * @brief Destructor. diff --git a/include/LBFGSNonLinearSolver.h b/include/LBFGSNonLinearSolver.h index ea53332c7..105474f62 100644 --- a/include/LBFGSNonLinearSolver.h +++ b/include/LBFGSNonLinearSolver.h @@ -50,7 +50,7 @@ namespace dftfe const int maxNumPastSteps, const unsigned int debugLevel, const MPI_Comm & mpi_comm_parent, - const bool isGradientOnlyOptimization = false); + const bool isGradientOnlyOptimization = false); /** * @brief Destructor. diff --git a/include/cgPRPNonLinearSolver.h b/include/cgPRPNonLinearSolver.h index 53adcdcef..f3ffee639 100644 --- a/include/cgPRPNonLinearSolver.h +++ b/include/cgPRPNonLinearSolver.h @@ -49,11 +49,11 @@ namespace dftfe cgPRPNonLinearSolver(const unsigned int maxNumberIterations, const unsigned int debugLevel, const MPI_Comm & mpi_comm_parent, - const double lineSearchTolerance = 1.0e-6, - const unsigned int lineSearchMaxIterations = 10, - const double lineSeachDampingParameter = 1.0, - const double maxIncrementSolLinf = 1e+6, - const bool isGradientOnlyOptimization= false); + const double lineSearchTolerance = 1.0e-6, + const unsigned int lineSearchMaxIterations = 10, + const double lineSeachDampingParameter = 1.0, + const double maxIncrementSolLinf = 1e+6, + const bool isGradientOnlyOptimization = false); /** * @brief Destructor. diff --git a/include/dftfeWrapper.h b/include/dftfeWrapper.h index dd1d352e7..e4be94ef2 100644 --- a/include/dftfeWrapper.h +++ b/include/dftfeWrapper.h @@ -339,6 +339,13 @@ namespace dftfe getValenceElectronNumbers() const; + /** + * @brief Writes the domainVectors data and atom coordinates to files in path provided. + */ + void + writeDomainAndAtomCoordinatesFloatingCharges(const std::string Path) const; + + dftBase * getDftfeBasePtr(); diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 4166d75df..4bfdab158 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -113,7 +113,7 @@ namespace dftfe bool d_imageFreeze; /// total number of calls to update() - unsigned int d_totalUpdateCalls; + int d_totalUpdateCalls; int d_startStep; int d_solver; bool d_isRestart; diff --git a/src/dftfeWrapper.cc b/src/dftfeWrapper.cc index 118d9aa16..5771d8248 100644 --- a/src/dftfeWrapper.cc +++ b/src/dftfeWrapper.cc @@ -1106,4 +1106,17 @@ namespace dftfe return d_dftfeBasePtr; } + + void + dftfeWrapper::writeDomainAndAtomCoordinatesFloatingCharges(const std::string Path) const + { + AssertThrow( + d_mpi_comm_parent != MPI_COMM_NULL, + dealii::ExcMessage( + "DFT-FE Error: dftfeWrapper cannot be used on MPI_COMM_NULL.")); + d_dftfeBasePtr->writeDomainAndAtomCoordinatesFloatingCharges(Path); + } + + + } // namespace dftfe diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index d2c92f365..eb54d045b 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -59,21 +59,24 @@ namespace dftfe { // Read Coordinates file and create coordinates for each image - if (d_this_mpi_process == 0) - { - if (d_restartFilesPath != ".") - { - mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); - } - else - { - d_restartFilesPath = "./nebRestart"; - mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); - } - } + MPI_Barrier(d_mpiCommParent); if (!d_isRestart) { + if (d_this_mpi_process == 0) + { + if (d_restartFilesPath != ".") + { + mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + } + else + { + d_restartFilesPath = "./nebRestart"; + mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + } + } + + std::string Folder = d_restartFilesPath + "/Step0"; if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) mkdir(Folder.c_str(), ACCESSPERMS); @@ -87,10 +90,11 @@ namespace dftfe for (int Image = 0; Image < d_numberOfImages; Image++) { std::string coordinatesFile, domainVectorsFile; - coordinatesFile = - "./nebRestart/Step0/coordinates" + std::to_string(Image) + ".inp"; - domainVectorsFile = "./nebRestart/Step0/domainVectors" + - std::to_string(Image) + ".inp"; + coordinatesFile = d_restartFilesPath + + "/Step0/Image"+ std::to_string(Image) + + "coordinates.inp"; + domainVectorsFile = d_restartFilesPath + "/Step0/Image" + + std::to_string(Image) + "domainVectors.inp"; std::vector> coordinates, domainVectors; for (int i = Image * d_numberGlobalCharges; i < (Image + 1) * d_numberGlobalCharges; @@ -125,39 +129,37 @@ namespace dftfe d_restartFilesPath, false)); } - d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); - AssertThrow( - d_dftPtr->getParametersObject().natoms == d_numberGlobalCharges, - ExcMessage( - "DFT-FE Error: The number atoms" - "read from the atomic coordinates file (input through ATOMIC COORDINATES FILE) doesn't" - "match the NATOMS input. Please check your atomic coordinates file. Sometimes an extra" - "blank row at the end can cause this issue too.")); - - std::vector> temp_domainBoundingVectors; - dftUtils::readFile( - 3, - temp_domainBoundingVectors, - d_dftPtr->getParametersObject().domainBoundingVectorsFile); - - for (int i = 0; i < 3; i++) - { - double temp = temp_domainBoundingVectors[i][0] * - temp_domainBoundingVectors[i][0] + - temp_domainBoundingVectors[i][1] * - temp_domainBoundingVectors[i][1] + - temp_domainBoundingVectors[i][2] * - temp_domainBoundingVectors[i][2]; - d_Length.push_back(pow(temp, 0.5)); - } - pcout << "--$ Domain Length$ --" << std::endl; - pcout << "Lx:= " << d_Length[0] << " Ly:=" << d_Length[1] - << " Lz:=" << d_Length[2] << std::endl; + } + d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); + AssertThrow( + d_dftPtr->getParametersObject().natoms == d_numberGlobalCharges, + ExcMessage( + "DFT-FE Error: The number atoms" + "read from the atomic coordinates file (input through ATOMIC COORDINATES FILE) doesn't" + "match the NATOMS input. Please check your atomic coordinates file. Sometimes an extra" + "blank row at the end can cause this issue too.")); + + std::vector> temp_domainBoundingVectors; + dftUtils::readFile( + 3, + temp_domainBoundingVectors, + d_dftPtr->getParametersObject().domainBoundingVectorsFile); + + for (int i = 0; i < 3; i++) + { + double temp = + temp_domainBoundingVectors[i][0] * temp_domainBoundingVectors[i][0] + + temp_domainBoundingVectors[i][1] * temp_domainBoundingVectors[i][1] + + temp_domainBoundingVectors[i][2] * temp_domainBoundingVectors[i][2]; + d_Length.push_back(pow(temp, 0.5)); + } + pcout << "--$ Domain Length$ --" << std::endl; + pcout << "Lx:= " << d_Length[0] << " Ly:=" << d_Length[1] + << " Lz:=" << d_Length[2] << std::endl; - init(); - } + init(); } @@ -177,19 +179,15 @@ namespace dftfe { std::vector> atomLocationsi, atomLocationsiminus, atomLocationsiplus; - atomLocationsi = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); - atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); + atomLocationsi = (d_dftfeWrapper[image])->getAtomPositionsCart(); + atomLocationsiminus = + (d_dftfeWrapper[image - 1])->getAtomPositionsCart(); + atomLocationsiplus = + (d_dftfeWrapper[image + 1])->getAtomPositionsCart(); double GSEnergyminus, GSEnergyplus, GSEnergy; - GSEnergyminus = - (d_dftfeWrapper[image - 1]->getDftfeBasePtr())->getInternalEnergy(); - GSEnergyplus = - (d_dftfeWrapper[image + 1]->getDftfeBasePtr())->getInternalEnergy(); - GSEnergy = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy(); + GSEnergyminus = (d_dftfeWrapper[image - 1])->getDFTFreeEnergy(); + GSEnergyplus = (d_dftfeWrapper[image + 1])->getDFTFreeEnergy(); + GSEnergy = (d_dftfeWrapper[image])->getDFTFreeEnergy(); if (GSEnergyplus > GSEnergy && GSEnergy > GSEnergyminus) { for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) @@ -392,10 +390,9 @@ namespace dftfe else if (image == 0) { std::vector> atomLocationsi, atomLocationsiplus; - atomLocationsi = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); + atomLocationsi = (d_dftfeWrapper[image])->getAtomPositionsCart(); + atomLocationsiplus = + (d_dftfeWrapper[image + 1])->getAtomPositionsCart(); for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for (int j = 0; j < 3; j++) @@ -428,10 +425,9 @@ namespace dftfe else if (image == d_numberOfImages - 1) { std::vector> atomLocationsi, atomLocationsiminus; - atomLocationsi = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); + atomLocationsi = (d_dftfeWrapper[image])->getAtomPositionsCart(); + atomLocationsiminus = + (d_dftfeWrapper[image - 1])->getAtomPositionsCart(); for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { for (int j = 0; j < 3; j++) @@ -500,12 +496,11 @@ namespace dftfe std::vector v2(d_countrelaxationFlags, 0.0); std::vector> atomLocationsi, atomLocationsiminus, atomLocationsiplus; - atomLocationsi = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); - atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); + atomLocationsi = (d_dftfeWrapper[image])->getAtomPositionsCart(); + atomLocationsiminus = + (d_dftfeWrapper[image - 1])->getAtomPositionsCart(); + atomLocationsiplus = + (d_dftfeWrapper[image + 1])->getAtomPositionsCart(); int count = 0; for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { @@ -550,10 +545,9 @@ namespace dftfe std::vector> atomLocationsi, atomLocationsiminus, atomLocationsiplus; std::vector v1(d_countrelaxationFlags, 0.0); - atomLocationsi = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiplus = (d_dftfeWrapper[image + 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); + atomLocationsi = (d_dftfeWrapper[image])->getAtomPositionsCart(); + atomLocationsiplus = + (d_dftfeWrapper[image + 1])->getAtomPositionsCart(); int count = 0; for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { @@ -585,10 +579,9 @@ namespace dftfe std::vector> atomLocationsi, atomLocationsiminus, atomLocationsplus; std::vector v2(d_countrelaxationFlags, 0.0); - atomLocationsi = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsiminus = (d_dftfeWrapper[image - 1]->getDftfeBasePtr()) - ->getAtomLocationsCart(); + atomLocationsi = (d_dftfeWrapper[image])->getAtomPositionsCart(); + atomLocationsiminus = + (d_dftfeWrapper[image - 1])->getAtomPositionsCart(); int count = 0; for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { @@ -631,9 +624,8 @@ namespace dftfe { if (true) { - std::vector forceonAtoms(3 * d_numberGlobalCharges, 0.0); - forceonAtoms = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getForceonAtoms(); + std::vector> forceonAtoms = + (d_dftfeWrapper[image])->getForcesAtoms(); double Innerproduct = 0.0; unsigned int count = 0; @@ -643,9 +635,8 @@ namespace dftfe { if (d_relaxationFlags[3 * iCharge + j] == 1) { - Innerproduct = - Innerproduct - - forceonAtoms[3 * iCharge + j] * tangent[count]; + Innerproduct = Innerproduct - forceonAtoms[3 * iCharge][j] * + tangent[count]; count++; } } @@ -665,9 +656,8 @@ namespace dftfe std::vector Forceparallel, std::vector tangent) { - std::vector forceonAtoms(3 * d_numberGlobalCharges, 0.0); - forceonAtoms = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getForceonAtoms(); + std::vector> forceonAtoms = + (d_dftfeWrapper[image])->getForcesAtoms(); unsigned int count = 0; for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) @@ -677,7 +667,7 @@ namespace dftfe if (d_relaxationFlags[3 * iCharge + j] == 1) { Forceperpendicular[count] = - -forceonAtoms[3 * iCharge + j] - Forceparallel[count]; + -forceonAtoms[3 * iCharge][j] - Forceparallel[count]; count++; } } @@ -705,9 +695,8 @@ namespace dftfe << std::endl; for (int i = 0; i < d_numberOfImages; i++) { - pcout << "Internal Energy of Image: " << i + 1 << " = " - << (d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() - << std::endl; + pcout << "Free Energy of Image: " << i + 1 << " = " + << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; } pcout << "--------------Final Error Results(Ha/bohr)-------------" << std::endl; @@ -726,8 +715,8 @@ namespace dftfe Forceparallel, tangent); LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); - pcout << "Error of Image: " << i + 1 << " = " - << Force << " Ha/bohr" << std::endl; + pcout << "Error of Image: " << i + 1 << " = " << Force + << " Ha/bohr" << std::endl; } return d_totalUpdateCalls; } @@ -748,9 +737,8 @@ namespace dftfe pcout << "--------------Ground State Results-------------" << std::endl; for (int i = 0; i < d_numberOfImages; i++) { - pcout << "Internal Energy of Image: " << i + 1 << " = " - << (d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() - << std::endl; + pcout << "Free Energy of Image: " << i + 1 << " = " + << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; } pcout << "--------------Error Results(Ha/bohr)-------------" << std::endl; for (int i = 0; i < d_numberOfImages; i++) @@ -768,8 +756,8 @@ namespace dftfe Forceparallel, tangent); LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); - pcout << "Error of Image: " << i + 1 << " = " - << Force << " Ha/bohr" << std::endl; + pcout << "Error of Image: " << i + 1 << " = " << Force << " Ha/bohr" + << std::endl; } return d_totalUpdateCalls; } @@ -819,11 +807,10 @@ namespace dftfe << " " << std::endl; for (int i = 0; i < d_numberOfImages; i++) { - double FreeEnergy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy() - - (d_dftfeWrapper[i]->getDftfeBasePtr())->getEntropicEnergy()); + double FreeEnergy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); double InternalEnergy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()); + (d_dftfeWrapper[i])->getDFTFreeEnergy() + + (d_dftfeWrapper[i])->getElectronicEntropicEnergy(); pcout << " " << i << " " << InternalEnergy << " " << FreeEnergy << " " << std::endl; } @@ -838,8 +825,8 @@ namespace dftfe ImageError(d_NEBImageno, Force); d_ImageError[i] = Force; - pcout << "The Force on image no. " << d_NEBImageno << " is " - << Force << " in Ha/bohr" << std::endl; + pcout << "The Force on image no. " << d_NEBImageno << " is " << Force + << " in Ha/bohr" << std::endl; if (Force < 0.95 * d_optimizertolerance && d_imageFreeze) flagmultiplier[i] = 0; if (Force <= d_optimizertolerance) @@ -911,8 +898,7 @@ namespace dftfe d_maximumAtomForceToBeRelaxed = temp; } pcout << std::endl - << "Maximum Force " - << d_maximumAtomForceToBeRelaxed << "in Ha/bohr" + << "Maximum Force " << d_maximumAtomForceToBeRelaxed << "in Ha/bohr" << std::endl; } @@ -954,8 +940,8 @@ namespace dftfe if (d_ImageError[image] < 0.95 * d_optimizertolerance && d_imageFreeze) { multiplier = 0; - pcout << "!!Frozen image " << image << " with Image force: " - << d_ImageError[image] << std::endl; + pcout << "!!Frozen image " << image + << " with Image force: " << d_ImageError[image] << std::endl; } MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; @@ -994,7 +980,7 @@ namespace dftfe - double factor; + /*double factor; if (d_maximumAtomForceToBeRelaxed >= 1e-03) factor = 1.30; // Modified else if (d_maximumAtomForceToBeRelaxed < 1e-03 && @@ -1003,29 +989,33 @@ namespace dftfe else if (d_maximumAtomForceToBeRelaxed < 1e-04) factor = 1.15; // MPI_Barrier required here... - factor = 1.0; + factor = 1.0;*/ if (multiplier == 1) { - MPI_Barrier(d_mpiCommParent); + /*MPI_Barrier(d_mpiCommParent); (d_dftfeWrapper[image]->getDftfeBasePtr()) ->updateAtomPositionsAndMoveMesh( globalAtomsDisplacements, factor, - useSingleAtomSolutionsInitialGuess); + useSingleAtomSolutionsInitialGuess); */ + pcout << "--Positions of image: " << image << " updated--" << std::endl; MPI_Barrier(d_mpiCommParent); - (d_dftfeWrapper[image]->getDftfeBasePtr())->solve(true, false); + std::tuple groundStateOutput = + (d_dftfeWrapper[image])->computeDFTFreeEnergy(true, false); + if (!std::get<1>(groundStateOutput)) + pcout << " NEB Warning!!: Ground State of Image: " << d_NEBImageno + << " did not converge" << std::endl; } - } - for(int image = 0; image < d_numberOfImages; image++) + for (int image = 0; image < d_numberOfImages; image++) { double Force = 0.0; d_NEBImageno = image; ImageError(d_NEBImageno, Force); d_forceOnImages.push_back(Force); - } + } d_totalUpdateCalls += 1; } @@ -1058,7 +1048,7 @@ namespace dftfe pcout << "Image no.: " << image << std::endl; std::vector> atomLocations, atomLocationsInitial; atomLocations = - (d_dftfeWrapper[image]->getDftfeBasePtr())->getAtomLocationsCart(); + (d_dftfeWrapper[image])->getAtomPositionsCart(); atomLocationsInitial = d_atomLocationsInitial[image]; pcout << "AtomLocation size " << atomLocations.size() << " " << atomLocationsInitial.size() << std::endl; @@ -1082,32 +1072,31 @@ namespace dftfe void nudgedElasticBandClass::save() { - /* - d_startStep++; - WriteRestartFiles(d_startStep); - pcout<getParametersObject().reproducible_output) + { + std::string savePath = + d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls); + if (d_this_mpi_process == 0) + mkdir(savePath.c_str(), ACCESSPERMS); + + std::vector> forceData(1, + std::vector(1, 0.0)); + forceData[0][0] = d_maximumAtomForceToBeRelaxed; + dftUtils::writeDataIntoFile(forceData, + savePath + "/maxForce.chk", + d_mpiCommParent); + for(int i = 0; i < d_numberOfImages; i++) { - d_NEBImageno = i; - std::vector> atomLocations; - atomLocations=dftPtr[i]->getAtomLocationsCart(); - Force = 0.0; - ImageError(d_NEBImageno,Force); - double Energy = (dftPtr[i]->getInternalEnergy() )*haToeV; - pcout<<" "<getEntropicEnergy()<writeDomainAndAtomCoordinatesFloatingCharges(savePath + "/Image"+std::to_string(i)); + } + d_nonLinearSolverPtr->save(savePath + "/ionRelax.chk"); + std::vector> tmpData(1, + std::vector(1, 0.0)); + tmpData[0][0] = d_totalUpdateCalls; + dftUtils::writeDataIntoFile(tmpData, + d_restartFilesPath + "/step.chk", + d_mpiCommParent); + } } @@ -1122,11 +1111,10 @@ namespace dftfe void nudgedElasticBandClass::value(std::vector &functionValue) { - functionValue.clear(); - int midImage = d_NEBImageno/2; - functionValue.push_back( (d_dftfeWrapper[midImage]->getDftfeBasePtr())->getInternalEnergy() - (d_dftfeWrapper[midImage]->getDftfeBasePtr())->getEntropicEnergy()); + int midImage = d_numberOfImages / 2; + functionValue.push_back((d_dftfeWrapper[midImage])->getDFTFreeEnergy()); @@ -1151,10 +1139,8 @@ namespace dftfe for (int i = 0; i < d_numberOfImages - 1; i++) { - atomLocations = - (d_dftfeWrapper[i + 1]->getDftfeBasePtr())->getAtomLocationsCart(); - atomLocationsInitial = - (d_dftfeWrapper[i]->getDftfeBasePtr())->getAtomLocationsCart(); + atomLocations = (d_dftfeWrapper[i + 1])->getAtomPositionsCart(); + atomLocationsInitial = (d_dftfeWrapper[i])->getAtomPositionsCart(); double tempx, tempy, tempz, temp; temp = 0.0; for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) @@ -1190,19 +1176,12 @@ namespace dftfe Emin = 500; for (int image = 0; image < d_numberOfImages - 1; image++) { - Emax = std::max( - Emax, - (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - - (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy()); - Emin = std::min( - Emin, - (d_dftfeWrapper[image]->getDftfeBasePtr())->getInternalEnergy() - - (d_dftfeWrapper[image]->getDftfeBasePtr())->getEntropicEnergy()); + Emax = std::max(Emax, (d_dftfeWrapper[image])->getDFTFreeEnergy()); + Emin = std::min(Emin, (d_dftfeWrapper[image])->getDFTFreeEnergy()); } deltaE = Emax - Emin; - Ei = (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getInternalEnergy() - - (d_dftfeWrapper[NEBImage]->getDftfeBasePtr())->getEntropicEnergy(); + Ei = (d_dftfeWrapper[NEBImage])->getDFTFreeEnergy(); @@ -1285,17 +1264,16 @@ namespace dftfe << " " << "Force perpendicular in Ha/bohr" << " " - << "Internal Energy in Ha" + << "Free Energy in Ha" << " " << std::endl; for (int i = 0; i < d_numberOfImages; i++) { - double Force = d_forceOnImages[i]; - double Energy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()) ; - pcout << " " << i << " " << Force << " " - << Energy << " " << std::endl; + double Force = d_forceOnImages[i]; + double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); + pcout << " " << i << " " << Force << " " << Energy << " " + << std::endl; if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { flag = false; @@ -1404,7 +1382,7 @@ namespace dftfe } /*if (!d_dftPtr->getParametersObject().reproducible_output) dftUtils::writeDataIntoFile(ionOptData, - d_restartPath + "/ionOpt.dat", + d_restartFilesPath + "/ionOpt.dat", mpi_communicator);*/ d_ImageError.resize(d_numberOfImages); double Force; @@ -1413,9 +1391,12 @@ namespace dftfe for (int i = 0; i < d_numberOfImages; i++) { - pcout << "Here line 1410" << std::endl; d_NEBImageno = i; - (d_dftfeWrapper[d_NEBImageno]->getDftfeBasePtr())->solve(true, false); + auto groundState = + (d_dftfeWrapper[d_NEBImageno])->computeDFTFreeEnergy(true, false); + if (!std::get<1>(groundState)) + pcout << " NEB Warning!!: Ground State of Image: " << d_NEBImageno + << " did not converge" << std::endl; pcout << "##Completed initial GS of image: " << d_NEBImageno << std::endl; } @@ -1441,14 +1422,12 @@ namespace dftfe { d_NEBImageno = i; std::vector> atomLocations; - atomLocations = - (d_dftfeWrapper[i]->getDftfeBasePtr())->getAtomLocationsCart(); - Force = 0.0; + atomLocations = (d_dftfeWrapper[i])->getAtomPositionsCart(); + Force = 0.0; ImageError(d_NEBImageno, Force); - double Energy = - ((d_dftfeWrapper[i]->getDftfeBasePtr())->getInternalEnergy()); - pcout << " " << i << " " << Force << " " - << Energy << " " << std::endl; + double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); + pcout << " " << i << " " << Force << " " << Energy << " " + << std::endl; d_forceOnImages.push_back(Force); if (Force > Forcecutoff && i > 0 && i < d_numberOfImages - 1) { @@ -1476,7 +1455,8 @@ namespace dftfe d_dftPtr->getParametersObject().maxOptIter, d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, - d_dftPtr->getParametersObject().maxIonUpdateStep,true); + d_dftPtr->getParametersObject().maxIonUpdateStep, + true); else if (d_solver == 1) d_nonLinearSolverPtr = std::make_unique( d_dftPtr->getParametersObject().usePreconditioner, @@ -1484,7 +1464,8 @@ namespace dftfe d_dftPtr->getParametersObject().maxOptIter, d_dftPtr->getParametersObject().lbfgsNumPastSteps, d_dftPtr->getParametersObject().verbosity, - d_mpiCommParent,true); + d_mpiCommParent, + true); else d_nonLinearSolverPtr = std::make_unique( d_dftPtr->getParametersObject().maxOptIter, @@ -1493,7 +1474,8 @@ namespace dftfe 1e-4, d_dftPtr->getParametersObject().maxLineSearchIterCGPRP, 0.8, - d_dftPtr->getParametersObject().maxIonUpdateStep,true); + d_dftPtr->getParametersObject().maxIonUpdateStep, + true); // print relaxation flags if (d_dftPtr->getParametersObject().verbosity >= 1) { diff --git a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc index ac294fe7a..fd8c19e53 100644 --- a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc @@ -34,14 +34,14 @@ namespace dftfe const double trustRadius_maximum, const double trustRadius_initial, const double trustRadius_minimum, - const bool isGradientOnlyOptimization) + const bool isGradientOnlyOptimization) : nonLinearSolver(debugLevel, maxNumberIterations) , mpi_communicator(mpi_comm_parent) , d_usePreconditioner(usePreconditioner) , d_useRFOStep(useRFOStep) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - ,d_isGradientOnlyOptimization(isGradientOnlyOptimization) + , d_isGradientOnlyOptimization(isGradientOnlyOptimization) { d_isReset = 0; d_useSingleAtomSolutionsInitialGuess = false; @@ -599,12 +599,12 @@ namespace dftfe double gtdx = internalBFGS::dot(d_deltaXNew, d_gradient); double gntdx = internalBFGS::dot(d_deltaXNew, d_gradientNew); - if(!d_isGradientOnlyOptimization) + if (!d_isGradientOnlyOptimization) d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; else - d_wolfeSufficientDec = false; - d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); - d_wolfeSatisfied = d_wolfeSufficientDec && d_wolfeCurvature; + d_wolfeSufficientDec = false; + d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); + d_wolfeSatisfied = d_wolfeSufficientDec && d_wolfeCurvature; if (d_debugLevel >= 1) { @@ -612,8 +612,8 @@ namespace dftfe pcout << "Wolfe conditions satisfied." << std::endl; else if (d_wolfeSufficientDec && !d_isGradientOnlyOptimization) pcout << "Only Armijo condition satisfied." << std::endl; - else if(d_isGradientOnlyOptimization && d_wolfeCurvature) - pcout << "Curvature condition satisfied." << std::endl; + else if (d_isGradientOnlyOptimization && d_wolfeCurvature) + pcout << "Curvature condition satisfied." << std::endl; } } @@ -644,11 +644,11 @@ namespace dftfe else { double gtdx = internalBFGS::dot(d_deltaX, d_gradient); - if(!d_isGradientOnlyOptimization) + if (!d_isGradientOnlyOptimization) d_trustRadius = - -0.5 * gtdx * d_trustRadius / ((d_valueNew[0] - d_value[0]) - gtdx); + -0.5 * gtdx * d_trustRadius / ((d_valueNew[0] - d_value[0]) - gtdx); else - d_trustRadius/=2; + d_trustRadius /= 2; if (d_trustRadius < d_trustRadiusMin) { if (d_debugLevel >= 1) @@ -887,7 +887,8 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_isGradientOnlyOptimization?d_wolfeCurvature:d_wolfeSufficientDec; + d_stepAccepted = d_isGradientOnlyOptimization ? d_wolfeCurvature : + d_wolfeSufficientDec; if (d_stepAccepted) { if (d_iter == 0 || !d_hessianScaled) @@ -904,14 +905,15 @@ namespace dftfe { if (d_debugLevel >= 1) { - if(!d_isGradientOnlyOptimization) - pcout << "Step rejected as Armijo condition was not satisfied." + if (!d_isGradientOnlyOptimization) + pcout + << "Step rejected as Armijo condition was not satisfied." << std::endl; - else - pcout << "Step rejected as Curvature condition was not satisfied." + else + pcout + << "Step rejected as Curvature condition was not satisfied." << std::endl; - - } + } d_deltaX = d_deltaXNew; } MPI_Barrier(mpi_communicator); diff --git a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc index 45a9acd36..80bce99d3 100644 --- a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc @@ -32,7 +32,7 @@ namespace dftfe const int maxNumPastSteps, const unsigned int debugLevel, const MPI_Comm & mpi_comm_parent, - const bool isGradientOnlyOptimization) + const bool isGradientOnlyOptimization) : nonLinearSolver(debugLevel, maxNumberIterations) , d_maxStepLength(maxUpdate) , mpi_communicator(mpi_comm_parent) @@ -40,7 +40,7 @@ namespace dftfe , d_usePreconditioner(usePreconditioner) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isGradientOnlyOptimization(isGradientOnlyOptimization) + , d_isGradientOnlyOptimization(isGradientOnlyOptimization) { d_useSingleAtomSolutionsInitialGuess = false; } @@ -503,23 +503,23 @@ namespace dftfe { double gtdx = internalLBFGS::dot(d_deltaXNew, d_gradient); double gntdx = internalLBFGS::dot(d_deltaXNew, d_gradientNew); - if(!d_isGradientOnlyOptimization) + if (!d_isGradientOnlyOptimization) d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; else - d_wolfeSufficientDec = false; - if(!d_isGradientOnlyOptimization) - d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); + d_wolfeSufficientDec = false; + if (!d_isGradientOnlyOptimization) + d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); else - d_wolfeCurvature = std::abs(gntdx) < std::abs(gtdx); - d_wolfeSatisfied = d_wolfeSufficientDec && d_wolfeCurvature; + d_wolfeCurvature = std::abs(gntdx) < std::abs(gtdx); + d_wolfeSatisfied = d_wolfeSufficientDec && d_wolfeCurvature; if (d_debugLevel >= 1) { if (d_wolfeSatisfied && !d_isGradientOnlyOptimization) pcout << "Wolfe conditions satisfied." << std::endl; else if (d_wolfeSufficientDec && !d_isGradientOnlyOptimization) pcout << "Only Armijo condition satisfied." << std::endl; - else if(d_isGradientOnlyOptimization && d_wolfeCurvature) - pcout << "Curvature condition satisfied." << std::endl; + else if (d_isGradientOnlyOptimization && d_wolfeCurvature) + pcout << "Curvature condition satisfied." << std::endl; } } @@ -542,10 +542,11 @@ namespace dftfe else { double gtdx = internalLBFGS::dot(d_deltaX, d_gradient); - if(!d_isGradientOnlyOptimization) - d_alpha = -0.5 * gtdx * d_alpha / ((d_valueNew[0] - d_value[0]) - gtdx); + if (!d_isGradientOnlyOptimization) + d_alpha = + -0.5 * gtdx * d_alpha / ((d_valueNew[0] - d_value[0]) - gtdx); else - d_alpha/=2; + d_alpha /= 2; if (d_alpha < 0.1) { if (d_debugLevel >= 1) @@ -863,7 +864,8 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_isGradientOnlyOptimization?d_wolfeCurvature:d_wolfeSufficientDec; + d_stepAccepted = d_isGradientOnlyOptimization ? d_wolfeCurvature : + d_wolfeSufficientDec; if (d_stepAccepted) { updateHistory(); @@ -876,14 +878,15 @@ namespace dftfe { if (d_debugLevel >= 1) { - if(!d_isGradientOnlyOptimization) - pcout << "Step rejected as Armijo condition was not satisfied." + if (!d_isGradientOnlyOptimization) + pcout + << "Step rejected as Armijo condition was not satisfied." << std::endl; - else - pcout << "Step rejected as Curvature condition was not satisfied." + else + pcout + << "Step rejected as Curvature condition was not satisfied." << std::endl; - - } + } d_deltaX = d_deltaXNew; } diff --git a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc index e9c72fe0e..1ad867f50 100644 --- a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc +++ b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc @@ -33,7 +33,7 @@ namespace dftfe const unsigned int lineSearchMaxIterations, const double lineSearchDampingParameter, const double maxIncrementSolLinf, - const bool isGradientOnlyOptimization) + const bool isGradientOnlyOptimization) : d_lineSearchTolerance(lineSearchTolerance) , d_lineSearchMaxIterations(lineSearchMaxIterations) , d_lineSearchDampingParameter(lineSearchDampingParameter) @@ -45,7 +45,7 @@ namespace dftfe dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isGradientOnlyOptimization(isGradientOnlyOptimization) + , d_isGradientOnlyOptimization(isGradientOnlyOptimization) { d_isCGRestartDueToLargeIncrement = false; d_useSingleAtomSolutionsInitialGuess = false; From df2d80df29985eafdc778f397616f2c0a7f13a8e Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 17 Nov 2022 15:59:47 +0530 Subject: [PATCH 08/53] Changes to NEB, direction of force to be checked... --- src/neb/nudgedElasticBandClass.cc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 0fd52f16a..b7578e3c4 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -978,8 +978,8 @@ namespace dftfe const bool computeForces, const bool useSingleAtomSolutionsInitialGuess) { - std::vector> globalAtomsDisplacements( - d_numberGlobalCharges); + std::vector> globalAtomsDisplacements( + d_numberGlobalCharges,std::vector(3, 0.0)); d_forceOnImages.clear(); for (int image = 1; image < d_numberOfImages - 1; image++) { @@ -1041,12 +1041,10 @@ namespace dftfe factor = 1.0;*/ if (multiplier == 1) { - /*MPI_Barrier(d_mpiCommParent); - (d_dftfeWrapper[image]->getDftfeBasePtr()) - ->updateAtomPositionsAndMoveMesh( - globalAtomsDisplacements, - factor, - useSingleAtomSolutionsInitialGuess); */ + MPI_Barrier(d_mpiCommParent); + (d_dftfeWrapper[image]) + ->updateAtomPositions( + globalAtomsDisplacements); pcout << "--Positions of image: " << image << " updated--" << std::endl; From 1f536b7054096e88666a23035a35a841700d81a8 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 28 Nov 2022 09:33:56 +0530 Subject: [PATCH 09/53] Modified call for forces --- src/dftfeWrapper.cc | 1 - src/neb/nudgedElasticBandClass.cc | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/dftfeWrapper.cc b/src/dftfeWrapper.cc index f20d08762..e3b0c2f1b 100644 --- a/src/dftfeWrapper.cc +++ b/src/dftfeWrapper.cc @@ -287,7 +287,6 @@ namespace dftfe clear(); if (mpi_comm_parent != MPI_COMM_NULL) MPI_Comm_dup(mpi_comm_parent, &d_mpi_comm_parent); - // if(!(printParams == false && mode =="NEB")) createScratchFolder(); if (d_mpi_comm_parent != MPI_COMM_NULL) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index b7578e3c4..5a1f2fdfe 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -127,7 +127,7 @@ namespace dftfe domainVectorsFile, d_mpiCommParent, Image == 0 ? true : false, - true, + Image == 0 ? true : false, "NEB", d_restartFilesPath, false)); @@ -1192,12 +1192,12 @@ namespace dftfe temp = 0.0; for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { - tempx = std::fabs(atomLocations[iCharge][2] - + tempx = std::fabs(atomLocations[iCharge][0] - + atomLocationsInitial[iCharge][0]); + tempy = std::fabs(atomLocations[iCharge][1] - + atomLocationsInitial[iCharge][1]); + tempz = std::fabs(atomLocations[iCharge][2] - atomLocationsInitial[iCharge][2]); - tempy = std::fabs(atomLocations[iCharge][3] - - atomLocationsInitial[iCharge][3]); - tempz = std::fabs(atomLocations[iCharge][4] - - atomLocationsInitial[iCharge][4]); if (d_Length[0] / 2 <= tempx) tempx -= d_Length[0]; if (d_Length[1] / 2 <= tempy) From e863bdde1d6389b45d71c2b058d47d71ecdb05d2 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Tue, 27 Dec 2022 10:31:19 +0530 Subject: [PATCH 10/53] Resuse density from image 0 / previous images. Resolves the issue of mesh dependence energy --- src/neb/nudgedElasticBandClass.cc | 4 ++-- utils/dftParameters.cc | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 5a1f2fdfe..5df58ea63 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -130,7 +130,7 @@ namespace dftfe Image == 0 ? true : false, "NEB", d_restartFilesPath, - false)); + Image == 0 ? false : true)); } } else @@ -442,7 +442,7 @@ namespace dftfe { double temp = (atomLocationsiplus[iCharge][j] - atomLocationsi[iCharge][j]); - pcout< d_Length[j] / 2) { //pcout< Date: Fri, 6 Jan 2023 16:29:01 +0530 Subject: [PATCH 11/53] Temporary Restart fix --- src/neb/nudgedElasticBandClass.cc | 115 ++++++++++++++++++++++-------- 1 file changed, 84 insertions(+), 31 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 5df58ea63..b902ac0f0 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -61,6 +61,9 @@ namespace dftfe // Read Coordinates file and create coordinates for each image MPI_Barrier(d_mpiCommParent); + d_solverRestart = d_isRestart; + + if (!d_isRestart) { d_totalUpdateCalls = 0; @@ -135,43 +138,91 @@ namespace dftfe } else { - std::vector> tmp, ionOptData; + if (d_restartFilesPath != ".") + { + + } + if (d_restartFilesPath == ".") + { + d_restartFilesPath = "./nebRestart"; + + } + + + std::vector> tmp, ionOptData,tmp2; dftUtils::readFile(1, ionOptData, d_restartFilesPath + "/ionOpt.dat"); - dftUtils::readFile(1, tmp, d_restartFilesPath + "/step.chk"); + dftUtils::readFile(1, tmp, d_restartFilesPath + "/Step.chk"); + dftUtils::readFile(1, tmp2, d_restartFilesPath + "/Step.chk.old"); int solver = ionOptData[0][0]; bool usePreconditioner = ionOptData[1][0] > 1e-6; + d_numberGlobalCharges = ionOptData[2][0]/ d_numberOfImages; d_totalUpdateCalls = tmp[0][0]; + int Checkcall = tmp2[0][0]; + if(Checkcall != d_totalUpdateCalls) + d_totalUpdateCalls = Checkcall; tmp.clear(); dftUtils::readFile(1, tmp, - d_restartFilesPath + "/step" + + d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); d_maximumAtomForceToBeRelaxed = tmp[0][0]; - d_relaxationFlags.resize(d_numberGlobalCharges * 3); + pcout<<"Solver update: NEB is in Restart mode"<getParametersObject().usePreconditioner) pcout << "Solver has changed since last save, the newly set solver will start from scratch." - << std::endl; - if (!relaxationFlagsMatch) + << std::endl; */ + /*if (!relaxationFlagsMatch) pcout << "Relaxations flags have changed since last save, the solver will be reset to work with the new flags." - << std::endl; + << std::endl;*/ + + for (int Image = 0; Image < d_numberOfImages; Image++) + { + std::string coordinatesFile, domainVectorsFile; + coordinatesFile = d_restartFilesPath + + "/Step"+std::to_string(d_totalUpdateCalls)+"/Image"+ std::to_string(Image) + + "atomsFracCoordCurrent.chk"; + domainVectorsFile = d_restartFilesPath + "/Step"+std::to_string(d_totalUpdateCalls)+"/Image"+ std::to_string(Image) + + "domainBoundingVectorsCurrent.chk"; + + + d_dftfeWrapper.push_back( + std::make_unique(parameter_file, + coordinatesFile, + domainVectorsFile, + d_mpiCommParent, + Image == 0 ? true : false, + Image == 0 ? true : false, + "NEB", + d_restartFilesPath, + Image == 0 ? false : true)); + } + } d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); + if (d_dftPtr->getParametersObject().ionOptSolver == "BFGS") + d_solver = 0; + else if (d_dftPtr->getParametersObject().ionOptSolver == "LBFGS") + d_solver = 1; + else if (d_dftPtr->getParametersObject().ionOptSolver == "CGPRP") + d_solver = 2; + AssertThrow( d_dftPtr->getParametersObject().natoms == d_numberGlobalCharges, ExcMessage( @@ -773,12 +824,12 @@ namespace dftfe else if (solverReturn == nonLinearSolver::FAILURE) { pcout << " ...Ion force relaxation failed " << std::endl; - d_totalUpdateCalls = -1; + //d_totalUpdateCalls = -1; } else if (solverReturn == nonLinearSolver::MAX_ITER_REACHED) { pcout << " ...Maximum iterations reached " << std::endl; - d_totalUpdateCalls = -2; + //d_totalUpdateCalls = -2; } @@ -789,7 +840,7 @@ namespace dftfe pcout << "Free Energy of Image: " << i + 1 << " = " << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; } - pcout << "--------------Error Results(Ha/bohr)-------------" << std::endl; + pcout << "--------------NEB Step No: "<> tmpData(1, + std::vector(1, 0.0)); + + tmpData[0][0] = d_totalUpdateCalls; + dftUtils::writeDataIntoFile(tmpData, + d_restartFilesPath + "/Step.chk", + d_mpiCommParent); + if (d_this_mpi_process == 0) mkdir(savePath.c_str(), ACCESSPERMS); @@ -1137,11 +1196,10 @@ namespace dftfe d_dftfeWrapper[i]->writeDomainAndAtomCoordinatesFloatingCharges(savePath + "/Image"+std::to_string(i)); } d_nonLinearSolverPtr->save(savePath + "/ionRelax.chk"); - std::vector> tmpData(1, - std::vector(1, 0.0)); - tmpData[0][0] = d_totalUpdateCalls; + + dftUtils::writeDataIntoFile(tmpData, - d_restartFilesPath + "/step.chk", + d_restartFilesPath + "/Step.chk", d_mpiCommParent); } } @@ -1342,13 +1400,7 @@ namespace dftfe void nudgedElasticBandClass::init() { - d_solverRestart = d_isRestart; - if (d_dftPtr->getParametersObject().ionOptSolver == "BFGS") - d_solver = 0; - else if (d_dftPtr->getParametersObject().ionOptSolver == "LBFGS") - d_solver = 1; - else if (d_dftPtr->getParametersObject().ionOptSolver == "CGPRP") - d_solver = 2; + double step_time; @@ -1416,22 +1468,23 @@ namespace dftfe if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); - std::vector> ionOptData(2 + d_numberGlobalCharges * 3, + std::vector> ionOptData(3 + d_numberGlobalCharges * 3, std::vector(1, 0.0)); ionOptData[0][0] = d_solver; ionOptData[1][0] = d_dftPtr->getParametersObject().usePreconditioner ? 1 : 0; + ionOptData[2][0] = d_numberGlobalCharges*d_numberOfImages; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { for (unsigned int j = 0; j < 3; ++j) { - ionOptData[i * 3 + j + 2][0] = d_relaxationFlags[i * 3 + j]; + ionOptData[i * 3 + j + 3][0] = d_relaxationFlags[i * 3 + j]; } } - /*if (!d_dftPtr->getParametersObject().reproducible_output) + if (!d_dftPtr->getParametersObject().reproducible_output) dftUtils::writeDataIntoFile(ionOptData, d_restartFilesPath + "/ionOpt.dat", - mpi_communicator);*/ + d_mpiCommParent); d_ImageError.resize(d_numberOfImages); double Force; MPI_Barrier(d_mpiCommParent); @@ -1498,7 +1551,7 @@ namespace dftfe d_nonLinearSolverPtr = std::make_unique( d_dftPtr->getParametersObject().usePreconditioner, d_dftPtr->getParametersObject().bfgsStepMethod == "RFO", - d_dftPtr->getParametersObject().maxOptIter, + d_maximumNEBIteration, d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, d_dftPtr->getParametersObject().maxIonUpdateStep, @@ -1507,14 +1560,14 @@ namespace dftfe d_nonLinearSolverPtr = std::make_unique( d_dftPtr->getParametersObject().usePreconditioner, d_dftPtr->getParametersObject().maxIonUpdateStep, - d_dftPtr->getParametersObject().maxOptIter, + d_maximumNEBIteration, d_dftPtr->getParametersObject().lbfgsNumPastSteps, d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, true); else d_nonLinearSolverPtr = std::make_unique( - d_dftPtr->getParametersObject().maxOptIter, + d_maximumNEBIteration, d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, 1e-4, From d6fc8001534a3922cc10cb97edde977c8868ff30 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Fri, 6 Jan 2023 16:29:59 +0530 Subject: [PATCH 12/53] Increaed NLPSP quad rule --- include/constants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/constants.h b/include/constants.h index 001623bb9..627dea17f 100644 --- a/include/constants.h +++ b/include/constants.h @@ -96,7 +96,7 @@ namespace dftfe constexpr unsigned int C_num1DQuadNLPSP() { - return 14; // Can be changed from 14 to 18 Step 1 + return 18; // Can be changed from 14 to 18 Step 1 } /// number of copies 1d quad rule non-local PSP From 9baf7521ceace76179a954aed031a53bc6c6484a Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Wed, 1 Feb 2023 16:11:22 +0530 Subject: [PATCH 13/53] Check Restart and solver restart --- include/constants.h | 9 +- include/nudgedElasticBandClass.h | 126 +++-- src/dftfeWrapper.cc | 3 +- src/neb/nudgedElasticBandClass.cc | 792 ++++++++++++++---------------- utils/dftParameters.cc | 9 +- 5 files changed, 479 insertions(+), 460 deletions(-) diff --git a/include/constants.h b/include/constants.h index 627dea17f..a6b552a40 100644 --- a/include/constants.h +++ b/include/constants.h @@ -27,8 +27,12 @@ namespace dftfe // /// Boltzmann constant - const double C_kb = 3.166811429e-06; - + const double C_kb = 3.166811429e-06; + const double C_haPerBohrToeVPerAng = 27.211386245988 / 0.529177210903; + const double C_haToeV = 27.211386245988; + const double C_bohrToAng = 0.529177210903; + const double C_pi = 3.14159265359; + const double C_AngTobohr = 1.0 / 0.529177210903; /// 1d quadrature rule order template constexpr unsigned int @@ -159,6 +163,7 @@ namespace dftfe { return 1; } + #endif } // namespace dftfe #endif diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 1d92b8a16..b1184ba6b 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -24,12 +24,18 @@ #include "dftBase.h" #include "dftfeWrapper.h" #include "headers.h" +#include "constants.h" namespace dftfe { class nudgedElasticBandClass : public nonlinearSolverProblem { public: + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ + nudgedElasticBandClass(const std::string parameter_file, const std::string restartFilesPath, const MPI_Comm & mpi_comm_parent, @@ -43,56 +49,68 @@ namespace dftfe int maximumNEBIteration, const std::string &coordinatesFileNEB, const std::string &domainVectorsFileNEB); + //~nudgedElasticBandClass(); - const double haPerBohrToeVPerAng = 27.211386245988 / 0.529177210903; - const double haToeV = 27.211386245988; - const double bohrToAng = 0.529177210903; - const double pi = 3.14159265359; - const double AngTobohr = 1.0 / bohrToAng; - double d_kmax = 0.1; // 0.1 Ha/bohr - double d_kmin = 0.1; // 0.1Ha/bohr - int d_NEBImageno; + double d_kmax = 0.1; // 0.1 Ha/bohr + double d_kmin = 0.1; // 0.1Ha/bohr + int d_NEBImageno; + /** + * @brief Calls optimizer(nonLinearClass) solve. Prints the Final NEB energies and forces. + */ int run(); + /** + * @brief Returns the Normed vetor satistfying ||v||_2 = 1 + */ void ReturnNormedVector(std::vector &, int); + /** + * @brief Calculates the L-norm of a vector + */ void LNorm(double &, std::vector, int, int); + /** + * @brief Identifies the images to freeze, calculates gradient. + */ void gradient(std::vector &gradient); - - + /** + * @brief Returns the total DoFs of the optimizer problem. + */ unsigned int getNumberUnknowns() const; - + /** + * @brief Updates the positions of atoms and the total step count. + */ void update(const std::vector &solution, const bool computeForces = true, const bool useSingleAtomSolutionsInitialGuess = false); - + /** + * @brief Saves the output files for restart. + */ void save(); /** - * @brief initializes the data member d_relaxationFlags. + * @brief initializes the data member d_relaxationFlags, nonlinearSolver, * */ void init(); - - + /** + * @brief Not working. Finds the saddle point energy. + */ void value(std::vector &functionValue); /// not implemented void precondition(std::vector &s, const std::vector &gradient); - + /// not implemented void solution(std::vector &solution); - - - + /// not implemented std::vector getUnknownCountFlag() const; @@ -109,7 +127,7 @@ namespace dftfe dealii::ConditionalOStream pcout; int d_verbosity; - std::string d_restartFilesPath; + std::string d_restartFilesPath, d_solverRestartPath; bool d_imageFreeze; /// total number of calls to update() @@ -136,27 +154,75 @@ namespace dftfe std::string d_coordinatesFileNEB, d_domainVectorsFileNEB; const MPI_Comm & getMPICommunicator(); + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void CalculatePathTangent(int, std::vector &); + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void - CalculateForceparallel(int, std::vector &, const std::vector&); + CalculateForceparallel(int, + std::vector &, + const std::vector &); + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void CalculateForceperpendicular(int, std::vector &, - const std::vector&, - const std::vector&); + const std::vector &, + const std::vector &); + + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void CalculateSpringForce(int, std::vector &, std::vector); + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void - CalculateForceonImage(const std::vector&, - const std::vector&, + CalculateForceonImage(const std::vector &, + const std::vector &, std::vector &); + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void CalculatePathLength(double &) const; + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void WriteRestartFiles(int step); + + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void CalculateSpringConstant(int, double &); + + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ void ImageError(int image, double &Force); @@ -172,12 +238,12 @@ namespace dftfe */ bool isConverged() const; - + /** + * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. + * Third, creates the array of pointers of dftClass for each image. + */ int - checkRestart(std::string &coordinatesFile, - std::string &domainVectorsFile, - bool & scfRestart); - + checkRestart(bool &periodic); }; diff --git a/src/dftfeWrapper.cc b/src/dftfeWrapper.cc index 44116e554..7bdbdcaa9 100644 --- a/src/dftfeWrapper.cc +++ b/src/dftfeWrapper.cc @@ -1128,7 +1128,8 @@ namespace dftfe void - dftfeWrapper::writeDomainAndAtomCoordinatesFloatingCharges(const std::string Path) const + dftfeWrapper::writeDomainAndAtomCoordinatesFloatingCharges( + const std::string Path) const { AssertThrow( d_mpi_comm_parent != MPI_COMM_NULL, diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index b902ac0f0..4ad988953 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -62,25 +62,83 @@ namespace dftfe MPI_Barrier(d_mpiCommParent); d_solverRestart = d_isRestart; + if (d_dftPtr->getParametersObject().ionRelaxFlagsFile != "") + { + std::vector> tempRelaxFlagsData; + std::vector> tempForceData; + dftUtils::readRelaxationFlagsFile( + 6, + tempRelaxFlagsData, + tempForceData, + d_dftPtr->getParametersObject().ionRelaxFlagsFile); + AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, + ExcMessage( + "Incorrect number of entries in relaxationFlags file")); + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); - if (!d_isRestart) - { - d_totalUpdateCalls = 0; - + + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { - if (d_restartFilesPath != ".") + for (unsigned int j = 0; j < 3; ++j) { - if (d_this_mpi_process == 0) - mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + d_relaxationFlags.push_back(tempRelaxFlagsData[i][j]); + d_externalForceOnAtom.push_back(tempForceData[i][j]); } - else + } + // print relaxation flags + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + pcout << tempRelaxFlagsData[i][0] << " " + << tempRelaxFlagsData[i][1] << " " + << tempRelaxFlagsData[i][2] << std::endl; + } + pcout << " --------------------------------------------------" + << std::endl; + } + else + { + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) { - d_restartFilesPath = "./nebRestart"; - if (d_this_mpi_process == 0) - mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + d_relaxationFlags.push_back(1.0); + d_externalForceOnAtom.push_back(0.0); } } + } + d_countrelaxationFlags = 0; + for (int i = 0; i < d_relaxationFlags.size(); i++) + { + if (d_relaxationFlags[i] == 1) + d_countrelaxationFlags++; + } + pcout << " Total No. of relaxation flags: " << d_countrelaxationFlags + << std::endl; + + + if (!d_isRestart) + { + d_totalUpdateCalls = 0; + + { + if (d_restartFilesPath != ".") + { + if (d_this_mpi_process == 0) + mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + } + else + { + d_restartFilesPath = "./nebRestart"; + if (d_this_mpi_process == 0) + mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); + } + } std::string Folder = d_restartFilesPath + "/Step0"; @@ -96,9 +154,8 @@ namespace dftfe for (int Image = 0; Image < d_numberOfImages; Image++) { std::string coordinatesFile, domainVectorsFile; - coordinatesFile = d_restartFilesPath + - "/Step0/Image"+ std::to_string(Image) + - "coordinates.inp"; + coordinatesFile = d_restartFilesPath + "/Step0/Image" + + std::to_string(Image) + "coordinates.inp"; domainVectorsFile = d_restartFilesPath + "/Step0/Image" + std::to_string(Image) + "domainVectors.inp"; std::vector> coordinates, domainVectors; @@ -136,69 +193,44 @@ namespace dftfe Image == 0 ? false : true)); } } - else + else { - if (d_restartFilesPath != ".") - { - - } - if (d_restartFilesPath == ".") - { - d_restartFilesPath = "./nebRestart"; - - } - + if (d_restartFilesPath == ".") + { + d_restartFilesPath = "./nebRestart"; + } - std::vector> tmp, ionOptData,tmp2; - dftUtils::readFile(1, ionOptData, d_restartFilesPath + "/ionOpt.dat"); - dftUtils::readFile(1, tmp, d_restartFilesPath + "/Step.chk"); - dftUtils::readFile(1, tmp2, d_restartFilesPath + "/Step.chk.old"); - int solver = ionOptData[0][0]; - bool usePreconditioner = ionOptData[1][0] > 1e-6; - d_numberGlobalCharges = ionOptData[2][0]/ d_numberOfImages; - d_totalUpdateCalls = tmp[0][0]; - int Checkcall = tmp2[0][0]; - if(Checkcall != d_totalUpdateCalls) - d_totalUpdateCalls = Checkcall; - tmp.clear(); + bool Periodic; + std::vector> nudgedElasticBandData, tmp; + dftUtils::readFile(1, + nudgedElasticBandData, + d_restartFilesPath + "/nudgedElasticBand.dat"); + int solver = nudgedElasticBandData[0][0]; + bool usePreconditioner = nudgedElasticBandData[1][0] > 1e-6; + d_numberGlobalCharges = nudgedElasticBandData[2][0] / d_numberOfImages; + d_totalUpdateCalls = checkRestart(Periodic); dftUtils::readFile(1, tmp, d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); d_maximumAtomForceToBeRelaxed = tmp[0][0]; - pcout<<"Solver update: NEB is in Restart mode"<getParametersObject().usePreconditioner) - pcout - << "Solver has changed since last save, the newly set solver will start from scratch." - << std::endl; */ - /*if (!relaxationFlagsMatch) - pcout - << "Relaxations flags have changed since last save, the solver will be reset to work with the new flags." - << std::endl;*/ + pcout << "Solver update: NEB is in Restart mode" << std::endl; + pcout << "Checking for files in Step: " << d_totalUpdateCalls + << std::endl; for (int Image = 0; Image < d_numberOfImages; Image++) { std::string coordinatesFile, domainVectorsFile; - coordinatesFile = d_restartFilesPath + - "/Step"+std::to_string(d_totalUpdateCalls)+"/Image"+ std::to_string(Image) + - "atomsFracCoordCurrent.chk"; - domainVectorsFile = d_restartFilesPath + "/Step"+std::to_string(d_totalUpdateCalls)+"/Image"+ std::to_string(Image) + - "domainBoundingVectorsCurrent.chk"; + coordinatesFile = d_restartFilesPath + "/Step" + + std::to_string(d_totalUpdateCalls) + "/Image" + + std::to_string(Image) + + (Periodic ? "atomsFracCoordCurrent.chk" : + "atomsFracCoordCurrent.chk"); + domainVectorsFile = d_restartFilesPath + "/Step" + + std::to_string(d_totalUpdateCalls) + "/Image" + + std::to_string(Image) + + "domainBoundingVectorsCurrent.chk"; d_dftfeWrapper.push_back( @@ -212,8 +244,6 @@ namespace dftfe d_restartFilesPath, Image == 0 ? false : true)); } - - } d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); if (d_dftPtr->getParametersObject().ionOptSolver == "BFGS") @@ -292,17 +322,13 @@ namespace dftfe atomLocationsi[iCharge][j]; if (temp > d_Length[j] / 2) { - // pcout<<"Before: "< d_Length[j] / 2) { - // pcout<<"Before: "< d_Length[j] / 2) { - // pcout<<"Before: "< d_Length[j] / 2) { - // pcout<<"Before: "< d_Length[j] / 2) { - // pcout<<"Before: "< d_Length[j] / 2) { - // pcout<<"Before: "< d_Length[j] / 2) { - // pcout<<"Before: "< d_Length[j] / 2) { - //pcout< d_Length[j] / 2) { - // pcout< 0.000000000001, ExcMessage( @@ -613,16 +606,12 @@ namespace dftfe if (d_Length[j] / 2 <= v1[count]) { - // pcout<<"Before: "< &Forceparallel, - const std::vector &tangent) + int image, + std::vector & Forceparallel, + const std::vector &tangent) { if (true) { @@ -733,10 +717,9 @@ namespace dftfe { if (d_relaxationFlags[3 * iCharge + j] == 1) { - MPI_Barrier(d_mpiCommParent); - Innerproduct = Innerproduct + forceonAtoms[iCharge][j] * - tangent[count]; + Innerproduct = + Innerproduct + forceonAtoms[iCharge][j] * tangent[count]; count++; } } @@ -751,10 +734,10 @@ namespace dftfe void nudgedElasticBandClass::CalculateForceperpendicular( - int image, - std::vector &Forceperpendicular, - const std::vector &Forceparallel, - const std::vector &tangent) + int image, + std::vector & Forceperpendicular, + const std::vector &Forceparallel, + const std::vector &tangent) { std::vector> forceonAtoms = (d_dftfeWrapper[image])->getForcesAtoms(); @@ -780,8 +763,8 @@ namespace dftfe { nonLinearSolver::ReturnValueType solverReturn = d_nonLinearSolverPtr->solve(*this, - d_restartFilesPath + "/ionRelax.chk", - false); + d_solverRestartPath + "/ionRelax.chk", + d_solverRestart); if (solverReturn == nonLinearSolver::SUCCESS && d_dftPtr->getParametersObject().verbosity >= 1) @@ -793,11 +776,25 @@ namespace dftfe << std::endl; pcout << "--------------Final Ground State Results-------------" << std::endl; + double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); for (int i = 0; i < d_numberOfImages; i++) { - pcout << "Free Energy of Image: " << i + 1 << " = " + pcout << "Free Energy of Image in meV: " << i + 1 << " = " << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; + maxEnergy = + std::max(maxEnergy, (d_dftfeWrapper[i])->getDFTFreeEnergy()); } + pcout << "--- Converged Activation Energy---" << std::endl; + pcout << "--> Activation Energy (meV): " << std::setprecision(5) + << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(5) + << (maxEnergy - + (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + pcout << "-----------------------------------" << std::endl; pcout << "--------------Final Error Results(Ha/bohr)-------------" << std::endl; for (int i = 0; i < d_numberOfImages; i++) @@ -818,46 +815,51 @@ namespace dftfe pcout << "Error of Image: " << i + 1 << " = " << Force << " Ha/bohr" << std::endl; } + pcout << "------------------------------------------------------" + << std::endl; return d_totalUpdateCalls; } else if (solverReturn == nonLinearSolver::FAILURE) { pcout << " ...Ion force relaxation failed " << std::endl; - //d_totalUpdateCalls = -1; + d_totalUpdateCalls = -1; } else if (solverReturn == nonLinearSolver::MAX_ITER_REACHED) { pcout << " ...Maximum iterations reached " << std::endl; - //d_totalUpdateCalls = -2; + d_totalUpdateCalls = -2; } - - - pcout << "--------------Ground State Results-------------" << std::endl; - for (int i = 0; i < d_numberOfImages; i++) - { - pcout << "Free Energy of Image: " << i + 1 << " = " - << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; - } - pcout << "--------------NEB Step No: "<getParametersObject().verbosity >= 1) { - d_NEBImageno = i; - std::vector tangent(d_countrelaxationFlags, 0.0); - std::vector Forceparallel(d_countrelaxationFlags, 0.0); - std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); - double Force = 0.0; - - CalculatePathTangent(d_NEBImageno, tangent); - CalculateForceparallel(d_NEBImageno, Forceparallel, tangent); - CalculateForceperpendicular(d_NEBImageno, - Forceperpendicular, - Forceparallel, - tangent); - LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); - pcout << "Error of Image: " << i + 1 << " = " << Force << " Ha/bohr" - << std::endl; + pcout << "--------------Ground State Results-------------" << std::endl; + for (int i = 0; i < d_numberOfImages; i++) + { + pcout << "Free Energy of Image: " << i + 1 << " = " + << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; + } + pcout << "--------------NEB Step No: " << d_totalUpdateCalls + << " Error Results(Ha/bohr)-------------" << std::endl; + for (int i = 0; i < d_numberOfImages; i++) + { + d_NEBImageno = i; + std::vector tangent(d_countrelaxationFlags, 0.0); + std::vector Forceparallel(d_countrelaxationFlags, 0.0); + std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); + double Force = 0.0; + + CalculatePathTangent(d_NEBImageno, tangent); + CalculateForceparallel(d_NEBImageno, Forceparallel, tangent); + CalculateForceperpendicular(d_NEBImageno, + Forceperpendicular, + Forceparallel, + tangent); + LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); + pcout << "Error of Image: " << i + 1 << " = " << Force + << " Ha/bohr" << std::endl; + } } return d_totalUpdateCalls; } @@ -897,95 +899,103 @@ namespace dftfe { gradient.clear(); std::vector flagmultiplier(d_numberOfImages, 1); - bool flag = false; + flagmultiplier[0] = 0; + flagmultiplier[d_numberOfImages - 1] = 0; + bool flag = false; + pcout << "----------------------------------------------" << std::endl; + pcout << " NEB STEP: " << d_totalUpdateCalls << " " + << std::endl; + pcout << "----------------------------------------------" << std::endl; pcout << " " << " Image No " << " " << "Internal Energy in Ha" << " " << "Free Energy in Ha" - << " " << std::endl; - for (int i = 0; i < d_numberOfImages; i++) + << " " + << "Max Force Error in Ha/bohr" << std::endl; + double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); + for (int image = 0; image < d_numberOfImages; image++) { - double FreeEnergy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); + double FreeEnergy = (d_dftfeWrapper[image])->getDFTFreeEnergy(); double InternalEnergy = - (d_dftfeWrapper[i])->getDFTFreeEnergy() + - (d_dftfeWrapper[i])->getElectronicEntropicEnergy(); - pcout << " " << i << " " << InternalEnergy << " " << FreeEnergy - << " " << std::endl; - } - pcout << "************Error in gradient***************" << std::endl; - double Force = 0.0; - ImageError(0, Force); - d_ImageError[0] = Force; - - for (int i = 1; i < d_numberOfImages - 1; i++) - { - d_NEBImageno = i; - ImageError(d_NEBImageno, Force); - d_ImageError[i] = Force; - - pcout << "The Force on image no. " << d_NEBImageno << " is " << Force - << " in Ha/bohr" << std::endl; - if (Force < 0.95 * d_optimizertolerance && d_imageFreeze) - flagmultiplier[i] = 0; - if (Force <= d_optimizertolerance) - { - flag = true; - pcout << "Image no. " << i + 1 << " has converged with value of" - << Force << " vs tolerance of" << d_optimizertolerance - << std::endl; - } - else if (Force > d_optimizertolerance) + (d_dftfeWrapper[image])->getDFTFreeEnergy() + + (d_dftfeWrapper[image])->getElectronicEntropicEnergy(); + double ForceError = 0.0; + d_NEBImageno = image; + ImageError(image, ForceError); + d_ImageError[image] = ForceError; + if (ForceError < 0.95 * d_optimizertolerance && d_imageFreeze && + (image != 0 || image != d_numberOfImages - 1)) + flagmultiplier[image] = 0; + + if (ForceError <= d_optimizertolerance) + flag = true; + else flag = false; + if (flagmultiplier[image] == 0) + pcout << " " + << " Image: " << image << "(T)" + << " " << InternalEnergy << " " << FreeEnergy << " " + << ForceError << std::endl; + else + pcout << " " + << " Image: " << image << "(F)" + << " " << InternalEnergy << " " << FreeEnergy << " " + << ForceError << std::endl; + maxEnergy = + std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); } - - ImageError(d_numberOfImages - 1, Force); - d_ImageError[d_numberOfImages - 1] = Force; - + pcout << "--> Activation Energy (meV): " << std::setprecision(5) + << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * + 1000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(5) + << (maxEnergy - + (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + pcout << "----------------------------------------------" << std::endl; if (flag == true) pcout << "Optimization Criteria Met!!" << std::endl; - - pcout << "Image No. Norm of F_per Norm of Spring Force" << std::endl; - for (int image = 1; image < d_numberOfImages - 1; image++) + else { - std::vector tangent(d_countrelaxationFlags, 0.0); - std::vector Forceparallel(d_countrelaxationFlags, 0.0); - std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); - std::vector SpringForce(d_countrelaxationFlags, 0.0); - std::vector ForceonImage(d_countrelaxationFlags, 0.0); - CalculatePathTangent(image, tangent); - CalculateForceparallel(image, Forceparallel, tangent); - CalculateForceperpendicular(image, - Forceperpendicular, - Forceparallel, - tangent); - CalculateSpringForce(image, SpringForce, tangent); - CalculateForceonImage(Forceperpendicular, SpringForce, ForceonImage); - double F_spring = 0.0; - double F_per = 0.0; - LNorm(F_per, Forceperpendicular, 0, d_countrelaxationFlags); - LNorm(F_spring, SpringForce, 0, d_countrelaxationFlags); - pcout << image << " " << F_per << " " << F_spring << std::endl; - - // pcout<<"Before start of optimization Image Force: "< tangent(d_countrelaxationFlags, 0.0); + std::vector Forceparallel(d_countrelaxationFlags, 0.0); + std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); + std::vector SpringForce(d_countrelaxationFlags, 0.0); + std::vector ForceonImage(d_countrelaxationFlags, 0.0); + CalculatePathTangent(image, tangent); + CalculateForceparallel(image, Forceparallel, tangent); + CalculateForceperpendicular(image, + Forceperpendicular, + Forceparallel, + tangent); + CalculateSpringForce(image, SpringForce, tangent); + CalculateForceonImage(Forceperpendicular, + SpringForce, + ForceonImage); + double F_spring = 0.0; + double F_per = 0.0; + LNorm(F_per, Forceperpendicular, 0, d_countrelaxationFlags); + LNorm(F_spring, SpringForce, 0, d_countrelaxationFlags); + pcout << image << " " << F_per << " " << F_spring << std::endl; + + + + for (int i = 0; i < d_countrelaxationFlags; i++) + { + if (flag == false) + gradient.push_back(-ForceonImage[i] * flagmultiplier[image]); + else + gradient.push_back(-Forceperpendicular[i] * + flagmultiplier[image]); + } } } - pcout << "##Frozen images are: "; - for (int image = 1; image < d_numberOfImages - 1; image++) - { - if (flagmultiplier[image] == 0) - pcout << " " << image << " "; - } d_maximumAtomForceToBeRelaxed = -1.0; @@ -993,7 +1003,7 @@ namespace dftfe for (unsigned int i = 0; i < gradient.size(); ++i) { const double temp = std::sqrt(gradient[i] * gradient[i]); - // pcout< d_maximumAtomForceToBeRelaxed) d_maximumAtomForceToBeRelaxed = temp; } @@ -1005,22 +1015,19 @@ namespace dftfe void nudgedElasticBandClass::CalculateForceonImage( - const std::vector &Forceperpendicular, - const std::vector &SpringForce, - std::vector &ForceonImage) + const std::vector &Forceperpendicular, + const std::vector &SpringForce, + std::vector & ForceonImage) { unsigned int count = 0; - // pcout<<"Forces on Image "< 0 && d_NEBImageno < d_numberOfImages) ForceonImage[count] = SpringForce[count] + Forceperpendicular[count]; else ForceonImage[count] = Forceperpendicular[count]; - // pcout<> globalAtomsDisplacements( - d_numberGlobalCharges,std::vector(3, 0.0)); + d_numberGlobalCharges, std::vector(3, 0.0)); d_forceOnImages.clear(); for (int image = 1; image < d_numberOfImages - 1; image++) { @@ -1045,7 +1052,8 @@ namespace dftfe } MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; - pcout << "###Displacements for image: " << image << std::endl; + if (d_dftPtr->getParametersObject().verbosity > 4) + pcout << "--Displacements for image: " << image << std::endl; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { for (unsigned int j = 0; j < 3; ++j) @@ -1068,9 +1076,10 @@ namespace dftfe } } } - pcout << globalAtomsDisplacements[i][0] << " " - << globalAtomsDisplacements[i][1] << " " - << globalAtomsDisplacements[i][2] << std::endl; + if (d_dftPtr->getParametersObject().verbosity > 4) + pcout << globalAtomsDisplacements[i][0] << " " + << globalAtomsDisplacements[i][1] << " " + << globalAtomsDisplacements[i][2] << std::endl; MPI_Bcast(&(globalAtomsDisplacements[i][0]), 3, MPI_DOUBLE, @@ -1080,25 +1089,14 @@ namespace dftfe - /*double factor; - if (d_maximumAtomForceToBeRelaxed >= 1e-03) - factor = 1.30; // Modified - else if (d_maximumAtomForceToBeRelaxed < 1e-03 && - d_maximumAtomForceToBeRelaxed >= 1e-04) - factor = 1.25; - else if (d_maximumAtomForceToBeRelaxed < 1e-04) - factor = 1.15; - // MPI_Barrier required here... - factor = 1.0;*/ if (multiplier == 1) { MPI_Barrier(d_mpiCommParent); (d_dftfeWrapper[image]) - ->updateAtomPositions( - globalAtomsDisplacements); - - pcout << "--Positions of image: " << image << " updated--" - << std::endl; + ->updateAtomPositions(globalAtomsDisplacements); + if (d_dftPtr->getParametersObject().verbosity > 4) + pcout << "--Positions of image: " << image << " updated--" + << std::endl; MPI_Barrier(d_mpiCommParent); std::tuple groundStateOutput = (d_dftfeWrapper[image])->computeDFTFreeEnergy(true, false); @@ -1137,32 +1135,6 @@ namespace dftfe nudgedElasticBandClass::solution(std::vector &solution) { AssertThrow(false, dftUtils::ExcNotImplementedYet()); - /*solution.clear(); - pcout << "The size of solution vector is: " << solution.size() << std::endl; - pcout << "Size of relaxation flags: " << d_relaxationFlags.size() - << std::endl; - for (int image = 1; image < d_numberOfImages - 1; image++) - { - pcout << "Image no.: " << image << std::endl; - std::vector> atomLocations, atomLocationsInitial; - atomLocations = - (d_dftfeWrapper[image])->getAtomPositionsCart(); - atomLocationsInitial = d_atomLocationsInitial[image]; - pcout << "AtomLocation size " << atomLocations.size() << " " - << atomLocationsInitial.size() << std::endl; - for (int i = 0; i < d_numberGlobalCharges; ++i) - { - for (int j = 0; j < 3; ++j) - { - if (d_relaxationFlags[3 * i + j] == 1) - { - solution.push_back(atomLocations[i][j] - - atomLocationsInitial[i][j]); - } - } - } - } - // pcout<<"The size of solution vector is: "<writeDomainAndAtomCoordinatesFloatingCharges(savePath + "/Image"+std::to_string(i)); - } + d_dftfeWrapper[i]->writeDomainAndAtomCoordinatesFloatingCharges( + savePath + "/Image" + std::to_string(i)); + } d_nonLinearSolverPtr->save(savePath + "/ionRelax.chk"); - + dftUtils::writeDataIntoFile(tmpData, d_restartFilesPath + "/Step.chk", d_mpiCommParent); @@ -1220,10 +1193,6 @@ namespace dftfe int midImage = d_numberOfImages / 2; functionValue.push_back((d_dftfeWrapper[midImage])->getDFTFreeEnergy()); - - - - // functionValue.push_back( dftPtr[3]->getInternalEnergy()); } @@ -1291,10 +1260,10 @@ namespace dftfe SpringConstant = - 0.5 * (ksum - kdiff * std::cos(pi * (Ei - Emin) / (deltaE))); + 0.5 * (ksum - kdiff * std::cos(C_pi * (Ei - Emin) / (deltaE))); - pcout << "Image number " << NEBImage - << " Spring Constant: " << SpringConstant << std::endl; + // pcout << "Image number " << NEBImage + // << " Spring Constant: " << SpringConstant << std::endl; } @@ -1400,90 +1369,32 @@ namespace dftfe void nudgedElasticBandClass::init() { - - - double step_time; - if (d_dftPtr->getParametersObject().ionRelaxFlagsFile != "") - { - std::vector> tempRelaxFlagsData; - std::vector> tempForceData; - dftUtils::readRelaxationFlagsFile( - 6, - tempRelaxFlagsData, - tempForceData, - d_dftPtr->getParametersObject().ionRelaxFlagsFile); - AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, - ExcMessage( - "Incorrect number of entries in relaxationFlags file")); - d_relaxationFlags.clear(); - d_externalForceOnAtom.clear(); - - - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - for (unsigned int j = 0; j < 3; ++j) - { - d_relaxationFlags.push_back(tempRelaxFlagsData[i][j]); - d_externalForceOnAtom.push_back(tempForceData[i][j]); - } - } - // print relaxation flags - pcout << " --------------Ion force relaxation flags----------------" - << std::endl; - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - pcout << tempRelaxFlagsData[i][0] << " " - << tempRelaxFlagsData[i][1] << " " - << tempRelaxFlagsData[i][2] << std::endl; - } - pcout << " --------------------------------------------------" - << std::endl; - } - else - { - d_relaxationFlags.clear(); - d_externalForceOnAtom.clear(); - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - for (unsigned int j = 0; j < 3; ++j) - { - d_relaxationFlags.push_back(1.0); - d_externalForceOnAtom.push_back(0.0); - } - } - } - d_countrelaxationFlags = 0; - for (int i = 0; i < d_relaxationFlags.size(); i++) - { - if (d_relaxationFlags[i] == 1) - d_countrelaxationFlags++; - } - pcout << " Total No. of relaxation flags: " << d_countrelaxationFlags - << std::endl; - - - if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) - mkdir(d_restartFilesPath.c_str(), ACCESSPERMS); - std::vector> ionOptData(3 + d_numberGlobalCharges * 3, - std::vector(1, 0.0)); - ionOptData[0][0] = d_solver; - ionOptData[1][0] = - d_dftPtr->getParametersObject().usePreconditioner ? 1 : 0; - ionOptData[2][0] = d_numberGlobalCharges*d_numberOfImages; + std::vector> nudgedElasticBandData( + 3 + d_numberGlobalCharges * 3, std::vector(1, 0.0)); + nudgedElasticBandData[0][0] = d_solver; + nudgedElasticBandData[1][0] = 0; + nudgedElasticBandData[2][0] = d_numberGlobalCharges * d_numberOfImages; + nudgedElasticBandData[3][0] = + d_dftPtr->getParametersObject().periodicX ? 1 : 0; + nudgedElasticBandData[4][0] = + d_dftPtr->getParametersObject().periodicY ? 1 : 0; + nudgedElasticBandData[5][0] = + d_dftPtr->getParametersObject().periodicZ ? 1 : 0; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { for (unsigned int j = 0; j < 3; ++j) { - ionOptData[i * 3 + j + 3][0] = d_relaxationFlags[i * 3 + j]; + nudgedElasticBandData[i * 3 + j + 6][0] = + d_relaxationFlags[i * 3 + j]; } } if (!d_dftPtr->getParametersObject().reproducible_output) - dftUtils::writeDataIntoFile(ionOptData, - d_restartFilesPath + "/ionOpt.dat", + dftUtils::writeDataIntoFile(nudgedElasticBandData, + d_restartFilesPath + "/nudgedElasticBand.dat", d_mpiCommParent); d_ImageError.resize(d_numberOfImages); double Force; @@ -1498,8 +1409,6 @@ namespace dftfe if (!std::get<1>(groundState)) pcout << " NEB Warning!!: Ground State of Image: " << d_NEBImageno << " did not converge" << std::endl; - pcout << "##Completed initial GS of image: " << d_NEBImageno - << std::endl; } bool flag = true; pcout @@ -1522,7 +1431,7 @@ namespace dftfe for (int i = 0; i < d_numberOfImages; i++) { d_NEBImageno = i; - Force = 0.0; + Force = 0.0; ImageError(d_NEBImageno, Force); double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); pcout << " " << i << " " << Force << " " << Energy << " " @@ -1575,7 +1484,6 @@ namespace dftfe 0.8, d_dftPtr->getParametersObject().maxIonUpdateStep, true); - // print relaxation flags if (d_dftPtr->getParametersObject().verbosity >= 1) { @@ -1688,69 +1596,103 @@ namespace dftfe } int - nudgedElasticBandClass::checkRestart(std::string &coordinatesFile, - std::string &domainVectorsFile, - bool & scfRestart) + nudgedElasticBandClass::checkRestart(bool &periodic) -{ - /* int step1 = 0; - - if (d_isRestart) + { + std::vector> tmp, nudgedElasticBandData, tmp2; + dftUtils::readFile(1, + nudgedElasticBandData, + d_restartFilesPath + "/nudgedElasticBand.dat"); + dftUtils::readFile(1, tmp, d_restartFilesPath + "/Step.chk"); + dftUtils::readFile(1, tmp2, d_restartFilesPath + "/Step.chk.old"); + int solver = nudgedElasticBandData[0][0]; + bool usePreconditioner = nudgedElasticBandData[1][0] > 1e-6; + d_numberGlobalCharges = nudgedElasticBandData[2][0] / d_numberOfImages; + periodic = nudgedElasticBandData[3][0] == 1 || + nudgedElasticBandData[4][0] == 1 || + nudgedElasticBandData[5][0] == 1; + d_totalUpdateCalls = tmp[0][0]; + int Checkcall = tmp2[0][0]; + if (Checkcall != d_totalUpdateCalls) + d_totalUpdateCalls = Checkcall; + tmp.clear(); + dftUtils::readFile(1, + tmp, + d_restartFilesPath + "/Step" + + std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); + // d_maximumAtomForceToBeRelaxed = tmp[0][0]; + pcout << "Solver update: NEB is in Restart mode" << std::endl; + pcout << "Checking for files in Step: " << d_totalUpdateCalls << std::endl; + std::string path = + d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls); + bool flag = true; + pcout << "Looking for files of Step " << d_totalUpdateCalls + << " at: " << path << std::endl; + while (flag && d_totalUpdateCalls > 1) { - std::vector> t1, nebData; - pcout << " NEB is in Restart Mode" << std::endl; - dftfe::dftUtils::readFile( - 3, nebData, d_restartFilesPath + "/nebRestart/nudgedElasticBand.dat"); - dftfe::dftUtils::readFile(1, - t1, - d_restartFilesPath + "/nebRestart/Step.chk"); - step1 = t1[0][0]; - std::string tempfolder = d_restartFilesPath + "/nebRestart/Step"; - bool flag = true; - std::string path2 = tempfolder + std::to_string(step1); - pcout << "Looking for files of Step " << step1 << " at: " << path2 - << std::endl; - while (flag && step1 > 1) + path = + d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls); + for (int image = 0; image < d_numberOfImages; image++) { - for(image = 0; image < d_numberOfImages; image++) - { - std::string path = tempfolder + std::to_string(step1)+"/Image"+std::to_string(image); std::string file1; - if (nebData[4][0] == 1 || nebData[4][1] == 1 || nebData[4][2] == 1) - file1 = path + "/atomsFracCoordCurrent.chk"; + if (periodic) + file1 = path + "/Image" + std::to_string(image) + + "atomsFracCoordCurrent.chk"; else - file1 = path + "/atomsCartCoordCurrent.chk"; - std::string file2 = path + "/domainBoundingVectorsCurrent.chk"; + file1 = path + "/Image" + std::to_string(image) + + "/atomsCartCoordCurrent.chk"; + std::string file2 = path + "/Image" + std::to_string(image) + + "/domainBoundingVectorsCurrent.chk"; std::ifstream readFile1(file1.c_str()); std::ifstream readFile2(file2.c_str()); - flage = flag && !readFile1.fail() && !readFile2.fail(); - } - - if (flag) - { - - coordinatesFile = file1; - domainVectorsFile = file2; - - pcout << " Restart files are found in: " << path << std::endl; - break; - } + flag = flag && !readFile1.fail() && !readFile2.fail(); + } - else - { - pcout << "----Error opening restart files present in: " << path - << std::endl - << "Switching to time: " << --step1 << " ----" - << std::endl; - } + if (flag) + { + pcout << " Restart files are found in: " << path << std::endl; + break; } - if (step1 == t1[0][0]) - scfRestart = true; + else - scfRestart = false; + { + pcout << "----Error opening restart files present in: " << path + << std::endl + << "Switching to time: " << --d_totalUpdateCalls << " ----" + << std::endl; + } } - - return (step1); */ -} + tmp.clear(); + dftUtils::readFile(1, + tmp, + d_restartFilesPath + "/step" + + std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); + d_maximumAtomForceToBeRelaxed = tmp[0][0]; + d_relaxationFlags.resize(d_numberGlobalCharges * 3); + bool relaxationFlagsMatch = true; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + relaxationFlagsMatch = + (d_relaxationFlags[i * 3 + j] == + (int)nudgedElasticBandData[i * 3 + j + 6][0]) && + relaxationFlagsMatch; + } + } + if (solver != d_solver) + pcout + << "Solver has changed since last save, the newly set solver will start from scratch." + << std::endl; + if (!relaxationFlagsMatch) + pcout + << "Relaxations flags have changed since last save, the solver will be reset to work with the new flags." + << std::endl; + d_solverRestart = (relaxationFlagsMatch) && (solver == d_solver); + d_solverRestartPath = + d_restartFilesPath + "/step" + std::to_string(d_totalUpdateCalls); + + return (d_totalUpdateCalls); + } } // namespace dftfe diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 1be2c54f8..3727b8ace 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1395,8 +1395,8 @@ namespace dftfe saveRhoData = prm.get_bool("SAVE RHO DATA"); loadRhoData = prm.get_bool("LOAD RHO DATA"); restartSpinFromNoSpin = prm.get_bool("RESTART SP FROM NO SP"); - if(solverMode=="NEB") - saveRhoData=true; + if (solverMode == "NEB") + saveRhoData = true; } prm.leave_subsection(); @@ -1765,6 +1765,11 @@ namespace dftfe wfcBlockSize == chebyWfcBlockSize, ExcMessage( "DFT-FE Error: WFC BLOCK SIZE and CHEBY WFC BLOCK SIZE must be same for band parallelization.")); + + AssertThrow( + !(solverMode == "NEB" && usePreconditioner == true), + ExcMessage( + "DFT-FE Error: the current NEB implementation does not allow Preconditioner to be used for optimization")); } From e6c0b8f3a3b6d6f4634a3dd34d78501f8380e6ed Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Wed, 1 Feb 2023 17:18:57 +0530 Subject: [PATCH 14/53] Bug Fixes --- src/neb/nudgedElasticBandClass.cc | 202 ++++++++++++++++-------------- 1 file changed, 107 insertions(+), 95 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 4ad988953..ee0b7f3e7 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -62,65 +62,6 @@ namespace dftfe MPI_Barrier(d_mpiCommParent); d_solverRestart = d_isRestart; - if (d_dftPtr->getParametersObject().ionRelaxFlagsFile != "") - { - std::vector> tempRelaxFlagsData; - std::vector> tempForceData; - dftUtils::readRelaxationFlagsFile( - 6, - tempRelaxFlagsData, - tempForceData, - d_dftPtr->getParametersObject().ionRelaxFlagsFile); - AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, - ExcMessage( - "Incorrect number of entries in relaxationFlags file")); - d_relaxationFlags.clear(); - d_externalForceOnAtom.clear(); - - - - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - for (unsigned int j = 0; j < 3; ++j) - { - d_relaxationFlags.push_back(tempRelaxFlagsData[i][j]); - d_externalForceOnAtom.push_back(tempForceData[i][j]); - } - } - // print relaxation flags - pcout << " --------------Ion force relaxation flags----------------" - << std::endl; - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - pcout << tempRelaxFlagsData[i][0] << " " - << tempRelaxFlagsData[i][1] << " " - << tempRelaxFlagsData[i][2] << std::endl; - } - pcout << " --------------------------------------------------" - << std::endl; - } - else - { - d_relaxationFlags.clear(); - d_externalForceOnAtom.clear(); - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - for (unsigned int j = 0; j < 3; ++j) - { - d_relaxationFlags.push_back(1.0); - d_externalForceOnAtom.push_back(0.0); - } - } - } - d_countrelaxationFlags = 0; - for (int i = 0; i < d_relaxationFlags.size(); i++) - { - if (d_relaxationFlags[i] == 1) - d_countrelaxationFlags++; - } - pcout << " Total No. of relaxation flags: " << d_countrelaxationFlags - << std::endl; - if (!d_isRestart) { @@ -902,18 +843,22 @@ namespace dftfe flagmultiplier[0] = 0; flagmultiplier[d_numberOfImages - 1] = 0; bool flag = false; - pcout << "----------------------------------------------" << std::endl; - pcout << " NEB STEP: " << d_totalUpdateCalls << " " + pcout + << "-----------------------------------------------------------------------" + << std::endl; + pcout << " NEB STEP: " << d_totalUpdateCalls << std::endl; - pcout << "----------------------------------------------" << std::endl; + pcout + << "-----------------------------------------------------------------------" + << std::endl; pcout << " " - << " Image No " - << " " - << "Internal Energy in Ha" - << " " - << "Free Energy in Ha" - << " " - << "Max Force Error in Ha/bohr" << std::endl; + << " Image No. " + << " " + << "Internal Energy (Ha)" + << " " + << "Free Energy (Ha)" + << " " + << "Max Force Error (Ha/bohr)" << std::endl; double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); for (int image = 0; image < d_numberOfImages; image++) { @@ -935,12 +880,12 @@ namespace dftfe flag = false; if (flagmultiplier[image] == 0) pcout << " " - << " Image: " << image << "(T)" + << " " << image << "(T)" << " " << InternalEnergy << " " << FreeEnergy << " " << ForceError << std::endl; else pcout << " " - << " Image: " << image << "(F)" + << " " << image << "(F)" << " " << InternalEnergy << " " << FreeEnergy << " " << ForceError << std::endl; maxEnergy = @@ -982,7 +927,7 @@ namespace dftfe double F_per = 0.0; LNorm(F_per, Forceperpendicular, 0, d_countrelaxationFlags); LNorm(F_spring, SpringForce, 0, d_countrelaxationFlags); - pcout << image << " " << F_per << " " << F_spring << std::endl; + // pcout << image << " " << F_per << " " << F_spring << std::endl; @@ -1370,11 +1315,99 @@ namespace dftfe nudgedElasticBandClass::init() { double step_time; + if (d_dftPtr->getParametersObject().ionRelaxFlagsFile != "") + { + std::vector> tempRelaxFlagsData; + std::vector> tempForceData; + dftUtils::readRelaxationFlagsFile( + 6, + tempRelaxFlagsData, + tempForceData, + d_dftPtr->getParametersObject().ionRelaxFlagsFile); + AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, + ExcMessage( + "Incorrect number of entries in relaxationFlags file")); + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + d_relaxationFlags.push_back(tempRelaxFlagsData[i][j]); + d_externalForceOnAtom.push_back(tempForceData[i][j]); + } + } + // print relaxation flags + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + pcout << tempRelaxFlagsData[i][0] << " " + << tempRelaxFlagsData[i][1] << " " + << tempRelaxFlagsData[i][2] << std::endl; + } + pcout << " --------------------------------------------------" + << std::endl; + } + else + { + d_relaxationFlags.clear(); + d_externalForceOnAtom.clear(); + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + d_relaxationFlags.push_back(1.0); + d_externalForceOnAtom.push_back(0.0); + } + } + } + d_countrelaxationFlags = 0; + for (int i = 0; i < d_relaxationFlags.size(); i++) + { + if (d_relaxationFlags[i] == 1) + d_countrelaxationFlags++; + } + pcout << " Total No. of relaxation flags: " << d_countrelaxationFlags + << std::endl; + if (d_isRestart) + { + std::vector> nudgedElasticBandData; + dftUtils::readFile(1, + nudgedElasticBandData, + d_restartFilesPath + "/nudgedElasticBand.dat"); + + bool relaxationFlagsMatch = true; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + for (unsigned int j = 0; j < 3; ++j) + { + relaxationFlagsMatch = + (d_relaxationFlags[i * 3 + j] == + (int)nudgedElasticBandData[i * 3 + j + 6][0]) && + relaxationFlagsMatch; + } + } + if (nudgedElasticBandData[0][0] != d_solver) + pcout + << "Solver has changed since last save, the newly set solver will start from scratch." + << std::endl; + if (!relaxationFlagsMatch) + pcout + << "Relaxations flags have changed since last save, the solver will be reset to work with the new flags." + << std::endl; + d_solverRestart = + (relaxationFlagsMatch) && (nudgedElasticBandData[0][0] == d_solver); + d_solverRestartPath = + d_restartFilesPath + "/step" + std::to_string(d_totalUpdateCalls); + } + + std::vector> nudgedElasticBandData( - 3 + d_numberGlobalCharges * 3, std::vector(1, 0.0)); + 6 + d_numberGlobalCharges * 3, std::vector(1, 0.0)); nudgedElasticBandData[0][0] = d_solver; nudgedElasticBandData[1][0] = 0; nudgedElasticBandData[2][0] = d_numberGlobalCharges * d_numberOfImages; @@ -1669,28 +1702,7 @@ namespace dftfe std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); d_maximumAtomForceToBeRelaxed = tmp[0][0]; d_relaxationFlags.resize(d_numberGlobalCharges * 3); - bool relaxationFlagsMatch = true; - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) - { - for (unsigned int j = 0; j < 3; ++j) - { - relaxationFlagsMatch = - (d_relaxationFlags[i * 3 + j] == - (int)nudgedElasticBandData[i * 3 + j + 6][0]) && - relaxationFlagsMatch; - } - } - if (solver != d_solver) - pcout - << "Solver has changed since last save, the newly set solver will start from scratch." - << std::endl; - if (!relaxationFlagsMatch) - pcout - << "Relaxations flags have changed since last save, the solver will be reset to work with the new flags." - << std::endl; - d_solverRestart = (relaxationFlagsMatch) && (solver == d_solver); - d_solverRestartPath = - d_restartFilesPath + "/step" + std::to_string(d_totalUpdateCalls); + return (d_totalUpdateCalls); } From 1ff1e0b5941bd1bb60968f22b679cc6eb0756796 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 2 Feb 2023 18:24:11 +0530 Subject: [PATCH 15/53] Restart fixes --- src/neb/nudgedElasticBandClass.cc | 62 ++++++------------------------- 1 file changed, 12 insertions(+), 50 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index ee0b7f3e7..939ea4a55 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -499,7 +499,6 @@ namespace dftfe { norm = norm + v[i] * v[i]; } - pcout << std::endl; norm = sqrt(norm); AssertThrow( @@ -631,7 +630,6 @@ namespace dftfe CalculateSpringConstant(image - 1, kminus); innerproduct = -0.5 * (k + kminus) * norm2; } - // pcout << "Spring Force on image: " << image << std::endl; for (count = 0; count < d_countrelaxationFlags; count++) { ForceSpring[count] = innerproduct * tangent[count]; @@ -1212,45 +1210,7 @@ namespace dftfe } - void - nudgedElasticBandClass::WriteRestartFiles(int step) - { - /*std::vector> stepIndexData(1, std::vector(1, - 0)); stepIndexData[0][0] = double(step); pcout<<"Writing restart files for - step: "<NEBwriteDomainAndAtomCoordinates(cordFolder,std::to_string(i)); - } - dftUtils::writeDataIntoFile(stepIndexData, newFolder3,d_mpiCommParent); - if(d_this_mpi_process == 0) - { - std::ofstream outfile; - outfile.open(tempfolder+"/coordinates.inp", std::ios_base::app); - for(int i=0; i < d_numberOfImages; i++) - { - std::vector> atomLocations; - std::string coordinatesfolder = - tempfolder+"/coordinates.inp"+std::to_string(i); - dftUtils::readFile(5,atomLocations,coordinatesfolder); - for(int iCharge = 0; iCharge < numberGlobalCharges; iCharge++) - { - outfile< 1) + while (!flag && d_totalUpdateCalls > 1) { path = d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls); + flag = true; for (int image = 0; image < d_numberOfImages; image++) { std::string file1; @@ -1673,12 +1632,15 @@ namespace dftfe "atomsFracCoordCurrent.chk"; else file1 = path + "/Image" + std::to_string(image) + - "/atomsCartCoordCurrent.chk"; + "atomsCartCoordCurrent.chk"; std::string file2 = path + "/Image" + std::to_string(image) + - "/domainBoundingVectorsCurrent.chk"; + "domainBoundingVectorsCurrent.chk"; std::ifstream readFile1(file1.c_str()); std::ifstream readFile2(file2.c_str()); flag = flag && !readFile1.fail() && !readFile2.fail(); + pcout< Date: Sat, 6 May 2023 07:31:29 +0530 Subject: [PATCH 16/53] Merge fixes --- src/neb/nudgedElasticBandClass.cc | 12 ++++++------ utils/dftParameters.cc | 18 +++++++++--------- utils/runParameters.cc | 16 ++++++++-------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 939ea4a55..593294c08 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -45,8 +45,8 @@ namespace dftfe const std::string &coordinatesFileNEB, const std::string &domainVectorsFileNEB) : d_mpiCommParent(mpi_comm_parent) - , d_this_mpi_process(Utilities::MPI::this_mpi_process(mpi_comm_parent)) - , pcout(std::cout, (Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) + , d_this_mpi_process(dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) + , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) , d_restartFilesPath(restartFilesPath) , d_isRestart(restart) , d_verbosity(verbosity) @@ -83,7 +83,7 @@ namespace dftfe std::string Folder = d_restartFilesPath + "/Step0"; - if (Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) + if (dealii::Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) mkdir(Folder.c_str(), ACCESSPERMS); @@ -196,7 +196,7 @@ namespace dftfe AssertThrow( d_dftPtr->getParametersObject().natoms == d_numberGlobalCharges, - ExcMessage( + dealii::ExcMessage( "DFT-FE Error: The number atoms" "read from the atomic coordinates file (input through ATOMIC COORDINATES FILE) doesn't" "match the NATOMS input. Please check your atomic coordinates file. Sometimes an extra" @@ -503,7 +503,7 @@ namespace dftfe AssertThrow( norm > 0.000000000001, - ExcMessage( + dealii::ExcMessage( "DFT-FE Error: cordinates have 0 displacement between images")); for (i = 0; i < len; i++) { @@ -1285,7 +1285,7 @@ namespace dftfe tempForceData, d_dftPtr->getParametersObject().ionRelaxFlagsFile); AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, - ExcMessage( + dealii::ExcMessage( "Incorrect number of entries in relaxationFlags file")); d_relaxationFlags.clear(); d_externalForceOnAtom.clear(); diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 5932529f4..9c1e6f5f6 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1053,50 +1053,50 @@ namespace dftfe prm.declare_entry( "ALLOW IMAGE FREEZING", "false", - Patterns::Bool(), + dealii::Patterns::Bool(), "If true images less than threshold will freeze for optimization step"); prm.declare_entry( "NUMBER OF IMAGES", "1", - Patterns::Integer(1, 50), + dealii::Patterns::Integer(1, 50), "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); prm.declare_entry( "MAXIMUM SPRING CONSTANT", "1e-1", - Patterns::Double(), + dealii::Patterns::Double(), "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "MINIMUM SPRING CONSTANT", "5e-2", - Patterns::Double(), + dealii::Patterns::Double(), "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "PATH THRESHOLD", "1e-1", - Patterns::Double(), + dealii::Patterns::Double(), "[Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD "); prm.declare_entry( "MAXIMUM NUMBER OF NEB ITERATIONS", "100", - Patterns::Integer(1, 250), + dealii::Patterns::Integer(1, 250), "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); prm.declare_entry( "NEB COORDINATES FILE", "", - Patterns::Anything(), + dealii::Patterns::Anything(), "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); prm.declare_entry( "NEB DOMAIN VECTORS FILE", "", - Patterns::Anything(), + dealii::Patterns::Anything(), "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); } prm.leave_subsection(); @@ -1799,7 +1799,7 @@ namespace dftfe AssertThrow( !(solverMode == "NEB" && usePreconditioner == true), - ExcMessage( + dealii::ExcMessage( "DFT-FE Error: the current NEB implementation does not allow Preconditioner to be used for optimization")); } diff --git a/utils/runParameters.cc b/utils/runParameters.cc index f09405214..b8947a19d 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -59,50 +59,50 @@ namespace dftfe prm.declare_entry( "ALLOW IMAGE FREEZING", "false", - Patterns::Bool(), + dealii::Patterns::Bool(), "If true images less than threshold will freeze for optimization step"); prm.declare_entry( "NUMBER OF IMAGES", "1", - Patterns::Integer(1, 50), + dealii::Patterns::Integer(1, 50), "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); prm.declare_entry( "MAXIMUM SPRING CONSTANT", "1e-1", - Patterns::Double(), + dealii::Patterns::Double(), "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "MINIMUM SPRING CONSTANT", "5e-2", - Patterns::Double(), + dealii::Patterns::Double(), "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "PATH THRESHOLD", "1e-1", - Patterns::Double(), + dealii::Patterns::Double(), "[Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD "); prm.declare_entry( "MAXIMUM NUMBER OF NEB ITERATIONS", "100", - Patterns::Integer(1, 250), + dealii::Patterns::Integer(1, 250), "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); prm.declare_entry( "NEB COORDINATES FILE", "", - Patterns::Anything(), + dealii::Patterns::Anything(), "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); prm.declare_entry( "NEB DOMAIN VECTORS FILE", "", - Patterns::Anything(), + dealii::Patterns::Anything(), "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); } prm.leave_subsection(); From 99fd6d79fe32d65132eb73d0a46d1a051aa6d34d Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 8 May 2023 10:47:48 +0530 Subject: [PATCH 17/53] Clean up of writeDomainAndAtomCoordinatesFloatingCharges() to writeDomainAndAtomCoordinates() --- include/dft.h | 2 +- include/dftBase.h | 2 +- include/dftfeWrapper.h | 8 ++++++-- src/dft/restart.cc | 2 +- src/dftfeWrapper.cc | 4 ++-- src/geoOpt/geoOptCell.cc | 4 ++-- src/geoOpt/geoOptIon.cc | 4 ++-- src/md/molecularDynamicsClass.cc | 2 +- src/neb/nudgedElasticBandClass.cc | 2 +- 9 files changed, 17 insertions(+), 13 deletions(-) diff --git a/include/dft.h b/include/dft.h index 8e9fceec7..6d199f45a 100644 --- a/include/dft.h +++ b/include/dft.h @@ -340,7 +340,7 @@ namespace dftfe * during restart. */ void - writeDomainAndAtomCoordinatesFloatingCharges(const std::string Path) const; + writeDomainAndAtomCoordinates(const std::string Path) const; /** * @brief Gets the current atom Locations in cartesian form diff --git a/include/dftBase.h b/include/dftBase.h index e9632b8b7..b2c0ba46b 100644 --- a/include/dftBase.h +++ b/include/dftBase.h @@ -177,7 +177,7 @@ namespace dftfe * during restart. */ virtual void - writeDomainAndAtomCoordinatesFloatingCharges( + writeDomainAndAtomCoordinates( const std::string Path) const = 0; }; diff --git a/include/dftfeWrapper.h b/include/dftfeWrapper.h index 9d5a5d1af..31db9529d 100644 --- a/include/dftfeWrapper.h +++ b/include/dftfeWrapper.h @@ -350,10 +350,14 @@ namespace dftfe /** - * @brief Writes the domainVectors data and atom coordinates to files in path provided. + * @brief writes the current domain bounding vectors and atom coordinates to files for + * structural optimization and dynamics restarts.simplified version for + * floating charges case + * @param[in] Path The folder path to store the atom coordinates required + * during restart. */ void - writeDomainAndAtomCoordinatesFloatingCharges(const std::string Path) const; + writeDomainAndAtomCoordinates(const std::string Path) const; dftBase * diff --git a/src/dft/restart.cc b/src/dft/restart.cc index 92fa3a879..4aeacbdf5 100644 --- a/src/dft/restart.cc +++ b/src/dft/restart.cc @@ -617,7 +617,7 @@ namespace dftfe template void dftClass:: - writeDomainAndAtomCoordinatesFloatingCharges(const std::string Path) const + writeDomainAndAtomCoordinates(const std::string Path) const { dftUtils::writeDataIntoFile(d_domainBoundingVectors, Path + "domainBoundingVectorsCurrent.chk", diff --git a/src/dftfeWrapper.cc b/src/dftfeWrapper.cc index 39f0badfd..1ed4dc279 100644 --- a/src/dftfeWrapper.cc +++ b/src/dftfeWrapper.cc @@ -1131,14 +1131,14 @@ namespace dftfe void - dftfeWrapper::writeDomainAndAtomCoordinatesFloatingCharges( + dftfeWrapper::writeDomainAndAtomCoordinates( const std::string Path) const { AssertThrow( d_mpi_comm_parent != MPI_COMM_NULL, dealii::ExcMessage( "DFT-FE Error: dftfeWrapper cannot be used on MPI_COMM_NULL.")); - d_dftfeBasePtr->writeDomainAndAtomCoordinatesFloatingCharges(Path); + d_dftfeBasePtr->writeDomainAndAtomCoordinates(Path); } diff --git a/src/geoOpt/geoOptCell.cc b/src/geoOpt/geoOptCell.cc index 8a714cd75..30c925d94 100644 --- a/src/geoOpt/geoOptCell.cc +++ b/src/geoOpt/geoOptCell.cc @@ -466,7 +466,7 @@ namespace dftfe << "-----------------------------------------------------------------------------------" << std::endl; - d_dftPtr->writeDomainAndAtomCoordinatesFloatingCharges("./"); + d_dftPtr->writeDomainAndAtomCoordinates("./"); } else if (solverReturn == nonLinearSolver::MAX_ITER_REACHED) { @@ -642,7 +642,7 @@ namespace dftfe mkdir(savePath.c_str(), ACCESSPERMS); const dealii::Tensor<2, 3, double> tempGradient = d_dftPtr->getCellStress(); - d_dftPtr->writeDomainAndAtomCoordinatesFloatingCharges(savePath); + d_dftPtr->writeDomainAndAtomCoordinates(savePath); d_nonLinearSolverPtr->save(savePath + "/cellRelax.chk"); tmpData[0][0] = d_totalUpdateCalls; dftUtils::writeDataIntoFile(tmpData, diff --git a/src/geoOpt/geoOptIon.cc b/src/geoOpt/geoOptIon.cc index e12d7af87..9d03a724f 100644 --- a/src/geoOpt/geoOptIon.cc +++ b/src/geoOpt/geoOptIon.cc @@ -406,7 +406,7 @@ namespace dftfe << "-----------------------------------------------------------------------------------" << std::endl; - d_dftPtr->writeDomainAndAtomCoordinatesFloatingCharges("./"); + d_dftPtr->writeDomainAndAtomCoordinates("./"); } else if (solverReturn == nonLinearSolver::FAILURE) { @@ -690,7 +690,7 @@ namespace dftfe dftUtils::writeDataIntoFile(forceData, savePath + "/maxForce.chk", mpi_communicator); - d_dftPtr->writeDomainAndAtomCoordinatesFloatingCharges(savePath + "/"); + d_dftPtr->writeDomainAndAtomCoordinates(savePath + "/"); d_nonLinearSolverPtr->save(savePath + "/ionRelax.chk"); std::vector> tmpData(1, std::vector(1, 0.0)); diff --git a/src/md/molecularDynamicsClass.cc b/src/md/molecularDynamicsClass.cc index c21bd6a9b..9735ccac6 100644 --- a/src/md/molecularDynamicsClass.cc +++ b/src/md/molecularDynamicsClass.cc @@ -1577,7 +1577,7 @@ namespace dftfe fileVelocityData[iCharge][2] = velocity[3 * iCharge + 2]; } std::string cordFolder = tempfolder + "/"; - d_dftPtr->writeDomainAndAtomCoordinatesFloatingCharges(cordFolder); + d_dftPtr->writeDomainAndAtomCoordinates(cordFolder); if (time > 1) { if (d_dftPtr->getParametersObject().reproducible_output == false) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 593294c08..78e90b4ff 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -1108,7 +1108,7 @@ namespace dftfe d_mpiCommParent); for (int i = 0; i < d_numberOfImages; i++) { - d_dftfeWrapper[i]->writeDomainAndAtomCoordinatesFloatingCharges( + d_dftfeWrapper[i]->writeDomainAndAtomCoordinates( savePath + "/Image" + std::to_string(i)); } d_nonLinearSolverPtr->save(savePath + "/ionRelax.chk"); From a7aafb291f665abfbedf4dcc061f1bf8f044fe21 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 8 May 2023 10:50:08 +0530 Subject: [PATCH 18/53] Added comment --- include/dft.h | 3 +-- include/dftBase.h | 3 +-- include/dftfeWrapper.h | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/include/dft.h b/include/dft.h index 6d199f45a..20e1a42aa 100644 --- a/include/dft.h +++ b/include/dft.h @@ -334,8 +334,7 @@ namespace dftfe /** * @brief writes the current domain bounding vectors and atom coordinates to files for - * structural optimization and dynamics restarts.simplified version for - * floating charges case + * structural optimization and dynamics restarts. The coordinates are stored as: 1. fractional for semi-periodic/periodic 2. Cartesian for non-periodic. * @param[in] Path The folder path to store the atom coordinates required * during restart. */ diff --git a/include/dftBase.h b/include/dftBase.h index b2c0ba46b..ccc8359c2 100644 --- a/include/dftBase.h +++ b/include/dftBase.h @@ -171,8 +171,7 @@ namespace dftfe /** * @brief writes the current domain bounding vectors and atom coordinates to files for - * structural optimization and dynamics restarts.simplified version for - * floating charges case + * structural optimization and dynamics restarts. The coordinates are stored as: 1. fractional for semi-periodic/periodic 2. Cartesian for non-periodic. * @param[in] Path The folder path to store the atom coordinates required * during restart. */ diff --git a/include/dftfeWrapper.h b/include/dftfeWrapper.h index 31db9529d..c4cd5ea46 100644 --- a/include/dftfeWrapper.h +++ b/include/dftfeWrapper.h @@ -351,8 +351,7 @@ namespace dftfe /** * @brief writes the current domain bounding vectors and atom coordinates to files for - * structural optimization and dynamics restarts.simplified version for - * floating charges case + * structural optimization and dynamics restarts. The coordinates are stored as: 1. fractional for semi-periodic/periodic 2. Cartesian for non-periodic. * @param[in] Path The folder path to store the atom coordinates required * during restart. */ From a51c3f7575ac8e7f29ab79bb5751022224ed9b4e Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 1 Jun 2023 11:47:39 +0530 Subject: [PATCH 19/53] Cleanups in NEBclass and default values --- include/nudgedElasticBandClass.h | 1 - src/neb/nudgedElasticBandClass.cc | 4 ++-- utils/dftParameters.cc | 16 ++++++---------- utils/runParameters.cc | 12 ++++++------ 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index b1184ba6b..1973b23bc 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -143,7 +143,6 @@ namespace dftfe unsigned int d_maximumNEBIteration; double d_optimizertolerance; unsigned int optimizermatItr; - double Forcecutoff; unsigned int d_countrelaxationFlags; std::vector d_forceOnImages; std::map>> d_atomLocationsInitial; diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 78e90b4ff..e80a39dbb 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -710,7 +710,7 @@ namespace dftfe { pcout << " ...Ion force relaxation completed as maximum force magnitude is less than FORCE TOL: " - << d_dftPtr->getParametersObject().forceRelaxTol + << d_optimizertolerance << ", total number of ion position updates: " << d_totalUpdateCalls << std::endl; pcout << "--------------Final Ground State Results-------------" @@ -1429,7 +1429,7 @@ namespace dftfe pcout << " " << i << " " << Force << " " << Energy << " " << std::endl; d_forceOnImages.push_back(Force); - if (Force > Forcecutoff && i > 0 && i < d_numberOfImages - 1) + if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { flag = false; } diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 5e86bd8ec..a2474aee0 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -658,11 +658,7 @@ namespace dftfe dealii::Patterns::Integer(0, 1), "[Standard] Spin polarization: 0 for no spin polarization and 1 for collinear spin polarization calculation. Default option is 0."); - prm.declare_entry( - "NUMBER OF IMAGES", - "1", - dealii::Patterns::Integer(1, 50), - "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); + @@ -1058,25 +1054,25 @@ namespace dftfe prm.declare_entry( "NUMBER OF IMAGES", - "1", + "7", dealii::Patterns::Integer(1, 50), - "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); + "[Standard] NUMBER OF IMAGES:Default option is 7. When NEB is triggered this controls the total number of images along the MEP including the end points"); prm.declare_entry( "MAXIMUM SPRING CONSTANT", - "1e-1", + "5e-3", dealii::Patterns::Double(), "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "MINIMUM SPRING CONSTANT", - "5e-2", + "2e-3", dealii::Patterns::Double(), "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "PATH THRESHOLD", - "1e-1", + "5e-4", dealii::Patterns::Double(), "[Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD "); diff --git a/utils/runParameters.cc b/utils/runParameters.cc index b8947a19d..8de5e01a1 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -64,25 +64,25 @@ namespace dftfe prm.declare_entry( "NUMBER OF IMAGES", - "1", - dealii::Patterns::Integer(1, 50), - "[Standard] NUMBER OF IMAGES:Default option is 1. When NEB is triggered this controls the total number of images along the MEP including the end points"); + "7", + dealii::Patterns::Integer(1, 20), + "[Standard] NUMBER OF IMAGES:Default option is 7. When NEB is triggered this controls the total number of images along the MEP including the end points"); prm.declare_entry( "MAXIMUM SPRING CONSTANT", - "1e-1", + "5e-3", dealii::Patterns::Double(), "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "MINIMUM SPRING CONSTANT", - "5e-2", + "2e-3", dealii::Patterns::Double(), "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); prm.declare_entry( "PATH THRESHOLD", - "1e-1", + "5e-4", dealii::Patterns::Double(), "[Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD "); From 51808c24c59aab454ab47df66d7cc2178239887b Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 1 Jun 2023 15:27:25 +0530 Subject: [PATCH 20/53] Cleanup of dftParams and RunParams. --- include/constants.h | 2 +- include/nudgedElasticBandClass.h | 44 +++++++++++------- include/runParameters.h | 7 +++ src/main.cc | 5 +++ src/neb/nudgedElasticBandClass.cc | 48 ++++++++++++-------- utils/dftParameters.cc | 75 ++++++++++++++++++++++++++----- utils/runParameters.cc | 38 +++++++++++++++- 7 files changed, 172 insertions(+), 47 deletions(-) diff --git a/include/constants.h b/include/constants.h index a6b552a40..adbf4d3f4 100644 --- a/include/constants.h +++ b/include/constants.h @@ -100,7 +100,7 @@ namespace dftfe constexpr unsigned int C_num1DQuadNLPSP() { - return 18; // Can be changed from 14 to 18 Step 1 + return 14; // Can be changed from 14 to 18 Step 1 } /// number of copies 1d quad rule non-local PSP diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 1973b23bc..81cd34e90 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -36,19 +36,25 @@ namespace dftfe * Third, creates the array of pointers of dftClass for each image. */ - nudgedElasticBandClass(const std::string parameter_file, - const std::string restartFilesPath, - const MPI_Comm & mpi_comm_parent, - const bool restart, - const int verbosity, - int numberOfImages, - bool imageFreeze, - double Kmax, - double Kmin, - double pathThreshold, - int maximumNEBIteration, - const std::string &coordinatesFileNEB, - const std::string &domainVectorsFileNEB); + nudgedElasticBandClass( + const std::string parameter_file, + const std::string restartFilesPath, + const MPI_Comm & mpi_comm_parent, + const bool restart, + const int verbosity, + int d_numberOfImages, + bool imageFreeze, + double Kmax, + double Kmin, + double pathThreshold, + int maximumNEBIteration, + unsigned int _maxLineSearchIterCGPRP, + unsigned int _lbfgsNumPastSteps, + std::string &_bfgsStepMethod, + double optimizermaxIonUpdateStep, + std::string &optimizationSolver, + const std::string &coordinatesFileNEB, + const std::string &domainVectorsFileNEB); //~nudgedElasticBandClass(); @@ -139,11 +145,17 @@ namespace dftfe unsigned int d_restartFlag; unsigned int d_numberGlobalCharges; double d_maximumAtomForceToBeRelaxed; - unsigned int d_numberOfImages; + unsigned int d_numberOfImages; + unsigned int d_countrelaxationFlags; + //Solver Details unsigned int d_maximumNEBIteration; double d_optimizertolerance; - unsigned int optimizermatItr; - unsigned int d_countrelaxationFlags; + unsigned int maxLineSearchIterCGPRP; + std::string bfgsStepMethod; + double d_optimizermaxIonUpdateStep; + unsigned int lbfgsNumPastSteps; + std::string d_optimizationSolver; + std::vector d_forceOnImages; std::map>> d_atomLocationsInitial; std::vector d_relaxationFlags; diff --git a/include/runParameters.h b/include/runParameters.h index c3361d79c..6f43e7600 100644 --- a/include/runParameters.h +++ b/include/runParameters.h @@ -42,6 +42,13 @@ namespace dftfe double Kmin; double pathThreshold; int maximumNEBiteration; + + unsigned int maxLineSearchIterCGPRP; + std::string bfgsStepMethod; + double optimizermaxIonUpdateStep; + unsigned int lbfgsNumPastSteps; + std::string optimizationSolver; + std::string coordinatesFileNEB, domainVectorsFileNEB; runParameters() = default; diff --git a/src/main.cc b/src/main.cc index 3a6ec6443..0c9915f56 100644 --- a/src/main.cc +++ b/src/main.cc @@ -182,6 +182,11 @@ main(int argc, char *argv[]) runParams.Kmin, runParams.pathThreshold, runParams.maximumNEBiteration, + runParams.maxLineSearchIterCGPRP, + runParams.lbfgsNumPastSteps, + runParams.bfgsStepMethod, + runParams.optimizermaxIonUpdateStep, + runParams.optimizationSolver, runParams.coordinatesFileNEB, runParams.domainVectorsFileNEB); diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index e80a39dbb..73f5663f5 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -42,6 +42,11 @@ namespace dftfe double Kmin, double pathThreshold, int maximumNEBIteration, + unsigned int _maxLineSearchIterCGPRP, + unsigned int _lbfgsNumPastSteps, + std::string &_bfgsStepMethod, + double optimizermaxIonUpdateStep, + std::string &optimizationSolver, const std::string &coordinatesFileNEB, const std::string &domainVectorsFileNEB) : d_mpiCommParent(mpi_comm_parent) @@ -56,6 +61,11 @@ namespace dftfe , d_kmin(Kmin) , d_optimizertolerance(pathThreshold) , d_maximumNEBIteration(maximumNEBIteration) + , lbfgsNumPastSteps(_lbfgsNumPastSteps) + , maxLineSearchIterCGPRP(_maxLineSearchIterCGPRP) + , d_optimizermaxIonUpdateStep(optimizermaxIonUpdateStep) + , d_optimizationSolver(optimizationSolver) + , bfgsStepMethod(_bfgsStepMethod) { // Read Coordinates file and create coordinates for each image @@ -187,11 +197,11 @@ namespace dftfe } } d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); - if (d_dftPtr->getParametersObject().ionOptSolver == "BFGS") + if (d_optimizationSolver == "BFGS") d_solver = 0; - else if (d_dftPtr->getParametersObject().ionOptSolver == "LBFGS") + else if (d_optimizationSolver == "LBFGS") d_solver = 1; - else if (d_dftPtr->getParametersObject().ionOptSolver == "CGPRP") + else if (d_optimizationSolver == "CGPRP") d_solver = 2; AssertThrow( @@ -1449,19 +1459,19 @@ namespace dftfe if (d_solver == 0) d_nonLinearSolverPtr = std::make_unique( - d_dftPtr->getParametersObject().usePreconditioner, - d_dftPtr->getParametersObject().bfgsStepMethod == "RFO", + false, + bfgsStepMethod == "RFO", d_maximumNEBIteration, d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, - d_dftPtr->getParametersObject().maxIonUpdateStep, + d_optimizermaxIonUpdateStep, true); else if (d_solver == 1) d_nonLinearSolverPtr = std::make_unique( - d_dftPtr->getParametersObject().usePreconditioner, - d_dftPtr->getParametersObject().maxIonUpdateStep, + false, + d_optimizermaxIonUpdateStep, d_maximumNEBIteration, - d_dftPtr->getParametersObject().lbfgsNumPastSteps, + lbfgsNumPastSteps, d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, true); @@ -1471,9 +1481,9 @@ namespace dftfe d_dftPtr->getParametersObject().verbosity, d_mpiCommParent, 1e-4, - d_dftPtr->getParametersObject().maxLineSearchIterCGPRP, + maxLineSearchIterCGPRP, 0.8, - d_dftPtr->getParametersObject().maxIonUpdateStep, + d_optimizermaxIonUpdateStep, true); if (d_dftPtr->getParametersObject().verbosity >= 1) @@ -1488,15 +1498,15 @@ namespace dftfe pcout << " maxIter: " << d_maximumNEBIteration << std::endl; pcout << " preconditioner: " - << d_dftPtr->getParametersObject().usePreconditioner + << "false" << std::endl; pcout << " step method: " - << d_dftPtr->getParametersObject().bfgsStepMethod + << bfgsStepMethod << std::endl; pcout << " maxiumum step length: " - << d_dftPtr->getParametersObject().maxIonUpdateStep + << d_optimizermaxIonUpdateStep << std::endl; @@ -1511,13 +1521,13 @@ namespace dftfe << std::endl; pcout << " maxIter: " << d_maximumNEBIteration << std::endl; pcout << " preconditioner: " - << d_dftPtr->getParametersObject().usePreconditioner + << "false" << std::endl; pcout << " lbfgs history: " - << d_dftPtr->getParametersObject().lbfgsNumPastSteps + << lbfgsNumPastSteps << std::endl; pcout << " maxiumum step length: " - << d_dftPtr->getParametersObject().maxIonUpdateStep + << d_optimizermaxIonUpdateStep << std::endl; pcout << " ----------------------------------------- " << std::endl; @@ -1531,11 +1541,11 @@ namespace dftfe pcout << " maxIter: " << d_maximumNEBIteration << std::endl; pcout << " lineSearch tol: " << 1e-4 << std::endl; pcout << " lineSearch maxIter: " - << d_dftPtr->getParametersObject().maxLineSearchIterCGPRP + << maxLineSearchIterCGPRP << std::endl; pcout << " lineSearch damping parameter: " << 0.8 << std::endl; pcout << " maxiumum step length: " - << d_dftPtr->getParametersObject().maxIonUpdateStep + << d_optimizermaxIonUpdateStep << std::endl; pcout << " ----------------------------------------- " << std::endl; diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index e1ec9a25d..5e354c8c1 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1094,6 +1094,37 @@ namespace dftfe dealii::Patterns::Integer(1, 250), "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); + prm.declare_entry( + "ION OPT SOLVER", + "LBFGS", + dealii::Patterns::Selection("BFGS|LBFGS|CGPRP"), + "[Standard] Method for Ion relaxation solver. LBFGS is the default"); + prm.declare_entry( + "MAXIMUM ION UPDATE STEP", + "0.5", + dealii::Patterns::Double(0, 5.0), + "[Standard] Sets the maximum allowed step size (displacement in a.u.) during ion relaxation."); + prm.declare_entry( + "MAX LINE SEARCH ITER", + "5", + dealii::Patterns::Integer(1, 100), + "[Standard] Sets the maximum number of line search iterations in the case of CGPRP. Default is 5."); + prm.declare_entry( + "ION RELAX FLAGS FILE", + "", + dealii::Patterns::Anything(), + "[Standard] File specifying the permission flags (1-free to move, 0-fixed) and external forces for the 3-coordinate directions and for all atoms. File format (example for two atoms with atom 1 fixed and atom 2 free and 0.01 Ha/Bohr force acting on atom 2): 0 0 0 0.0 0.0 0.0(row1), 1 1 1 0.0 0.0 0.01(row2). External forces are optional."); + prm.declare_entry( + "BFGS STEP METHOD", + "QN", + dealii::Patterns::Selection("QN|RFO"), + "[Standard] Method for computing update step in BFGS. Quasi-Newton step (default) or Rational Function Step as described in JPC 1985, 89:52-57."); + prm.declare_entry( + "LBFGS HISTORY", + "5", + dealii::Patterns::Integer(1, 20), + "[Standard] Number of previous steps to considered for the LBFGS update."); + prm.declare_entry( "NEB COORDINATES FILE", "", @@ -1105,6 +1136,9 @@ namespace dftfe "", dealii::Patterns::Anything(), "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); + + + } prm.leave_subsection(); @@ -1444,16 +1478,25 @@ namespace dftfe domainBoundingVectorsFile = prm.get("DOMAIN VECTORS FILE"); prm.enter_subsection("Optimization"); { - optimizationMode = prm.get("OPTIMIZATION MODE"); - ionOptSolver = prm.get("ION OPT SOLVER"); - cellOptSolver = prm.get("CELL OPT SOLVER"); - maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); + if(solverMode !="NEB") + { + ionOptSolver = prm.get("ION OPT SOLVER"); + cellOptSolver = prm.get("CELL OPT SOLVER"); + forceRelaxTol = prm.get_double("FORCE TOL"); + bfgsStepMethod = prm.get("BFGS STEP METHOD"); + usePreconditioner = prm.get_bool("USE PRECONDITIONER"); + lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); + maxOptIter = prm.get_integer("MAXIMUM OPTIMIZATION STEPS"); + maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); + maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + } + optimizationMode = prm.get("OPTIMIZATION MODE"); nonSelfConsistentForce = prm.get_bool("NON SELF CONSISTENT FORCE"); isIonForce = prm.get_bool("ION FORCE") || ((optimizationMode == "ION" || optimizationMode == "IONCELL") && solverMode == "GEOOPT"); - forceRelaxTol = prm.get_double("FORCE TOL"); + ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); isCellStress = prm.get_bool("CELL STRESS") || @@ -1463,18 +1506,30 @@ namespace dftfe cellConstraintType = prm.get_integer("CELL CONSTRAINT TYPE"); reuseWfcGeoOpt = prm.get_bool("REUSE WFC"); reuseDensityGeoOpt = prm.get_integer("REUSE DENSITY"); - bfgsStepMethod = prm.get("BFGS STEP METHOD"); - usePreconditioner = prm.get_bool("USE PRECONDITIONER"); - lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); - maxOptIter = prm.get_integer("MAXIMUM OPTIMIZATION STEPS"); + maxStaggeredCycles = prm.get_integer("MAXIMUM STAGGERED CYCLES"); - maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + maxCellUpdateStep = prm.get_double("MAXIMUM CELL UPDATE STEP"); } prm.leave_subsection(); } prm.leave_subsection(); + if(solverMode == "NEB") + { + prm.enter_subsection("NEB"); + { + ionOptSolver = prm.get("NEB OPT SOLVER"); + cellOptSolver = prm.get("NEB OPT SOLVER"); + forceRelaxTol = prm.get_double("PATH THRESHOLD"); + bfgsStepMethod = prm.get("BFGS STEP METHOD"); + lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); + maxOptIter = prm.get_integer("MAXIMUM NUMBER OF NEB ITERATIONS"); + maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); + maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + } + prm.leave_subsection(); + } prm.enter_subsection("Boundary conditions"); { radiusAtomBall = prm.get_double("SELF POTENTIAL RADIUS"); diff --git a/utils/runParameters.cc b/utils/runParameters.cc index 8de5e01a1..3fd4f93db 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -65,7 +65,7 @@ namespace dftfe prm.declare_entry( "NUMBER OF IMAGES", "7", - dealii::Patterns::Integer(1, 20), + dealii::Patterns::Integer(1, 50), "[Standard] NUMBER OF IMAGES:Default option is 7. When NEB is triggered this controls the total number of images along the MEP including the end points"); prm.declare_entry( @@ -93,6 +93,37 @@ namespace dftfe dealii::Patterns::Integer(1, 250), "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); + prm.declare_entry( + "ION OPT SOLVER", + "LBFGS", + dealii::Patterns::Selection("BFGS|LBFGS|CGPRP"), + "[Standard] Method for Ion relaxation solver. LBFGS is the default"); + prm.declare_entry( + "MAXIMUM ION UPDATE STEP", + "0.5", + dealii::Patterns::Double(0, 5.0), + "[Standard] Sets the maximum allowed step size (displacement in a.u.) during ion relaxation."); + prm.declare_entry( + "MAX LINE SEARCH ITER", + "5", + dealii::Patterns::Integer(1, 100), + "[Standard] Sets the maximum number of line search iterations in the case of CGPRP. Default is 5."); + prm.declare_entry( + "ION RELAX FLAGS FILE", + "", + dealii::Patterns::Anything(), + "[Standard] File specifying the permission flags (1-free to move, 0-fixed) and external forces for the 3-coordinate directions and for all atoms. File format (example for two atoms with atom 1 fixed and atom 2 free and 0.01 Ha/Bohr force acting on atom 2): 0 0 0 0.0 0.0 0.0(row1), 1 1 1 0.0 0.0 0.01(row2). External forces are optional."); + prm.declare_entry( + "BFGS STEP METHOD", + "QN", + dealii::Patterns::Selection("QN|RFO"), + "[Standard] Method for computing update step in BFGS. Quasi-Newton step (default) or Rational Function Step as described in JPC 1985, 89:52-57."); + prm.declare_entry( + "LBFGS HISTORY", + "5", + dealii::Patterns::Integer(1, 20), + "[Standard] Number of previous steps to considered for the LBFGS update."); + prm.declare_entry( "NEB COORDINATES FILE", "", @@ -132,6 +163,11 @@ namespace dftfe maximumNEBiteration = prm.get_integer("MAXIMUM NUMBER OF NEB ITERATIONS"); coordinatesFileNEB = prm.get("NEB COORDINATES FILE"); domainVectorsFileNEB = prm.get("NEB DOMAIN VECTORS FILE"); + maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); + bfgsStepMethod = prm.get("BFGS STEP METHOD"); + optimizermaxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); + optimizationSolver = prm.get("NEB OPT SOLVER"); } From e1289432e305390f09a0029f6b25215c331d3c9d Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 1 Jun 2023 15:34:52 +0530 Subject: [PATCH 21/53] Cleanups --- utils/dftParameters.cc | 2 +- utils/runParameters.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 5e354c8c1..972444c9b 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1095,7 +1095,7 @@ namespace dftfe "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); prm.declare_entry( - "ION OPT SOLVER", + "NEB OPT SOLVER", "LBFGS", dealii::Patterns::Selection("BFGS|LBFGS|CGPRP"), "[Standard] Method for Ion relaxation solver. LBFGS is the default"); diff --git a/utils/runParameters.cc b/utils/runParameters.cc index 3fd4f93db..b99fc1a4b 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -94,7 +94,7 @@ namespace dftfe "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); prm.declare_entry( - "ION OPT SOLVER", + "NEB OPT SOLVER", "LBFGS", dealii::Patterns::Selection("BFGS|LBFGS|CGPRP"), "[Standard] Method for Ion relaxation solver. LBFGS is the default"); From b7151e15442578f5f89354b0ea378781319f45de Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 1 Jun 2023 15:58:28 +0530 Subject: [PATCH 22/53] Cleanups --- include/nudgedElasticBandClass.h | 6 ++++-- include/runParameters.h | 3 ++- src/main.cc | 3 ++- src/neb/nudgedElasticBandClass.cc | 8 +++++--- utils/dftParameters.cc | 7 +++---- utils/runParameters.cc | 1 + 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 81cd34e90..58842cbcf 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -54,7 +54,8 @@ namespace dftfe double optimizermaxIonUpdateStep, std::string &optimizationSolver, const std::string &coordinatesFileNEB, - const std::string &domainVectorsFileNEB); + const std::string &domainVectorsFileNEB, + const std::string &ionRelaxFlagsFile); //~nudgedElasticBandClass(); @@ -154,7 +155,8 @@ namespace dftfe std::string bfgsStepMethod; double d_optimizermaxIonUpdateStep; unsigned int lbfgsNumPastSteps; - std::string d_optimizationSolver; + std::string d_optimizationSolver; + std::string d_ionRelaxFlagsFile; std::vector d_forceOnImages; std::map>> d_atomLocationsInitial; diff --git a/include/runParameters.h b/include/runParameters.h index 6f43e7600..be2dc4257 100644 --- a/include/runParameters.h +++ b/include/runParameters.h @@ -47,7 +47,8 @@ namespace dftfe std::string bfgsStepMethod; double optimizermaxIonUpdateStep; unsigned int lbfgsNumPastSteps; - std::string optimizationSolver; + std::string optimizationSolver; + std::string ionRelaxFlagsFile; std::string coordinatesFileNEB, domainVectorsFileNEB; runParameters() = default; diff --git a/src/main.cc b/src/main.cc index 0c9915f56..47437878e 100644 --- a/src/main.cc +++ b/src/main.cc @@ -188,7 +188,8 @@ main(int argc, char *argv[]) runParams.optimizermaxIonUpdateStep, runParams.optimizationSolver, runParams.coordinatesFileNEB, - runParams.domainVectorsFileNEB); + runParams.domainVectorsFileNEB, + runParams.ionRelaxFlagsFile); int status = nebClass.run(); } diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 73f5663f5..da41f6d40 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -48,7 +48,8 @@ namespace dftfe double optimizermaxIonUpdateStep, std::string &optimizationSolver, const std::string &coordinatesFileNEB, - const std::string &domainVectorsFileNEB) + const std::string &domainVectorsFileNEB, + const std::string &ionRelaxFlagsFile) : d_mpiCommParent(mpi_comm_parent) , d_this_mpi_process(dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) @@ -66,6 +67,7 @@ namespace dftfe , d_optimizermaxIonUpdateStep(optimizermaxIonUpdateStep) , d_optimizationSolver(optimizationSolver) , bfgsStepMethod(_bfgsStepMethod) + , d_ionRelaxFlagsFile(ionRelaxFlagsFile) { // Read Coordinates file and create coordinates for each image @@ -1285,7 +1287,7 @@ namespace dftfe nudgedElasticBandClass::init() { double step_time; - if (d_dftPtr->getParametersObject().ionRelaxFlagsFile != "") + if (d_ionRelaxFlagsFile != "") { std::vector> tempRelaxFlagsData; std::vector> tempForceData; @@ -1293,7 +1295,7 @@ namespace dftfe 6, tempRelaxFlagsData, tempForceData, - d_dftPtr->getParametersObject().ionRelaxFlagsFile); + d_ionRelaxFlagsFile); AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, dealii::ExcMessage( "Incorrect number of entries in relaxationFlags file")); diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 972444c9b..6557edab9 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1489,15 +1489,14 @@ namespace dftfe maxOptIter = prm.get_integer("MAXIMUM OPTIMIZATION STEPS"); maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); } optimizationMode = prm.get("OPTIMIZATION MODE"); nonSelfConsistentForce = prm.get_bool("NON SELF CONSISTENT FORCE"); isIonForce = prm.get_bool("ION FORCE") || ((optimizationMode == "ION" || optimizationMode == "IONCELL") && - solverMode == "GEOOPT"); - - ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); + solverMode == "GEOOPT"); isCellStress = prm.get_bool("CELL STRESS") || ((optimizationMode == "CELL" || optimizationMode == "IONCELL") && @@ -1526,6 +1525,7 @@ namespace dftfe maxOptIter = prm.get_integer("MAXIMUM NUMBER OF NEB ITERATIONS"); maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); } prm.leave_subsection(); @@ -1621,7 +1621,6 @@ namespace dftfe modelXCInputFile = prm.get("MODEL XC INPUT FILE"); start_magnetization = prm.get_double("START MAGNETIZATION"); pspCutoffImageCharges = prm.get_double("PSP CUTOFF IMAGE CHARGES"); - TotalImages = prm.get_integer("NUMBER OF IMAGES"); } prm.leave_subsection(); diff --git a/utils/runParameters.cc b/utils/runParameters.cc index b99fc1a4b..aca18ed87 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -168,6 +168,7 @@ namespace dftfe optimizermaxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); optimizationSolver = prm.get("NEB OPT SOLVER"); + ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); } From 29af520e450dde7c611530162cf8c8c78eaf5327 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 1 Jun 2023 15:58:54 +0530 Subject: [PATCH 23/53] Indendation standards --- include/dft.h | 4 +- include/dftBase.h | 7 +- include/dftfeWrapper.h | 4 +- include/nudgedElasticBandClass.h | 79 +++++++++++---------- include/runParameters.h | 16 ++--- src/dft/restart.cc | 4 +- src/dftfeWrapper.cc | 3 +- src/main.cc | 39 ++++++----- src/neb/nudgedElasticBandClass.cc | 62 +++++++---------- utils/dftParameters.cc | 112 ++++++++++++++---------------- utils/runParameters.cc | 60 ++++++++-------- 11 files changed, 189 insertions(+), 201 deletions(-) diff --git a/include/dft.h b/include/dft.h index 8163cbc8d..12a13073c 100644 --- a/include/dft.h +++ b/include/dft.h @@ -332,7 +332,9 @@ namespace dftfe /** * @brief writes the current domain bounding vectors and atom coordinates to files for - * structural optimization and dynamics restarts. The coordinates are stored as: 1. fractional for semi-periodic/periodic 2. Cartesian for non-periodic. + * structural optimization and dynamics restarts. The coordinates are stored + * as: 1. fractional for semi-periodic/periodic 2. Cartesian for + * non-periodic. * @param[in] Path The folder path to store the atom coordinates required * during restart. */ diff --git a/include/dftBase.h b/include/dftBase.h index 7b3df24c1..e277e84b1 100644 --- a/include/dftBase.h +++ b/include/dftBase.h @@ -171,13 +171,14 @@ namespace dftfe /** * @brief writes the current domain bounding vectors and atom coordinates to files for - * structural optimization and dynamics restarts. The coordinates are stored as: 1. fractional for semi-periodic/periodic 2. Cartesian for non-periodic. + * structural optimization and dynamics restarts. The coordinates are stored + * as: 1. fractional for semi-periodic/periodic 2. Cartesian for + * non-periodic. * @param[in] Path The folder path to store the atom coordinates required * during restart. */ virtual void - writeDomainAndAtomCoordinates( - const std::string Path) const = 0; + writeDomainAndAtomCoordinates(const std::string Path) const = 0; /** diff --git a/include/dftfeWrapper.h b/include/dftfeWrapper.h index c4cd5ea46..95af8f7f4 100644 --- a/include/dftfeWrapper.h +++ b/include/dftfeWrapper.h @@ -351,7 +351,9 @@ namespace dftfe /** * @brief writes the current domain bounding vectors and atom coordinates to files for - * structural optimization and dynamics restarts. The coordinates are stored as: 1. fractional for semi-periodic/periodic 2. Cartesian for non-periodic. + * structural optimization and dynamics restarts. The coordinates are stored + * as: 1. fractional for semi-periodic/periodic 2. Cartesian for + * non-periodic. * @param[in] Path The folder path to store the atom coordinates required * during restart. */ diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 58842cbcf..de8f8cf39 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -36,26 +36,25 @@ namespace dftfe * Third, creates the array of pointers of dftClass for each image. */ - nudgedElasticBandClass( - const std::string parameter_file, - const std::string restartFilesPath, - const MPI_Comm & mpi_comm_parent, - const bool restart, - const int verbosity, - int d_numberOfImages, - bool imageFreeze, - double Kmax, - double Kmin, - double pathThreshold, - int maximumNEBIteration, - unsigned int _maxLineSearchIterCGPRP, - unsigned int _lbfgsNumPastSteps, - std::string &_bfgsStepMethod, - double optimizermaxIonUpdateStep, - std::string &optimizationSolver, - const std::string &coordinatesFileNEB, - const std::string &domainVectorsFileNEB, - const std::string &ionRelaxFlagsFile); + nudgedElasticBandClass(const std::string parameter_file, + const std::string restartFilesPath, + const MPI_Comm & mpi_comm_parent, + const bool restart, + const int verbosity, + int d_numberOfImages, + bool imageFreeze, + double Kmax, + double Kmin, + double pathThreshold, + int maximumNEBIteration, + unsigned int _maxLineSearchIterCGPRP, + unsigned int _lbfgsNumPastSteps, + std::string & _bfgsStepMethod, + double optimizermaxIonUpdateStep, + std::string & optimizationSolver, + const std::string &coordinatesFileNEB, + const std::string &domainVectorsFileNEB, + const std::string &ionRelaxFlagsFile); //~nudgedElasticBandClass(); @@ -138,27 +137,27 @@ namespace dftfe bool d_imageFreeze; /// total number of calls to update() - int d_totalUpdateCalls; - int d_startStep; - int d_solver; - bool d_isRestart; - bool d_solverRestart; - unsigned int d_restartFlag; - unsigned int d_numberGlobalCharges; - double d_maximumAtomForceToBeRelaxed; - unsigned int d_numberOfImages; - unsigned int d_countrelaxationFlags; - //Solver Details - unsigned int d_maximumNEBIteration; - double d_optimizertolerance; - unsigned int maxLineSearchIterCGPRP; - std::string bfgsStepMethod; - double d_optimizermaxIonUpdateStep; - unsigned int lbfgsNumPastSteps; - std::string d_optimizationSolver; - std::string d_ionRelaxFlagsFile; + int d_totalUpdateCalls; + int d_startStep; + int d_solver; + bool d_isRestart; + bool d_solverRestart; + unsigned int d_restartFlag; + unsigned int d_numberGlobalCharges; + double d_maximumAtomForceToBeRelaxed; + unsigned int d_numberOfImages; + unsigned int d_countrelaxationFlags; + // Solver Details + unsigned int d_maximumNEBIteration; + double d_optimizertolerance; + unsigned int maxLineSearchIterCGPRP; + std::string bfgsStepMethod; + double d_optimizermaxIonUpdateStep; + unsigned int lbfgsNumPastSteps; + std::string d_optimizationSolver; + std::string d_ionRelaxFlagsFile; - std::vector d_forceOnImages; + std::vector d_forceOnImages; std::map>> d_atomLocationsInitial; std::vector d_relaxationFlags; std::vector d_externalForceOnAtom; diff --git a/include/runParameters.h b/include/runParameters.h index be2dc4257..9ad92df30 100644 --- a/include/runParameters.h +++ b/include/runParameters.h @@ -42,14 +42,14 @@ namespace dftfe double Kmin; double pathThreshold; int maximumNEBiteration; - - unsigned int maxLineSearchIterCGPRP; - std::string bfgsStepMethod; - double optimizermaxIonUpdateStep; - unsigned int lbfgsNumPastSteps; - std::string optimizationSolver; - std::string ionRelaxFlagsFile; - + + unsigned int maxLineSearchIterCGPRP; + std::string bfgsStepMethod; + double optimizermaxIonUpdateStep; + unsigned int lbfgsNumPastSteps; + std::string optimizationSolver; + std::string ionRelaxFlagsFile; + std::string coordinatesFileNEB, domainVectorsFileNEB; runParameters() = default; diff --git a/src/dft/restart.cc b/src/dft/restart.cc index dc853b173..42f7b4898 100644 --- a/src/dft/restart.cc +++ b/src/dft/restart.cc @@ -616,8 +616,8 @@ namespace dftfe template void - dftClass:: - writeDomainAndAtomCoordinates(const std::string Path) const + dftClass::writeDomainAndAtomCoordinates( + const std::string Path) const { dftUtils::writeDataIntoFile(d_domainBoundingVectors, Path + "domainBoundingVectorsCurrent.chk", diff --git a/src/dftfeWrapper.cc b/src/dftfeWrapper.cc index 1ed4dc279..4d6a02f4d 100644 --- a/src/dftfeWrapper.cc +++ b/src/dftfeWrapper.cc @@ -1131,8 +1131,7 @@ namespace dftfe void - dftfeWrapper::writeDomainAndAtomCoordinates( - const std::string Path) const + dftfeWrapper::writeDomainAndAtomCoordinates(const std::string Path) const { AssertThrow( d_mpi_comm_parent != MPI_COMM_NULL, diff --git a/src/main.cc b/src/main.cc index 47437878e..d71782953 100644 --- a/src/main.cc +++ b/src/main.cc @@ -171,25 +171,26 @@ main(int argc, char *argv[]) else if (runParams.solvermode == "NEB") { - dftfe::nudgedElasticBandClass nebClass(parameter_file, - runParams.restartFilesPath, - MPI_COMM_WORLD, - runParams.restart, - runParams.verbosity, - runParams.numberOfImages, - runParams.imageFreeze, - runParams.Kmax, - runParams.Kmin, - runParams.pathThreshold, - runParams.maximumNEBiteration, - runParams.maxLineSearchIterCGPRP, - runParams.lbfgsNumPastSteps, - runParams.bfgsStepMethod, - runParams.optimizermaxIonUpdateStep, - runParams.optimizationSolver, - runParams.coordinatesFileNEB, - runParams.domainVectorsFileNEB, - runParams.ionRelaxFlagsFile); + dftfe::nudgedElasticBandClass nebClass( + parameter_file, + runParams.restartFilesPath, + MPI_COMM_WORLD, + runParams.restart, + runParams.verbosity, + runParams.numberOfImages, + runParams.imageFreeze, + runParams.Kmax, + runParams.Kmin, + runParams.pathThreshold, + runParams.maximumNEBiteration, + runParams.maxLineSearchIterCGPRP, + runParams.lbfgsNumPastSteps, + runParams.bfgsStepMethod, + runParams.optimizermaxIonUpdateStep, + runParams.optimizationSolver, + runParams.coordinatesFileNEB, + runParams.domainVectorsFileNEB, + runParams.ionRelaxFlagsFile); int status = nebClass.run(); } diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index da41f6d40..1b308a0e6 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -42,17 +42,19 @@ namespace dftfe double Kmin, double pathThreshold, int maximumNEBIteration, - unsigned int _maxLineSearchIterCGPRP, - unsigned int _lbfgsNumPastSteps, - std::string &_bfgsStepMethod, - double optimizermaxIonUpdateStep, - std::string &optimizationSolver, + unsigned int _maxLineSearchIterCGPRP, + unsigned int _lbfgsNumPastSteps, + std::string & _bfgsStepMethod, + double optimizermaxIonUpdateStep, + std::string & optimizationSolver, const std::string &coordinatesFileNEB, const std::string &domainVectorsFileNEB, const std::string &ionRelaxFlagsFile) : d_mpiCommParent(mpi_comm_parent) - , d_this_mpi_process(dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) - , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) + , d_this_mpi_process( + dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) + , pcout(std::cout, + (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) , d_restartFilesPath(restartFilesPath) , d_isRestart(restart) , d_verbosity(verbosity) @@ -1223,7 +1225,6 @@ namespace dftfe - void nudgedElasticBandClass::ImageError(int image, double &Force) { @@ -1291,11 +1292,10 @@ namespace dftfe { std::vector> tempRelaxFlagsData; std::vector> tempForceData; - dftUtils::readRelaxationFlagsFile( - 6, - tempRelaxFlagsData, - tempForceData, - d_ionRelaxFlagsFile); + dftUtils::readRelaxationFlagsFile(6, + tempRelaxFlagsData, + tempForceData, + d_ionRelaxFlagsFile); AssertThrow(tempRelaxFlagsData.size() == d_numberGlobalCharges, dealii::ExcMessage( "Incorrect number of entries in relaxationFlags file")); @@ -1500,16 +1500,12 @@ namespace dftfe pcout << " maxIter: " << d_maximumNEBIteration << std::endl; pcout << " preconditioner: " - << "false" - << std::endl; + << "false" << std::endl; - pcout << " step method: " - << bfgsStepMethod - << std::endl; + pcout << " step method: " << bfgsStepMethod << std::endl; pcout << " maxiumum step length: " - << d_optimizermaxIonUpdateStep - << std::endl; + << d_optimizermaxIonUpdateStep << std::endl; pcout << " ----------------------------------------- " @@ -1523,14 +1519,10 @@ namespace dftfe << std::endl; pcout << " maxIter: " << d_maximumNEBIteration << std::endl; pcout << " preconditioner: " - << "false" - << std::endl; - pcout << " lbfgs history: " - << lbfgsNumPastSteps - << std::endl; + << "false" << std::endl; + pcout << " lbfgs history: " << lbfgsNumPastSteps << std::endl; pcout << " maxiumum step length: " - << d_optimizermaxIonUpdateStep - << std::endl; + << d_optimizermaxIonUpdateStep << std::endl; pcout << " ----------------------------------------- " << std::endl; } @@ -1542,13 +1534,11 @@ namespace dftfe << std::endl; pcout << " maxIter: " << d_maximumNEBIteration << std::endl; pcout << " lineSearch tol: " << 1e-4 << std::endl; - pcout << " lineSearch maxIter: " - << maxLineSearchIterCGPRP + pcout << " lineSearch maxIter: " << maxLineSearchIterCGPRP << std::endl; pcout << " lineSearch damping parameter: " << 0.8 << std::endl; pcout << " maxiumum step length: " - << d_optimizermaxIonUpdateStep - << std::endl; + << d_optimizermaxIonUpdateStep << std::endl; pcout << " ----------------------------------------- " << std::endl; } @@ -1628,14 +1618,14 @@ namespace dftfe pcout << "Checking for files in Step: " << d_totalUpdateCalls << std::endl; std::string path = d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls); - bool flag = false; + bool flag = false; pcout << "Looking for files of Step " << d_totalUpdateCalls << " at: " << path << std::endl; while (!flag && d_totalUpdateCalls > 1) { path = d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls); - flag = true; + flag = true; for (int image = 0; image < d_numberOfImages; image++) { std::string file1; @@ -1650,9 +1640,9 @@ namespace dftfe std::ifstream readFile1(file1.c_str()); std::ifstream readFile2(file2.c_str()); flag = flag && !readFile1.fail() && !readFile2.fail(); - pcout< Date: Fri, 2 Jun 2023 10:53:36 +0530 Subject: [PATCH 24/53] Cleanups --- include/nudgedElasticBandClass.h | 25 +++++++++++-------- src/main.cc | 2 +- src/neb/nudgedElasticBandClass.cc | 20 ++++++++-------- utils/dftParameters.cc | 40 +++++++++---------------------- 4 files changed, 37 insertions(+), 50 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index de8f8cf39..83221dabf 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -41,17 +41,17 @@ namespace dftfe const MPI_Comm & mpi_comm_parent, const bool restart, const int verbosity, - int d_numberOfImages, - bool imageFreeze, + const int d_numberOfImages, + const bool imageFreeze, double Kmax, double Kmin, - double pathThreshold, - int maximumNEBIteration, - unsigned int _maxLineSearchIterCGPRP, - unsigned int _lbfgsNumPastSteps, - std::string & _bfgsStepMethod, - double optimizermaxIonUpdateStep, - std::string & optimizationSolver, + const double pathThreshold, + const int maximumNEBIteration, + const unsigned int _maxLineSearchIterCGPRP, + const unsigned int _lbfgsNumPastSteps, + const std::string &_bfgsStepMethod, + const double optimizermaxIonUpdateStep, + const std::string &optimizationSolver, const std::string &coordinatesFileNEB, const std::string &domainVectorsFileNEB, const std::string &ionRelaxFlagsFile); @@ -63,9 +63,14 @@ namespace dftfe int d_NEBImageno; /** * @brief Calls optimizer(nonLinearClass) solve. Prints the Final NEB energies and forces. + * References: + * 1. + * https://pubs.aip.org/aip/jcp/article/113/22/9978/184858/Improved-tangent-estimate-in-the-nudged-elastic + * 2. + * https://pubs.aip.org/aip/jcp/article/128/13/134106/977389/Optimization-methods-for-finding-minimum-energy */ int - run(); + findMEP(); /** * @brief Returns the Normed vetor satistfying ||v||_2 = 1 */ diff --git a/src/main.cc b/src/main.cc index d71782953..78a368664 100644 --- a/src/main.cc +++ b/src/main.cc @@ -192,7 +192,7 @@ main(int argc, char *argv[]) runParams.domainVectorsFileNEB, runParams.ionRelaxFlagsFile); - int status = nebClass.run(); + int status = nebClass.findMEP(); } else if (runParams.solvermode == "GEOOPT") { diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 1b308a0e6..937eb1e76 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -36,17 +36,17 @@ namespace dftfe const MPI_Comm & mpi_comm_parent, const bool restart, const int verbosity, - int d_numberOfImages, - bool imageFreeze, + const int d_numberOfImages, + const bool imageFreeze, double Kmax, double Kmin, - double pathThreshold, - int maximumNEBIteration, - unsigned int _maxLineSearchIterCGPRP, - unsigned int _lbfgsNumPastSteps, - std::string & _bfgsStepMethod, - double optimizermaxIonUpdateStep, - std::string & optimizationSolver, + const double pathThreshold, + const int maximumNEBIteration, + const unsigned int _maxLineSearchIterCGPRP, + const unsigned int _lbfgsNumPastSteps, + const std::string &_bfgsStepMethod, + const double optimizermaxIonUpdateStep, + const std::string &optimizationSolver, const std::string &coordinatesFileNEB, const std::string &domainVectorsFileNEB, const std::string &ionRelaxFlagsFile) @@ -712,7 +712,7 @@ namespace dftfe int - nudgedElasticBandClass::run() + nudgedElasticBandClass::findMEP() { nonLinearSolver::ReturnValueType solverReturn = d_nonLinearSolverPtr->solve(*this, diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 94d4457b3..1d13955a7 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1473,19 +1473,16 @@ namespace dftfe domainBoundingVectorsFile = prm.get("DOMAIN VECTORS FILE"); prm.enter_subsection("Optimization"); { - if (solverMode != "NEB") - { - ionOptSolver = prm.get("ION OPT SOLVER"); - cellOptSolver = prm.get("CELL OPT SOLVER"); - forceRelaxTol = prm.get_double("FORCE TOL"); - bfgsStepMethod = prm.get("BFGS STEP METHOD"); - usePreconditioner = prm.get_bool("USE PRECONDITIONER"); - lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); - maxOptIter = prm.get_integer("MAXIMUM OPTIMIZATION STEPS"); - maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); - maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); - ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); - } + ionOptSolver = prm.get("ION OPT SOLVER"); + cellOptSolver = prm.get("CELL OPT SOLVER"); + forceRelaxTol = prm.get_double("FORCE TOL"); + bfgsStepMethod = prm.get("BFGS STEP METHOD"); + usePreconditioner = prm.get_bool("USE PRECONDITIONER"); + lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); + maxOptIter = prm.get_integer("MAXIMUM OPTIMIZATION STEPS"); + maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); + maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); optimizationMode = prm.get("OPTIMIZATION MODE"); nonSelfConsistentForce = prm.get_bool("NON SELF CONSISTENT FORCE"); isIonForce = @@ -1508,22 +1505,7 @@ namespace dftfe prm.leave_subsection(); } prm.leave_subsection(); - if (solverMode == "NEB") - { - prm.enter_subsection("NEB"); - { - ionOptSolver = prm.get("NEB OPT SOLVER"); - cellOptSolver = prm.get("NEB OPT SOLVER"); - forceRelaxTol = prm.get_double("PATH THRESHOLD"); - bfgsStepMethod = prm.get("BFGS STEP METHOD"); - lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); - maxOptIter = prm.get_integer("MAXIMUM NUMBER OF NEB ITERATIONS"); - maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); - maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); - ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); - } - prm.leave_subsection(); - } + prm.enter_subsection("Boundary conditions"); { radiusAtomBall = prm.get_double("SELF POTENTIAL RADIUS"); From 429d292efcf3094df2c4bab62768a1964807ebff Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Fri, 2 Jun 2023 12:44:36 +0530 Subject: [PATCH 25/53] BugFix --- include/nudgedElasticBandClass.h | 2 +- src/neb/nudgedElasticBandClass.cc | 45 ++++++++++++++----------------- utils/dftParameters.cc | 20 +++++++------- 3 files changed, 30 insertions(+), 37 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 83221dabf..4b852ec58 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -162,7 +162,7 @@ namespace dftfe std::string d_optimizationSolver; std::string d_ionRelaxFlagsFile; - std::vector d_forceOnImages; + std::map>> d_atomLocationsInitial; std::vector d_relaxationFlags; std::vector d_externalForceOnAtom; diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 937eb1e76..fad23cc64 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -76,7 +76,6 @@ namespace dftfe MPI_Barrier(d_mpiCommParent); d_solverRestart = d_isRestart; - if (!d_isRestart) { d_totalUpdateCalls = 0; @@ -501,6 +500,7 @@ namespace dftfe ReturnNormedVector(tangent, d_countrelaxationFlags); } + } void @@ -720,7 +720,7 @@ namespace dftfe d_solverRestart); if (solverReturn == nonLinearSolver::SUCCESS && - d_dftPtr->getParametersObject().verbosity >= 1) + d_verbosity >= 1) { pcout << " ...Ion force relaxation completed as maximum force magnitude is less than FORCE TOL: " @@ -785,7 +785,7 @@ namespace dftfe } if (solverReturn != nonLinearSolver::SUCCESS && - d_dftPtr->getParametersObject().verbosity >= 1) + d_verbosity >= 1) { pcout << "--------------Ground State Results-------------" << std::endl; for (int i = 0; i < d_numberOfImages; i++) @@ -878,10 +878,7 @@ namespace dftfe double InternalEnergy = (d_dftfeWrapper[image])->getDFTFreeEnergy() + (d_dftfeWrapper[image])->getElectronicEntropicEnergy(); - double ForceError = 0.0; - d_NEBImageno = image; - ImageError(image, ForceError); - d_ImageError[image] = ForceError; + double ForceError = d_ImageError[image]; if (ForceError < 0.95 * d_optimizertolerance && d_imageFreeze && (image != 0 || image != d_numberOfImages - 1)) flagmultiplier[image] = 0; @@ -995,7 +992,7 @@ namespace dftfe { std::vector> globalAtomsDisplacements( d_numberGlobalCharges, std::vector(3, 0.0)); - d_forceOnImages.clear(); + for (int image = 1; image < d_numberOfImages - 1; image++) { int multiplier = 1; @@ -1009,7 +1006,7 @@ namespace dftfe } MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; - if (d_dftPtr->getParametersObject().verbosity > 4) + if (d_verbosity > 4) pcout << "--Displacements for image: " << image << std::endl; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { @@ -1033,7 +1030,7 @@ namespace dftfe } } } - if (d_dftPtr->getParametersObject().verbosity > 4) + if (d_verbosity > 4) pcout << globalAtomsDisplacements[i][0] << " " << globalAtomsDisplacements[i][1] << " " << globalAtomsDisplacements[i][2] << std::endl; @@ -1051,7 +1048,7 @@ namespace dftfe MPI_Barrier(d_mpiCommParent); (d_dftfeWrapper[image]) ->updateAtomPositions(globalAtomsDisplacements); - if (d_dftPtr->getParametersObject().verbosity > 4) + if (d_verbosity > 4) pcout << "--Positions of image: " << image << " updated--" << std::endl; MPI_Barrier(d_mpiCommParent); @@ -1060,15 +1057,13 @@ namespace dftfe if (!std::get<1>(groundStateOutput)) pcout << " NEB Warning!!: Ground State of Image: " << d_NEBImageno << " did not converge" << std::endl; + double ForceError = 0.0; + d_NEBImageno = image; + ImageError(image, ForceError); + d_ImageError[image] = ForceError; } } - for (int image = 0; image < d_numberOfImages; image++) - { - double Force = 0.0; - d_NEBImageno = image; - ImageError(d_NEBImageno, Force); - d_forceOnImages.push_back(Force); - } + d_totalUpdateCalls += 1; } @@ -1262,7 +1257,7 @@ namespace dftfe for (int i = 0; i < d_numberOfImages; i++) { - double Force = d_forceOnImages[i]; + double Force = d_ImageError[i]; double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); pcout << " " << i << " " << Force << " " << Energy << " " << std::endl; @@ -1429,7 +1424,7 @@ namespace dftfe << "Internal Energy in Ha" << " " << std::endl; - d_forceOnImages.clear(); + int count = 0; for (int i = 0; i < d_numberOfImages; i++) @@ -1440,7 +1435,7 @@ namespace dftfe double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); pcout << " " << i << " " << Force << " " << Energy << " " << std::endl; - d_forceOnImages.push_back(Force); + d_ImageError[d_NEBImageno] = (Force); if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { flag = false; @@ -1464,7 +1459,7 @@ namespace dftfe false, bfgsStepMethod == "RFO", d_maximumNEBIteration, - d_dftPtr->getParametersObject().verbosity, + d_verbosity, d_mpiCommParent, d_optimizermaxIonUpdateStep, true); @@ -1474,13 +1469,13 @@ namespace dftfe d_optimizermaxIonUpdateStep, d_maximumNEBIteration, lbfgsNumPastSteps, - d_dftPtr->getParametersObject().verbosity, + d_verbosity, d_mpiCommParent, true); else d_nonLinearSolverPtr = std::make_unique( d_maximumNEBIteration, - d_dftPtr->getParametersObject().verbosity, + d_verbosity, d_mpiCommParent, 1e-4, maxLineSearchIterCGPRP, @@ -1488,7 +1483,7 @@ namespace dftfe d_optimizermaxIonUpdateStep, true); - if (d_dftPtr->getParametersObject().verbosity >= 1) + if (d_verbosity >= 1) { if (d_solver == 0) { diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 1d13955a7..6862301e7 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1473,22 +1473,17 @@ namespace dftfe domainBoundingVectorsFile = prm.get("DOMAIN VECTORS FILE"); prm.enter_subsection("Optimization"); { + optimizationMode = prm.get("OPTIMIZATION MODE"); ionOptSolver = prm.get("ION OPT SOLVER"); cellOptSolver = prm.get("CELL OPT SOLVER"); - forceRelaxTol = prm.get_double("FORCE TOL"); - bfgsStepMethod = prm.get("BFGS STEP METHOD"); - usePreconditioner = prm.get_bool("USE PRECONDITIONER"); - lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); - maxOptIter = prm.get_integer("MAXIMUM OPTIMIZATION STEPS"); maxLineSearchIterCGPRP = prm.get_integer("MAX LINE SEARCH ITER"); - maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); - ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); - optimizationMode = prm.get("OPTIMIZATION MODE"); nonSelfConsistentForce = prm.get_bool("NON SELF CONSISTENT FORCE"); isIonForce = prm.get_bool("ION FORCE") || ((optimizationMode == "ION" || optimizationMode == "IONCELL") && solverMode == "GEOOPT"); + forceRelaxTol = prm.get_double("FORCE TOL"); + ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); isCellStress = prm.get_bool("CELL STRESS") || ((optimizationMode == "CELL" || optimizationMode == "IONCELL") && @@ -1497,10 +1492,13 @@ namespace dftfe cellConstraintType = prm.get_integer("CELL CONSTRAINT TYPE"); reuseWfcGeoOpt = prm.get_bool("REUSE WFC"); reuseDensityGeoOpt = prm.get_integer("REUSE DENSITY"); - + bfgsStepMethod = prm.get("BFGS STEP METHOD"); + usePreconditioner = prm.get_bool("USE PRECONDITIONER"); + lbfgsNumPastSteps = prm.get_integer("LBFGS HISTORY"); + maxOptIter = prm.get_integer("MAXIMUM OPTIMIZATION STEPS"); maxStaggeredCycles = prm.get_integer("MAXIMUM STAGGERED CYCLES"); - - maxCellUpdateStep = prm.get_double("MAXIMUM CELL UPDATE STEP"); + maxIonUpdateStep = prm.get_double("MAXIMUM ION UPDATE STEP"); + maxCellUpdateStep = prm.get_double("MAXIMUM CELL UPDATE STEP"); } prm.leave_subsection(); } From 3bab9d9848e5002ac14b72e37075f258aa8a4521 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 5 Jun 2023 14:49:26 +0530 Subject: [PATCH 26/53] IsIonForce update --- utils/dftParameters.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 6862301e7..7ba5fff03 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1838,10 +1838,7 @@ namespace dftfe dealii::ExcMessage( "DFT-FE Error: WFC BLOCK SIZE and CHEBY WFC BLOCK SIZE must be same for band parallelization.")); - AssertThrow( - !(solverMode == "NEB" && usePreconditioner == true), - dealii::ExcMessage( - "DFT-FE Error: the current NEB implementation does not allow Preconditioner to be used for optimization")); + } @@ -1855,6 +1852,9 @@ namespace dftfe if (isBOMD) isIonForce = true; + if (solverMode == "NEB" || solverMode == "MD" ) + isIonForce = true; + if (!isPseudopotential) { if (!reproducible_output) From 57e752b60bce5695d22612875a93dc480d238344 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 5 Jun 2023 15:04:05 +0530 Subject: [PATCH 27/53] Parse even undefined paramters in dftParams --- utils/dftParameters.cc | 86 +----------------------------------------- 1 file changed, 2 insertions(+), 84 deletions(-) diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 7ba5fff03..05f6b273c 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -1053,89 +1053,6 @@ namespace dftfe "[Advanced] Absolute tolerance on the residual as stopping criterion for Helmholtz problem convergence."); } prm.leave_subsection(); - prm.enter_subsection("NEB"); - { - prm.declare_entry( - "ALLOW IMAGE FREEZING", - "false", - dealii::Patterns::Bool(), - "If true images less than threshold will freeze for optimization step"); - - prm.declare_entry( - "NUMBER OF IMAGES", - "7", - dealii::Patterns::Integer(1, 50), - "[Standard] NUMBER OF IMAGES:Default option is 7. When NEB is triggered this controls the total number of images along the MEP including the end points"); - - prm.declare_entry( - "MAXIMUM SPRING CONSTANT", - "5e-3", - dealii::Patterns::Double(), - "[Standard] Sets the maximum allowable spring constant in (Ha/bohr^2)"); - - prm.declare_entry( - "MINIMUM SPRING CONSTANT", - "2e-3", - dealii::Patterns::Double(), - "[Standard] Sets the minimum allowable spring constant in (Ha/bohr^2)"); - - prm.declare_entry( - "PATH THRESHOLD", - "5e-4", - dealii::Patterns::Double(), - "[Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD "); - - - prm.declare_entry( - "MAXIMUM NUMBER OF NEB ITERATIONS", - "100", - dealii::Patterns::Integer(1, 250), - "[Standard] Maximum number of NEB iterations that will be performed in the simulation"); - - prm.declare_entry( - "NEB OPT SOLVER", - "LBFGS", - dealii::Patterns::Selection("BFGS|LBFGS|CGPRP"), - "[Standard] Method for Ion relaxation solver. LBFGS is the default"); - prm.declare_entry( - "MAXIMUM ION UPDATE STEP", - "0.5", - dealii::Patterns::Double(0, 5.0), - "[Standard] Sets the maximum allowed step size (displacement in a.u.) during ion relaxation."); - prm.declare_entry( - "MAX LINE SEARCH ITER", - "5", - dealii::Patterns::Integer(1, 100), - "[Standard] Sets the maximum number of line search iterations in the case of CGPRP. Default is 5."); - prm.declare_entry( - "ION RELAX FLAGS FILE", - "", - dealii::Patterns::Anything(), - "[Standard] File specifying the permission flags (1-free to move, 0-fixed) and external forces for the 3-coordinate directions and for all atoms. File format (example for two atoms with atom 1 fixed and atom 2 free and 0.01 Ha/Bohr force acting on atom 2): 0 0 0 0.0 0.0 0.0(row1), 1 1 1 0.0 0.0 0.01(row2). External forces are optional."); - prm.declare_entry( - "BFGS STEP METHOD", - "QN", - dealii::Patterns::Selection("QN|RFO"), - "[Standard] Method for computing update step in BFGS. Quasi-Newton step (default) or Rational Function Step as described in JPC 1985, 89:52-57."); - prm.declare_entry( - "LBFGS HISTORY", - "5", - dealii::Patterns::Integer(1, 20), - "[Standard] Number of previous steps to considered for the LBFGS update."); - - prm.declare_entry( - "NEB COORDINATES FILE", - "", - dealii::Patterns::Anything(), - "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); - - prm.declare_entry( - "NEB DOMAIN VECTORS FILE", - "", - dealii::Patterns::Anything(), - "[Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES."); - } - prm.leave_subsection(); prm.enter_subsection("Molecular Dynamics"); { @@ -1408,7 +1325,8 @@ namespace dftfe { dealii::ParameterHandler prm; internalDftParameters::declare_parameters(prm); - prm.parse_input(parameter_file); + //prm.parse_input(parameter_file); + prm.parse_input(parameter_file, "", true); solverMode = mode; verbosity = prm.get_integer("VERBOSITY"); reproducible_output = prm.get_bool("REPRODUCIBLE OUTPUT"); From 1c17cca196727d3065aec8435b13b8b963926fa3 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Tue, 6 Jun 2023 21:41:56 +0530 Subject: [PATCH 28/53] d_isCurvatureOnlyLineSearchStoppingCondition term for Gradient only checks --- include/BFGSNonLinearSolver.h | 4 ++-- include/LBFGSNonLinearSolver.h | 4 ++-- include/cgPRPNonLinearSolver.h | 4 ++-- src/solvers/cgSolvers/BFGSNonLinearSolver.cc | 18 ++++++++--------- src/solvers/cgSolvers/LBFGSNonLinearSolver.cc | 20 +++++++++---------- src/solvers/cgSolvers/cgPRPNonLinearSolver.cc | 4 ++-- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/include/BFGSNonLinearSolver.h b/include/BFGSNonLinearSolver.h index c8ce861a1..167458554 100644 --- a/include/BFGSNonLinearSolver.h +++ b/include/BFGSNonLinearSolver.h @@ -54,7 +54,7 @@ namespace dftfe const double trustRadius_maximum = 0.5, const double trustRadius_initial = 0.02, const double trustRadius_minimum = 1.0e-4, - const bool isGradientOnlyOptimization = false); + const bool isCurvatureOnlyLineSearchStoppingCondition = false); /** * @brief Destructor. @@ -201,7 +201,7 @@ namespace dftfe bool d_hessianScaled; // - bool d_isGradientOnlyOptimization; + bool d_isCurvatureOnlyLineSearchStoppingCondition; /// Flag to store the reset state, 0 if step is accepted, 1 if reset occured /// and no steps are accepted, 2 if two resets occur without step being diff --git a/include/LBFGSNonLinearSolver.h b/include/LBFGSNonLinearSolver.h index 105474f62..b29c7fe44 100644 --- a/include/LBFGSNonLinearSolver.h +++ b/include/LBFGSNonLinearSolver.h @@ -50,7 +50,7 @@ namespace dftfe const int maxNumPastSteps, const unsigned int debugLevel, const MPI_Comm & mpi_comm_parent, - const bool isGradientOnlyOptimization = false); + const bool isCurvatureOnlyLineSearchStoppingCondition = false); /** * @brief Destructor. @@ -205,7 +205,7 @@ namespace dftfe bool d_useSingleAtomSolutionsInitialGuess, d_noHistory; // - bool d_isGradientOnlyOptimization; + bool d_isCurvatureOnlyLineSearchStoppingCondition; diff --git a/include/cgPRPNonLinearSolver.h b/include/cgPRPNonLinearSolver.h index f3ffee639..91d444e98 100644 --- a/include/cgPRPNonLinearSolver.h +++ b/include/cgPRPNonLinearSolver.h @@ -53,7 +53,7 @@ namespace dftfe const unsigned int lineSearchMaxIterations = 10, const double lineSeachDampingParameter = 1.0, const double maxIncrementSolLinf = 1e+6, - const bool isGradientOnlyOptimization = false); + const bool isCurvatureOnlyLineSearchStoppingCondition = false); /** * @brief Destructor. @@ -270,7 +270,7 @@ namespace dftfe bool d_useSingleAtomSolutionsInitialGuess; // - bool d_isGradientOnlyOptimization; + bool d_isCurvatureOnlyLineSearchStoppingCondition; // parallel objects MPI_Comm mpi_communicator; diff --git a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc index fd8c19e53..4cb1a00a7 100644 --- a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc @@ -34,14 +34,14 @@ namespace dftfe const double trustRadius_maximum, const double trustRadius_initial, const double trustRadius_minimum, - const bool isGradientOnlyOptimization) + const bool isCurvatureOnlyLineSearchStoppingCondition) : nonLinearSolver(debugLevel, maxNumberIterations) , mpi_communicator(mpi_comm_parent) , d_usePreconditioner(usePreconditioner) , d_useRFOStep(useRFOStep) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isGradientOnlyOptimization(isGradientOnlyOptimization) + , d_isCurvatureOnlyLineSearchStoppingCondition(isCurvatureOnlyLineSearchStoppingCondition) { d_isReset = 0; d_useSingleAtomSolutionsInitialGuess = false; @@ -599,7 +599,7 @@ namespace dftfe double gtdx = internalBFGS::dot(d_deltaXNew, d_gradient); double gntdx = internalBFGS::dot(d_deltaXNew, d_gradientNew); - if (!d_isGradientOnlyOptimization) + if (!d_isCurvatureOnlyLineSearchStoppingCondition) d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; else d_wolfeSufficientDec = false; @@ -608,11 +608,11 @@ namespace dftfe if (d_debugLevel >= 1) { - if (d_wolfeSatisfied && !d_isGradientOnlyOptimization) + if (d_wolfeSatisfied && !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Wolfe conditions satisfied." << std::endl; - else if (d_wolfeSufficientDec && !d_isGradientOnlyOptimization) + else if (d_wolfeSufficientDec && !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Only Armijo condition satisfied." << std::endl; - else if (d_isGradientOnlyOptimization && d_wolfeCurvature) + else if (d_isCurvatureOnlyLineSearchStoppingCondition && d_wolfeCurvature) pcout << "Curvature condition satisfied." << std::endl; } } @@ -644,7 +644,7 @@ namespace dftfe else { double gtdx = internalBFGS::dot(d_deltaX, d_gradient); - if (!d_isGradientOnlyOptimization) + if (!d_isCurvatureOnlyLineSearchStoppingCondition) d_trustRadius = -0.5 * gtdx * d_trustRadius / ((d_valueNew[0] - d_value[0]) - gtdx); else @@ -887,7 +887,7 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_isGradientOnlyOptimization ? d_wolfeCurvature : + d_stepAccepted = d_isCurvatureOnlyLineSearchStoppingCondition ? d_wolfeCurvature : d_wolfeSufficientDec; if (d_stepAccepted) { @@ -905,7 +905,7 @@ namespace dftfe { if (d_debugLevel >= 1) { - if (!d_isGradientOnlyOptimization) + if (!d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Step rejected as Armijo condition was not satisfied." << std::endl; diff --git a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc index 80bce99d3..5cb5cad7f 100644 --- a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc @@ -32,7 +32,7 @@ namespace dftfe const int maxNumPastSteps, const unsigned int debugLevel, const MPI_Comm & mpi_comm_parent, - const bool isGradientOnlyOptimization) + const bool isCurvatureOnlyLineSearchStoppingCondition) : nonLinearSolver(debugLevel, maxNumberIterations) , d_maxStepLength(maxUpdate) , mpi_communicator(mpi_comm_parent) @@ -40,7 +40,7 @@ namespace dftfe , d_usePreconditioner(usePreconditioner) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isGradientOnlyOptimization(isGradientOnlyOptimization) + , d_isCurvatureOnlyLineSearchStoppingCondition(isCurvatureOnlyLineSearchStoppingCondition) { d_useSingleAtomSolutionsInitialGuess = false; } @@ -503,22 +503,22 @@ namespace dftfe { double gtdx = internalLBFGS::dot(d_deltaXNew, d_gradient); double gntdx = internalLBFGS::dot(d_deltaXNew, d_gradientNew); - if (!d_isGradientOnlyOptimization) + if (!d_isCurvatureOnlyLineSearchStoppingCondition) d_wolfeSufficientDec = (d_valueNew[0] - d_value[0]) < 0.01 * gtdx; else d_wolfeSufficientDec = false; - if (!d_isGradientOnlyOptimization) + if (!d_isCurvatureOnlyLineSearchStoppingCondition) d_wolfeCurvature = std::abs(gntdx) < 0.9 * std::abs(gtdx); else d_wolfeCurvature = std::abs(gntdx) < std::abs(gtdx); d_wolfeSatisfied = d_wolfeSufficientDec && d_wolfeCurvature; if (d_debugLevel >= 1) { - if (d_wolfeSatisfied && !d_isGradientOnlyOptimization) + if (d_wolfeSatisfied && !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Wolfe conditions satisfied." << std::endl; - else if (d_wolfeSufficientDec && !d_isGradientOnlyOptimization) + else if (d_wolfeSufficientDec && !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Only Armijo condition satisfied." << std::endl; - else if (d_isGradientOnlyOptimization && d_wolfeCurvature) + else if (d_isCurvatureOnlyLineSearchStoppingCondition && d_wolfeCurvature) pcout << "Curvature condition satisfied." << std::endl; } } @@ -542,7 +542,7 @@ namespace dftfe else { double gtdx = internalLBFGS::dot(d_deltaX, d_gradient); - if (!d_isGradientOnlyOptimization) + if (!d_isCurvatureOnlyLineSearchStoppingCondition) d_alpha = -0.5 * gtdx * d_alpha / ((d_valueNew[0] - d_value[0]) - gtdx); else @@ -864,7 +864,7 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_isGradientOnlyOptimization ? d_wolfeCurvature : + d_stepAccepted = d_isCurvatureOnlyLineSearchStoppingCondition ? d_wolfeCurvature : d_wolfeSufficientDec; if (d_stepAccepted) { @@ -878,7 +878,7 @@ namespace dftfe { if (d_debugLevel >= 1) { - if (!d_isGradientOnlyOptimization) + if (!d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Step rejected as Armijo condition was not satisfied." << std::endl; diff --git a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc index 1ad867f50..0181c72f2 100644 --- a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc +++ b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc @@ -33,7 +33,7 @@ namespace dftfe const unsigned int lineSearchMaxIterations, const double lineSearchDampingParameter, const double maxIncrementSolLinf, - const bool isGradientOnlyOptimization) + const bool isCurvatureOnlyLineSearchStoppingCondition) : d_lineSearchTolerance(lineSearchTolerance) , d_lineSearchMaxIterations(lineSearchMaxIterations) , d_lineSearchDampingParameter(lineSearchDampingParameter) @@ -45,7 +45,7 @@ namespace dftfe dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isGradientOnlyOptimization(isGradientOnlyOptimization) + , d_isCurvatureOnlyLineSearchStoppingCondition(isCurvatureOnlyLineSearchStoppingCondition) { d_isCGRestartDueToLargeIncrement = false; d_useSingleAtomSolutionsInitialGuess = false; From a49de208b99972ef1ec37b6f0a7c7828f59961ce Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Wed, 7 Jun 2023 11:06:57 +0530 Subject: [PATCH 29/53] Fix for printing issue --- include/BFGSNonLinearSolver.h | 19 ++--- include/LBFGSNonLinearSolver.h | 15 ++-- include/cgPRPNonLinearSolver.h | 17 ++--- include/dftParameters.h | 3 +- include/dftfeWrapper.h | 8 ++- include/nudgedElasticBandClass.h | 2 +- include/runParameters.h | 13 +++- src/dftfeWrapper.cc | 18 +++-- src/geoOpt/geometryOptimizationClass.cc | 4 +- src/main.cc | 8 ++- src/md/molecularDynamicsClass.cc | 4 +- src/neb/nudgedElasticBandClass.cc | 69 +++++++++---------- src/solvers/cgSolvers/BFGSNonLinearSolver.cc | 14 ++-- src/solvers/cgSolvers/LBFGSNonLinearSolver.cc | 14 ++-- src/solvers/cgSolvers/cgPRPNonLinearSolver.cc | 3 +- utils/dftParameters.cc | 34 ++------- utils/runParameters.cc | 34 ++++----- 17 files changed, 150 insertions(+), 129 deletions(-) diff --git a/include/BFGSNonLinearSolver.h b/include/BFGSNonLinearSolver.h index 167458554..d1f439588 100644 --- a/include/BFGSNonLinearSolver.h +++ b/include/BFGSNonLinearSolver.h @@ -46,15 +46,16 @@ namespace dftfe * @param trustRadius_initial Initial trust region radius. * @param trustRadius_minimum mimimum trust region radius (will reset BFGS). */ - BFGSNonLinearSolver(const bool usePreconditioner, - const bool useRFOStep, - const unsigned int maxNumberIterations, - const unsigned int debugLevel, - const MPI_Comm & mpi_comm_parent, - const double trustRadius_maximum = 0.5, - const double trustRadius_initial = 0.02, - const double trustRadius_minimum = 1.0e-4, - const bool isCurvatureOnlyLineSearchStoppingCondition = false); + BFGSNonLinearSolver( + const bool usePreconditioner, + const bool useRFOStep, + const unsigned int maxNumberIterations, + const unsigned int debugLevel, + const MPI_Comm & mpi_comm_parent, + const double trustRadius_maximum = 0.5, + const double trustRadius_initial = 0.02, + const double trustRadius_minimum = 1.0e-4, + const bool isCurvatureOnlyLineSearchStoppingCondition = false); /** * @brief Destructor. diff --git a/include/LBFGSNonLinearSolver.h b/include/LBFGSNonLinearSolver.h index b29c7fe44..158babd51 100644 --- a/include/LBFGSNonLinearSolver.h +++ b/include/LBFGSNonLinearSolver.h @@ -44,13 +44,14 @@ namespace dftfe * 2 - all debug output. * @param mpi_comm_parent The mpi communicator used. */ - LBFGSNonLinearSolver(const bool usePreconditioner, - const double maxUpdate, - const unsigned int maxNumberIterations, - const int maxNumPastSteps, - const unsigned int debugLevel, - const MPI_Comm & mpi_comm_parent, - const bool isCurvatureOnlyLineSearchStoppingCondition = false); + LBFGSNonLinearSolver( + const bool usePreconditioner, + const double maxUpdate, + const unsigned int maxNumberIterations, + const int maxNumPastSteps, + const unsigned int debugLevel, + const MPI_Comm & mpi_comm_parent, + const bool isCurvatureOnlyLineSearchStoppingCondition = false); /** * @brief Destructor. diff --git a/include/cgPRPNonLinearSolver.h b/include/cgPRPNonLinearSolver.h index 91d444e98..f754c7c3f 100644 --- a/include/cgPRPNonLinearSolver.h +++ b/include/cgPRPNonLinearSolver.h @@ -46,14 +46,15 @@ namespace dftfe * line search. * @param lineSearchDampingParameter scales the initial line search step */ - cgPRPNonLinearSolver(const unsigned int maxNumberIterations, - const unsigned int debugLevel, - const MPI_Comm & mpi_comm_parent, - const double lineSearchTolerance = 1.0e-6, - const unsigned int lineSearchMaxIterations = 10, - const double lineSeachDampingParameter = 1.0, - const double maxIncrementSolLinf = 1e+6, - const bool isCurvatureOnlyLineSearchStoppingCondition = false); + cgPRPNonLinearSolver( + const unsigned int maxNumberIterations, + const unsigned int debugLevel, + const MPI_Comm & mpi_comm_parent, + const double lineSearchTolerance = 1.0e-6, + const unsigned int lineSearchMaxIterations = 10, + const double lineSeachDampingParameter = 1.0, + const double maxIncrementSolLinf = 1e+6, + const bool isCurvatureOnlyLineSearchStoppingCondition = false); /** * @brief Destructor. diff --git a/include/dftParameters.h b/include/dftParameters.h index 1df702eb7..0c822528e 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -200,7 +200,8 @@ namespace dftfe const MPI_Comm & mpi_comm_parent, const bool printParams = false, const std::string mode = "GS", - const std::string restartFilesPath = "."); + const std::string restartFilesPath = ".", + const int _verbosity = 1); /** * Check parameters diff --git a/include/dftfeWrapper.h b/include/dftfeWrapper.h index 95af8f7f4..440556f87 100644 --- a/include/dftfeWrapper.h +++ b/include/dftfeWrapper.h @@ -62,7 +62,8 @@ namespace dftfe const bool printParams = false, const bool setDeviceToMPITaskBindingInternally = false, const std::string solverMode = "GS", - const std::string restartFilesPath = "."); + const std::string restartFilesPath = ".", + const int _verbosity = 1); /** * @brief constructor based on input parameter_file and restart @@ -76,6 +77,7 @@ namespace dftfe const bool setDeviceToMPITaskBindingInternally = false, const std::string solverMode = "GS", const std::string restartFilesPath = ".", + const int _verbosity = 1, const bool isScfRestart = true); @@ -166,7 +168,8 @@ namespace dftfe const bool printParams = false, const bool setDeviceToMPITaskBindingInternally = false, const std::string solverMode = "GS", - const std::string restartFilesPath = "."); + const std::string restartFilesPath = ".", + const int _verbosity = 1); /** * @brief clear and reinitialize based on input parameter_file and restart @@ -181,6 +184,7 @@ namespace dftfe const bool setDeviceToMPITaskBindingInternally = false, const std::string solverMode = "GS", const std::string restartFilesPath = ".", + const int _verbosity = 1, const bool isScfRestart = true); void diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 4b852ec58..1b5a098a9 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -162,7 +162,7 @@ namespace dftfe std::string d_optimizationSolver; std::string d_ionRelaxFlagsFile; - + std::map>> d_atomLocationsInitial; std::vector d_relaxationFlags; std::vector d_externalForceOnAtom; diff --git a/include/runParameters.h b/include/runParameters.h index 9ad92df30..14eaff25c 100644 --- a/include/runParameters.h +++ b/include/runParameters.h @@ -19,9 +19,11 @@ #ifndef runParameters_H_ #define runParameters_H_ - +#include +#include #include - +#include +#include namespace dftfe { /** @@ -58,6 +60,13 @@ namespace dftfe */ void parse_parameters(const std::string ¶meter_file); + void + print_parameters(); + + private: + dealii::ParameterHandler prm; + + }; // class runParameters diff --git a/src/dftfeWrapper.cc b/src/dftfeWrapper.cc index 4d6a02f4d..164924060 100644 --- a/src/dftfeWrapper.cc +++ b/src/dftfeWrapper.cc @@ -182,7 +182,8 @@ namespace dftfe const bool printParams, const bool setDeviceToMPITaskBindingInternally, const std::string mode, - const std::string restartFilesPath) + const std::string restartFilesPath, + const int _verbosity) : d_dftfeBasePtr(nullptr) , d_dftfeParamsPtr(nullptr) , d_mpi_comm_parent(MPI_COMM_NULL) @@ -193,7 +194,8 @@ namespace dftfe printParams, setDeviceToMPITaskBindingInternally, mode, - restartFilesPath); + restartFilesPath, + _verbosity); } @@ -208,6 +210,7 @@ namespace dftfe const bool setDeviceToMPITaskBindingInternally, const std::string mode, const std::string restartFilesPath, + const int _verbosity, const bool isScfRestart) : d_dftfeBasePtr(nullptr) , d_dftfeParamsPtr(nullptr) @@ -222,6 +225,7 @@ namespace dftfe setDeviceToMPITaskBindingInternally, mode, restartFilesPath, + _verbosity, isScfRestart); } @@ -282,7 +286,8 @@ namespace dftfe const bool printParams, const bool setDeviceToMPITaskBindingInternally, const std::string mode, - const std::string restartFilesPath) + const std::string restartFilesPath, + const int _verbosity) { clear(); if (mpi_comm_parent != MPI_COMM_NULL) @@ -296,7 +301,8 @@ namespace dftfe d_mpi_comm_parent, printParams, mode, - restartFilesPath); + restartFilesPath, + _verbosity); } initialize(setDeviceToMPITaskBindingInternally); } @@ -311,6 +317,7 @@ namespace dftfe const bool setDeviceToMPITaskBindingInternally, const std::string mode, const std::string restartFilesPath, + const int _verbosity, const bool isScfRestart) { clear(); @@ -326,7 +333,8 @@ namespace dftfe d_mpi_comm_parent, printParams, mode, - restartFilesPath); + restartFilesPath, + _verbosity); d_dftfeParamsPtr->coordinatesFile = restartCoordsFile; d_dftfeParamsPtr->domainBoundingVectorsFile = restartDomainVectorsFile; d_dftfeParamsPtr->loadRhoData = diff --git a/src/geoOpt/geometryOptimizationClass.cc b/src/geoOpt/geometryOptimizationClass.cc index 77fe16bc5..8d05e25d5 100644 --- a/src/geoOpt/geometryOptimizationClass.cc +++ b/src/geoOpt/geometryOptimizationClass.cc @@ -169,6 +169,7 @@ namespace dftfe true, "GEOOPT", d_restartFilesPath, + d_verbosity, scfRestart); d_dftPtr = d_dftfeWrapper->getDftfeBasePtr(); @@ -195,7 +196,8 @@ namespace dftfe true, true, "GEOOPT", - d_restartFilesPath); + d_restartFilesPath, + d_verbosity); d_dftPtr = d_dftfeWrapper->getDftfeBasePtr(); if (d_dftPtr->getParametersObject().optimizationMode == "ION") d_optMode = 0; diff --git a/src/main.cc b/src/main.cc index 78a368664..1d10a2adf 100644 --- a/src/main.cc +++ b/src/main.cc @@ -155,6 +155,8 @@ main(int argc, char *argv[]) std::cout << "==========================================================================================================" << std::endl; + + runParams.print_parameters(); } @@ -210,7 +212,8 @@ main(int argc, char *argv[]) true, true, "NONE", - runParams.restartFilesPath); + runParams.restartFilesPath, + runParams.verbosity); dftfeWrapped.writeMesh(); } @@ -221,7 +224,8 @@ main(int argc, char *argv[]) true, true, "GS", - runParams.restartFilesPath); + runParams.restartFilesPath, + runParams.verbosity); dftfeWrapped.run(); } diff --git a/src/md/molecularDynamicsClass.cc b/src/md/molecularDynamicsClass.cc index 9735ccac6..3dd6728b9 100644 --- a/src/md/molecularDynamicsClass.cc +++ b/src/md/molecularDynamicsClass.cc @@ -70,7 +70,8 @@ namespace dftfe true, true, "MD", - d_restartFilesPath); + d_restartFilesPath, + d_verbosity); } else { @@ -88,6 +89,7 @@ namespace dftfe true, "MD", d_restartFilesPath, + d_verbosity, scfRestart); } diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index fad23cc64..dc3763506 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -144,6 +144,7 @@ namespace dftfe Image == 0 ? true : false, "NEB", d_restartFilesPath, + d_verbosity, Image == 0 ? false : true)); } } @@ -196,6 +197,7 @@ namespace dftfe Image == 0 ? true : false, "NEB", d_restartFilesPath, + d_verbosity, Image == 0 ? false : true)); } } @@ -500,7 +502,6 @@ namespace dftfe ReturnNormedVector(tangent, d_countrelaxationFlags); } - } void @@ -719,8 +720,7 @@ namespace dftfe d_solverRestartPath + "/ionRelax.chk", d_solverRestart); - if (solverReturn == nonLinearSolver::SUCCESS && - d_verbosity >= 1) + if (solverReturn == nonLinearSolver::SUCCESS && d_verbosity >= 1) { pcout << " ...Ion force relaxation completed as maximum force magnitude is less than FORCE TOL: " @@ -784,8 +784,7 @@ namespace dftfe d_totalUpdateCalls = -2; } - if (solverReturn != nonLinearSolver::SUCCESS && - d_verbosity >= 1) + if (solverReturn != nonLinearSolver::SUCCESS && d_verbosity >= 1) { pcout << "--------------Ground State Results-------------" << std::endl; for (int i = 0; i < d_numberOfImages; i++) @@ -992,7 +991,7 @@ namespace dftfe { std::vector> globalAtomsDisplacements( d_numberGlobalCharges, std::vector(3, 0.0)); - + for (int image = 1; image < d_numberOfImages - 1; image++) { int multiplier = 1; @@ -1057,10 +1056,10 @@ namespace dftfe if (!std::get<1>(groundStateOutput)) pcout << " NEB Warning!!: Ground State of Image: " << d_NEBImageno << " did not converge" << std::endl; - double ForceError = 0.0; - d_NEBImageno = image; - ImageError(image, ForceError); - d_ImageError[image] = ForceError; + double ForceError = 0.0; + d_NEBImageno = image; + ImageError(image, ForceError); + d_ImageError[image] = ForceError; } } @@ -1455,33 +1454,33 @@ namespace dftfe if (d_solver == 0) - d_nonLinearSolverPtr = std::make_unique( - false, - bfgsStepMethod == "RFO", - d_maximumNEBIteration, - d_verbosity, - d_mpiCommParent, - d_optimizermaxIonUpdateStep, - true); + d_nonLinearSolverPtr = + std::make_unique(false, + bfgsStepMethod == "RFO", + d_maximumNEBIteration, + d_verbosity, + d_mpiCommParent, + d_optimizermaxIonUpdateStep, + true); else if (d_solver == 1) - d_nonLinearSolverPtr = std::make_unique( - false, - d_optimizermaxIonUpdateStep, - d_maximumNEBIteration, - lbfgsNumPastSteps, - d_verbosity, - d_mpiCommParent, - true); + d_nonLinearSolverPtr = + std::make_unique(false, + d_optimizermaxIonUpdateStep, + d_maximumNEBIteration, + lbfgsNumPastSteps, + d_verbosity, + d_mpiCommParent, + true); else - d_nonLinearSolverPtr = std::make_unique( - d_maximumNEBIteration, - d_verbosity, - d_mpiCommParent, - 1e-4, - maxLineSearchIterCGPRP, - 0.8, - d_optimizermaxIonUpdateStep, - true); + d_nonLinearSolverPtr = + std::make_unique(d_maximumNEBIteration, + d_verbosity, + d_mpiCommParent, + 1e-4, + maxLineSearchIterCGPRP, + 0.8, + d_optimizermaxIonUpdateStep, + true); if (d_verbosity >= 1) { diff --git a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc index 4cb1a00a7..b0cf9f570 100644 --- a/src/solvers/cgSolvers/BFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/BFGSNonLinearSolver.cc @@ -41,7 +41,8 @@ namespace dftfe , d_useRFOStep(useRFOStep) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isCurvatureOnlyLineSearchStoppingCondition(isCurvatureOnlyLineSearchStoppingCondition) + , d_isCurvatureOnlyLineSearchStoppingCondition( + isCurvatureOnlyLineSearchStoppingCondition) { d_isReset = 0; d_useSingleAtomSolutionsInitialGuess = false; @@ -610,9 +611,11 @@ namespace dftfe { if (d_wolfeSatisfied && !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Wolfe conditions satisfied." << std::endl; - else if (d_wolfeSufficientDec && !d_isCurvatureOnlyLineSearchStoppingCondition) + else if (d_wolfeSufficientDec && + !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Only Armijo condition satisfied." << std::endl; - else if (d_isCurvatureOnlyLineSearchStoppingCondition && d_wolfeCurvature) + else if (d_isCurvatureOnlyLineSearchStoppingCondition && + d_wolfeCurvature) pcout << "Curvature condition satisfied." << std::endl; } } @@ -887,8 +890,9 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_isCurvatureOnlyLineSearchStoppingCondition ? d_wolfeCurvature : - d_wolfeSufficientDec; + d_stepAccepted = d_isCurvatureOnlyLineSearchStoppingCondition ? + d_wolfeCurvature : + d_wolfeSufficientDec; if (d_stepAccepted) { if (d_iter == 0 || !d_hessianScaled) diff --git a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc index 5cb5cad7f..74ba37bb6 100644 --- a/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc +++ b/src/solvers/cgSolvers/LBFGSNonLinearSolver.cc @@ -40,7 +40,8 @@ namespace dftfe , d_usePreconditioner(usePreconditioner) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isCurvatureOnlyLineSearchStoppingCondition(isCurvatureOnlyLineSearchStoppingCondition) + , d_isCurvatureOnlyLineSearchStoppingCondition( + isCurvatureOnlyLineSearchStoppingCondition) { d_useSingleAtomSolutionsInitialGuess = false; } @@ -516,9 +517,11 @@ namespace dftfe { if (d_wolfeSatisfied && !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Wolfe conditions satisfied." << std::endl; - else if (d_wolfeSufficientDec && !d_isCurvatureOnlyLineSearchStoppingCondition) + else if (d_wolfeSufficientDec && + !d_isCurvatureOnlyLineSearchStoppingCondition) pcout << "Only Armijo condition satisfied." << std::endl; - else if (d_isCurvatureOnlyLineSearchStoppingCondition && d_wolfeCurvature) + else if (d_isCurvatureOnlyLineSearchStoppingCondition && + d_wolfeCurvature) pcout << "Curvature condition satisfied." << std::endl; } } @@ -864,8 +867,9 @@ namespace dftfe // update trust radius and hessian // checkWolfe(); - d_stepAccepted = d_isCurvatureOnlyLineSearchStoppingCondition ? d_wolfeCurvature : - d_wolfeSufficientDec; + d_stepAccepted = d_isCurvatureOnlyLineSearchStoppingCondition ? + d_wolfeCurvature : + d_wolfeSufficientDec; if (d_stepAccepted) { updateHistory(); diff --git a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc index 0181c72f2..e9b6c092b 100644 --- a/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc +++ b/src/solvers/cgSolvers/cgPRPNonLinearSolver.cc @@ -45,7 +45,8 @@ namespace dftfe dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent)) , pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(mpi_comm_parent) == 0)) - , d_isCurvatureOnlyLineSearchStoppingCondition(isCurvatureOnlyLineSearchStoppingCondition) + , d_isCurvatureOnlyLineSearchStoppingCondition( + isCurvatureOnlyLineSearchStoppingCondition) { d_isCGRestartDueToLargeIncrement = false; d_useSingleAtomSolutionsInitialGuess = false; diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 05f6b273c..fae733d0d 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -52,34 +52,13 @@ namespace dftfe - prm.declare_entry( - "VERBOSITY", - "1", - dealii::Patterns::Integer(-1, 5), - "[Standard] Parameter to control verbosity of terminal output. Ranges from 1 for low, 2 for medium (prints some more additional information), 3 for high (prints eigenvalues and fractional occupancies at the end of each self-consistent field iteration), and 4 for very high, which is only meant for code development purposes. VERBOSITY=0 is only used for unit testing and shouldn't be used by standard users. VERBOSITY=-1 ensures no outout is printed, which is useful when DFT-FE is used as a calculator inside a larger workflow where multiple parallel DFT-FE jobs might be running, for example when using ASE or generating training data for ML workflows."); - prm.declare_entry( "KEEP SCRATCH FOLDER", "false", dealii::Patterns::Bool(), "[Advanced] If set to true this option does not delete the dftfeScratch folder when the dftfe object is destroyed. This is useful for debugging and code development. Default: false."); - prm.declare_entry( - "SOLVER MODE", - "GS", - dealii::Patterns::Selection("GS|MD|NEB|GEOOPT|NONE"), - "[Standard] DFT-FE SOLVER MODE: If GS: performs GroundState calculations, ionic and cell relaxation. If MD: performs Molecular Dynamics Simulation. If NEB: performs a NEB calculation. If GEOOPT: performs an ion and/or cell optimization calculation. If NONE: the density is initialised with superposition of atomic densities and is written to file along with mesh data."); - - prm.declare_entry( - "RESTART", - "false", - dealii::Patterns::Bool(), - "[Standard] If set to true RESTART triggers restart checks and modifies the input files for coordinates, domain vectors. Default: false."); - prm.declare_entry("RESTART FOLDER", - ".", - dealii::Patterns::Anything(), - "[Standard] Folder to store restart files."); prm.enter_subsection("GPU"); { @@ -1321,14 +1300,15 @@ namespace dftfe const MPI_Comm & mpi_comm_parent, const bool printParams, const std::string mode, - const std::string restartFilesPath) + const std::string restartFilesPath, + const int _verbosity) { dealii::ParameterHandler prm; internalDftParameters::declare_parameters(prm); - //prm.parse_input(parameter_file); + // prm.parse_input(parameter_file); prm.parse_input(parameter_file, "", true); solverMode = mode; - verbosity = prm.get_integer("VERBOSITY"); + verbosity = _verbosity; reproducible_output = prm.get_bool("REPRODUCIBLE OUTPUT"); keepScratchFolder = prm.get_bool("KEEP SCRATCH FOLDER"); electrostaticsHRefinement = prm.get_bool("H REFINED ELECTROSTATICS"); @@ -1755,8 +1735,6 @@ namespace dftfe wfcBlockSize == chebyWfcBlockSize, dealii::ExcMessage( "DFT-FE Error: WFC BLOCK SIZE and CHEBY WFC BLOCK SIZE must be same for band parallelization.")); - - } @@ -1770,8 +1748,8 @@ namespace dftfe if (isBOMD) isIonForce = true; - if (solverMode == "NEB" || solverMode == "MD" ) - isIonForce = true; + if (solverMode == "NEB" || solverMode == "MD") + isIonForce = true; if (!isPseudopotential) { diff --git a/utils/runParameters.cc b/utils/runParameters.cc index 00b3b39b8..98cf1d23a 100644 --- a/utils/runParameters.cc +++ b/utils/runParameters.cc @@ -16,11 +16,8 @@ // // @author Phani Motamarri, Sambit Das // -#include -#include + #include -#include -#include @@ -140,12 +137,28 @@ namespace dftfe } } // namespace internalRunParameters + void + runParameters::print_parameters() + { + const bool printParametersToFile = false; + if (printParametersToFile && + dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) + { + prm.print_parameters(std::cout, + dealii::ParameterHandler::OutputStyle::LaTeX); + exit(0); + } + if (dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0 && + verbosity >= 1 && true) + { + prm.print_parameters(std::cout, dealii::ParameterHandler::ShortText); + } + } void runParameters::parse_parameters(const std::string ¶meter_file) { - dealii::ParameterHandler prm; internalRunParameters::declare_parameters(prm); prm.parse_input(parameter_file, "", true); @@ -170,17 +183,6 @@ namespace dftfe optimizationSolver = prm.get("NEB OPT SOLVER"); ionRelaxFlagsFile = prm.get("ION RELAX FLAGS FILE"); } - - - - const bool printParametersToFile = false; - if (printParametersToFile && - dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) - { - prm.print_parameters(std::cout, - dealii::ParameterHandler::OutputStyle::LaTeX); - exit(0); - } } } // namespace dftfe From d900309a7ff3dd019826c163a11ec3d9a12df24d Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Wed, 7 Jun 2023 14:40:03 +0530 Subject: [PATCH 30/53] BigFix and cleanups --- src/neb/nudgedElasticBandClass.cc | 85 ++++++++++++++++--------------- 1 file changed, 44 insertions(+), 41 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index dc3763506..75ea0f2bd 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -853,7 +853,7 @@ namespace dftfe std::vector flagmultiplier(d_numberOfImages, 1); flagmultiplier[0] = 0; flagmultiplier[d_numberOfImages - 1] = 0; - bool flag = false; + std::vector Flag(d_numberOfImages - 2, 0); pcout << "-----------------------------------------------------------------------" << std::endl; @@ -882,10 +882,10 @@ namespace dftfe (image != 0 || image != d_numberOfImages - 1)) flagmultiplier[image] = 0; - if (ForceError <= d_optimizertolerance) - flag = true; - else - flag = false; + if (ForceError <= d_optimizertolerance && + (image != 0 || image != d_numberOfImages - 1)) + Flag[image] = 1; + if (flagmultiplier[image] == 0) pcout << " " << " " << image << "(T)" @@ -909,48 +909,47 @@ namespace dftfe C_haToeV * 1000 << std::endl; pcout << "----------------------------------------------" << std::endl; + int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); + bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; if (flag == true) pcout << "Optimization Criteria Met!!" << std::endl; - else + + for (int image = 1; image < d_numberOfImages - 1; image++) { - for (int image = 1; image < d_numberOfImages - 1; image++) + d_NEBImageno = image; + std::vector tangent(d_countrelaxationFlags, 0.0); + std::vector Forceparallel(d_countrelaxationFlags, 0.0); + std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); + std::vector SpringForce(d_countrelaxationFlags, 0.0); + std::vector ForceonImage(d_countrelaxationFlags, 0.0); + CalculatePathTangent(image, tangent); + CalculateForceparallel(image, Forceparallel, tangent); + CalculateForceperpendicular(image, + Forceperpendicular, + Forceparallel, + tangent); + CalculateSpringForce(image, SpringForce, tangent); + CalculateForceonImage(Forceperpendicular, SpringForce, ForceonImage); + double F_spring = 0.0; + double F_per = 0.0; + LNorm(F_per, Forceperpendicular, 0, d_countrelaxationFlags); + LNorm(F_spring, SpringForce, 0, d_countrelaxationFlags); + // pcout << image << " " << F_per << " " << F_spring << std::endl; + + + + for (int i = 0; i < d_countrelaxationFlags; i++) { - d_NEBImageno = image; - std::vector tangent(d_countrelaxationFlags, 0.0); - std::vector Forceparallel(d_countrelaxationFlags, 0.0); - std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); - std::vector SpringForce(d_countrelaxationFlags, 0.0); - std::vector ForceonImage(d_countrelaxationFlags, 0.0); - CalculatePathTangent(image, tangent); - CalculateForceparallel(image, Forceparallel, tangent); - CalculateForceperpendicular(image, - Forceperpendicular, - Forceparallel, - tangent); - CalculateSpringForce(image, SpringForce, tangent); - CalculateForceonImage(Forceperpendicular, - SpringForce, - ForceonImage); - double F_spring = 0.0; - double F_per = 0.0; - LNorm(F_per, Forceperpendicular, 0, d_countrelaxationFlags); - LNorm(F_spring, SpringForce, 0, d_countrelaxationFlags); - // pcout << image << " " << F_per << " " << F_spring << std::endl; - - - - for (int i = 0; i < d_countrelaxationFlags; i++) - { - if (flag == false) - gradient.push_back(-ForceonImage[i] * flagmultiplier[image]); - else - gradient.push_back(-Forceperpendicular[i] * - flagmultiplier[image]); - } + if (flag == false) + gradient.push_back(-ForceonImage[i] * flagmultiplier[image]); + else + gradient.push_back(-Forceperpendicular[i] * + flagmultiplier[image]); } } + d_maximumAtomForceToBeRelaxed = -1.0; for (unsigned int i = 0; i < gradient.size(); ++i) @@ -1238,7 +1237,7 @@ namespace dftfe bool nudgedElasticBandClass::isConverged() const { - bool flag = true; + std::vector Flag(d_numberOfImages - 2, 0); pcout << std::endl << "-------------------------------------------------------------------------------" @@ -1262,7 +1261,7 @@ namespace dftfe << std::endl; if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { - flag = false; + Flag[i] = 1; } } MPI_Barrier(d_mpiCommParent); @@ -1274,6 +1273,10 @@ namespace dftfe << "-------------------------------------------------------------------------------" << std::endl; + bool flag = + std::accumulate(Flag.begin(), Flag.end(), 0) == (d_numberOfImages - 2) ? + true : + false; return flag; } From 50671929fe5fd63dd1dcb8a3b28fba3d56d1d79c Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 8 Jun 2023 09:16:36 +0530 Subject: [PATCH 31/53] Pringting setwidth cleanups and bug fix --- include/nudgedElasticBandClass.h | 10 ++++- src/neb/nudgedElasticBandClass.cc | 69 +++++++++++++++++-------------- 2 files changed, 47 insertions(+), 32 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 1b5a098a9..346665567 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -25,7 +25,15 @@ #include "dftfeWrapper.h" #include "headers.h" #include "constants.h" - +#include +#include +#include +#include +#include +#include +#include +#include +#include namespace dftfe { class nudgedElasticBandClass : public nonlinearSolverProblem diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 75ea0f2bd..5775711fb 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -17,15 +17,9 @@ // // @author Kartick Ramakrishnan // -#include -#include -#include -#include -#include -#include -#include + #include "nudgedElasticBandClass.h" -#include + namespace dftfe @@ -863,14 +857,15 @@ namespace dftfe << "-----------------------------------------------------------------------" << std::endl; pcout << " " - << " Image No. " + <getDFTFreeEnergy(); + int count = 0; for (int image = 0; image < d_numberOfImages; image++) { double FreeEnergy = (d_dftfeWrapper[image])->getDFTFreeEnergy(); @@ -882,20 +877,24 @@ namespace dftfe (image != 0 || image != d_numberOfImages - 1)) flagmultiplier[image] = 0; - if (ForceError <= d_optimizertolerance && - (image != 0 || image != d_numberOfImages - 1)) - Flag[image] = 1; + if ((image > 0 && image < d_numberOfImages - 1)) + { + if(ForceError < d_optimizertolerance ) + Flag[count] = 1; + count++; + + } if (flagmultiplier[image] == 0) pcout << " " - << " " << image << "(T)" - << " " << InternalEnergy << " " << FreeEnergy << " " + << " " <getDFTFreeEnergy()); } @@ -911,6 +910,7 @@ namespace dftfe pcout << "----------------------------------------------" << std::endl; int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; + pcout<<"FlagTotal: "< Flag(d_numberOfImages - 2, 0); + int count = 0; pcout << std::endl << "-------------------------------------------------------------------------------" @@ -1245,11 +1246,11 @@ namespace dftfe pcout << " --------------------NEB Attempt Completed " << "---------------------------------------" << std::endl; pcout << " " - << " Image No " + <getDFTFreeEnergy(); - pcout << " " << i << " " << Force << " " << Energy << " " - << std::endl; - if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) + pcout << " " < 0 && i < d_numberOfImages - 1)) { - Flag[i] = 1; + if(Force < d_optimizertolerance ) + Flag[count] = 1; + pcout< Date: Fri, 9 Jun 2023 21:07:47 +0530 Subject: [PATCH 32/53] Print energy in meV --- src/neb/nudgedElasticBandClass.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 5775711fb..bd66af250 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -727,7 +727,7 @@ namespace dftfe for (int i = 0; i < d_numberOfImages; i++) { pcout << "Free Energy of Image in meV: " << i + 1 << " = " - << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; + << (d_dftfeWrapper[i])->getDFTFreeEnergy()*C_haToeV * 1000 << std::endl; maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[i])->getDFTFreeEnergy()); } From e23301d6829f8dda4c8109840e52a51b49065b4e Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Sat, 17 Jun 2023 13:43:19 +0530 Subject: [PATCH 33/53] Path Length Computation --- include/nudgedElasticBandClass.h | 2 +- src/neb/nudgedElasticBandClass.cc | 33 +++++++++++++++++++++++-------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 346665567..a518052b6 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -227,7 +227,7 @@ namespace dftfe * Third, creates the array of pointers of dftClass for each image. */ void - CalculatePathLength(double &) const; + CalculatePathLength(bool flag) const; /** * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index bd66af250..d7936329f 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -1156,10 +1156,12 @@ namespace dftfe void - nudgedElasticBandClass::CalculatePathLength(double &length) const + nudgedElasticBandClass::CalculatePathLength(bool flag) const { - length = 0.0; + double length = 0.0; + int atomId = 0; std::vector> atomLocations, atomLocationsInitial; + std::vector pathLength(d_numberGlobalCharges,0.0); for (int i = 0; i < d_numberOfImages - 1; i++) { @@ -1181,10 +1183,26 @@ namespace dftfe tempy -= d_Length[1]; if (d_Length[2] / 2 <= tempz) tempz -= d_Length[2]; - temp += tempx * tempx + tempy * tempy + tempz * tempz; + pathLength[iCharge] += tempx * tempx + tempy * tempy + tempz * tempz; } - length += std::sqrt(temp); + } + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + { + if (pathLength[iCharge] > length) + { + length = pathLength[iCharge]; + atomId = iCharge; + + } + if(flag) + pcout<<"AtomID: "< Date: Sat, 17 Jun 2023 14:13:06 +0530 Subject: [PATCH 34/53] Comments in header files --- include/nudgedElasticBandClass.h | 35 +++++++++++++------------------ src/neb/nudgedElasticBandClass.cc | 1 + 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index a518052b6..845301d04 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -42,6 +42,8 @@ namespace dftfe /** * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. * Third, creates the array of pointers of dftClass for each image. + * If in restart mode, calls function to read coordinates and initialise parameters + * Sets solvermode: CGPT, LBFGS, BFGS */ nudgedElasticBandClass(const std::string parameter_file, @@ -91,6 +93,8 @@ namespace dftfe LNorm(double &, std::vector, int, int); /** * @brief Identifies the images to freeze, calculates gradient. + * First prints the Image No., free energy and force error of each image + * Prints activation energy of current step */ void gradient(std::vector &gradient); @@ -101,6 +105,7 @@ namespace dftfe getNumberUnknowns() const; /** * @brief Updates the positions of atoms and the total step count. + * Calls dftPtr colve to compute eenergy and force for current step. */ void update(const std::vector &solution, @@ -181,23 +186,20 @@ namespace dftfe getMPICommunicator(); /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Calculate the tangent between each image */ void CalculatePathTangent(int, std::vector &); /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Calculates the force on atom along the tangent between images */ void CalculateForceparallel(int, std::vector &, const std::vector &); /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Calculates force perpendicular to the tangent */ void CalculateForceperpendicular(int, @@ -207,15 +209,13 @@ namespace dftfe /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Calculates the force due to the spring. */ void CalculateSpringForce(int, std::vector &, std::vector); /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Calculates F_NEB = G_per+ F_spring */ void CalculateForceonImage(const std::vector &, @@ -223,30 +223,26 @@ namespace dftfe std::vector &); /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Calculate path length: max diaplacement of atoms */ void CalculatePathLength(bool flag) const; /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Write Restart files */ void WriteRestartFiles(int step); /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Find spring constant based on k_max and k_min. */ void CalculateSpringConstant(int, double &); /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Calculate F_per norm */ void ImageError(int image, double &Force); @@ -264,8 +260,7 @@ namespace dftfe bool isConverged() const; /** - * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. - * Third, creates the array of pointers of dftClass for each image. + * @brief Check the restart files. */ int checkRestart(bool &periodic); diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index d7936329f..926455989 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -764,6 +764,7 @@ namespace dftfe } pcout << "------------------------------------------------------" << std::endl; + CalculatePathLength(true); return d_totalUpdateCalls; } From 93a4f446f2bb4683eb2bd9c4aa91c55b78eb3d28 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 3 Jul 2023 11:21:37 +0530 Subject: [PATCH 35/53] Indendation standard --- include/nudgedElasticBandClass.h | 6 +- src/neb/nudgedElasticBandClass.cc | 106 ++++++++++++++---------------- 2 files changed, 52 insertions(+), 60 deletions(-) diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 845301d04..91e56a866 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -42,8 +42,8 @@ namespace dftfe /** * @brief First, sets the nebRestart path. Second, creates Step0 folder with coordinaes and domainVectors file. * Third, creates the array of pointers of dftClass for each image. - * If in restart mode, calls function to read coordinates and initialise parameters - * Sets solvermode: CGPT, LBFGS, BFGS + * If in restart mode, calls function to read coordinates and initialise + * parameters Sets solvermode: CGPT, LBFGS, BFGS */ nudgedElasticBandClass(const std::string parameter_file, @@ -236,7 +236,7 @@ namespace dftfe /** - * @brief Find spring constant based on k_max and k_min. + * @brief Find spring constant based on k_max and k_min. */ void CalculateSpringConstant(int, double &); diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 926455989..ff544b06c 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -727,7 +727,8 @@ namespace dftfe for (int i = 0; i < d_numberOfImages; i++) { pcout << "Free Energy of Image in meV: " << i + 1 << " = " - << (d_dftfeWrapper[i])->getDFTFreeEnergy()*C_haToeV * 1000 << std::endl; + << (d_dftfeWrapper[i])->getDFTFreeEnergy() * C_haToeV * 1000 + << std::endl; maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[i])->getDFTFreeEnergy()); } @@ -764,7 +765,7 @@ namespace dftfe } pcout << "------------------------------------------------------" << std::endl; - CalculatePathLength(true); + CalculatePathLength(true); return d_totalUpdateCalls; } @@ -857,16 +858,12 @@ namespace dftfe pcout << "-----------------------------------------------------------------------" << std::endl; - pcout << " " - <getDFTFreeEnergy(); - int count = 0; + int count = 0; for (int image = 0; image < d_numberOfImages; image++) { double FreeEnergy = (d_dftfeWrapper[image])->getDFTFreeEnergy(); @@ -880,22 +877,23 @@ namespace dftfe if ((image > 0 && image < d_numberOfImages - 1)) { - if(ForceError < d_optimizertolerance ) + if (ForceError < d_optimizertolerance) Flag[count] = 1; count++; - } if (flagmultiplier[image] == 0) pcout << " " - << " " <getDFTFreeEnergy()); } @@ -911,7 +909,7 @@ namespace dftfe pcout << "----------------------------------------------" << std::endl; int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; - pcout<<"FlagTotal: "<> atomLocations, atomLocationsInitial; - std::vector pathLength(d_numberGlobalCharges,0.0); + std::vector pathLength(d_numberGlobalCharges, 0.0); for (int i = 0; i < d_numberOfImages - 1; i++) { @@ -1184,26 +1182,26 @@ namespace dftfe tempy -= d_Length[1]; if (d_Length[2] / 2 <= tempz) tempz -= d_Length[2]; - pathLength[iCharge] += tempx * tempx + tempy * tempy + tempz * tempz; + pathLength[iCharge] += + tempx * tempx + tempy * tempy + tempz * tempz; } - } - for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) + for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) { if (pathLength[iCharge] > length) { - length = pathLength[iCharge]; - atomId = iCharge; - + length = pathLength[iCharge]; + atomId = iCharge; } - if(flag) - pcout<<"AtomID: "< Flag(d_numberOfImages - 2, 0); - int count = 0; + int count = 0; pcout << std::endl << "-------------------------------------------------------------------------------" << std::endl; pcout << " --------------------NEB Attempt Completed " << "---------------------------------------" << std::endl; - pcout << " " - <getDFTFreeEnergy(); - pcout << " " < 0 && i < d_numberOfImages - 1)) { - if(Force < d_optimizertolerance ) + if (Force < d_optimizertolerance) Flag[count] = 1; - pcout< Date: Mon, 3 Jul 2023 13:09:36 +0530 Subject: [PATCH 36/53] CTESTS inputs --- tests/dft/pseudopotential/real/H.upf | 2187 +++++++++++++++++ .../real/H3NEB_coordinates.inp | 21 + .../real/H3NEB_domainBoundingVectors.inp | 3 + .../real/H3NEB_ionRelaxFlags.inp | 3 + .../pseudopotential/real/H3NEB_pseudo.innp | 1 + tests/dft/pseudopotential/real/nebH3.prm.in | 62 + 6 files changed, 2277 insertions(+) create mode 100644 tests/dft/pseudopotential/real/H.upf create mode 100644 tests/dft/pseudopotential/real/H3NEB_coordinates.inp create mode 100644 tests/dft/pseudopotential/real/H3NEB_domainBoundingVectors.inp create mode 100644 tests/dft/pseudopotential/real/H3NEB_ionRelaxFlags.inp create mode 100644 tests/dft/pseudopotential/real/H3NEB_pseudo.innp create mode 100644 tests/dft/pseudopotential/real/nebH3.prm.in diff --git a/tests/dft/pseudopotential/real/H.upf b/tests/dft/pseudopotential/real/H.upf new file mode 100644 index 000000000..0eb31aa24 --- /dev/null +++ b/tests/dft/pseudopotential/real/H.upf @@ -0,0 +1,2187 @@ + + + +This pseudopotential file has been produced using the code +ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential) +scalar-relativistic version 3.3.0 08/16/2017 by D. R. Hamann +The code is available through a link at URL www.mat-simresearch.com. +Documentation with the package provides a full discription of the +input data below. + + +While it is not required under the terms of the GNU GPL, it is +suggested that you cite D. R. Hamann, Phys. Rev. B 88, 085117 (2013) +in any publication using these pseudopotentials. + + +# ATOM AND REFERENCE CONFIGURATION +# atsym z nc nv iexc psfile +H 1.00 0 1 4 upf +# +# n l f energy (Ha) +1 0 1.00 +# +# PSEUDOPOTENTIAL AND OPTIMIZATION +# lmax +1 +# +# l, rc, ep, ncon, nbas, qcut +0 1.00000 -0.23860 4 7 8.50000 +1 0.70000 0.05000 4 7 11.00000 +# +# LOCAL POTENTIAL +# lloc, lpopt, rc(5), dvloc0 +4 5 0.70000 0.00000 +# +# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs +# l, nproj, debl +0 2 1.00000 +1 1 1.00000 +# +# MODEL CORE CHARGE +# icmod, fcfact, rcfact +0 0.00000 0.00000 +# +# LOG DERIVATIVE ANALYSIS +# epsh1, epsh2, depsh +-12.00 12.00 0.02 +# +# OUTPUT GRID +# rlmax, drl +3.00 0.01 +# +# TEST CONFIGURATIONS +# ncnf +0 +# nvcnf +# n l f + + + + + + + + +0.0000 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 +0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500 +0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300 +0.2400 0.2500 0.2600 0.2700 0.2800 0.2900 0.3000 0.3100 +0.3200 0.3300 0.3400 0.3500 0.3600 0.3700 0.3800 0.3900 +0.4000 0.4100 0.4200 0.4300 0.4400 0.4500 0.4600 0.4700 +0.4800 0.4900 0.5000 0.5100 0.5200 0.5300 0.5400 0.5500 +0.5600 0.5700 0.5800 0.5900 0.6000 0.6100 0.6200 0.6300 +0.6400 0.6500 0.6600 0.6700 0.6800 0.6900 0.7000 0.7100 +0.7200 0.7300 0.7400 0.7500 0.7600 0.7700 0.7800 0.7900 +0.8000 0.8100 0.8200 0.8300 0.8400 0.8500 0.8600 0.8700 +0.8800 0.8900 0.9000 0.9100 0.9200 0.9300 0.9400 0.9500 +0.9600 0.9700 0.9800 0.9900 1.0000 1.0100 1.0200 1.0300 +1.0400 1.0500 1.0600 1.0700 1.0800 1.0900 1.1000 1.1100 +1.1200 1.1300 1.1400 1.1500 1.1600 1.1700 1.1800 1.1900 +1.2000 1.2100 1.2200 1.2300 1.2400 1.2500 1.2600 1.2700 +1.2800 1.2900 1.3000 1.3100 1.3200 1.3300 1.3400 1.3500 +1.3600 1.3700 1.3800 1.3900 1.4000 1.4100 1.4200 1.4300 +1.4400 1.4500 1.4600 1.4700 1.4800 1.4900 1.5000 1.5100 +1.5200 1.5300 1.5400 1.5500 1.5600 1.5700 1.5800 1.5900 +1.6000 1.6100 1.6200 1.6300 1.6400 1.6500 1.6600 1.6700 +1.6800 1.6900 1.7000 1.7100 1.7200 1.7300 1.7400 1.7500 +1.7600 1.7700 1.7800 1.7900 1.8000 1.8100 1.8200 1.8300 +1.8400 1.8500 1.8600 1.8700 1.8800 1.8900 1.9000 1.9100 +1.9200 1.9300 1.9400 1.9500 1.9600 1.9700 1.9800 1.9900 +2.0000 2.0100 2.0200 2.0300 2.0400 2.0500 2.0600 2.0700 +2.0800 2.0900 2.1000 2.1100 2.1200 2.1300 2.1400 2.1500 +2.1600 2.1700 2.1800 2.1900 2.2000 2.2100 2.2200 2.2300 +2.2400 2.2500 2.2600 2.2700 2.2800 2.2900 2.3000 2.3100 +2.3200 2.3300 2.3400 2.3500 2.3600 2.3700 2.3800 2.3900 +2.4000 2.4100 2.4200 2.4300 2.4400 2.4500 2.4600 2.4700 +2.4800 2.4900 2.5000 2.5100 2.5200 2.5300 2.5400 2.5500 +2.5600 2.5700 2.5800 2.5900 2.6000 2.6100 2.6200 2.6300 +2.6400 2.6500 2.6600 2.6700 2.6800 2.6900 2.7000 2.7100 +2.7200 2.7300 2.7400 2.7500 2.7600 2.7700 2.7800 2.7900 +2.8000 2.8100 2.8200 2.8300 2.8400 2.8500 2.8600 2.8700 +2.8800 2.8900 2.9000 2.9100 2.9200 2.9300 2.9400 2.9500 +2.9600 2.9700 2.9800 2.9900 3.0000 3.0100 3.0200 3.0300 +3.0400 3.0500 3.0600 3.0700 3.0800 3.0900 3.1000 3.1100 +3.1200 3.1300 3.1400 3.1500 3.1600 3.1700 3.1800 3.1900 +3.2000 3.2100 3.2200 3.2300 3.2400 3.2500 3.2600 3.2700 +3.2800 3.2900 3.3000 3.3100 3.3200 3.3300 3.3400 3.3500 +3.3600 3.3700 3.3800 3.3900 3.4000 3.4100 3.4200 3.4300 +3.4400 3.4500 3.4600 3.4700 3.4800 3.4900 3.5000 3.5100 +3.5200 3.5300 3.5400 3.5500 3.5600 3.5700 3.5800 3.5900 +3.6000 3.6100 3.6200 3.6300 3.6400 3.6500 3.6600 3.6700 +3.6800 3.6900 3.7000 3.7100 3.7200 3.7300 3.7400 3.7500 +3.7600 3.7700 3.7800 3.7900 3.8000 3.8100 3.8200 3.8300 +3.8400 3.8500 3.8600 3.8700 3.8800 3.8900 3.9000 3.9100 +3.9200 3.9300 3.9400 3.9500 3.9600 3.9700 3.9800 3.9900 +4.0000 4.0100 4.0200 4.0300 4.0400 4.0500 4.0600 4.0700 +4.0800 4.0900 4.1000 4.1100 4.1200 4.1300 4.1400 4.1500 +4.1600 4.1700 4.1800 4.1900 4.2000 4.2100 4.2200 4.2300 +4.2400 4.2500 4.2600 4.2700 4.2800 4.2900 4.3000 4.3100 +4.3200 4.3300 4.3400 4.3500 4.3600 4.3700 4.3800 4.3900 +4.4000 4.4100 4.4200 4.4300 4.4400 4.4500 4.4600 4.4700 +4.4800 4.4900 4.5000 4.5100 4.5200 4.5300 4.5400 4.5500 +4.5600 4.5700 4.5800 4.5900 4.6000 4.6100 4.6200 4.6300 +4.6400 4.6500 4.6600 4.6700 4.6800 4.6900 4.7000 4.7100 +4.7200 4.7300 4.7400 4.7500 4.7600 4.7700 4.7800 4.7900 +4.8000 4.8100 4.8200 4.8300 4.8400 4.8500 4.8600 4.8700 +4.8800 4.8900 4.9000 4.9100 4.9200 4.9300 4.9400 4.9500 +4.9600 4.9700 4.9800 4.9900 5.0000 5.0100 5.0200 5.0300 +5.0400 5.0500 5.0600 5.0700 5.0800 5.0900 5.1000 5.1100 +5.1200 5.1300 5.1400 5.1500 5.1600 5.1700 5.1800 5.1900 +5.2000 5.2100 5.2200 5.2300 5.2400 5.2500 5.2600 5.2700 +5.2800 5.2900 5.3000 5.3100 5.3200 5.3300 5.3400 5.3500 +5.3600 5.3700 5.3800 5.3900 5.4000 5.4100 5.4200 5.4300 +5.4400 5.4500 5.4600 5.4700 5.4800 5.4900 5.5000 5.5100 +5.5200 5.5300 5.5400 5.5500 5.5600 5.5700 5.5800 5.5900 +5.6000 5.6100 5.6200 5.6300 5.6400 5.6500 5.6600 5.6700 +5.6800 5.6900 5.7000 5.7100 5.7200 5.7300 5.7400 5.7500 +5.7600 5.7700 5.7800 5.7900 5.8000 5.8100 5.8200 5.8300 +5.8400 5.8500 5.8600 5.8700 5.8800 5.8900 5.9000 5.9100 +5.9200 5.9300 5.9400 5.9500 5.9600 5.9700 5.9800 5.9900 +6.0000 6.0100 6.0200 6.0300 6.0400 6.0500 6.0600 6.0700 +6.0800 6.0900 6.1000 6.1100 6.1200 6.1300 6.1400 6.1500 +6.1600 6.1700 6.1800 6.1900 6.2000 6.2100 6.2200 6.2300 +6.2400 6.2500 6.2600 6.2700 6.2800 6.2900 6.3000 6.3100 +6.3200 6.3300 6.3400 6.3500 6.3600 6.3700 6.3800 6.3900 +6.4000 6.4100 6.4200 6.4300 6.4400 6.4500 6.4600 6.4700 +6.4800 6.4900 6.5000 6.5100 6.5200 6.5300 6.5400 6.5500 +6.5600 6.5700 6.5800 6.5900 6.6000 6.6100 6.6200 6.6300 +6.6400 6.6500 6.6600 6.6700 6.6800 6.6900 6.7000 6.7100 +6.7200 6.7300 6.7400 6.7500 6.7600 6.7700 6.7800 6.7900 +6.8000 6.8100 6.8200 6.8300 6.8400 6.8500 6.8600 6.8700 +6.8800 6.8900 6.9000 6.9100 6.9200 6.9300 6.9400 6.9500 +6.9600 6.9700 6.9800 6.9900 7.0000 7.0100 7.0200 7.0300 +7.0400 7.0500 7.0600 7.0700 7.0800 7.0900 7.1000 7.1100 +7.1200 7.1300 7.1400 7.1500 7.1600 7.1700 7.1800 7.1900 +7.2000 7.2100 7.2200 7.2300 7.2400 7.2500 7.2600 7.2700 +7.2800 7.2900 7.3000 7.3100 7.3200 7.3300 7.3400 7.3500 +7.3600 7.3700 7.3800 7.3900 7.4000 7.4100 7.4200 7.4300 +7.4400 7.4500 7.4600 7.4700 7.4800 7.4900 7.5000 7.5100 +7.5200 7.5300 7.5400 7.5500 7.5600 7.5700 7.5800 7.5900 +7.6000 7.6100 7.6200 7.6300 7.6400 7.6500 7.6600 7.6700 +7.6800 7.6900 7.7000 7.7100 7.7200 7.7300 7.7400 7.7500 +7.7600 7.7700 7.7800 7.7900 7.8000 7.8100 7.8200 7.8300 +7.8400 7.8500 7.8600 7.8700 7.8800 7.8900 7.9000 7.9100 +7.9200 7.9300 7.9400 7.9500 7.9600 7.9700 7.9800 7.9900 +8.0000 8.0100 8.0200 8.0300 8.0400 8.0500 8.0600 8.0700 +8.0800 8.0900 8.1000 8.1100 8.1200 8.1300 8.1400 8.1500 +8.1600 8.1700 8.1800 8.1900 8.2000 8.2100 8.2200 8.2300 +8.2400 8.2500 8.2600 8.2700 8.2800 8.2900 8.3000 8.3100 +8.3200 8.3300 8.3400 8.3500 8.3600 8.3700 8.3800 8.3900 +8.4000 8.4100 8.4200 8.4300 8.4400 8.4500 8.4600 8.4700 +8.4800 8.4900 8.5000 8.5100 8.5200 8.5300 8.5400 8.5500 +8.5600 8.5700 8.5800 8.5900 8.6000 8.6100 8.6200 8.6300 +8.6400 8.6500 8.6600 8.6700 8.6800 8.6900 8.7000 8.7100 +8.7200 8.7300 8.7400 8.7500 8.7600 8.7700 8.7800 8.7900 +8.8000 8.8100 8.8200 8.8300 8.8400 8.8500 8.8600 8.8700 +8.8800 8.8900 8.9000 8.9100 8.9200 8.9300 8.9400 8.9500 +8.9600 8.9700 8.9800 8.9900 9.0000 9.0100 9.0200 9.0300 +9.0400 9.0500 9.0600 9.0700 9.0800 9.0900 9.1000 9.1100 +9.1200 9.1300 9.1400 9.1500 9.1600 9.1700 9.1800 9.1900 +9.2000 9.2100 9.2200 9.2300 9.2400 9.2500 9.2600 9.2700 +9.2800 9.2900 9.3000 9.3100 9.3200 9.3300 9.3400 9.3500 +9.3600 9.3700 9.3800 9.3900 9.4000 9.4100 9.4200 9.4300 +9.4400 9.4500 9.4600 9.4700 9.4800 9.4900 9.5000 9.5100 +9.5200 9.5300 9.5400 9.5500 9.5600 9.5700 9.5800 9.5900 +9.6000 9.6100 9.6200 9.6300 9.6400 9.6500 9.6600 9.6700 +9.6800 9.6900 9.7000 9.7100 9.7200 9.7300 9.7400 9.7500 +9.7600 9.7700 9.7800 9.7900 9.8000 9.8100 9.8200 9.8300 +9.8400 9.8500 9.8600 9.8700 9.8800 9.8900 9.9000 9.9100 +9.9200 9.9300 9.9400 9.9500 9.9600 9.9700 9.9800 9.9900 +10.0000 10.0100 10.0200 10.0300 10.0400 10.0500 10.0600 10.0700 +10.0800 10.0900 10.1000 10.1100 10.1200 10.1300 10.1400 10.1500 +10.1600 10.1700 10.1800 10.1900 10.2000 10.2100 10.2200 10.2300 +10.2400 10.2500 10.2600 10.2700 10.2800 10.2900 10.3000 10.3100 +10.3200 10.3300 10.3400 10.3500 10.3600 10.3700 10.3800 10.3900 +10.4000 10.4100 10.4200 10.4300 10.4400 10.4500 10.4600 10.4700 +10.4800 10.4900 10.5000 10.5100 10.5200 10.5300 10.5400 10.5500 +10.5600 10.5700 10.5800 10.5900 10.6000 10.6100 10.6200 10.6300 +10.6400 10.6500 10.6600 10.6700 10.6800 10.6900 10.7000 10.7100 +10.7200 10.7300 10.7400 10.7500 10.7600 10.7700 10.7800 10.7900 +10.8000 10.8100 10.8200 10.8300 10.8400 10.8500 10.8600 10.8700 +10.8800 10.8900 10.9000 10.9100 10.9200 10.9300 10.9400 10.9500 +10.9600 10.9700 10.9800 10.9900 11.0000 11.0100 11.0200 11.0300 +11.0400 11.0500 11.0600 11.0700 11.0800 11.0900 11.1000 11.1100 +11.1200 11.1300 11.1400 11.1500 11.1600 11.1700 11.1800 11.1900 +11.2000 11.2100 11.2200 11.2300 11.2400 11.2500 11.2600 11.2700 +11.2800 11.2900 11.3000 11.3100 11.3200 11.3300 11.3400 11.3500 +11.3600 11.3700 11.3800 11.3900 11.4000 11.4100 11.4200 11.4300 +11.4400 11.4500 11.4600 11.4700 11.4800 11.4900 11.5000 11.5100 +11.5200 11.5300 11.5400 11.5500 11.5600 11.5700 11.5800 11.5900 +11.6000 11.6100 11.6200 11.6300 11.6400 11.6500 + + +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + + + +-6.3046688226E+00 -6.3029573079E+00 -6.2978339557E+00 -6.2893312660E+00 +-6.2775022316E+00 -6.2624185879E+00 -6.2441685264E+00 -6.2228540242E+00 +-6.1985879409E+00 -6.1714910416E+00 -6.1416890965E+00 -6.1093101886E+00 +-6.0744823275E+00 -6.0373314449E+00 -5.9979798065E+00 -5.9565448525E+00 +-5.9131384513E+00 -5.8678665313E+00 -5.8208290427E+00 -5.7721201943E+00 +-5.7218289052E+00 -5.6700394133E+00 -5.6168319871E+00 -5.5622836920E+00 +-5.5064691693E+00 -5.4494613946E+00 -5.3913323887E+00 -5.3321538601E+00 +-5.2719977656E+00 -5.2109367806E+00 -5.1490446725E+00 -5.0863965782E+00 +-5.0230691854E+00 -4.9591408231E+00 -4.8946914649E+00 -4.8298026532E+00 +-4.7645573512E+00 -4.6990397305E+00 -4.6333349039E+00 -4.5675286109E+00 +-4.5017068666E+00 -4.4359555809E+00 -4.3703601590E+00 -4.3050050899E+00 +-4.2399735316E+00 -4.1753469014E+00 -4.1112044755E+00 -4.0476230070E+00 +-3.9846763631E+00 -3.9224351889E+00 -3.8609665971E+00 -3.8003338858E+00 +-3.7405962840E+00 -3.6818087238E+00 -3.6240216355E+00 -3.5672807634E+00 +-3.5116269972E+00 -3.4570962161E+00 -3.4037191382E+00 -3.3515211743E+00 +-3.3005222783E+00 -3.2507367937E+00 -3.2021732914E+00 -3.1548343986E+00 +-3.1087166163E+00 -3.0638101269E+00 -3.0200985913E+00 -2.9775589381E+00 +-2.9361611455E+00 -2.8958680166E+00 -2.8566349704E+00 -2.8184097350E+00 +-2.7811343520E+00 -2.7447521134E+00 -2.7092107678E+00 -2.6744624128E+00 +-2.6404634994E+00 -2.6071747994E+00 -2.5745613652E+00 -2.5425924743E+00 +-2.5112415502E+00 -2.4804860529E+00 -2.4503073354E+00 -2.4206904587E+00 +-2.3916239656E+00 -2.3630996095E+00 -2.3351120410E+00 -2.3076584534E+00 +-2.2807381917E+00 -2.2543523318E+00 -2.2285032353E+00 -2.2031940916E+00 +-2.1784284531E+00 -2.1542097772E+00 -2.1305409829E+00 -2.1074240341E+00 +-2.0848595571E+00 -2.0628465492E+00 -2.0413818291E+00 -2.0204605559E+00 +-2.0000764964E+00 -1.9802076891E+00 -1.9607976294E+00 -1.9417695462E+00 +-1.9230947802E+00 -1.9047755973E+00 -1.8868078706E+00 -1.8691738500E+00 +-1.8518663728E+00 -1.8348767394E+00 -1.8181959221E+00 -1.8018156723E+00 +-1.7857279283E+00 -1.7699249247E+00 -1.7543991682E+00 -1.7391434264E+00 +-1.7241507160E+00 -1.7094142928E+00 -1.6949276408E+00 -1.6806844634E+00 +-1.6666786736E+00 -1.6529043858E+00 -1.6393559073E+00 -1.6260277305E+00 +-1.6129145256E+00 -1.6000111331E+00 -1.5873125577E+00 -1.5748139610E+00 +-1.5625106560E+00 -1.5503981010E+00 -1.5384718942E+00 -1.5267277679E+00 +-1.5151615841E+00 -1.5037693288E+00 -1.4925471082E+00 -1.4814911438E+00 +-1.4705977680E+00 -1.4598634206E+00 -1.4492846444E+00 -1.4388580817E+00 +-1.4285804708E+00 -1.4184486425E+00 -1.4084595168E+00 -1.3986101001E+00 +-1.3888974816E+00 -1.3793188311E+00 -1.3698713957E+00 -1.3605524977E+00 +-1.3513595315E+00 -1.3422899615E+00 -1.3333413198E+00 -1.3245112039E+00 +-1.3157972744E+00 -1.3071972531E+00 -1.2987089210E+00 -1.2903301164E+00 +-1.2820587331E+00 -1.2738927182E+00 -1.2658300712E+00 -1.2578688417E+00 +-1.2500071280E+00 -1.2422430760E+00 -1.2345748769E+00 -1.2270007667E+00 +-1.2195190242E+00 -1.2121279698E+00 -1.2048259648E+00 -1.1976114094E+00 +-1.1904827419E+00 -1.1834384378E+00 -1.1764770082E+00 -1.1695969992E+00 +-1.1627969906E+00 -1.1560755952E+00 -1.1494314576E+00 -1.1428632532E+00 +-1.1363696878E+00 -1.1299494964E+00 -1.1236014421E+00 -1.1173243161E+00 +-1.1111169362E+00 -1.1049781463E+00 -1.0989068159E+00 -1.0929018390E+00 +-1.0869621338E+00 -1.0810866418E+00 -1.0752743273E+00 -1.0695241767E+00 +-1.0638351981E+00 -1.0582064204E+00 -1.0526368932E+00 -1.0471256857E+00 +-1.0416718867E+00 -1.0362746038E+00 -1.0309329631E+00 -1.0256461086E+00 +-1.0204132015E+00 -1.0152334205E+00 -1.0101059606E+00 -1.0050300329E+00 +-1.0000048645E+00 -9.9502969780E-01 -9.9010379018E-01 -9.8522641367E-01 +-9.8039685456E-01 -9.7561441308E-01 -9.7087840305E-01 -9.6618815153E-01 +-9.6154299855E-01 -9.5694229675E-01 -9.5238541110E-01 -9.4787171863E-01 +-9.4340060811E-01 -9.3897147977E-01 -9.3458374509E-01 -9.3023682648E-01 +-9.2593015703E-01 -9.2166318031E-01 -9.1743535009E-01 -9.1324613009E-01 +-9.0909499383E-01 -9.0498142432E-01 -9.0090491390E-01 -8.9686496402E-01 +-8.9286108503E-01 -8.8889279597E-01 -8.8495962441E-01 -8.8106110625E-01 +-8.7719678552E-01 -8.7336621422E-01 -8.6956895213E-01 -8.6580456667E-01 +-8.6207263271E-01 -8.5837273242E-01 -8.5470445511E-01 -8.5106739709E-01 +-8.4746116150E-01 -8.4388535818E-01 -8.4033960354E-01 -8.3682352040E-01 +-8.3333673787E-01 -8.2987889120E-01 -8.2644962170E-01 -8.2304857656E-01 +-8.1967540876E-01 -8.1632977695E-01 -8.1301134533E-01 -8.0971978353E-01 +-8.0645476653E-01 -8.0321597450E-01 -8.0000309275E-01 -7.9681581160E-01 +-7.9365382628E-01 -7.9051683685E-01 -7.8740454808E-01 -7.8431666938E-01 +-7.8125291470E-01 -7.7821300245E-01 -7.7519665538E-01 -7.7220360055E-01 +-7.6923356920E-01 -7.6628629670E-01 -7.6336152246E-01 -7.6045898985E-01 +-7.5757844612E-01 -7.5471964236E-01 -7.5188233337E-01 -7.4906627765E-01 +-7.4627123730E-01 -7.4349697794E-01 -7.4074326868E-01 -7.3800988203E-01 +-7.3529659386E-01 -7.3260318330E-01 -7.2992943272E-01 -7.2727512766E-01 +-7.2464005675E-01 -7.2202401168E-01 -7.1942678715E-01 -7.1684818079E-01 +-7.1428799313E-01 -7.1174602752E-01 -7.0922209012E-01 -7.0671598982E-01 +-7.0422753821E-01 -7.0175654952E-01 -6.9930284057E-01 -6.9686623075E-01 +-6.9444654193E-01 -6.9204359848E-01 -6.8965722717E-01 -6.8728725715E-01 +-6.8493351994E-01 -6.8259584931E-01 -6.8027408134E-01 -6.7796805430E-01 +-6.7567760866E-01 -6.7340258704E-01 -6.7114283416E-01 -6.6889819683E-01 +-6.6666852390E-01 -6.6445366623E-01 -6.6225347664E-01 -6.6006780991E-01 +-6.5789652272E-01 -6.5573947365E-01 -6.5359652310E-01 -6.5146753330E-01 +-6.4935236828E-01 -6.4725089382E-01 -6.4516297743E-01 -6.4308848832E-01 +-6.4102729740E-01 -6.3897927720E-01 -6.3694430190E-01 -6.3492224725E-01 +-6.3291299059E-01 -6.3091641081E-01 -6.2893238833E-01 -6.2696080503E-01 +-6.2500154431E-01 -6.2305449101E-01 -6.2111953140E-01 -6.1919655314E-01 +-6.1728544530E-01 -6.1538609831E-01 -6.1349840395E-01 -6.1162225530E-01 +-6.0975754677E-01 -6.0790417403E-01 -6.0606203405E-01 -6.0423102500E-01 +-6.0241104632E-01 -6.0060199863E-01 -5.9880378373E-01 -5.9701630464E-01 +-5.9523946548E-01 -5.9347317155E-01 -5.9171732924E-01 -5.8997184607E-01 +-5.8823663062E-01 -5.8651159257E-01 -5.8479664263E-01 -5.8309169259E-01 +-5.8139665522E-01 -5.7971144432E-01 -5.7803597471E-01 -5.7637016215E-01 +-5.7471392339E-01 -5.7306717615E-01 -5.7142983906E-01 -5.6980183169E-01 +-5.6818307452E-01 -5.6657348895E-01 -5.6497299724E-01 -5.6338152254E-01 +-5.6179898888E-01 -5.6022532110E-01 -5.5866044491E-01 -5.5710428686E-01 +-5.5555677427E-01 -5.5401783531E-01 -5.5248739892E-01 -5.5096539483E-01 +-5.4945175354E-01 -5.4794640632E-01 -5.4644928518E-01 -5.4496032287E-01 +-5.4347945288E-01 -5.4200660941E-01 -5.4054172740E-01 -5.3908474244E-01 +-5.3763559087E-01 -5.3619420967E-01 -5.3476053651E-01 -5.3333450972E-01 +-5.3191606830E-01 -5.3050515188E-01 -5.2910170074E-01 -5.2770565578E-01 +-5.2631695853E-01 -5.2493555114E-01 -5.2356137635E-01 -5.2219437751E-01 +-5.2083449855E-01 -5.1948168399E-01 -5.1813587893E-01 -5.1679702902E-01 +-5.1546508049E-01 -5.1413998011E-01 -5.1282167520E-01 -5.1151011363E-01 +-5.1020524377E-01 -5.0890701455E-01 -5.0761537540E-01 -5.0633027627E-01 +-5.0505166761E-01 -5.0377950037E-01 -5.0251372600E-01 -5.0125429643E-01 +-5.0000116406E-01 -4.9875428180E-01 -4.9751360299E-01 -4.9627908145E-01 +-4.9505067145E-01 -4.9382832773E-01 -4.9261200546E-01 -4.9140166025E-01 +-4.9019724816E-01 -4.8899872565E-01 -4.8780604963E-01 -4.8661917744E-01 +-4.8543806679E-01 -4.8426267585E-01 -4.8309296316E-01 -4.8192888767E-01 +-4.8077040873E-01 -4.7961748608E-01 -4.7847007983E-01 -4.7732815048E-01 +-4.7619165892E-01 -4.7506056639E-01 -4.7393483451E-01 -4.7281442526E-01 +-4.7169930098E-01 -4.7058942436E-01 -4.6948475844E-01 -4.6838526661E-01 +-4.6729091261E-01 -4.6620166050E-01 -4.6511747469E-01 -4.6403831992E-01 +-4.6296416123E-01 -4.6189496403E-01 -4.6083069400E-01 -4.5977131717E-01 +-4.5871679987E-01 -4.5766710874E-01 -4.5662221071E-01 -4.5558207304E-01 +-4.5454666327E-01 -4.5351594922E-01 -4.5248989903E-01 -4.5146848112E-01 +-4.5045166418E-01 -4.4943941720E-01 -4.4843170943E-01 -4.4742851041E-01 +-4.4642978994E-01 -4.4543551811E-01 -4.4444566524E-01 -4.4346020196E-01 +-4.4247909911E-01 -4.4150232783E-01 -4.4052985949E-01 -4.3956166572E-01 +-4.3859771839E-01 -4.3763798963E-01 -4.3668245181E-01 -4.3573107753E-01 +-4.3478383963E-01 -4.3384071121E-01 -4.3290166557E-01 -4.3196667626E-01 +-4.3103571705E-01 -4.3010876194E-01 -4.2918578516E-01 -4.2826676114E-01 +-4.2735166455E-01 -4.2644047026E-01 -4.2553315337E-01 -4.2462968917E-01 +-4.2373005319E-01 -4.2283422113E-01 -4.2194216893E-01 -4.2105387270E-01 +-4.2016930879E-01 -4.1928845370E-01 -4.1841128418E-01 -4.1753777712E-01 +-4.1666790965E-01 -4.1580165905E-01 -4.1493900283E-01 -4.1407991865E-01 +-4.1322438437E-01 -4.1237237804E-01 -4.1152387787E-01 -4.1067886227E-01 +-4.0983730981E-01 -4.0899919925E-01 -4.0816450952E-01 -4.0733321971E-01 +-4.0650530910E-01 -4.0568075712E-01 -4.0485954337E-01 -4.0404164762E-01 +-4.0322704980E-01 -4.0241573001E-01 -4.0160766849E-01 -4.0080284567E-01 +-4.0000124210E-01 -3.9920283851E-01 -3.9840761577E-01 -3.9761555492E-01 +-3.9682663714E-01 -3.9604084375E-01 -3.9525815622E-01 -3.9447855619E-01 +-3.9370202541E-01 -3.9292854580E-01 -3.9215809940E-01 -3.9139066842E-01 +-3.9062623518E-01 -3.8986478215E-01 -3.8910629194E-01 -3.8835074729E-01 +-3.8759813108E-01 -3.8684842630E-01 -3.8610161610E-01 -3.8535768375E-01 +-3.8461661264E-01 -3.8387838630E-01 -3.8314298839E-01 -3.8241040266E-01 +-3.8168061304E-01 -3.8095360353E-01 -3.8022935828E-01 -3.7950786155E-01 +-3.7878909774E-01 -3.7807305134E-01 -3.7735970697E-01 -3.7664904936E-01 +-3.7594106336E-01 -3.7523573394E-01 -3.7453304617E-01 -3.7383298524E-01 +-3.7313553644E-01 -3.7244068519E-01 -3.7174841699E-01 -3.7105871748E-01 +-3.7037157238E-01 -3.6968696753E-01 -3.6900488886E-01 -3.6832532243E-01 +-3.6764825437E-01 -3.6697367093E-01 -3.6630155847E-01 -3.6563190342E-01 +-3.6496469234E-01 -3.6429991188E-01 -3.6363754877E-01 -3.6297758985E-01 +-3.6232002206E-01 -3.6166483243E-01 -3.6101200807E-01 -3.6036153620E-01 +-3.5971340414E-01 -3.5906759927E-01 -3.5842410909E-01 -3.5778292117E-01 +-3.5714402318E-01 -3.5650740288E-01 -3.5587304810E-01 -3.5524094677E-01 +-3.5461108692E-01 -3.5398345663E-01 -3.5335804409E-01 -3.5273483757E-01 +-3.5211382541E-01 -3.5149499605E-01 -3.5087833799E-01 -3.5026383983E-01 +-3.4965149025E-01 -3.4904127798E-01 -3.4843319187E-01 -3.4782722081E-01 +-3.4722335380E-01 -3.4662157989E-01 -3.4602188823E-01 -3.4542426801E-01 +-3.4482870853E-01 -3.4423519915E-01 -3.4364372930E-01 -3.4305428848E-01 +-3.4246686627E-01 -3.4188145232E-01 -3.4129803636E-01 -3.4071660816E-01 +-3.4013715758E-01 -3.3955967457E-01 -3.3898414910E-01 -3.3841057124E-01 +-3.3783893113E-01 -3.3726921895E-01 -3.3670142499E-01 -3.3613553955E-01 +-3.3557155304E-01 -3.3500945591E-01 -3.3444923869E-01 -3.3389089196E-01 +-3.3333440636E-01 -3.3277977262E-01 -3.3222698149E-01 -3.3167602382E-01 +-3.3112689049E-01 -3.3057957246E-01 -3.3003406075E-01 -3.2949034642E-01 +-3.2894842061E-01 -3.2840827451E-01 -3.2786989936E-01 -3.2733328647E-01 +-3.2679842721E-01 -3.2626531298E-01 -3.2573393527E-01 -3.2520428560E-01 +-3.2467635555E-01 -3.2415013677E-01 -3.2362562096E-01 -3.2310279984E-01 +-3.2258166524E-01 -3.2206220899E-01 -3.2154442300E-01 -3.2102829924E-01 +-3.2051382971E-01 -3.2000100646E-01 -3.1948982162E-01 -3.1898026733E-01 +-3.1847233582E-01 -3.1796601934E-01 -3.1746131020E-01 -3.1695820077E-01 +-3.1645668344E-01 -3.1595675067E-01 -3.1545839496E-01 -3.1496160887E-01 +-3.1446638498E-01 -3.1397271595E-01 -3.1348059446E-01 -3.1299001324E-01 +-3.1250096508E-01 -3.1201344280E-01 -3.1152743927E-01 -3.1104294741E-01 +-3.1055996017E-01 -3.1007847055E-01 -3.0959847161E-01 -3.0911995642E-01 +-3.0864291813E-01 -3.0816734989E-01 -3.0769324493E-01 -3.0722059651E-01 +-3.0674939792E-01 -3.0627964251E-01 -3.0581132364E-01 -3.0534443475E-01 +-3.0487896929E-01 -3.0441492077E-01 -3.0395228272E-01 -3.0349104872E-01 +-3.0303121239E-01 -3.0257276739E-01 -3.0211570742E-01 -3.0166002620E-01 +-3.0120571750E-01 -3.0075277514E-01 -3.0030119296E-01 -2.9985096485E-01 +-2.9940208471E-01 -2.9895454652E-01 -2.9850834425E-01 -2.9806347193E-01 +-2.9761992364E-01 -2.9717769346E-01 -2.9673677553E-01 -2.9629716402E-01 +-2.9585885313E-01 -2.9542183709E-01 -2.9498611018E-01 -2.9455166671E-01 +-2.9411850100E-01 -2.9368660743E-01 -2.9325598041E-01 -2.9282661437E-01 +-2.9239850378E-01 -2.9197164315E-01 -2.9154602700E-01 -2.9112164990E-01 +-2.9069850646E-01 -2.9027659129E-01 -2.8985589906E-01 -2.8943642446E-01 +-2.8901816220E-01 -2.8860110705E-01 -2.8818525379E-01 -2.8777059722E-01 +-2.8735713219E-01 -2.8694485356E-01 -2.8653375625E-01 -2.8612383518E-01 +-2.8571508531E-01 -2.8530750162E-01 -2.8490107914E-01 -2.8449581291E-01 +-2.8409169800E-01 -2.8368872951E-01 -2.8328690257E-01 -2.8288621234E-01 +-2.8248665400E-01 -2.8208822276E-01 -2.8169091385E-01 -2.8129472256E-01 +-2.8089964415E-01 -2.8050567396E-01 -2.8011280732E-01 -2.7972103961E-01 +-2.7933036622E-01 -2.7894078257E-01 -2.7855228411E-01 -2.7816486631E-01 +-2.7777852467E-01 -2.7739325471E-01 -2.7700905198E-01 -2.7662591205E-01 +-2.7624383051E-01 -2.7586280299E-01 -2.7548282513E-01 -2.7510389260E-01 +-2.7472600109E-01 -2.7434914632E-01 -2.7397332403E-01 -2.7359852997E-01 +-2.7322475994E-01 -2.7285200975E-01 -2.7248027523E-01 -2.7210955222E-01 +-2.7173983662E-01 -2.7137112431E-01 -2.7100341122E-01 -2.7063669329E-01 +-2.7027096650E-01 -2.6990622682E-01 -2.6954247026E-01 -2.6917969286E-01 +-2.6881789067E-01 -2.6845705975E-01 -2.6809719621E-01 -2.6773829616E-01 +-2.6738035574E-01 -2.6702337110E-01 -2.6666733841E-01 -2.6631225388E-01 +-2.6595811373E-01 -2.6560491418E-01 -2.6525265151E-01 -2.6490132198E-01 +-2.6455092189E-01 -2.6420144757E-01 -2.6385289533E-01 -2.6350526155E-01 +-2.6315854260E-01 -2.6281273486E-01 -2.6246783476E-01 -2.6212383872E-01 +-2.6178074319E-01 -2.6143854465E-01 -2.6109723957E-01 -2.6075682447E-01 +-2.6041729587E-01 -2.6007865030E-01 -2.5974088434E-01 -2.5940399455E-01 +-2.5906797753E-01 -2.5873282990E-01 -2.5839854828E-01 -2.5806512933E-01 +-2.5773256970E-01 -2.5740086608E-01 -2.5707001517E-01 -2.5674001369E-01 +-2.5641085837E-01 -2.5608254595E-01 -2.5575507321E-01 -2.5542843692E-01 +-2.5510263389E-01 -2.5477766094E-01 -2.5445351488E-01 -2.5413019258E-01 +-2.5380769090E-01 -2.5348600671E-01 -2.5316513691E-01 -2.5284507842E-01 +-2.5252582815E-01 -2.5220738305E-01 -2.5188974009E-01 -2.5157289623E-01 +-2.5125684846E-01 -2.5094159378E-01 -2.5062712922E-01 -2.5031345180E-01 +-2.5000055858E-01 -2.4968844662E-01 -2.4937711299E-01 -2.4906655478E-01 +-2.4875676912E-01 -2.4844775310E-01 -2.4813950388E-01 -2.4783201860E-01 +-2.4752529442E-01 -2.4721932852E-01 -2.4691411810E-01 -2.4660966035E-01 +-2.4630595250E-01 -2.4600299178E-01 -2.4570077543E-01 -2.4539930073E-01 +-2.4509856493E-01 -2.4479856533E-01 -2.4449929923E-01 -2.4420076393E-01 +-2.4390295678E-01 -2.4360587510E-01 -2.4330951624E-01 -2.4301387758E-01 +-2.4271895649E-01 -2.4242475037E-01 -2.4213125660E-01 -2.4183847262E-01 +-2.4154639585E-01 -2.4125502373E-01 -2.4096435371E-01 -2.4067438326E-01 +-2.4038510985E-01 -2.4009653098E-01 -2.3980864415E-01 -2.3952144687E-01 +-2.3923493667E-01 -2.3894911108E-01 -2.3866396765E-01 -2.3837950395E-01 +-2.3809571754E-01 -2.3781260601E-01 -2.3753016696E-01 -2.3724839799E-01 +-2.3696729673E-01 -2.3668686079E-01 -2.3640708782E-01 -2.3612797548E-01 +-2.3584952142E-01 -2.3557172332E-01 -2.3529457886E-01 -2.3501808575E-01 +-2.3474224168E-01 -2.3446704438E-01 -2.3419249157E-01 -2.3391858099E-01 +-2.3364531039E-01 -2.3337267752E-01 -2.3310068017E-01 -2.3282931611E-01 +-2.3255858313E-01 -2.3228847903E-01 -2.3201900163E-01 -2.3175014874E-01 +-2.3148191819E-01 -2.3121430784E-01 -2.3094731552E-01 -2.3068093911E-01 +-2.3041517647E-01 -2.3015002548E-01 -2.2988548404E-01 -2.2962155004E-01 +-2.2935822140E-01 -2.2909549603E-01 -2.2883337186E-01 -2.2857184684E-01 +-2.2831091891E-01 -2.2805058603E-01 -2.2779084617E-01 -2.2753169729E-01 +-2.2727313739E-01 -2.2701516447E-01 -2.2675777651E-01 -2.2650097155E-01 +-2.2624474759E-01 -2.2598910268E-01 -2.2573403484E-01 -2.2547954213E-01 +-2.2522562260E-01 -2.2497227432E-01 -2.2471949537E-01 -2.2446728382E-01 +-2.2421563777E-01 -2.2396455532E-01 -2.2371403458E-01 -2.2346407366E-01 +-2.2321467070E-01 -2.2296582382E-01 -2.2271753116E-01 -2.2246979088E-01 +-2.2222260114E-01 -2.2197596010E-01 -2.2172986594E-01 -2.2148431684E-01 +-2.2123931100E-01 -2.2099484660E-01 -2.2075092186E-01 -2.2050753500E-01 +-2.2026468423E-01 -2.2002236779E-01 -2.1978058392E-01 -2.1953933086E-01 +-2.1929860686E-01 -2.1905841019E-01 -2.1881873912E-01 -2.1857959192E-01 +-2.1834096688E-01 -2.1810286229E-01 -2.1786527644E-01 -2.1762820765E-01 +-2.1739165423E-01 -2.1715561451E-01 -2.1692008679E-01 -2.1668506944E-01 +-2.1645056078E-01 -2.1621655917E-01 -2.1598306296E-01 -2.1575007053E-01 +-2.1551758023E-01 -2.1528559046E-01 -2.1505409959E-01 -2.1482310602E-01 +-2.1459260814E-01 -2.1436260436E-01 -2.1413309310E-01 -2.1390407278E-01 +-2.1367554182E-01 -2.1344749865E-01 -2.1321994172E-01 -2.1299286947E-01 +-2.1276628035E-01 -2.1254017283E-01 -2.1231454537E-01 -2.1208939644E-01 +-2.1186472453E-01 -2.1164052811E-01 -2.1141680568E-01 -2.1119355574E-01 +-2.1097077680E-01 -2.1074846736E-01 -2.1052662594E-01 -2.1030525107E-01 +-2.1008434127E-01 -2.0986389508E-01 -2.0964391105E-01 -2.0942438772E-01 +-2.0920532365E-01 -2.0898671739E-01 -2.0876856751E-01 -2.0855087259E-01 +-2.0833363120E-01 -2.0811684193E-01 -2.0790050336E-01 -2.0768461410E-01 +-2.0746917275E-01 -2.0725417791E-01 -2.0703962819E-01 -2.0682552222E-01 +-2.0661185861E-01 -2.0639863601E-01 -2.0618585305E-01 -2.0597350836E-01 +-2.0576160060E-01 -2.0555012841E-01 -2.0533909046E-01 -2.0512848542E-01 +-2.0491831194E-01 -2.0470856870E-01 -2.0449925440E-01 -2.0429036770E-01 +-2.0408190730E-01 -2.0387387190E-01 -2.0366626020E-01 -2.0345907091E-01 +-2.0325230273E-01 -2.0304595439E-01 -2.0284002461E-01 -2.0263451212E-01 +-2.0242941564E-01 -2.0222473392E-01 -2.0202046571E-01 -2.0181660974E-01 +-2.0161316477E-01 -2.0141012956E-01 -2.0120750288E-01 -2.0100528349E-01 +-2.0080347016E-01 -2.0060206168E-01 -2.0040105682E-01 -2.0020045438E-01 +-2.0000025314E-01 -1.9980045191E-01 -1.9960104948E-01 -1.9940204467E-01 +-1.9920343628E-01 -1.9900522314E-01 -1.9880740406E-01 -1.9860997787E-01 +-1.9841294340E-01 -1.9821629949E-01 -1.9802004497E-01 -1.9782417870E-01 +-1.9762869951E-01 -1.9743360626E-01 -1.9723889782E-01 -1.9704457304E-01 +-1.9685063079E-01 -1.9665706994E-01 -1.9646388938E-01 -1.9627108797E-01 +-1.9607866460E-01 -1.9588661817E-01 -1.9569494757E-01 -1.9550365169E-01 +-1.9531272943E-01 -1.9512217971E-01 -1.9493200143E-01 -1.9474219352E-01 +-1.9455275487E-01 -1.9436368444E-01 -1.9417498113E-01 -1.9398664388E-01 +-1.9379867162E-01 -1.9361106331E-01 -1.9342381787E-01 -1.9323693426E-01 +-1.9305041144E-01 -1.9286424835E-01 -1.9267844395E-01 -1.9249299722E-01 +-1.9230790712E-01 -1.9212317263E-01 -1.9193879271E-01 -1.9175476635E-01 +-1.9157109253E-01 -1.9138777024E-01 -1.9120479848E-01 -1.9102217623E-01 +-1.9083990250E-01 -1.9065797629E-01 -1.9047639661E-01 -1.9029516247E-01 +-1.9011427288E-01 -1.8993372687E-01 -1.8975352344E-01 -1.8957366164E-01 +-1.8939414049E-01 -1.8921495901E-01 -1.8903611626E-01 -1.8885761127E-01 +-1.8867944308E-01 -1.8850161074E-01 -1.8832411330E-01 -1.8814694982E-01 +-1.8797011936E-01 -1.8779362098E-01 -1.8761745373E-01 -1.8744161670E-01 +-1.8726610896E-01 -1.8709092957E-01 -1.8691607763E-01 -1.8674155220E-01 +-1.8656735239E-01 -1.8639347727E-01 -1.8621992595E-01 -1.8604669751E-01 +-1.8587379106E-01 -1.8570120571E-01 -1.8552894054E-01 -1.8535699469E-01 +-1.8518536726E-01 -1.8501405736E-01 -1.8484306411E-01 -1.8467238665E-01 +-1.8450202409E-01 -1.8433197557E-01 -1.8416224021E-01 -1.8399281715E-01 +-1.8382370553E-01 -1.8365490450E-01 -1.8348641320E-01 -1.8331823077E-01 +-1.8315035637E-01 -1.8298278915E-01 -1.8281552828E-01 -1.8264857290E-01 +-1.8248192219E-01 -1.8231557531E-01 -1.8214953143E-01 -1.8198378972E-01 +-1.8181834937E-01 -1.8165320954E-01 -1.8148836943E-01 -1.8132382821E-01 +-1.8115958507E-01 -1.8099563921E-01 -1.8083198982E-01 -1.8066863609E-01 +-1.8050557722E-01 -1.8034281242E-01 -1.8018034090E-01 -1.8001816185E-01 +-1.7985627449E-01 -1.7969467804E-01 -1.7953337170E-01 -1.7937235471E-01 +-1.7921162628E-01 -1.7905118564E-01 -1.7889103201E-01 -1.7873116463E-01 +-1.7857158272E-01 -1.7841228553E-01 -1.7825327230E-01 -1.7809454226E-01 +-1.7793609466E-01 -1.7777792874E-01 -1.7762004376E-01 -1.7746243897E-01 +-1.7730511362E-01 -1.7714806698E-01 -1.7699129829E-01 -1.7683480682E-01 +-1.7667859184E-01 -1.7652265262E-01 -1.7636698843E-01 -1.7621159853E-01 +-1.7605648221E-01 -1.7590163874E-01 -1.7574706741E-01 -1.7559276749E-01 +-1.7543873828E-01 -1.7528497906E-01 -1.7513148912E-01 -1.7497826775E-01 +-1.7482531426E-01 -1.7467262794E-01 -1.7452020808E-01 -1.7436805400E-01 +-1.7421616499E-01 -1.7406454037E-01 -1.7391317945E-01 -1.7376208154E-01 +-1.7361124595E-01 -1.7346067200E-01 -1.7331035902E-01 -1.7316030631E-01 +-1.7301051322E-01 -1.7286097906E-01 -1.7271170316E-01 -1.7256268486E-01 +-1.7241392349E-01 -1.7226541839E-01 -1.7211716889E-01 -1.7196917433E-01 +-1.7182143406E-01 -1.7167394742E-01 + + + +3.3081837159E-08 3.8801090494E-02 7.8462207829E-02 1.1982095700E-01 +1.6367055110E-01 2.1073873627E-01 2.6166803749E-01 3.1699772589E-01 +3.7714787499E-01 4.4240583332E-01 5.1291539408E-01 5.8866889096E-01 +6.6950239254E-01 7.5509410808E-01 8.4496605544E-01 9.3848897886E-01 +1.0348904412E+00 1.1332659537E+00 1.2325929474E+00 1.3317473344E+00 +1.4295223563E+00 1.5246493736E+00 1.6158202077E+00 1.7017106209E+00 +1.7810044911E+00 1.8524182269E+00 1.9147249607E+00 1.9667780596E+00 +2.0075335063E+00 2.0360707209E+00 2.0516114226E+00 2.0535361672E+00 +2.0413982378E+00 2.0149346145E+00 1.9740738058E+00 1.9189403795E+00 +1.8498560953E+00 1.7673376031E+00 1.6720907368E+00 1.5650014958E+00 +1.4471238695E+00 1.3196647194E+00 1.1839659882E+00 1.0414845546E+00 +8.9377009786E-01 7.4244137177E-01 5.8916131788E-01 4.3561146729E-01 +2.8346609406E-01 1.3436658535E-01 -1.0103511855E-02 -1.4844232265E-01 +-2.7925193324E-01 -4.0125874733E-01 -5.1333155927E-01 -6.1449703963E-01 +-7.0395238082E-01 -7.8107490749E-01 -8.4542851718E-01 -8.9676688061E-01 +-9.3503339529E-01 -9.6035795203E-01 -9.7305063715E-01 -9.7359255539E-01 +-9.6262401625E-01 -9.4093037973E-01 -9.0942590527E-01 -8.6913598848E-01 +-8.2117820333E-01 -7.6674259515E-01 -7.0707165198E-01 -6.4344060068E-01 +-5.7713458898E-01 -5.0941742413E-01 -4.4150498414E-01 -3.7454481520E-01 +-3.0959747807E-01 -2.4762016412E-01 -1.8945280554E-01 -1.3580690320E-01 +-8.7257238099E-02 -4.4236572264E-02 -7.0333836752E-03 2.4207381469E-02 +4.9480616984E-02 6.8914561807E-02 8.2761694023E-02 9.1387257266E-02 +9.5255708837E-02 9.4915418924E-02 9.0981983083E-02 8.4120535523E-02 +7.5027467972E-02 6.4411967621E-02 5.2977788128E-02 4.1405659269E-02 +3.0336723901E-02 2.0357367265E-02 1.1991089572E-02 5.6303709337E-03 +1.7927863400E-03 4.1834570964E-04 2.3603889395E-05 -1.0666644658E-05 +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. + + +-5.2646526361E-08 1.0206983163E-01 2.0241542828E-01 2.9934822009E-01 +3.9125025752E-01 4.7660776023E-01 5.5404259115E-01 6.2234102695E-01 +6.8047924944E-01 7.2764504590E-01 7.6325528027E-01 7.8696877992E-01 +7.9869437185E-01 7.9859389725E-01 7.8708013162E-01 7.6480963711E-01 +7.3267067382E-01 6.9176639348E-01 6.4339363208E-01 5.8901770533E-01 +5.3024368965E-01 4.6878474215E-01 4.0642807201E-01 3.4499922375E-01 +2.8632536785E-01 2.3219831543E-01 1.8433798175E-01 1.4435701642E-01 +1.1372729806E-01 9.3748956857E-02 8.5522541380E-02 8.9924886751E-02 +1.0758917100E-01 1.3888956636E-01 1.8393080432E-01 2.4254287830E-01 +3.1428100912E-01 3.9843089591E-01 4.9401917299E-01 5.9982889151E-01 +7.1441974680E-01 8.3615267940E-01 9.6321839201E-01 1.0936692476E+00 +1.2254539469E+00 1.3564543295E+00 1.4845235988E+00 1.6075252442E+00 +1.7233719187E+00 1.8300635314E+00 1.9257238278E+00 2.0086347622E+00 +2.0772680090E+00 2.1303130160E+00 2.1667010726E+00 2.1856249439E+00 +2.1865537107E+00 2.1692425526E+00 2.1337373107E+00 2.0803737753E+00 +2.0097717468E+00 1.9228240290E+00 1.8206806136E+00 1.7047284170E+00 +1.5765670213E+00 1.4379809561E+00 1.2909091310E+00 1.1374120915E+00 +9.7963782033E-01 8.1978684334E-01 6.6007734054E-01 5.0271149271E-01 +3.4983410794E-01 2.0347178527E-01 6.5486669206E-02 -6.2453995273E-02 +-1.7890484798E-01 -2.8266490191E-01 -3.7279525691E-01 -4.4863171241E-01 +-5.0979205654E-01 -5.5617791353E-01 -5.8797113812E-01 -6.0562485176E-01 +-6.0984931987E-01 -6.0159296989E-01 -5.8201894415E-01 -5.5247766860E-01 +-5.1447599496E-01 -4.6964354086E-01 -4.1969690571E-01 -3.6640248090E-01 +-3.1153859942E-01 -2.5685778143E-01 -2.0404982968E-01 -1.5470651048E-01 +-1.1028852304E-01 -7.2095415546E-02 -4.1254952370E-02 -1.8534942205E-02 +-5.0809702026E-03 -4.6393792313E-04 3.6603198876E-05 -4.0769593284E-05 +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. + + +-1.1508020072E-06 -9.3498813445E-03 -3.7035805707E-02 -8.1984762786E-02 +-1.4246797486E-01 -2.1618707200E-01 -3.0038853355E-01 -3.9200056703E-01 +-4.8778544462E-01 -5.8449951727E-01 -6.7905271765E-01 -7.6865936672E-01 +-8.5097251617E-01 -9.2419487013E-01 -9.8716049512E-01 -1.0393829905E+00 +-1.0810674802E+00 -1.1130856168E+00 -1.1369146714E+00 -1.1545436212E+00 +-1.1683508508E+00 -1.1809595688E+00 -1.1950782283E+00 -1.2133340718E+00 +-1.2381083528E+00 -1.2713817936E+00 -1.3145984159E+00 -1.3685550525E+00 +-1.4333226427E+00 -1.5082038966E+00 -1.5917301533E+00 -1.6816983350E+00 +-1.7752469197E+00 -1.8689679002E+00 -1.9590498745E+00 -2.0414458087E+00 +-2.1120577082E+00 -2.1669294948E+00 -2.2024388606E+00 -2.2154787902E+00 +-2.2036198154E+00 -2.1652448716E+00 -2.0996498393E+00 -2.0071044102E+00 +-1.8888697489E+00 -1.7471714437E+00 -1.5851283506E+00 -1.4066400422E+00 +-1.2162375641E+00 -1.0189039939E+00 -8.1987279026E-01 -6.2441304937E-01 +-4.3761148754E-01 -2.6416121574E-01 -1.0816713890E-01 2.7022885313E-02 +1.3895312488E-01 2.2615480904E-01 2.8819606886E-01 3.2568440043E-01 +3.4022125433E-01 3.3431058917E-01 3.1122536185E-01 2.7483790537E-01 +2.2942183240E-01 1.7943444462E-01 1.2928955012E-01 8.3131043920E-02 +4.4617578972E-02 1.6715533390E-02 1.6962975496E-03 -6.6930380796E-04 +1.3110909322E-04 -1.6952663946E-05 2.8584407845E-07 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. + + +-3.4022469621E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +-1.0689678392E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +-1.0066422427E+00 + + + + +-4.0506512033E-10 1.5528578244E-02 3.1044555847E-02 4.6535372494E-02 +6.1988550065E-02 7.7391732202E-02 9.2732723121E-02 1.0799952495E-01 +1.2318037325E-01 1.3826377047E-01 1.5323851701E-01 1.6809373973E-01 +1.8281891771E-01 1.9740390511E-01 2.1183895106E-01 2.2611471655E-01 +2.4022228826E-01 2.5415318950E-01 2.6789938825E-01 2.8145330241E-01 +2.9480780260E-01 3.0795621249E-01 3.2089230707E-01 3.3361030902E-01 +3.4610488344E-01 3.5837113132E-01 3.7040458187E-01 3.8220118421E-01 +3.9375729844E-01 4.0506968655E-01 4.1613550336E-01 4.2695228766E-01 +4.3751795373E-01 4.4783078347E-01 4.5788941927E-01 4.6769285751E-01 +4.7724044303E-01 4.8653186430E-01 4.9556714941E-01 5.0434666277E-01 +5.1287110237E-01 5.2114149755E-01 5.2915920692E-01 5.3692591647E-01 +5.4444363750E-01 5.5171470412E-01 5.5874177021E-01 5.6552780542E-01 +5.7207609020E-01 5.7839020933E-01 5.8447404407E-01 5.9033176243E-01 +5.9596780766E-01 6.0138688462E-01 6.0659394411E-01 6.1159416497E-01 +6.1639293398E-01 6.2099582376E-01 6.2540856842E-01 6.2963703741E-01 +6.3368720765E-01 6.3756513399E-01 6.4127691860E-01 6.4482867925E-01 +6.4822651703E-01 6.5147648384E-01 6.5458454995E-01 6.5755657209E-01 +6.6039826252E-01 6.6311515937E-01 6.6571259881E-01 6.6819568927E-01 +6.7056928822E-01 6.7283798177E-01 6.7500606743E-01 6.7707754021E-01 +6.7905608245E-01 6.8094505733E-01 6.8274750630E-01 6.8446615052E-01 +6.8610339610E-01 6.8766134328E-01 6.8914179933E-01 6.9054629492E-01 +6.9187610378E-01 6.9313226540E-01 6.9431561016E-01 6.9542678686E-01 +6.9646629187E-01 6.9743449966E-01 6.9833169403E-01 6.9915809971E-01 +6.9991391372E-01 7.0059933588E-01 7.0121459816E-01 7.0175999224E-01 +7.0223589485E-01 7.0264279045E-01 7.0298129097E-01 7.0325215180E-01 +7.0345628481E-01 7.0359476729E-01 7.0366882645E-01 7.0367977546E-01 +7.0362891577E-01 7.0351751187E-01 7.0334680597E-01 7.0311802818E-01 +7.0283238449E-01 7.0249106108E-01 7.0209522439E-01 7.0164602118E-01 +7.0114457901E-01 7.0059200647E-01 6.9998939352E-01 6.9933781184E-01 +6.9863831508E-01 6.9789193918E-01 6.9709970268E-01 6.9626260697E-01 +6.9538163661E-01 6.9445775960E-01 6.9349192764E-01 6.9248507644E-01 +6.9143812593E-01 6.9035198055E-01 6.8922752953E-01 6.8806564709E-01 +6.8686719273E-01 6.8563301147E-01 6.8436393406E-01 6.8306077725E-01 +6.8172434398E-01 6.8035542368E-01 6.7895479239E-01 6.7752321308E-01 +6.7606143579E-01 6.7457019790E-01 6.7305022429E-01 6.7150222756E-01 +6.6992690826E-01 6.6832495505E-01 6.6669704489E-01 6.6504384326E-01 +6.6336600433E-01 6.6166417116E-01 6.5993897583E-01 6.5819103969E-01 +6.5642097348E-01 6.5462937750E-01 6.5281684183E-01 6.5098394643E-01 +6.4913126134E-01 6.4725934683E-01 6.4536875356E-01 6.4346002272E-01 +6.4153368619E-01 6.3959026668E-01 6.3763027789E-01 6.3565422464E-01 +6.3366260303E-01 6.3165590052E-01 6.2963459615E-01 6.2759916060E-01 +6.2555005635E-01 6.2348773783E-01 6.2141265150E-01 6.1932523600E-01 +6.1722592227E-01 6.1511513366E-01 6.1299328607E-01 6.1086078802E-01 +6.0871804082E-01 6.0656543864E-01 6.0440336863E-01 6.0223221104E-01 +6.0005233930E-01 5.9786412014E-01 5.9566791372E-01 5.9346407366E-01 +5.9125294720E-01 5.8903487528E-01 5.8681019263E-01 5.8457922787E-01 +5.8234230357E-01 5.8009973642E-01 5.7785183723E-01 5.7559891106E-01 +5.7334125733E-01 5.7107916984E-01 5.6881293693E-01 5.6654284150E-01 +5.6426916112E-01 5.6199216811E-01 5.5971212962E-01 5.5742930770E-01 +5.5514395937E-01 5.5285633671E-01 5.5056668693E-01 5.4827525244E-01 +5.4598227093E-01 5.4368797542E-01 5.4139259435E-01 5.3909635165E-01 +5.3679946679E-01 5.3450215487E-01 5.3220462666E-01 5.2990708869E-01 +5.2760974330E-01 5.2531278870E-01 5.2301641905E-01 5.2072082451E-01 +5.1842619129E-01 5.1613270172E-01 5.1384053433E-01 5.1154986387E-01 +5.0926086139E-01 5.0697369429E-01 5.0468852639E-01 5.0240551796E-01 +5.0012482581E-01 4.9784660329E-01 4.9557100040E-01 4.9329816382E-01 +4.9102823694E-01 4.8876135995E-01 4.8649766987E-01 4.8423730058E-01 +4.8198038293E-01 4.7972704470E-01 4.7747741075E-01 4.7523160297E-01 +4.7298974041E-01 4.7075193925E-01 4.6851831291E-01 4.6628897206E-01 +4.6406402468E-01 4.6184357608E-01 4.5962772898E-01 4.5741658351E-01 +4.5521023731E-01 4.5300878551E-01 4.5081232080E-01 4.4862093348E-01 +4.4643471148E-01 4.4425374041E-01 4.4207810362E-01 4.3990788218E-01 +4.3774315498E-01 4.3558399874E-01 4.3343048804E-01 4.3128269538E-01 +4.2914069119E-01 4.2700454390E-01 4.2487431992E-01 4.2275008375E-01 +4.2063189794E-01 4.1851982317E-01 4.1641391827E-01 4.1431424026E-01 +4.1222084437E-01 4.1013378408E-01 4.0805311115E-01 4.0597887566E-01 +4.0391112602E-01 4.0184990901E-01 3.9979526984E-01 3.9774725212E-01 +3.9570589795E-01 3.9367124789E-01 3.9164334105E-01 3.8962221507E-01 +3.8760790618E-01 3.8560044918E-01 3.8359987754E-01 3.8160622335E-01 +3.7961951741E-01 3.7763978920E-01 3.7566706695E-01 3.7370137765E-01 +3.7174274706E-01 3.6979119975E-01 3.6784675912E-01 3.6590944742E-01 +3.6397928579E-01 3.6205629424E-01 3.6014049174E-01 3.5823189616E-01 +3.5633052437E-01 3.5443639222E-01 3.5254951455E-01 3.5066990524E-01 +3.4879757722E-01 3.4693254249E-01 3.4507481212E-01 3.4322439631E-01 +3.4138130438E-01 3.3954554479E-01 3.3771712516E-01 3.3589605231E-01 +3.3408233223E-01 3.3227597016E-01 3.3047697055E-01 3.2868533711E-01 +3.2690107282E-01 3.2512417994E-01 3.2335466003E-01 3.2159251398E-01 +3.1983774198E-01 3.1809034360E-01 3.1635031775E-01 3.1461766274E-01 +3.1289237623E-01 3.1117445533E-01 3.0946389654E-01 3.0776069581E-01 +3.0606484852E-01 3.0437634952E-01 3.0269519314E-01 3.0102137317E-01 +2.9935488291E-01 2.9769571518E-01 2.9604386231E-01 2.9439931618E-01 +2.9276206817E-01 2.9113210928E-01 2.8950943002E-01 2.8789402052E-01 +2.8628587047E-01 2.8468496918E-01 2.8309130555E-01 2.8150486812E-01 +2.7992564504E-01 2.7835362412E-01 2.7678879279E-01 2.7523113818E-01 +2.7368064704E-01 2.7213730583E-01 2.7060110068E-01 2.6907201742E-01 +2.6755004156E-01 2.6603515836E-01 2.6452735277E-01 2.6302660946E-01 +2.6153291285E-01 2.6004624710E-01 2.5856659611E-01 2.5709394354E-01 +2.5562827281E-01 2.5416956711E-01 2.5271780941E-01 2.5127298246E-01 +2.4983506880E-01 2.4840405076E-01 2.4697991049E-01 2.4556262993E-01 +2.4415219083E-01 2.4274857479E-01 2.4135176319E-01 2.3996173729E-01 +2.3857847815E-01 2.3720196669E-01 2.3583218366E-01 2.3446910969E-01 +2.3311272524E-01 2.3176301065E-01 2.3041994611E-01 2.2908351169E-01 +2.2775368735E-01 2.2643045291E-01 2.2511378807E-01 2.2380367245E-01 +2.2250008552E-01 2.2120300669E-01 2.1991241525E-01 2.1862829038E-01 +2.1735061119E-01 2.1607935671E-01 2.1481450586E-01 2.1355603749E-01 +2.1230393038E-01 2.1105816322E-01 2.0981871466E-01 2.0858556324E-01 +2.0735868747E-01 2.0613806579E-01 2.0492367657E-01 2.0371549814E-01 +2.0251350876E-01 2.0131768666E-01 2.0012801000E-01 1.9894445693E-01 +1.9776700552E-01 1.9659563382E-01 1.9543031985E-01 1.9427104158E-01 +1.9311777694E-01 1.9197050386E-01 1.9082920023E-01 1.8969384389E-01 +1.8856441269E-01 1.8744088445E-01 1.8632323696E-01 1.8521144799E-01 +1.8410549531E-01 1.8300535668E-01 1.8191100982E-01 1.8082243247E-01 +1.7973960235E-01 1.7866249716E-01 1.7759109462E-01 1.7652537244E-01 +1.7546530831E-01 1.7441087993E-01 1.7336206502E-01 1.7231884128E-01 +1.7128118642E-01 1.7024907816E-01 1.6922249422E-01 1.6820141235E-01 +1.6718581027E-01 1.6617566575E-01 1.6517095654E-01 1.6417166044E-01 +1.6317775524E-01 1.6218921873E-01 1.6120602877E-01 1.6022816318E-01 +1.5925559983E-01 1.5828831661E-01 1.5732629143E-01 1.5636950221E-01 +1.5541792691E-01 1.5447154350E-01 1.5353032999E-01 1.5259426439E-01 +1.5166332477E-01 1.5073748921E-01 1.4981673583E-01 1.4890104275E-01 +1.4799038816E-01 1.4708475026E-01 1.4618410727E-01 1.4528843748E-01 +1.4439771918E-01 1.4351193070E-01 1.4263105043E-01 1.4175505676E-01 +1.4088392814E-01 1.4001764304E-01 1.3915618000E-01 1.3829951755E-01 +1.3744763431E-01 1.3660050890E-01 1.3575812000E-01 1.3492044632E-01 +1.3408746663E-01 1.3325915973E-01 1.3243550445E-01 1.3161647968E-01 +1.3080206436E-01 1.2999223745E-01 1.2918697798E-01 1.2838626500E-01 +1.2759007763E-01 1.2679839502E-01 1.2601119637E-01 1.2522846094E-01 +1.2445016802E-01 1.2367629695E-01 1.2290682713E-01 1.2214173800E-01 +1.2138100905E-01 1.2062461982E-01 1.1987254991E-01 1.1912477895E-01 +1.1838128663E-01 1.1764205270E-01 1.1690705696E-01 1.1617627924E-01 +1.1544969946E-01 1.1472729755E-01 1.1400905354E-01 1.1329494746E-01 +1.1258495944E-01 1.1187906964E-01 1.1117725829E-01 1.1047950564E-01 +1.0978579204E-01 1.0909609786E-01 1.0841040355E-01 1.0772868960E-01 +1.0705093656E-01 1.0637712503E-01 1.0570723569E-01 1.0504124925E-01 +1.0437914649E-01 1.0372090823E-01 1.0306651539E-01 1.0241594889E-01 +1.0176918975E-01 1.0112621903E-01 1.0048701786E-01 9.9851567417E-02 +9.9219848941E-02 9.8591843732E-02 9.7967533146E-02 9.7346898602E-02 +9.6729921576E-02 9.6116583603E-02 9.5506866280E-02 9.4900751263E-02 +9.4298220267E-02 9.3699255067E-02 9.3103837502E-02 9.2511949466E-02 +9.1923572919E-02 9.1338689877E-02 9.0757282421E-02 9.0179332691E-02 +8.9604822887E-02 8.9033735273E-02 8.8466052173E-02 8.7901755973E-02 +8.7340829119E-02 8.6783254122E-02 8.6229013551E-02 8.5678090039E-02 +8.5130466282E-02 8.4586125036E-02 8.4045049120E-02 8.3507221416E-02 +8.2972624867E-02 8.2441242479E-02 8.1913057321E-02 8.1388052524E-02 +8.0866211282E-02 8.0347516851E-02 7.9831952549E-02 7.9319501759E-02 +7.8810147926E-02 7.8303874556E-02 7.7800665221E-02 7.7300503553E-02 +7.6803373249E-02 7.6309258067E-02 7.5818141830E-02 7.5330008423E-02 +7.4844841795E-02 7.4362625956E-02 7.3883344981E-02 7.3406983007E-02 +7.2933524235E-02 7.2462952928E-02 7.1995253412E-02 7.1530410079E-02 +7.1068407379E-02 7.0609229830E-02 7.0152862009E-02 6.9699288559E-02 +6.9248494185E-02 6.8800463654E-02 6.8355181797E-02 6.7912633508E-02 +6.7472803743E-02 6.7035677522E-02 6.6601239927E-02 6.6169476103E-02 +6.5740371258E-02 6.5313910662E-02 6.4890079648E-02 6.4468863611E-02 +6.4050248011E-02 6.3634218368E-02 6.3220760264E-02 6.2809859346E-02 +6.2401501320E-02 6.1995671957E-02 6.1592357090E-02 6.1191542611E-02 +6.0793214478E-02 6.0397358708E-02 6.0003961382E-02 5.9613008642E-02 +5.9224486690E-02 5.8838381792E-02 5.8454680274E-02 5.8073368525E-02 +5.7694432994E-02 5.7317860192E-02 5.6943636689E-02 5.6571749120E-02 +5.6202184178E-02 5.5834928618E-02 5.5469969254E-02 5.5107292963E-02 +5.4746886682E-02 5.4388737407E-02 5.4032832197E-02 5.3679158167E-02 +5.3327702496E-02 5.2978452421E-02 5.2631395240E-02 5.2286518310E-02 +5.1943809047E-02 5.1603254927E-02 5.1264843486E-02 5.0928562319E-02 +5.0594399080E-02 5.0262341481E-02 4.9932377293E-02 4.9604494348E-02 +4.9278680533E-02 4.8954923797E-02 4.8633212144E-02 4.8313533638E-02 +4.7995876402E-02 4.7680228613E-02 4.7366578511E-02 4.7054914388E-02 +4.6745224598E-02 4.6437497551E-02 4.6131721711E-02 4.5827885604E-02 +4.5525977809E-02 4.5225986964E-02 4.4927901761E-02 4.4631710951E-02 +4.4337403340E-02 4.4044967789E-02 4.3754393217E-02 4.3465668598E-02 +4.3178782960E-02 4.2893725389E-02 4.2610485023E-02 4.2329051059E-02 +4.2049412744E-02 4.1771559385E-02 4.1495480341E-02 4.1221165023E-02 +4.0948602902E-02 4.0677783497E-02 4.0408696384E-02 4.0141331194E-02 +3.9875677609E-02 3.9611725364E-02 3.9349464250E-02 3.9088884109E-02 +3.8829974836E-02 3.8572726380E-02 3.8317128739E-02 3.8063171969E-02 +3.7810846172E-02 3.7560141506E-02 3.7311048180E-02 3.7063556454E-02 +3.6817656639E-02 3.6573339099E-02 3.6330594247E-02 3.6089412548E-02 +3.5849784517E-02 3.5611700721E-02 3.5375151776E-02 3.5140128348E-02 +3.4906621154E-02 3.4674620960E-02 3.4444118581E-02 3.4215104884E-02 +3.3987570781E-02 3.3761507238E-02 3.3536905265E-02 3.3313755924E-02 +3.3092050324E-02 3.2871779623E-02 3.2652935027E-02 3.2435507790E-02 +3.2219489212E-02 3.2004870643E-02 3.1791643479E-02 3.1579799164E-02 +3.1369329188E-02 3.1160225087E-02 3.0952478447E-02 3.0746080897E-02 +3.0541024114E-02 3.0337299820E-02 3.0134899783E-02 2.9933815817E-02 +2.9734039782E-02 2.9535563582E-02 2.9338379168E-02 2.9142478533E-02 +2.8947853717E-02 2.8754496804E-02 2.8562399922E-02 2.8371555244E-02 +2.8181954985E-02 2.7993591406E-02 2.7806456810E-02 2.7620543544E-02 +2.7435843999E-02 2.7252350607E-02 2.7070055844E-02 2.6888952230E-02 +2.6709032325E-02 2.6530288732E-02 2.6352714096E-02 2.6176301106E-02 +2.6001042489E-02 2.5826931017E-02 2.5653959501E-02 2.5482120793E-02 +2.5311407787E-02 2.5141813419E-02 2.4973330663E-02 2.4805952534E-02 +2.4639672088E-02 2.4474482421E-02 2.4310376669E-02 2.4147348006E-02 +2.3985389646E-02 2.3824494845E-02 2.3664656894E-02 2.3505869126E-02 +2.3348124911E-02 2.3191417658E-02 2.3035740814E-02 2.2881087866E-02 +2.2727452336E-02 2.2574827786E-02 2.2423207815E-02 2.2272586060E-02 +2.2122956193E-02 2.1974311927E-02 2.1826647008E-02 2.1679955221E-02 +2.1534230387E-02 2.1389466363E-02 2.1245657042E-02 2.1102796355E-02 +2.0960878266E-02 2.0819896776E-02 2.0679845923E-02 2.0540719776E-02 +2.0402512444E-02 2.0265218069E-02 2.0128830826E-02 1.9993344927E-02 +1.9858754617E-02 1.9725054177E-02 1.9592237920E-02 1.9460300195E-02 +1.9329235382E-02 1.9199037897E-02 1.9069702188E-02 1.8941222738E-02 +1.8813594060E-02 1.8686810703E-02 1.8560867247E-02 1.8435758305E-02 +1.8311478523E-02 1.8188022577E-02 1.8065385177E-02 1.7943561065E-02 +1.7822545014E-02 1.7702331828E-02 1.7582916345E-02 1.7464293430E-02 +1.7346457982E-02 1.7229404931E-02 1.7113129236E-02 1.6997625888E-02 +1.6882889908E-02 1.6768916347E-02 1.6655700286E-02 1.6543236836E-02 +1.6431521138E-02 1.6320548364E-02 1.6210313711E-02 1.6100812411E-02 +1.5992039721E-02 1.5883990929E-02 1.5776661350E-02 1.5670046330E-02 +1.5564141241E-02 1.5458941486E-02 1.5354442494E-02 1.5250639724E-02 +1.5147528661E-02 1.5045104818E-02 1.4943363737E-02 1.4842300986E-02 +1.4741912161E-02 1.4642192885E-02 1.4543138808E-02 1.4444745607E-02 +1.4347008985E-02 1.4249924673E-02 1.4153488426E-02 1.4057696028E-02 +1.3962543287E-02 1.3868026039E-02 1.3774140142E-02 1.3680881485E-02 +1.3588245978E-02 1.3496229560E-02 1.3404828191E-02 1.3314037860E-02 +1.3223854579E-02 1.3134274386E-02 1.3045293342E-02 1.2956907535E-02 +1.2869113074E-02 1.2781906095E-02 1.2695282758E-02 1.2609239246E-02 +1.2523771766E-02 1.2438876549E-02 1.2354549849E-02 1.2270787944E-02 +1.2187587137E-02 1.2104943750E-02 1.2022854132E-02 1.1941314653E-02 +1.1860321706E-02 1.1779871707E-02 1.1699961095E-02 1.1620586331E-02 +1.1541743896E-02 1.1463430298E-02 1.1385642063E-02 1.1308375739E-02 +1.1231627899E-02 1.1155395135E-02 1.1079674059E-02 1.1004461309E-02 +1.0929753541E-02 1.0855547433E-02 1.0781839682E-02 1.0708627010E-02 +1.0635906157E-02 1.0563673884E-02 1.0491926972E-02 1.0420662224E-02 +1.0349876462E-02 1.0279566528E-02 1.0209729286E-02 1.0140361618E-02 +1.0071460425E-02 1.0003022631E-02 9.9350451770E-03 9.8675250238E-03 +9.8004591520E-03 9.7338445614E-03 9.6676782708E-03 9.6019573181E-03 +9.5366787599E-03 9.4718396718E-03 9.4074371480E-03 9.3434683014E-03 +9.2799302630E-03 9.2168201825E-03 9.1541352276E-03 9.0918725843E-03 +9.0300294566E-03 8.9686030662E-03 8.9075906529E-03 8.8469894739E-03 +8.7867968042E-03 8.7270099362E-03 8.6676261798E-03 8.6086428619E-03 +8.5500573269E-03 8.4918669359E-03 8.4340690674E-03 8.3766611164E-03 +8.3196404949E-03 8.2630046313E-03 8.2067509708E-03 8.1508769749E-03 +8.0953801216E-03 8.0402579050E-03 7.9855078355E-03 7.9311274394E-03 +7.8771142592E-03 7.8234658531E-03 7.7701797950E-03 7.7172536747E-03 +7.6646850974E-03 7.6124716838E-03 7.5606110701E-03 7.5091009077E-03 +7.4579388632E-03 7.4071226183E-03 7.3566498698E-03 7.3065183293E-03 +7.2567257235E-03 7.2072697934E-03 7.1581482950E-03 7.1093589988E-03 +7.0608996897E-03 7.0127681669E-03 6.9649622442E-03 6.9174797493E-03 +6.8703185241E-03 6.8234764246E-03 6.7769513207E-03 6.7307410961E-03 +6.6848436485E-03 6.6392568889E-03 6.5939787423E-03 6.5490071469E-03 +6.5043400546E-03 6.4599754304E-03 6.4159112528E-03 6.3721455134E-03 +6.3286762167E-03 6.2855013806E-03 6.2426190357E-03 6.2000272254E-03 +6.1577240060E-03 6.1157074467E-03 6.0739756288E-03 6.0325266467E-03 +5.9913586069E-03 5.9504696285E-03 5.9098578426E-03 5.8695213929E-03 +5.8294584351E-03 5.7896671370E-03 5.7501456782E-03 5.7108922506E-03 +5.6719050577E-03 5.6331823149E-03 5.5947222491E-03 5.5565230991E-03 +5.5185831150E-03 5.4809005587E-03 5.4434737032E-03 5.4063008331E-03 +5.3693802440E-03 5.3327102430E-03 5.2962891480E-03 5.2601152882E-03 +5.2241870038E-03 5.1885026458E-03 5.1530605759E-03 5.1178591670E-03 +5.0828968025E-03 5.0481718762E-03 5.0136827928E-03 4.9794279675E-03 +4.9454058258E-03 4.9116148035E-03 4.8780533471E-03 4.8447199129E-03 +4.8116129676E-03 4.7787309881E-03 4.7460724611E-03 4.7136358834E-03 +4.6814197619E-03 4.6494226132E-03 4.6176429636E-03 4.5860793493E-03 +4.5547303161E-03 4.5235944194E-03 4.4926702244E-03 4.4619563053E-03 +4.4314512461E-03 4.4011536401E-03 4.3710620899E-03 4.3411752072E-03 +4.3114916132E-03 4.2820099379E-03 4.2527288206E-03 4.2236469095E-03 +4.1947628619E-03 4.1660753437E-03 4.1375830300E-03 4.1092846045E-03 +4.0811787595E-03 4.0532641964E-03 4.0255396246E-03 3.9980037627E-03 +3.9706553374E-03 3.9434930839E-03 3.9165157460E-03 3.8897220755E-03 +3.8631108329E-03 3.8366807866E-03 3.8104307134E-03 3.7843593981E-03 +3.7584656336E-03 3.7327482208E-03 3.7072059688E-03 3.6818376943E-03 +3.6566422220E-03 3.6316183845E-03 3.6067650221E-03 3.5820809828E-03 +3.5575651223E-03 3.5332163039E-03 3.5090333986E-03 3.4850152847E-03 +3.4611608480E-03 3.4374689820E-03 3.4139385872E-03 3.3905685718E-03 +3.3673578509E-03 3.3443053471E-03 3.3214099902E-03 3.2986707169E-03 +3.2760864712E-03 3.2536562042E-03 3.2313788737E-03 3.2092534448E-03 +3.1872788893E-03 3.1654541859E-03 3.1437783202E-03 3.1222502846E-03 +3.1008690780E-03 3.0796337062E-03 3.0585431816E-03 3.0375965232E-03 +3.0167927565E-03 2.9961309137E-03 2.9756100332E-03 2.9552291600E-03 +2.9349873455E-03 2.9148836474E-03 2.8949171297E-03 2.8750868627E-03 +2.8553919229E-03 2.8358313929E-03 2.8164043616E-03 2.7971099240E-03 +2.7779471810E-03 2.7589152396E-03 2.7400132128E-03 2.7212402197E-03 +2.7025953849E-03 2.6840778392E-03 2.6656867193E-03 2.6474211673E-03 +2.6292803314E-03 2.6112633654E-03 2.5933694288E-03 2.5755976866E-03 +2.5579473096E-03 2.5404174740E-03 2.5230073618E-03 2.5057161600E-03 +2.4885430616E-03 2.4714872647E-03 2.4545479728E-03 2.4377243949E-03 +2.4210157452E-03 2.4044212432E-03 2.3879401136E-03 2.3715715864E-03 +2.3553148967E-03 2.3391692849E-03 2.3231339962E-03 2.3072082811E-03 +2.2913913952E-03 2.2756825989E-03 2.2600811577E-03 2.2445863420E-03 +2.2291974272E-03 2.2139136934E-03 2.1987344257E-03 2.1836589140E-03 +2.1686864528E-03 2.1538163416E-03 2.1390478845E-03 2.1243803902E-03 +2.1098131723E-03 2.0953455487E-03 2.0809768422E-03 2.0667063799E-03 +2.0525334936E-03 2.0384575195E-03 2.0244777985E-03 2.0105936757E-03 +1.9968045006E-03 1.9831096273E-03 1.9695084140E-03 1.9560002235E-03 +1.9425844226E-03 1.9292603827E-03 1.9160274791E-03 1.9028850916E-03 +1.8898326040E-03 1.8768694044E-03 1.8639948848E-03 1.8512084416E-03 +1.8385094750E-03 1.8258973895E-03 1.8133715934E-03 1.8009314992E-03 +1.7885765232E-03 1.7763060856E-03 1.7641196108E-03 1.7520165268E-03 +1.7399962656E-03 1.7280582630E-03 1.7162019586E-03 1.7044267958E-03 +1.6927322218E-03 1.6811176875E-03 1.6695826474E-03 1.6581265600E-03 +1.6467488872E-03 1.6354490945E-03 1.6242266513E-03 1.6130810302E-03 +1.6020117077E-03 1.5910181636E-03 1.5800998815E-03 1.5692563481E-03 +1.5584870541E-03 1.5477914930E-03 1.5371691624E-03 1.5266195627E-03 +1.5161421981E-03 1.5057365760E-03 1.4954022071E-03 1.4851386055E-03 +1.4749452884E-03 1.4648217767E-03 1.4547675940E-03 1.4447822675E-03 +1.4348653275E-03 1.4250163074E-03 1.4152347439E-03 1.4055201767E-03 +1.3958721488E-03 1.3862902061E-03 1.3767738977E-03 1.3673227757E-03 +1.3579363952E-03 1.3486143144E-03 1.3393560946E-03 1.3301612998E-03 +1.3210294971E-03 1.3119602565E-03 1.3029531511E-03 1.2940077566E-03 +1.2851236518E-03 1.2763004182E-03 1.2675376403E-03 1.2588349052E-03 +1.2501918032E-03 1.2416079268E-03 1.2330828718E-03 1.2246162364E-03 +1.2162076217E-03 1.2078566315E-03 1.1995628722E-03 1.1913259529E-03 +1.1831454854E-03 1.1750210841E-03 1.1669523660E-03 1.1589389508E-03 +1.1509804606E-03 1.1430765203E-03 + + + +0.0000000000E+00 2.4113674229E-04 9.6376444773E-04 2.1655408931E-03 +3.8425803392E-03 5.9894802133E-03 8.5993579374E-03 1.1663897389E-02 +1.5173404353E-02 1.9116870224E-02 2.3482043094E-02 2.8255505335E-02 +3.3422756672E-02 3.8968301752E-02 4.4875741187E-02 5.1127865039E-02 +5.7706747775E-02 6.4593843734E-02 7.1770082223E-02 7.9215961437E-02 +8.6911640472E-02 9.4837028809E-02 1.0297187274E-01 1.1129583828E-01 +1.1978859034E-01 1.2842986776E-01 1.3719955427E-01 1.4607774521E-01 +1.5504481007E-01 1.6408145096E-01 1.7316875716E-01 1.8228825594E-01 +1.9142195983E-01 2.0055241063E-01 2.0966272028E-01 2.1873660897E-01 +2.2775844047E-01 2.3671325498E-01 2.4558679957E-01 2.5436555624E-01 +2.6303676765E-01 2.7158846047E-01 2.8000946627E-01 2.8828943978E-01 +2.9641887441E-01 3.0438911474E-01 3.1219236577E-01 3.1982169871E-01 +3.2727105298E-01 3.3453523425E-01 3.4160990819E-01 3.4849158973E-01 +3.5517762776E-01 3.6166618499E-01 3.6795621304E-01 3.7404742262E-01 +3.7994024907E-01 3.8563581313E-01 3.9113587745E-01 3.9644279888E-01 +4.0155947714E-01 4.0648930008E-01 4.1123608633E-01 4.1580402558E-01 +4.2019761738E-01 4.2442160900E-01 4.2848093304E-01 4.3238064550E-01 +4.3612586514E-01 4.3972171459E-01 4.4317326421E-01 4.4648547915E-01 +4.4966317030E-01 4.5271094972E-01 4.5563319107E-01 4.5843399546E-01 +4.6111716312E-01 4.6368617110E-01 4.6614415736E-01 4.6849391121E-01 +4.7073787014E-01 4.7287812304E-01 4.7491641958E-01 4.7685418542E-01 +4.7869254299E-01 4.8043233733E-01 4.8207416651E-01 4.8361841588E-01 +4.8506529572E-01 4.8641488132E-01 4.8766715488E-01 4.8882204840E-01 +4.8987948662E-01 4.9083942943E-01 4.9170191267E-01 4.9246708671E-01 +4.9313525202E-01 4.9370689098E-01 4.9418269545E-01 4.9456358899E-01 +4.9485074465E-01 4.9504559656E-01 4.9514981734E-01 4.9516522635E-01 +4.9509365106E-01 4.9493688953E-01 4.9469672946E-01 4.9437496155E-01 +4.9397336069E-01 4.9349369090E-01 4.9293770411E-01 4.9230713904E-01 +4.9160372068E-01 4.9082915952E-01 4.8998515104E-01 4.8907337507E-01 +4.8809549530E-01 4.8705315878E-01 4.8594799547E-01 4.8478161786E-01 +4.8355562053E-01 4.8227157986E-01 4.8093105371E-01 4.7953558109E-01 +4.7808668199E-01 4.7658585705E-01 4.7503458746E-01 4.7343433470E-01 +4.7178654046E-01 4.7009262642E-01 4.6835399425E-01 4.6657202541E-01 +4.6474808118E-01 4.6288350253E-01 4.6097961011E-01 4.5903770426E-01 +4.5705906496E-01 4.5504495189E-01 4.5299660441E-01 4.5091524162E-01 +4.4880206242E-01 4.4665824554E-01 4.4448494966E-01 4.4228331346E-01 +4.4005445571E-01 4.3779947540E-01 4.3551945182E-01 4.3321544473E-01 +4.3088849442E-01 4.2853962189E-01 4.2616982898E-01 4.2378009851E-01 +4.2137139445E-01 4.1894466206E-01 4.1650082808E-01 4.1404080084E-01 +4.1156547051E-01 4.0907570923E-01 4.0657237128E-01 4.0405629331E-01 +4.0152829447E-01 3.9898917666E-01 3.9643972467E-01 3.9388070638E-01 +3.9131287300E-01 3.8873695923E-01 3.8615368345E-01 3.8356374795E-01 +3.8096783912E-01 3.7836662766E-01 3.7576076876E-01 3.7315090234E-01 +3.7053765322E-01 3.6792163135E-01 3.6530343201E-01 3.6268363601E-01 +3.6006280990E-01 3.5744150616E-01 3.5482026343E-01 3.5219960672E-01 +3.4958004757E-01 3.4696208430E-01 3.4434620218E-01 3.4173287365E-01 +3.3912255853E-01 3.3651570420E-01 3.3391274579E-01 3.3131410642E-01 +3.2872019735E-01 3.2613141823E-01 3.2354815722E-01 3.2097079125E-01 +3.1839968619E-01 3.1583519702E-01 3.1327766805E-01 3.1072743308E-01 +3.0818481562E-01 3.0565012904E-01 3.0312367676E-01 3.0060575244E-01 +2.9809664017E-01 2.9559661461E-01 2.9310594122E-01 2.9062487636E-01 +2.8815366754E-01 2.8569255356E-01 2.8324176464E-01 2.8080152264E-01 +2.7837204122E-01 2.7595352597E-01 2.7354617460E-01 2.7115017708E-01 +2.6876571581E-01 2.6639296579E-01 2.6403209472E-01 2.6168326322E-01 +2.5934662494E-01 2.5702232670E-01 2.5471050867E-01 2.5241130448E-01 +2.5012484139E-01 2.4785124041E-01 2.4559061644E-01 2.4334307843E-01 +2.4110872947E-01 2.3888766698E-01 2.3667998279E-01 2.3448576328E-01 +2.3230508952E-01 2.3013803742E-01 2.2798467778E-01 2.2584507647E-01 +2.2371929453E-01 2.2160738831E-01 2.1950940953E-01 2.1742540547E-01 +2.1535541900E-01 2.1329948876E-01 2.1125764924E-01 2.0922993087E-01 +2.0721636015E-01 2.0521695975E-01 2.0323174858E-01 2.0126074195E-01 +1.9930395161E-01 1.9736138587E-01 1.9543304970E-01 1.9351894480E-01 +1.9161906973E-01 1.8973341996E-01 1.8786198796E-01 1.8600476333E-01 +1.8416173284E-01 1.8233288051E-01 1.8051818773E-01 1.7871763331E-01 +1.7693119356E-01 1.7515884238E-01 1.7340055133E-01 1.7165628968E-01 +1.6992602453E-01 1.6820972084E-01 1.6650734152E-01 1.6481884748E-01 +1.6314419772E-01 1.6148334937E-01 1.5983625779E-01 1.5820287657E-01 +1.5658315767E-01 1.5497705142E-01 1.5338450659E-01 1.5180547048E-01 +1.5023988893E-01 1.4868770641E-01 1.4714886605E-01 1.4562330970E-01 +1.4411097800E-01 1.4261181039E-01 1.4112574519E-01 1.3965271966E-01 +1.3819266999E-01 1.3674553141E-01 1.3531123820E-01 1.3388972371E-01 +1.3248092048E-01 1.3108476020E-01 1.2970117379E-01 1.2833009143E-01 +1.2697144260E-01 1.2562515613E-01 1.2429116021E-01 1.2296938244E-01 +1.2165974988E-01 1.2036218904E-01 1.1907662596E-01 1.1780298622E-01 +1.1654119498E-01 1.1529117699E-01 1.1405285663E-01 1.1282615796E-01 +1.1161100471E-01 1.1040732035E-01 1.0921502806E-01 1.0803405083E-01 +1.0686431141E-01 1.0570573238E-01 1.0455823617E-01 1.0342174505E-01 +1.0229618120E-01 1.0118146669E-01 1.0007752354E-01 9.8984273705E-02 +9.7901639104E-02 9.6829541650E-02 9.5767903264E-02 9.4716645886E-02 +9.3675691501E-02 9.2644962150E-02 9.1624379948E-02 9.0613867102E-02 +8.9613345922E-02 8.8622738837E-02 8.7641968414E-02 8.6670957364E-02 +8.5709628561E-02 8.4757905053E-02 8.3815710072E-02 8.2882967051E-02 +8.1959599631E-02 8.1045531675E-02 8.0140687277E-02 7.9244990773E-02 +7.8358366751E-02 7.7480740059E-02 7.6612035816E-02 7.5752179423E-02 +7.4901096565E-02 7.4058713225E-02 7.3224955690E-02 7.2399750556E-02 +7.1583024741E-02 7.0774705485E-02 6.9974720363E-02 6.9182997284E-02 +6.8399464505E-02 6.7624050632E-02 6.6856684624E-02 6.6097295804E-02 +6.5345813858E-02 6.4602168844E-02 6.3866291192E-02 6.3138111713E-02 +6.2417561600E-02 6.1704572434E-02 6.0999076185E-02 6.0301005216E-02 +5.9610292287E-02 5.8926870560E-02 5.8250673596E-02 5.7581635363E-02 +5.6919690236E-02 5.6264773000E-02 5.5616818851E-02 5.4975763399E-02 +5.4341542669E-02 5.3714093104E-02 5.3093351564E-02 5.2479255330E-02 +5.1871742102E-02 5.1270750003E-02 5.0676217580E-02 5.0088083800E-02 +4.9506288058E-02 4.8930770170E-02 4.8361470380E-02 4.7798329354E-02 +4.7241288187E-02 4.6690288396E-02 4.6145271926E-02 4.5606181147E-02 +4.5072958853E-02 4.4545548263E-02 4.4023893020E-02 4.3507937193E-02 +4.2997625271E-02 4.2492902168E-02 4.1993713219E-02 4.1500004181E-02 +4.1011721230E-02 4.0528810961E-02 4.0051220388E-02 3.9578896943E-02 +3.9111788473E-02 3.8649843239E-02 3.8193009917E-02 3.7741237595E-02 +3.7294475771E-02 3.6852674354E-02 3.6415783659E-02 3.5983754410E-02 +3.5556537735E-02 3.5134085163E-02 3.4716348630E-02 3.4303280466E-02 +3.3894833405E-02 3.3490960574E-02 3.3091615495E-02 3.2696752086E-02 +3.2306324653E-02 3.1920287893E-02 3.1538596890E-02 3.1161207114E-02 +3.0788074419E-02 3.0419155038E-02 3.0054405588E-02 2.9693783059E-02 +2.9337244821E-02 2.8984748614E-02 2.8636252551E-02 2.8291715115E-02 +2.7951095155E-02 2.7614351886E-02 2.7281444885E-02 2.6952334092E-02 +2.6626979803E-02 2.6305342674E-02 2.5987383711E-02 2.5673064275E-02 +2.5362346078E-02 2.5055191177E-02 2.4751561976E-02 2.4451421223E-02 +2.4154732006E-02 2.3861457752E-02 2.3571562225E-02 2.3285009525E-02 +2.3001764081E-02 2.2721790655E-02 2.2445054334E-02 2.2171520532E-02 +2.1901154988E-02 2.1633923757E-02 2.1369793219E-02 2.1108730065E-02 +2.0850701304E-02 2.0595674254E-02 2.0343616546E-02 2.0094496117E-02 +1.9848281207E-02 1.9604940364E-02 1.9364442431E-02 1.9126756556E-02 +1.8891852177E-02 1.8659699032E-02 1.8430267146E-02 1.8203526836E-02 +1.7979448708E-02 1.7758003652E-02 1.7539162839E-02 1.7322897724E-02 +1.7109180041E-02 1.6897981797E-02 1.6689275278E-02 1.6483033040E-02 +1.6279227909E-02 1.6077832979E-02 1.5878821612E-02 1.5682167430E-02 +1.5487844320E-02 1.5295826428E-02 1.5106088156E-02 1.4918604162E-02 +1.4733349359E-02 1.4550298908E-02 1.4369428221E-02 1.4190712959E-02 +1.4014129024E-02 1.3839652563E-02 1.3667259966E-02 1.3496927858E-02 +1.3328633105E-02 1.3162352804E-02 1.2998064288E-02 1.2835745120E-02 +1.2675373093E-02 1.2516926224E-02 1.2360382760E-02 1.2205721166E-02 +1.2052920133E-02 1.1901958568E-02 1.1752815597E-02 1.1605470562E-02 +1.1459903018E-02 1.1316092730E-02 1.1174019678E-02 1.1033664044E-02 +1.0895006221E-02 1.0758026805E-02 1.0622706594E-02 1.0489026586E-02 +1.0356967982E-02 1.0226512175E-02 1.0097640758E-02 9.9703355155E-03 +9.8445784238E-03 9.7203516504E-03 9.5976375507E-03 9.4764186673E-03 +9.3566777279E-03 9.2383976434E-03 9.1215615066E-03 9.0061525902E-03 +8.8921543454E-03 8.7795504001E-03 8.6683245574E-03 8.5584607939E-03 +8.4499432580E-03 8.3427562685E-03 8.2368843124E-03 8.1323120444E-03 +8.0290242845E-03 7.9270060165E-03 7.8262423870E-03 7.7267187031E-03 +7.6284204312E-03 7.5313331959E-03 7.4354427778E-03 7.3407351126E-03 +7.2471962893E-03 7.1548125486E-03 7.0635702817E-03 6.9734560286E-03 +6.8844564772E-03 6.7965584614E-03 6.7097489596E-03 6.6240150936E-03 +6.5393441271E-03 6.4557234640E-03 6.3731406477E-03 6.2915833592E-03 +6.2110394160E-03 6.1314967704E-03 6.0529435088E-03 5.9753678495E-03 +5.8987581423E-03 5.8231028666E-03 5.7483906304E-03 5.6746101689E-03 +5.6017503432E-03 5.5298001390E-03 5.4587486655E-03 5.3885851541E-03 +5.3192989571E-03 5.2508795468E-03 5.1833165138E-03 5.1165995660E-03 +5.0507185274E-03 4.9856633371E-03 4.9214240480E-03 4.8579908255E-03 +4.7953539468E-03 4.7335037989E-03 4.6724308785E-03 4.6121257900E-03 +4.5525792449E-03 4.4937820607E-03 4.4357251597E-03 4.3783995676E-03 +4.3217964130E-03 4.2659069259E-03 4.2107224366E-03 4.1562343752E-03 +4.1024342702E-03 4.0493137471E-03 3.9968645282E-03 3.9450784309E-03 +3.8939473670E-03 3.8434633414E-03 3.7936184517E-03 3.7444048870E-03 +3.6958149264E-03 3.6478409388E-03 3.6004753815E-03 3.5537107993E-03 +3.5075398236E-03 3.4619551717E-03 3.4169496458E-03 3.3725161317E-03 +3.3286475984E-03 3.2853370969E-03 3.2425777594E-03 3.2003627985E-03 +3.1586855063E-03 3.1175392536E-03 3.0769174889E-03 3.0368137376E-03 +2.9972216013E-03 2.9581347568E-03 2.9195469551E-03 2.8814520214E-03 +2.8438438533E-03 2.8067164208E-03 2.7700637648E-03 2.7338799969E-03 +2.6981592982E-03 2.6628959190E-03 2.6280841776E-03 2.5937184598E-03 +2.5597932181E-03 2.5263029710E-03 2.4932423021E-03 2.4606058595E-03 +2.4283883551E-03 2.3965845639E-03 2.3651893233E-03 2.3341975325E-03 +2.3036041514E-03 2.2734042005E-03 2.2435927598E-03 2.2141649681E-03 +2.1851160227E-03 2.1564411787E-03 2.1281357479E-03 2.1001950988E-03 +2.0726146554E-03 2.0453898968E-03 2.0185163566E-03 1.9919896224E-03 +1.9658053348E-03 1.9399591874E-03 1.9144469257E-03 1.8892643466E-03 +1.8644072978E-03 1.8398716777E-03 1.8156534339E-03 1.7917485635E-03 +1.7681531120E-03 1.7448631734E-03 1.7218748886E-03 1.6991844458E-03 +1.6767880795E-03 1.6546820702E-03 1.6328627435E-03 1.6113264700E-03 +1.5900696646E-03 1.5690887862E-03 1.5483803367E-03 1.5279408608E-03 +1.5077669457E-03 1.4878552204E-03 1.4682023548E-03 1.4488050602E-03 +1.4296600881E-03 1.4107642298E-03 1.3921143162E-03 1.3737072169E-03 +1.3555398404E-03 1.3376091328E-03 1.3199120783E-03 1.3024456979E-03 +1.2852070498E-03 1.2681932281E-03 1.2514013631E-03 1.2348286203E-03 +1.2184722004E-03 1.2023293387E-03 1.1863973048E-03 1.1706734021E-03 +1.1551549675E-03 1.1398393708E-03 1.1247240146E-03 1.1098063337E-03 +1.0950837946E-03 1.0805538956E-03 1.0662141658E-03 1.0520621655E-03 +1.0380954850E-03 1.0243117448E-03 1.0107085950E-03 9.9728371515E-04 +9.8403481364E-04 9.7095962749E-04 9.5805592197E-04 9.4532149045E-04 +9.3275415382E-04 9.2035176023E-04 9.0811218480E-04 8.9603332928E-04 +8.8411312171E-04 8.7234951613E-04 8.6074049215E-04 8.4928405496E-04 +8.3797823472E-04 8.2682108635E-04 8.1581068921E-04 8.0494514687E-04 +7.9422258672E-04 7.8364115979E-04 7.7319904029E-04 7.6289442561E-04 +7.5272553583E-04 7.4269061349E-04 7.3278792331E-04 7.2301575193E-04 +7.1337240766E-04 7.0385622016E-04 6.9446554023E-04 6.8519873954E-04 +6.7605421045E-04 6.6703036566E-04 6.5812563794E-04 6.4933847999E-04 +6.4066736410E-04 6.3211078195E-04 6.2366724438E-04 6.1533528107E-04 +6.0711344054E-04 5.9900028970E-04 5.9099441367E-04 5.8309441560E-04 +5.7529891640E-04 5.6760655456E-04 5.6001598590E-04 5.5252588336E-04 +5.4513493681E-04 5.3784185290E-04 5.3064535477E-04 5.2354418182E-04 +5.1653708959E-04 5.0962284949E-04 5.0280024868E-04 4.9606808978E-04 +4.8942519071E-04 4.8287038461E-04 4.7640251953E-04 4.7002045829E-04 +4.6372307825E-04 4.5750927119E-04 4.5137794309E-04 4.4532801396E-04 +4.3935841768E-04 4.3346810175E-04 4.2765602732E-04 4.2192116884E-04 +4.1626251394E-04 4.1067906327E-04 4.0516983032E-04 3.9973384129E-04 +3.9437013491E-04 3.8907776229E-04 3.8385578669E-04 3.7870328360E-04 +3.7361934036E-04 3.6860305607E-04 3.6365354145E-04 3.5876991872E-04 +3.5395132140E-04 3.4919689423E-04 3.4450579297E-04 3.3987718426E-04 +3.3531024562E-04 3.3080416517E-04 3.2635814150E-04 3.2197138360E-04 +3.1764311069E-04 3.1337255210E-04 3.0915894714E-04 3.0500154499E-04 +3.0089960449E-04 2.9685239421E-04 2.9285919217E-04 2.8891928574E-04 +2.8503197155E-04 2.8119655536E-04 2.7741235194E-04 2.7367868497E-04 +2.6999488691E-04 2.6636029886E-04 2.6277427057E-04 2.5923616023E-04 +2.5574533436E-04 2.5230116773E-04 2.4890304327E-04 2.4555035190E-04 +2.4224249253E-04 2.3897887185E-04 2.3575890430E-04 2.3258201195E-04 +2.2944762447E-04 2.2635517890E-04 2.2330411968E-04 2.2029389847E-04 +2.1732397409E-04 2.1439381243E-04 2.1150288636E-04 2.0865067565E-04 +2.0583666680E-04 2.0306035313E-04 2.0032123457E-04 1.9761881754E-04 +1.9495261497E-04 1.9232214613E-04 1.8972693660E-04 1.8716651817E-04 +1.8464042875E-04 1.8214821231E-04 1.7968941879E-04 1.7726360408E-04 +1.7487032987E-04 1.7250916357E-04 1.7017967831E-04 1.6788145280E-04 +1.6561407126E-04 1.6337712340E-04 1.6117020431E-04 1.5899291435E-04 +1.5684485921E-04 1.5472564974E-04 1.5263490190E-04 1.5057223670E-04 +1.4853728014E-04 1.4652966313E-04 1.4454902143E-04 1.4259499561E-04 +1.4066723097E-04 1.3876537742E-04 1.3688908959E-04 1.3503802661E-04 +1.3321185211E-04 1.3141023413E-04 1.2963284512E-04 1.2787936181E-04 +1.2614946523E-04 1.2444284059E-04 1.2275917726E-04 1.2109816869E-04 +1.1945951243E-04 1.1784291001E-04 1.1624806687E-04 1.1467469238E-04 +1.1312249972E-04 1.1159120587E-04 1.1008053155E-04 1.0859020116E-04 +1.0711994277E-04 1.0566948799E-04 1.0423857205E-04 1.0282693368E-04 +1.0143431504E-04 1.0006046170E-04 9.8705122610E-05 9.7368050044E-05 +9.6048999553E-05 9.4747729926E-05 9.3464003148E-05 9.2197584319E-05 +9.0948241735E-05 8.9715746721E-05 8.8499873639E-05 8.7300399840E-05 +8.6117105629E-05 8.4949774226E-05 8.3798191727E-05 8.2662147067E-05 +8.1541431982E-05 8.0435840946E-05 7.9345171210E-05 7.8269222709E-05 +7.7207798027E-05 7.6160702371E-05 7.5127743537E-05 7.4108731874E-05 +7.3103480252E-05 7.2111804031E-05 7.1133521023E-05 7.0168451453E-05 +6.9216417942E-05 6.8277245502E-05 6.7350761451E-05 6.6436795409E-05 +6.5535179260E-05 6.4645747128E-05 6.3768335347E-05 6.2902782428E-05 +6.2048929035E-05 6.1206617953E-05 6.0375694034E-05 5.9556004253E-05 +5.8747397605E-05 5.7949725092E-05 5.7162839704E-05 5.6386596393E-05 +5.5620852042E-05 5.4865465446E-05 5.4120297281E-05 5.3385210086E-05 +5.2660068222E-05 5.1944737857E-05 5.1239086984E-05 5.0542985335E-05 +4.9856304383E-05 4.9178917316E-05 4.8510699018E-05 4.7851526041E-05 +4.7201276591E-05 4.6559830496E-05 4.5927069196E-05 4.5302875696E-05 +4.4687134585E-05 4.4079732007E-05 4.3480555616E-05 4.2889494568E-05 +4.2306439502E-05 4.1731282520E-05 4.1163917167E-05 4.0604238415E-05 +4.0052142639E-05 3.9507527601E-05 3.8970292416E-05 3.8440337576E-05 +3.7917564906E-05 3.7401877538E-05 3.6893179900E-05 3.6391377702E-05 +3.5896377918E-05 3.5408088765E-05 3.4926419693E-05 3.4451281366E-05 +3.3982585642E-05 3.3520245549E-05 3.3064175303E-05 3.2614290272E-05 +3.2170506951E-05 3.1732742955E-05 3.1300917006E-05 3.0874948913E-05 +3.0454759565E-05 3.0040270909E-05 2.9631405941E-05 2.9228088692E-05 +2.8830244200E-05 2.8437798521E-05 2.8050678716E-05 2.7668812816E-05 +2.7292129817E-05 2.6920559669E-05 2.6554033264E-05 2.6192482422E-05 +2.5835839879E-05 2.5484039274E-05 2.5137015139E-05 2.4794702881E-05 +2.4457038770E-05 2.4123959959E-05 2.3795404431E-05 2.3471311004E-05 +2.3151619317E-05 2.2836269823E-05 2.2525203775E-05 2.2218363215E-05 +2.1915690968E-05 2.1617130625E-05 2.1322626537E-05 2.1032123791E-05 +2.0745568237E-05 2.0462906450E-05 2.0184085718E-05 1.9909054040E-05 +1.9637760115E-05 1.9370153334E-05 1.9106183767E-05 1.8845802158E-05 +1.8588959916E-05 1.8335609102E-05 1.8085702419E-05 1.7839193206E-05 +1.7596035450E-05 1.7356183747E-05 1.7119593304E-05 1.6886219932E-05 +1.6656020038E-05 1.6428950618E-05 1.6204969246E-05 1.5984034069E-05 +1.5766103797E-05 1.5551137700E-05 1.5339095584E-05 1.5129937814E-05 +1.4923625290E-05 1.4720119437E-05 1.4519382197E-05 1.4321376027E-05 +1.4126063892E-05 1.3933409256E-05 1.3743376074E-05 1.3555928791E-05 +1.3371032331E-05 1.3188652089E-05 1.3008753919E-05 1.2831304156E-05 +1.2656269583E-05 1.2483617430E-05 1.2313315369E-05 1.2145331510E-05 +1.1979634391E-05 1.1816192980E-05 1.1654976658E-05 1.1495955226E-05 +1.1339098888E-05 1.1184378253E-05 1.1031764318E-05 1.0881228488E-05 +1.0732742552E-05 1.0586278676E-05 1.0441809404E-05 1.0299307650E-05 +1.0158746696E-05 1.0020100182E-05 9.8833421092E-06 9.7484468262E-06 +9.6153890307E-06 9.4841437622E-06 9.3546863897E-06 9.2269926286E-06 +9.1010385222E-06 8.9768004347E-06 8.8542550499E-06 8.7333793672E-06 +8.6141506974E-06 8.4965466584E-06 8.3805451709E-06 8.2661244548E-06 +8.1532630246E-06 8.0419396858E-06 7.9321335261E-06 7.8238239199E-06 +7.7169905290E-06 7.6116132844E-06 7.5076723891E-06 7.4051483141E-06 +7.3040217951E-06 7.2042738286E-06 7.1058856688E-06 7.0088388236E-06 +6.9131150516E-06 6.8186963587E-06 6.7255649940E-06 6.6337034386E-06 +6.5430944299E-06 6.4537209301E-06 6.3655661324E-06 6.2786134577E-06 +6.1928465518E-06 6.1082492821E-06 6.0248057347E-06 5.9425002117E-06 +5.8613172278E-06 5.7812415078E-06 5.7022579837E-06 5.6243517875E-06 +5.5475082569E-06 5.4717129338E-06 5.3969515519E-06 5.3232100380E-06 +5.2504745102E-06 5.1787312747E-06 5.1079668237E-06 5.0381678326E-06 +4.9693211575E-06 4.9014138331E-06 4.8344330698E-06 4.7683662516E-06 +4.7032009277E-06 4.6389248271E-06 4.5755258428E-06 4.5129920306E-06 +4.4513116084E-06 4.3904729539E-06 4.3304646028E-06 4.2712752465E-06 +4.2128937296E-06 4.1553090486E-06 4.0985103492E-06 4.0424869246E-06 +3.9872282134E-06 3.9327237907E-06 3.8789633867E-06 3.8259368655E-06 +3.7736342281E-06 3.7220456117E-06 3.6711612875E-06 3.6209716585E-06 +3.5714672584E-06 3.5226387496E-06 3.4744769211E-06 3.4269726873E-06 +3.3801170860E-06 3.3339012767E-06 3.2883165331E-06 3.2433542593E-06 +3.1990059713E-06 3.1552632999E-06 3.1121179899E-06 3.0695618981E-06 +3.0275869920E-06 2.9861853485E-06 2.9453491520E-06 2.9050706933E-06 +2.8653423681E-06 2.8261566753E-06 2.7875062159E-06 2.7493836871E-06 +2.7117818930E-06 2.6746937341E-06 2.6381122061E-06 2.6020303999E-06 +2.5664415007E-06 2.5313387858E-06 2.4967156246E-06 2.4625654763E-06 +2.4288818892E-06 2.3956584994E-06 2.3628890295E-06 2.3305672877E-06 +2.2986871639E-06 2.2672426329E-06 2.2362277555E-06 2.2056366702E-06 +2.1754635953E-06 2.1457028279E-06 2.1163487426E-06 2.0873957906E-06 +2.0588384987E-06 2.0306714681E-06 2.0028893736E-06 1.9754869624E-06 +1.9484590533E-06 1.9218005354E-06 1.8955063633E-06 1.8695715688E-06 +1.8439912476E-06 1.8187605619E-06 1.7938747399E-06 1.7693290745E-06 +1.7451189230E-06 1.7212397059E-06 1.6976869058E-06 1.6744560672E-06 +1.6515427949E-06 1.6289427539E-06 1.6066516680E-06 1.5846653181E-06 +1.5629795422E-06 1.5415902398E-06 1.5204933631E-06 1.4996849197E-06 +1.4791609715E-06 1.4589176342E-06 1.4389510762E-06 1.4192575182E-06 +1.3998332325E-06 1.3806745420E-06 1.3617778199E-06 1.3431394888E-06 +1.3247560197E-06 1.3066239304E-06 + + diff --git a/tests/dft/pseudopotential/real/H3NEB_coordinates.inp b/tests/dft/pseudopotential/real/H3NEB_coordinates.inp new file mode 100644 index 000000000..820cc60fd --- /dev/null +++ b/tests/dft/pseudopotential/real/H3NEB_coordinates.inp @@ -0,0 +1,21 @@ +1 1 0.61944165900000003 0 0 +1 1 0 0 0 +1 1 0.12981389700000001 0 0 +1 1 0.70622933478167516 0 0 +1 1 0 0 0 +1 1 0.13073736301709671 0 0 +1 1 0.77994131275873679 0 0 +1 1 0 0 0 +1 1 0.13746804448246977 0 0 +1 1 0.83618941690888349 0 0 +1 1 0 0 0 +1 1 0.16390403031941747 0 0 +1 1 0.86247958774714839 0 0 +1 1 0 0 0 +1 1 0.21996196178816882 0 0 +1 1 0.86926867495200177 0 0 +1 1 0 0 0 +1 1 0.29382529162700105 0 0 +1 1 0.87018610299999999 0 0 +1 1 0 0 0 +1 1 0.38055834100000002 0 0 \ No newline at end of file diff --git a/tests/dft/pseudopotential/real/H3NEB_domainBoundingVectors.inp b/tests/dft/pseudopotential/real/H3NEB_domainBoundingVectors.inp new file mode 100644 index 000000000..531c7c8ad --- /dev/null +++ b/tests/dft/pseudopotential/real/H3NEB_domainBoundingVectors.inp @@ -0,0 +1,3 @@ +12.0000 0.00000000 0.00000000 +0.00000000 5.0000000 0.00000000 +0.00000000 0.00000000 5.00000000 diff --git a/tests/dft/pseudopotential/real/H3NEB_ionRelaxFlags.inp b/tests/dft/pseudopotential/real/H3NEB_ionRelaxFlags.inp new file mode 100644 index 000000000..ec6bb8a9c --- /dev/null +++ b/tests/dft/pseudopotential/real/H3NEB_ionRelaxFlags.inp @@ -0,0 +1,3 @@ +1 0 0 0 0 0 +0 0 0 0 0 0 +1 0 0 0 0 0 \ No newline at end of file diff --git a/tests/dft/pseudopotential/real/H3NEB_pseudo.innp b/tests/dft/pseudopotential/real/H3NEB_pseudo.innp new file mode 100644 index 000000000..280f24dfb --- /dev/null +++ b/tests/dft/pseudopotential/real/H3NEB_pseudo.innp @@ -0,0 +1 @@ +1 H.upf diff --git a/tests/dft/pseudopotential/real/nebH3.prm.in b/tests/dft/pseudopotential/real/nebH3.prm.in new file mode 100644 index 000000000..14b89c120 --- /dev/null +++ b/tests/dft/pseudopotential/real/nebH3.prm.in @@ -0,0 +1,62 @@ +set VERBOSITY = 0 +set REPRODUCIBLE OUTPUT = true +set SOLVER MODE = NEB +subsection Geometry + set NATOMS=32 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/H3NEB_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/H3NEB_domainBoundingVectors.inp +end + +subsection Boundary conditions + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true +end + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER=4 + subsection Auto mesh generation parameters + set MESH SIZE AROUND ATOM = 1.0 + set ATOM BALL RADIUS = 6.0 + end +end + +subsection DFT functional parameters + set EXCHANGE CORRELATION TYPE = 4 + set PSEUDOPOTENTIAL CALCULATION = true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/H3NEB_pseudo.inp + set PSEUDO TESTS FLAG = true + set SPIN POLARIZATION = 1 + set START MAGNETIZATION = 0.45 +end + +subsection SCF parameters + set TEMPERATURE = 500 + set TOLERANCE = 1e-5 + set MIXING METHOD =ANDERSON + set STARTING WFC=ATOMIC + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 5 + set CHEBYSHEV FILTER TOLERANCE=1e-3 + end +end + +subsection NEB + set NUMBER OF IMAGES = 7 + set PATH THRESHOLD = 0.0005 + set MAXIMUM NUMBER OF NEB ITERATIONS = 2 + set NEB DOMAIN VECTORS FILE = @SOURCE_DIR@/H3NEB_domainBoundingVectors.inp + set NEB COORDINATES FILE = @SOURCE_DIR@/H3NEB_coordinates.inp + set NEB OPT SOLVER = LBFGS + set ION RELAX FLAGS FILE = @SOURCE_DIR@/H3NEB_ionRelaxFlags.inp + set ALLOW IMAGE FREEZING = true +end + + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 4000 + set TOLERANCE = 1e-10 +end +set H REFINED ELECTROSTATICS=false \ No newline at end of file From 10a107c87825247ad323f9d606cd117099214d81 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 3 Jul 2023 13:11:05 +0530 Subject: [PATCH 37/53] Adding file for NEB ctest output --- tests/dft/pseudopotential/real/nebH3.mpirun=16.output | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/dft/pseudopotential/real/nebH3.mpirun=16.output diff --git a/tests/dft/pseudopotential/real/nebH3.mpirun=16.output b/tests/dft/pseudopotential/real/nebH3.mpirun=16.output new file mode 100644 index 000000000..e69de29bb From 599f1c07a56ab3d765e36fda5d624ef91a8fc813 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 3 Jul 2023 15:03:41 +0530 Subject: [PATCH 38/53] Ctests for NEB inital --- .../{H3NEB_pseudo.innp => H3NEB_pseudo.inp} | 0 .../real/nebH3.mpirun=16.output | 625 ++++++++++++++++++ tests/dft/pseudopotential/real/nebH3.prm.in | 2 +- 3 files changed, 626 insertions(+), 1 deletion(-) rename tests/dft/pseudopotential/real/{H3NEB_pseudo.innp => H3NEB_pseudo.inp} (100%) diff --git a/tests/dft/pseudopotential/real/H3NEB_pseudo.innp b/tests/dft/pseudopotential/real/H3NEB_pseudo.inp similarity index 100% rename from tests/dft/pseudopotential/real/H3NEB_pseudo.innp rename to tests/dft/pseudopotential/real/H3NEB_pseudo.inp diff --git a/tests/dft/pseudopotential/real/nebH3.mpirun=16.output b/tests/dft/pseudopotential/real/nebH3.mpirun=16.output index e69de29bb..baadde920 100644 --- a/tests/dft/pseudopotential/real/nebH3.mpirun=16.output +++ b/tests/dft/pseudopotential/real/nebH3.mpirun=16.output @@ -0,0 +1,625 @@ +number of atoms: 3 +number of atoms types: 1 +Z:1 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 5 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 6.194416590000000333e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 2: 1.298138970000000114e-01 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 1801 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... +number of atoms: 3 +number of atoms types: 1 +Z:1 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 5 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 7.062293347816751554e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 2: 1.307373630170967083e-01 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 1817 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... +number of atoms: 3 +number of atoms types: 1 +Z:1 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 5 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 7.799413127587367933e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 2: 1.374680444824697700e-01 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 1821 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... +number of atoms: 3 +number of atoms types: 1 +Z:1 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 5 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 8.361894169088834872e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 2: 1.639040303194174708e-01 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 1821 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... +number of atoms: 3 +number of atoms types: 1 +Z:1 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 5 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 8.624795877471483907e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 2: 2.199619617881688194e-01 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 1821 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... +number of atoms: 3 +number of atoms types: 1 +Z:1 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 5 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 8.692686749520017742e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 2: 2.938252916270010506e-01 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 1817 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... +number of atoms: 3 +number of atoms types: 1 +Z:1 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 5 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 8.701861029999999886e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 2: 3.805583410000000222e-01 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 1801 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... +--$ Domain Length$ -- +Lx:= 1.200000000000000000e+01 Ly:=5.000000000000000000e+00 Lz:=5.000000000000000000e+00 + --------------Ion force relaxation flags---------------- +1 0 0 +0 0 0 +1 0 0 + -------------------------------------------------- + Total No. of relaxation flags: 2 + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82501068 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000247,0.000000,0.000000 +AtomId 1: 0.001296,0.000000,0.000000 +AtomId 2: 0.002518,0.000000,0.000000 +-------------------------------------------------------------------------------------------- + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82372950 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.002474,0.000000,0.000000 +AtomId 1: 0.002167,0.000000,0.000000 +AtomId 2: 0.001222,0.000000,0.000000 +-------------------------------------------------------------------------------------------- + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.81997130 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.005122,0.000000,0.000000 +AtomId 1: 0.006497,0.000000,0.000000 +AtomId 2: 0.002204,0.000000,0.000000 +-------------------------------------------------------------------------------------------- + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 15 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.81693748 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000436,0.000000,0.000000 +AtomId 1: 0.000015,0.000000,0.000000 +AtomId 2: 0.000451,0.000000,0.000000 +-------------------------------------------------------------------------------------------- + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.81996398 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.002273,0.000000,0.000000 +AtomId 1: 0.006558,0.000000,0.000000 +AtomId 2: 0.005111,0.000000,0.000000 +-------------------------------------------------------------------------------------------- + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82373103 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.001210,0.000000,0.000000 +AtomId 1: 0.002154,0.000000,0.000000 +AtomId 2: 0.002471,0.000000,0.000000 +-------------------------------------------------------------------------------------------- + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82501068 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.002518,0.000000,0.000000 +AtomId 1: 0.001296,0.000000,0.000000 +AtomId 2: 0.000247,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------- + --------------------Initial NEB Data --------------------------------------- + Image No Force perpendicular in Ha/bohr Internal Energy in Ha + 0 0.002515 -1.825011 + 1 0.000988 -1.823729 + 2 0.000167 -1.819971 + 3 0.000443 -1.816937 + 4 0.000101 -1.819964 + 5 0.000975 -1.823731 + 6 0.002515 -1.825011 +---------------------------------------- +Atom ID with max displacement: 0 +Path Length of 0 is: 2.428922 Bohrs +----------------------------------------- + +--Path Length: 0.000000 Bohr +Time taken for initial dft solve of all images: 92.400012 +------------------------------------------------------------------------------- +----------------------------------------------------------------------- + NEB STEP: 0 +----------------------------------------------------------------------- + Image No. Internal Energy (Ha) Free Energy (Ha) Max Force Error (Ha/bohr) + 0(T) -1.825011 -1.825011 0.002515 + 1(F) -1.823729 -1.823729 0.000988 0 + 2(T) -1.819971 -1.819971 0.000167 + 3(T) -1.816937 -1.816937 0.000443 + 4(T) -1.819964 -1.819964 0.000101 + 5(F) -1.823731 -1.823731 0.000975 0 + 6(T) -1.825011 -1.825011 0.002515 +--> Activation Energy (meV): 219.68279 +<-- Activation Energy (meV): 219.68286 +---------------------------------------------- +FlagTotal: 3 +Flag: 0 +Flag: 1 +Flag: 1 +Flag: 1 +Flag: 0 + +Maximum Force 0.00093in Ha/bohr + +------------------------------------------------------------------------------- + --------------------NEB Attempt Completed --------------------------------------- + Image No Force perpendicular in Ha/bohr Free Energy in Ha + 0 0.00251 -1.82501 + 1 0.00099 -1.82373 0 + 2 0.00017 -1.81997 1 + 3 0.00044 -1.81694 1 + 4 0.00010 -1.81996 1 + 5 0.00097 -1.82373 0 + 6 0.00251 -1.82501 +---------------------------------------- +Atom ID with max displacement: 0 +Path Length of 0 is: 2.42892 Bohrs +----------------------------------------- + +------------------------------------------------------------------------------- +FlagTotal: 3 +Is COnverged: 0 +Update called for image: 1 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82372947 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.002485,0.000000,0.000000 +AtomId 1: 0.001955,0.000000,0.000000 +AtomId 2: 0.001003,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +Update called for image: 2 +NEB: Image is forzen. Image No: 2 with Image force: 0.000167 +Update called for image: 3 +NEB: Image is forzen. Image No: 3 with Image force: 0.000443 +Update called for image: 4 +NEB: Image is forzen. Image No: 4 with Image force: 0.000101 +Update called for image: 5 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82373095 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000994,0.000000,0.000000 +AtomId 1: 0.001944,0.000000,0.000000 +AtomId 2: 0.002482,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +----------------------------------------------------------------------- + NEB STEP: 1 +----------------------------------------------------------------------- + Image No. Internal Energy (Ha) Free Energy (Ha) Max Force Error (Ha/bohr) + 0(T) -1.825011 -1.825011 0.002515 + 1(F) -1.823729 -1.823729 0.000767 0 + 2(T) -1.819971 -1.819971 0.000167 + 3(T) -1.816937 -1.816937 0.000443 + 4(T) -1.819964 -1.819964 0.000101 + 5(F) -1.823731 -1.823731 0.000757 0 + 6(T) -1.825011 -1.825011 0.002515 +--> Activation Energy (meV): 219.68279 +<-- Activation Energy (meV): 219.68286 +---------------------------------------------- +FlagTotal: 3 +Flag: 0 +Flag: 1 +Flag: 1 +Flag: 1 +Flag: 0 + +Maximum Force 0.00071in Ha/bohr + +------------------------------------------------------------------------------- + --------------------NEB Attempt Completed --------------------------------------- + Image No Force perpendicular in Ha/bohr Free Energy in Ha + 0 0.00251 -1.82501 + 1 0.00077 -1.82373 0 + 2 0.00017 -1.81997 1 + 3 0.00044 -1.81694 1 + 4 0.00010 -1.81996 1 + 5 0.00076 -1.82373 0 + 6 0.00251 -1.82501 +---------------------------------------- +Atom ID with max displacement: 0 +Path Length of 0 is: 2.42927 Bohrs +----------------------------------------- + +------------------------------------------------------------------------------- +FlagTotal: 3 +Is COnverged: 0 +Update called for image: 1 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82372119 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.002541,0.000000,0.000000 +AtomId 1: 0.001169,0.000000,0.000000 +AtomId 2: 0.000183,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +Update called for image: 2 +NEB: Image is forzen. Image No: 2 with Image force: 0.000167 +Update called for image: 3 +NEB: Image is forzen. Image No: 3 with Image force: 0.000443 +Update called for image: 4 +NEB: Image is forzen. Image No: 4 with Image force: 0.000101 +Update called for image: 5 + +Finite element mesh information +------------------------------------------------- +FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 +FE interpolating polynomial order for electrostatics solve: 4 +FE interpolating polynomial order for nodal electron density computation: 6 +number of elements: 432 +number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 +------------------------------------------------- + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +Checkpointing tria info and rho data in progress... +...checkpointing done. +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -1.82372248 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000186,0.000000,0.000000 +AtomId 1: 0.001170,0.000000,0.000000 +AtomId 2: 0.002538,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +----------------------------------------------------------------------- + NEB STEP: 2 +----------------------------------------------------------------------- + Image No. Internal Energy (Ha) Free Energy (Ha) Max Force Error (Ha/bohr) + 0(T) -1.825011 -1.825011 0.002515 + 1(T) -1.823721 -1.823721 0.000063 + 2(T) -1.819971 -1.819971 0.000167 + 3(T) -1.816937 -1.816937 0.000443 + 4(T) -1.819964 -1.819964 0.000101 + 5(T) -1.823722 -1.823722 0.000060 + 6(T) -1.825011 -1.825011 0.002515 +--> Activation Energy (meV): 219.68279 +<-- Activation Energy (meV): 219.68286 +---------------------------------------------- +FlagTotal: 5 +Optimization Criteria Met!! +Flag: 1 +Flag: 1 +Flag: 1 +Flag: 1 +Flag: 1 + +Maximum Force 0.00000in Ha/bohr + +------------------------------------------------------------------------------- + --------------------NEB Attempt Completed --------------------------------------- + Image No Force perpendicular in Ha/bohr Free Energy in Ha + 0 0.00251 -1.82501 + 1 0.00006 -1.82372 1 + 2 0.00017 -1.81997 1 + 3 0.00044 -1.81694 1 + 4 0.00010 -1.81996 1 + 5 0.00006 -1.82372 1 + 6 0.00251 -1.82501 +---------------------------------------- +Atom ID with max displacement: 0 +Path Length of 0 is: 2.43153 Bohrs +----------------------------------------- + +------------------------------------------------------------------------------- +FlagTotal: 5 +Is Converged: 1 \ No newline at end of file diff --git a/tests/dft/pseudopotential/real/nebH3.prm.in b/tests/dft/pseudopotential/real/nebH3.prm.in index 14b89c120..44a4d74b8 100644 --- a/tests/dft/pseudopotential/real/nebH3.prm.in +++ b/tests/dft/pseudopotential/real/nebH3.prm.in @@ -2,7 +2,7 @@ set VERBOSITY = 0 set REPRODUCIBLE OUTPUT = true set SOLVER MODE = NEB subsection Geometry - set NATOMS=32 + set NATOMS=3 set NATOM TYPES=1 set ATOMIC COORDINATES FILE = @SOURCE_DIR@/H3NEB_coordinates.inp set DOMAIN VECTORS FILE = @SOURCE_DIR@/H3NEB_domainBoundingVectors.inp From d81e4c3e43eda71f6e73c7fcb7f45b67a16f778b Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Wed, 9 Aug 2023 17:27:00 +0530 Subject: [PATCH 39/53] Changes to verbosity and Path length --- include/nudgedElasticBandClass.h | 2 +- setupDevelopPetsc.sh | 26 ++--- setupUser.sh | 151 ----------------------------- setupUserPetsc.sh | 155 ------------------------------ src/neb/nudgedElasticBandClass.cc | 30 +++--- 5 files changed, 26 insertions(+), 338 deletions(-) delete mode 100755 setupUser.sh delete mode 100755 setupUserPetsc.sh diff --git a/include/nudgedElasticBandClass.h b/include/nudgedElasticBandClass.h index 91e56a866..421b48c29 100644 --- a/include/nudgedElasticBandClass.h +++ b/include/nudgedElasticBandClass.h @@ -225,7 +225,7 @@ namespace dftfe /** * @brief Calculate path length: max diaplacement of atoms */ - void + double CalculatePathLength(bool flag) const; /** diff --git a/setupDevelopPetsc.sh b/setupDevelopPetsc.sh index d2edd0c7e..ea500cbfd 100755 --- a/setupDevelopPetsc.sh +++ b/setupDevelopPetsc.sh @@ -17,15 +17,15 @@ SRC=`dirname $0` # location of source directory # and optimization flag #Paths for required external libraries -dealiiPetscRealDir="/home/vikramg/DFT-softwares-gcc/dealii/install_real_cpu" -dealiiPetscComplexDir="/home/vikramg/DFT-softwares-gcc/dealii/install_complex_cpu" -alglibDir="/home/vikramg/DFT-softwares-gcc/alglib/alglib-cpp/src" -libxcDir="/home/vikramg/DFT-softwares-gcc/libxc/install_libxc5.2.3" -spglibDir="/home/vikramg/DFT-softwares-gcc/spglib/install" +dealiiPetscRealDir="/shared/dftfesoftwares2021/dealii/installgcc9.2cudaawarempiWithPetscSlpec" +dealiiPetscComplexDir="/shared/dftfesoftwares2021/dealii/installgcc9.2cudaawarempiWithPetscSlpecComplex" +alglibDir="/shared/dftfesoftwares2021/alglib/cpp/src" +libxcDir="/shared/dftfesoftwares2021/libxc/gcc9.2_libxc_5.1.5" +spglibDir="/shared/dftfesoftwares2021/spglib/gcc9.2_spglib" xmlIncludeDir="/usr/include/libxml2" xmlLibDir="/usr/lib64" -ELPA_PATH="/home/vikramg/DFT-softwares-gcc/elpa/install202211" - +ELPA_PATH="/shared/dftfesoftwares2021/elpa2022/installgcc9.2elpa2022withcudaawarempi" +numdiffdir="/shared/dftfesoftwares2021/numdiff/build" #Paths for optional external libraries # path for NCCL/RCCL libraries @@ -33,7 +33,7 @@ DCCL_PATH="" mdiPath="" #Toggle GPU compilation -withGPU=OFF +withGPU=ON gpuLang="cuda" # Use "cuda"/"hip" gpuVendor="nvidia" # Use "nvidia/amd" withGPUAwareMPI=OFF #Please use this option with care @@ -48,8 +48,8 @@ withTorch=OFF withCustomizedDealii=ON #Compiler options and flags -cxx_compiler=/sw/pkgs/arc/stacks/gcc/10.3.0/openmpi/4.1.4/bin/mpicxx #sets DCMAKE_CXX_COMPILER -cxx_flags="-std=c++14 -march=native -fopenmp -fPIC" #sets DCMAKE_CXX_FLAGS +cxx_compiler=mpic++ #sets DCMAKE_CXX_COMPILER +cxx_flags="-march=native -fPIC" #sets DCMAKE_CXX_FLAGS cxx_flagsRelease="-O2" #sets DCMAKE_CXX_FLAGS_RELEASE device_flags="-arch=sm_70" # set DCMAKE_CXX_CUDA_FLAGS #(only applicable for withGPU=ON) @@ -88,7 +88,7 @@ function cmake_configure() { -DXML_INCLUDE_DIR=$xmlIncludeDir\ -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$numdiffdir"\ -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_CUDA_FLAGS="$device_flags" -DCMAKE_CUDA_ARCHITECTURES="$device_architectures"\ -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 @@ -102,7 +102,7 @@ function cmake_configure() { -DXML_INCLUDE_DIR=$xmlIncludeDir\ -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$numdiffdir"\ -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_HIP_FLAGS="$device_flags" -DCMAKE_HIP_ARCHITECTURES="$device_architectures"\ -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 @@ -116,7 +116,7 @@ function cmake_configure() { -DXML_INCLUDE_DIR=$xmlIncludeDir\ -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$numdiffdir"\ -DWITH_COMPLEX=$withComplex \ -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 diff --git a/setupUser.sh b/setupUser.sh deleted file mode 100755 index 23a3d3339..000000000 --- a/setupUser.sh +++ /dev/null @@ -1,151 +0,0 @@ -#!/bin/bash -# script to setup and build DFT-FE. - -set -e -set -o pipefail - -if [ -s CMakeLists.txt ]; then - echo "This script must be run from the build directory!" - exit 1 -fi - -# Path to project source -SRC=`dirname $0` # location of source directory - -######################################################################## -#Provide paths below for external libraries, compiler options and flags, -# and optimization flag - -#Paths for required external libraries -dealiiDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/dealiiDevCustomized/installGcc8.3CUDA11.1.1Mklscalapack" -alglibDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/alglib/cpp/src" -libxcDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/libxc/installGcc8.3.0Libxc5.1.3" -spglibDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/spglib/installGcc8.3.0" -xmlIncludeDir="/usr/include/libxml2" -xmlLibDir="/usr/lib64" -ELPA_PATH="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/elpa/install-elpa-2021.05.002-cuda" -dftdpath="" -numdiffdir="" - - -#Paths for optional external libraries -# path for NCCL/RCCL libraries -DCCL_PATH="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/nccl/build" -mdiPath="" - -#Toggle GPU compilation -withGPU=ON -gpuLang="cuda" # Use "cuda"/"hip" -gpuVendor="nvidia" # Use "nvidia/amd" -withGPUAwareMPI=OFF #Please use this option with care - #Only use if the machine supports - #device aware MPI and is profiled - #to be fast - -#Option to link to DCCL library (Only for GPU compilation) -withDCCL=ON -withMDI=OFF -withTorch=OFF -withCustomizedDealii=ON - -#Compiler options and flags -cxx_compiler=mpic++ #sets DCMAKE_CXX_COMPILER -cxx_flags="-fPIC" #sets DCMAKE_CXX_FLAGS -cxx_flagsRelease="-O2" #sets DCMAKE_CXX_FLAGS_RELEASE -device_flags="-arch=sm_70" # set DCMAKE_CXX_CUDA/HIP_FLAGS - #(only applicable for withGPU=ON) -device_architectures="70" # set DCMAKE_CXX_CUDA/HIP_ARCHITECTURES - #(only applicable for withGPU=ON) - - -#Option to compile with default or higher order quadrature for storing pseudopotential data -#ON is recommended for MD simulations with hard pseudopotentials -withHigherQuadPSP=OFF - -# build type: "Release" or "Debug" -build_type=Release - -testing=OFF -minimal_compile=ON -########################################################################### -#Usually, no changes are needed below this line -# - -#if [[ x"$build_type" == x"Release" ]]; then -# c_flags="$c_flagsRelease" -# cxx_flags="$c_flagsRelease" -#else -#fi -out=`echo "$build_type" | tr '[:upper:]' '[:lower:]'` - -function cmake_configure() { - if [ "$gpuLang" = "cuda" ]; then - cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ - -DCMAKE_CXX_FLAGS="$cxx_flags"\ - -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ - -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ - -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ - -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ - -DXML_INCLUDE_DIR=$xmlIncludeDir\ - -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ - -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$dftdpath;$numdiffdir"\ - -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_CUDA_FLAGS="$device_flags" -DCMAKE_CUDA_ARCHITECTURES="$device_architectures"\ - -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ - -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 - elif [ "$gpuLang" = "hip" ]; then - cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ - -DCMAKE_CXX_FLAGS="$cxx_flags"\ - -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ - -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ - -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ - -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ - -DXML_INCLUDE_DIR=$xmlIncludeDir\ - -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ - -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$dftdpath;$numdiffdir"\ - -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_HIP_FLAGS="$device_flags" -DCMAKE_HIP_ARCHITECTURES="$device_architectures"\ - -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ - -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 - else - cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ - -DCMAKE_CXX_FLAGS="$cxx_flags"\ - -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ - -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ - -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ - -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ - -DXML_INCLUDE_DIR=$xmlIncludeDir\ - -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ - -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$dftdpath;$numdiffdir"\ - -DWITH_COMPLEX=$withComplex \ - -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ - -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 - fi -} - -RCol='\e[0m' -Blu='\e[0;34m'; -if [ -d "$out" ]; then # build directory exists - echo -e "${Blu}$out directory already present${RCol}" -else - rm -rf "$out" - echo -e "${Blu}Creating $out ${RCol}" - mkdir -p "$out" -fi - -cd $out - -withComplex=OFF -echo -e "${Blu}Building Real executable in $build_type mode...${RCol}" -mkdir -p real && cd real -cmake_configure "$SRC" && make -j8 -cd .. - -withComplex=ON -echo -e "${Blu}Building Complex executable in $build_type mode...${RCol}" -mkdir -p complex && cd complex -cmake_configure "$SRC" && make -j8 -cd .. - -echo -e "${Blu}Build complete.${RCol}" diff --git a/setupUserPetsc.sh b/setupUserPetsc.sh deleted file mode 100755 index da7048c66..000000000 --- a/setupUserPetsc.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/bash -# script to setup and build DFT-FE. - -set -e -set -o pipefail - -if [ -s CMakeLists.txt ]; then - echo "This script must be run from the build directory!" - exit 1 -fi - -# Path to project source -SRC=`dirname $0` # location of source directory - -######################################################################## -#Provide paths below for external libraries, compiler options and flags, -# and optimization flag - -#Paths for required external libraries -dealiiPetscRealDir="/home/vikramg/DFT-softwares-gcc/dealii/install_real_cpu" -dealiiPetscComplexDir="/home/vikramg/DFT-softwares-gcc/dealii/install_complex_cpu" -alglibDir="/home/vikramg/DFT-softwares-gcc/alglib/alglib-cpp/src" -libxcDir="/home/vikramg/DFT-softwares-gcc/libxc/install_libxc5.2.3" -spglibDir="/home/vikramg/DFT-softwares-gcc/spglib/install" -xmlIncludeDir="/usr/include/libxml2" -xmlLibDir="/usr/lib64" -ELPA_PATH="/home/vikramg/DFT-softwares-gcc/elpa/install" - - - -#Paths for optional external libraries -# path for NCCL/RCCL libraries -DCCL_PATH="" -mdiPath="" - -#Toggle GPU compilation -withGPU=OFF -gpuLang="cuda" # Use "cuda"/"hip" -gpuVendor="nvidia" # Use "nvidia/amd" -withGPUAwareMPI=OFF #Please use this option with care - #Only use if the machine supports - #device aware MPI and is profiled - #to be fast - -#Option to link to DCCL library (Only for GPU compilation) -withDCCL=OFF -withMDI=OFF -withTorch=OFF -withCustomizedDealii=ON - -#Compiler options and flags -cxx_compiler=mpic++ #sets DCMAKE_CXX_COMPILER -cxx_flags="-fPIC" #sets DCMAKE_CXX_FLAGS -cxx_flagsRelease="-O2" #sets DCMAKE_CXX_FLAGS_RELEASE -device_flags="-arch=sm_70" # set DCMAKE_CXX_CUDA/HIP_FLAGS - #(only applicable for withGPU=ON) -device_architectures="70" # set DCMAKE_CXX_CUDA/HIP_ARCHITECTURES - #(only applicable for withGPU=ON) - - -#Option to compile with default or higher order quadrature for storing pseudopotential data -#ON is recommended for MD simulations with hard pseudopotentials -withHigherQuadPSP=OFF - -# build type: "Release" or "Debug" -build_type=Release - -testing=OFF -minimal_compile=ON -########################################################################### -#Usually, no changes are needed below this line -# - -#if [[ x"$build_type" == x"Release" ]]; then -# c_flags="$c_flagsRelease" -# cxx_flags="$c_flagsRelease" -#else -#fi -out=`echo "$build_type" | tr '[:upper:]' '[:lower:]'` - - -function cmake_configure() { - mkdir -p complex && cd complex - if [ "$gpuLang" = "cuda" ]; then - cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ - -DCMAKE_CXX_FLAGS="$cxx_flags"\ - -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ - -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ - -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ - -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ - -DXML_INCLUDE_DIR=$xmlIncludeDir\ - -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ - -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ - -DWITH_COMPLEX=ON -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_CUDA_FLAGS="$device_flags" -DCMAKE_CUDA_ARCHITECTURES="$device_architectures"\ - -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ - -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 - elif [ "$gpuLang" = "hip" ]; then - cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ - -DCMAKE_CXX_FLAGS="$cxx_flags"\ - -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ - -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ - -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ - -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ - -DXML_INCLUDE_DIR=$xmlIncludeDir\ - -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ - -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ - -DWITH_COMPLEX=ON -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_HIP_FLAGS="$device_flags" -DCMAKE_HIP_ARCHITECTURES="$device_architectures"\ - -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ - -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 - else - cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ - -DCMAKE_CXX_FLAGS="$cxx_flags"\ - -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ - -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ - -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ - -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ - -DXML_INCLUDE_DIR=$xmlIncludeDir\ - -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ - -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ - -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ - -DWITH_COMPLEX=ON \ - -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ - -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 - fi -} - -RCol='\e[0m' -Blu='\e[0;34m'; -if [ -d "$out" ]; then # build directory exists - echo -e "${Blu}$out directory already present${RCol}" -else - rm -rf "$out" - echo -e "${Blu}Creating $out ${RCol}" - mkdir -p "$out" -fi - -cd $out - -withComplex=OFF -dealiiDir=$dealiiPetscRealDir -echo -e "${Blu}Building Real executable in $build_type mode...${RCol}" -mkdir -p real && cd real -cmake_configure "$SRC" && make -j8 -cd .. - -withComplex=ON -dealiiDir=$dealiiPetscComplexDir -echo -e "${Blu}Building Complex executable in $build_type mode...${RCol}" -mkdir -p complex && cd complex -cmake_configure "$SRC" && make -j8 -cd .. - -echo -e "${Blu}Build complete.${RCol}" diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index ff544b06c..b4f93e96f 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -138,7 +138,7 @@ namespace dftfe Image == 0 ? true : false, "NEB", d_restartFilesPath, - d_verbosity, + d_verbosity < 4 ? -1:d_verbosity, Image == 0 ? false : true)); } } @@ -191,7 +191,7 @@ namespace dftfe Image == 0 ? true : false, "NEB", d_restartFilesPath, - d_verbosity, + d_verbosity < 4 ? -1:d_verbosity, Image == 0 ? false : true)); } } @@ -225,9 +225,9 @@ namespace dftfe temp_domainBoundingVectors[i][2] * temp_domainBoundingVectors[i][2]; d_Length.push_back(pow(temp, 0.5)); } - pcout << "--$ Domain Length$ --" << std::endl; - pcout << "Lx:= " << d_Length[0] << " Ly:=" << d_Length[1] - << " Lz:=" << d_Length[2] << std::endl; + // pcout << "--$ Domain Length$ --" << std::endl; + // pcout << "Lx:= " << d_Length[0] << " Ly:=" << d_Length[1] + // << " Lz:=" << d_Length[2] << std::endl; @@ -765,7 +765,7 @@ namespace dftfe } pcout << "------------------------------------------------------" << std::endl; - CalculatePathLength(true); + double Length = CalculatePathLength(true); return d_totalUpdateCalls; } @@ -936,7 +936,7 @@ namespace dftfe // pcout << image << " " << F_per << " " << F_spring << std::endl; - pcout << "Flag: " << Flag[image - 1] << std::endl; + //pcout << "Flag: " << Flag[image - 1] << std::endl; for (int i = 0; i < d_countrelaxationFlags; i++) { if (Flag[image - 1] == 0) @@ -1154,7 +1154,7 @@ namespace dftfe - void + double nudgedElasticBandClass::CalculatePathLength(bool flag) const { double length = 0.0; @@ -1183,7 +1183,7 @@ namespace dftfe if (d_Length[2] / 2 <= tempz) tempz -= d_Length[2]; pathLength[iCharge] += - tempx * tempx + tempy * tempy + tempz * tempz; + std::sqrt(tempx * tempx + tempy * tempy + tempz * tempz); } } for (int iCharge = 0; iCharge < d_numberGlobalCharges; iCharge++) @@ -1197,11 +1197,7 @@ namespace dftfe pcout << "AtomID: " << iCharge << " " << pathLength[iCharge] << " " << "Bohrs" << std::endl; } - pcout << "----------------------------------------" << std::endl; - pcout << "Atom ID with max displacement: " << atomId << std::endl; - pcout << "Path Length of " << atomId << " is: " << length << " Bohrs" - << std::endl; - pcout << "-----------------------------------------" << std::endl; + return(length); } void @@ -1284,7 +1280,7 @@ namespace dftfe pcout << std::endl; } MPI_Barrier(d_mpiCommParent); - CalculatePathLength(false); + double length = CalculatePathLength(false); pcout << std::endl @@ -1292,8 +1288,6 @@ namespace dftfe << std::endl; int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; - pcout << "FlagTotal: " << FlagTotal << std::endl; - pcout << "Is COnverged: " << flag << std::endl; return flag; } @@ -1462,7 +1456,7 @@ namespace dftfe } MPI_Barrier(d_mpiCommParent); double Length = 0.0; - CalculatePathLength(false); + Length = CalculatePathLength(false); pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; step_time = MPI_Wtime() - step_time; pcout << "Time taken for initial dft solve of all images: " << step_time From 6acef55902a292a2d5852037a7649d2f6d3fff66 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 17 Aug 2023 14:43:49 +0530 Subject: [PATCH 40/53] Indendation std --- setupDevelopPetsc.sh | 152 +++++++++++++++++++++++++++++ setupUser.sh | 151 +++++++++++++++++++++++++++++ setupUserPetsc.sh | 155 ++++++++++++++++++++++++++++++ src/neb/nudgedElasticBandClass.cc | 50 +++++----- 4 files changed, 483 insertions(+), 25 deletions(-) create mode 100755 setupDevelopPetsc.sh create mode 100755 setupUser.sh create mode 100755 setupUserPetsc.sh diff --git a/setupDevelopPetsc.sh b/setupDevelopPetsc.sh new file mode 100755 index 000000000..d2edd0c7e --- /dev/null +++ b/setupDevelopPetsc.sh @@ -0,0 +1,152 @@ +#!/bin/bash +# script to setup and build DFT-FE. + +set -e +set -o pipefail + +if [ -s CMakeLists.txt ]; then + echo "This script must be run from the build directory!" + exit 1 +fi + +# Path to project source +SRC=`dirname $0` # location of source directory + +######################################################################## +#Provide paths below for external libraries, compiler options and flags, +# and optimization flag + +#Paths for required external libraries +dealiiPetscRealDir="/home/vikramg/DFT-softwares-gcc/dealii/install_real_cpu" +dealiiPetscComplexDir="/home/vikramg/DFT-softwares-gcc/dealii/install_complex_cpu" +alglibDir="/home/vikramg/DFT-softwares-gcc/alglib/alglib-cpp/src" +libxcDir="/home/vikramg/DFT-softwares-gcc/libxc/install_libxc5.2.3" +spglibDir="/home/vikramg/DFT-softwares-gcc/spglib/install" +xmlIncludeDir="/usr/include/libxml2" +xmlLibDir="/usr/lib64" +ELPA_PATH="/home/vikramg/DFT-softwares-gcc/elpa/install202211" + + +#Paths for optional external libraries +# path for NCCL/RCCL libraries +DCCL_PATH="" +mdiPath="" + +#Toggle GPU compilation +withGPU=OFF +gpuLang="cuda" # Use "cuda"/"hip" +gpuVendor="nvidia" # Use "nvidia/amd" +withGPUAwareMPI=OFF #Please use this option with care + #Only use if the machine supports + #device aware MPI and is profiled + #to be fast + +#Option to link to DCCL library (Only for GPU compilation) +withDCCL=OFF +withMDI=OFF +withTorch=OFF +withCustomizedDealii=ON + +#Compiler options and flags +cxx_compiler=/sw/pkgs/arc/stacks/gcc/10.3.0/openmpi/4.1.4/bin/mpicxx #sets DCMAKE_CXX_COMPILER +cxx_flags="-std=c++14 -march=native -fopenmp -fPIC" #sets DCMAKE_CXX_FLAGS +cxx_flagsRelease="-O2" #sets DCMAKE_CXX_FLAGS_RELEASE +device_flags="-arch=sm_70" # set DCMAKE_CXX_CUDA_FLAGS + #(only applicable for withGPU=ON) +device_architectures="70" # set DCMAKE_CXX_CUDA_ARCHITECTURES + #(only applicable for withGPU=ON) + + +#Option to compile with default or higher order quadrature for storing pseudopotential data +#ON is recommended for MD simulations with hard pseudopotentials +withHigherQuadPSP=OFF + +# build type: "Release" or "Debug" +build_type=Release + +testing=ON +minimal_compile=ON +########################################################################### +#Usually, no changes are needed below this line +# + +#if [[ x"$build_type" == x"Release" ]]; then +# c_flags="$c_flagsRelease" +# cxx_flags="$c_flagsRelease" +#else +#fi +out=`echo "$build_type" | tr '[:upper:]' '[:lower:]'` + +function cmake_configure() { + if [ "$gpuLang" = "cuda" ]; then + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_CUDA_FLAGS="$device_flags" -DCMAKE_CUDA_ARCHITECTURES="$device_architectures"\ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + elif [ "$gpuLang" = "hip" ]; then + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_HIP_FLAGS="$device_flags" -DCMAKE_HIP_ARCHITECTURES="$device_architectures"\ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + else + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_COMPLEX=$withComplex \ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + fi +} + +RCol='\e[0m' +Blu='\e[0;34m'; +if [ -d "$out" ]; then # build directory exists + echo -e "${Blu}$out directory already present${RCol}" +else + rm -rf "$out" + echo -e "${Blu}Creating $out ${RCol}" + mkdir -p "$out" +fi + +cd $out + +withComplex=OFF +dealiiDir=$dealiiPetscRealDir +echo -e "${Blu}Building Real executable in $build_type mode...${RCol}" +mkdir -p real && cd real +cmake_configure "$SRC" && make -j8 +cd .. + +withComplex=ON +dealiiDir=$dealiiPetscComplexDir +echo -e "${Blu}Building Complex executable in $build_type mode...${RCol}" +mkdir -p complex && cd complex +cmake_configure "$SRC" && make -j8 +cd .. + +echo -e "${Blu}Build complete.${RCol}" diff --git a/setupUser.sh b/setupUser.sh new file mode 100755 index 000000000..23a3d3339 --- /dev/null +++ b/setupUser.sh @@ -0,0 +1,151 @@ +#!/bin/bash +# script to setup and build DFT-FE. + +set -e +set -o pipefail + +if [ -s CMakeLists.txt ]; then + echo "This script must be run from the build directory!" + exit 1 +fi + +# Path to project source +SRC=`dirname $0` # location of source directory + +######################################################################## +#Provide paths below for external libraries, compiler options and flags, +# and optimization flag + +#Paths for required external libraries +dealiiDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/dealiiDevCustomized/installGcc8.3CUDA11.1.1Mklscalapack" +alglibDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/alglib/cpp/src" +libxcDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/libxc/installGcc8.3.0Libxc5.1.3" +spglibDir="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/spglib/installGcc8.3.0" +xmlIncludeDir="/usr/include/libxml2" +xmlLibDir="/usr/lib64" +ELPA_PATH="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/elpa/install-elpa-2021.05.002-cuda" +dftdpath="" +numdiffdir="" + + +#Paths for optional external libraries +# path for NCCL/RCCL libraries +DCCL_PATH="/global/project/projectdirs/m1759/dsambit/softwaresDFTFE/nccl/build" +mdiPath="" + +#Toggle GPU compilation +withGPU=ON +gpuLang="cuda" # Use "cuda"/"hip" +gpuVendor="nvidia" # Use "nvidia/amd" +withGPUAwareMPI=OFF #Please use this option with care + #Only use if the machine supports + #device aware MPI and is profiled + #to be fast + +#Option to link to DCCL library (Only for GPU compilation) +withDCCL=ON +withMDI=OFF +withTorch=OFF +withCustomizedDealii=ON + +#Compiler options and flags +cxx_compiler=mpic++ #sets DCMAKE_CXX_COMPILER +cxx_flags="-fPIC" #sets DCMAKE_CXX_FLAGS +cxx_flagsRelease="-O2" #sets DCMAKE_CXX_FLAGS_RELEASE +device_flags="-arch=sm_70" # set DCMAKE_CXX_CUDA/HIP_FLAGS + #(only applicable for withGPU=ON) +device_architectures="70" # set DCMAKE_CXX_CUDA/HIP_ARCHITECTURES + #(only applicable for withGPU=ON) + + +#Option to compile with default or higher order quadrature for storing pseudopotential data +#ON is recommended for MD simulations with hard pseudopotentials +withHigherQuadPSP=OFF + +# build type: "Release" or "Debug" +build_type=Release + +testing=OFF +minimal_compile=ON +########################################################################### +#Usually, no changes are needed below this line +# + +#if [[ x"$build_type" == x"Release" ]]; then +# c_flags="$c_flagsRelease" +# cxx_flags="$c_flagsRelease" +#else +#fi +out=`echo "$build_type" | tr '[:upper:]' '[:lower:]'` + +function cmake_configure() { + if [ "$gpuLang" = "cuda" ]; then + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$dftdpath;$numdiffdir"\ + -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_CUDA_FLAGS="$device_flags" -DCMAKE_CUDA_ARCHITECTURES="$device_architectures"\ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + elif [ "$gpuLang" = "hip" ]; then + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$dftdpath;$numdiffdir"\ + -DWITH_COMPLEX=$withComplex -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_HIP_FLAGS="$device_flags" -DCMAKE_HIP_ARCHITECTURES="$device_architectures"\ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + else + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH;$dftdpath;$numdiffdir"\ + -DWITH_COMPLEX=$withComplex \ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + fi +} + +RCol='\e[0m' +Blu='\e[0;34m'; +if [ -d "$out" ]; then # build directory exists + echo -e "${Blu}$out directory already present${RCol}" +else + rm -rf "$out" + echo -e "${Blu}Creating $out ${RCol}" + mkdir -p "$out" +fi + +cd $out + +withComplex=OFF +echo -e "${Blu}Building Real executable in $build_type mode...${RCol}" +mkdir -p real && cd real +cmake_configure "$SRC" && make -j8 +cd .. + +withComplex=ON +echo -e "${Blu}Building Complex executable in $build_type mode...${RCol}" +mkdir -p complex && cd complex +cmake_configure "$SRC" && make -j8 +cd .. + +echo -e "${Blu}Build complete.${RCol}" diff --git a/setupUserPetsc.sh b/setupUserPetsc.sh new file mode 100755 index 000000000..da7048c66 --- /dev/null +++ b/setupUserPetsc.sh @@ -0,0 +1,155 @@ +#!/bin/bash +# script to setup and build DFT-FE. + +set -e +set -o pipefail + +if [ -s CMakeLists.txt ]; then + echo "This script must be run from the build directory!" + exit 1 +fi + +# Path to project source +SRC=`dirname $0` # location of source directory + +######################################################################## +#Provide paths below for external libraries, compiler options and flags, +# and optimization flag + +#Paths for required external libraries +dealiiPetscRealDir="/home/vikramg/DFT-softwares-gcc/dealii/install_real_cpu" +dealiiPetscComplexDir="/home/vikramg/DFT-softwares-gcc/dealii/install_complex_cpu" +alglibDir="/home/vikramg/DFT-softwares-gcc/alglib/alglib-cpp/src" +libxcDir="/home/vikramg/DFT-softwares-gcc/libxc/install_libxc5.2.3" +spglibDir="/home/vikramg/DFT-softwares-gcc/spglib/install" +xmlIncludeDir="/usr/include/libxml2" +xmlLibDir="/usr/lib64" +ELPA_PATH="/home/vikramg/DFT-softwares-gcc/elpa/install" + + + +#Paths for optional external libraries +# path for NCCL/RCCL libraries +DCCL_PATH="" +mdiPath="" + +#Toggle GPU compilation +withGPU=OFF +gpuLang="cuda" # Use "cuda"/"hip" +gpuVendor="nvidia" # Use "nvidia/amd" +withGPUAwareMPI=OFF #Please use this option with care + #Only use if the machine supports + #device aware MPI and is profiled + #to be fast + +#Option to link to DCCL library (Only for GPU compilation) +withDCCL=OFF +withMDI=OFF +withTorch=OFF +withCustomizedDealii=ON + +#Compiler options and flags +cxx_compiler=mpic++ #sets DCMAKE_CXX_COMPILER +cxx_flags="-fPIC" #sets DCMAKE_CXX_FLAGS +cxx_flagsRelease="-O2" #sets DCMAKE_CXX_FLAGS_RELEASE +device_flags="-arch=sm_70" # set DCMAKE_CXX_CUDA/HIP_FLAGS + #(only applicable for withGPU=ON) +device_architectures="70" # set DCMAKE_CXX_CUDA/HIP_ARCHITECTURES + #(only applicable for withGPU=ON) + + +#Option to compile with default or higher order quadrature for storing pseudopotential data +#ON is recommended for MD simulations with hard pseudopotentials +withHigherQuadPSP=OFF + +# build type: "Release" or "Debug" +build_type=Release + +testing=OFF +minimal_compile=ON +########################################################################### +#Usually, no changes are needed below this line +# + +#if [[ x"$build_type" == x"Release" ]]; then +# c_flags="$c_flagsRelease" +# cxx_flags="$c_flagsRelease" +#else +#fi +out=`echo "$build_type" | tr '[:upper:]' '[:lower:]'` + + +function cmake_configure() { + mkdir -p complex && cd complex + if [ "$gpuLang" = "cuda" ]; then + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_COMPLEX=ON -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_CUDA_FLAGS="$device_flags" -DCMAKE_CUDA_ARCHITECTURES="$device_architectures"\ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + elif [ "$gpuLang" = "hip" ]; then + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_COMPLEX=ON -DWITH_GPU=$withGPU -DGPU_LANG=$gpuLang -DGPU_VENDOR=$gpuVendor -DWITH_GPU_AWARE_MPI=$withGPUAwareMPI -DCMAKE_HIP_FLAGS="$device_flags" -DCMAKE_HIP_ARCHITECTURES="$device_architectures"\ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + else + cmake -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_COMPILER=$cxx_compiler\ + -DCMAKE_CXX_FLAGS="$cxx_flags"\ + -DCMAKE_CXX_FLAGS_RELEASE="$cxx_flagsRelease" \ + -DCMAKE_BUILD_TYPE=$build_type -DDEAL_II_DIR=$dealiiDir \ + -DALGLIB_DIR=$alglibDir -DLIBXC_DIR=$libxcDir \ + -DSPGLIB_DIR=$spglibDir -DXML_LIB_DIR=$xmlLibDir \ + -DXML_INCLUDE_DIR=$xmlIncludeDir\ + -DWITH_MDI=$withMDI -DMDI_PATH=$mdiPath -DWITH_TORCH=$withTorch \ + -DWITH_CUSTOMIZED_DEALII=$withCustomizedDealii\ + -DWITH_DCCL=$withDCCL -DCMAKE_PREFIX_PATH="$ELPA_PATH;$DCCL_PATH"\ + -DWITH_COMPLEX=ON \ + -DWITH_TESTING=$testing -DMINIMAL_COMPILE=$minimal_compile\ + -DHIGHERQUAD_PSP=$withHigherQuadPSP $1 + fi +} + +RCol='\e[0m' +Blu='\e[0;34m'; +if [ -d "$out" ]; then # build directory exists + echo -e "${Blu}$out directory already present${RCol}" +else + rm -rf "$out" + echo -e "${Blu}Creating $out ${RCol}" + mkdir -p "$out" +fi + +cd $out + +withComplex=OFF +dealiiDir=$dealiiPetscRealDir +echo -e "${Blu}Building Real executable in $build_type mode...${RCol}" +mkdir -p real && cd real +cmake_configure "$SRC" && make -j8 +cd .. + +withComplex=ON +dealiiDir=$dealiiPetscComplexDir +echo -e "${Blu}Building Complex executable in $build_type mode...${RCol}" +mkdir -p complex && cd complex +cmake_configure "$SRC" && make -j8 +cd .. + +echo -e "${Blu}Build complete.${RCol}" diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index b4f93e96f..104b90503 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -129,17 +129,17 @@ namespace dftfe domainVectorsFile, d_mpiCommParent); - d_dftfeWrapper.push_back( - std::make_unique(parameter_file, - coordinatesFile, - domainVectorsFile, - d_mpiCommParent, - Image == 0 ? true : false, - Image == 0 ? true : false, - "NEB", - d_restartFilesPath, - d_verbosity < 4 ? -1:d_verbosity, - Image == 0 ? false : true)); + d_dftfeWrapper.push_back(std::make_unique( + parameter_file, + coordinatesFile, + domainVectorsFile, + d_mpiCommParent, + Image == 0 ? true : false, + Image == 0 ? true : false, + "NEB", + d_restartFilesPath, + d_verbosity < 4 ? -1 : d_verbosity, + Image == 0 ? false : true)); } } else @@ -182,17 +182,17 @@ namespace dftfe "domainBoundingVectorsCurrent.chk"; - d_dftfeWrapper.push_back( - std::make_unique(parameter_file, - coordinatesFile, - domainVectorsFile, - d_mpiCommParent, - Image == 0 ? true : false, - Image == 0 ? true : false, - "NEB", - d_restartFilesPath, - d_verbosity < 4 ? -1:d_verbosity, - Image == 0 ? false : true)); + d_dftfeWrapper.push_back(std::make_unique( + parameter_file, + coordinatesFile, + domainVectorsFile, + d_mpiCommParent, + Image == 0 ? true : false, + Image == 0 ? true : false, + "NEB", + d_restartFilesPath, + d_verbosity < 4 ? -1 : d_verbosity, + Image == 0 ? false : true)); } } d_dftPtr = d_dftfeWrapper[0]->getDftfeBasePtr(); @@ -936,7 +936,7 @@ namespace dftfe // pcout << image << " " << F_per << " " << F_spring << std::endl; - //pcout << "Flag: " << Flag[image - 1] << std::endl; + // pcout << "Flag: " << Flag[image - 1] << std::endl; for (int i = 0; i < d_countrelaxationFlags; i++) { if (Flag[image - 1] == 0) @@ -1197,7 +1197,7 @@ namespace dftfe pcout << "AtomID: " << iCharge << " " << pathLength[iCharge] << " " << "Bohrs" << std::endl; } - return(length); + return (length); } void @@ -1456,7 +1456,7 @@ namespace dftfe } MPI_Barrier(d_mpiCommParent); double Length = 0.0; - Length = CalculatePathLength(false); + Length = CalculatePathLength(false); pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; step_time = MPI_Wtime() - step_time; pcout << "Time taken for initial dft solve of all images: " << step_time From 7c830cb4984639e64edf324566ec55761bd8eda3 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Thu, 17 Aug 2023 18:55:02 +0530 Subject: [PATCH 41/53] Printing in NEB. Reduced verbosity --- src/dft/dft.cc | 9 +++- src/neb/nudgedElasticBandClass.cc | 89 +++++++++++++------------------ 2 files changed, 43 insertions(+), 55 deletions(-) diff --git a/src/dft/dft.cc b/src/dft/dft.cc index dcf4bf579..b86cc8846 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -4187,16 +4187,21 @@ namespace dftfe else pcout << "EigenValue" << std::endl; } + + double fermiEnergy = d_dftParamsPtr->spinPolarized?std::max(fermiEnergyDown,fermiEnergyUp):fermiEnergy; + + + unsigned int numberEigenValues = d_dftParamsPtr->highestStateOfInterestForChebFiltering == 0?d_numEigenValues:d_dftParamsPtr->highestStateOfInterestForChebFiltering; if (dealii::Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) { FILE *pFile; pFile = fopen("bands.out", "w"); - fprintf(pFile, "%d %d\n", totkPoints, d_numEigenValues); + fprintf(pFile, "%d %d\n", totkPoints, numberEigenValues); for (unsigned int kPoint = 0; kPoint < totkPoints / (1 + d_dftParamsPtr->spinPolarized); ++kPoint) { - for (unsigned int iWave = 0; iWave < d_numEigenValues; ++iWave) + for (unsigned int iWave = 0; iWave < numberEigenValues; ++iWave) { if (d_dftParamsPtr->spinPolarized) { diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 104b90503..b06897d7d 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -733,11 +733,11 @@ namespace dftfe std::max(maxEnergy, (d_dftfeWrapper[i])->getDFTFreeEnergy()); } pcout << "--- Converged Activation Energy---" << std::endl; - pcout << "--> Activation Energy (meV): " << std::setprecision(5) + pcout << "--> Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(5) + pcout << "<-- Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 @@ -858,10 +858,13 @@ namespace dftfe pcout << "-----------------------------------------------------------------------" << std::endl; - pcout << std::setw(12) << " Image No. " - << " " << std::setw(27) << "Internal Energy (Ha)" - << " " << std::setw(27) << "Free Energy (Ha)" - << " " << std::setw(27) << "Max Force Error (Ha/bohr)" << std::endl; + pcout <getDFTFreeEnergy(); int count = 0; for (int image = 0; image < d_numberOfImages; image++) @@ -883,33 +886,31 @@ namespace dftfe } if (flagmultiplier[image] == 0) - pcout << " " - << " " << std::setw(12) << image << "(T)" - << " " << std::setw(12) << InternalEnergy << " " - << std::setw(12) << FreeEnergy << " " << ForceError - << std::endl; + pcout<getDFTFreeEnergy()); } - pcout << "--> Activation Energy (meV): " << std::setprecision(5) + pcout << "--> Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(5) + pcout << "<-- Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; + double Length = CalculatePathLength(d_verbosity>2?true:false); + pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; pcout << "----------------------------------------------" << std::endl; int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; - pcout << "FlagTotal: " << FlagTotal << std::endl; + if (flag == true) pcout << "Optimization Criteria Met!!" << std::endl; @@ -1193,10 +1194,12 @@ namespace dftfe length = pathLength[iCharge]; atomId = iCharge; } + + } if (flag) - pcout << "AtomID: " << iCharge << " " << pathLength[iCharge] << " " + pcout << "AtomID: " << atomId << " " << pathLength[atomId] << " " << "Bohrs" << std::endl; - } + return (length); } @@ -1252,41 +1255,22 @@ namespace dftfe { std::vector Flag(d_numberOfImages - 2, 0); int count = 0; - pcout - << std::endl - << "-------------------------------------------------------------------------------" - << std::endl; - pcout << " --------------------NEB Attempt Completed " - << "---------------------------------------" << std::endl; - pcout << " " << std::setw(12) << " Image No " - << " " << std::setw(12) << "Force perpendicular in Ha/bohr" - << " " << std::setw(12) << "Free Energy in Ha" - << " " << std::endl; - - for (int i = 0; i < d_numberOfImages; i++) { double Force = d_ImageError[i]; double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); - pcout << " " << std::setw(12) << i << " " << std::setw(12) - << Force << " " << std::setw(12) << Energy << " "; if ((i > 0 && i < d_numberOfImages - 1)) { if (Force < d_optimizertolerance) Flag[count] = 1; - pcout << Flag[count]; + count++; } - pcout << std::endl; + } MPI_Barrier(d_mpiCommParent); - double length = CalculatePathLength(false); - - pcout - << std::endl - << "-------------------------------------------------------------------------------" - << std::endl; - int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); + //double length = CalculatePathLength(false); + int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; return flag; } @@ -1429,13 +1413,13 @@ namespace dftfe << std::endl; pcout << " --------------------Initial NEB Data " << "---------------------------------------" << std::endl; - pcout << " " - << " Image No " - << " " - << "Force perpendicular in Ha/bohr" - << " " - << "Internal Energy in Ha" - << " " << std::endl; + pcout <getDFTFreeEnergy(); - pcout << " " << i << " " << Force << " " << Energy << " " - << std::endl; + pcout < d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { From 93b22cdc33c02c1f6924732fe2bc80e6c2e18882 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Fri, 18 Aug 2023 07:32:20 +0530 Subject: [PATCH 42/53] identify fermi state and write bands till fermi+10 --- src/dft/dft.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/dft/dft.cc b/src/dft/dft.cc index b86cc8846..0289e6aff 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -4189,9 +4189,54 @@ namespace dftfe } double fermiEnergy = d_dftParamsPtr->spinPolarized?std::max(fermiEnergyDown,fermiEnergyUp):fermiEnergy; - + unsigned int maxeigenIndex = d_numEigenValues; + std::vector occupationVector(totkPoints,0.0); + + for(int iWave = 1; iWave spinPolarized); + ++kPoint) + { + + if(d_dftParamsPtr->spinPolarized) + { + occupationVector[2*kPoint] = dftUtils::getPartialOccupancy( + eigenValuesFlattenedGlobal[2*kPoint * d_numEigenValues + + iWave], + fermiEnergy, + C_kb, + d_dftParamsPtr->TVal); + occupationVector[2*kPoint+1] = dftUtils::getPartialOccupancy( + eigenValuesFlattenedGlobal[(2*kPoint+1) * d_numEigenValues + + iWave], + fermiEnergy, + C_kb, + d_dftParamsPtr->TVal); + maxOcc = std::max(maxOcc, std::max(occupationVector[2*kPoint+1],occupationVector[2*kPoint])) ; + } + else + { + occupationVector[kPoint] = dftUtils::getPartialOccupancy( + eigenValuesFlattenedGlobal[kPoint * d_numEigenValues + + iWave], + fermiEnergy, + C_kb, + d_dftParamsPtr->TVal); + maxOcc = std::max(maxOcc,occupationVector[kPoint]) ; + } + } + + if(maxOcc < 1E-5) + { + maxeigenIndex = iWave; + break; + } + + } - unsigned int numberEigenValues = d_dftParamsPtr->highestStateOfInterestForChebFiltering == 0?d_numEigenValues:d_dftParamsPtr->highestStateOfInterestForChebFiltering; + unsigned int numberEigenValues = d_dftParamsPtr->highestStateOfInterestForChebFiltering == 0?std::min(d_numEigenValues,maxeigenIndex+10):d_dftParamsPtr->highestStateOfInterestForChebFiltering; if (dealii::Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) { FILE *pFile; From d0dcc5d329267d236d14c6e742b44793805de280 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Fri, 18 Aug 2023 10:11:41 +0530 Subject: [PATCH 43/53] nscf verbosity bug, occupation --- src/dft/dft.cc | 15 +++++++++------ src/main.cc | 3 ++- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 0289e6aff..cb12f281d 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -4188,7 +4188,8 @@ namespace dftfe pcout << "EigenValue" << std::endl; } - double fermiEnergy = d_dftParamsPtr->spinPolarized?std::max(fermiEnergyDown,fermiEnergyUp):fermiEnergy; + double FE = d_dftParamsPtr->spinPolarized?std::max(fermiEnergyDown,fermiEnergyUp):fermiEnergy; + pcout<<"Fermi Energy: "< occupationVector(totkPoints,0.0); @@ -4205,13 +4206,13 @@ namespace dftfe occupationVector[2*kPoint] = dftUtils::getPartialOccupancy( eigenValuesFlattenedGlobal[2*kPoint * d_numEigenValues + iWave], - fermiEnergy, + FE, C_kb, d_dftParamsPtr->TVal); occupationVector[2*kPoint+1] = dftUtils::getPartialOccupancy( eigenValuesFlattenedGlobal[(2*kPoint+1) * d_numEigenValues + iWave], - fermiEnergy, + FE, C_kb, d_dftParamsPtr->TVal); maxOcc = std::max(maxOcc, std::max(occupationVector[2*kPoint+1],occupationVector[2*kPoint])) ; @@ -4221,21 +4222,23 @@ namespace dftfe occupationVector[kPoint] = dftUtils::getPartialOccupancy( eigenValuesFlattenedGlobal[kPoint * d_numEigenValues + iWave], - fermiEnergy, + FE, C_kb, d_dftParamsPtr->TVal); - maxOcc = std::max(maxOcc,occupationVector[kPoint]) ; + maxOcc = std::max(maxOcc,occupationVector[kPoint]) ; + } } if(maxOcc < 1E-5) { + maxeigenIndex = iWave; break; } } - + unsigned int numberEigenValues = d_dftParamsPtr->highestStateOfInterestForChebFiltering == 0?std::min(d_numEigenValues,maxeigenIndex+10):d_dftParamsPtr->highestStateOfInterestForChebFiltering; if (dealii::Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) { diff --git a/src/main.cc b/src/main.cc index 95d5221e5..238db96a6 100644 --- a/src/main.cc +++ b/src/main.cc @@ -223,7 +223,8 @@ main(int argc, char *argv[]) true, true, "NSCF", - runParams.restartFilesPath); + runParams.restartFilesPath, + runParams.verbosity); dftfeWrapped.run(); } From ff973b9c8969bb9589c87df67f41cb9e26b624ad Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Fri, 18 Aug 2023 21:36:08 +0530 Subject: [PATCH 44/53] Cleanups --- src/dft/dft.cc | 92 +++++++------ src/neb/nudgedElasticBandClass.cc | 216 +++++++++++++++++------------- 2 files changed, 174 insertions(+), 134 deletions(-) diff --git a/src/dft/dft.cc b/src/dft/dft.cc index cb12f281d..743de6e76 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -4187,59 +4187,63 @@ namespace dftfe else pcout << "EigenValue" << std::endl; } - - double FE = d_dftParamsPtr->spinPolarized?std::max(fermiEnergyDown,fermiEnergyUp):fermiEnergy; - pcout<<"Fermi Energy: "< occupationVector(totkPoints,0.0); - for(int iWave = 1; iWave spinPolarized ? + std::max(fermiEnergyDown, fermiEnergyUp) : + fermiEnergy; + pcout << "Fermi Energy: " << FE << std::endl; + unsigned int maxeigenIndex = d_numEigenValues; + std::vector occupationVector(totkPoints, 0.0); + + for (int iWave = 1; iWave < d_numEigenValues; iWave++) + { + double maxOcc = -1.0; + for (unsigned int kPoint = 0; kPoint < totkPoints / (1 + d_dftParamsPtr->spinPolarized); ++kPoint) - { - - if(d_dftParamsPtr->spinPolarized) { - occupationVector[2*kPoint] = dftUtils::getPartialOccupancy( - eigenValuesFlattenedGlobal[2*kPoint * d_numEigenValues + - iWave], - FE, - C_kb, - d_dftParamsPtr->TVal); - occupationVector[2*kPoint+1] = dftUtils::getPartialOccupancy( - eigenValuesFlattenedGlobal[(2*kPoint+1) * d_numEigenValues + - iWave], - FE, - C_kb, - d_dftParamsPtr->TVal); - maxOcc = std::max(maxOcc, std::max(occupationVector[2*kPoint+1],occupationVector[2*kPoint])) ; - } - else - { - occupationVector[kPoint] = dftUtils::getPartialOccupancy( - eigenValuesFlattenedGlobal[kPoint * d_numEigenValues + - iWave], - FE, - C_kb, - d_dftParamsPtr->TVal); - maxOcc = std::max(maxOcc,occupationVector[kPoint]) ; - + if (d_dftParamsPtr->spinPolarized) + { + occupationVector[2 * kPoint] = dftUtils::getPartialOccupancy( + eigenValuesFlattenedGlobal[2 * kPoint * d_numEigenValues + + iWave], + FE, + C_kb, + d_dftParamsPtr->TVal); + occupationVector[2 * kPoint + 1] = + dftUtils::getPartialOccupancy( + eigenValuesFlattenedGlobal[(2 * kPoint + 1) * + d_numEigenValues + + iWave], + FE, + C_kb, + d_dftParamsPtr->TVal); + maxOcc = std::max(maxOcc, + std::max(occupationVector[2 * kPoint + 1], + occupationVector[2 * kPoint])); + } + else + { + occupationVector[kPoint] = dftUtils::getPartialOccupancy( + eigenValuesFlattenedGlobal[kPoint * d_numEigenValues + iWave], + FE, + C_kb, + d_dftParamsPtr->TVal); + maxOcc = std::max(maxOcc, occupationVector[kPoint]); + } } - } - - if(maxOcc < 1E-5) - { + if (maxOcc < 1E-5) + { maxeigenIndex = iWave; break; - } - - } + } + } - unsigned int numberEigenValues = d_dftParamsPtr->highestStateOfInterestForChebFiltering == 0?std::min(d_numEigenValues,maxeigenIndex+10):d_dftParamsPtr->highestStateOfInterestForChebFiltering; + unsigned int numberEigenValues = + d_dftParamsPtr->highestStateOfInterestForChebFiltering == 0 ? + std::min(d_numEigenValues, maxeigenIndex + 10) : + d_dftParamsPtr->highestStateOfInterestForChebFiltering; if (dealii::Utilities::MPI::this_mpi_process(d_mpiCommParent) == 0) { FILE *pFile; diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index b06897d7d..85848914a 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -721,18 +721,49 @@ namespace dftfe << d_optimizertolerance << ", total number of ion position updates: " << d_totalUpdateCalls << std::endl; - pcout << "--------------Final Ground State Results-------------" + std::vector flagmultiplier(d_numberOfImages, 1); + flagmultiplier[0] = 0; + flagmultiplier[d_numberOfImages - 1] = 0; + std::vector Flag(d_numberOfImages - 2, 0); + pcout << "--------------Final Results-------------" << std::endl; + pcout << std::setw(12) << "Image No" << std::setw(25) + << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " << std::endl; double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); - for (int i = 0; i < d_numberOfImages; i++) + int count = 0; + for (int image = 0; image < d_numberOfImages; image++) { - pcout << "Free Energy of Image in meV: " << i + 1 << " = " - << (d_dftfeWrapper[i])->getDFTFreeEnergy() * C_haToeV * 1000 - << std::endl; + double FreeEnergy = (d_dftfeWrapper[image])->getDFTFreeEnergy(); + double InternalEnergy = + (d_dftfeWrapper[image])->getDFTFreeEnergy() + + (d_dftfeWrapper[image])->getElectronicEntropicEnergy(); + double ForceError = d_ImageError[image]; + if (ForceError < 0.95 * d_optimizertolerance && d_imageFreeze && + (image != 0 || image != d_numberOfImages - 1)) + flagmultiplier[image] = 0; + + if ((image > 0 && image < d_numberOfImages - 1)) + { + if (ForceError < d_optimizertolerance) + Flag[count] = 1; + count++; + } + + if (flagmultiplier[image] == 0) + pcout << std::setw(8) << image << "(T)" << std::setw(25) + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; + else + pcout << std::setw(8) << image << "(F)" << std::setw(25) + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; maxEnergy = - std::max(maxEnergy, (d_dftfeWrapper[i])->getDFTFreeEnergy()); + std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); } - pcout << "--- Converged Activation Energy---" << std::endl; pcout << "--> Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000 @@ -742,31 +773,12 @@ namespace dftfe (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; - pcout << "-----------------------------------" << std::endl; - pcout << "--------------Final Error Results(Ha/bohr)-------------" - << std::endl; - for (int i = 0; i < d_numberOfImages; i++) - { - d_NEBImageno = i; - std::vector tangent(d_countrelaxationFlags, 0.0); - std::vector Forceparallel(d_countrelaxationFlags, 0.0); - std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); - double Force = 0.0; - - CalculatePathTangent(d_NEBImageno, tangent); - CalculateForceparallel(d_NEBImageno, Forceparallel, tangent); - CalculateForceperpendicular(d_NEBImageno, - Forceperpendicular, - Forceparallel, - tangent); - LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); - pcout << "Error of Image: " << i + 1 << " = " << Force - << " Ha/bohr" << std::endl; - } - pcout << "------------------------------------------------------" - << std::endl; - double Length = CalculatePathLength(true); - return d_totalUpdateCalls; + double Length = CalculatePathLength(d_verbosity > 2 ? true : false); + pcout << std::endl + << "--Path Length: " << Length << " Bohr" << std::endl; + pcout << "----------------------------------------------" << std::endl; + + } else if (solverReturn == nonLinearSolver::FAILURE) @@ -782,32 +794,62 @@ namespace dftfe if (solverReturn != nonLinearSolver::SUCCESS && d_verbosity >= 1) { - pcout << "--------------Ground State Results-------------" << std::endl; - for (int i = 0; i < d_numberOfImages; i++) - { - pcout << "Free Energy of Image: " << i + 1 << " = " - << (d_dftfeWrapper[i])->getDFTFreeEnergy() << std::endl; - } - pcout << "--------------NEB Step No: " << d_totalUpdateCalls - << " Error Results(Ha/bohr)-------------" << std::endl; - for (int i = 0; i < d_numberOfImages; i++) + std::vector flagmultiplier(d_numberOfImages, 1); + flagmultiplier[0] = 0; + flagmultiplier[d_numberOfImages - 1] = 0; + std::vector Flag(d_numberOfImages - 2, 0); + pcout << "--------------Current Results-------------" << std::endl; + pcout << std::setw(12) << "Image No" << std::setw(25) + << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " + << std::endl; + double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); + int count = 0; + for (int image = 0; image < d_numberOfImages; image++) { - d_NEBImageno = i; - std::vector tangent(d_countrelaxationFlags, 0.0); - std::vector Forceparallel(d_countrelaxationFlags, 0.0); - std::vector Forceperpendicular(d_countrelaxationFlags, 0.0); - double Force = 0.0; - - CalculatePathTangent(d_NEBImageno, tangent); - CalculateForceparallel(d_NEBImageno, Forceparallel, tangent); - CalculateForceperpendicular(d_NEBImageno, - Forceperpendicular, - Forceparallel, - tangent); - LNorm(Force, Forceperpendicular, 0, d_countrelaxationFlags); - pcout << "Error of Image: " << i + 1 << " = " << Force - << " Ha/bohr" << std::endl; + double FreeEnergy = (d_dftfeWrapper[image])->getDFTFreeEnergy(); + double InternalEnergy = + (d_dftfeWrapper[image])->getDFTFreeEnergy() + + (d_dftfeWrapper[image])->getElectronicEntropicEnergy(); + double ForceError = d_ImageError[image]; + if (ForceError < 0.95 * d_optimizertolerance && d_imageFreeze && + (image != 0 || image != d_numberOfImages - 1)) + flagmultiplier[image] = 0; + + if ((image > 0 && image < d_numberOfImages - 1)) + { + if (ForceError < d_optimizertolerance) + Flag[count] = 1; + count++; + } + + if (flagmultiplier[image] == 0) + pcout << std::setw(8) << image << "(T)" << std::setw(25) + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; + else + pcout << std::setw(8) << image << "(F)" << std::setw(25) + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; + maxEnergy = + std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); } + pcout << "--> Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - + (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + double Length = CalculatePathLength(d_verbosity > 2 ? true : false); + pcout << std::endl + << "--Path Length: " << Length << " Bohr" << std::endl; + pcout << "----------------------------------------------" << std::endl; } return d_totalUpdateCalls; } @@ -858,13 +900,8 @@ namespace dftfe pcout << "-----------------------------------------------------------------------" << std::endl; - pcout <getDFTFreeEnergy(); int count = 0; for (int image = 0; image < d_numberOfImages; image++) @@ -886,13 +923,17 @@ namespace dftfe } if (flagmultiplier[image] == 0) - pcout<getDFTFreeEnergy()); } @@ -905,12 +946,12 @@ namespace dftfe (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; - double Length = CalculatePathLength(d_verbosity>2?true:false); + double Length = CalculatePathLength(d_verbosity > 2 ? true : false); pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; pcout << "----------------------------------------------" << std::endl; int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; - + if (flag == true) pcout << "Optimization Criteria Met!!" << std::endl; @@ -994,13 +1035,13 @@ namespace dftfe for (int image = 1; image < d_numberOfImages - 1; image++) { int multiplier = 1; - pcout << "Update called for image: " << image << std::endl; + //pcout << "Update called for image: " << image << std::endl; if (d_ImageError[image] < 0.95 * d_optimizertolerance && d_imageFreeze) { multiplier = 0; - pcout << "NEB: Image is forzen. Image No: " << image - << " with Image force: " << d_ImageError[image] << std::endl; + // pcout << "NEB: Image is forzen. Image No: " << image + // << " with Image force: " << d_ImageError[image] << std::endl; } MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; @@ -1194,11 +1235,10 @@ namespace dftfe length = pathLength[iCharge]; atomId = iCharge; } - } - if (flag) - pcout << "AtomID: " << atomId << " " << pathLength[atomId] << " " - << "Bohrs" << std::endl; + if (flag) + pcout << "AtomID: " << atomId << " " << pathLength[atomId] << " " + << "Bohrs" << std::endl; return (length); } @@ -1263,14 +1303,13 @@ namespace dftfe { if (Force < d_optimizertolerance) Flag[count] = 1; - + count++; } - } MPI_Barrier(d_mpiCommParent); - //double length = CalculatePathLength(false); - int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); + // double length = CalculatePathLength(false); + int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; return flag; } @@ -1413,13 +1452,8 @@ namespace dftfe << std::endl; pcout << " --------------------Initial NEB Data " << "---------------------------------------" << std::endl; - pcout <getDFTFreeEnergy(); - pcout < d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { From d52e2207c8492304e67c1d97f7359cf73e3e2f10 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Sat, 19 Aug 2023 08:25:40 +0530 Subject: [PATCH 45/53] New demo example for NEB --- demo/ex4/H.upf | 2187 +++++++++++++++++++++++++++++++++++ demo/ex4/Input_NEB.prm | 64 + demo/ex4/coordinates.inp | 21 + demo/ex4/domainVectors.inp | 3 + demo/ex4/ion_force_flag.inp | 3 + demo/ex4/pseudo.inp | 1 + 6 files changed, 2279 insertions(+) create mode 100644 demo/ex4/H.upf create mode 100644 demo/ex4/Input_NEB.prm create mode 100644 demo/ex4/coordinates.inp create mode 100644 demo/ex4/domainVectors.inp create mode 100644 demo/ex4/ion_force_flag.inp create mode 100644 demo/ex4/pseudo.inp diff --git a/demo/ex4/H.upf b/demo/ex4/H.upf new file mode 100644 index 000000000..0eb31aa24 --- /dev/null +++ b/demo/ex4/H.upf @@ -0,0 +1,2187 @@ + + + +This pseudopotential file has been produced using the code +ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential) +scalar-relativistic version 3.3.0 08/16/2017 by D. R. Hamann +The code is available through a link at URL www.mat-simresearch.com. +Documentation with the package provides a full discription of the +input data below. + + +While it is not required under the terms of the GNU GPL, it is +suggested that you cite D. R. Hamann, Phys. Rev. B 88, 085117 (2013) +in any publication using these pseudopotentials. + + +# ATOM AND REFERENCE CONFIGURATION +# atsym z nc nv iexc psfile +H 1.00 0 1 4 upf +# +# n l f energy (Ha) +1 0 1.00 +# +# PSEUDOPOTENTIAL AND OPTIMIZATION +# lmax +1 +# +# l, rc, ep, ncon, nbas, qcut +0 1.00000 -0.23860 4 7 8.50000 +1 0.70000 0.05000 4 7 11.00000 +# +# LOCAL POTENTIAL +# lloc, lpopt, rc(5), dvloc0 +4 5 0.70000 0.00000 +# +# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs +# l, nproj, debl +0 2 1.00000 +1 1 1.00000 +# +# MODEL CORE CHARGE +# icmod, fcfact, rcfact +0 0.00000 0.00000 +# +# LOG DERIVATIVE ANALYSIS +# epsh1, epsh2, depsh +-12.00 12.00 0.02 +# +# OUTPUT GRID +# rlmax, drl +3.00 0.01 +# +# TEST CONFIGURATIONS +# ncnf +0 +# nvcnf +# n l f + + + + + + + + +0.0000 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 +0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500 +0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300 +0.2400 0.2500 0.2600 0.2700 0.2800 0.2900 0.3000 0.3100 +0.3200 0.3300 0.3400 0.3500 0.3600 0.3700 0.3800 0.3900 +0.4000 0.4100 0.4200 0.4300 0.4400 0.4500 0.4600 0.4700 +0.4800 0.4900 0.5000 0.5100 0.5200 0.5300 0.5400 0.5500 +0.5600 0.5700 0.5800 0.5900 0.6000 0.6100 0.6200 0.6300 +0.6400 0.6500 0.6600 0.6700 0.6800 0.6900 0.7000 0.7100 +0.7200 0.7300 0.7400 0.7500 0.7600 0.7700 0.7800 0.7900 +0.8000 0.8100 0.8200 0.8300 0.8400 0.8500 0.8600 0.8700 +0.8800 0.8900 0.9000 0.9100 0.9200 0.9300 0.9400 0.9500 +0.9600 0.9700 0.9800 0.9900 1.0000 1.0100 1.0200 1.0300 +1.0400 1.0500 1.0600 1.0700 1.0800 1.0900 1.1000 1.1100 +1.1200 1.1300 1.1400 1.1500 1.1600 1.1700 1.1800 1.1900 +1.2000 1.2100 1.2200 1.2300 1.2400 1.2500 1.2600 1.2700 +1.2800 1.2900 1.3000 1.3100 1.3200 1.3300 1.3400 1.3500 +1.3600 1.3700 1.3800 1.3900 1.4000 1.4100 1.4200 1.4300 +1.4400 1.4500 1.4600 1.4700 1.4800 1.4900 1.5000 1.5100 +1.5200 1.5300 1.5400 1.5500 1.5600 1.5700 1.5800 1.5900 +1.6000 1.6100 1.6200 1.6300 1.6400 1.6500 1.6600 1.6700 +1.6800 1.6900 1.7000 1.7100 1.7200 1.7300 1.7400 1.7500 +1.7600 1.7700 1.7800 1.7900 1.8000 1.8100 1.8200 1.8300 +1.8400 1.8500 1.8600 1.8700 1.8800 1.8900 1.9000 1.9100 +1.9200 1.9300 1.9400 1.9500 1.9600 1.9700 1.9800 1.9900 +2.0000 2.0100 2.0200 2.0300 2.0400 2.0500 2.0600 2.0700 +2.0800 2.0900 2.1000 2.1100 2.1200 2.1300 2.1400 2.1500 +2.1600 2.1700 2.1800 2.1900 2.2000 2.2100 2.2200 2.2300 +2.2400 2.2500 2.2600 2.2700 2.2800 2.2900 2.3000 2.3100 +2.3200 2.3300 2.3400 2.3500 2.3600 2.3700 2.3800 2.3900 +2.4000 2.4100 2.4200 2.4300 2.4400 2.4500 2.4600 2.4700 +2.4800 2.4900 2.5000 2.5100 2.5200 2.5300 2.5400 2.5500 +2.5600 2.5700 2.5800 2.5900 2.6000 2.6100 2.6200 2.6300 +2.6400 2.6500 2.6600 2.6700 2.6800 2.6900 2.7000 2.7100 +2.7200 2.7300 2.7400 2.7500 2.7600 2.7700 2.7800 2.7900 +2.8000 2.8100 2.8200 2.8300 2.8400 2.8500 2.8600 2.8700 +2.8800 2.8900 2.9000 2.9100 2.9200 2.9300 2.9400 2.9500 +2.9600 2.9700 2.9800 2.9900 3.0000 3.0100 3.0200 3.0300 +3.0400 3.0500 3.0600 3.0700 3.0800 3.0900 3.1000 3.1100 +3.1200 3.1300 3.1400 3.1500 3.1600 3.1700 3.1800 3.1900 +3.2000 3.2100 3.2200 3.2300 3.2400 3.2500 3.2600 3.2700 +3.2800 3.2900 3.3000 3.3100 3.3200 3.3300 3.3400 3.3500 +3.3600 3.3700 3.3800 3.3900 3.4000 3.4100 3.4200 3.4300 +3.4400 3.4500 3.4600 3.4700 3.4800 3.4900 3.5000 3.5100 +3.5200 3.5300 3.5400 3.5500 3.5600 3.5700 3.5800 3.5900 +3.6000 3.6100 3.6200 3.6300 3.6400 3.6500 3.6600 3.6700 +3.6800 3.6900 3.7000 3.7100 3.7200 3.7300 3.7400 3.7500 +3.7600 3.7700 3.7800 3.7900 3.8000 3.8100 3.8200 3.8300 +3.8400 3.8500 3.8600 3.8700 3.8800 3.8900 3.9000 3.9100 +3.9200 3.9300 3.9400 3.9500 3.9600 3.9700 3.9800 3.9900 +4.0000 4.0100 4.0200 4.0300 4.0400 4.0500 4.0600 4.0700 +4.0800 4.0900 4.1000 4.1100 4.1200 4.1300 4.1400 4.1500 +4.1600 4.1700 4.1800 4.1900 4.2000 4.2100 4.2200 4.2300 +4.2400 4.2500 4.2600 4.2700 4.2800 4.2900 4.3000 4.3100 +4.3200 4.3300 4.3400 4.3500 4.3600 4.3700 4.3800 4.3900 +4.4000 4.4100 4.4200 4.4300 4.4400 4.4500 4.4600 4.4700 +4.4800 4.4900 4.5000 4.5100 4.5200 4.5300 4.5400 4.5500 +4.5600 4.5700 4.5800 4.5900 4.6000 4.6100 4.6200 4.6300 +4.6400 4.6500 4.6600 4.6700 4.6800 4.6900 4.7000 4.7100 +4.7200 4.7300 4.7400 4.7500 4.7600 4.7700 4.7800 4.7900 +4.8000 4.8100 4.8200 4.8300 4.8400 4.8500 4.8600 4.8700 +4.8800 4.8900 4.9000 4.9100 4.9200 4.9300 4.9400 4.9500 +4.9600 4.9700 4.9800 4.9900 5.0000 5.0100 5.0200 5.0300 +5.0400 5.0500 5.0600 5.0700 5.0800 5.0900 5.1000 5.1100 +5.1200 5.1300 5.1400 5.1500 5.1600 5.1700 5.1800 5.1900 +5.2000 5.2100 5.2200 5.2300 5.2400 5.2500 5.2600 5.2700 +5.2800 5.2900 5.3000 5.3100 5.3200 5.3300 5.3400 5.3500 +5.3600 5.3700 5.3800 5.3900 5.4000 5.4100 5.4200 5.4300 +5.4400 5.4500 5.4600 5.4700 5.4800 5.4900 5.5000 5.5100 +5.5200 5.5300 5.5400 5.5500 5.5600 5.5700 5.5800 5.5900 +5.6000 5.6100 5.6200 5.6300 5.6400 5.6500 5.6600 5.6700 +5.6800 5.6900 5.7000 5.7100 5.7200 5.7300 5.7400 5.7500 +5.7600 5.7700 5.7800 5.7900 5.8000 5.8100 5.8200 5.8300 +5.8400 5.8500 5.8600 5.8700 5.8800 5.8900 5.9000 5.9100 +5.9200 5.9300 5.9400 5.9500 5.9600 5.9700 5.9800 5.9900 +6.0000 6.0100 6.0200 6.0300 6.0400 6.0500 6.0600 6.0700 +6.0800 6.0900 6.1000 6.1100 6.1200 6.1300 6.1400 6.1500 +6.1600 6.1700 6.1800 6.1900 6.2000 6.2100 6.2200 6.2300 +6.2400 6.2500 6.2600 6.2700 6.2800 6.2900 6.3000 6.3100 +6.3200 6.3300 6.3400 6.3500 6.3600 6.3700 6.3800 6.3900 +6.4000 6.4100 6.4200 6.4300 6.4400 6.4500 6.4600 6.4700 +6.4800 6.4900 6.5000 6.5100 6.5200 6.5300 6.5400 6.5500 +6.5600 6.5700 6.5800 6.5900 6.6000 6.6100 6.6200 6.6300 +6.6400 6.6500 6.6600 6.6700 6.6800 6.6900 6.7000 6.7100 +6.7200 6.7300 6.7400 6.7500 6.7600 6.7700 6.7800 6.7900 +6.8000 6.8100 6.8200 6.8300 6.8400 6.8500 6.8600 6.8700 +6.8800 6.8900 6.9000 6.9100 6.9200 6.9300 6.9400 6.9500 +6.9600 6.9700 6.9800 6.9900 7.0000 7.0100 7.0200 7.0300 +7.0400 7.0500 7.0600 7.0700 7.0800 7.0900 7.1000 7.1100 +7.1200 7.1300 7.1400 7.1500 7.1600 7.1700 7.1800 7.1900 +7.2000 7.2100 7.2200 7.2300 7.2400 7.2500 7.2600 7.2700 +7.2800 7.2900 7.3000 7.3100 7.3200 7.3300 7.3400 7.3500 +7.3600 7.3700 7.3800 7.3900 7.4000 7.4100 7.4200 7.4300 +7.4400 7.4500 7.4600 7.4700 7.4800 7.4900 7.5000 7.5100 +7.5200 7.5300 7.5400 7.5500 7.5600 7.5700 7.5800 7.5900 +7.6000 7.6100 7.6200 7.6300 7.6400 7.6500 7.6600 7.6700 +7.6800 7.6900 7.7000 7.7100 7.7200 7.7300 7.7400 7.7500 +7.7600 7.7700 7.7800 7.7900 7.8000 7.8100 7.8200 7.8300 +7.8400 7.8500 7.8600 7.8700 7.8800 7.8900 7.9000 7.9100 +7.9200 7.9300 7.9400 7.9500 7.9600 7.9700 7.9800 7.9900 +8.0000 8.0100 8.0200 8.0300 8.0400 8.0500 8.0600 8.0700 +8.0800 8.0900 8.1000 8.1100 8.1200 8.1300 8.1400 8.1500 +8.1600 8.1700 8.1800 8.1900 8.2000 8.2100 8.2200 8.2300 +8.2400 8.2500 8.2600 8.2700 8.2800 8.2900 8.3000 8.3100 +8.3200 8.3300 8.3400 8.3500 8.3600 8.3700 8.3800 8.3900 +8.4000 8.4100 8.4200 8.4300 8.4400 8.4500 8.4600 8.4700 +8.4800 8.4900 8.5000 8.5100 8.5200 8.5300 8.5400 8.5500 +8.5600 8.5700 8.5800 8.5900 8.6000 8.6100 8.6200 8.6300 +8.6400 8.6500 8.6600 8.6700 8.6800 8.6900 8.7000 8.7100 +8.7200 8.7300 8.7400 8.7500 8.7600 8.7700 8.7800 8.7900 +8.8000 8.8100 8.8200 8.8300 8.8400 8.8500 8.8600 8.8700 +8.8800 8.8900 8.9000 8.9100 8.9200 8.9300 8.9400 8.9500 +8.9600 8.9700 8.9800 8.9900 9.0000 9.0100 9.0200 9.0300 +9.0400 9.0500 9.0600 9.0700 9.0800 9.0900 9.1000 9.1100 +9.1200 9.1300 9.1400 9.1500 9.1600 9.1700 9.1800 9.1900 +9.2000 9.2100 9.2200 9.2300 9.2400 9.2500 9.2600 9.2700 +9.2800 9.2900 9.3000 9.3100 9.3200 9.3300 9.3400 9.3500 +9.3600 9.3700 9.3800 9.3900 9.4000 9.4100 9.4200 9.4300 +9.4400 9.4500 9.4600 9.4700 9.4800 9.4900 9.5000 9.5100 +9.5200 9.5300 9.5400 9.5500 9.5600 9.5700 9.5800 9.5900 +9.6000 9.6100 9.6200 9.6300 9.6400 9.6500 9.6600 9.6700 +9.6800 9.6900 9.7000 9.7100 9.7200 9.7300 9.7400 9.7500 +9.7600 9.7700 9.7800 9.7900 9.8000 9.8100 9.8200 9.8300 +9.8400 9.8500 9.8600 9.8700 9.8800 9.8900 9.9000 9.9100 +9.9200 9.9300 9.9400 9.9500 9.9600 9.9700 9.9800 9.9900 +10.0000 10.0100 10.0200 10.0300 10.0400 10.0500 10.0600 10.0700 +10.0800 10.0900 10.1000 10.1100 10.1200 10.1300 10.1400 10.1500 +10.1600 10.1700 10.1800 10.1900 10.2000 10.2100 10.2200 10.2300 +10.2400 10.2500 10.2600 10.2700 10.2800 10.2900 10.3000 10.3100 +10.3200 10.3300 10.3400 10.3500 10.3600 10.3700 10.3800 10.3900 +10.4000 10.4100 10.4200 10.4300 10.4400 10.4500 10.4600 10.4700 +10.4800 10.4900 10.5000 10.5100 10.5200 10.5300 10.5400 10.5500 +10.5600 10.5700 10.5800 10.5900 10.6000 10.6100 10.6200 10.6300 +10.6400 10.6500 10.6600 10.6700 10.6800 10.6900 10.7000 10.7100 +10.7200 10.7300 10.7400 10.7500 10.7600 10.7700 10.7800 10.7900 +10.8000 10.8100 10.8200 10.8300 10.8400 10.8500 10.8600 10.8700 +10.8800 10.8900 10.9000 10.9100 10.9200 10.9300 10.9400 10.9500 +10.9600 10.9700 10.9800 10.9900 11.0000 11.0100 11.0200 11.0300 +11.0400 11.0500 11.0600 11.0700 11.0800 11.0900 11.1000 11.1100 +11.1200 11.1300 11.1400 11.1500 11.1600 11.1700 11.1800 11.1900 +11.2000 11.2100 11.2200 11.2300 11.2400 11.2500 11.2600 11.2700 +11.2800 11.2900 11.3000 11.3100 11.3200 11.3300 11.3400 11.3500 +11.3600 11.3700 11.3800 11.3900 11.4000 11.4100 11.4200 11.4300 +11.4400 11.4500 11.4600 11.4700 11.4800 11.4900 11.5000 11.5100 +11.5200 11.5300 11.5400 11.5500 11.5600 11.5700 11.5800 11.5900 +11.6000 11.6100 11.6200 11.6300 11.6400 11.6500 + + +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 +0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + + + +-6.3046688226E+00 -6.3029573079E+00 -6.2978339557E+00 -6.2893312660E+00 +-6.2775022316E+00 -6.2624185879E+00 -6.2441685264E+00 -6.2228540242E+00 +-6.1985879409E+00 -6.1714910416E+00 -6.1416890965E+00 -6.1093101886E+00 +-6.0744823275E+00 -6.0373314449E+00 -5.9979798065E+00 -5.9565448525E+00 +-5.9131384513E+00 -5.8678665313E+00 -5.8208290427E+00 -5.7721201943E+00 +-5.7218289052E+00 -5.6700394133E+00 -5.6168319871E+00 -5.5622836920E+00 +-5.5064691693E+00 -5.4494613946E+00 -5.3913323887E+00 -5.3321538601E+00 +-5.2719977656E+00 -5.2109367806E+00 -5.1490446725E+00 -5.0863965782E+00 +-5.0230691854E+00 -4.9591408231E+00 -4.8946914649E+00 -4.8298026532E+00 +-4.7645573512E+00 -4.6990397305E+00 -4.6333349039E+00 -4.5675286109E+00 +-4.5017068666E+00 -4.4359555809E+00 -4.3703601590E+00 -4.3050050899E+00 +-4.2399735316E+00 -4.1753469014E+00 -4.1112044755E+00 -4.0476230070E+00 +-3.9846763631E+00 -3.9224351889E+00 -3.8609665971E+00 -3.8003338858E+00 +-3.7405962840E+00 -3.6818087238E+00 -3.6240216355E+00 -3.5672807634E+00 +-3.5116269972E+00 -3.4570962161E+00 -3.4037191382E+00 -3.3515211743E+00 +-3.3005222783E+00 -3.2507367937E+00 -3.2021732914E+00 -3.1548343986E+00 +-3.1087166163E+00 -3.0638101269E+00 -3.0200985913E+00 -2.9775589381E+00 +-2.9361611455E+00 -2.8958680166E+00 -2.8566349704E+00 -2.8184097350E+00 +-2.7811343520E+00 -2.7447521134E+00 -2.7092107678E+00 -2.6744624128E+00 +-2.6404634994E+00 -2.6071747994E+00 -2.5745613652E+00 -2.5425924743E+00 +-2.5112415502E+00 -2.4804860529E+00 -2.4503073354E+00 -2.4206904587E+00 +-2.3916239656E+00 -2.3630996095E+00 -2.3351120410E+00 -2.3076584534E+00 +-2.2807381917E+00 -2.2543523318E+00 -2.2285032353E+00 -2.2031940916E+00 +-2.1784284531E+00 -2.1542097772E+00 -2.1305409829E+00 -2.1074240341E+00 +-2.0848595571E+00 -2.0628465492E+00 -2.0413818291E+00 -2.0204605559E+00 +-2.0000764964E+00 -1.9802076891E+00 -1.9607976294E+00 -1.9417695462E+00 +-1.9230947802E+00 -1.9047755973E+00 -1.8868078706E+00 -1.8691738500E+00 +-1.8518663728E+00 -1.8348767394E+00 -1.8181959221E+00 -1.8018156723E+00 +-1.7857279283E+00 -1.7699249247E+00 -1.7543991682E+00 -1.7391434264E+00 +-1.7241507160E+00 -1.7094142928E+00 -1.6949276408E+00 -1.6806844634E+00 +-1.6666786736E+00 -1.6529043858E+00 -1.6393559073E+00 -1.6260277305E+00 +-1.6129145256E+00 -1.6000111331E+00 -1.5873125577E+00 -1.5748139610E+00 +-1.5625106560E+00 -1.5503981010E+00 -1.5384718942E+00 -1.5267277679E+00 +-1.5151615841E+00 -1.5037693288E+00 -1.4925471082E+00 -1.4814911438E+00 +-1.4705977680E+00 -1.4598634206E+00 -1.4492846444E+00 -1.4388580817E+00 +-1.4285804708E+00 -1.4184486425E+00 -1.4084595168E+00 -1.3986101001E+00 +-1.3888974816E+00 -1.3793188311E+00 -1.3698713957E+00 -1.3605524977E+00 +-1.3513595315E+00 -1.3422899615E+00 -1.3333413198E+00 -1.3245112039E+00 +-1.3157972744E+00 -1.3071972531E+00 -1.2987089210E+00 -1.2903301164E+00 +-1.2820587331E+00 -1.2738927182E+00 -1.2658300712E+00 -1.2578688417E+00 +-1.2500071280E+00 -1.2422430760E+00 -1.2345748769E+00 -1.2270007667E+00 +-1.2195190242E+00 -1.2121279698E+00 -1.2048259648E+00 -1.1976114094E+00 +-1.1904827419E+00 -1.1834384378E+00 -1.1764770082E+00 -1.1695969992E+00 +-1.1627969906E+00 -1.1560755952E+00 -1.1494314576E+00 -1.1428632532E+00 +-1.1363696878E+00 -1.1299494964E+00 -1.1236014421E+00 -1.1173243161E+00 +-1.1111169362E+00 -1.1049781463E+00 -1.0989068159E+00 -1.0929018390E+00 +-1.0869621338E+00 -1.0810866418E+00 -1.0752743273E+00 -1.0695241767E+00 +-1.0638351981E+00 -1.0582064204E+00 -1.0526368932E+00 -1.0471256857E+00 +-1.0416718867E+00 -1.0362746038E+00 -1.0309329631E+00 -1.0256461086E+00 +-1.0204132015E+00 -1.0152334205E+00 -1.0101059606E+00 -1.0050300329E+00 +-1.0000048645E+00 -9.9502969780E-01 -9.9010379018E-01 -9.8522641367E-01 +-9.8039685456E-01 -9.7561441308E-01 -9.7087840305E-01 -9.6618815153E-01 +-9.6154299855E-01 -9.5694229675E-01 -9.5238541110E-01 -9.4787171863E-01 +-9.4340060811E-01 -9.3897147977E-01 -9.3458374509E-01 -9.3023682648E-01 +-9.2593015703E-01 -9.2166318031E-01 -9.1743535009E-01 -9.1324613009E-01 +-9.0909499383E-01 -9.0498142432E-01 -9.0090491390E-01 -8.9686496402E-01 +-8.9286108503E-01 -8.8889279597E-01 -8.8495962441E-01 -8.8106110625E-01 +-8.7719678552E-01 -8.7336621422E-01 -8.6956895213E-01 -8.6580456667E-01 +-8.6207263271E-01 -8.5837273242E-01 -8.5470445511E-01 -8.5106739709E-01 +-8.4746116150E-01 -8.4388535818E-01 -8.4033960354E-01 -8.3682352040E-01 +-8.3333673787E-01 -8.2987889120E-01 -8.2644962170E-01 -8.2304857656E-01 +-8.1967540876E-01 -8.1632977695E-01 -8.1301134533E-01 -8.0971978353E-01 +-8.0645476653E-01 -8.0321597450E-01 -8.0000309275E-01 -7.9681581160E-01 +-7.9365382628E-01 -7.9051683685E-01 -7.8740454808E-01 -7.8431666938E-01 +-7.8125291470E-01 -7.7821300245E-01 -7.7519665538E-01 -7.7220360055E-01 +-7.6923356920E-01 -7.6628629670E-01 -7.6336152246E-01 -7.6045898985E-01 +-7.5757844612E-01 -7.5471964236E-01 -7.5188233337E-01 -7.4906627765E-01 +-7.4627123730E-01 -7.4349697794E-01 -7.4074326868E-01 -7.3800988203E-01 +-7.3529659386E-01 -7.3260318330E-01 -7.2992943272E-01 -7.2727512766E-01 +-7.2464005675E-01 -7.2202401168E-01 -7.1942678715E-01 -7.1684818079E-01 +-7.1428799313E-01 -7.1174602752E-01 -7.0922209012E-01 -7.0671598982E-01 +-7.0422753821E-01 -7.0175654952E-01 -6.9930284057E-01 -6.9686623075E-01 +-6.9444654193E-01 -6.9204359848E-01 -6.8965722717E-01 -6.8728725715E-01 +-6.8493351994E-01 -6.8259584931E-01 -6.8027408134E-01 -6.7796805430E-01 +-6.7567760866E-01 -6.7340258704E-01 -6.7114283416E-01 -6.6889819683E-01 +-6.6666852390E-01 -6.6445366623E-01 -6.6225347664E-01 -6.6006780991E-01 +-6.5789652272E-01 -6.5573947365E-01 -6.5359652310E-01 -6.5146753330E-01 +-6.4935236828E-01 -6.4725089382E-01 -6.4516297743E-01 -6.4308848832E-01 +-6.4102729740E-01 -6.3897927720E-01 -6.3694430190E-01 -6.3492224725E-01 +-6.3291299059E-01 -6.3091641081E-01 -6.2893238833E-01 -6.2696080503E-01 +-6.2500154431E-01 -6.2305449101E-01 -6.2111953140E-01 -6.1919655314E-01 +-6.1728544530E-01 -6.1538609831E-01 -6.1349840395E-01 -6.1162225530E-01 +-6.0975754677E-01 -6.0790417403E-01 -6.0606203405E-01 -6.0423102500E-01 +-6.0241104632E-01 -6.0060199863E-01 -5.9880378373E-01 -5.9701630464E-01 +-5.9523946548E-01 -5.9347317155E-01 -5.9171732924E-01 -5.8997184607E-01 +-5.8823663062E-01 -5.8651159257E-01 -5.8479664263E-01 -5.8309169259E-01 +-5.8139665522E-01 -5.7971144432E-01 -5.7803597471E-01 -5.7637016215E-01 +-5.7471392339E-01 -5.7306717615E-01 -5.7142983906E-01 -5.6980183169E-01 +-5.6818307452E-01 -5.6657348895E-01 -5.6497299724E-01 -5.6338152254E-01 +-5.6179898888E-01 -5.6022532110E-01 -5.5866044491E-01 -5.5710428686E-01 +-5.5555677427E-01 -5.5401783531E-01 -5.5248739892E-01 -5.5096539483E-01 +-5.4945175354E-01 -5.4794640632E-01 -5.4644928518E-01 -5.4496032287E-01 +-5.4347945288E-01 -5.4200660941E-01 -5.4054172740E-01 -5.3908474244E-01 +-5.3763559087E-01 -5.3619420967E-01 -5.3476053651E-01 -5.3333450972E-01 +-5.3191606830E-01 -5.3050515188E-01 -5.2910170074E-01 -5.2770565578E-01 +-5.2631695853E-01 -5.2493555114E-01 -5.2356137635E-01 -5.2219437751E-01 +-5.2083449855E-01 -5.1948168399E-01 -5.1813587893E-01 -5.1679702902E-01 +-5.1546508049E-01 -5.1413998011E-01 -5.1282167520E-01 -5.1151011363E-01 +-5.1020524377E-01 -5.0890701455E-01 -5.0761537540E-01 -5.0633027627E-01 +-5.0505166761E-01 -5.0377950037E-01 -5.0251372600E-01 -5.0125429643E-01 +-5.0000116406E-01 -4.9875428180E-01 -4.9751360299E-01 -4.9627908145E-01 +-4.9505067145E-01 -4.9382832773E-01 -4.9261200546E-01 -4.9140166025E-01 +-4.9019724816E-01 -4.8899872565E-01 -4.8780604963E-01 -4.8661917744E-01 +-4.8543806679E-01 -4.8426267585E-01 -4.8309296316E-01 -4.8192888767E-01 +-4.8077040873E-01 -4.7961748608E-01 -4.7847007983E-01 -4.7732815048E-01 +-4.7619165892E-01 -4.7506056639E-01 -4.7393483451E-01 -4.7281442526E-01 +-4.7169930098E-01 -4.7058942436E-01 -4.6948475844E-01 -4.6838526661E-01 +-4.6729091261E-01 -4.6620166050E-01 -4.6511747469E-01 -4.6403831992E-01 +-4.6296416123E-01 -4.6189496403E-01 -4.6083069400E-01 -4.5977131717E-01 +-4.5871679987E-01 -4.5766710874E-01 -4.5662221071E-01 -4.5558207304E-01 +-4.5454666327E-01 -4.5351594922E-01 -4.5248989903E-01 -4.5146848112E-01 +-4.5045166418E-01 -4.4943941720E-01 -4.4843170943E-01 -4.4742851041E-01 +-4.4642978994E-01 -4.4543551811E-01 -4.4444566524E-01 -4.4346020196E-01 +-4.4247909911E-01 -4.4150232783E-01 -4.4052985949E-01 -4.3956166572E-01 +-4.3859771839E-01 -4.3763798963E-01 -4.3668245181E-01 -4.3573107753E-01 +-4.3478383963E-01 -4.3384071121E-01 -4.3290166557E-01 -4.3196667626E-01 +-4.3103571705E-01 -4.3010876194E-01 -4.2918578516E-01 -4.2826676114E-01 +-4.2735166455E-01 -4.2644047026E-01 -4.2553315337E-01 -4.2462968917E-01 +-4.2373005319E-01 -4.2283422113E-01 -4.2194216893E-01 -4.2105387270E-01 +-4.2016930879E-01 -4.1928845370E-01 -4.1841128418E-01 -4.1753777712E-01 +-4.1666790965E-01 -4.1580165905E-01 -4.1493900283E-01 -4.1407991865E-01 +-4.1322438437E-01 -4.1237237804E-01 -4.1152387787E-01 -4.1067886227E-01 +-4.0983730981E-01 -4.0899919925E-01 -4.0816450952E-01 -4.0733321971E-01 +-4.0650530910E-01 -4.0568075712E-01 -4.0485954337E-01 -4.0404164762E-01 +-4.0322704980E-01 -4.0241573001E-01 -4.0160766849E-01 -4.0080284567E-01 +-4.0000124210E-01 -3.9920283851E-01 -3.9840761577E-01 -3.9761555492E-01 +-3.9682663714E-01 -3.9604084375E-01 -3.9525815622E-01 -3.9447855619E-01 +-3.9370202541E-01 -3.9292854580E-01 -3.9215809940E-01 -3.9139066842E-01 +-3.9062623518E-01 -3.8986478215E-01 -3.8910629194E-01 -3.8835074729E-01 +-3.8759813108E-01 -3.8684842630E-01 -3.8610161610E-01 -3.8535768375E-01 +-3.8461661264E-01 -3.8387838630E-01 -3.8314298839E-01 -3.8241040266E-01 +-3.8168061304E-01 -3.8095360353E-01 -3.8022935828E-01 -3.7950786155E-01 +-3.7878909774E-01 -3.7807305134E-01 -3.7735970697E-01 -3.7664904936E-01 +-3.7594106336E-01 -3.7523573394E-01 -3.7453304617E-01 -3.7383298524E-01 +-3.7313553644E-01 -3.7244068519E-01 -3.7174841699E-01 -3.7105871748E-01 +-3.7037157238E-01 -3.6968696753E-01 -3.6900488886E-01 -3.6832532243E-01 +-3.6764825437E-01 -3.6697367093E-01 -3.6630155847E-01 -3.6563190342E-01 +-3.6496469234E-01 -3.6429991188E-01 -3.6363754877E-01 -3.6297758985E-01 +-3.6232002206E-01 -3.6166483243E-01 -3.6101200807E-01 -3.6036153620E-01 +-3.5971340414E-01 -3.5906759927E-01 -3.5842410909E-01 -3.5778292117E-01 +-3.5714402318E-01 -3.5650740288E-01 -3.5587304810E-01 -3.5524094677E-01 +-3.5461108692E-01 -3.5398345663E-01 -3.5335804409E-01 -3.5273483757E-01 +-3.5211382541E-01 -3.5149499605E-01 -3.5087833799E-01 -3.5026383983E-01 +-3.4965149025E-01 -3.4904127798E-01 -3.4843319187E-01 -3.4782722081E-01 +-3.4722335380E-01 -3.4662157989E-01 -3.4602188823E-01 -3.4542426801E-01 +-3.4482870853E-01 -3.4423519915E-01 -3.4364372930E-01 -3.4305428848E-01 +-3.4246686627E-01 -3.4188145232E-01 -3.4129803636E-01 -3.4071660816E-01 +-3.4013715758E-01 -3.3955967457E-01 -3.3898414910E-01 -3.3841057124E-01 +-3.3783893113E-01 -3.3726921895E-01 -3.3670142499E-01 -3.3613553955E-01 +-3.3557155304E-01 -3.3500945591E-01 -3.3444923869E-01 -3.3389089196E-01 +-3.3333440636E-01 -3.3277977262E-01 -3.3222698149E-01 -3.3167602382E-01 +-3.3112689049E-01 -3.3057957246E-01 -3.3003406075E-01 -3.2949034642E-01 +-3.2894842061E-01 -3.2840827451E-01 -3.2786989936E-01 -3.2733328647E-01 +-3.2679842721E-01 -3.2626531298E-01 -3.2573393527E-01 -3.2520428560E-01 +-3.2467635555E-01 -3.2415013677E-01 -3.2362562096E-01 -3.2310279984E-01 +-3.2258166524E-01 -3.2206220899E-01 -3.2154442300E-01 -3.2102829924E-01 +-3.2051382971E-01 -3.2000100646E-01 -3.1948982162E-01 -3.1898026733E-01 +-3.1847233582E-01 -3.1796601934E-01 -3.1746131020E-01 -3.1695820077E-01 +-3.1645668344E-01 -3.1595675067E-01 -3.1545839496E-01 -3.1496160887E-01 +-3.1446638498E-01 -3.1397271595E-01 -3.1348059446E-01 -3.1299001324E-01 +-3.1250096508E-01 -3.1201344280E-01 -3.1152743927E-01 -3.1104294741E-01 +-3.1055996017E-01 -3.1007847055E-01 -3.0959847161E-01 -3.0911995642E-01 +-3.0864291813E-01 -3.0816734989E-01 -3.0769324493E-01 -3.0722059651E-01 +-3.0674939792E-01 -3.0627964251E-01 -3.0581132364E-01 -3.0534443475E-01 +-3.0487896929E-01 -3.0441492077E-01 -3.0395228272E-01 -3.0349104872E-01 +-3.0303121239E-01 -3.0257276739E-01 -3.0211570742E-01 -3.0166002620E-01 +-3.0120571750E-01 -3.0075277514E-01 -3.0030119296E-01 -2.9985096485E-01 +-2.9940208471E-01 -2.9895454652E-01 -2.9850834425E-01 -2.9806347193E-01 +-2.9761992364E-01 -2.9717769346E-01 -2.9673677553E-01 -2.9629716402E-01 +-2.9585885313E-01 -2.9542183709E-01 -2.9498611018E-01 -2.9455166671E-01 +-2.9411850100E-01 -2.9368660743E-01 -2.9325598041E-01 -2.9282661437E-01 +-2.9239850378E-01 -2.9197164315E-01 -2.9154602700E-01 -2.9112164990E-01 +-2.9069850646E-01 -2.9027659129E-01 -2.8985589906E-01 -2.8943642446E-01 +-2.8901816220E-01 -2.8860110705E-01 -2.8818525379E-01 -2.8777059722E-01 +-2.8735713219E-01 -2.8694485356E-01 -2.8653375625E-01 -2.8612383518E-01 +-2.8571508531E-01 -2.8530750162E-01 -2.8490107914E-01 -2.8449581291E-01 +-2.8409169800E-01 -2.8368872951E-01 -2.8328690257E-01 -2.8288621234E-01 +-2.8248665400E-01 -2.8208822276E-01 -2.8169091385E-01 -2.8129472256E-01 +-2.8089964415E-01 -2.8050567396E-01 -2.8011280732E-01 -2.7972103961E-01 +-2.7933036622E-01 -2.7894078257E-01 -2.7855228411E-01 -2.7816486631E-01 +-2.7777852467E-01 -2.7739325471E-01 -2.7700905198E-01 -2.7662591205E-01 +-2.7624383051E-01 -2.7586280299E-01 -2.7548282513E-01 -2.7510389260E-01 +-2.7472600109E-01 -2.7434914632E-01 -2.7397332403E-01 -2.7359852997E-01 +-2.7322475994E-01 -2.7285200975E-01 -2.7248027523E-01 -2.7210955222E-01 +-2.7173983662E-01 -2.7137112431E-01 -2.7100341122E-01 -2.7063669329E-01 +-2.7027096650E-01 -2.6990622682E-01 -2.6954247026E-01 -2.6917969286E-01 +-2.6881789067E-01 -2.6845705975E-01 -2.6809719621E-01 -2.6773829616E-01 +-2.6738035574E-01 -2.6702337110E-01 -2.6666733841E-01 -2.6631225388E-01 +-2.6595811373E-01 -2.6560491418E-01 -2.6525265151E-01 -2.6490132198E-01 +-2.6455092189E-01 -2.6420144757E-01 -2.6385289533E-01 -2.6350526155E-01 +-2.6315854260E-01 -2.6281273486E-01 -2.6246783476E-01 -2.6212383872E-01 +-2.6178074319E-01 -2.6143854465E-01 -2.6109723957E-01 -2.6075682447E-01 +-2.6041729587E-01 -2.6007865030E-01 -2.5974088434E-01 -2.5940399455E-01 +-2.5906797753E-01 -2.5873282990E-01 -2.5839854828E-01 -2.5806512933E-01 +-2.5773256970E-01 -2.5740086608E-01 -2.5707001517E-01 -2.5674001369E-01 +-2.5641085837E-01 -2.5608254595E-01 -2.5575507321E-01 -2.5542843692E-01 +-2.5510263389E-01 -2.5477766094E-01 -2.5445351488E-01 -2.5413019258E-01 +-2.5380769090E-01 -2.5348600671E-01 -2.5316513691E-01 -2.5284507842E-01 +-2.5252582815E-01 -2.5220738305E-01 -2.5188974009E-01 -2.5157289623E-01 +-2.5125684846E-01 -2.5094159378E-01 -2.5062712922E-01 -2.5031345180E-01 +-2.5000055858E-01 -2.4968844662E-01 -2.4937711299E-01 -2.4906655478E-01 +-2.4875676912E-01 -2.4844775310E-01 -2.4813950388E-01 -2.4783201860E-01 +-2.4752529442E-01 -2.4721932852E-01 -2.4691411810E-01 -2.4660966035E-01 +-2.4630595250E-01 -2.4600299178E-01 -2.4570077543E-01 -2.4539930073E-01 +-2.4509856493E-01 -2.4479856533E-01 -2.4449929923E-01 -2.4420076393E-01 +-2.4390295678E-01 -2.4360587510E-01 -2.4330951624E-01 -2.4301387758E-01 +-2.4271895649E-01 -2.4242475037E-01 -2.4213125660E-01 -2.4183847262E-01 +-2.4154639585E-01 -2.4125502373E-01 -2.4096435371E-01 -2.4067438326E-01 +-2.4038510985E-01 -2.4009653098E-01 -2.3980864415E-01 -2.3952144687E-01 +-2.3923493667E-01 -2.3894911108E-01 -2.3866396765E-01 -2.3837950395E-01 +-2.3809571754E-01 -2.3781260601E-01 -2.3753016696E-01 -2.3724839799E-01 +-2.3696729673E-01 -2.3668686079E-01 -2.3640708782E-01 -2.3612797548E-01 +-2.3584952142E-01 -2.3557172332E-01 -2.3529457886E-01 -2.3501808575E-01 +-2.3474224168E-01 -2.3446704438E-01 -2.3419249157E-01 -2.3391858099E-01 +-2.3364531039E-01 -2.3337267752E-01 -2.3310068017E-01 -2.3282931611E-01 +-2.3255858313E-01 -2.3228847903E-01 -2.3201900163E-01 -2.3175014874E-01 +-2.3148191819E-01 -2.3121430784E-01 -2.3094731552E-01 -2.3068093911E-01 +-2.3041517647E-01 -2.3015002548E-01 -2.2988548404E-01 -2.2962155004E-01 +-2.2935822140E-01 -2.2909549603E-01 -2.2883337186E-01 -2.2857184684E-01 +-2.2831091891E-01 -2.2805058603E-01 -2.2779084617E-01 -2.2753169729E-01 +-2.2727313739E-01 -2.2701516447E-01 -2.2675777651E-01 -2.2650097155E-01 +-2.2624474759E-01 -2.2598910268E-01 -2.2573403484E-01 -2.2547954213E-01 +-2.2522562260E-01 -2.2497227432E-01 -2.2471949537E-01 -2.2446728382E-01 +-2.2421563777E-01 -2.2396455532E-01 -2.2371403458E-01 -2.2346407366E-01 +-2.2321467070E-01 -2.2296582382E-01 -2.2271753116E-01 -2.2246979088E-01 +-2.2222260114E-01 -2.2197596010E-01 -2.2172986594E-01 -2.2148431684E-01 +-2.2123931100E-01 -2.2099484660E-01 -2.2075092186E-01 -2.2050753500E-01 +-2.2026468423E-01 -2.2002236779E-01 -2.1978058392E-01 -2.1953933086E-01 +-2.1929860686E-01 -2.1905841019E-01 -2.1881873912E-01 -2.1857959192E-01 +-2.1834096688E-01 -2.1810286229E-01 -2.1786527644E-01 -2.1762820765E-01 +-2.1739165423E-01 -2.1715561451E-01 -2.1692008679E-01 -2.1668506944E-01 +-2.1645056078E-01 -2.1621655917E-01 -2.1598306296E-01 -2.1575007053E-01 +-2.1551758023E-01 -2.1528559046E-01 -2.1505409959E-01 -2.1482310602E-01 +-2.1459260814E-01 -2.1436260436E-01 -2.1413309310E-01 -2.1390407278E-01 +-2.1367554182E-01 -2.1344749865E-01 -2.1321994172E-01 -2.1299286947E-01 +-2.1276628035E-01 -2.1254017283E-01 -2.1231454537E-01 -2.1208939644E-01 +-2.1186472453E-01 -2.1164052811E-01 -2.1141680568E-01 -2.1119355574E-01 +-2.1097077680E-01 -2.1074846736E-01 -2.1052662594E-01 -2.1030525107E-01 +-2.1008434127E-01 -2.0986389508E-01 -2.0964391105E-01 -2.0942438772E-01 +-2.0920532365E-01 -2.0898671739E-01 -2.0876856751E-01 -2.0855087259E-01 +-2.0833363120E-01 -2.0811684193E-01 -2.0790050336E-01 -2.0768461410E-01 +-2.0746917275E-01 -2.0725417791E-01 -2.0703962819E-01 -2.0682552222E-01 +-2.0661185861E-01 -2.0639863601E-01 -2.0618585305E-01 -2.0597350836E-01 +-2.0576160060E-01 -2.0555012841E-01 -2.0533909046E-01 -2.0512848542E-01 +-2.0491831194E-01 -2.0470856870E-01 -2.0449925440E-01 -2.0429036770E-01 +-2.0408190730E-01 -2.0387387190E-01 -2.0366626020E-01 -2.0345907091E-01 +-2.0325230273E-01 -2.0304595439E-01 -2.0284002461E-01 -2.0263451212E-01 +-2.0242941564E-01 -2.0222473392E-01 -2.0202046571E-01 -2.0181660974E-01 +-2.0161316477E-01 -2.0141012956E-01 -2.0120750288E-01 -2.0100528349E-01 +-2.0080347016E-01 -2.0060206168E-01 -2.0040105682E-01 -2.0020045438E-01 +-2.0000025314E-01 -1.9980045191E-01 -1.9960104948E-01 -1.9940204467E-01 +-1.9920343628E-01 -1.9900522314E-01 -1.9880740406E-01 -1.9860997787E-01 +-1.9841294340E-01 -1.9821629949E-01 -1.9802004497E-01 -1.9782417870E-01 +-1.9762869951E-01 -1.9743360626E-01 -1.9723889782E-01 -1.9704457304E-01 +-1.9685063079E-01 -1.9665706994E-01 -1.9646388938E-01 -1.9627108797E-01 +-1.9607866460E-01 -1.9588661817E-01 -1.9569494757E-01 -1.9550365169E-01 +-1.9531272943E-01 -1.9512217971E-01 -1.9493200143E-01 -1.9474219352E-01 +-1.9455275487E-01 -1.9436368444E-01 -1.9417498113E-01 -1.9398664388E-01 +-1.9379867162E-01 -1.9361106331E-01 -1.9342381787E-01 -1.9323693426E-01 +-1.9305041144E-01 -1.9286424835E-01 -1.9267844395E-01 -1.9249299722E-01 +-1.9230790712E-01 -1.9212317263E-01 -1.9193879271E-01 -1.9175476635E-01 +-1.9157109253E-01 -1.9138777024E-01 -1.9120479848E-01 -1.9102217623E-01 +-1.9083990250E-01 -1.9065797629E-01 -1.9047639661E-01 -1.9029516247E-01 +-1.9011427288E-01 -1.8993372687E-01 -1.8975352344E-01 -1.8957366164E-01 +-1.8939414049E-01 -1.8921495901E-01 -1.8903611626E-01 -1.8885761127E-01 +-1.8867944308E-01 -1.8850161074E-01 -1.8832411330E-01 -1.8814694982E-01 +-1.8797011936E-01 -1.8779362098E-01 -1.8761745373E-01 -1.8744161670E-01 +-1.8726610896E-01 -1.8709092957E-01 -1.8691607763E-01 -1.8674155220E-01 +-1.8656735239E-01 -1.8639347727E-01 -1.8621992595E-01 -1.8604669751E-01 +-1.8587379106E-01 -1.8570120571E-01 -1.8552894054E-01 -1.8535699469E-01 +-1.8518536726E-01 -1.8501405736E-01 -1.8484306411E-01 -1.8467238665E-01 +-1.8450202409E-01 -1.8433197557E-01 -1.8416224021E-01 -1.8399281715E-01 +-1.8382370553E-01 -1.8365490450E-01 -1.8348641320E-01 -1.8331823077E-01 +-1.8315035637E-01 -1.8298278915E-01 -1.8281552828E-01 -1.8264857290E-01 +-1.8248192219E-01 -1.8231557531E-01 -1.8214953143E-01 -1.8198378972E-01 +-1.8181834937E-01 -1.8165320954E-01 -1.8148836943E-01 -1.8132382821E-01 +-1.8115958507E-01 -1.8099563921E-01 -1.8083198982E-01 -1.8066863609E-01 +-1.8050557722E-01 -1.8034281242E-01 -1.8018034090E-01 -1.8001816185E-01 +-1.7985627449E-01 -1.7969467804E-01 -1.7953337170E-01 -1.7937235471E-01 +-1.7921162628E-01 -1.7905118564E-01 -1.7889103201E-01 -1.7873116463E-01 +-1.7857158272E-01 -1.7841228553E-01 -1.7825327230E-01 -1.7809454226E-01 +-1.7793609466E-01 -1.7777792874E-01 -1.7762004376E-01 -1.7746243897E-01 +-1.7730511362E-01 -1.7714806698E-01 -1.7699129829E-01 -1.7683480682E-01 +-1.7667859184E-01 -1.7652265262E-01 -1.7636698843E-01 -1.7621159853E-01 +-1.7605648221E-01 -1.7590163874E-01 -1.7574706741E-01 -1.7559276749E-01 +-1.7543873828E-01 -1.7528497906E-01 -1.7513148912E-01 -1.7497826775E-01 +-1.7482531426E-01 -1.7467262794E-01 -1.7452020808E-01 -1.7436805400E-01 +-1.7421616499E-01 -1.7406454037E-01 -1.7391317945E-01 -1.7376208154E-01 +-1.7361124595E-01 -1.7346067200E-01 -1.7331035902E-01 -1.7316030631E-01 +-1.7301051322E-01 -1.7286097906E-01 -1.7271170316E-01 -1.7256268486E-01 +-1.7241392349E-01 -1.7226541839E-01 -1.7211716889E-01 -1.7196917433E-01 +-1.7182143406E-01 -1.7167394742E-01 + + + +3.3081837159E-08 3.8801090494E-02 7.8462207829E-02 1.1982095700E-01 +1.6367055110E-01 2.1073873627E-01 2.6166803749E-01 3.1699772589E-01 +3.7714787499E-01 4.4240583332E-01 5.1291539408E-01 5.8866889096E-01 +6.6950239254E-01 7.5509410808E-01 8.4496605544E-01 9.3848897886E-01 +1.0348904412E+00 1.1332659537E+00 1.2325929474E+00 1.3317473344E+00 +1.4295223563E+00 1.5246493736E+00 1.6158202077E+00 1.7017106209E+00 +1.7810044911E+00 1.8524182269E+00 1.9147249607E+00 1.9667780596E+00 +2.0075335063E+00 2.0360707209E+00 2.0516114226E+00 2.0535361672E+00 +2.0413982378E+00 2.0149346145E+00 1.9740738058E+00 1.9189403795E+00 +1.8498560953E+00 1.7673376031E+00 1.6720907368E+00 1.5650014958E+00 +1.4471238695E+00 1.3196647194E+00 1.1839659882E+00 1.0414845546E+00 +8.9377009786E-01 7.4244137177E-01 5.8916131788E-01 4.3561146729E-01 +2.8346609406E-01 1.3436658535E-01 -1.0103511855E-02 -1.4844232265E-01 +-2.7925193324E-01 -4.0125874733E-01 -5.1333155927E-01 -6.1449703963E-01 +-7.0395238082E-01 -7.8107490749E-01 -8.4542851718E-01 -8.9676688061E-01 +-9.3503339529E-01 -9.6035795203E-01 -9.7305063715E-01 -9.7359255539E-01 +-9.6262401625E-01 -9.4093037973E-01 -9.0942590527E-01 -8.6913598848E-01 +-8.2117820333E-01 -7.6674259515E-01 -7.0707165198E-01 -6.4344060068E-01 +-5.7713458898E-01 -5.0941742413E-01 -4.4150498414E-01 -3.7454481520E-01 +-3.0959747807E-01 -2.4762016412E-01 -1.8945280554E-01 -1.3580690320E-01 +-8.7257238099E-02 -4.4236572264E-02 -7.0333836752E-03 2.4207381469E-02 +4.9480616984E-02 6.8914561807E-02 8.2761694023E-02 9.1387257266E-02 +9.5255708837E-02 9.4915418924E-02 9.0981983083E-02 8.4120535523E-02 +7.5027467972E-02 6.4411967621E-02 5.2977788128E-02 4.1405659269E-02 +3.0336723901E-02 2.0357367265E-02 1.1991089572E-02 5.6303709337E-03 +1.7927863400E-03 4.1834570964E-04 2.3603889395E-05 -1.0666644658E-05 +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. + + +-5.2646526361E-08 1.0206983163E-01 2.0241542828E-01 2.9934822009E-01 +3.9125025752E-01 4.7660776023E-01 5.5404259115E-01 6.2234102695E-01 +6.8047924944E-01 7.2764504590E-01 7.6325528027E-01 7.8696877992E-01 +7.9869437185E-01 7.9859389725E-01 7.8708013162E-01 7.6480963711E-01 +7.3267067382E-01 6.9176639348E-01 6.4339363208E-01 5.8901770533E-01 +5.3024368965E-01 4.6878474215E-01 4.0642807201E-01 3.4499922375E-01 +2.8632536785E-01 2.3219831543E-01 1.8433798175E-01 1.4435701642E-01 +1.1372729806E-01 9.3748956857E-02 8.5522541380E-02 8.9924886751E-02 +1.0758917100E-01 1.3888956636E-01 1.8393080432E-01 2.4254287830E-01 +3.1428100912E-01 3.9843089591E-01 4.9401917299E-01 5.9982889151E-01 +7.1441974680E-01 8.3615267940E-01 9.6321839201E-01 1.0936692476E+00 +1.2254539469E+00 1.3564543295E+00 1.4845235988E+00 1.6075252442E+00 +1.7233719187E+00 1.8300635314E+00 1.9257238278E+00 2.0086347622E+00 +2.0772680090E+00 2.1303130160E+00 2.1667010726E+00 2.1856249439E+00 +2.1865537107E+00 2.1692425526E+00 2.1337373107E+00 2.0803737753E+00 +2.0097717468E+00 1.9228240290E+00 1.8206806136E+00 1.7047284170E+00 +1.5765670213E+00 1.4379809561E+00 1.2909091310E+00 1.1374120915E+00 +9.7963782033E-01 8.1978684334E-01 6.6007734054E-01 5.0271149271E-01 +3.4983410794E-01 2.0347178527E-01 6.5486669206E-02 -6.2453995273E-02 +-1.7890484798E-01 -2.8266490191E-01 -3.7279525691E-01 -4.4863171241E-01 +-5.0979205654E-01 -5.5617791353E-01 -5.8797113812E-01 -6.0562485176E-01 +-6.0984931987E-01 -6.0159296989E-01 -5.8201894415E-01 -5.5247766860E-01 +-5.1447599496E-01 -4.6964354086E-01 -4.1969690571E-01 -3.6640248090E-01 +-3.1153859942E-01 -2.5685778143E-01 -2.0404982968E-01 -1.5470651048E-01 +-1.1028852304E-01 -7.2095415546E-02 -4.1254952370E-02 -1.8534942205E-02 +-5.0809702026E-03 -4.6393792313E-04 3.6603198876E-05 -4.0769593284E-05 +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. + + +-1.1508020072E-06 -9.3498813445E-03 -3.7035805707E-02 -8.1984762786E-02 +-1.4246797486E-01 -2.1618707200E-01 -3.0038853355E-01 -3.9200056703E-01 +-4.8778544462E-01 -5.8449951727E-01 -6.7905271765E-01 -7.6865936672E-01 +-8.5097251617E-01 -9.2419487013E-01 -9.8716049512E-01 -1.0393829905E+00 +-1.0810674802E+00 -1.1130856168E+00 -1.1369146714E+00 -1.1545436212E+00 +-1.1683508508E+00 -1.1809595688E+00 -1.1950782283E+00 -1.2133340718E+00 +-1.2381083528E+00 -1.2713817936E+00 -1.3145984159E+00 -1.3685550525E+00 +-1.4333226427E+00 -1.5082038966E+00 -1.5917301533E+00 -1.6816983350E+00 +-1.7752469197E+00 -1.8689679002E+00 -1.9590498745E+00 -2.0414458087E+00 +-2.1120577082E+00 -2.1669294948E+00 -2.2024388606E+00 -2.2154787902E+00 +-2.2036198154E+00 -2.1652448716E+00 -2.0996498393E+00 -2.0071044102E+00 +-1.8888697489E+00 -1.7471714437E+00 -1.5851283506E+00 -1.4066400422E+00 +-1.2162375641E+00 -1.0189039939E+00 -8.1987279026E-01 -6.2441304937E-01 +-4.3761148754E-01 -2.6416121574E-01 -1.0816713890E-01 2.7022885313E-02 +1.3895312488E-01 2.2615480904E-01 2.8819606886E-01 3.2568440043E-01 +3.4022125433E-01 3.3431058917E-01 3.1122536185E-01 2.7483790537E-01 +2.2942183240E-01 1.7943444462E-01 1.2928955012E-01 8.3131043920E-02 +4.4617578972E-02 1.6715533390E-02 1.6962975496E-03 -6.6930380796E-04 +1.3110909322E-04 -1.6952663946E-05 2.8584407845E-07 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. 0. 0. +0. 0. + + +-3.4022469621E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +-1.0689678392E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 +-1.0066422427E+00 + + + + +-4.0506512033E-10 1.5528578244E-02 3.1044555847E-02 4.6535372494E-02 +6.1988550065E-02 7.7391732202E-02 9.2732723121E-02 1.0799952495E-01 +1.2318037325E-01 1.3826377047E-01 1.5323851701E-01 1.6809373973E-01 +1.8281891771E-01 1.9740390511E-01 2.1183895106E-01 2.2611471655E-01 +2.4022228826E-01 2.5415318950E-01 2.6789938825E-01 2.8145330241E-01 +2.9480780260E-01 3.0795621249E-01 3.2089230707E-01 3.3361030902E-01 +3.4610488344E-01 3.5837113132E-01 3.7040458187E-01 3.8220118421E-01 +3.9375729844E-01 4.0506968655E-01 4.1613550336E-01 4.2695228766E-01 +4.3751795373E-01 4.4783078347E-01 4.5788941927E-01 4.6769285751E-01 +4.7724044303E-01 4.8653186430E-01 4.9556714941E-01 5.0434666277E-01 +5.1287110237E-01 5.2114149755E-01 5.2915920692E-01 5.3692591647E-01 +5.4444363750E-01 5.5171470412E-01 5.5874177021E-01 5.6552780542E-01 +5.7207609020E-01 5.7839020933E-01 5.8447404407E-01 5.9033176243E-01 +5.9596780766E-01 6.0138688462E-01 6.0659394411E-01 6.1159416497E-01 +6.1639293398E-01 6.2099582376E-01 6.2540856842E-01 6.2963703741E-01 +6.3368720765E-01 6.3756513399E-01 6.4127691860E-01 6.4482867925E-01 +6.4822651703E-01 6.5147648384E-01 6.5458454995E-01 6.5755657209E-01 +6.6039826252E-01 6.6311515937E-01 6.6571259881E-01 6.6819568927E-01 +6.7056928822E-01 6.7283798177E-01 6.7500606743E-01 6.7707754021E-01 +6.7905608245E-01 6.8094505733E-01 6.8274750630E-01 6.8446615052E-01 +6.8610339610E-01 6.8766134328E-01 6.8914179933E-01 6.9054629492E-01 +6.9187610378E-01 6.9313226540E-01 6.9431561016E-01 6.9542678686E-01 +6.9646629187E-01 6.9743449966E-01 6.9833169403E-01 6.9915809971E-01 +6.9991391372E-01 7.0059933588E-01 7.0121459816E-01 7.0175999224E-01 +7.0223589485E-01 7.0264279045E-01 7.0298129097E-01 7.0325215180E-01 +7.0345628481E-01 7.0359476729E-01 7.0366882645E-01 7.0367977546E-01 +7.0362891577E-01 7.0351751187E-01 7.0334680597E-01 7.0311802818E-01 +7.0283238449E-01 7.0249106108E-01 7.0209522439E-01 7.0164602118E-01 +7.0114457901E-01 7.0059200647E-01 6.9998939352E-01 6.9933781184E-01 +6.9863831508E-01 6.9789193918E-01 6.9709970268E-01 6.9626260697E-01 +6.9538163661E-01 6.9445775960E-01 6.9349192764E-01 6.9248507644E-01 +6.9143812593E-01 6.9035198055E-01 6.8922752953E-01 6.8806564709E-01 +6.8686719273E-01 6.8563301147E-01 6.8436393406E-01 6.8306077725E-01 +6.8172434398E-01 6.8035542368E-01 6.7895479239E-01 6.7752321308E-01 +6.7606143579E-01 6.7457019790E-01 6.7305022429E-01 6.7150222756E-01 +6.6992690826E-01 6.6832495505E-01 6.6669704489E-01 6.6504384326E-01 +6.6336600433E-01 6.6166417116E-01 6.5993897583E-01 6.5819103969E-01 +6.5642097348E-01 6.5462937750E-01 6.5281684183E-01 6.5098394643E-01 +6.4913126134E-01 6.4725934683E-01 6.4536875356E-01 6.4346002272E-01 +6.4153368619E-01 6.3959026668E-01 6.3763027789E-01 6.3565422464E-01 +6.3366260303E-01 6.3165590052E-01 6.2963459615E-01 6.2759916060E-01 +6.2555005635E-01 6.2348773783E-01 6.2141265150E-01 6.1932523600E-01 +6.1722592227E-01 6.1511513366E-01 6.1299328607E-01 6.1086078802E-01 +6.0871804082E-01 6.0656543864E-01 6.0440336863E-01 6.0223221104E-01 +6.0005233930E-01 5.9786412014E-01 5.9566791372E-01 5.9346407366E-01 +5.9125294720E-01 5.8903487528E-01 5.8681019263E-01 5.8457922787E-01 +5.8234230357E-01 5.8009973642E-01 5.7785183723E-01 5.7559891106E-01 +5.7334125733E-01 5.7107916984E-01 5.6881293693E-01 5.6654284150E-01 +5.6426916112E-01 5.6199216811E-01 5.5971212962E-01 5.5742930770E-01 +5.5514395937E-01 5.5285633671E-01 5.5056668693E-01 5.4827525244E-01 +5.4598227093E-01 5.4368797542E-01 5.4139259435E-01 5.3909635165E-01 +5.3679946679E-01 5.3450215487E-01 5.3220462666E-01 5.2990708869E-01 +5.2760974330E-01 5.2531278870E-01 5.2301641905E-01 5.2072082451E-01 +5.1842619129E-01 5.1613270172E-01 5.1384053433E-01 5.1154986387E-01 +5.0926086139E-01 5.0697369429E-01 5.0468852639E-01 5.0240551796E-01 +5.0012482581E-01 4.9784660329E-01 4.9557100040E-01 4.9329816382E-01 +4.9102823694E-01 4.8876135995E-01 4.8649766987E-01 4.8423730058E-01 +4.8198038293E-01 4.7972704470E-01 4.7747741075E-01 4.7523160297E-01 +4.7298974041E-01 4.7075193925E-01 4.6851831291E-01 4.6628897206E-01 +4.6406402468E-01 4.6184357608E-01 4.5962772898E-01 4.5741658351E-01 +4.5521023731E-01 4.5300878551E-01 4.5081232080E-01 4.4862093348E-01 +4.4643471148E-01 4.4425374041E-01 4.4207810362E-01 4.3990788218E-01 +4.3774315498E-01 4.3558399874E-01 4.3343048804E-01 4.3128269538E-01 +4.2914069119E-01 4.2700454390E-01 4.2487431992E-01 4.2275008375E-01 +4.2063189794E-01 4.1851982317E-01 4.1641391827E-01 4.1431424026E-01 +4.1222084437E-01 4.1013378408E-01 4.0805311115E-01 4.0597887566E-01 +4.0391112602E-01 4.0184990901E-01 3.9979526984E-01 3.9774725212E-01 +3.9570589795E-01 3.9367124789E-01 3.9164334105E-01 3.8962221507E-01 +3.8760790618E-01 3.8560044918E-01 3.8359987754E-01 3.8160622335E-01 +3.7961951741E-01 3.7763978920E-01 3.7566706695E-01 3.7370137765E-01 +3.7174274706E-01 3.6979119975E-01 3.6784675912E-01 3.6590944742E-01 +3.6397928579E-01 3.6205629424E-01 3.6014049174E-01 3.5823189616E-01 +3.5633052437E-01 3.5443639222E-01 3.5254951455E-01 3.5066990524E-01 +3.4879757722E-01 3.4693254249E-01 3.4507481212E-01 3.4322439631E-01 +3.4138130438E-01 3.3954554479E-01 3.3771712516E-01 3.3589605231E-01 +3.3408233223E-01 3.3227597016E-01 3.3047697055E-01 3.2868533711E-01 +3.2690107282E-01 3.2512417994E-01 3.2335466003E-01 3.2159251398E-01 +3.1983774198E-01 3.1809034360E-01 3.1635031775E-01 3.1461766274E-01 +3.1289237623E-01 3.1117445533E-01 3.0946389654E-01 3.0776069581E-01 +3.0606484852E-01 3.0437634952E-01 3.0269519314E-01 3.0102137317E-01 +2.9935488291E-01 2.9769571518E-01 2.9604386231E-01 2.9439931618E-01 +2.9276206817E-01 2.9113210928E-01 2.8950943002E-01 2.8789402052E-01 +2.8628587047E-01 2.8468496918E-01 2.8309130555E-01 2.8150486812E-01 +2.7992564504E-01 2.7835362412E-01 2.7678879279E-01 2.7523113818E-01 +2.7368064704E-01 2.7213730583E-01 2.7060110068E-01 2.6907201742E-01 +2.6755004156E-01 2.6603515836E-01 2.6452735277E-01 2.6302660946E-01 +2.6153291285E-01 2.6004624710E-01 2.5856659611E-01 2.5709394354E-01 +2.5562827281E-01 2.5416956711E-01 2.5271780941E-01 2.5127298246E-01 +2.4983506880E-01 2.4840405076E-01 2.4697991049E-01 2.4556262993E-01 +2.4415219083E-01 2.4274857479E-01 2.4135176319E-01 2.3996173729E-01 +2.3857847815E-01 2.3720196669E-01 2.3583218366E-01 2.3446910969E-01 +2.3311272524E-01 2.3176301065E-01 2.3041994611E-01 2.2908351169E-01 +2.2775368735E-01 2.2643045291E-01 2.2511378807E-01 2.2380367245E-01 +2.2250008552E-01 2.2120300669E-01 2.1991241525E-01 2.1862829038E-01 +2.1735061119E-01 2.1607935671E-01 2.1481450586E-01 2.1355603749E-01 +2.1230393038E-01 2.1105816322E-01 2.0981871466E-01 2.0858556324E-01 +2.0735868747E-01 2.0613806579E-01 2.0492367657E-01 2.0371549814E-01 +2.0251350876E-01 2.0131768666E-01 2.0012801000E-01 1.9894445693E-01 +1.9776700552E-01 1.9659563382E-01 1.9543031985E-01 1.9427104158E-01 +1.9311777694E-01 1.9197050386E-01 1.9082920023E-01 1.8969384389E-01 +1.8856441269E-01 1.8744088445E-01 1.8632323696E-01 1.8521144799E-01 +1.8410549531E-01 1.8300535668E-01 1.8191100982E-01 1.8082243247E-01 +1.7973960235E-01 1.7866249716E-01 1.7759109462E-01 1.7652537244E-01 +1.7546530831E-01 1.7441087993E-01 1.7336206502E-01 1.7231884128E-01 +1.7128118642E-01 1.7024907816E-01 1.6922249422E-01 1.6820141235E-01 +1.6718581027E-01 1.6617566575E-01 1.6517095654E-01 1.6417166044E-01 +1.6317775524E-01 1.6218921873E-01 1.6120602877E-01 1.6022816318E-01 +1.5925559983E-01 1.5828831661E-01 1.5732629143E-01 1.5636950221E-01 +1.5541792691E-01 1.5447154350E-01 1.5353032999E-01 1.5259426439E-01 +1.5166332477E-01 1.5073748921E-01 1.4981673583E-01 1.4890104275E-01 +1.4799038816E-01 1.4708475026E-01 1.4618410727E-01 1.4528843748E-01 +1.4439771918E-01 1.4351193070E-01 1.4263105043E-01 1.4175505676E-01 +1.4088392814E-01 1.4001764304E-01 1.3915618000E-01 1.3829951755E-01 +1.3744763431E-01 1.3660050890E-01 1.3575812000E-01 1.3492044632E-01 +1.3408746663E-01 1.3325915973E-01 1.3243550445E-01 1.3161647968E-01 +1.3080206436E-01 1.2999223745E-01 1.2918697798E-01 1.2838626500E-01 +1.2759007763E-01 1.2679839502E-01 1.2601119637E-01 1.2522846094E-01 +1.2445016802E-01 1.2367629695E-01 1.2290682713E-01 1.2214173800E-01 +1.2138100905E-01 1.2062461982E-01 1.1987254991E-01 1.1912477895E-01 +1.1838128663E-01 1.1764205270E-01 1.1690705696E-01 1.1617627924E-01 +1.1544969946E-01 1.1472729755E-01 1.1400905354E-01 1.1329494746E-01 +1.1258495944E-01 1.1187906964E-01 1.1117725829E-01 1.1047950564E-01 +1.0978579204E-01 1.0909609786E-01 1.0841040355E-01 1.0772868960E-01 +1.0705093656E-01 1.0637712503E-01 1.0570723569E-01 1.0504124925E-01 +1.0437914649E-01 1.0372090823E-01 1.0306651539E-01 1.0241594889E-01 +1.0176918975E-01 1.0112621903E-01 1.0048701786E-01 9.9851567417E-02 +9.9219848941E-02 9.8591843732E-02 9.7967533146E-02 9.7346898602E-02 +9.6729921576E-02 9.6116583603E-02 9.5506866280E-02 9.4900751263E-02 +9.4298220267E-02 9.3699255067E-02 9.3103837502E-02 9.2511949466E-02 +9.1923572919E-02 9.1338689877E-02 9.0757282421E-02 9.0179332691E-02 +8.9604822887E-02 8.9033735273E-02 8.8466052173E-02 8.7901755973E-02 +8.7340829119E-02 8.6783254122E-02 8.6229013551E-02 8.5678090039E-02 +8.5130466282E-02 8.4586125036E-02 8.4045049120E-02 8.3507221416E-02 +8.2972624867E-02 8.2441242479E-02 8.1913057321E-02 8.1388052524E-02 +8.0866211282E-02 8.0347516851E-02 7.9831952549E-02 7.9319501759E-02 +7.8810147926E-02 7.8303874556E-02 7.7800665221E-02 7.7300503553E-02 +7.6803373249E-02 7.6309258067E-02 7.5818141830E-02 7.5330008423E-02 +7.4844841795E-02 7.4362625956E-02 7.3883344981E-02 7.3406983007E-02 +7.2933524235E-02 7.2462952928E-02 7.1995253412E-02 7.1530410079E-02 +7.1068407379E-02 7.0609229830E-02 7.0152862009E-02 6.9699288559E-02 +6.9248494185E-02 6.8800463654E-02 6.8355181797E-02 6.7912633508E-02 +6.7472803743E-02 6.7035677522E-02 6.6601239927E-02 6.6169476103E-02 +6.5740371258E-02 6.5313910662E-02 6.4890079648E-02 6.4468863611E-02 +6.4050248011E-02 6.3634218368E-02 6.3220760264E-02 6.2809859346E-02 +6.2401501320E-02 6.1995671957E-02 6.1592357090E-02 6.1191542611E-02 +6.0793214478E-02 6.0397358708E-02 6.0003961382E-02 5.9613008642E-02 +5.9224486690E-02 5.8838381792E-02 5.8454680274E-02 5.8073368525E-02 +5.7694432994E-02 5.7317860192E-02 5.6943636689E-02 5.6571749120E-02 +5.6202184178E-02 5.5834928618E-02 5.5469969254E-02 5.5107292963E-02 +5.4746886682E-02 5.4388737407E-02 5.4032832197E-02 5.3679158167E-02 +5.3327702496E-02 5.2978452421E-02 5.2631395240E-02 5.2286518310E-02 +5.1943809047E-02 5.1603254927E-02 5.1264843486E-02 5.0928562319E-02 +5.0594399080E-02 5.0262341481E-02 4.9932377293E-02 4.9604494348E-02 +4.9278680533E-02 4.8954923797E-02 4.8633212144E-02 4.8313533638E-02 +4.7995876402E-02 4.7680228613E-02 4.7366578511E-02 4.7054914388E-02 +4.6745224598E-02 4.6437497551E-02 4.6131721711E-02 4.5827885604E-02 +4.5525977809E-02 4.5225986964E-02 4.4927901761E-02 4.4631710951E-02 +4.4337403340E-02 4.4044967789E-02 4.3754393217E-02 4.3465668598E-02 +4.3178782960E-02 4.2893725389E-02 4.2610485023E-02 4.2329051059E-02 +4.2049412744E-02 4.1771559385E-02 4.1495480341E-02 4.1221165023E-02 +4.0948602902E-02 4.0677783497E-02 4.0408696384E-02 4.0141331194E-02 +3.9875677609E-02 3.9611725364E-02 3.9349464250E-02 3.9088884109E-02 +3.8829974836E-02 3.8572726380E-02 3.8317128739E-02 3.8063171969E-02 +3.7810846172E-02 3.7560141506E-02 3.7311048180E-02 3.7063556454E-02 +3.6817656639E-02 3.6573339099E-02 3.6330594247E-02 3.6089412548E-02 +3.5849784517E-02 3.5611700721E-02 3.5375151776E-02 3.5140128348E-02 +3.4906621154E-02 3.4674620960E-02 3.4444118581E-02 3.4215104884E-02 +3.3987570781E-02 3.3761507238E-02 3.3536905265E-02 3.3313755924E-02 +3.3092050324E-02 3.2871779623E-02 3.2652935027E-02 3.2435507790E-02 +3.2219489212E-02 3.2004870643E-02 3.1791643479E-02 3.1579799164E-02 +3.1369329188E-02 3.1160225087E-02 3.0952478447E-02 3.0746080897E-02 +3.0541024114E-02 3.0337299820E-02 3.0134899783E-02 2.9933815817E-02 +2.9734039782E-02 2.9535563582E-02 2.9338379168E-02 2.9142478533E-02 +2.8947853717E-02 2.8754496804E-02 2.8562399922E-02 2.8371555244E-02 +2.8181954985E-02 2.7993591406E-02 2.7806456810E-02 2.7620543544E-02 +2.7435843999E-02 2.7252350607E-02 2.7070055844E-02 2.6888952230E-02 +2.6709032325E-02 2.6530288732E-02 2.6352714096E-02 2.6176301106E-02 +2.6001042489E-02 2.5826931017E-02 2.5653959501E-02 2.5482120793E-02 +2.5311407787E-02 2.5141813419E-02 2.4973330663E-02 2.4805952534E-02 +2.4639672088E-02 2.4474482421E-02 2.4310376669E-02 2.4147348006E-02 +2.3985389646E-02 2.3824494845E-02 2.3664656894E-02 2.3505869126E-02 +2.3348124911E-02 2.3191417658E-02 2.3035740814E-02 2.2881087866E-02 +2.2727452336E-02 2.2574827786E-02 2.2423207815E-02 2.2272586060E-02 +2.2122956193E-02 2.1974311927E-02 2.1826647008E-02 2.1679955221E-02 +2.1534230387E-02 2.1389466363E-02 2.1245657042E-02 2.1102796355E-02 +2.0960878266E-02 2.0819896776E-02 2.0679845923E-02 2.0540719776E-02 +2.0402512444E-02 2.0265218069E-02 2.0128830826E-02 1.9993344927E-02 +1.9858754617E-02 1.9725054177E-02 1.9592237920E-02 1.9460300195E-02 +1.9329235382E-02 1.9199037897E-02 1.9069702188E-02 1.8941222738E-02 +1.8813594060E-02 1.8686810703E-02 1.8560867247E-02 1.8435758305E-02 +1.8311478523E-02 1.8188022577E-02 1.8065385177E-02 1.7943561065E-02 +1.7822545014E-02 1.7702331828E-02 1.7582916345E-02 1.7464293430E-02 +1.7346457982E-02 1.7229404931E-02 1.7113129236E-02 1.6997625888E-02 +1.6882889908E-02 1.6768916347E-02 1.6655700286E-02 1.6543236836E-02 +1.6431521138E-02 1.6320548364E-02 1.6210313711E-02 1.6100812411E-02 +1.5992039721E-02 1.5883990929E-02 1.5776661350E-02 1.5670046330E-02 +1.5564141241E-02 1.5458941486E-02 1.5354442494E-02 1.5250639724E-02 +1.5147528661E-02 1.5045104818E-02 1.4943363737E-02 1.4842300986E-02 +1.4741912161E-02 1.4642192885E-02 1.4543138808E-02 1.4444745607E-02 +1.4347008985E-02 1.4249924673E-02 1.4153488426E-02 1.4057696028E-02 +1.3962543287E-02 1.3868026039E-02 1.3774140142E-02 1.3680881485E-02 +1.3588245978E-02 1.3496229560E-02 1.3404828191E-02 1.3314037860E-02 +1.3223854579E-02 1.3134274386E-02 1.3045293342E-02 1.2956907535E-02 +1.2869113074E-02 1.2781906095E-02 1.2695282758E-02 1.2609239246E-02 +1.2523771766E-02 1.2438876549E-02 1.2354549849E-02 1.2270787944E-02 +1.2187587137E-02 1.2104943750E-02 1.2022854132E-02 1.1941314653E-02 +1.1860321706E-02 1.1779871707E-02 1.1699961095E-02 1.1620586331E-02 +1.1541743896E-02 1.1463430298E-02 1.1385642063E-02 1.1308375739E-02 +1.1231627899E-02 1.1155395135E-02 1.1079674059E-02 1.1004461309E-02 +1.0929753541E-02 1.0855547433E-02 1.0781839682E-02 1.0708627010E-02 +1.0635906157E-02 1.0563673884E-02 1.0491926972E-02 1.0420662224E-02 +1.0349876462E-02 1.0279566528E-02 1.0209729286E-02 1.0140361618E-02 +1.0071460425E-02 1.0003022631E-02 9.9350451770E-03 9.8675250238E-03 +9.8004591520E-03 9.7338445614E-03 9.6676782708E-03 9.6019573181E-03 +9.5366787599E-03 9.4718396718E-03 9.4074371480E-03 9.3434683014E-03 +9.2799302630E-03 9.2168201825E-03 9.1541352276E-03 9.0918725843E-03 +9.0300294566E-03 8.9686030662E-03 8.9075906529E-03 8.8469894739E-03 +8.7867968042E-03 8.7270099362E-03 8.6676261798E-03 8.6086428619E-03 +8.5500573269E-03 8.4918669359E-03 8.4340690674E-03 8.3766611164E-03 +8.3196404949E-03 8.2630046313E-03 8.2067509708E-03 8.1508769749E-03 +8.0953801216E-03 8.0402579050E-03 7.9855078355E-03 7.9311274394E-03 +7.8771142592E-03 7.8234658531E-03 7.7701797950E-03 7.7172536747E-03 +7.6646850974E-03 7.6124716838E-03 7.5606110701E-03 7.5091009077E-03 +7.4579388632E-03 7.4071226183E-03 7.3566498698E-03 7.3065183293E-03 +7.2567257235E-03 7.2072697934E-03 7.1581482950E-03 7.1093589988E-03 +7.0608996897E-03 7.0127681669E-03 6.9649622442E-03 6.9174797493E-03 +6.8703185241E-03 6.8234764246E-03 6.7769513207E-03 6.7307410961E-03 +6.6848436485E-03 6.6392568889E-03 6.5939787423E-03 6.5490071469E-03 +6.5043400546E-03 6.4599754304E-03 6.4159112528E-03 6.3721455134E-03 +6.3286762167E-03 6.2855013806E-03 6.2426190357E-03 6.2000272254E-03 +6.1577240060E-03 6.1157074467E-03 6.0739756288E-03 6.0325266467E-03 +5.9913586069E-03 5.9504696285E-03 5.9098578426E-03 5.8695213929E-03 +5.8294584351E-03 5.7896671370E-03 5.7501456782E-03 5.7108922506E-03 +5.6719050577E-03 5.6331823149E-03 5.5947222491E-03 5.5565230991E-03 +5.5185831150E-03 5.4809005587E-03 5.4434737032E-03 5.4063008331E-03 +5.3693802440E-03 5.3327102430E-03 5.2962891480E-03 5.2601152882E-03 +5.2241870038E-03 5.1885026458E-03 5.1530605759E-03 5.1178591670E-03 +5.0828968025E-03 5.0481718762E-03 5.0136827928E-03 4.9794279675E-03 +4.9454058258E-03 4.9116148035E-03 4.8780533471E-03 4.8447199129E-03 +4.8116129676E-03 4.7787309881E-03 4.7460724611E-03 4.7136358834E-03 +4.6814197619E-03 4.6494226132E-03 4.6176429636E-03 4.5860793493E-03 +4.5547303161E-03 4.5235944194E-03 4.4926702244E-03 4.4619563053E-03 +4.4314512461E-03 4.4011536401E-03 4.3710620899E-03 4.3411752072E-03 +4.3114916132E-03 4.2820099379E-03 4.2527288206E-03 4.2236469095E-03 +4.1947628619E-03 4.1660753437E-03 4.1375830300E-03 4.1092846045E-03 +4.0811787595E-03 4.0532641964E-03 4.0255396246E-03 3.9980037627E-03 +3.9706553374E-03 3.9434930839E-03 3.9165157460E-03 3.8897220755E-03 +3.8631108329E-03 3.8366807866E-03 3.8104307134E-03 3.7843593981E-03 +3.7584656336E-03 3.7327482208E-03 3.7072059688E-03 3.6818376943E-03 +3.6566422220E-03 3.6316183845E-03 3.6067650221E-03 3.5820809828E-03 +3.5575651223E-03 3.5332163039E-03 3.5090333986E-03 3.4850152847E-03 +3.4611608480E-03 3.4374689820E-03 3.4139385872E-03 3.3905685718E-03 +3.3673578509E-03 3.3443053471E-03 3.3214099902E-03 3.2986707169E-03 +3.2760864712E-03 3.2536562042E-03 3.2313788737E-03 3.2092534448E-03 +3.1872788893E-03 3.1654541859E-03 3.1437783202E-03 3.1222502846E-03 +3.1008690780E-03 3.0796337062E-03 3.0585431816E-03 3.0375965232E-03 +3.0167927565E-03 2.9961309137E-03 2.9756100332E-03 2.9552291600E-03 +2.9349873455E-03 2.9148836474E-03 2.8949171297E-03 2.8750868627E-03 +2.8553919229E-03 2.8358313929E-03 2.8164043616E-03 2.7971099240E-03 +2.7779471810E-03 2.7589152396E-03 2.7400132128E-03 2.7212402197E-03 +2.7025953849E-03 2.6840778392E-03 2.6656867193E-03 2.6474211673E-03 +2.6292803314E-03 2.6112633654E-03 2.5933694288E-03 2.5755976866E-03 +2.5579473096E-03 2.5404174740E-03 2.5230073618E-03 2.5057161600E-03 +2.4885430616E-03 2.4714872647E-03 2.4545479728E-03 2.4377243949E-03 +2.4210157452E-03 2.4044212432E-03 2.3879401136E-03 2.3715715864E-03 +2.3553148967E-03 2.3391692849E-03 2.3231339962E-03 2.3072082811E-03 +2.2913913952E-03 2.2756825989E-03 2.2600811577E-03 2.2445863420E-03 +2.2291974272E-03 2.2139136934E-03 2.1987344257E-03 2.1836589140E-03 +2.1686864528E-03 2.1538163416E-03 2.1390478845E-03 2.1243803902E-03 +2.1098131723E-03 2.0953455487E-03 2.0809768422E-03 2.0667063799E-03 +2.0525334936E-03 2.0384575195E-03 2.0244777985E-03 2.0105936757E-03 +1.9968045006E-03 1.9831096273E-03 1.9695084140E-03 1.9560002235E-03 +1.9425844226E-03 1.9292603827E-03 1.9160274791E-03 1.9028850916E-03 +1.8898326040E-03 1.8768694044E-03 1.8639948848E-03 1.8512084416E-03 +1.8385094750E-03 1.8258973895E-03 1.8133715934E-03 1.8009314992E-03 +1.7885765232E-03 1.7763060856E-03 1.7641196108E-03 1.7520165268E-03 +1.7399962656E-03 1.7280582630E-03 1.7162019586E-03 1.7044267958E-03 +1.6927322218E-03 1.6811176875E-03 1.6695826474E-03 1.6581265600E-03 +1.6467488872E-03 1.6354490945E-03 1.6242266513E-03 1.6130810302E-03 +1.6020117077E-03 1.5910181636E-03 1.5800998815E-03 1.5692563481E-03 +1.5584870541E-03 1.5477914930E-03 1.5371691624E-03 1.5266195627E-03 +1.5161421981E-03 1.5057365760E-03 1.4954022071E-03 1.4851386055E-03 +1.4749452884E-03 1.4648217767E-03 1.4547675940E-03 1.4447822675E-03 +1.4348653275E-03 1.4250163074E-03 1.4152347439E-03 1.4055201767E-03 +1.3958721488E-03 1.3862902061E-03 1.3767738977E-03 1.3673227757E-03 +1.3579363952E-03 1.3486143144E-03 1.3393560946E-03 1.3301612998E-03 +1.3210294971E-03 1.3119602565E-03 1.3029531511E-03 1.2940077566E-03 +1.2851236518E-03 1.2763004182E-03 1.2675376403E-03 1.2588349052E-03 +1.2501918032E-03 1.2416079268E-03 1.2330828718E-03 1.2246162364E-03 +1.2162076217E-03 1.2078566315E-03 1.1995628722E-03 1.1913259529E-03 +1.1831454854E-03 1.1750210841E-03 1.1669523660E-03 1.1589389508E-03 +1.1509804606E-03 1.1430765203E-03 + + + +0.0000000000E+00 2.4113674229E-04 9.6376444773E-04 2.1655408931E-03 +3.8425803392E-03 5.9894802133E-03 8.5993579374E-03 1.1663897389E-02 +1.5173404353E-02 1.9116870224E-02 2.3482043094E-02 2.8255505335E-02 +3.3422756672E-02 3.8968301752E-02 4.4875741187E-02 5.1127865039E-02 +5.7706747775E-02 6.4593843734E-02 7.1770082223E-02 7.9215961437E-02 +8.6911640472E-02 9.4837028809E-02 1.0297187274E-01 1.1129583828E-01 +1.1978859034E-01 1.2842986776E-01 1.3719955427E-01 1.4607774521E-01 +1.5504481007E-01 1.6408145096E-01 1.7316875716E-01 1.8228825594E-01 +1.9142195983E-01 2.0055241063E-01 2.0966272028E-01 2.1873660897E-01 +2.2775844047E-01 2.3671325498E-01 2.4558679957E-01 2.5436555624E-01 +2.6303676765E-01 2.7158846047E-01 2.8000946627E-01 2.8828943978E-01 +2.9641887441E-01 3.0438911474E-01 3.1219236577E-01 3.1982169871E-01 +3.2727105298E-01 3.3453523425E-01 3.4160990819E-01 3.4849158973E-01 +3.5517762776E-01 3.6166618499E-01 3.6795621304E-01 3.7404742262E-01 +3.7994024907E-01 3.8563581313E-01 3.9113587745E-01 3.9644279888E-01 +4.0155947714E-01 4.0648930008E-01 4.1123608633E-01 4.1580402558E-01 +4.2019761738E-01 4.2442160900E-01 4.2848093304E-01 4.3238064550E-01 +4.3612586514E-01 4.3972171459E-01 4.4317326421E-01 4.4648547915E-01 +4.4966317030E-01 4.5271094972E-01 4.5563319107E-01 4.5843399546E-01 +4.6111716312E-01 4.6368617110E-01 4.6614415736E-01 4.6849391121E-01 +4.7073787014E-01 4.7287812304E-01 4.7491641958E-01 4.7685418542E-01 +4.7869254299E-01 4.8043233733E-01 4.8207416651E-01 4.8361841588E-01 +4.8506529572E-01 4.8641488132E-01 4.8766715488E-01 4.8882204840E-01 +4.8987948662E-01 4.9083942943E-01 4.9170191267E-01 4.9246708671E-01 +4.9313525202E-01 4.9370689098E-01 4.9418269545E-01 4.9456358899E-01 +4.9485074465E-01 4.9504559656E-01 4.9514981734E-01 4.9516522635E-01 +4.9509365106E-01 4.9493688953E-01 4.9469672946E-01 4.9437496155E-01 +4.9397336069E-01 4.9349369090E-01 4.9293770411E-01 4.9230713904E-01 +4.9160372068E-01 4.9082915952E-01 4.8998515104E-01 4.8907337507E-01 +4.8809549530E-01 4.8705315878E-01 4.8594799547E-01 4.8478161786E-01 +4.8355562053E-01 4.8227157986E-01 4.8093105371E-01 4.7953558109E-01 +4.7808668199E-01 4.7658585705E-01 4.7503458746E-01 4.7343433470E-01 +4.7178654046E-01 4.7009262642E-01 4.6835399425E-01 4.6657202541E-01 +4.6474808118E-01 4.6288350253E-01 4.6097961011E-01 4.5903770426E-01 +4.5705906496E-01 4.5504495189E-01 4.5299660441E-01 4.5091524162E-01 +4.4880206242E-01 4.4665824554E-01 4.4448494966E-01 4.4228331346E-01 +4.4005445571E-01 4.3779947540E-01 4.3551945182E-01 4.3321544473E-01 +4.3088849442E-01 4.2853962189E-01 4.2616982898E-01 4.2378009851E-01 +4.2137139445E-01 4.1894466206E-01 4.1650082808E-01 4.1404080084E-01 +4.1156547051E-01 4.0907570923E-01 4.0657237128E-01 4.0405629331E-01 +4.0152829447E-01 3.9898917666E-01 3.9643972467E-01 3.9388070638E-01 +3.9131287300E-01 3.8873695923E-01 3.8615368345E-01 3.8356374795E-01 +3.8096783912E-01 3.7836662766E-01 3.7576076876E-01 3.7315090234E-01 +3.7053765322E-01 3.6792163135E-01 3.6530343201E-01 3.6268363601E-01 +3.6006280990E-01 3.5744150616E-01 3.5482026343E-01 3.5219960672E-01 +3.4958004757E-01 3.4696208430E-01 3.4434620218E-01 3.4173287365E-01 +3.3912255853E-01 3.3651570420E-01 3.3391274579E-01 3.3131410642E-01 +3.2872019735E-01 3.2613141823E-01 3.2354815722E-01 3.2097079125E-01 +3.1839968619E-01 3.1583519702E-01 3.1327766805E-01 3.1072743308E-01 +3.0818481562E-01 3.0565012904E-01 3.0312367676E-01 3.0060575244E-01 +2.9809664017E-01 2.9559661461E-01 2.9310594122E-01 2.9062487636E-01 +2.8815366754E-01 2.8569255356E-01 2.8324176464E-01 2.8080152264E-01 +2.7837204122E-01 2.7595352597E-01 2.7354617460E-01 2.7115017708E-01 +2.6876571581E-01 2.6639296579E-01 2.6403209472E-01 2.6168326322E-01 +2.5934662494E-01 2.5702232670E-01 2.5471050867E-01 2.5241130448E-01 +2.5012484139E-01 2.4785124041E-01 2.4559061644E-01 2.4334307843E-01 +2.4110872947E-01 2.3888766698E-01 2.3667998279E-01 2.3448576328E-01 +2.3230508952E-01 2.3013803742E-01 2.2798467778E-01 2.2584507647E-01 +2.2371929453E-01 2.2160738831E-01 2.1950940953E-01 2.1742540547E-01 +2.1535541900E-01 2.1329948876E-01 2.1125764924E-01 2.0922993087E-01 +2.0721636015E-01 2.0521695975E-01 2.0323174858E-01 2.0126074195E-01 +1.9930395161E-01 1.9736138587E-01 1.9543304970E-01 1.9351894480E-01 +1.9161906973E-01 1.8973341996E-01 1.8786198796E-01 1.8600476333E-01 +1.8416173284E-01 1.8233288051E-01 1.8051818773E-01 1.7871763331E-01 +1.7693119356E-01 1.7515884238E-01 1.7340055133E-01 1.7165628968E-01 +1.6992602453E-01 1.6820972084E-01 1.6650734152E-01 1.6481884748E-01 +1.6314419772E-01 1.6148334937E-01 1.5983625779E-01 1.5820287657E-01 +1.5658315767E-01 1.5497705142E-01 1.5338450659E-01 1.5180547048E-01 +1.5023988893E-01 1.4868770641E-01 1.4714886605E-01 1.4562330970E-01 +1.4411097800E-01 1.4261181039E-01 1.4112574519E-01 1.3965271966E-01 +1.3819266999E-01 1.3674553141E-01 1.3531123820E-01 1.3388972371E-01 +1.3248092048E-01 1.3108476020E-01 1.2970117379E-01 1.2833009143E-01 +1.2697144260E-01 1.2562515613E-01 1.2429116021E-01 1.2296938244E-01 +1.2165974988E-01 1.2036218904E-01 1.1907662596E-01 1.1780298622E-01 +1.1654119498E-01 1.1529117699E-01 1.1405285663E-01 1.1282615796E-01 +1.1161100471E-01 1.1040732035E-01 1.0921502806E-01 1.0803405083E-01 +1.0686431141E-01 1.0570573238E-01 1.0455823617E-01 1.0342174505E-01 +1.0229618120E-01 1.0118146669E-01 1.0007752354E-01 9.8984273705E-02 +9.7901639104E-02 9.6829541650E-02 9.5767903264E-02 9.4716645886E-02 +9.3675691501E-02 9.2644962150E-02 9.1624379948E-02 9.0613867102E-02 +8.9613345922E-02 8.8622738837E-02 8.7641968414E-02 8.6670957364E-02 +8.5709628561E-02 8.4757905053E-02 8.3815710072E-02 8.2882967051E-02 +8.1959599631E-02 8.1045531675E-02 8.0140687277E-02 7.9244990773E-02 +7.8358366751E-02 7.7480740059E-02 7.6612035816E-02 7.5752179423E-02 +7.4901096565E-02 7.4058713225E-02 7.3224955690E-02 7.2399750556E-02 +7.1583024741E-02 7.0774705485E-02 6.9974720363E-02 6.9182997284E-02 +6.8399464505E-02 6.7624050632E-02 6.6856684624E-02 6.6097295804E-02 +6.5345813858E-02 6.4602168844E-02 6.3866291192E-02 6.3138111713E-02 +6.2417561600E-02 6.1704572434E-02 6.0999076185E-02 6.0301005216E-02 +5.9610292287E-02 5.8926870560E-02 5.8250673596E-02 5.7581635363E-02 +5.6919690236E-02 5.6264773000E-02 5.5616818851E-02 5.4975763399E-02 +5.4341542669E-02 5.3714093104E-02 5.3093351564E-02 5.2479255330E-02 +5.1871742102E-02 5.1270750003E-02 5.0676217580E-02 5.0088083800E-02 +4.9506288058E-02 4.8930770170E-02 4.8361470380E-02 4.7798329354E-02 +4.7241288187E-02 4.6690288396E-02 4.6145271926E-02 4.5606181147E-02 +4.5072958853E-02 4.4545548263E-02 4.4023893020E-02 4.3507937193E-02 +4.2997625271E-02 4.2492902168E-02 4.1993713219E-02 4.1500004181E-02 +4.1011721230E-02 4.0528810961E-02 4.0051220388E-02 3.9578896943E-02 +3.9111788473E-02 3.8649843239E-02 3.8193009917E-02 3.7741237595E-02 +3.7294475771E-02 3.6852674354E-02 3.6415783659E-02 3.5983754410E-02 +3.5556537735E-02 3.5134085163E-02 3.4716348630E-02 3.4303280466E-02 +3.3894833405E-02 3.3490960574E-02 3.3091615495E-02 3.2696752086E-02 +3.2306324653E-02 3.1920287893E-02 3.1538596890E-02 3.1161207114E-02 +3.0788074419E-02 3.0419155038E-02 3.0054405588E-02 2.9693783059E-02 +2.9337244821E-02 2.8984748614E-02 2.8636252551E-02 2.8291715115E-02 +2.7951095155E-02 2.7614351886E-02 2.7281444885E-02 2.6952334092E-02 +2.6626979803E-02 2.6305342674E-02 2.5987383711E-02 2.5673064275E-02 +2.5362346078E-02 2.5055191177E-02 2.4751561976E-02 2.4451421223E-02 +2.4154732006E-02 2.3861457752E-02 2.3571562225E-02 2.3285009525E-02 +2.3001764081E-02 2.2721790655E-02 2.2445054334E-02 2.2171520532E-02 +2.1901154988E-02 2.1633923757E-02 2.1369793219E-02 2.1108730065E-02 +2.0850701304E-02 2.0595674254E-02 2.0343616546E-02 2.0094496117E-02 +1.9848281207E-02 1.9604940364E-02 1.9364442431E-02 1.9126756556E-02 +1.8891852177E-02 1.8659699032E-02 1.8430267146E-02 1.8203526836E-02 +1.7979448708E-02 1.7758003652E-02 1.7539162839E-02 1.7322897724E-02 +1.7109180041E-02 1.6897981797E-02 1.6689275278E-02 1.6483033040E-02 +1.6279227909E-02 1.6077832979E-02 1.5878821612E-02 1.5682167430E-02 +1.5487844320E-02 1.5295826428E-02 1.5106088156E-02 1.4918604162E-02 +1.4733349359E-02 1.4550298908E-02 1.4369428221E-02 1.4190712959E-02 +1.4014129024E-02 1.3839652563E-02 1.3667259966E-02 1.3496927858E-02 +1.3328633105E-02 1.3162352804E-02 1.2998064288E-02 1.2835745120E-02 +1.2675373093E-02 1.2516926224E-02 1.2360382760E-02 1.2205721166E-02 +1.2052920133E-02 1.1901958568E-02 1.1752815597E-02 1.1605470562E-02 +1.1459903018E-02 1.1316092730E-02 1.1174019678E-02 1.1033664044E-02 +1.0895006221E-02 1.0758026805E-02 1.0622706594E-02 1.0489026586E-02 +1.0356967982E-02 1.0226512175E-02 1.0097640758E-02 9.9703355155E-03 +9.8445784238E-03 9.7203516504E-03 9.5976375507E-03 9.4764186673E-03 +9.3566777279E-03 9.2383976434E-03 9.1215615066E-03 9.0061525902E-03 +8.8921543454E-03 8.7795504001E-03 8.6683245574E-03 8.5584607939E-03 +8.4499432580E-03 8.3427562685E-03 8.2368843124E-03 8.1323120444E-03 +8.0290242845E-03 7.9270060165E-03 7.8262423870E-03 7.7267187031E-03 +7.6284204312E-03 7.5313331959E-03 7.4354427778E-03 7.3407351126E-03 +7.2471962893E-03 7.1548125486E-03 7.0635702817E-03 6.9734560286E-03 +6.8844564772E-03 6.7965584614E-03 6.7097489596E-03 6.6240150936E-03 +6.5393441271E-03 6.4557234640E-03 6.3731406477E-03 6.2915833592E-03 +6.2110394160E-03 6.1314967704E-03 6.0529435088E-03 5.9753678495E-03 +5.8987581423E-03 5.8231028666E-03 5.7483906304E-03 5.6746101689E-03 +5.6017503432E-03 5.5298001390E-03 5.4587486655E-03 5.3885851541E-03 +5.3192989571E-03 5.2508795468E-03 5.1833165138E-03 5.1165995660E-03 +5.0507185274E-03 4.9856633371E-03 4.9214240480E-03 4.8579908255E-03 +4.7953539468E-03 4.7335037989E-03 4.6724308785E-03 4.6121257900E-03 +4.5525792449E-03 4.4937820607E-03 4.4357251597E-03 4.3783995676E-03 +4.3217964130E-03 4.2659069259E-03 4.2107224366E-03 4.1562343752E-03 +4.1024342702E-03 4.0493137471E-03 3.9968645282E-03 3.9450784309E-03 +3.8939473670E-03 3.8434633414E-03 3.7936184517E-03 3.7444048870E-03 +3.6958149264E-03 3.6478409388E-03 3.6004753815E-03 3.5537107993E-03 +3.5075398236E-03 3.4619551717E-03 3.4169496458E-03 3.3725161317E-03 +3.3286475984E-03 3.2853370969E-03 3.2425777594E-03 3.2003627985E-03 +3.1586855063E-03 3.1175392536E-03 3.0769174889E-03 3.0368137376E-03 +2.9972216013E-03 2.9581347568E-03 2.9195469551E-03 2.8814520214E-03 +2.8438438533E-03 2.8067164208E-03 2.7700637648E-03 2.7338799969E-03 +2.6981592982E-03 2.6628959190E-03 2.6280841776E-03 2.5937184598E-03 +2.5597932181E-03 2.5263029710E-03 2.4932423021E-03 2.4606058595E-03 +2.4283883551E-03 2.3965845639E-03 2.3651893233E-03 2.3341975325E-03 +2.3036041514E-03 2.2734042005E-03 2.2435927598E-03 2.2141649681E-03 +2.1851160227E-03 2.1564411787E-03 2.1281357479E-03 2.1001950988E-03 +2.0726146554E-03 2.0453898968E-03 2.0185163566E-03 1.9919896224E-03 +1.9658053348E-03 1.9399591874E-03 1.9144469257E-03 1.8892643466E-03 +1.8644072978E-03 1.8398716777E-03 1.8156534339E-03 1.7917485635E-03 +1.7681531120E-03 1.7448631734E-03 1.7218748886E-03 1.6991844458E-03 +1.6767880795E-03 1.6546820702E-03 1.6328627435E-03 1.6113264700E-03 +1.5900696646E-03 1.5690887862E-03 1.5483803367E-03 1.5279408608E-03 +1.5077669457E-03 1.4878552204E-03 1.4682023548E-03 1.4488050602E-03 +1.4296600881E-03 1.4107642298E-03 1.3921143162E-03 1.3737072169E-03 +1.3555398404E-03 1.3376091328E-03 1.3199120783E-03 1.3024456979E-03 +1.2852070498E-03 1.2681932281E-03 1.2514013631E-03 1.2348286203E-03 +1.2184722004E-03 1.2023293387E-03 1.1863973048E-03 1.1706734021E-03 +1.1551549675E-03 1.1398393708E-03 1.1247240146E-03 1.1098063337E-03 +1.0950837946E-03 1.0805538956E-03 1.0662141658E-03 1.0520621655E-03 +1.0380954850E-03 1.0243117448E-03 1.0107085950E-03 9.9728371515E-04 +9.8403481364E-04 9.7095962749E-04 9.5805592197E-04 9.4532149045E-04 +9.3275415382E-04 9.2035176023E-04 9.0811218480E-04 8.9603332928E-04 +8.8411312171E-04 8.7234951613E-04 8.6074049215E-04 8.4928405496E-04 +8.3797823472E-04 8.2682108635E-04 8.1581068921E-04 8.0494514687E-04 +7.9422258672E-04 7.8364115979E-04 7.7319904029E-04 7.6289442561E-04 +7.5272553583E-04 7.4269061349E-04 7.3278792331E-04 7.2301575193E-04 +7.1337240766E-04 7.0385622016E-04 6.9446554023E-04 6.8519873954E-04 +6.7605421045E-04 6.6703036566E-04 6.5812563794E-04 6.4933847999E-04 +6.4066736410E-04 6.3211078195E-04 6.2366724438E-04 6.1533528107E-04 +6.0711344054E-04 5.9900028970E-04 5.9099441367E-04 5.8309441560E-04 +5.7529891640E-04 5.6760655456E-04 5.6001598590E-04 5.5252588336E-04 +5.4513493681E-04 5.3784185290E-04 5.3064535477E-04 5.2354418182E-04 +5.1653708959E-04 5.0962284949E-04 5.0280024868E-04 4.9606808978E-04 +4.8942519071E-04 4.8287038461E-04 4.7640251953E-04 4.7002045829E-04 +4.6372307825E-04 4.5750927119E-04 4.5137794309E-04 4.4532801396E-04 +4.3935841768E-04 4.3346810175E-04 4.2765602732E-04 4.2192116884E-04 +4.1626251394E-04 4.1067906327E-04 4.0516983032E-04 3.9973384129E-04 +3.9437013491E-04 3.8907776229E-04 3.8385578669E-04 3.7870328360E-04 +3.7361934036E-04 3.6860305607E-04 3.6365354145E-04 3.5876991872E-04 +3.5395132140E-04 3.4919689423E-04 3.4450579297E-04 3.3987718426E-04 +3.3531024562E-04 3.3080416517E-04 3.2635814150E-04 3.2197138360E-04 +3.1764311069E-04 3.1337255210E-04 3.0915894714E-04 3.0500154499E-04 +3.0089960449E-04 2.9685239421E-04 2.9285919217E-04 2.8891928574E-04 +2.8503197155E-04 2.8119655536E-04 2.7741235194E-04 2.7367868497E-04 +2.6999488691E-04 2.6636029886E-04 2.6277427057E-04 2.5923616023E-04 +2.5574533436E-04 2.5230116773E-04 2.4890304327E-04 2.4555035190E-04 +2.4224249253E-04 2.3897887185E-04 2.3575890430E-04 2.3258201195E-04 +2.2944762447E-04 2.2635517890E-04 2.2330411968E-04 2.2029389847E-04 +2.1732397409E-04 2.1439381243E-04 2.1150288636E-04 2.0865067565E-04 +2.0583666680E-04 2.0306035313E-04 2.0032123457E-04 1.9761881754E-04 +1.9495261497E-04 1.9232214613E-04 1.8972693660E-04 1.8716651817E-04 +1.8464042875E-04 1.8214821231E-04 1.7968941879E-04 1.7726360408E-04 +1.7487032987E-04 1.7250916357E-04 1.7017967831E-04 1.6788145280E-04 +1.6561407126E-04 1.6337712340E-04 1.6117020431E-04 1.5899291435E-04 +1.5684485921E-04 1.5472564974E-04 1.5263490190E-04 1.5057223670E-04 +1.4853728014E-04 1.4652966313E-04 1.4454902143E-04 1.4259499561E-04 +1.4066723097E-04 1.3876537742E-04 1.3688908959E-04 1.3503802661E-04 +1.3321185211E-04 1.3141023413E-04 1.2963284512E-04 1.2787936181E-04 +1.2614946523E-04 1.2444284059E-04 1.2275917726E-04 1.2109816869E-04 +1.1945951243E-04 1.1784291001E-04 1.1624806687E-04 1.1467469238E-04 +1.1312249972E-04 1.1159120587E-04 1.1008053155E-04 1.0859020116E-04 +1.0711994277E-04 1.0566948799E-04 1.0423857205E-04 1.0282693368E-04 +1.0143431504E-04 1.0006046170E-04 9.8705122610E-05 9.7368050044E-05 +9.6048999553E-05 9.4747729926E-05 9.3464003148E-05 9.2197584319E-05 +9.0948241735E-05 8.9715746721E-05 8.8499873639E-05 8.7300399840E-05 +8.6117105629E-05 8.4949774226E-05 8.3798191727E-05 8.2662147067E-05 +8.1541431982E-05 8.0435840946E-05 7.9345171210E-05 7.8269222709E-05 +7.7207798027E-05 7.6160702371E-05 7.5127743537E-05 7.4108731874E-05 +7.3103480252E-05 7.2111804031E-05 7.1133521023E-05 7.0168451453E-05 +6.9216417942E-05 6.8277245502E-05 6.7350761451E-05 6.6436795409E-05 +6.5535179260E-05 6.4645747128E-05 6.3768335347E-05 6.2902782428E-05 +6.2048929035E-05 6.1206617953E-05 6.0375694034E-05 5.9556004253E-05 +5.8747397605E-05 5.7949725092E-05 5.7162839704E-05 5.6386596393E-05 +5.5620852042E-05 5.4865465446E-05 5.4120297281E-05 5.3385210086E-05 +5.2660068222E-05 5.1944737857E-05 5.1239086984E-05 5.0542985335E-05 +4.9856304383E-05 4.9178917316E-05 4.8510699018E-05 4.7851526041E-05 +4.7201276591E-05 4.6559830496E-05 4.5927069196E-05 4.5302875696E-05 +4.4687134585E-05 4.4079732007E-05 4.3480555616E-05 4.2889494568E-05 +4.2306439502E-05 4.1731282520E-05 4.1163917167E-05 4.0604238415E-05 +4.0052142639E-05 3.9507527601E-05 3.8970292416E-05 3.8440337576E-05 +3.7917564906E-05 3.7401877538E-05 3.6893179900E-05 3.6391377702E-05 +3.5896377918E-05 3.5408088765E-05 3.4926419693E-05 3.4451281366E-05 +3.3982585642E-05 3.3520245549E-05 3.3064175303E-05 3.2614290272E-05 +3.2170506951E-05 3.1732742955E-05 3.1300917006E-05 3.0874948913E-05 +3.0454759565E-05 3.0040270909E-05 2.9631405941E-05 2.9228088692E-05 +2.8830244200E-05 2.8437798521E-05 2.8050678716E-05 2.7668812816E-05 +2.7292129817E-05 2.6920559669E-05 2.6554033264E-05 2.6192482422E-05 +2.5835839879E-05 2.5484039274E-05 2.5137015139E-05 2.4794702881E-05 +2.4457038770E-05 2.4123959959E-05 2.3795404431E-05 2.3471311004E-05 +2.3151619317E-05 2.2836269823E-05 2.2525203775E-05 2.2218363215E-05 +2.1915690968E-05 2.1617130625E-05 2.1322626537E-05 2.1032123791E-05 +2.0745568237E-05 2.0462906450E-05 2.0184085718E-05 1.9909054040E-05 +1.9637760115E-05 1.9370153334E-05 1.9106183767E-05 1.8845802158E-05 +1.8588959916E-05 1.8335609102E-05 1.8085702419E-05 1.7839193206E-05 +1.7596035450E-05 1.7356183747E-05 1.7119593304E-05 1.6886219932E-05 +1.6656020038E-05 1.6428950618E-05 1.6204969246E-05 1.5984034069E-05 +1.5766103797E-05 1.5551137700E-05 1.5339095584E-05 1.5129937814E-05 +1.4923625290E-05 1.4720119437E-05 1.4519382197E-05 1.4321376027E-05 +1.4126063892E-05 1.3933409256E-05 1.3743376074E-05 1.3555928791E-05 +1.3371032331E-05 1.3188652089E-05 1.3008753919E-05 1.2831304156E-05 +1.2656269583E-05 1.2483617430E-05 1.2313315369E-05 1.2145331510E-05 +1.1979634391E-05 1.1816192980E-05 1.1654976658E-05 1.1495955226E-05 +1.1339098888E-05 1.1184378253E-05 1.1031764318E-05 1.0881228488E-05 +1.0732742552E-05 1.0586278676E-05 1.0441809404E-05 1.0299307650E-05 +1.0158746696E-05 1.0020100182E-05 9.8833421092E-06 9.7484468262E-06 +9.6153890307E-06 9.4841437622E-06 9.3546863897E-06 9.2269926286E-06 +9.1010385222E-06 8.9768004347E-06 8.8542550499E-06 8.7333793672E-06 +8.6141506974E-06 8.4965466584E-06 8.3805451709E-06 8.2661244548E-06 +8.1532630246E-06 8.0419396858E-06 7.9321335261E-06 7.8238239199E-06 +7.7169905290E-06 7.6116132844E-06 7.5076723891E-06 7.4051483141E-06 +7.3040217951E-06 7.2042738286E-06 7.1058856688E-06 7.0088388236E-06 +6.9131150516E-06 6.8186963587E-06 6.7255649940E-06 6.6337034386E-06 +6.5430944299E-06 6.4537209301E-06 6.3655661324E-06 6.2786134577E-06 +6.1928465518E-06 6.1082492821E-06 6.0248057347E-06 5.9425002117E-06 +5.8613172278E-06 5.7812415078E-06 5.7022579837E-06 5.6243517875E-06 +5.5475082569E-06 5.4717129338E-06 5.3969515519E-06 5.3232100380E-06 +5.2504745102E-06 5.1787312747E-06 5.1079668237E-06 5.0381678326E-06 +4.9693211575E-06 4.9014138331E-06 4.8344330698E-06 4.7683662516E-06 +4.7032009277E-06 4.6389248271E-06 4.5755258428E-06 4.5129920306E-06 +4.4513116084E-06 4.3904729539E-06 4.3304646028E-06 4.2712752465E-06 +4.2128937296E-06 4.1553090486E-06 4.0985103492E-06 4.0424869246E-06 +3.9872282134E-06 3.9327237907E-06 3.8789633867E-06 3.8259368655E-06 +3.7736342281E-06 3.7220456117E-06 3.6711612875E-06 3.6209716585E-06 +3.5714672584E-06 3.5226387496E-06 3.4744769211E-06 3.4269726873E-06 +3.3801170860E-06 3.3339012767E-06 3.2883165331E-06 3.2433542593E-06 +3.1990059713E-06 3.1552632999E-06 3.1121179899E-06 3.0695618981E-06 +3.0275869920E-06 2.9861853485E-06 2.9453491520E-06 2.9050706933E-06 +2.8653423681E-06 2.8261566753E-06 2.7875062159E-06 2.7493836871E-06 +2.7117818930E-06 2.6746937341E-06 2.6381122061E-06 2.6020303999E-06 +2.5664415007E-06 2.5313387858E-06 2.4967156246E-06 2.4625654763E-06 +2.4288818892E-06 2.3956584994E-06 2.3628890295E-06 2.3305672877E-06 +2.2986871639E-06 2.2672426329E-06 2.2362277555E-06 2.2056366702E-06 +2.1754635953E-06 2.1457028279E-06 2.1163487426E-06 2.0873957906E-06 +2.0588384987E-06 2.0306714681E-06 2.0028893736E-06 1.9754869624E-06 +1.9484590533E-06 1.9218005354E-06 1.8955063633E-06 1.8695715688E-06 +1.8439912476E-06 1.8187605619E-06 1.7938747399E-06 1.7693290745E-06 +1.7451189230E-06 1.7212397059E-06 1.6976869058E-06 1.6744560672E-06 +1.6515427949E-06 1.6289427539E-06 1.6066516680E-06 1.5846653181E-06 +1.5629795422E-06 1.5415902398E-06 1.5204933631E-06 1.4996849197E-06 +1.4791609715E-06 1.4589176342E-06 1.4389510762E-06 1.4192575182E-06 +1.3998332325E-06 1.3806745420E-06 1.3617778199E-06 1.3431394888E-06 +1.3247560197E-06 1.3066239304E-06 + + diff --git a/demo/ex4/Input_NEB.prm b/demo/ex4/Input_NEB.prm new file mode 100644 index 000000000..386059eee --- /dev/null +++ b/demo/ex4/Input_NEB.prm @@ -0,0 +1,64 @@ +set SOLVER MODE = NEB +set RESTART = false + +subsection Geometry + set NATOMS=3 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = coordinates.inp + set DOMAIN VECTORS FILE = domainVectors.inp +end + +subsection Boundary conditions + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true +end + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER=6 + subsection Auto mesh generation parameters + set MESH SIZE AROUND ATOM = 1.0 + set ATOM BALL RADIUS = 4.0 + end +end + +subsection DFT functional parameters + set EXCHANGE CORRELATION TYPE = 4 + set PSEUDOPOTENTIAL CALCULATION = true + set PSEUDOPOTENTIAL FILE NAMES LIST = pseudo.inp + set SPIN POLARIZATION = 1 + set START MAGNETIZATION = 0.45 +end + +subsection SCF parameters + set TEMPERATURE = 500 + set TOLERANCE = 1e-5 + set MIXING METHOD =ANDERSON + set MAXIMUM ITERATIONS = 200 + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 5 + end +end + +subsection GPU + set USE GPU = true +end + +subsection NEB + set NUMBER OF IMAGES = 7 + set PATH THRESHOLD = 0.0005 + set MAXIMUM NUMBER OF NEB ITERATIONS = 100 + set NEB DOMAIN VECTORS FILE = domainVectors.inp + set NEB COORDINATES FILE = coordinates.inp + set NEB OPT SOLVER = LBFGS + set ION RELAX FLAGS FILE = ion_force_flag.inp + set ALLOW IMAGE FREEZING = true +end + + + + + + + + \ No newline at end of file diff --git a/demo/ex4/coordinates.inp b/demo/ex4/coordinates.inp new file mode 100644 index 000000000..c1973bbb4 --- /dev/null +++ b/demo/ex4/coordinates.inp @@ -0,0 +1,21 @@ +1 1 0.619441659 0.000000000 0.000000000 +1 1 0.000000000 0.000000000 0.000000000 +1 1 0.129813897 0.000000000 0.000000000 +1 1 0.661232400 0.000000000 0.000000000 +1 1 0.000000000 0.000000000 0.000000000 +1 1 0.171604637 0.000000000 0.000000000 +1 1 0.703023141 0.000000000 0.000000000 +1 1 0.000000000 0.000000000 0.000000000 +1 1 0.213395378 0.000000000 0.000000000 +1 1 0.744813881 0.000000000 0.000000000 +1 1 0.000000000 0.000000000 0.000000000 +1 1 0.255186119 0.000000000 0.000000000 +1 1 0.786604622 0.000000000 0.000000000 +1 1 0.000000000 0.000000000 0.000000000 +1 1 0.296976859 0.000000000 0.000000000 +1 1 0.828395363 0.000000000 0.000000000 +1 1 0.000000000 0.000000000 0.000000000 +1 1 0.338767600 0.000000000 0.000000000 +1 1 0.870186103 0.000000000 0.000000000 +1 1 0.000000000 0.000000000 0.000000000 +1 1 0.380558341 0.000000000 0.000000000 \ No newline at end of file diff --git a/demo/ex4/domainVectors.inp b/demo/ex4/domainVectors.inp new file mode 100644 index 000000000..9b64c26df --- /dev/null +++ b/demo/ex4/domainVectors.inp @@ -0,0 +1,3 @@ +12.0000 0.00000000 0.00000000 +0.00000000 5.0000000 0.00000000 +0.00000000 0.00000000 5.00000000 \ No newline at end of file diff --git a/demo/ex4/ion_force_flag.inp b/demo/ex4/ion_force_flag.inp new file mode 100644 index 000000000..ec6bb8a9c --- /dev/null +++ b/demo/ex4/ion_force_flag.inp @@ -0,0 +1,3 @@ +1 0 0 0 0 0 +0 0 0 0 0 0 +1 0 0 0 0 0 \ No newline at end of file diff --git a/demo/ex4/pseudo.inp b/demo/ex4/pseudo.inp new file mode 100644 index 000000000..4c6f4100d --- /dev/null +++ b/demo/ex4/pseudo.inp @@ -0,0 +1 @@ +1 H.upf \ No newline at end of file From c8e999ba35c9a5128867bd203179a834cc358da5 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Sat, 19 Aug 2023 08:45:23 +0530 Subject: [PATCH 46/53] Removing ex4 --- demo/ex4/H.upf | 2187 ----------------------------------- demo/ex4/Input_NEB.prm | 64 - demo/ex4/coordinates.inp | 21 - demo/ex4/domainVectors.inp | 3 - demo/ex4/ion_force_flag.inp | 3 - demo/ex4/pseudo.inp | 1 - 6 files changed, 2279 deletions(-) delete mode 100644 demo/ex4/H.upf delete mode 100644 demo/ex4/Input_NEB.prm delete mode 100644 demo/ex4/coordinates.inp delete mode 100644 demo/ex4/domainVectors.inp delete mode 100644 demo/ex4/ion_force_flag.inp delete mode 100644 demo/ex4/pseudo.inp diff --git a/demo/ex4/H.upf b/demo/ex4/H.upf deleted file mode 100644 index 0eb31aa24..000000000 --- a/demo/ex4/H.upf +++ /dev/null @@ -1,2187 +0,0 @@ - - - -This pseudopotential file has been produced using the code -ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential) -scalar-relativistic version 3.3.0 08/16/2017 by D. R. Hamann -The code is available through a link at URL www.mat-simresearch.com. -Documentation with the package provides a full discription of the -input data below. - - -While it is not required under the terms of the GNU GPL, it is -suggested that you cite D. R. Hamann, Phys. Rev. B 88, 085117 (2013) -in any publication using these pseudopotentials. - - -# ATOM AND REFERENCE CONFIGURATION -# atsym z nc nv iexc psfile -H 1.00 0 1 4 upf -# -# n l f energy (Ha) -1 0 1.00 -# -# PSEUDOPOTENTIAL AND OPTIMIZATION -# lmax -1 -# -# l, rc, ep, ncon, nbas, qcut -0 1.00000 -0.23860 4 7 8.50000 -1 0.70000 0.05000 4 7 11.00000 -# -# LOCAL POTENTIAL -# lloc, lpopt, rc(5), dvloc0 -4 5 0.70000 0.00000 -# -# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs -# l, nproj, debl -0 2 1.00000 -1 1 1.00000 -# -# MODEL CORE CHARGE -# icmod, fcfact, rcfact -0 0.00000 0.00000 -# -# LOG DERIVATIVE ANALYSIS -# epsh1, epsh2, depsh --12.00 12.00 0.02 -# -# OUTPUT GRID -# rlmax, drl -3.00 0.01 -# -# TEST CONFIGURATIONS -# ncnf -0 -# nvcnf -# n l f - - - - - - - - -0.0000 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700 -0.0800 0.0900 0.1000 0.1100 0.1200 0.1300 0.1400 0.1500 -0.1600 0.1700 0.1800 0.1900 0.2000 0.2100 0.2200 0.2300 -0.2400 0.2500 0.2600 0.2700 0.2800 0.2900 0.3000 0.3100 -0.3200 0.3300 0.3400 0.3500 0.3600 0.3700 0.3800 0.3900 -0.4000 0.4100 0.4200 0.4300 0.4400 0.4500 0.4600 0.4700 -0.4800 0.4900 0.5000 0.5100 0.5200 0.5300 0.5400 0.5500 -0.5600 0.5700 0.5800 0.5900 0.6000 0.6100 0.6200 0.6300 -0.6400 0.6500 0.6600 0.6700 0.6800 0.6900 0.7000 0.7100 -0.7200 0.7300 0.7400 0.7500 0.7600 0.7700 0.7800 0.7900 -0.8000 0.8100 0.8200 0.8300 0.8400 0.8500 0.8600 0.8700 -0.8800 0.8900 0.9000 0.9100 0.9200 0.9300 0.9400 0.9500 -0.9600 0.9700 0.9800 0.9900 1.0000 1.0100 1.0200 1.0300 -1.0400 1.0500 1.0600 1.0700 1.0800 1.0900 1.1000 1.1100 -1.1200 1.1300 1.1400 1.1500 1.1600 1.1700 1.1800 1.1900 -1.2000 1.2100 1.2200 1.2300 1.2400 1.2500 1.2600 1.2700 -1.2800 1.2900 1.3000 1.3100 1.3200 1.3300 1.3400 1.3500 -1.3600 1.3700 1.3800 1.3900 1.4000 1.4100 1.4200 1.4300 -1.4400 1.4500 1.4600 1.4700 1.4800 1.4900 1.5000 1.5100 -1.5200 1.5300 1.5400 1.5500 1.5600 1.5700 1.5800 1.5900 -1.6000 1.6100 1.6200 1.6300 1.6400 1.6500 1.6600 1.6700 -1.6800 1.6900 1.7000 1.7100 1.7200 1.7300 1.7400 1.7500 -1.7600 1.7700 1.7800 1.7900 1.8000 1.8100 1.8200 1.8300 -1.8400 1.8500 1.8600 1.8700 1.8800 1.8900 1.9000 1.9100 -1.9200 1.9300 1.9400 1.9500 1.9600 1.9700 1.9800 1.9900 -2.0000 2.0100 2.0200 2.0300 2.0400 2.0500 2.0600 2.0700 -2.0800 2.0900 2.1000 2.1100 2.1200 2.1300 2.1400 2.1500 -2.1600 2.1700 2.1800 2.1900 2.2000 2.2100 2.2200 2.2300 -2.2400 2.2500 2.2600 2.2700 2.2800 2.2900 2.3000 2.3100 -2.3200 2.3300 2.3400 2.3500 2.3600 2.3700 2.3800 2.3900 -2.4000 2.4100 2.4200 2.4300 2.4400 2.4500 2.4600 2.4700 -2.4800 2.4900 2.5000 2.5100 2.5200 2.5300 2.5400 2.5500 -2.5600 2.5700 2.5800 2.5900 2.6000 2.6100 2.6200 2.6300 -2.6400 2.6500 2.6600 2.6700 2.6800 2.6900 2.7000 2.7100 -2.7200 2.7300 2.7400 2.7500 2.7600 2.7700 2.7800 2.7900 -2.8000 2.8100 2.8200 2.8300 2.8400 2.8500 2.8600 2.8700 -2.8800 2.8900 2.9000 2.9100 2.9200 2.9300 2.9400 2.9500 -2.9600 2.9700 2.9800 2.9900 3.0000 3.0100 3.0200 3.0300 -3.0400 3.0500 3.0600 3.0700 3.0800 3.0900 3.1000 3.1100 -3.1200 3.1300 3.1400 3.1500 3.1600 3.1700 3.1800 3.1900 -3.2000 3.2100 3.2200 3.2300 3.2400 3.2500 3.2600 3.2700 -3.2800 3.2900 3.3000 3.3100 3.3200 3.3300 3.3400 3.3500 -3.3600 3.3700 3.3800 3.3900 3.4000 3.4100 3.4200 3.4300 -3.4400 3.4500 3.4600 3.4700 3.4800 3.4900 3.5000 3.5100 -3.5200 3.5300 3.5400 3.5500 3.5600 3.5700 3.5800 3.5900 -3.6000 3.6100 3.6200 3.6300 3.6400 3.6500 3.6600 3.6700 -3.6800 3.6900 3.7000 3.7100 3.7200 3.7300 3.7400 3.7500 -3.7600 3.7700 3.7800 3.7900 3.8000 3.8100 3.8200 3.8300 -3.8400 3.8500 3.8600 3.8700 3.8800 3.8900 3.9000 3.9100 -3.9200 3.9300 3.9400 3.9500 3.9600 3.9700 3.9800 3.9900 -4.0000 4.0100 4.0200 4.0300 4.0400 4.0500 4.0600 4.0700 -4.0800 4.0900 4.1000 4.1100 4.1200 4.1300 4.1400 4.1500 -4.1600 4.1700 4.1800 4.1900 4.2000 4.2100 4.2200 4.2300 -4.2400 4.2500 4.2600 4.2700 4.2800 4.2900 4.3000 4.3100 -4.3200 4.3300 4.3400 4.3500 4.3600 4.3700 4.3800 4.3900 -4.4000 4.4100 4.4200 4.4300 4.4400 4.4500 4.4600 4.4700 -4.4800 4.4900 4.5000 4.5100 4.5200 4.5300 4.5400 4.5500 -4.5600 4.5700 4.5800 4.5900 4.6000 4.6100 4.6200 4.6300 -4.6400 4.6500 4.6600 4.6700 4.6800 4.6900 4.7000 4.7100 -4.7200 4.7300 4.7400 4.7500 4.7600 4.7700 4.7800 4.7900 -4.8000 4.8100 4.8200 4.8300 4.8400 4.8500 4.8600 4.8700 -4.8800 4.8900 4.9000 4.9100 4.9200 4.9300 4.9400 4.9500 -4.9600 4.9700 4.9800 4.9900 5.0000 5.0100 5.0200 5.0300 -5.0400 5.0500 5.0600 5.0700 5.0800 5.0900 5.1000 5.1100 -5.1200 5.1300 5.1400 5.1500 5.1600 5.1700 5.1800 5.1900 -5.2000 5.2100 5.2200 5.2300 5.2400 5.2500 5.2600 5.2700 -5.2800 5.2900 5.3000 5.3100 5.3200 5.3300 5.3400 5.3500 -5.3600 5.3700 5.3800 5.3900 5.4000 5.4100 5.4200 5.4300 -5.4400 5.4500 5.4600 5.4700 5.4800 5.4900 5.5000 5.5100 -5.5200 5.5300 5.5400 5.5500 5.5600 5.5700 5.5800 5.5900 -5.6000 5.6100 5.6200 5.6300 5.6400 5.6500 5.6600 5.6700 -5.6800 5.6900 5.7000 5.7100 5.7200 5.7300 5.7400 5.7500 -5.7600 5.7700 5.7800 5.7900 5.8000 5.8100 5.8200 5.8300 -5.8400 5.8500 5.8600 5.8700 5.8800 5.8900 5.9000 5.9100 -5.9200 5.9300 5.9400 5.9500 5.9600 5.9700 5.9800 5.9900 -6.0000 6.0100 6.0200 6.0300 6.0400 6.0500 6.0600 6.0700 -6.0800 6.0900 6.1000 6.1100 6.1200 6.1300 6.1400 6.1500 -6.1600 6.1700 6.1800 6.1900 6.2000 6.2100 6.2200 6.2300 -6.2400 6.2500 6.2600 6.2700 6.2800 6.2900 6.3000 6.3100 -6.3200 6.3300 6.3400 6.3500 6.3600 6.3700 6.3800 6.3900 -6.4000 6.4100 6.4200 6.4300 6.4400 6.4500 6.4600 6.4700 -6.4800 6.4900 6.5000 6.5100 6.5200 6.5300 6.5400 6.5500 -6.5600 6.5700 6.5800 6.5900 6.6000 6.6100 6.6200 6.6300 -6.6400 6.6500 6.6600 6.6700 6.6800 6.6900 6.7000 6.7100 -6.7200 6.7300 6.7400 6.7500 6.7600 6.7700 6.7800 6.7900 -6.8000 6.8100 6.8200 6.8300 6.8400 6.8500 6.8600 6.8700 -6.8800 6.8900 6.9000 6.9100 6.9200 6.9300 6.9400 6.9500 -6.9600 6.9700 6.9800 6.9900 7.0000 7.0100 7.0200 7.0300 -7.0400 7.0500 7.0600 7.0700 7.0800 7.0900 7.1000 7.1100 -7.1200 7.1300 7.1400 7.1500 7.1600 7.1700 7.1800 7.1900 -7.2000 7.2100 7.2200 7.2300 7.2400 7.2500 7.2600 7.2700 -7.2800 7.2900 7.3000 7.3100 7.3200 7.3300 7.3400 7.3500 -7.3600 7.3700 7.3800 7.3900 7.4000 7.4100 7.4200 7.4300 -7.4400 7.4500 7.4600 7.4700 7.4800 7.4900 7.5000 7.5100 -7.5200 7.5300 7.5400 7.5500 7.5600 7.5700 7.5800 7.5900 -7.6000 7.6100 7.6200 7.6300 7.6400 7.6500 7.6600 7.6700 -7.6800 7.6900 7.7000 7.7100 7.7200 7.7300 7.7400 7.7500 -7.7600 7.7700 7.7800 7.7900 7.8000 7.8100 7.8200 7.8300 -7.8400 7.8500 7.8600 7.8700 7.8800 7.8900 7.9000 7.9100 -7.9200 7.9300 7.9400 7.9500 7.9600 7.9700 7.9800 7.9900 -8.0000 8.0100 8.0200 8.0300 8.0400 8.0500 8.0600 8.0700 -8.0800 8.0900 8.1000 8.1100 8.1200 8.1300 8.1400 8.1500 -8.1600 8.1700 8.1800 8.1900 8.2000 8.2100 8.2200 8.2300 -8.2400 8.2500 8.2600 8.2700 8.2800 8.2900 8.3000 8.3100 -8.3200 8.3300 8.3400 8.3500 8.3600 8.3700 8.3800 8.3900 -8.4000 8.4100 8.4200 8.4300 8.4400 8.4500 8.4600 8.4700 -8.4800 8.4900 8.5000 8.5100 8.5200 8.5300 8.5400 8.5500 -8.5600 8.5700 8.5800 8.5900 8.6000 8.6100 8.6200 8.6300 -8.6400 8.6500 8.6600 8.6700 8.6800 8.6900 8.7000 8.7100 -8.7200 8.7300 8.7400 8.7500 8.7600 8.7700 8.7800 8.7900 -8.8000 8.8100 8.8200 8.8300 8.8400 8.8500 8.8600 8.8700 -8.8800 8.8900 8.9000 8.9100 8.9200 8.9300 8.9400 8.9500 -8.9600 8.9700 8.9800 8.9900 9.0000 9.0100 9.0200 9.0300 -9.0400 9.0500 9.0600 9.0700 9.0800 9.0900 9.1000 9.1100 -9.1200 9.1300 9.1400 9.1500 9.1600 9.1700 9.1800 9.1900 -9.2000 9.2100 9.2200 9.2300 9.2400 9.2500 9.2600 9.2700 -9.2800 9.2900 9.3000 9.3100 9.3200 9.3300 9.3400 9.3500 -9.3600 9.3700 9.3800 9.3900 9.4000 9.4100 9.4200 9.4300 -9.4400 9.4500 9.4600 9.4700 9.4800 9.4900 9.5000 9.5100 -9.5200 9.5300 9.5400 9.5500 9.5600 9.5700 9.5800 9.5900 -9.6000 9.6100 9.6200 9.6300 9.6400 9.6500 9.6600 9.6700 -9.6800 9.6900 9.7000 9.7100 9.7200 9.7300 9.7400 9.7500 -9.7600 9.7700 9.7800 9.7900 9.8000 9.8100 9.8200 9.8300 -9.8400 9.8500 9.8600 9.8700 9.8800 9.8900 9.9000 9.9100 -9.9200 9.9300 9.9400 9.9500 9.9600 9.9700 9.9800 9.9900 -10.0000 10.0100 10.0200 10.0300 10.0400 10.0500 10.0600 10.0700 -10.0800 10.0900 10.1000 10.1100 10.1200 10.1300 10.1400 10.1500 -10.1600 10.1700 10.1800 10.1900 10.2000 10.2100 10.2200 10.2300 -10.2400 10.2500 10.2600 10.2700 10.2800 10.2900 10.3000 10.3100 -10.3200 10.3300 10.3400 10.3500 10.3600 10.3700 10.3800 10.3900 -10.4000 10.4100 10.4200 10.4300 10.4400 10.4500 10.4600 10.4700 -10.4800 10.4900 10.5000 10.5100 10.5200 10.5300 10.5400 10.5500 -10.5600 10.5700 10.5800 10.5900 10.6000 10.6100 10.6200 10.6300 -10.6400 10.6500 10.6600 10.6700 10.6800 10.6900 10.7000 10.7100 -10.7200 10.7300 10.7400 10.7500 10.7600 10.7700 10.7800 10.7900 -10.8000 10.8100 10.8200 10.8300 10.8400 10.8500 10.8600 10.8700 -10.8800 10.8900 10.9000 10.9100 10.9200 10.9300 10.9400 10.9500 -10.9600 10.9700 10.9800 10.9900 11.0000 11.0100 11.0200 11.0300 -11.0400 11.0500 11.0600 11.0700 11.0800 11.0900 11.1000 11.1100 -11.1200 11.1300 11.1400 11.1500 11.1600 11.1700 11.1800 11.1900 -11.2000 11.2100 11.2200 11.2300 11.2400 11.2500 11.2600 11.2700 -11.2800 11.2900 11.3000 11.3100 11.3200 11.3300 11.3400 11.3500 -11.3600 11.3700 11.3800 11.3900 11.4000 11.4100 11.4200 11.4300 -11.4400 11.4500 11.4600 11.4700 11.4800 11.4900 11.5000 11.5100 -11.5200 11.5300 11.5400 11.5500 11.5600 11.5700 11.5800 11.5900 -11.6000 11.6100 11.6200 11.6300 11.6400 11.6500 - - -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 -0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 - - - --6.3046688226E+00 -6.3029573079E+00 -6.2978339557E+00 -6.2893312660E+00 --6.2775022316E+00 -6.2624185879E+00 -6.2441685264E+00 -6.2228540242E+00 --6.1985879409E+00 -6.1714910416E+00 -6.1416890965E+00 -6.1093101886E+00 --6.0744823275E+00 -6.0373314449E+00 -5.9979798065E+00 -5.9565448525E+00 --5.9131384513E+00 -5.8678665313E+00 -5.8208290427E+00 -5.7721201943E+00 --5.7218289052E+00 -5.6700394133E+00 -5.6168319871E+00 -5.5622836920E+00 --5.5064691693E+00 -5.4494613946E+00 -5.3913323887E+00 -5.3321538601E+00 --5.2719977656E+00 -5.2109367806E+00 -5.1490446725E+00 -5.0863965782E+00 --5.0230691854E+00 -4.9591408231E+00 -4.8946914649E+00 -4.8298026532E+00 --4.7645573512E+00 -4.6990397305E+00 -4.6333349039E+00 -4.5675286109E+00 --4.5017068666E+00 -4.4359555809E+00 -4.3703601590E+00 -4.3050050899E+00 --4.2399735316E+00 -4.1753469014E+00 -4.1112044755E+00 -4.0476230070E+00 --3.9846763631E+00 -3.9224351889E+00 -3.8609665971E+00 -3.8003338858E+00 --3.7405962840E+00 -3.6818087238E+00 -3.6240216355E+00 -3.5672807634E+00 --3.5116269972E+00 -3.4570962161E+00 -3.4037191382E+00 -3.3515211743E+00 --3.3005222783E+00 -3.2507367937E+00 -3.2021732914E+00 -3.1548343986E+00 --3.1087166163E+00 -3.0638101269E+00 -3.0200985913E+00 -2.9775589381E+00 --2.9361611455E+00 -2.8958680166E+00 -2.8566349704E+00 -2.8184097350E+00 --2.7811343520E+00 -2.7447521134E+00 -2.7092107678E+00 -2.6744624128E+00 --2.6404634994E+00 -2.6071747994E+00 -2.5745613652E+00 -2.5425924743E+00 --2.5112415502E+00 -2.4804860529E+00 -2.4503073354E+00 -2.4206904587E+00 --2.3916239656E+00 -2.3630996095E+00 -2.3351120410E+00 -2.3076584534E+00 --2.2807381917E+00 -2.2543523318E+00 -2.2285032353E+00 -2.2031940916E+00 --2.1784284531E+00 -2.1542097772E+00 -2.1305409829E+00 -2.1074240341E+00 --2.0848595571E+00 -2.0628465492E+00 -2.0413818291E+00 -2.0204605559E+00 --2.0000764964E+00 -1.9802076891E+00 -1.9607976294E+00 -1.9417695462E+00 --1.9230947802E+00 -1.9047755973E+00 -1.8868078706E+00 -1.8691738500E+00 --1.8518663728E+00 -1.8348767394E+00 -1.8181959221E+00 -1.8018156723E+00 --1.7857279283E+00 -1.7699249247E+00 -1.7543991682E+00 -1.7391434264E+00 --1.7241507160E+00 -1.7094142928E+00 -1.6949276408E+00 -1.6806844634E+00 --1.6666786736E+00 -1.6529043858E+00 -1.6393559073E+00 -1.6260277305E+00 --1.6129145256E+00 -1.6000111331E+00 -1.5873125577E+00 -1.5748139610E+00 --1.5625106560E+00 -1.5503981010E+00 -1.5384718942E+00 -1.5267277679E+00 --1.5151615841E+00 -1.5037693288E+00 -1.4925471082E+00 -1.4814911438E+00 --1.4705977680E+00 -1.4598634206E+00 -1.4492846444E+00 -1.4388580817E+00 --1.4285804708E+00 -1.4184486425E+00 -1.4084595168E+00 -1.3986101001E+00 --1.3888974816E+00 -1.3793188311E+00 -1.3698713957E+00 -1.3605524977E+00 --1.3513595315E+00 -1.3422899615E+00 -1.3333413198E+00 -1.3245112039E+00 --1.3157972744E+00 -1.3071972531E+00 -1.2987089210E+00 -1.2903301164E+00 --1.2820587331E+00 -1.2738927182E+00 -1.2658300712E+00 -1.2578688417E+00 --1.2500071280E+00 -1.2422430760E+00 -1.2345748769E+00 -1.2270007667E+00 --1.2195190242E+00 -1.2121279698E+00 -1.2048259648E+00 -1.1976114094E+00 --1.1904827419E+00 -1.1834384378E+00 -1.1764770082E+00 -1.1695969992E+00 --1.1627969906E+00 -1.1560755952E+00 -1.1494314576E+00 -1.1428632532E+00 --1.1363696878E+00 -1.1299494964E+00 -1.1236014421E+00 -1.1173243161E+00 --1.1111169362E+00 -1.1049781463E+00 -1.0989068159E+00 -1.0929018390E+00 --1.0869621338E+00 -1.0810866418E+00 -1.0752743273E+00 -1.0695241767E+00 --1.0638351981E+00 -1.0582064204E+00 -1.0526368932E+00 -1.0471256857E+00 --1.0416718867E+00 -1.0362746038E+00 -1.0309329631E+00 -1.0256461086E+00 --1.0204132015E+00 -1.0152334205E+00 -1.0101059606E+00 -1.0050300329E+00 --1.0000048645E+00 -9.9502969780E-01 -9.9010379018E-01 -9.8522641367E-01 --9.8039685456E-01 -9.7561441308E-01 -9.7087840305E-01 -9.6618815153E-01 --9.6154299855E-01 -9.5694229675E-01 -9.5238541110E-01 -9.4787171863E-01 --9.4340060811E-01 -9.3897147977E-01 -9.3458374509E-01 -9.3023682648E-01 --9.2593015703E-01 -9.2166318031E-01 -9.1743535009E-01 -9.1324613009E-01 --9.0909499383E-01 -9.0498142432E-01 -9.0090491390E-01 -8.9686496402E-01 --8.9286108503E-01 -8.8889279597E-01 -8.8495962441E-01 -8.8106110625E-01 --8.7719678552E-01 -8.7336621422E-01 -8.6956895213E-01 -8.6580456667E-01 --8.6207263271E-01 -8.5837273242E-01 -8.5470445511E-01 -8.5106739709E-01 --8.4746116150E-01 -8.4388535818E-01 -8.4033960354E-01 -8.3682352040E-01 --8.3333673787E-01 -8.2987889120E-01 -8.2644962170E-01 -8.2304857656E-01 --8.1967540876E-01 -8.1632977695E-01 -8.1301134533E-01 -8.0971978353E-01 --8.0645476653E-01 -8.0321597450E-01 -8.0000309275E-01 -7.9681581160E-01 --7.9365382628E-01 -7.9051683685E-01 -7.8740454808E-01 -7.8431666938E-01 --7.8125291470E-01 -7.7821300245E-01 -7.7519665538E-01 -7.7220360055E-01 --7.6923356920E-01 -7.6628629670E-01 -7.6336152246E-01 -7.6045898985E-01 --7.5757844612E-01 -7.5471964236E-01 -7.5188233337E-01 -7.4906627765E-01 --7.4627123730E-01 -7.4349697794E-01 -7.4074326868E-01 -7.3800988203E-01 --7.3529659386E-01 -7.3260318330E-01 -7.2992943272E-01 -7.2727512766E-01 --7.2464005675E-01 -7.2202401168E-01 -7.1942678715E-01 -7.1684818079E-01 --7.1428799313E-01 -7.1174602752E-01 -7.0922209012E-01 -7.0671598982E-01 --7.0422753821E-01 -7.0175654952E-01 -6.9930284057E-01 -6.9686623075E-01 --6.9444654193E-01 -6.9204359848E-01 -6.8965722717E-01 -6.8728725715E-01 --6.8493351994E-01 -6.8259584931E-01 -6.8027408134E-01 -6.7796805430E-01 --6.7567760866E-01 -6.7340258704E-01 -6.7114283416E-01 -6.6889819683E-01 --6.6666852390E-01 -6.6445366623E-01 -6.6225347664E-01 -6.6006780991E-01 --6.5789652272E-01 -6.5573947365E-01 -6.5359652310E-01 -6.5146753330E-01 --6.4935236828E-01 -6.4725089382E-01 -6.4516297743E-01 -6.4308848832E-01 --6.4102729740E-01 -6.3897927720E-01 -6.3694430190E-01 -6.3492224725E-01 --6.3291299059E-01 -6.3091641081E-01 -6.2893238833E-01 -6.2696080503E-01 --6.2500154431E-01 -6.2305449101E-01 -6.2111953140E-01 -6.1919655314E-01 --6.1728544530E-01 -6.1538609831E-01 -6.1349840395E-01 -6.1162225530E-01 --6.0975754677E-01 -6.0790417403E-01 -6.0606203405E-01 -6.0423102500E-01 --6.0241104632E-01 -6.0060199863E-01 -5.9880378373E-01 -5.9701630464E-01 --5.9523946548E-01 -5.9347317155E-01 -5.9171732924E-01 -5.8997184607E-01 --5.8823663062E-01 -5.8651159257E-01 -5.8479664263E-01 -5.8309169259E-01 --5.8139665522E-01 -5.7971144432E-01 -5.7803597471E-01 -5.7637016215E-01 --5.7471392339E-01 -5.7306717615E-01 -5.7142983906E-01 -5.6980183169E-01 --5.6818307452E-01 -5.6657348895E-01 -5.6497299724E-01 -5.6338152254E-01 --5.6179898888E-01 -5.6022532110E-01 -5.5866044491E-01 -5.5710428686E-01 --5.5555677427E-01 -5.5401783531E-01 -5.5248739892E-01 -5.5096539483E-01 --5.4945175354E-01 -5.4794640632E-01 -5.4644928518E-01 -5.4496032287E-01 --5.4347945288E-01 -5.4200660941E-01 -5.4054172740E-01 -5.3908474244E-01 --5.3763559087E-01 -5.3619420967E-01 -5.3476053651E-01 -5.3333450972E-01 --5.3191606830E-01 -5.3050515188E-01 -5.2910170074E-01 -5.2770565578E-01 --5.2631695853E-01 -5.2493555114E-01 -5.2356137635E-01 -5.2219437751E-01 --5.2083449855E-01 -5.1948168399E-01 -5.1813587893E-01 -5.1679702902E-01 --5.1546508049E-01 -5.1413998011E-01 -5.1282167520E-01 -5.1151011363E-01 --5.1020524377E-01 -5.0890701455E-01 -5.0761537540E-01 -5.0633027627E-01 --5.0505166761E-01 -5.0377950037E-01 -5.0251372600E-01 -5.0125429643E-01 --5.0000116406E-01 -4.9875428180E-01 -4.9751360299E-01 -4.9627908145E-01 --4.9505067145E-01 -4.9382832773E-01 -4.9261200546E-01 -4.9140166025E-01 --4.9019724816E-01 -4.8899872565E-01 -4.8780604963E-01 -4.8661917744E-01 --4.8543806679E-01 -4.8426267585E-01 -4.8309296316E-01 -4.8192888767E-01 --4.8077040873E-01 -4.7961748608E-01 -4.7847007983E-01 -4.7732815048E-01 --4.7619165892E-01 -4.7506056639E-01 -4.7393483451E-01 -4.7281442526E-01 --4.7169930098E-01 -4.7058942436E-01 -4.6948475844E-01 -4.6838526661E-01 --4.6729091261E-01 -4.6620166050E-01 -4.6511747469E-01 -4.6403831992E-01 --4.6296416123E-01 -4.6189496403E-01 -4.6083069400E-01 -4.5977131717E-01 --4.5871679987E-01 -4.5766710874E-01 -4.5662221071E-01 -4.5558207304E-01 --4.5454666327E-01 -4.5351594922E-01 -4.5248989903E-01 -4.5146848112E-01 --4.5045166418E-01 -4.4943941720E-01 -4.4843170943E-01 -4.4742851041E-01 --4.4642978994E-01 -4.4543551811E-01 -4.4444566524E-01 -4.4346020196E-01 --4.4247909911E-01 -4.4150232783E-01 -4.4052985949E-01 -4.3956166572E-01 --4.3859771839E-01 -4.3763798963E-01 -4.3668245181E-01 -4.3573107753E-01 --4.3478383963E-01 -4.3384071121E-01 -4.3290166557E-01 -4.3196667626E-01 --4.3103571705E-01 -4.3010876194E-01 -4.2918578516E-01 -4.2826676114E-01 --4.2735166455E-01 -4.2644047026E-01 -4.2553315337E-01 -4.2462968917E-01 --4.2373005319E-01 -4.2283422113E-01 -4.2194216893E-01 -4.2105387270E-01 --4.2016930879E-01 -4.1928845370E-01 -4.1841128418E-01 -4.1753777712E-01 --4.1666790965E-01 -4.1580165905E-01 -4.1493900283E-01 -4.1407991865E-01 --4.1322438437E-01 -4.1237237804E-01 -4.1152387787E-01 -4.1067886227E-01 --4.0983730981E-01 -4.0899919925E-01 -4.0816450952E-01 -4.0733321971E-01 --4.0650530910E-01 -4.0568075712E-01 -4.0485954337E-01 -4.0404164762E-01 --4.0322704980E-01 -4.0241573001E-01 -4.0160766849E-01 -4.0080284567E-01 --4.0000124210E-01 -3.9920283851E-01 -3.9840761577E-01 -3.9761555492E-01 --3.9682663714E-01 -3.9604084375E-01 -3.9525815622E-01 -3.9447855619E-01 --3.9370202541E-01 -3.9292854580E-01 -3.9215809940E-01 -3.9139066842E-01 --3.9062623518E-01 -3.8986478215E-01 -3.8910629194E-01 -3.8835074729E-01 --3.8759813108E-01 -3.8684842630E-01 -3.8610161610E-01 -3.8535768375E-01 --3.8461661264E-01 -3.8387838630E-01 -3.8314298839E-01 -3.8241040266E-01 --3.8168061304E-01 -3.8095360353E-01 -3.8022935828E-01 -3.7950786155E-01 --3.7878909774E-01 -3.7807305134E-01 -3.7735970697E-01 -3.7664904936E-01 --3.7594106336E-01 -3.7523573394E-01 -3.7453304617E-01 -3.7383298524E-01 --3.7313553644E-01 -3.7244068519E-01 -3.7174841699E-01 -3.7105871748E-01 --3.7037157238E-01 -3.6968696753E-01 -3.6900488886E-01 -3.6832532243E-01 --3.6764825437E-01 -3.6697367093E-01 -3.6630155847E-01 -3.6563190342E-01 --3.6496469234E-01 -3.6429991188E-01 -3.6363754877E-01 -3.6297758985E-01 --3.6232002206E-01 -3.6166483243E-01 -3.6101200807E-01 -3.6036153620E-01 --3.5971340414E-01 -3.5906759927E-01 -3.5842410909E-01 -3.5778292117E-01 --3.5714402318E-01 -3.5650740288E-01 -3.5587304810E-01 -3.5524094677E-01 --3.5461108692E-01 -3.5398345663E-01 -3.5335804409E-01 -3.5273483757E-01 --3.5211382541E-01 -3.5149499605E-01 -3.5087833799E-01 -3.5026383983E-01 --3.4965149025E-01 -3.4904127798E-01 -3.4843319187E-01 -3.4782722081E-01 --3.4722335380E-01 -3.4662157989E-01 -3.4602188823E-01 -3.4542426801E-01 --3.4482870853E-01 -3.4423519915E-01 -3.4364372930E-01 -3.4305428848E-01 --3.4246686627E-01 -3.4188145232E-01 -3.4129803636E-01 -3.4071660816E-01 --3.4013715758E-01 -3.3955967457E-01 -3.3898414910E-01 -3.3841057124E-01 --3.3783893113E-01 -3.3726921895E-01 -3.3670142499E-01 -3.3613553955E-01 --3.3557155304E-01 -3.3500945591E-01 -3.3444923869E-01 -3.3389089196E-01 --3.3333440636E-01 -3.3277977262E-01 -3.3222698149E-01 -3.3167602382E-01 --3.3112689049E-01 -3.3057957246E-01 -3.3003406075E-01 -3.2949034642E-01 --3.2894842061E-01 -3.2840827451E-01 -3.2786989936E-01 -3.2733328647E-01 --3.2679842721E-01 -3.2626531298E-01 -3.2573393527E-01 -3.2520428560E-01 --3.2467635555E-01 -3.2415013677E-01 -3.2362562096E-01 -3.2310279984E-01 --3.2258166524E-01 -3.2206220899E-01 -3.2154442300E-01 -3.2102829924E-01 --3.2051382971E-01 -3.2000100646E-01 -3.1948982162E-01 -3.1898026733E-01 --3.1847233582E-01 -3.1796601934E-01 -3.1746131020E-01 -3.1695820077E-01 --3.1645668344E-01 -3.1595675067E-01 -3.1545839496E-01 -3.1496160887E-01 --3.1446638498E-01 -3.1397271595E-01 -3.1348059446E-01 -3.1299001324E-01 --3.1250096508E-01 -3.1201344280E-01 -3.1152743927E-01 -3.1104294741E-01 --3.1055996017E-01 -3.1007847055E-01 -3.0959847161E-01 -3.0911995642E-01 --3.0864291813E-01 -3.0816734989E-01 -3.0769324493E-01 -3.0722059651E-01 --3.0674939792E-01 -3.0627964251E-01 -3.0581132364E-01 -3.0534443475E-01 --3.0487896929E-01 -3.0441492077E-01 -3.0395228272E-01 -3.0349104872E-01 --3.0303121239E-01 -3.0257276739E-01 -3.0211570742E-01 -3.0166002620E-01 --3.0120571750E-01 -3.0075277514E-01 -3.0030119296E-01 -2.9985096485E-01 --2.9940208471E-01 -2.9895454652E-01 -2.9850834425E-01 -2.9806347193E-01 --2.9761992364E-01 -2.9717769346E-01 -2.9673677553E-01 -2.9629716402E-01 --2.9585885313E-01 -2.9542183709E-01 -2.9498611018E-01 -2.9455166671E-01 --2.9411850100E-01 -2.9368660743E-01 -2.9325598041E-01 -2.9282661437E-01 --2.9239850378E-01 -2.9197164315E-01 -2.9154602700E-01 -2.9112164990E-01 --2.9069850646E-01 -2.9027659129E-01 -2.8985589906E-01 -2.8943642446E-01 --2.8901816220E-01 -2.8860110705E-01 -2.8818525379E-01 -2.8777059722E-01 --2.8735713219E-01 -2.8694485356E-01 -2.8653375625E-01 -2.8612383518E-01 --2.8571508531E-01 -2.8530750162E-01 -2.8490107914E-01 -2.8449581291E-01 --2.8409169800E-01 -2.8368872951E-01 -2.8328690257E-01 -2.8288621234E-01 --2.8248665400E-01 -2.8208822276E-01 -2.8169091385E-01 -2.8129472256E-01 --2.8089964415E-01 -2.8050567396E-01 -2.8011280732E-01 -2.7972103961E-01 --2.7933036622E-01 -2.7894078257E-01 -2.7855228411E-01 -2.7816486631E-01 --2.7777852467E-01 -2.7739325471E-01 -2.7700905198E-01 -2.7662591205E-01 --2.7624383051E-01 -2.7586280299E-01 -2.7548282513E-01 -2.7510389260E-01 --2.7472600109E-01 -2.7434914632E-01 -2.7397332403E-01 -2.7359852997E-01 --2.7322475994E-01 -2.7285200975E-01 -2.7248027523E-01 -2.7210955222E-01 --2.7173983662E-01 -2.7137112431E-01 -2.7100341122E-01 -2.7063669329E-01 --2.7027096650E-01 -2.6990622682E-01 -2.6954247026E-01 -2.6917969286E-01 --2.6881789067E-01 -2.6845705975E-01 -2.6809719621E-01 -2.6773829616E-01 --2.6738035574E-01 -2.6702337110E-01 -2.6666733841E-01 -2.6631225388E-01 --2.6595811373E-01 -2.6560491418E-01 -2.6525265151E-01 -2.6490132198E-01 --2.6455092189E-01 -2.6420144757E-01 -2.6385289533E-01 -2.6350526155E-01 --2.6315854260E-01 -2.6281273486E-01 -2.6246783476E-01 -2.6212383872E-01 --2.6178074319E-01 -2.6143854465E-01 -2.6109723957E-01 -2.6075682447E-01 --2.6041729587E-01 -2.6007865030E-01 -2.5974088434E-01 -2.5940399455E-01 --2.5906797753E-01 -2.5873282990E-01 -2.5839854828E-01 -2.5806512933E-01 --2.5773256970E-01 -2.5740086608E-01 -2.5707001517E-01 -2.5674001369E-01 --2.5641085837E-01 -2.5608254595E-01 -2.5575507321E-01 -2.5542843692E-01 --2.5510263389E-01 -2.5477766094E-01 -2.5445351488E-01 -2.5413019258E-01 --2.5380769090E-01 -2.5348600671E-01 -2.5316513691E-01 -2.5284507842E-01 --2.5252582815E-01 -2.5220738305E-01 -2.5188974009E-01 -2.5157289623E-01 --2.5125684846E-01 -2.5094159378E-01 -2.5062712922E-01 -2.5031345180E-01 --2.5000055858E-01 -2.4968844662E-01 -2.4937711299E-01 -2.4906655478E-01 --2.4875676912E-01 -2.4844775310E-01 -2.4813950388E-01 -2.4783201860E-01 --2.4752529442E-01 -2.4721932852E-01 -2.4691411810E-01 -2.4660966035E-01 --2.4630595250E-01 -2.4600299178E-01 -2.4570077543E-01 -2.4539930073E-01 --2.4509856493E-01 -2.4479856533E-01 -2.4449929923E-01 -2.4420076393E-01 --2.4390295678E-01 -2.4360587510E-01 -2.4330951624E-01 -2.4301387758E-01 --2.4271895649E-01 -2.4242475037E-01 -2.4213125660E-01 -2.4183847262E-01 --2.4154639585E-01 -2.4125502373E-01 -2.4096435371E-01 -2.4067438326E-01 --2.4038510985E-01 -2.4009653098E-01 -2.3980864415E-01 -2.3952144687E-01 --2.3923493667E-01 -2.3894911108E-01 -2.3866396765E-01 -2.3837950395E-01 --2.3809571754E-01 -2.3781260601E-01 -2.3753016696E-01 -2.3724839799E-01 --2.3696729673E-01 -2.3668686079E-01 -2.3640708782E-01 -2.3612797548E-01 --2.3584952142E-01 -2.3557172332E-01 -2.3529457886E-01 -2.3501808575E-01 --2.3474224168E-01 -2.3446704438E-01 -2.3419249157E-01 -2.3391858099E-01 --2.3364531039E-01 -2.3337267752E-01 -2.3310068017E-01 -2.3282931611E-01 --2.3255858313E-01 -2.3228847903E-01 -2.3201900163E-01 -2.3175014874E-01 --2.3148191819E-01 -2.3121430784E-01 -2.3094731552E-01 -2.3068093911E-01 --2.3041517647E-01 -2.3015002548E-01 -2.2988548404E-01 -2.2962155004E-01 --2.2935822140E-01 -2.2909549603E-01 -2.2883337186E-01 -2.2857184684E-01 --2.2831091891E-01 -2.2805058603E-01 -2.2779084617E-01 -2.2753169729E-01 --2.2727313739E-01 -2.2701516447E-01 -2.2675777651E-01 -2.2650097155E-01 --2.2624474759E-01 -2.2598910268E-01 -2.2573403484E-01 -2.2547954213E-01 --2.2522562260E-01 -2.2497227432E-01 -2.2471949537E-01 -2.2446728382E-01 --2.2421563777E-01 -2.2396455532E-01 -2.2371403458E-01 -2.2346407366E-01 --2.2321467070E-01 -2.2296582382E-01 -2.2271753116E-01 -2.2246979088E-01 --2.2222260114E-01 -2.2197596010E-01 -2.2172986594E-01 -2.2148431684E-01 --2.2123931100E-01 -2.2099484660E-01 -2.2075092186E-01 -2.2050753500E-01 --2.2026468423E-01 -2.2002236779E-01 -2.1978058392E-01 -2.1953933086E-01 --2.1929860686E-01 -2.1905841019E-01 -2.1881873912E-01 -2.1857959192E-01 --2.1834096688E-01 -2.1810286229E-01 -2.1786527644E-01 -2.1762820765E-01 --2.1739165423E-01 -2.1715561451E-01 -2.1692008679E-01 -2.1668506944E-01 --2.1645056078E-01 -2.1621655917E-01 -2.1598306296E-01 -2.1575007053E-01 --2.1551758023E-01 -2.1528559046E-01 -2.1505409959E-01 -2.1482310602E-01 --2.1459260814E-01 -2.1436260436E-01 -2.1413309310E-01 -2.1390407278E-01 --2.1367554182E-01 -2.1344749865E-01 -2.1321994172E-01 -2.1299286947E-01 --2.1276628035E-01 -2.1254017283E-01 -2.1231454537E-01 -2.1208939644E-01 --2.1186472453E-01 -2.1164052811E-01 -2.1141680568E-01 -2.1119355574E-01 --2.1097077680E-01 -2.1074846736E-01 -2.1052662594E-01 -2.1030525107E-01 --2.1008434127E-01 -2.0986389508E-01 -2.0964391105E-01 -2.0942438772E-01 --2.0920532365E-01 -2.0898671739E-01 -2.0876856751E-01 -2.0855087259E-01 --2.0833363120E-01 -2.0811684193E-01 -2.0790050336E-01 -2.0768461410E-01 --2.0746917275E-01 -2.0725417791E-01 -2.0703962819E-01 -2.0682552222E-01 --2.0661185861E-01 -2.0639863601E-01 -2.0618585305E-01 -2.0597350836E-01 --2.0576160060E-01 -2.0555012841E-01 -2.0533909046E-01 -2.0512848542E-01 --2.0491831194E-01 -2.0470856870E-01 -2.0449925440E-01 -2.0429036770E-01 --2.0408190730E-01 -2.0387387190E-01 -2.0366626020E-01 -2.0345907091E-01 --2.0325230273E-01 -2.0304595439E-01 -2.0284002461E-01 -2.0263451212E-01 --2.0242941564E-01 -2.0222473392E-01 -2.0202046571E-01 -2.0181660974E-01 --2.0161316477E-01 -2.0141012956E-01 -2.0120750288E-01 -2.0100528349E-01 --2.0080347016E-01 -2.0060206168E-01 -2.0040105682E-01 -2.0020045438E-01 --2.0000025314E-01 -1.9980045191E-01 -1.9960104948E-01 -1.9940204467E-01 --1.9920343628E-01 -1.9900522314E-01 -1.9880740406E-01 -1.9860997787E-01 --1.9841294340E-01 -1.9821629949E-01 -1.9802004497E-01 -1.9782417870E-01 --1.9762869951E-01 -1.9743360626E-01 -1.9723889782E-01 -1.9704457304E-01 --1.9685063079E-01 -1.9665706994E-01 -1.9646388938E-01 -1.9627108797E-01 --1.9607866460E-01 -1.9588661817E-01 -1.9569494757E-01 -1.9550365169E-01 --1.9531272943E-01 -1.9512217971E-01 -1.9493200143E-01 -1.9474219352E-01 --1.9455275487E-01 -1.9436368444E-01 -1.9417498113E-01 -1.9398664388E-01 --1.9379867162E-01 -1.9361106331E-01 -1.9342381787E-01 -1.9323693426E-01 --1.9305041144E-01 -1.9286424835E-01 -1.9267844395E-01 -1.9249299722E-01 --1.9230790712E-01 -1.9212317263E-01 -1.9193879271E-01 -1.9175476635E-01 --1.9157109253E-01 -1.9138777024E-01 -1.9120479848E-01 -1.9102217623E-01 --1.9083990250E-01 -1.9065797629E-01 -1.9047639661E-01 -1.9029516247E-01 --1.9011427288E-01 -1.8993372687E-01 -1.8975352344E-01 -1.8957366164E-01 --1.8939414049E-01 -1.8921495901E-01 -1.8903611626E-01 -1.8885761127E-01 --1.8867944308E-01 -1.8850161074E-01 -1.8832411330E-01 -1.8814694982E-01 --1.8797011936E-01 -1.8779362098E-01 -1.8761745373E-01 -1.8744161670E-01 --1.8726610896E-01 -1.8709092957E-01 -1.8691607763E-01 -1.8674155220E-01 --1.8656735239E-01 -1.8639347727E-01 -1.8621992595E-01 -1.8604669751E-01 --1.8587379106E-01 -1.8570120571E-01 -1.8552894054E-01 -1.8535699469E-01 --1.8518536726E-01 -1.8501405736E-01 -1.8484306411E-01 -1.8467238665E-01 --1.8450202409E-01 -1.8433197557E-01 -1.8416224021E-01 -1.8399281715E-01 --1.8382370553E-01 -1.8365490450E-01 -1.8348641320E-01 -1.8331823077E-01 --1.8315035637E-01 -1.8298278915E-01 -1.8281552828E-01 -1.8264857290E-01 --1.8248192219E-01 -1.8231557531E-01 -1.8214953143E-01 -1.8198378972E-01 --1.8181834937E-01 -1.8165320954E-01 -1.8148836943E-01 -1.8132382821E-01 --1.8115958507E-01 -1.8099563921E-01 -1.8083198982E-01 -1.8066863609E-01 --1.8050557722E-01 -1.8034281242E-01 -1.8018034090E-01 -1.8001816185E-01 --1.7985627449E-01 -1.7969467804E-01 -1.7953337170E-01 -1.7937235471E-01 --1.7921162628E-01 -1.7905118564E-01 -1.7889103201E-01 -1.7873116463E-01 --1.7857158272E-01 -1.7841228553E-01 -1.7825327230E-01 -1.7809454226E-01 --1.7793609466E-01 -1.7777792874E-01 -1.7762004376E-01 -1.7746243897E-01 --1.7730511362E-01 -1.7714806698E-01 -1.7699129829E-01 -1.7683480682E-01 --1.7667859184E-01 -1.7652265262E-01 -1.7636698843E-01 -1.7621159853E-01 --1.7605648221E-01 -1.7590163874E-01 -1.7574706741E-01 -1.7559276749E-01 --1.7543873828E-01 -1.7528497906E-01 -1.7513148912E-01 -1.7497826775E-01 --1.7482531426E-01 -1.7467262794E-01 -1.7452020808E-01 -1.7436805400E-01 --1.7421616499E-01 -1.7406454037E-01 -1.7391317945E-01 -1.7376208154E-01 --1.7361124595E-01 -1.7346067200E-01 -1.7331035902E-01 -1.7316030631E-01 --1.7301051322E-01 -1.7286097906E-01 -1.7271170316E-01 -1.7256268486E-01 --1.7241392349E-01 -1.7226541839E-01 -1.7211716889E-01 -1.7196917433E-01 --1.7182143406E-01 -1.7167394742E-01 - - - -3.3081837159E-08 3.8801090494E-02 7.8462207829E-02 1.1982095700E-01 -1.6367055110E-01 2.1073873627E-01 2.6166803749E-01 3.1699772589E-01 -3.7714787499E-01 4.4240583332E-01 5.1291539408E-01 5.8866889096E-01 -6.6950239254E-01 7.5509410808E-01 8.4496605544E-01 9.3848897886E-01 -1.0348904412E+00 1.1332659537E+00 1.2325929474E+00 1.3317473344E+00 -1.4295223563E+00 1.5246493736E+00 1.6158202077E+00 1.7017106209E+00 -1.7810044911E+00 1.8524182269E+00 1.9147249607E+00 1.9667780596E+00 -2.0075335063E+00 2.0360707209E+00 2.0516114226E+00 2.0535361672E+00 -2.0413982378E+00 2.0149346145E+00 1.9740738058E+00 1.9189403795E+00 -1.8498560953E+00 1.7673376031E+00 1.6720907368E+00 1.5650014958E+00 -1.4471238695E+00 1.3196647194E+00 1.1839659882E+00 1.0414845546E+00 -8.9377009786E-01 7.4244137177E-01 5.8916131788E-01 4.3561146729E-01 -2.8346609406E-01 1.3436658535E-01 -1.0103511855E-02 -1.4844232265E-01 --2.7925193324E-01 -4.0125874733E-01 -5.1333155927E-01 -6.1449703963E-01 --7.0395238082E-01 -7.8107490749E-01 -8.4542851718E-01 -8.9676688061E-01 --9.3503339529E-01 -9.6035795203E-01 -9.7305063715E-01 -9.7359255539E-01 --9.6262401625E-01 -9.4093037973E-01 -9.0942590527E-01 -8.6913598848E-01 --8.2117820333E-01 -7.6674259515E-01 -7.0707165198E-01 -6.4344060068E-01 --5.7713458898E-01 -5.0941742413E-01 -4.4150498414E-01 -3.7454481520E-01 --3.0959747807E-01 -2.4762016412E-01 -1.8945280554E-01 -1.3580690320E-01 --8.7257238099E-02 -4.4236572264E-02 -7.0333836752E-03 2.4207381469E-02 -4.9480616984E-02 6.8914561807E-02 8.2761694023E-02 9.1387257266E-02 -9.5255708837E-02 9.4915418924E-02 9.0981983083E-02 8.4120535523E-02 -7.5027467972E-02 6.4411967621E-02 5.2977788128E-02 4.1405659269E-02 -3.0336723901E-02 2.0357367265E-02 1.1991089572E-02 5.6303709337E-03 -1.7927863400E-03 4.1834570964E-04 2.3603889395E-05 -1.0666644658E-05 -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. - - --5.2646526361E-08 1.0206983163E-01 2.0241542828E-01 2.9934822009E-01 -3.9125025752E-01 4.7660776023E-01 5.5404259115E-01 6.2234102695E-01 -6.8047924944E-01 7.2764504590E-01 7.6325528027E-01 7.8696877992E-01 -7.9869437185E-01 7.9859389725E-01 7.8708013162E-01 7.6480963711E-01 -7.3267067382E-01 6.9176639348E-01 6.4339363208E-01 5.8901770533E-01 -5.3024368965E-01 4.6878474215E-01 4.0642807201E-01 3.4499922375E-01 -2.8632536785E-01 2.3219831543E-01 1.8433798175E-01 1.4435701642E-01 -1.1372729806E-01 9.3748956857E-02 8.5522541380E-02 8.9924886751E-02 -1.0758917100E-01 1.3888956636E-01 1.8393080432E-01 2.4254287830E-01 -3.1428100912E-01 3.9843089591E-01 4.9401917299E-01 5.9982889151E-01 -7.1441974680E-01 8.3615267940E-01 9.6321839201E-01 1.0936692476E+00 -1.2254539469E+00 1.3564543295E+00 1.4845235988E+00 1.6075252442E+00 -1.7233719187E+00 1.8300635314E+00 1.9257238278E+00 2.0086347622E+00 -2.0772680090E+00 2.1303130160E+00 2.1667010726E+00 2.1856249439E+00 -2.1865537107E+00 2.1692425526E+00 2.1337373107E+00 2.0803737753E+00 -2.0097717468E+00 1.9228240290E+00 1.8206806136E+00 1.7047284170E+00 -1.5765670213E+00 1.4379809561E+00 1.2909091310E+00 1.1374120915E+00 -9.7963782033E-01 8.1978684334E-01 6.6007734054E-01 5.0271149271E-01 -3.4983410794E-01 2.0347178527E-01 6.5486669206E-02 -6.2453995273E-02 --1.7890484798E-01 -2.8266490191E-01 -3.7279525691E-01 -4.4863171241E-01 --5.0979205654E-01 -5.5617791353E-01 -5.8797113812E-01 -6.0562485176E-01 --6.0984931987E-01 -6.0159296989E-01 -5.8201894415E-01 -5.5247766860E-01 --5.1447599496E-01 -4.6964354086E-01 -4.1969690571E-01 -3.6640248090E-01 --3.1153859942E-01 -2.5685778143E-01 -2.0404982968E-01 -1.5470651048E-01 --1.1028852304E-01 -7.2095415546E-02 -4.1254952370E-02 -1.8534942205E-02 --5.0809702026E-03 -4.6393792313E-04 3.6603198876E-05 -4.0769593284E-05 -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. - - --1.1508020072E-06 -9.3498813445E-03 -3.7035805707E-02 -8.1984762786E-02 --1.4246797486E-01 -2.1618707200E-01 -3.0038853355E-01 -3.9200056703E-01 --4.8778544462E-01 -5.8449951727E-01 -6.7905271765E-01 -7.6865936672E-01 --8.5097251617E-01 -9.2419487013E-01 -9.8716049512E-01 -1.0393829905E+00 --1.0810674802E+00 -1.1130856168E+00 -1.1369146714E+00 -1.1545436212E+00 --1.1683508508E+00 -1.1809595688E+00 -1.1950782283E+00 -1.2133340718E+00 --1.2381083528E+00 -1.2713817936E+00 -1.3145984159E+00 -1.3685550525E+00 --1.4333226427E+00 -1.5082038966E+00 -1.5917301533E+00 -1.6816983350E+00 --1.7752469197E+00 -1.8689679002E+00 -1.9590498745E+00 -2.0414458087E+00 --2.1120577082E+00 -2.1669294948E+00 -2.2024388606E+00 -2.2154787902E+00 --2.2036198154E+00 -2.1652448716E+00 -2.0996498393E+00 -2.0071044102E+00 --1.8888697489E+00 -1.7471714437E+00 -1.5851283506E+00 -1.4066400422E+00 --1.2162375641E+00 -1.0189039939E+00 -8.1987279026E-01 -6.2441304937E-01 --4.3761148754E-01 -2.6416121574E-01 -1.0816713890E-01 2.7022885313E-02 -1.3895312488E-01 2.2615480904E-01 2.8819606886E-01 3.2568440043E-01 -3.4022125433E-01 3.3431058917E-01 3.1122536185E-01 2.7483790537E-01 -2.2942183240E-01 1.7943444462E-01 1.2928955012E-01 8.3131043920E-02 -4.4617578972E-02 1.6715533390E-02 1.6962975496E-03 -6.6930380796E-04 -1.3110909322E-04 -1.6952663946E-05 2.8584407845E-07 0.0000000000E+00 -0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. 0. 0. -0. 0. - - --3.4022469621E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 --1.0689678392E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 --1.0066422427E+00 - - - - --4.0506512033E-10 1.5528578244E-02 3.1044555847E-02 4.6535372494E-02 -6.1988550065E-02 7.7391732202E-02 9.2732723121E-02 1.0799952495E-01 -1.2318037325E-01 1.3826377047E-01 1.5323851701E-01 1.6809373973E-01 -1.8281891771E-01 1.9740390511E-01 2.1183895106E-01 2.2611471655E-01 -2.4022228826E-01 2.5415318950E-01 2.6789938825E-01 2.8145330241E-01 -2.9480780260E-01 3.0795621249E-01 3.2089230707E-01 3.3361030902E-01 -3.4610488344E-01 3.5837113132E-01 3.7040458187E-01 3.8220118421E-01 -3.9375729844E-01 4.0506968655E-01 4.1613550336E-01 4.2695228766E-01 -4.3751795373E-01 4.4783078347E-01 4.5788941927E-01 4.6769285751E-01 -4.7724044303E-01 4.8653186430E-01 4.9556714941E-01 5.0434666277E-01 -5.1287110237E-01 5.2114149755E-01 5.2915920692E-01 5.3692591647E-01 -5.4444363750E-01 5.5171470412E-01 5.5874177021E-01 5.6552780542E-01 -5.7207609020E-01 5.7839020933E-01 5.8447404407E-01 5.9033176243E-01 -5.9596780766E-01 6.0138688462E-01 6.0659394411E-01 6.1159416497E-01 -6.1639293398E-01 6.2099582376E-01 6.2540856842E-01 6.2963703741E-01 -6.3368720765E-01 6.3756513399E-01 6.4127691860E-01 6.4482867925E-01 -6.4822651703E-01 6.5147648384E-01 6.5458454995E-01 6.5755657209E-01 -6.6039826252E-01 6.6311515937E-01 6.6571259881E-01 6.6819568927E-01 -6.7056928822E-01 6.7283798177E-01 6.7500606743E-01 6.7707754021E-01 -6.7905608245E-01 6.8094505733E-01 6.8274750630E-01 6.8446615052E-01 -6.8610339610E-01 6.8766134328E-01 6.8914179933E-01 6.9054629492E-01 -6.9187610378E-01 6.9313226540E-01 6.9431561016E-01 6.9542678686E-01 -6.9646629187E-01 6.9743449966E-01 6.9833169403E-01 6.9915809971E-01 -6.9991391372E-01 7.0059933588E-01 7.0121459816E-01 7.0175999224E-01 -7.0223589485E-01 7.0264279045E-01 7.0298129097E-01 7.0325215180E-01 -7.0345628481E-01 7.0359476729E-01 7.0366882645E-01 7.0367977546E-01 -7.0362891577E-01 7.0351751187E-01 7.0334680597E-01 7.0311802818E-01 -7.0283238449E-01 7.0249106108E-01 7.0209522439E-01 7.0164602118E-01 -7.0114457901E-01 7.0059200647E-01 6.9998939352E-01 6.9933781184E-01 -6.9863831508E-01 6.9789193918E-01 6.9709970268E-01 6.9626260697E-01 -6.9538163661E-01 6.9445775960E-01 6.9349192764E-01 6.9248507644E-01 -6.9143812593E-01 6.9035198055E-01 6.8922752953E-01 6.8806564709E-01 -6.8686719273E-01 6.8563301147E-01 6.8436393406E-01 6.8306077725E-01 -6.8172434398E-01 6.8035542368E-01 6.7895479239E-01 6.7752321308E-01 -6.7606143579E-01 6.7457019790E-01 6.7305022429E-01 6.7150222756E-01 -6.6992690826E-01 6.6832495505E-01 6.6669704489E-01 6.6504384326E-01 -6.6336600433E-01 6.6166417116E-01 6.5993897583E-01 6.5819103969E-01 -6.5642097348E-01 6.5462937750E-01 6.5281684183E-01 6.5098394643E-01 -6.4913126134E-01 6.4725934683E-01 6.4536875356E-01 6.4346002272E-01 -6.4153368619E-01 6.3959026668E-01 6.3763027789E-01 6.3565422464E-01 -6.3366260303E-01 6.3165590052E-01 6.2963459615E-01 6.2759916060E-01 -6.2555005635E-01 6.2348773783E-01 6.2141265150E-01 6.1932523600E-01 -6.1722592227E-01 6.1511513366E-01 6.1299328607E-01 6.1086078802E-01 -6.0871804082E-01 6.0656543864E-01 6.0440336863E-01 6.0223221104E-01 -6.0005233930E-01 5.9786412014E-01 5.9566791372E-01 5.9346407366E-01 -5.9125294720E-01 5.8903487528E-01 5.8681019263E-01 5.8457922787E-01 -5.8234230357E-01 5.8009973642E-01 5.7785183723E-01 5.7559891106E-01 -5.7334125733E-01 5.7107916984E-01 5.6881293693E-01 5.6654284150E-01 -5.6426916112E-01 5.6199216811E-01 5.5971212962E-01 5.5742930770E-01 -5.5514395937E-01 5.5285633671E-01 5.5056668693E-01 5.4827525244E-01 -5.4598227093E-01 5.4368797542E-01 5.4139259435E-01 5.3909635165E-01 -5.3679946679E-01 5.3450215487E-01 5.3220462666E-01 5.2990708869E-01 -5.2760974330E-01 5.2531278870E-01 5.2301641905E-01 5.2072082451E-01 -5.1842619129E-01 5.1613270172E-01 5.1384053433E-01 5.1154986387E-01 -5.0926086139E-01 5.0697369429E-01 5.0468852639E-01 5.0240551796E-01 -5.0012482581E-01 4.9784660329E-01 4.9557100040E-01 4.9329816382E-01 -4.9102823694E-01 4.8876135995E-01 4.8649766987E-01 4.8423730058E-01 -4.8198038293E-01 4.7972704470E-01 4.7747741075E-01 4.7523160297E-01 -4.7298974041E-01 4.7075193925E-01 4.6851831291E-01 4.6628897206E-01 -4.6406402468E-01 4.6184357608E-01 4.5962772898E-01 4.5741658351E-01 -4.5521023731E-01 4.5300878551E-01 4.5081232080E-01 4.4862093348E-01 -4.4643471148E-01 4.4425374041E-01 4.4207810362E-01 4.3990788218E-01 -4.3774315498E-01 4.3558399874E-01 4.3343048804E-01 4.3128269538E-01 -4.2914069119E-01 4.2700454390E-01 4.2487431992E-01 4.2275008375E-01 -4.2063189794E-01 4.1851982317E-01 4.1641391827E-01 4.1431424026E-01 -4.1222084437E-01 4.1013378408E-01 4.0805311115E-01 4.0597887566E-01 -4.0391112602E-01 4.0184990901E-01 3.9979526984E-01 3.9774725212E-01 -3.9570589795E-01 3.9367124789E-01 3.9164334105E-01 3.8962221507E-01 -3.8760790618E-01 3.8560044918E-01 3.8359987754E-01 3.8160622335E-01 -3.7961951741E-01 3.7763978920E-01 3.7566706695E-01 3.7370137765E-01 -3.7174274706E-01 3.6979119975E-01 3.6784675912E-01 3.6590944742E-01 -3.6397928579E-01 3.6205629424E-01 3.6014049174E-01 3.5823189616E-01 -3.5633052437E-01 3.5443639222E-01 3.5254951455E-01 3.5066990524E-01 -3.4879757722E-01 3.4693254249E-01 3.4507481212E-01 3.4322439631E-01 -3.4138130438E-01 3.3954554479E-01 3.3771712516E-01 3.3589605231E-01 -3.3408233223E-01 3.3227597016E-01 3.3047697055E-01 3.2868533711E-01 -3.2690107282E-01 3.2512417994E-01 3.2335466003E-01 3.2159251398E-01 -3.1983774198E-01 3.1809034360E-01 3.1635031775E-01 3.1461766274E-01 -3.1289237623E-01 3.1117445533E-01 3.0946389654E-01 3.0776069581E-01 -3.0606484852E-01 3.0437634952E-01 3.0269519314E-01 3.0102137317E-01 -2.9935488291E-01 2.9769571518E-01 2.9604386231E-01 2.9439931618E-01 -2.9276206817E-01 2.9113210928E-01 2.8950943002E-01 2.8789402052E-01 -2.8628587047E-01 2.8468496918E-01 2.8309130555E-01 2.8150486812E-01 -2.7992564504E-01 2.7835362412E-01 2.7678879279E-01 2.7523113818E-01 -2.7368064704E-01 2.7213730583E-01 2.7060110068E-01 2.6907201742E-01 -2.6755004156E-01 2.6603515836E-01 2.6452735277E-01 2.6302660946E-01 -2.6153291285E-01 2.6004624710E-01 2.5856659611E-01 2.5709394354E-01 -2.5562827281E-01 2.5416956711E-01 2.5271780941E-01 2.5127298246E-01 -2.4983506880E-01 2.4840405076E-01 2.4697991049E-01 2.4556262993E-01 -2.4415219083E-01 2.4274857479E-01 2.4135176319E-01 2.3996173729E-01 -2.3857847815E-01 2.3720196669E-01 2.3583218366E-01 2.3446910969E-01 -2.3311272524E-01 2.3176301065E-01 2.3041994611E-01 2.2908351169E-01 -2.2775368735E-01 2.2643045291E-01 2.2511378807E-01 2.2380367245E-01 -2.2250008552E-01 2.2120300669E-01 2.1991241525E-01 2.1862829038E-01 -2.1735061119E-01 2.1607935671E-01 2.1481450586E-01 2.1355603749E-01 -2.1230393038E-01 2.1105816322E-01 2.0981871466E-01 2.0858556324E-01 -2.0735868747E-01 2.0613806579E-01 2.0492367657E-01 2.0371549814E-01 -2.0251350876E-01 2.0131768666E-01 2.0012801000E-01 1.9894445693E-01 -1.9776700552E-01 1.9659563382E-01 1.9543031985E-01 1.9427104158E-01 -1.9311777694E-01 1.9197050386E-01 1.9082920023E-01 1.8969384389E-01 -1.8856441269E-01 1.8744088445E-01 1.8632323696E-01 1.8521144799E-01 -1.8410549531E-01 1.8300535668E-01 1.8191100982E-01 1.8082243247E-01 -1.7973960235E-01 1.7866249716E-01 1.7759109462E-01 1.7652537244E-01 -1.7546530831E-01 1.7441087993E-01 1.7336206502E-01 1.7231884128E-01 -1.7128118642E-01 1.7024907816E-01 1.6922249422E-01 1.6820141235E-01 -1.6718581027E-01 1.6617566575E-01 1.6517095654E-01 1.6417166044E-01 -1.6317775524E-01 1.6218921873E-01 1.6120602877E-01 1.6022816318E-01 -1.5925559983E-01 1.5828831661E-01 1.5732629143E-01 1.5636950221E-01 -1.5541792691E-01 1.5447154350E-01 1.5353032999E-01 1.5259426439E-01 -1.5166332477E-01 1.5073748921E-01 1.4981673583E-01 1.4890104275E-01 -1.4799038816E-01 1.4708475026E-01 1.4618410727E-01 1.4528843748E-01 -1.4439771918E-01 1.4351193070E-01 1.4263105043E-01 1.4175505676E-01 -1.4088392814E-01 1.4001764304E-01 1.3915618000E-01 1.3829951755E-01 -1.3744763431E-01 1.3660050890E-01 1.3575812000E-01 1.3492044632E-01 -1.3408746663E-01 1.3325915973E-01 1.3243550445E-01 1.3161647968E-01 -1.3080206436E-01 1.2999223745E-01 1.2918697798E-01 1.2838626500E-01 -1.2759007763E-01 1.2679839502E-01 1.2601119637E-01 1.2522846094E-01 -1.2445016802E-01 1.2367629695E-01 1.2290682713E-01 1.2214173800E-01 -1.2138100905E-01 1.2062461982E-01 1.1987254991E-01 1.1912477895E-01 -1.1838128663E-01 1.1764205270E-01 1.1690705696E-01 1.1617627924E-01 -1.1544969946E-01 1.1472729755E-01 1.1400905354E-01 1.1329494746E-01 -1.1258495944E-01 1.1187906964E-01 1.1117725829E-01 1.1047950564E-01 -1.0978579204E-01 1.0909609786E-01 1.0841040355E-01 1.0772868960E-01 -1.0705093656E-01 1.0637712503E-01 1.0570723569E-01 1.0504124925E-01 -1.0437914649E-01 1.0372090823E-01 1.0306651539E-01 1.0241594889E-01 -1.0176918975E-01 1.0112621903E-01 1.0048701786E-01 9.9851567417E-02 -9.9219848941E-02 9.8591843732E-02 9.7967533146E-02 9.7346898602E-02 -9.6729921576E-02 9.6116583603E-02 9.5506866280E-02 9.4900751263E-02 -9.4298220267E-02 9.3699255067E-02 9.3103837502E-02 9.2511949466E-02 -9.1923572919E-02 9.1338689877E-02 9.0757282421E-02 9.0179332691E-02 -8.9604822887E-02 8.9033735273E-02 8.8466052173E-02 8.7901755973E-02 -8.7340829119E-02 8.6783254122E-02 8.6229013551E-02 8.5678090039E-02 -8.5130466282E-02 8.4586125036E-02 8.4045049120E-02 8.3507221416E-02 -8.2972624867E-02 8.2441242479E-02 8.1913057321E-02 8.1388052524E-02 -8.0866211282E-02 8.0347516851E-02 7.9831952549E-02 7.9319501759E-02 -7.8810147926E-02 7.8303874556E-02 7.7800665221E-02 7.7300503553E-02 -7.6803373249E-02 7.6309258067E-02 7.5818141830E-02 7.5330008423E-02 -7.4844841795E-02 7.4362625956E-02 7.3883344981E-02 7.3406983007E-02 -7.2933524235E-02 7.2462952928E-02 7.1995253412E-02 7.1530410079E-02 -7.1068407379E-02 7.0609229830E-02 7.0152862009E-02 6.9699288559E-02 -6.9248494185E-02 6.8800463654E-02 6.8355181797E-02 6.7912633508E-02 -6.7472803743E-02 6.7035677522E-02 6.6601239927E-02 6.6169476103E-02 -6.5740371258E-02 6.5313910662E-02 6.4890079648E-02 6.4468863611E-02 -6.4050248011E-02 6.3634218368E-02 6.3220760264E-02 6.2809859346E-02 -6.2401501320E-02 6.1995671957E-02 6.1592357090E-02 6.1191542611E-02 -6.0793214478E-02 6.0397358708E-02 6.0003961382E-02 5.9613008642E-02 -5.9224486690E-02 5.8838381792E-02 5.8454680274E-02 5.8073368525E-02 -5.7694432994E-02 5.7317860192E-02 5.6943636689E-02 5.6571749120E-02 -5.6202184178E-02 5.5834928618E-02 5.5469969254E-02 5.5107292963E-02 -5.4746886682E-02 5.4388737407E-02 5.4032832197E-02 5.3679158167E-02 -5.3327702496E-02 5.2978452421E-02 5.2631395240E-02 5.2286518310E-02 -5.1943809047E-02 5.1603254927E-02 5.1264843486E-02 5.0928562319E-02 -5.0594399080E-02 5.0262341481E-02 4.9932377293E-02 4.9604494348E-02 -4.9278680533E-02 4.8954923797E-02 4.8633212144E-02 4.8313533638E-02 -4.7995876402E-02 4.7680228613E-02 4.7366578511E-02 4.7054914388E-02 -4.6745224598E-02 4.6437497551E-02 4.6131721711E-02 4.5827885604E-02 -4.5525977809E-02 4.5225986964E-02 4.4927901761E-02 4.4631710951E-02 -4.4337403340E-02 4.4044967789E-02 4.3754393217E-02 4.3465668598E-02 -4.3178782960E-02 4.2893725389E-02 4.2610485023E-02 4.2329051059E-02 -4.2049412744E-02 4.1771559385E-02 4.1495480341E-02 4.1221165023E-02 -4.0948602902E-02 4.0677783497E-02 4.0408696384E-02 4.0141331194E-02 -3.9875677609E-02 3.9611725364E-02 3.9349464250E-02 3.9088884109E-02 -3.8829974836E-02 3.8572726380E-02 3.8317128739E-02 3.8063171969E-02 -3.7810846172E-02 3.7560141506E-02 3.7311048180E-02 3.7063556454E-02 -3.6817656639E-02 3.6573339099E-02 3.6330594247E-02 3.6089412548E-02 -3.5849784517E-02 3.5611700721E-02 3.5375151776E-02 3.5140128348E-02 -3.4906621154E-02 3.4674620960E-02 3.4444118581E-02 3.4215104884E-02 -3.3987570781E-02 3.3761507238E-02 3.3536905265E-02 3.3313755924E-02 -3.3092050324E-02 3.2871779623E-02 3.2652935027E-02 3.2435507790E-02 -3.2219489212E-02 3.2004870643E-02 3.1791643479E-02 3.1579799164E-02 -3.1369329188E-02 3.1160225087E-02 3.0952478447E-02 3.0746080897E-02 -3.0541024114E-02 3.0337299820E-02 3.0134899783E-02 2.9933815817E-02 -2.9734039782E-02 2.9535563582E-02 2.9338379168E-02 2.9142478533E-02 -2.8947853717E-02 2.8754496804E-02 2.8562399922E-02 2.8371555244E-02 -2.8181954985E-02 2.7993591406E-02 2.7806456810E-02 2.7620543544E-02 -2.7435843999E-02 2.7252350607E-02 2.7070055844E-02 2.6888952230E-02 -2.6709032325E-02 2.6530288732E-02 2.6352714096E-02 2.6176301106E-02 -2.6001042489E-02 2.5826931017E-02 2.5653959501E-02 2.5482120793E-02 -2.5311407787E-02 2.5141813419E-02 2.4973330663E-02 2.4805952534E-02 -2.4639672088E-02 2.4474482421E-02 2.4310376669E-02 2.4147348006E-02 -2.3985389646E-02 2.3824494845E-02 2.3664656894E-02 2.3505869126E-02 -2.3348124911E-02 2.3191417658E-02 2.3035740814E-02 2.2881087866E-02 -2.2727452336E-02 2.2574827786E-02 2.2423207815E-02 2.2272586060E-02 -2.2122956193E-02 2.1974311927E-02 2.1826647008E-02 2.1679955221E-02 -2.1534230387E-02 2.1389466363E-02 2.1245657042E-02 2.1102796355E-02 -2.0960878266E-02 2.0819896776E-02 2.0679845923E-02 2.0540719776E-02 -2.0402512444E-02 2.0265218069E-02 2.0128830826E-02 1.9993344927E-02 -1.9858754617E-02 1.9725054177E-02 1.9592237920E-02 1.9460300195E-02 -1.9329235382E-02 1.9199037897E-02 1.9069702188E-02 1.8941222738E-02 -1.8813594060E-02 1.8686810703E-02 1.8560867247E-02 1.8435758305E-02 -1.8311478523E-02 1.8188022577E-02 1.8065385177E-02 1.7943561065E-02 -1.7822545014E-02 1.7702331828E-02 1.7582916345E-02 1.7464293430E-02 -1.7346457982E-02 1.7229404931E-02 1.7113129236E-02 1.6997625888E-02 -1.6882889908E-02 1.6768916347E-02 1.6655700286E-02 1.6543236836E-02 -1.6431521138E-02 1.6320548364E-02 1.6210313711E-02 1.6100812411E-02 -1.5992039721E-02 1.5883990929E-02 1.5776661350E-02 1.5670046330E-02 -1.5564141241E-02 1.5458941486E-02 1.5354442494E-02 1.5250639724E-02 -1.5147528661E-02 1.5045104818E-02 1.4943363737E-02 1.4842300986E-02 -1.4741912161E-02 1.4642192885E-02 1.4543138808E-02 1.4444745607E-02 -1.4347008985E-02 1.4249924673E-02 1.4153488426E-02 1.4057696028E-02 -1.3962543287E-02 1.3868026039E-02 1.3774140142E-02 1.3680881485E-02 -1.3588245978E-02 1.3496229560E-02 1.3404828191E-02 1.3314037860E-02 -1.3223854579E-02 1.3134274386E-02 1.3045293342E-02 1.2956907535E-02 -1.2869113074E-02 1.2781906095E-02 1.2695282758E-02 1.2609239246E-02 -1.2523771766E-02 1.2438876549E-02 1.2354549849E-02 1.2270787944E-02 -1.2187587137E-02 1.2104943750E-02 1.2022854132E-02 1.1941314653E-02 -1.1860321706E-02 1.1779871707E-02 1.1699961095E-02 1.1620586331E-02 -1.1541743896E-02 1.1463430298E-02 1.1385642063E-02 1.1308375739E-02 -1.1231627899E-02 1.1155395135E-02 1.1079674059E-02 1.1004461309E-02 -1.0929753541E-02 1.0855547433E-02 1.0781839682E-02 1.0708627010E-02 -1.0635906157E-02 1.0563673884E-02 1.0491926972E-02 1.0420662224E-02 -1.0349876462E-02 1.0279566528E-02 1.0209729286E-02 1.0140361618E-02 -1.0071460425E-02 1.0003022631E-02 9.9350451770E-03 9.8675250238E-03 -9.8004591520E-03 9.7338445614E-03 9.6676782708E-03 9.6019573181E-03 -9.5366787599E-03 9.4718396718E-03 9.4074371480E-03 9.3434683014E-03 -9.2799302630E-03 9.2168201825E-03 9.1541352276E-03 9.0918725843E-03 -9.0300294566E-03 8.9686030662E-03 8.9075906529E-03 8.8469894739E-03 -8.7867968042E-03 8.7270099362E-03 8.6676261798E-03 8.6086428619E-03 -8.5500573269E-03 8.4918669359E-03 8.4340690674E-03 8.3766611164E-03 -8.3196404949E-03 8.2630046313E-03 8.2067509708E-03 8.1508769749E-03 -8.0953801216E-03 8.0402579050E-03 7.9855078355E-03 7.9311274394E-03 -7.8771142592E-03 7.8234658531E-03 7.7701797950E-03 7.7172536747E-03 -7.6646850974E-03 7.6124716838E-03 7.5606110701E-03 7.5091009077E-03 -7.4579388632E-03 7.4071226183E-03 7.3566498698E-03 7.3065183293E-03 -7.2567257235E-03 7.2072697934E-03 7.1581482950E-03 7.1093589988E-03 -7.0608996897E-03 7.0127681669E-03 6.9649622442E-03 6.9174797493E-03 -6.8703185241E-03 6.8234764246E-03 6.7769513207E-03 6.7307410961E-03 -6.6848436485E-03 6.6392568889E-03 6.5939787423E-03 6.5490071469E-03 -6.5043400546E-03 6.4599754304E-03 6.4159112528E-03 6.3721455134E-03 -6.3286762167E-03 6.2855013806E-03 6.2426190357E-03 6.2000272254E-03 -6.1577240060E-03 6.1157074467E-03 6.0739756288E-03 6.0325266467E-03 -5.9913586069E-03 5.9504696285E-03 5.9098578426E-03 5.8695213929E-03 -5.8294584351E-03 5.7896671370E-03 5.7501456782E-03 5.7108922506E-03 -5.6719050577E-03 5.6331823149E-03 5.5947222491E-03 5.5565230991E-03 -5.5185831150E-03 5.4809005587E-03 5.4434737032E-03 5.4063008331E-03 -5.3693802440E-03 5.3327102430E-03 5.2962891480E-03 5.2601152882E-03 -5.2241870038E-03 5.1885026458E-03 5.1530605759E-03 5.1178591670E-03 -5.0828968025E-03 5.0481718762E-03 5.0136827928E-03 4.9794279675E-03 -4.9454058258E-03 4.9116148035E-03 4.8780533471E-03 4.8447199129E-03 -4.8116129676E-03 4.7787309881E-03 4.7460724611E-03 4.7136358834E-03 -4.6814197619E-03 4.6494226132E-03 4.6176429636E-03 4.5860793493E-03 -4.5547303161E-03 4.5235944194E-03 4.4926702244E-03 4.4619563053E-03 -4.4314512461E-03 4.4011536401E-03 4.3710620899E-03 4.3411752072E-03 -4.3114916132E-03 4.2820099379E-03 4.2527288206E-03 4.2236469095E-03 -4.1947628619E-03 4.1660753437E-03 4.1375830300E-03 4.1092846045E-03 -4.0811787595E-03 4.0532641964E-03 4.0255396246E-03 3.9980037627E-03 -3.9706553374E-03 3.9434930839E-03 3.9165157460E-03 3.8897220755E-03 -3.8631108329E-03 3.8366807866E-03 3.8104307134E-03 3.7843593981E-03 -3.7584656336E-03 3.7327482208E-03 3.7072059688E-03 3.6818376943E-03 -3.6566422220E-03 3.6316183845E-03 3.6067650221E-03 3.5820809828E-03 -3.5575651223E-03 3.5332163039E-03 3.5090333986E-03 3.4850152847E-03 -3.4611608480E-03 3.4374689820E-03 3.4139385872E-03 3.3905685718E-03 -3.3673578509E-03 3.3443053471E-03 3.3214099902E-03 3.2986707169E-03 -3.2760864712E-03 3.2536562042E-03 3.2313788737E-03 3.2092534448E-03 -3.1872788893E-03 3.1654541859E-03 3.1437783202E-03 3.1222502846E-03 -3.1008690780E-03 3.0796337062E-03 3.0585431816E-03 3.0375965232E-03 -3.0167927565E-03 2.9961309137E-03 2.9756100332E-03 2.9552291600E-03 -2.9349873455E-03 2.9148836474E-03 2.8949171297E-03 2.8750868627E-03 -2.8553919229E-03 2.8358313929E-03 2.8164043616E-03 2.7971099240E-03 -2.7779471810E-03 2.7589152396E-03 2.7400132128E-03 2.7212402197E-03 -2.7025953849E-03 2.6840778392E-03 2.6656867193E-03 2.6474211673E-03 -2.6292803314E-03 2.6112633654E-03 2.5933694288E-03 2.5755976866E-03 -2.5579473096E-03 2.5404174740E-03 2.5230073618E-03 2.5057161600E-03 -2.4885430616E-03 2.4714872647E-03 2.4545479728E-03 2.4377243949E-03 -2.4210157452E-03 2.4044212432E-03 2.3879401136E-03 2.3715715864E-03 -2.3553148967E-03 2.3391692849E-03 2.3231339962E-03 2.3072082811E-03 -2.2913913952E-03 2.2756825989E-03 2.2600811577E-03 2.2445863420E-03 -2.2291974272E-03 2.2139136934E-03 2.1987344257E-03 2.1836589140E-03 -2.1686864528E-03 2.1538163416E-03 2.1390478845E-03 2.1243803902E-03 -2.1098131723E-03 2.0953455487E-03 2.0809768422E-03 2.0667063799E-03 -2.0525334936E-03 2.0384575195E-03 2.0244777985E-03 2.0105936757E-03 -1.9968045006E-03 1.9831096273E-03 1.9695084140E-03 1.9560002235E-03 -1.9425844226E-03 1.9292603827E-03 1.9160274791E-03 1.9028850916E-03 -1.8898326040E-03 1.8768694044E-03 1.8639948848E-03 1.8512084416E-03 -1.8385094750E-03 1.8258973895E-03 1.8133715934E-03 1.8009314992E-03 -1.7885765232E-03 1.7763060856E-03 1.7641196108E-03 1.7520165268E-03 -1.7399962656E-03 1.7280582630E-03 1.7162019586E-03 1.7044267958E-03 -1.6927322218E-03 1.6811176875E-03 1.6695826474E-03 1.6581265600E-03 -1.6467488872E-03 1.6354490945E-03 1.6242266513E-03 1.6130810302E-03 -1.6020117077E-03 1.5910181636E-03 1.5800998815E-03 1.5692563481E-03 -1.5584870541E-03 1.5477914930E-03 1.5371691624E-03 1.5266195627E-03 -1.5161421981E-03 1.5057365760E-03 1.4954022071E-03 1.4851386055E-03 -1.4749452884E-03 1.4648217767E-03 1.4547675940E-03 1.4447822675E-03 -1.4348653275E-03 1.4250163074E-03 1.4152347439E-03 1.4055201767E-03 -1.3958721488E-03 1.3862902061E-03 1.3767738977E-03 1.3673227757E-03 -1.3579363952E-03 1.3486143144E-03 1.3393560946E-03 1.3301612998E-03 -1.3210294971E-03 1.3119602565E-03 1.3029531511E-03 1.2940077566E-03 -1.2851236518E-03 1.2763004182E-03 1.2675376403E-03 1.2588349052E-03 -1.2501918032E-03 1.2416079268E-03 1.2330828718E-03 1.2246162364E-03 -1.2162076217E-03 1.2078566315E-03 1.1995628722E-03 1.1913259529E-03 -1.1831454854E-03 1.1750210841E-03 1.1669523660E-03 1.1589389508E-03 -1.1509804606E-03 1.1430765203E-03 - - - -0.0000000000E+00 2.4113674229E-04 9.6376444773E-04 2.1655408931E-03 -3.8425803392E-03 5.9894802133E-03 8.5993579374E-03 1.1663897389E-02 -1.5173404353E-02 1.9116870224E-02 2.3482043094E-02 2.8255505335E-02 -3.3422756672E-02 3.8968301752E-02 4.4875741187E-02 5.1127865039E-02 -5.7706747775E-02 6.4593843734E-02 7.1770082223E-02 7.9215961437E-02 -8.6911640472E-02 9.4837028809E-02 1.0297187274E-01 1.1129583828E-01 -1.1978859034E-01 1.2842986776E-01 1.3719955427E-01 1.4607774521E-01 -1.5504481007E-01 1.6408145096E-01 1.7316875716E-01 1.8228825594E-01 -1.9142195983E-01 2.0055241063E-01 2.0966272028E-01 2.1873660897E-01 -2.2775844047E-01 2.3671325498E-01 2.4558679957E-01 2.5436555624E-01 -2.6303676765E-01 2.7158846047E-01 2.8000946627E-01 2.8828943978E-01 -2.9641887441E-01 3.0438911474E-01 3.1219236577E-01 3.1982169871E-01 -3.2727105298E-01 3.3453523425E-01 3.4160990819E-01 3.4849158973E-01 -3.5517762776E-01 3.6166618499E-01 3.6795621304E-01 3.7404742262E-01 -3.7994024907E-01 3.8563581313E-01 3.9113587745E-01 3.9644279888E-01 -4.0155947714E-01 4.0648930008E-01 4.1123608633E-01 4.1580402558E-01 -4.2019761738E-01 4.2442160900E-01 4.2848093304E-01 4.3238064550E-01 -4.3612586514E-01 4.3972171459E-01 4.4317326421E-01 4.4648547915E-01 -4.4966317030E-01 4.5271094972E-01 4.5563319107E-01 4.5843399546E-01 -4.6111716312E-01 4.6368617110E-01 4.6614415736E-01 4.6849391121E-01 -4.7073787014E-01 4.7287812304E-01 4.7491641958E-01 4.7685418542E-01 -4.7869254299E-01 4.8043233733E-01 4.8207416651E-01 4.8361841588E-01 -4.8506529572E-01 4.8641488132E-01 4.8766715488E-01 4.8882204840E-01 -4.8987948662E-01 4.9083942943E-01 4.9170191267E-01 4.9246708671E-01 -4.9313525202E-01 4.9370689098E-01 4.9418269545E-01 4.9456358899E-01 -4.9485074465E-01 4.9504559656E-01 4.9514981734E-01 4.9516522635E-01 -4.9509365106E-01 4.9493688953E-01 4.9469672946E-01 4.9437496155E-01 -4.9397336069E-01 4.9349369090E-01 4.9293770411E-01 4.9230713904E-01 -4.9160372068E-01 4.9082915952E-01 4.8998515104E-01 4.8907337507E-01 -4.8809549530E-01 4.8705315878E-01 4.8594799547E-01 4.8478161786E-01 -4.8355562053E-01 4.8227157986E-01 4.8093105371E-01 4.7953558109E-01 -4.7808668199E-01 4.7658585705E-01 4.7503458746E-01 4.7343433470E-01 -4.7178654046E-01 4.7009262642E-01 4.6835399425E-01 4.6657202541E-01 -4.6474808118E-01 4.6288350253E-01 4.6097961011E-01 4.5903770426E-01 -4.5705906496E-01 4.5504495189E-01 4.5299660441E-01 4.5091524162E-01 -4.4880206242E-01 4.4665824554E-01 4.4448494966E-01 4.4228331346E-01 -4.4005445571E-01 4.3779947540E-01 4.3551945182E-01 4.3321544473E-01 -4.3088849442E-01 4.2853962189E-01 4.2616982898E-01 4.2378009851E-01 -4.2137139445E-01 4.1894466206E-01 4.1650082808E-01 4.1404080084E-01 -4.1156547051E-01 4.0907570923E-01 4.0657237128E-01 4.0405629331E-01 -4.0152829447E-01 3.9898917666E-01 3.9643972467E-01 3.9388070638E-01 -3.9131287300E-01 3.8873695923E-01 3.8615368345E-01 3.8356374795E-01 -3.8096783912E-01 3.7836662766E-01 3.7576076876E-01 3.7315090234E-01 -3.7053765322E-01 3.6792163135E-01 3.6530343201E-01 3.6268363601E-01 -3.6006280990E-01 3.5744150616E-01 3.5482026343E-01 3.5219960672E-01 -3.4958004757E-01 3.4696208430E-01 3.4434620218E-01 3.4173287365E-01 -3.3912255853E-01 3.3651570420E-01 3.3391274579E-01 3.3131410642E-01 -3.2872019735E-01 3.2613141823E-01 3.2354815722E-01 3.2097079125E-01 -3.1839968619E-01 3.1583519702E-01 3.1327766805E-01 3.1072743308E-01 -3.0818481562E-01 3.0565012904E-01 3.0312367676E-01 3.0060575244E-01 -2.9809664017E-01 2.9559661461E-01 2.9310594122E-01 2.9062487636E-01 -2.8815366754E-01 2.8569255356E-01 2.8324176464E-01 2.8080152264E-01 -2.7837204122E-01 2.7595352597E-01 2.7354617460E-01 2.7115017708E-01 -2.6876571581E-01 2.6639296579E-01 2.6403209472E-01 2.6168326322E-01 -2.5934662494E-01 2.5702232670E-01 2.5471050867E-01 2.5241130448E-01 -2.5012484139E-01 2.4785124041E-01 2.4559061644E-01 2.4334307843E-01 -2.4110872947E-01 2.3888766698E-01 2.3667998279E-01 2.3448576328E-01 -2.3230508952E-01 2.3013803742E-01 2.2798467778E-01 2.2584507647E-01 -2.2371929453E-01 2.2160738831E-01 2.1950940953E-01 2.1742540547E-01 -2.1535541900E-01 2.1329948876E-01 2.1125764924E-01 2.0922993087E-01 -2.0721636015E-01 2.0521695975E-01 2.0323174858E-01 2.0126074195E-01 -1.9930395161E-01 1.9736138587E-01 1.9543304970E-01 1.9351894480E-01 -1.9161906973E-01 1.8973341996E-01 1.8786198796E-01 1.8600476333E-01 -1.8416173284E-01 1.8233288051E-01 1.8051818773E-01 1.7871763331E-01 -1.7693119356E-01 1.7515884238E-01 1.7340055133E-01 1.7165628968E-01 -1.6992602453E-01 1.6820972084E-01 1.6650734152E-01 1.6481884748E-01 -1.6314419772E-01 1.6148334937E-01 1.5983625779E-01 1.5820287657E-01 -1.5658315767E-01 1.5497705142E-01 1.5338450659E-01 1.5180547048E-01 -1.5023988893E-01 1.4868770641E-01 1.4714886605E-01 1.4562330970E-01 -1.4411097800E-01 1.4261181039E-01 1.4112574519E-01 1.3965271966E-01 -1.3819266999E-01 1.3674553141E-01 1.3531123820E-01 1.3388972371E-01 -1.3248092048E-01 1.3108476020E-01 1.2970117379E-01 1.2833009143E-01 -1.2697144260E-01 1.2562515613E-01 1.2429116021E-01 1.2296938244E-01 -1.2165974988E-01 1.2036218904E-01 1.1907662596E-01 1.1780298622E-01 -1.1654119498E-01 1.1529117699E-01 1.1405285663E-01 1.1282615796E-01 -1.1161100471E-01 1.1040732035E-01 1.0921502806E-01 1.0803405083E-01 -1.0686431141E-01 1.0570573238E-01 1.0455823617E-01 1.0342174505E-01 -1.0229618120E-01 1.0118146669E-01 1.0007752354E-01 9.8984273705E-02 -9.7901639104E-02 9.6829541650E-02 9.5767903264E-02 9.4716645886E-02 -9.3675691501E-02 9.2644962150E-02 9.1624379948E-02 9.0613867102E-02 -8.9613345922E-02 8.8622738837E-02 8.7641968414E-02 8.6670957364E-02 -8.5709628561E-02 8.4757905053E-02 8.3815710072E-02 8.2882967051E-02 -8.1959599631E-02 8.1045531675E-02 8.0140687277E-02 7.9244990773E-02 -7.8358366751E-02 7.7480740059E-02 7.6612035816E-02 7.5752179423E-02 -7.4901096565E-02 7.4058713225E-02 7.3224955690E-02 7.2399750556E-02 -7.1583024741E-02 7.0774705485E-02 6.9974720363E-02 6.9182997284E-02 -6.8399464505E-02 6.7624050632E-02 6.6856684624E-02 6.6097295804E-02 -6.5345813858E-02 6.4602168844E-02 6.3866291192E-02 6.3138111713E-02 -6.2417561600E-02 6.1704572434E-02 6.0999076185E-02 6.0301005216E-02 -5.9610292287E-02 5.8926870560E-02 5.8250673596E-02 5.7581635363E-02 -5.6919690236E-02 5.6264773000E-02 5.5616818851E-02 5.4975763399E-02 -5.4341542669E-02 5.3714093104E-02 5.3093351564E-02 5.2479255330E-02 -5.1871742102E-02 5.1270750003E-02 5.0676217580E-02 5.0088083800E-02 -4.9506288058E-02 4.8930770170E-02 4.8361470380E-02 4.7798329354E-02 -4.7241288187E-02 4.6690288396E-02 4.6145271926E-02 4.5606181147E-02 -4.5072958853E-02 4.4545548263E-02 4.4023893020E-02 4.3507937193E-02 -4.2997625271E-02 4.2492902168E-02 4.1993713219E-02 4.1500004181E-02 -4.1011721230E-02 4.0528810961E-02 4.0051220388E-02 3.9578896943E-02 -3.9111788473E-02 3.8649843239E-02 3.8193009917E-02 3.7741237595E-02 -3.7294475771E-02 3.6852674354E-02 3.6415783659E-02 3.5983754410E-02 -3.5556537735E-02 3.5134085163E-02 3.4716348630E-02 3.4303280466E-02 -3.3894833405E-02 3.3490960574E-02 3.3091615495E-02 3.2696752086E-02 -3.2306324653E-02 3.1920287893E-02 3.1538596890E-02 3.1161207114E-02 -3.0788074419E-02 3.0419155038E-02 3.0054405588E-02 2.9693783059E-02 -2.9337244821E-02 2.8984748614E-02 2.8636252551E-02 2.8291715115E-02 -2.7951095155E-02 2.7614351886E-02 2.7281444885E-02 2.6952334092E-02 -2.6626979803E-02 2.6305342674E-02 2.5987383711E-02 2.5673064275E-02 -2.5362346078E-02 2.5055191177E-02 2.4751561976E-02 2.4451421223E-02 -2.4154732006E-02 2.3861457752E-02 2.3571562225E-02 2.3285009525E-02 -2.3001764081E-02 2.2721790655E-02 2.2445054334E-02 2.2171520532E-02 -2.1901154988E-02 2.1633923757E-02 2.1369793219E-02 2.1108730065E-02 -2.0850701304E-02 2.0595674254E-02 2.0343616546E-02 2.0094496117E-02 -1.9848281207E-02 1.9604940364E-02 1.9364442431E-02 1.9126756556E-02 -1.8891852177E-02 1.8659699032E-02 1.8430267146E-02 1.8203526836E-02 -1.7979448708E-02 1.7758003652E-02 1.7539162839E-02 1.7322897724E-02 -1.7109180041E-02 1.6897981797E-02 1.6689275278E-02 1.6483033040E-02 -1.6279227909E-02 1.6077832979E-02 1.5878821612E-02 1.5682167430E-02 -1.5487844320E-02 1.5295826428E-02 1.5106088156E-02 1.4918604162E-02 -1.4733349359E-02 1.4550298908E-02 1.4369428221E-02 1.4190712959E-02 -1.4014129024E-02 1.3839652563E-02 1.3667259966E-02 1.3496927858E-02 -1.3328633105E-02 1.3162352804E-02 1.2998064288E-02 1.2835745120E-02 -1.2675373093E-02 1.2516926224E-02 1.2360382760E-02 1.2205721166E-02 -1.2052920133E-02 1.1901958568E-02 1.1752815597E-02 1.1605470562E-02 -1.1459903018E-02 1.1316092730E-02 1.1174019678E-02 1.1033664044E-02 -1.0895006221E-02 1.0758026805E-02 1.0622706594E-02 1.0489026586E-02 -1.0356967982E-02 1.0226512175E-02 1.0097640758E-02 9.9703355155E-03 -9.8445784238E-03 9.7203516504E-03 9.5976375507E-03 9.4764186673E-03 -9.3566777279E-03 9.2383976434E-03 9.1215615066E-03 9.0061525902E-03 -8.8921543454E-03 8.7795504001E-03 8.6683245574E-03 8.5584607939E-03 -8.4499432580E-03 8.3427562685E-03 8.2368843124E-03 8.1323120444E-03 -8.0290242845E-03 7.9270060165E-03 7.8262423870E-03 7.7267187031E-03 -7.6284204312E-03 7.5313331959E-03 7.4354427778E-03 7.3407351126E-03 -7.2471962893E-03 7.1548125486E-03 7.0635702817E-03 6.9734560286E-03 -6.8844564772E-03 6.7965584614E-03 6.7097489596E-03 6.6240150936E-03 -6.5393441271E-03 6.4557234640E-03 6.3731406477E-03 6.2915833592E-03 -6.2110394160E-03 6.1314967704E-03 6.0529435088E-03 5.9753678495E-03 -5.8987581423E-03 5.8231028666E-03 5.7483906304E-03 5.6746101689E-03 -5.6017503432E-03 5.5298001390E-03 5.4587486655E-03 5.3885851541E-03 -5.3192989571E-03 5.2508795468E-03 5.1833165138E-03 5.1165995660E-03 -5.0507185274E-03 4.9856633371E-03 4.9214240480E-03 4.8579908255E-03 -4.7953539468E-03 4.7335037989E-03 4.6724308785E-03 4.6121257900E-03 -4.5525792449E-03 4.4937820607E-03 4.4357251597E-03 4.3783995676E-03 -4.3217964130E-03 4.2659069259E-03 4.2107224366E-03 4.1562343752E-03 -4.1024342702E-03 4.0493137471E-03 3.9968645282E-03 3.9450784309E-03 -3.8939473670E-03 3.8434633414E-03 3.7936184517E-03 3.7444048870E-03 -3.6958149264E-03 3.6478409388E-03 3.6004753815E-03 3.5537107993E-03 -3.5075398236E-03 3.4619551717E-03 3.4169496458E-03 3.3725161317E-03 -3.3286475984E-03 3.2853370969E-03 3.2425777594E-03 3.2003627985E-03 -3.1586855063E-03 3.1175392536E-03 3.0769174889E-03 3.0368137376E-03 -2.9972216013E-03 2.9581347568E-03 2.9195469551E-03 2.8814520214E-03 -2.8438438533E-03 2.8067164208E-03 2.7700637648E-03 2.7338799969E-03 -2.6981592982E-03 2.6628959190E-03 2.6280841776E-03 2.5937184598E-03 -2.5597932181E-03 2.5263029710E-03 2.4932423021E-03 2.4606058595E-03 -2.4283883551E-03 2.3965845639E-03 2.3651893233E-03 2.3341975325E-03 -2.3036041514E-03 2.2734042005E-03 2.2435927598E-03 2.2141649681E-03 -2.1851160227E-03 2.1564411787E-03 2.1281357479E-03 2.1001950988E-03 -2.0726146554E-03 2.0453898968E-03 2.0185163566E-03 1.9919896224E-03 -1.9658053348E-03 1.9399591874E-03 1.9144469257E-03 1.8892643466E-03 -1.8644072978E-03 1.8398716777E-03 1.8156534339E-03 1.7917485635E-03 -1.7681531120E-03 1.7448631734E-03 1.7218748886E-03 1.6991844458E-03 -1.6767880795E-03 1.6546820702E-03 1.6328627435E-03 1.6113264700E-03 -1.5900696646E-03 1.5690887862E-03 1.5483803367E-03 1.5279408608E-03 -1.5077669457E-03 1.4878552204E-03 1.4682023548E-03 1.4488050602E-03 -1.4296600881E-03 1.4107642298E-03 1.3921143162E-03 1.3737072169E-03 -1.3555398404E-03 1.3376091328E-03 1.3199120783E-03 1.3024456979E-03 -1.2852070498E-03 1.2681932281E-03 1.2514013631E-03 1.2348286203E-03 -1.2184722004E-03 1.2023293387E-03 1.1863973048E-03 1.1706734021E-03 -1.1551549675E-03 1.1398393708E-03 1.1247240146E-03 1.1098063337E-03 -1.0950837946E-03 1.0805538956E-03 1.0662141658E-03 1.0520621655E-03 -1.0380954850E-03 1.0243117448E-03 1.0107085950E-03 9.9728371515E-04 -9.8403481364E-04 9.7095962749E-04 9.5805592197E-04 9.4532149045E-04 -9.3275415382E-04 9.2035176023E-04 9.0811218480E-04 8.9603332928E-04 -8.8411312171E-04 8.7234951613E-04 8.6074049215E-04 8.4928405496E-04 -8.3797823472E-04 8.2682108635E-04 8.1581068921E-04 8.0494514687E-04 -7.9422258672E-04 7.8364115979E-04 7.7319904029E-04 7.6289442561E-04 -7.5272553583E-04 7.4269061349E-04 7.3278792331E-04 7.2301575193E-04 -7.1337240766E-04 7.0385622016E-04 6.9446554023E-04 6.8519873954E-04 -6.7605421045E-04 6.6703036566E-04 6.5812563794E-04 6.4933847999E-04 -6.4066736410E-04 6.3211078195E-04 6.2366724438E-04 6.1533528107E-04 -6.0711344054E-04 5.9900028970E-04 5.9099441367E-04 5.8309441560E-04 -5.7529891640E-04 5.6760655456E-04 5.6001598590E-04 5.5252588336E-04 -5.4513493681E-04 5.3784185290E-04 5.3064535477E-04 5.2354418182E-04 -5.1653708959E-04 5.0962284949E-04 5.0280024868E-04 4.9606808978E-04 -4.8942519071E-04 4.8287038461E-04 4.7640251953E-04 4.7002045829E-04 -4.6372307825E-04 4.5750927119E-04 4.5137794309E-04 4.4532801396E-04 -4.3935841768E-04 4.3346810175E-04 4.2765602732E-04 4.2192116884E-04 -4.1626251394E-04 4.1067906327E-04 4.0516983032E-04 3.9973384129E-04 -3.9437013491E-04 3.8907776229E-04 3.8385578669E-04 3.7870328360E-04 -3.7361934036E-04 3.6860305607E-04 3.6365354145E-04 3.5876991872E-04 -3.5395132140E-04 3.4919689423E-04 3.4450579297E-04 3.3987718426E-04 -3.3531024562E-04 3.3080416517E-04 3.2635814150E-04 3.2197138360E-04 -3.1764311069E-04 3.1337255210E-04 3.0915894714E-04 3.0500154499E-04 -3.0089960449E-04 2.9685239421E-04 2.9285919217E-04 2.8891928574E-04 -2.8503197155E-04 2.8119655536E-04 2.7741235194E-04 2.7367868497E-04 -2.6999488691E-04 2.6636029886E-04 2.6277427057E-04 2.5923616023E-04 -2.5574533436E-04 2.5230116773E-04 2.4890304327E-04 2.4555035190E-04 -2.4224249253E-04 2.3897887185E-04 2.3575890430E-04 2.3258201195E-04 -2.2944762447E-04 2.2635517890E-04 2.2330411968E-04 2.2029389847E-04 -2.1732397409E-04 2.1439381243E-04 2.1150288636E-04 2.0865067565E-04 -2.0583666680E-04 2.0306035313E-04 2.0032123457E-04 1.9761881754E-04 -1.9495261497E-04 1.9232214613E-04 1.8972693660E-04 1.8716651817E-04 -1.8464042875E-04 1.8214821231E-04 1.7968941879E-04 1.7726360408E-04 -1.7487032987E-04 1.7250916357E-04 1.7017967831E-04 1.6788145280E-04 -1.6561407126E-04 1.6337712340E-04 1.6117020431E-04 1.5899291435E-04 -1.5684485921E-04 1.5472564974E-04 1.5263490190E-04 1.5057223670E-04 -1.4853728014E-04 1.4652966313E-04 1.4454902143E-04 1.4259499561E-04 -1.4066723097E-04 1.3876537742E-04 1.3688908959E-04 1.3503802661E-04 -1.3321185211E-04 1.3141023413E-04 1.2963284512E-04 1.2787936181E-04 -1.2614946523E-04 1.2444284059E-04 1.2275917726E-04 1.2109816869E-04 -1.1945951243E-04 1.1784291001E-04 1.1624806687E-04 1.1467469238E-04 -1.1312249972E-04 1.1159120587E-04 1.1008053155E-04 1.0859020116E-04 -1.0711994277E-04 1.0566948799E-04 1.0423857205E-04 1.0282693368E-04 -1.0143431504E-04 1.0006046170E-04 9.8705122610E-05 9.7368050044E-05 -9.6048999553E-05 9.4747729926E-05 9.3464003148E-05 9.2197584319E-05 -9.0948241735E-05 8.9715746721E-05 8.8499873639E-05 8.7300399840E-05 -8.6117105629E-05 8.4949774226E-05 8.3798191727E-05 8.2662147067E-05 -8.1541431982E-05 8.0435840946E-05 7.9345171210E-05 7.8269222709E-05 -7.7207798027E-05 7.6160702371E-05 7.5127743537E-05 7.4108731874E-05 -7.3103480252E-05 7.2111804031E-05 7.1133521023E-05 7.0168451453E-05 -6.9216417942E-05 6.8277245502E-05 6.7350761451E-05 6.6436795409E-05 -6.5535179260E-05 6.4645747128E-05 6.3768335347E-05 6.2902782428E-05 -6.2048929035E-05 6.1206617953E-05 6.0375694034E-05 5.9556004253E-05 -5.8747397605E-05 5.7949725092E-05 5.7162839704E-05 5.6386596393E-05 -5.5620852042E-05 5.4865465446E-05 5.4120297281E-05 5.3385210086E-05 -5.2660068222E-05 5.1944737857E-05 5.1239086984E-05 5.0542985335E-05 -4.9856304383E-05 4.9178917316E-05 4.8510699018E-05 4.7851526041E-05 -4.7201276591E-05 4.6559830496E-05 4.5927069196E-05 4.5302875696E-05 -4.4687134585E-05 4.4079732007E-05 4.3480555616E-05 4.2889494568E-05 -4.2306439502E-05 4.1731282520E-05 4.1163917167E-05 4.0604238415E-05 -4.0052142639E-05 3.9507527601E-05 3.8970292416E-05 3.8440337576E-05 -3.7917564906E-05 3.7401877538E-05 3.6893179900E-05 3.6391377702E-05 -3.5896377918E-05 3.5408088765E-05 3.4926419693E-05 3.4451281366E-05 -3.3982585642E-05 3.3520245549E-05 3.3064175303E-05 3.2614290272E-05 -3.2170506951E-05 3.1732742955E-05 3.1300917006E-05 3.0874948913E-05 -3.0454759565E-05 3.0040270909E-05 2.9631405941E-05 2.9228088692E-05 -2.8830244200E-05 2.8437798521E-05 2.8050678716E-05 2.7668812816E-05 -2.7292129817E-05 2.6920559669E-05 2.6554033264E-05 2.6192482422E-05 -2.5835839879E-05 2.5484039274E-05 2.5137015139E-05 2.4794702881E-05 -2.4457038770E-05 2.4123959959E-05 2.3795404431E-05 2.3471311004E-05 -2.3151619317E-05 2.2836269823E-05 2.2525203775E-05 2.2218363215E-05 -2.1915690968E-05 2.1617130625E-05 2.1322626537E-05 2.1032123791E-05 -2.0745568237E-05 2.0462906450E-05 2.0184085718E-05 1.9909054040E-05 -1.9637760115E-05 1.9370153334E-05 1.9106183767E-05 1.8845802158E-05 -1.8588959916E-05 1.8335609102E-05 1.8085702419E-05 1.7839193206E-05 -1.7596035450E-05 1.7356183747E-05 1.7119593304E-05 1.6886219932E-05 -1.6656020038E-05 1.6428950618E-05 1.6204969246E-05 1.5984034069E-05 -1.5766103797E-05 1.5551137700E-05 1.5339095584E-05 1.5129937814E-05 -1.4923625290E-05 1.4720119437E-05 1.4519382197E-05 1.4321376027E-05 -1.4126063892E-05 1.3933409256E-05 1.3743376074E-05 1.3555928791E-05 -1.3371032331E-05 1.3188652089E-05 1.3008753919E-05 1.2831304156E-05 -1.2656269583E-05 1.2483617430E-05 1.2313315369E-05 1.2145331510E-05 -1.1979634391E-05 1.1816192980E-05 1.1654976658E-05 1.1495955226E-05 -1.1339098888E-05 1.1184378253E-05 1.1031764318E-05 1.0881228488E-05 -1.0732742552E-05 1.0586278676E-05 1.0441809404E-05 1.0299307650E-05 -1.0158746696E-05 1.0020100182E-05 9.8833421092E-06 9.7484468262E-06 -9.6153890307E-06 9.4841437622E-06 9.3546863897E-06 9.2269926286E-06 -9.1010385222E-06 8.9768004347E-06 8.8542550499E-06 8.7333793672E-06 -8.6141506974E-06 8.4965466584E-06 8.3805451709E-06 8.2661244548E-06 -8.1532630246E-06 8.0419396858E-06 7.9321335261E-06 7.8238239199E-06 -7.7169905290E-06 7.6116132844E-06 7.5076723891E-06 7.4051483141E-06 -7.3040217951E-06 7.2042738286E-06 7.1058856688E-06 7.0088388236E-06 -6.9131150516E-06 6.8186963587E-06 6.7255649940E-06 6.6337034386E-06 -6.5430944299E-06 6.4537209301E-06 6.3655661324E-06 6.2786134577E-06 -6.1928465518E-06 6.1082492821E-06 6.0248057347E-06 5.9425002117E-06 -5.8613172278E-06 5.7812415078E-06 5.7022579837E-06 5.6243517875E-06 -5.5475082569E-06 5.4717129338E-06 5.3969515519E-06 5.3232100380E-06 -5.2504745102E-06 5.1787312747E-06 5.1079668237E-06 5.0381678326E-06 -4.9693211575E-06 4.9014138331E-06 4.8344330698E-06 4.7683662516E-06 -4.7032009277E-06 4.6389248271E-06 4.5755258428E-06 4.5129920306E-06 -4.4513116084E-06 4.3904729539E-06 4.3304646028E-06 4.2712752465E-06 -4.2128937296E-06 4.1553090486E-06 4.0985103492E-06 4.0424869246E-06 -3.9872282134E-06 3.9327237907E-06 3.8789633867E-06 3.8259368655E-06 -3.7736342281E-06 3.7220456117E-06 3.6711612875E-06 3.6209716585E-06 -3.5714672584E-06 3.5226387496E-06 3.4744769211E-06 3.4269726873E-06 -3.3801170860E-06 3.3339012767E-06 3.2883165331E-06 3.2433542593E-06 -3.1990059713E-06 3.1552632999E-06 3.1121179899E-06 3.0695618981E-06 -3.0275869920E-06 2.9861853485E-06 2.9453491520E-06 2.9050706933E-06 -2.8653423681E-06 2.8261566753E-06 2.7875062159E-06 2.7493836871E-06 -2.7117818930E-06 2.6746937341E-06 2.6381122061E-06 2.6020303999E-06 -2.5664415007E-06 2.5313387858E-06 2.4967156246E-06 2.4625654763E-06 -2.4288818892E-06 2.3956584994E-06 2.3628890295E-06 2.3305672877E-06 -2.2986871639E-06 2.2672426329E-06 2.2362277555E-06 2.2056366702E-06 -2.1754635953E-06 2.1457028279E-06 2.1163487426E-06 2.0873957906E-06 -2.0588384987E-06 2.0306714681E-06 2.0028893736E-06 1.9754869624E-06 -1.9484590533E-06 1.9218005354E-06 1.8955063633E-06 1.8695715688E-06 -1.8439912476E-06 1.8187605619E-06 1.7938747399E-06 1.7693290745E-06 -1.7451189230E-06 1.7212397059E-06 1.6976869058E-06 1.6744560672E-06 -1.6515427949E-06 1.6289427539E-06 1.6066516680E-06 1.5846653181E-06 -1.5629795422E-06 1.5415902398E-06 1.5204933631E-06 1.4996849197E-06 -1.4791609715E-06 1.4589176342E-06 1.4389510762E-06 1.4192575182E-06 -1.3998332325E-06 1.3806745420E-06 1.3617778199E-06 1.3431394888E-06 -1.3247560197E-06 1.3066239304E-06 - - diff --git a/demo/ex4/Input_NEB.prm b/demo/ex4/Input_NEB.prm deleted file mode 100644 index 386059eee..000000000 --- a/demo/ex4/Input_NEB.prm +++ /dev/null @@ -1,64 +0,0 @@ -set SOLVER MODE = NEB -set RESTART = false - -subsection Geometry - set NATOMS=3 - set NATOM TYPES=1 - set ATOMIC COORDINATES FILE = coordinates.inp - set DOMAIN VECTORS FILE = domainVectors.inp -end - -subsection Boundary conditions - set PERIODIC1 = true - set PERIODIC2 = true - set PERIODIC3 = true -end - -subsection Finite element mesh parameters - set POLYNOMIAL ORDER=6 - subsection Auto mesh generation parameters - set MESH SIZE AROUND ATOM = 1.0 - set ATOM BALL RADIUS = 4.0 - end -end - -subsection DFT functional parameters - set EXCHANGE CORRELATION TYPE = 4 - set PSEUDOPOTENTIAL CALCULATION = true - set PSEUDOPOTENTIAL FILE NAMES LIST = pseudo.inp - set SPIN POLARIZATION = 1 - set START MAGNETIZATION = 0.45 -end - -subsection SCF parameters - set TEMPERATURE = 500 - set TOLERANCE = 1e-5 - set MIXING METHOD =ANDERSON - set MAXIMUM ITERATIONS = 200 - subsection Eigen-solver parameters - set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 5 - end -end - -subsection GPU - set USE GPU = true -end - -subsection NEB - set NUMBER OF IMAGES = 7 - set PATH THRESHOLD = 0.0005 - set MAXIMUM NUMBER OF NEB ITERATIONS = 100 - set NEB DOMAIN VECTORS FILE = domainVectors.inp - set NEB COORDINATES FILE = coordinates.inp - set NEB OPT SOLVER = LBFGS - set ION RELAX FLAGS FILE = ion_force_flag.inp - set ALLOW IMAGE FREEZING = true -end - - - - - - - - \ No newline at end of file diff --git a/demo/ex4/coordinates.inp b/demo/ex4/coordinates.inp deleted file mode 100644 index c1973bbb4..000000000 --- a/demo/ex4/coordinates.inp +++ /dev/null @@ -1,21 +0,0 @@ -1 1 0.619441659 0.000000000 0.000000000 -1 1 0.000000000 0.000000000 0.000000000 -1 1 0.129813897 0.000000000 0.000000000 -1 1 0.661232400 0.000000000 0.000000000 -1 1 0.000000000 0.000000000 0.000000000 -1 1 0.171604637 0.000000000 0.000000000 -1 1 0.703023141 0.000000000 0.000000000 -1 1 0.000000000 0.000000000 0.000000000 -1 1 0.213395378 0.000000000 0.000000000 -1 1 0.744813881 0.000000000 0.000000000 -1 1 0.000000000 0.000000000 0.000000000 -1 1 0.255186119 0.000000000 0.000000000 -1 1 0.786604622 0.000000000 0.000000000 -1 1 0.000000000 0.000000000 0.000000000 -1 1 0.296976859 0.000000000 0.000000000 -1 1 0.828395363 0.000000000 0.000000000 -1 1 0.000000000 0.000000000 0.000000000 -1 1 0.338767600 0.000000000 0.000000000 -1 1 0.870186103 0.000000000 0.000000000 -1 1 0.000000000 0.000000000 0.000000000 -1 1 0.380558341 0.000000000 0.000000000 \ No newline at end of file diff --git a/demo/ex4/domainVectors.inp b/demo/ex4/domainVectors.inp deleted file mode 100644 index 9b64c26df..000000000 --- a/demo/ex4/domainVectors.inp +++ /dev/null @@ -1,3 +0,0 @@ -12.0000 0.00000000 0.00000000 -0.00000000 5.0000000 0.00000000 -0.00000000 0.00000000 5.00000000 \ No newline at end of file diff --git a/demo/ex4/ion_force_flag.inp b/demo/ex4/ion_force_flag.inp deleted file mode 100644 index ec6bb8a9c..000000000 --- a/demo/ex4/ion_force_flag.inp +++ /dev/null @@ -1,3 +0,0 @@ -1 0 0 0 0 0 -0 0 0 0 0 0 -1 0 0 0 0 0 \ No newline at end of file diff --git a/demo/ex4/pseudo.inp b/demo/ex4/pseudo.inp deleted file mode 100644 index 4c6f4100d..000000000 --- a/demo/ex4/pseudo.inp +++ /dev/null @@ -1 +0,0 @@ -1 H.upf \ No newline at end of file From 5a8b7fc4b2c2c816bd91af70c5995dcea83e2aec Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Sat, 19 Aug 2023 12:20:09 +0530 Subject: [PATCH 47/53] Reproducible output for ctests --- src/neb/nudgedElasticBandClass.cc | 166 +++++++++++++++++++++++------- 1 file changed, 126 insertions(+), 40 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 85848914a..0d4aa7c09 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -164,9 +164,12 @@ namespace dftfe std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); d_maximumAtomForceToBeRelaxed = tmp[0][0]; - pcout << "Solver update: NEB is in Restart mode" << std::endl; - pcout << "Checking for files in Step: " << d_totalUpdateCalls + if(!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << "Solver update: NEB is in Restart mode" << std::endl; + pcout << "Checking for files in Step: " << d_totalUpdateCalls << std::endl; + } for (int Image = 0; Image < d_numberOfImages; Image++) { @@ -225,11 +228,6 @@ namespace dftfe temp_domainBoundingVectors[i][2] * temp_domainBoundingVectors[i][2]; d_Length.push_back(pow(temp, 0.5)); } - // pcout << "--$ Domain Length$ --" << std::endl; - // pcout << "Lx:= " << d_Length[0] << " Ly:=" << d_Length[1] - // << " Lz:=" << d_Length[2] << std::endl; - - init(); } @@ -726,9 +724,13 @@ namespace dftfe flagmultiplier[d_numberOfImages - 1] = 0; std::vector Flag(d_numberOfImages - 2, 0); pcout << "--------------Final Results-------------" << std::endl; - pcout << std::setw(12) << "Image No" << std::setw(25) + if(!d_dftPtr->getParametersObject().reproducible_output) + { + + pcout << std::setw(12) << "Image No" << std::setw(25) << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " << std::endl; + } double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); int count = 0; for (int image = 0; image < d_numberOfImages; image++) @@ -750,20 +752,28 @@ namespace dftfe } if (flagmultiplier[image] == 0) - pcout << std::setw(8) << image << "(T)" << std::setw(25) + { + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(T)" << std::setw(25) << std::setprecision(14) << FreeEnergy << std::setw(16) << std::setprecision(4) << std::floor(1000000000.0 * ForceError) / 1000000000.0 << std::endl; + } else - pcout << std::setw(8) << image << "(F)" << std::setw(25) + { + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(F)" << std::setw(25) << std::setprecision(14) << FreeEnergy << std::setw(16) << std::setprecision(4) << std::floor(1000000000.0 * ForceError) / 1000000000.0 << std::endl; + } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); } + if(!d_dftPtr->getParametersObject().reproducible_output) + { pcout << "--> Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000 @@ -773,10 +783,26 @@ namespace dftfe (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; - double Length = CalculatePathLength(d_verbosity > 2 ? true : false); - pcout << std::endl + } + else + { + pcout << "--> Activation Energy (meV): " << std::setprecision(3) + << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000)/1000000)*1000000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(3) + << std::floor(((maxEnergy - + (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * + C_haToeV * 1000)/1000000)*1000000 + << std::endl; + } + double Length = CalculatePathLength(d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? true : false); + if(!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; pcout << "----------------------------------------------" << std::endl; + } } @@ -799,7 +825,8 @@ namespace dftfe flagmultiplier[d_numberOfImages - 1] = 0; std::vector Flag(d_numberOfImages - 2, 0); pcout << "--------------Current Results-------------" << std::endl; - pcout << std::setw(12) << "Image No" << std::setw(25) + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(12) << "Image No" << std::setw(25) << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " << std::endl; double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); @@ -823,20 +850,28 @@ namespace dftfe } if (flagmultiplier[image] == 0) - pcout << std::setw(8) << image << "(T)" << std::setw(25) + { + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(T)" << std::setw(25) << std::setprecision(14) << FreeEnergy << std::setw(16) << std::setprecision(4) << std::floor(1000000000.0 * ForceError) / 1000000000.0 << std::endl; + } else - pcout << std::setw(8) << image << "(F)" << std::setw(25) + { + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(F)" << std::setw(25) << std::setprecision(14) << FreeEnergy << std::setw(16) << std::setprecision(4) << std::floor(1000000000.0 * ForceError) / 1000000000.0 << std::endl; + } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); } + if(!d_dftPtr->getParametersObject().reproducible_output) + { pcout << "--> Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000 @@ -846,10 +881,26 @@ namespace dftfe (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; - double Length = CalculatePathLength(d_verbosity > 2 ? true : false); - pcout << std::endl + } + else + { + pcout << "--> Activation Energy (meV): " << std::setprecision(3) + << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000)/1000000)*1000000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(3) + << std::floor(((maxEnergy - + (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * + C_haToeV * 1000)/1000000)*1000000 + << std::endl; + } + double Length = CalculatePathLength(d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? true : false); + if(!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; pcout << "----------------------------------------------" << std::endl; + } } return d_totalUpdateCalls; } @@ -900,7 +951,8 @@ namespace dftfe pcout << "-----------------------------------------------------------------------" << std::endl; - pcout << std::setw(12) << "Image No" << std::setw(25) << " Free Energy(Ha) " + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(12) << "Image No" << std::setw(25) << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " << std::endl; double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); int count = 0; @@ -923,32 +975,56 @@ namespace dftfe } if (flagmultiplier[image] == 0) - pcout << std::setw(8) << image << "(T)" << std::setw(25) + { + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(T)" << std::setw(25) << std::setprecision(14) << FreeEnergy << std::setw(16) << std::setprecision(4) << std::floor(1000000000.0 * ForceError) / 1000000000.0 << std::endl; + } else - pcout << std::setw(8) << image << "(F)" << std::setw(25) + { + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(F)" << std::setw(25) << std::setprecision(14) << FreeEnergy << std::setw(16) << std::setprecision(4) << std::floor(1000000000.0 * ForceError) / 1000000000.0 << std::endl; + } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); } - pcout << "--> Activation Energy (meV): " << std::setprecision(8) - << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * - 1000 - << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(8) - << (maxEnergy - - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * - C_haToeV * 1000 - << std::endl; - double Length = CalculatePathLength(d_verbosity > 2 ? true : false); + if(!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << "--> Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - + (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + } + else + { + pcout << "--> Activation Energy (meV): " << std::setprecision(3) + << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000)/1000000)*1000000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(3) + << std::floor(((maxEnergy - + (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * + C_haToeV * 1000)/1000000)*1000000 + << std::endl; + } + double Length = CalculatePathLength(d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? true : false); + if(!d_dftPtr->getParametersObject().reproducible_output) + { pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; pcout << "----------------------------------------------" << std::endl; + } int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; @@ -1000,7 +1076,8 @@ namespace dftfe if (temp > d_maximumAtomForceToBeRelaxed) d_maximumAtomForceToBeRelaxed = temp; } - pcout << std::endl + if(!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::endl << "Maximum Force " << d_maximumAtomForceToBeRelaxed << "in Ha/bohr" << std::endl; } @@ -1035,7 +1112,7 @@ namespace dftfe for (int image = 1; image < d_numberOfImages - 1; image++) { int multiplier = 1; - //pcout << "Update called for image: " << image << std::endl; + if (d_ImageError[image] < 0.95 * d_optimizertolerance && d_imageFreeze) { @@ -1045,7 +1122,7 @@ namespace dftfe } MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; - if (d_verbosity > 4) + if (d_verbosity > 4 && !d_dftPtr->getParametersObject().reproducible_output) pcout << "--Displacements for image: " << image << std::endl; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { @@ -1069,7 +1146,7 @@ namespace dftfe } } } - if (d_verbosity > 4) + if (d_verbosity > 4 && !d_dftPtr->getParametersObject().reproducible_output) pcout << globalAtomsDisplacements[i][0] << " " << globalAtomsDisplacements[i][1] << " " << globalAtomsDisplacements[i][2] << std::endl; @@ -1087,7 +1164,7 @@ namespace dftfe MPI_Barrier(d_mpiCommParent); (d_dftfeWrapper[image]) ->updateAtomPositions(globalAtomsDisplacements); - if (d_verbosity > 4) + if (d_verbosity > 4 && !d_dftPtr->getParametersObject().reproducible_output) pcout << "--Positions of image: " << image << " updated--" << std::endl; MPI_Barrier(d_mpiCommParent); @@ -1236,7 +1313,7 @@ namespace dftfe atomId = iCharge; } } - if (flag) + if (flag && !d_dftPtr->getParametersObject().reproducible_output) pcout << "AtomID: " << atomId << " " << pathLength[atomId] << " " << "Bohrs" << std::endl; @@ -1344,16 +1421,19 @@ namespace dftfe } } // print relaxation flags - pcout << " --------------Ion force relaxation flags----------------" + if(!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << " --------------Ion force relaxation flags----------------" << std::endl; - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { pcout << tempRelaxFlagsData[i][0] << " " << tempRelaxFlagsData[i][1] << " " << tempRelaxFlagsData[i][2] << std::endl; } - pcout << " --------------------------------------------------" + pcout << " --------------------------------------------------" << std::endl; + } } else { @@ -1452,6 +1532,7 @@ namespace dftfe << std::endl; pcout << " --------------------Initial NEB Data " << "---------------------------------------" << std::endl; + if(!d_dftPtr->getParametersObject().reproducible_output) pcout << std::setw(12) << "Image No" << std::setw(25) << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " << std::endl; @@ -1464,6 +1545,7 @@ namespace dftfe Force = 0.0; ImageError(d_NEBImageno, Force); double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); + if(!d_dftPtr->getParametersObject().reproducible_output) pcout << std::setw(8) << i << std::setw(25) << std::setprecision(14) << Energy << std::setw(16) << std::setprecision(4) << std::floor(1000000000.0 * Force) / 1000000000.0 << std::endl; @@ -1474,12 +1556,15 @@ namespace dftfe } } MPI_Barrier(d_mpiCommParent); - double Length = 0.0; + if(!d_dftPtr->getParametersObject().reproducible_output) + { + double Length = 0.0; Length = CalculatePathLength(false); pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; step_time = MPI_Wtime() - step_time; pcout << "Time taken for initial dft solve of all images: " << step_time << std::endl; + } pcout << "-------------------------------------------------------------------------------" << std::endl; @@ -1641,6 +1726,7 @@ namespace dftfe d_restartFilesPath + "/Step" + std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); // d_maximumAtomForceToBeRelaxed = tmp[0][0]; + pcout << "Solver update: NEB is in Restart mode" << std::endl; pcout << "Checking for files in Step: " << d_totalUpdateCalls << std::endl; std::string path = From f4f6dd769aac7b2a0935e6c9e5452bd0efabe41a Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Sat, 19 Aug 2023 17:20:43 +0530 Subject: [PATCH 48/53] Reproducible output issue --- src/neb/nudgedElasticBandClass.cc | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 0d4aa7c09..86fc618aa 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -771,6 +771,7 @@ namespace dftfe } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); + } if(!d_dftPtr->getParametersObject().reproducible_output) { @@ -786,11 +787,11 @@ namespace dftfe } else { - pcout << "--> Activation Energy (meV): " << std::setprecision(3) + pcout << "--> Activation Energy (meV): " << std::setprecision(4) << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000)/1000000)*1000000 << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(3) + pcout << "<-- Activation Energy (meV): " << std::setprecision(4) << std::floor(((maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000)/1000000)*1000000 @@ -869,6 +870,7 @@ namespace dftfe } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); + } if(!d_dftPtr->getParametersObject().reproducible_output) { @@ -884,11 +886,11 @@ namespace dftfe } else { - pcout << "--> Activation Energy (meV): " << std::setprecision(3) + pcout << "--> Activation Energy (meV): " << std::setprecision(4) << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000)/1000000)*1000000 << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(3) + pcout << "<-- Activation Energy (meV): " << std::setprecision(4) << std::floor(((maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000)/1000000)*1000000 @@ -994,6 +996,7 @@ namespace dftfe } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); + } if(!d_dftPtr->getParametersObject().reproducible_output) { @@ -1009,15 +1012,15 @@ namespace dftfe } else { - pcout << "--> Activation Energy (meV): " << std::setprecision(3) - << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * - C_haToeV * 1000)/1000000)*1000000 + pcout << "--> Activation Energy (meV): " << std::setprecision(4) + << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000 << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(3) - << std::floor(((maxEnergy - + pcout << "<-- Activation Energy (meV): " << std::setprecision(4) + << (maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * - C_haToeV * 1000)/1000000)*1000000 - << std::endl; + C_haToeV * 1000 + << std::endl; } double Length = CalculatePathLength(d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? true : false); if(!d_dftPtr->getParametersObject().reproducible_output) From 840723b8dfbbef36bf8a958802ad1cfa7a78ce83 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 21 Aug 2023 07:53:18 +0530 Subject: [PATCH 49/53] Indendation std and NEB reproducibible output --- src/dft/dft.cc | 3 +- src/neb/nudgedElasticBandClass.cc | 374 ++++++++++++++++-------------- 2 files changed, 204 insertions(+), 173 deletions(-) diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 68da2fff8..aec348b45 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -463,7 +463,8 @@ namespace dftfe { d_numEigenValues = std::max(d_dftParamsPtr->highestStateOfInterestForChebFiltering * 1.1, - d_dftParamsPtr->highestStateOfInterestForChebFiltering + 10.0); + d_dftParamsPtr->highestStateOfInterestForChebFiltering + + 10.0); if (d_dftParamsPtr->verbosity >= 1) { diff --git a/src/neb/nudgedElasticBandClass.cc b/src/neb/nudgedElasticBandClass.cc index 86fc618aa..fa9d32651 100644 --- a/src/neb/nudgedElasticBandClass.cc +++ b/src/neb/nudgedElasticBandClass.cc @@ -164,12 +164,12 @@ namespace dftfe std::to_string(d_totalUpdateCalls) + "/maxForce.chk"); d_maximumAtomForceToBeRelaxed = tmp[0][0]; - if(!d_dftPtr->getParametersObject().reproducible_output) - { - pcout << "Solver update: NEB is in Restart mode" << std::endl; - pcout << "Checking for files in Step: " << d_totalUpdateCalls - << std::endl; - } + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << "Solver update: NEB is in Restart mode" << std::endl; + pcout << "Checking for files in Step: " << d_totalUpdateCalls + << std::endl; + } for (int Image = 0; Image < d_numberOfImages; Image++) { @@ -719,18 +719,17 @@ namespace dftfe << d_optimizertolerance << ", total number of ion position updates: " << d_totalUpdateCalls << std::endl; - std::vector flagmultiplier(d_numberOfImages, 1); + std::vector flagmultiplier(d_numberOfImages, 1); flagmultiplier[0] = 0; flagmultiplier[d_numberOfImages - 1] = 0; std::vector Flag(d_numberOfImages - 2, 0); pcout << "--------------Final Results-------------" << std::endl; - if(!d_dftPtr->getParametersObject().reproducible_output) - { - - pcout << std::setw(12) << "Image No" << std::setw(25) - << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " - << std::endl; - } + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << std::setw(12) << "Image No" << std::setw(25) + << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " + << std::endl; + } double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); int count = 0; for (int image = 0; image < d_numberOfImages; image++) @@ -753,59 +752,67 @@ namespace dftfe if (flagmultiplier[image] == 0) { - if(!d_dftPtr->getParametersObject().reproducible_output) + if (!d_dftPtr->getParametersObject().reproducible_output) pcout << std::setw(8) << image << "(T)" << std::setw(25) - << std::setprecision(14) << FreeEnergy << std::setw(16) - << std::setprecision(4) - << std::floor(1000000000.0 * ForceError) / 1000000000.0 - << std::endl; + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; } else { - if(!d_dftPtr->getParametersObject().reproducible_output) + if (!d_dftPtr->getParametersObject().reproducible_output) pcout << std::setw(8) << image << "(F)" << std::setw(25) - << std::setprecision(14) << FreeEnergy << std::setw(16) - << std::setprecision(4) - << std::floor(1000000000.0 * ForceError) / 1000000000.0 - << std::endl; + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); - } - if(!d_dftPtr->getParametersObject().reproducible_output) - { - pcout << "--> Activation Energy (meV): " << std::setprecision(8) - << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * - C_haToeV * 1000 - << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(8) - << (maxEnergy - - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * - C_haToeV * 1000 - << std::endl; - } + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << "--> Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1]) + ->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + } else - { - pcout << "--> Activation Energy (meV): " << std::setprecision(4) - << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * - C_haToeV * 1000)/1000000)*1000000 - << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(4) - << std::floor(((maxEnergy - - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * - C_haToeV * 1000)/1000000)*1000000 - << std::endl; - } - double Length = CalculatePathLength(d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? true : false); - if(!d_dftPtr->getParametersObject().reproducible_output) - { - pcout << std::endl - << "--Path Length: " << Length << " Bohr" << std::endl; - pcout << "----------------------------------------------" << std::endl; - } - - + { + pcout << "--> Activation Energy (meV): " << std::setprecision(4) + << std::floor( + ((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000) / + 1000000) * + 1000000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(4) + << std::floor( + ((maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1]) + ->getDFTFreeEnergy()) * + C_haToeV * 1000) / + 1000000) * + 1000000 + << std::endl; + } + double Length = CalculatePathLength( + d_verbosity > 2 && + !d_dftPtr->getParametersObject().reproducible_output ? + true : + false); + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << std::endl + << "--Path Length: " << Length << " Bohr" << std::endl; + pcout << "----------------------------------------------" + << std::endl; + } } else if (solverReturn == nonLinearSolver::FAILURE) @@ -826,10 +833,10 @@ namespace dftfe flagmultiplier[d_numberOfImages - 1] = 0; std::vector Flag(d_numberOfImages - 2, 0); pcout << "--------------Current Results-------------" << std::endl; - if(!d_dftPtr->getParametersObject().reproducible_output) - pcout << std::setw(12) << "Image No" << std::setw(25) - << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " - << std::endl; + if (!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(12) << "Image No" << std::setw(25) + << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " + << std::endl; double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); int count = 0; for (int image = 0; image < d_numberOfImages; image++) @@ -852,57 +859,67 @@ namespace dftfe if (flagmultiplier[image] == 0) { - if(!d_dftPtr->getParametersObject().reproducible_output) - pcout << std::setw(8) << image << "(T)" << std::setw(25) - << std::setprecision(14) << FreeEnergy << std::setw(16) - << std::setprecision(4) - << std::floor(1000000000.0 * ForceError) / 1000000000.0 - << std::endl; + if (!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(T)" << std::setw(25) + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; } else { - if(!d_dftPtr->getParametersObject().reproducible_output) - pcout << std::setw(8) << image << "(F)" << std::setw(25) - << std::setprecision(14) << FreeEnergy << std::setw(16) - << std::setprecision(4) - << std::floor(1000000000.0 * ForceError) / 1000000000.0 - << std::endl; - } + if (!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << image << "(F)" << std::setw(25) + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; + } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); - } - if(!d_dftPtr->getParametersObject().reproducible_output) - { - pcout << "--> Activation Energy (meV): " << std::setprecision(8) - << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * - C_haToeV * 1000 - << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(8) - << (maxEnergy - - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * - C_haToeV * 1000 - << std::endl; - } + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << "--> Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(8) + << (maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1]) + ->getDFTFreeEnergy()) * + C_haToeV * 1000 + << std::endl; + } else - { - pcout << "--> Activation Energy (meV): " << std::setprecision(4) - << std::floor(((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * - C_haToeV * 1000)/1000000)*1000000 - << std::endl; - pcout << "<-- Activation Energy (meV): " << std::setprecision(4) - << std::floor(((maxEnergy - - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * - C_haToeV * 1000)/1000000)*1000000 - << std::endl; - } - double Length = CalculatePathLength(d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? true : false); - if(!d_dftPtr->getParametersObject().reproducible_output) - { - pcout << std::endl - << "--Path Length: " << Length << " Bohr" << std::endl; - pcout << "----------------------------------------------" << std::endl; - } + { + pcout << "--> Activation Energy (meV): " << std::setprecision(4) + << std::floor( + ((maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * + C_haToeV * 1000) / + 1000000) * + 1000000 + << std::endl; + pcout << "<-- Activation Energy (meV): " << std::setprecision(4) + << std::floor( + ((maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1]) + ->getDFTFreeEnergy()) * + C_haToeV * 1000) / + 1000000) * + 1000000 + << std::endl; + } + double Length = CalculatePathLength( + d_verbosity > 2 && + !d_dftPtr->getParametersObject().reproducible_output ? + true : + false); + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << std::endl + << "--Path Length: " << Length << " Bohr" << std::endl; + pcout << "----------------------------------------------" + << std::endl; + } } return d_totalUpdateCalls; } @@ -953,9 +970,10 @@ namespace dftfe pcout << "-----------------------------------------------------------------------" << std::endl; - if(!d_dftPtr->getParametersObject().reproducible_output) - pcout << std::setw(12) << "Image No" << std::setw(25) << " Free Energy(Ha) " - << std::setw(16) << " Error(Ha/bohr) " << std::endl; + if (!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(12) << "Image No" << std::setw(25) + << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " + << std::endl; double maxEnergy = (d_dftfeWrapper[0])->getDFTFreeEnergy(); int count = 0; for (int image = 0; image < d_numberOfImages; image++) @@ -978,28 +996,27 @@ namespace dftfe if (flagmultiplier[image] == 0) { - if(!d_dftPtr->getParametersObject().reproducible_output) + if (!d_dftPtr->getParametersObject().reproducible_output) pcout << std::setw(8) << image << "(T)" << std::setw(25) - << std::setprecision(14) << FreeEnergy << std::setw(16) - << std::setprecision(4) - << std::floor(1000000000.0 * ForceError) / 1000000000.0 - << std::endl; + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; } else { - if(!d_dftPtr->getParametersObject().reproducible_output) + if (!d_dftPtr->getParametersObject().reproducible_output) pcout << std::setw(8) << image << "(F)" << std::setw(25) - << std::setprecision(14) << FreeEnergy << std::setw(16) - << std::setprecision(4) - << std::floor(1000000000.0 * ForceError) / 1000000000.0 - << std::endl; + << std::setprecision(14) << FreeEnergy << std::setw(16) + << std::setprecision(4) + << std::floor(1000000000.0 * ForceError) / 1000000000.0 + << std::endl; } maxEnergy = std::max(maxEnergy, (d_dftfeWrapper[image])->getDFTFreeEnergy()); - } - if(!d_dftPtr->getParametersObject().reproducible_output) - { + if (!d_dftPtr->getParametersObject().reproducible_output) + { pcout << "--> Activation Energy (meV): " << std::setprecision(8) << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000 @@ -1009,9 +1026,9 @@ namespace dftfe (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 << std::endl; - } - else - { + } + else + { pcout << "--> Activation Energy (meV): " << std::setprecision(4) << (maxEnergy - (d_dftfeWrapper[0])->getDFTFreeEnergy()) * C_haToeV * 1000 @@ -1020,14 +1037,18 @@ namespace dftfe << (maxEnergy - (d_dftfeWrapper[d_numberOfImages - 1])->getDFTFreeEnergy()) * C_haToeV * 1000 - << std::endl; - } - double Length = CalculatePathLength(d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? true : false); - if(!d_dftPtr->getParametersObject().reproducible_output) - { - pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; - pcout << "----------------------------------------------" << std::endl; - } + << std::endl; + } + double Length = CalculatePathLength( + d_verbosity > 2 && !d_dftPtr->getParametersObject().reproducible_output ? + true : + false); + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout << std::endl + << "--Path Length: " << Length << " Bohr" << std::endl; + pcout << "----------------------------------------------" << std::endl; + } int FlagTotal = std::accumulate(Flag.begin(), Flag.end(), 0); bool flag = FlagTotal == (d_numberOfImages - 2) ? true : false; @@ -1079,10 +1100,10 @@ namespace dftfe if (temp > d_maximumAtomForceToBeRelaxed) d_maximumAtomForceToBeRelaxed = temp; } - if(!d_dftPtr->getParametersObject().reproducible_output) - pcout << std::endl - << "Maximum Force " << d_maximumAtomForceToBeRelaxed << "in Ha/bohr" - << std::endl; + if (!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::endl + << "Maximum Force " << d_maximumAtomForceToBeRelaxed << "in Ha/bohr" + << std::endl; } @@ -1121,11 +1142,13 @@ namespace dftfe { multiplier = 0; // pcout << "NEB: Image is forzen. Image No: " << image - // << " with Image force: " << d_ImageError[image] << std::endl; + // << " with Image force: " << d_ImageError[image] << + // std::endl; } MPI_Bcast(&multiplier, 1, MPI_INT, 0, d_mpiCommParent); int count = 0; - if (d_verbosity > 4 && !d_dftPtr->getParametersObject().reproducible_output) + if (d_verbosity > 4 && + !d_dftPtr->getParametersObject().reproducible_output) pcout << "--Displacements for image: " << image << std::endl; for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) { @@ -1149,7 +1172,8 @@ namespace dftfe } } } - if (d_verbosity > 4 && !d_dftPtr->getParametersObject().reproducible_output) + if (d_verbosity > 4 && + !d_dftPtr->getParametersObject().reproducible_output) pcout << globalAtomsDisplacements[i][0] << " " << globalAtomsDisplacements[i][1] << " " << globalAtomsDisplacements[i][2] << std::endl; @@ -1167,7 +1191,8 @@ namespace dftfe MPI_Barrier(d_mpiCommParent); (d_dftfeWrapper[image]) ->updateAtomPositions(globalAtomsDisplacements); - if (d_verbosity > 4 && !d_dftPtr->getParametersObject().reproducible_output) + if (d_verbosity > 4 && + !d_dftPtr->getParametersObject().reproducible_output) pcout << "--Positions of image: " << image << " updated--" << std::endl; MPI_Barrier(d_mpiCommParent); @@ -1424,19 +1449,19 @@ namespace dftfe } } // print relaxation flags - if(!d_dftPtr->getParametersObject().reproducible_output) - { - pcout << " --------------Ion force relaxation flags----------------" - << std::endl; - for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + if (!d_dftPtr->getParametersObject().reproducible_output) { - pcout << tempRelaxFlagsData[i][0] << " " - << tempRelaxFlagsData[i][1] << " " - << tempRelaxFlagsData[i][2] << std::endl; + pcout << " --------------Ion force relaxation flags----------------" + << std::endl; + for (unsigned int i = 0; i < d_numberGlobalCharges; ++i) + { + pcout << tempRelaxFlagsData[i][0] << " " + << tempRelaxFlagsData[i][1] << " " + << tempRelaxFlagsData[i][2] << std::endl; + } + pcout << " --------------------------------------------------" + << std::endl; } - pcout << " --------------------------------------------------" - << std::endl; - } } else { @@ -1530,14 +1555,18 @@ namespace dftfe << " did not converge" << std::endl; } bool flag = true; - pcout - << "-------------------------------------------------------------------------------" - << std::endl; - pcout << " --------------------Initial NEB Data " - << "---------------------------------------" << std::endl; - if(!d_dftPtr->getParametersObject().reproducible_output) - pcout << std::setw(12) << "Image No" << std::setw(25) << " Free Energy(Ha) " - << std::setw(16) << " Error(Ha/bohr) " << std::endl; + if (!d_dftPtr->getParametersObject().reproducible_output) + { + pcout + << "-------------------------------------------------------------------------------" + << std::endl; + pcout << " --------------------Initial NEB Data " + << "---------------------------------------" << std::endl; + + pcout << std::setw(12) << "Image No" << std::setw(25) + << " Free Energy(Ha) " << std::setw(16) << " Error(Ha/bohr) " + << std::endl; + } @@ -1548,10 +1577,10 @@ namespace dftfe Force = 0.0; ImageError(d_NEBImageno, Force); double Energy = (d_dftfeWrapper[i])->getDFTFreeEnergy(); - if(!d_dftPtr->getParametersObject().reproducible_output) - pcout << std::setw(8) << i << std::setw(25) << std::setprecision(14) - << Energy << std::setw(16) << std::setprecision(4) - << std::floor(1000000000.0 * Force) / 1000000000.0 << std::endl; + if (!d_dftPtr->getParametersObject().reproducible_output) + pcout << std::setw(8) << i << std::setw(25) << std::setprecision(14) + << Energy << std::setw(16) << std::setprecision(4) + << std::floor(1000000000.0 * Force) / 1000000000.0 << std::endl; d_ImageError[d_NEBImageno] = (Force); if (Force > d_optimizertolerance && i > 0 && i < d_numberOfImages - 1) { @@ -1559,15 +1588,16 @@ namespace dftfe } } MPI_Barrier(d_mpiCommParent); - if(!d_dftPtr->getParametersObject().reproducible_output) - { - double Length = 0.0; - Length = CalculatePathLength(false); - pcout << std::endl << "--Path Length: " << Length << " Bohr" << std::endl; - step_time = MPI_Wtime() - step_time; - pcout << "Time taken for initial dft solve of all images: " << step_time - << std::endl; - } + if (!d_dftPtr->getParametersObject().reproducible_output) + { + double Length = 0.0; + Length = CalculatePathLength(false); + pcout << std::endl + << "--Path Length: " << Length << " Bohr" << std::endl; + step_time = MPI_Wtime() - step_time; + pcout << "Time taken for initial dft solve of all images: " << step_time + << std::endl; + } pcout << "-------------------------------------------------------------------------------" << std::endl; From 4ff91f49edd8b1f20dc31e33a06e77b2d97c56e5 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 21 Aug 2023 12:11:33 +0530 Subject: [PATCH 50/53] Update ctest for NEB --- .../real/nebH3.mpirun=16.output | 621 +----------------- 1 file changed, 7 insertions(+), 614 deletions(-) diff --git a/tests/dft/pseudopotential/real/nebH3.mpirun=16.output b/tests/dft/pseudopotential/real/nebH3.mpirun=16.output index baadde920..bbc69b856 100644 --- a/tests/dft/pseudopotential/real/nebH3.mpirun=16.output +++ b/tests/dft/pseudopotential/real/nebH3.mpirun=16.output @@ -1,625 +1,18 @@ -number of atoms: 3 -number of atoms types: 1 -Z:1 -============================================================================================================================= -number of electrons: 3 -number of eigen values: 5 -============================================================================================================================= ------------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- -v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 -v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 -v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 ------------------------------------------------------------------------------------------ ------Fractional coordinates of atoms------ -AtomId 0: 6.194416590000000333e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 2: 1.298138970000000114e-01 0.000000000000000000e+00 0.000000000000000000e+00 ------------------------------------------------------------------------------------------ -Number Image Charges 1801 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Setting initial guess for wavefunctions.... - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... -number of atoms: 3 -number of atoms types: 1 -Z:1 -============================================================================================================================= -number of electrons: 3 -number of eigen values: 5 -============================================================================================================================= ------------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- -v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 -v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 -v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 ------------------------------------------------------------------------------------------ ------Fractional coordinates of atoms------ -AtomId 0: 7.062293347816751554e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 2: 1.307373630170967083e-01 0.000000000000000000e+00 0.000000000000000000e+00 ------------------------------------------------------------------------------------------ -Number Image Charges 1817 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Setting initial guess for wavefunctions.... - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... -number of atoms: 3 -number of atoms types: 1 -Z:1 -============================================================================================================================= -number of electrons: 3 -number of eigen values: 5 -============================================================================================================================= ------------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- -v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 -v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 -v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 ------------------------------------------------------------------------------------------ ------Fractional coordinates of atoms------ -AtomId 0: 7.799413127587367933e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 2: 1.374680444824697700e-01 0.000000000000000000e+00 0.000000000000000000e+00 ------------------------------------------------------------------------------------------ -Number Image Charges 1821 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Setting initial guess for wavefunctions.... - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... -number of atoms: 3 -number of atoms types: 1 -Z:1 -============================================================================================================================= -number of electrons: 3 -number of eigen values: 5 -============================================================================================================================= ------------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- -v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 -v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 -v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 ------------------------------------------------------------------------------------------ ------Fractional coordinates of atoms------ -AtomId 0: 8.361894169088834872e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 2: 1.639040303194174708e-01 0.000000000000000000e+00 0.000000000000000000e+00 ------------------------------------------------------------------------------------------ -Number Image Charges 1821 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Setting initial guess for wavefunctions.... - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... -number of atoms: 3 -number of atoms types: 1 -Z:1 -============================================================================================================================= -number of electrons: 3 -number of eigen values: 5 -============================================================================================================================= ------------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- -v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 -v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 -v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 ------------------------------------------------------------------------------------------ ------Fractional coordinates of atoms------ -AtomId 0: 8.624795877471483907e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 2: 2.199619617881688194e-01 0.000000000000000000e+00 0.000000000000000000e+00 ------------------------------------------------------------------------------------------ -Number Image Charges 1821 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Setting initial guess for wavefunctions.... - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... -number of atoms: 3 -number of atoms types: 1 -Z:1 -============================================================================================================================= -number of electrons: 3 -number of eigen values: 5 -============================================================================================================================= ------------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- -v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 -v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 -v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 ------------------------------------------------------------------------------------------ ------Fractional coordinates of atoms------ -AtomId 0: 8.692686749520017742e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 2: 2.938252916270010506e-01 0.000000000000000000e+00 0.000000000000000000e+00 ------------------------------------------------------------------------------------------ -Number Image Charges 1817 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Setting initial guess for wavefunctions.... - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... -number of atoms: 3 -number of atoms types: 1 -Z:1 -============================================================================================================================= -number of electrons: 3 -number of eigen values: 5 -============================================================================================================================= ------------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- -v1 : 1.200000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 -v2 : 0.000000000000000000e+00 5.000000000000000000e+00 0.000000000000000000e+00 -v3 : 0.000000000000000000e+00 0.000000000000000000e+00 5.000000000000000000e+00 ------------------------------------------------------------------------------------------ ------Fractional coordinates of atoms------ -AtomId 0: 8.701861029999999886e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 2: 3.805583410000000222e-01 0.000000000000000000e+00 0.000000000000000000e+00 ------------------------------------------------------------------------------------------ -Number Image Charges 1801 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Setting initial guess for wavefunctions.... - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... ---$ Domain Length$ -- -Lx:= 1.200000000000000000e+01 Ly:=5.000000000000000000e+00 Lz:=5.000000000000000000e+00 - --------------Ion force relaxation flags---------------- -1 0 0 -0 0 0 -1 0 0 - -------------------------------------------------- Total No. of relaxation flags: 2 - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82501068 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.000247,0.000000,0.000000 -AtomId 1: 0.001296,0.000000,0.000000 -AtomId 2: 0.002518,0.000000,0.000000 --------------------------------------------------------------------------------------------- - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82372950 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.002474,0.000000,0.000000 -AtomId 1: 0.002167,0.000000,0.000000 -AtomId 2: 0.001222,0.000000,0.000000 --------------------------------------------------------------------------------------------- - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 13 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.81997130 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.005122,0.000000,0.000000 -AtomId 1: 0.006497,0.000000,0.000000 -AtomId 2: 0.002204,0.000000,0.000000 --------------------------------------------------------------------------------------------- - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 15 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.81693748 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.000436,0.000000,0.000000 -AtomId 1: 0.000015,0.000000,0.000000 -AtomId 2: 0.000451,0.000000,0.000000 --------------------------------------------------------------------------------------------- - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 13 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.81996398 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.002273,0.000000,0.000000 -AtomId 1: 0.006558,0.000000,0.000000 -AtomId 2: 0.005111,0.000000,0.000000 --------------------------------------------------------------------------------------------- - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82373103 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.001210,0.000000,0.000000 -AtomId 1: 0.002154,0.000000,0.000000 -AtomId 2: 0.002471,0.000000,0.000000 --------------------------------------------------------------------------------------------- - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82501068 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.002518,0.000000,0.000000 -AtomId 1: 0.001296,0.000000,0.000000 -AtomId 2: 0.000247,0.000000,0.000000 --------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------- - --------------------Initial NEB Data --------------------------------------- - Image No Force perpendicular in Ha/bohr Internal Energy in Ha - 0 0.002515 -1.825011 - 1 0.000988 -1.823729 - 2 0.000167 -1.819971 - 3 0.000443 -1.816937 - 4 0.000101 -1.819964 - 5 0.000975 -1.823731 - 6 0.002515 -1.825011 ----------------------------------------- -Atom ID with max displacement: 0 -Path Length of 0 is: 2.428922 Bohrs ------------------------------------------ - ---Path Length: 0.000000 Bohr -Time taken for initial dft solve of all images: 92.400012 ------------------------------------------------------------------------------- ----------------------------------------------------------------------- NEB STEP: 0 ----------------------------------------------------------------------- - Image No. Internal Energy (Ha) Free Energy (Ha) Max Force Error (Ha/bohr) - 0(T) -1.825011 -1.825011 0.002515 - 1(F) -1.823729 -1.823729 0.000988 0 - 2(T) -1.819971 -1.819971 0.000167 - 3(T) -1.816937 -1.816937 0.000443 - 4(T) -1.819964 -1.819964 0.000101 - 5(F) -1.823731 -1.823731 0.000975 0 - 6(T) -1.825011 -1.825011 0.002515 ---> Activation Energy (meV): 219.68279 -<-- Activation Energy (meV): 219.68286 ----------------------------------------------- -FlagTotal: 3 -Flag: 0 -Flag: 1 -Flag: 1 -Flag: 1 -Flag: 0 - -Maximum Force 0.00093in Ha/bohr - -------------------------------------------------------------------------------- - --------------------NEB Attempt Completed --------------------------------------- - Image No Force perpendicular in Ha/bohr Free Energy in Ha - 0 0.00251 -1.82501 - 1 0.00099 -1.82373 0 - 2 0.00017 -1.81997 1 - 3 0.00044 -1.81694 1 - 4 0.00010 -1.81996 1 - 5 0.00097 -1.82373 0 - 6 0.00251 -1.82501 ----------------------------------------- -Atom ID with max displacement: 0 -Path Length of 0 is: 2.42892 Bohrs ------------------------------------------ - -------------------------------------------------------------------------------- -FlagTotal: 3 -Is COnverged: 0 -Update called for image: 1 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82372947 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.002485,0.000000,0.000000 -AtomId 1: 0.001955,0.000000,0.000000 -AtomId 2: 0.001003,0.000000,0.000000 --------------------------------------------------------------------------------------------- -Update called for image: 2 -NEB: Image is forzen. Image No: 2 with Image force: 0.000167 -Update called for image: 3 -NEB: Image is forzen. Image No: 3 with Image force: 0.000443 -Update called for image: 4 -NEB: Image is forzen. Image No: 4 with Image force: 0.000101 -Update called for image: 5 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82373095 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.000994,0.000000,0.000000 -AtomId 1: 0.001944,0.000000,0.000000 -AtomId 2: 0.002482,0.000000,0.000000 --------------------------------------------------------------------------------------------- +--> Activation Energy (meV): 2.1968e+02 +<-- Activation Energy (meV): 2.1968e+02 ----------------------------------------------------------------------- NEB STEP: 1 ----------------------------------------------------------------------- - Image No. Internal Energy (Ha) Free Energy (Ha) Max Force Error (Ha/bohr) - 0(T) -1.825011 -1.825011 0.002515 - 1(F) -1.823729 -1.823729 0.000767 0 - 2(T) -1.819971 -1.819971 0.000167 - 3(T) -1.816937 -1.816937 0.000443 - 4(T) -1.819964 -1.819964 0.000101 - 5(F) -1.823731 -1.823731 0.000757 0 - 6(T) -1.825011 -1.825011 0.002515 ---> Activation Energy (meV): 219.68279 -<-- Activation Energy (meV): 219.68286 ----------------------------------------------- -FlagTotal: 3 -Flag: 0 -Flag: 1 -Flag: 1 -Flag: 1 -Flag: 0 - -Maximum Force 0.00071in Ha/bohr - -------------------------------------------------------------------------------- - --------------------NEB Attempt Completed --------------------------------------- - Image No Force perpendicular in Ha/bohr Free Energy in Ha - 0 0.00251 -1.82501 - 1 0.00077 -1.82373 0 - 2 0.00017 -1.81997 1 - 3 0.00044 -1.81694 1 - 4 0.00010 -1.81996 1 - 5 0.00076 -1.82373 0 - 6 0.00251 -1.82501 ----------------------------------------- -Atom ID with max displacement: 0 -Path Length of 0 is: 2.42927 Bohrs ------------------------------------------ - -------------------------------------------------------------------------------- -FlagTotal: 3 -Is COnverged: 0 -Update called for image: 1 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82372119 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.002541,0.000000,0.000000 -AtomId 1: 0.001169,0.000000,0.000000 -AtomId 2: 0.000183,0.000000,0.000000 --------------------------------------------------------------------------------------------- -Update called for image: 2 -NEB: Image is forzen. Image No: 2 with Image force: 0.000167 -Update called for image: 3 -NEB: Image is forzen. Image No: 3 with Image force: 0.000443 -Update called for image: 4 -NEB: Image is forzen. Image No: 4 with Image force: 0.000101 -Update called for image: 5 - -Finite element mesh information -------------------------------------------------- -FE interpolating polynomial order for Kohn-Sham eigenvalue problem: 4 -FE interpolating polynomial order for electrostatics solve: 4 -FE interpolating polynomial order for nodal electron density computation: 6 -number of elements: 432 -number of degrees of freedom for the Kohn-Sham eigenvalue problem : 30625 -------------------------------------------------- - -Reading initial guess for electron-density..... - -Pseudopotential initalization.... - -Starting SCF iterations.... -Checkpointing tria info and rho data in progress... -...checkpointing done. -SCF iterations converged to the specified tolerance after: 12 iterations. - -Energy computations (Hartree) -------------------- - Total energy: -1.82372248 - -Absolute values of ion forces (Hartree/Bohr) --------------------------------------------------------------------------------------------- -AtomId 0: 0.000186,0.000000,0.000000 -AtomId 1: 0.001170,0.000000,0.000000 -AtomId 2: 0.002538,0.000000,0.000000 --------------------------------------------------------------------------------------------- +--> Activation Energy (meV): 2.1968e+02 +<-- Activation Energy (meV): 2.1968e+02 ----------------------------------------------------------------------- NEB STEP: 2 ----------------------------------------------------------------------- - Image No. Internal Energy (Ha) Free Energy (Ha) Max Force Error (Ha/bohr) - 0(T) -1.825011 -1.825011 0.002515 - 1(T) -1.823721 -1.823721 0.000063 - 2(T) -1.819971 -1.819971 0.000167 - 3(T) -1.816937 -1.816937 0.000443 - 4(T) -1.819964 -1.819964 0.000101 - 5(T) -1.823722 -1.823722 0.000060 - 6(T) -1.825011 -1.825011 0.002515 ---> Activation Energy (meV): 219.68279 -<-- Activation Energy (meV): 219.68286 ----------------------------------------------- -FlagTotal: 5 -Optimization Criteria Met!! -Flag: 1 -Flag: 1 -Flag: 1 -Flag: 1 -Flag: 1 - -Maximum Force 0.00000in Ha/bohr - -------------------------------------------------------------------------------- - --------------------NEB Attempt Completed --------------------------------------- - Image No Force perpendicular in Ha/bohr Free Energy in Ha - 0 0.00251 -1.82501 - 1 0.00006 -1.82372 1 - 2 0.00017 -1.81997 1 - 3 0.00044 -1.81694 1 - 4 0.00010 -1.81996 1 - 5 0.00006 -1.82372 1 - 6 0.00251 -1.82501 ----------------------------------------- -Atom ID with max displacement: 0 -Path Length of 0 is: 2.43153 Bohrs ------------------------------------------ - -------------------------------------------------------------------------------- -FlagTotal: 5 -Is Converged: 1 \ No newline at end of file +--> Activation Energy (meV): 2.1968e+02 +<-- Activation Energy (meV): 2.1968e+02 +Optimization Criteria Met!! \ No newline at end of file From e4d699a8e5b0b9683574ec7b0264fbe786716835 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Mon, 21 Aug 2023 06:26:11 -0400 Subject: [PATCH 51/53] ctest update nscf/tdos --- .../complex/fccAl_04.mpirun=16.output | 25 +------------------ 1 file changed, 1 insertion(+), 24 deletions(-) diff --git a/tests/dft/pseudopotential/complex/fccAl_04.mpirun=16.output b/tests/dft/pseudopotential/complex/fccAl_04.mpirun=16.output index 9d96ee5e4..af12c2af3 100644 --- a/tests/dft/pseudopotential/complex/fccAl_04.mpirun=16.output +++ b/tests/dft/pseudopotential/complex/fccAl_04.mpirun=16.output @@ -52,6 +52,7 @@ Total entropic energy: 6.044950011873718478e-03 Total free energy: -8.373852629176504081e+00 Writing Bands File... K-Point WaveNo. EigenValue +Fermi Energy: -2.456430007469165011e-01 0 0 -0.56917291 0 1 -0.40565967 0 2 -0.40565967 @@ -69,9 +70,6 @@ K-Point WaveNo. EigenValue 0 14 0.10151236 0 15 0.10151238 0 16 0.10178831 -0 17 0.18044968 -0 18 0.18044968 -0 19 0.31217549 1 0 -0.56917291 1 1 -0.40565967 1 2 -0.40565967 @@ -89,9 +87,6 @@ K-Point WaveNo. EigenValue 1 14 0.10151236 1 15 0.10151238 1 16 0.10178831 -1 17 0.18044968 -1 18 0.18044968 -1 19 0.31217549 2 0 -0.56917291 2 1 -0.40565967 2 2 -0.40565967 @@ -109,9 +104,6 @@ K-Point WaveNo. EigenValue 2 14 0.10151293 2 15 0.10151295 2 16 0.10178887 -2 17 0.18045924 -2 18 0.18045924 -2 19 0.31248474 3 0 -0.56917291 3 1 -0.40565967 3 2 -0.40565967 @@ -129,9 +121,6 @@ K-Point WaveNo. EigenValue 3 14 0.10151236 3 15 0.10151238 3 16 0.10178831 -3 17 0.18044968 -3 18 0.18044968 -3 19 0.31217549 4 0 -0.56917291 4 1 -0.40565967 4 2 -0.40565967 @@ -149,9 +138,6 @@ K-Point WaveNo. EigenValue 4 14 0.10151236 4 15 0.10151238 4 16 0.10178831 -4 17 0.18044968 -4 18 0.18044968 -4 19 0.31217549 5 0 -0.56917291 5 1 -0.40565967 5 2 -0.40565967 @@ -169,9 +155,6 @@ K-Point WaveNo. EigenValue 5 14 0.10151293 5 15 0.10151295 5 16 0.10178887 -5 17 0.18045924 -5 18 0.18045924 -5 19 0.31248474 6 0 -0.56917291 6 1 -0.40565967 6 2 -0.40565967 @@ -189,9 +172,6 @@ K-Point WaveNo. EigenValue 6 14 0.10151236 6 15 0.10151238 6 16 0.10178831 -6 17 0.18044968 -6 18 0.18044968 -6 19 0.31217549 7 0 -0.56917291 7 1 -0.40565967 7 2 -0.40565967 @@ -209,9 +189,6 @@ K-Point WaveNo. EigenValue 7 14 0.10151236 7 15 0.10151238 7 16 0.10178831 -7 17 0.18044968 -7 18 0.18044968 -7 19 0.31217549 Writing tdos File... epsValue Dos -16.54768903 0.00008134 From 894a882e35a88b32876f49e6d465c03cb3c2564c Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Mon, 21 Aug 2023 23:19:11 +0530 Subject: [PATCH 52/53] Removed an inconsistency in preprocessing directives --- src/dft/solveNSCF.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dft/solveNSCF.cc b/src/dft/solveNSCF.cc index 0644bca43..58a823225 100644 --- a/src/dft/solveNSCF.cc +++ b/src/dft/solveNSCF.cc @@ -243,7 +243,7 @@ namespace dftfe computing_timer.enter_subsection("phiTot solve"); -#ifdef DFTFE_WITH_DEVICE_LANG_CUDA +#ifdef DFTFE_WITH_DEVICE if (d_dftParamsPtr->useDevice and d_dftParamsPtr->floatingNuclearCharges and not d_dftParamsPtr->pinnedNodeForPBC) #else @@ -943,7 +943,7 @@ namespace dftfe computing_timer.enter_subsection("phiTot solve"); -#ifdef DFTFE_WITH_DEVICE_LANG_CUDA +#ifdef DFTFE_WITH_DEVICE if (d_dftParamsPtr->useDevice and d_dftParamsPtr->floatingNuclearCharges and not d_dftParamsPtr->pinnedNodeForPBC) #else From 17a54ac41ac0d8243068c245c610ac2a5b8c7427 Mon Sep 17 00:00:00 2001 From: Kartick Ramakrishnan Date: Tue, 22 Aug 2023 10:11:09 +0530 Subject: [PATCH 53/53] Parameters.tex update --- doc/manual/parameters.tex | 242 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) diff --git a/doc/manual/parameters.tex b/doc/manual/parameters.tex index a816dd9be..38fe30ab0 100644 --- a/doc/manual/parameters.tex +++ b/doc/manual/parameters.tex @@ -139,7 +139,249 @@ \subsection{Global parameters} {\it Possible values:} A boolean value (true or false) \end{itemize} +\subsection{Parameters in section \tt NEB} +\label{parameters:NEB} +\begin{itemize} +\item {\it Parameter name:} {\tt ALLOW IMAGE FREEZING} +\phantomsection\label{parameters:NEB/ALLOW IMAGE FREEZING} +\label{parameters:NEB/ALLOW_20IMAGE_20FREEZING} + + +\index[prmindex]{ALLOW IMAGE FREEZING} +\index[prmindexfull]{NEB!ALLOW IMAGE FREEZING} +{\it Value:} false + + +{\it Default:} false + + +{\it Description:} If true images less than threshold will freeze for optimization step + + +{\it Possible values:} A boolean value (true or false) +\item {\it Parameter name:} {\tt BFGS STEP METHOD} +\phantomsection\label{parameters:NEB/BFGS STEP METHOD} +\label{parameters:NEB/BFGS_20STEP_20METHOD} + + +\index[prmindex]{BFGS STEP METHOD} +\index[prmindexfull]{NEB!BFGS STEP METHOD} +{\it Value:} QN + + +{\it Default:} QN + + +{\it Description:} [Standard] Method for computing update step in BFGS. Quasi-Newton step (default) or Rational Function Step as described in JPC 1985, 89:52-57. + + +{\it Possible values:} Any one of QN, RFO +\item {\it Parameter name:} {\tt ION RELAX FLAGS FILE} +\phantomsection\label{parameters:NEB/ION RELAX FLAGS FILE} +\label{parameters:NEB/ION_20RELAX_20FLAGS_20FILE} + + +\index[prmindex]{ION RELAX FLAGS FILE} +\index[prmindexfull]{NEB!ION RELAX FLAGS FILE} +{\it Value:} ion\_force\_flag.inp + + +{\it Default:} + + +{\it Description:} [Standard] File specifying the permission flags (1-free to move, 0-fixed) and external forces for the 3-coordinate directions and for all atoms. File format (example for two atoms with atom 1 fixed and atom 2 free and 0.01 Ha/Bohr force acting on atom 2): 0 0 0 0.0 0.0 0.0(row1), 1 1 1 0.0 0.0 0.01(row2). External forces are optional. + + +{\it Possible values:} Any string +\item {\it Parameter name:} {\tt LBFGS HISTORY} +\phantomsection\label{parameters:NEB/LBFGS HISTORY} +\label{parameters:NEB/LBFGS_20HISTORY} + + +\index[prmindex]{LBFGS HISTORY} +\index[prmindexfull]{NEB!LBFGS HISTORY} +{\it Value:} 5 + + +{\it Default:} 5 + + +{\it Description:} [Standard] Number of previous steps to considered for the LBFGS update. + + +{\it Possible values:} An integer $n$ such that $1\leq n \leq 20$ +\item {\it Parameter name:} {\tt MAXIMUM ION UPDATE STEP} +\phantomsection\label{parameters:NEB/MAXIMUM ION UPDATE STEP} +\label{parameters:NEB/MAXIMUM_20ION_20UPDATE_20STEP} + + +\index[prmindex]{MAXIMUM ION UPDATE STEP} +\index[prmindexfull]{NEB!MAXIMUM ION UPDATE STEP} +{\it Value:} 0.5 + + +{\it Default:} 0.5 + + +{\it Description:} [Standard] Sets the maximum allowed step size (displacement in a.u.) during ion relaxation. + + +{\it Possible values:} A floating point number $v$ such that $0 \leq v \leq 5$ +\item {\it Parameter name:} {\tt MAXIMUM NUMBER OF NEB ITERATIONS} +\phantomsection\label{parameters:NEB/MAXIMUM NUMBER OF NEB ITERATIONS} +\label{parameters:NEB/MAXIMUM_20NUMBER_20OF_20NEB_20ITERATIONS} + + +\index[prmindex]{MAXIMUM NUMBER OF NEB ITERATIONS} +\index[prmindexfull]{NEB!MAXIMUM NUMBER OF NEB ITERATIONS} +{\it Value:} 2 + + +{\it Default:} 100 + + +{\it Description:} [Standard] Maximum number of NEB iterations that will be performed in the simulation + + +{\it Possible values:} An integer $n$ such that $1\leq n \leq 250$ +\item {\it Parameter name:} {\tt MAXIMUM SPRING CONSTANT} +\phantomsection\label{parameters:NEB/MAXIMUM SPRING CONSTANT} +\label{parameters:NEB/MAXIMUM_20SPRING_20CONSTANT} + + +\index[prmindex]{MAXIMUM SPRING CONSTANT} +\index[prmindexfull]{NEB!MAXIMUM SPRING CONSTANT} +{\it Value:} 5e-3 + + +{\it Default:} 5e-3 + + +{\it Description:} [Standard] Sets the maximum allowable spring constant in (Ha/bohr^2) + + +{\it Possible values:} A floating point number $v$ such that $-\text{MAX\_DOUBLE} \leq v \leq \text{MAX\_DOUBLE}$ +\item {\it Parameter name:} {\tt MAX LINE SEARCH ITER} +\phantomsection\label{parameters:NEB/MAX LINE SEARCH ITER} +\label{parameters:NEB/MAX_20LINE_20SEARCH_20ITER} + + +\index[prmindex]{MAX LINE SEARCH ITER} +\index[prmindexfull]{NEB!MAX LINE SEARCH ITER} +{\it Value:} 5 + + +{\it Default:} 5 + + +{\it Description:} [Standard] Sets the maximum number of line search iterations in the case of CGPRP. Default is 5. + + +{\it Possible values:} An integer $n$ such that $1\leq n \leq 100$ +\item {\it Parameter name:} {\tt MINIMUM SPRING CONSTANT} +\phantomsection\label{parameters:NEB/MINIMUM SPRING CONSTANT} +\label{parameters:NEB/MINIMUM_20SPRING_20CONSTANT} + + +\index[prmindex]{MINIMUM SPRING CONSTANT} +\index[prmindexfull]{NEB!MINIMUM SPRING CONSTANT} +{\it Value:} 2e-3 + + +{\it Default:} 2e-3 + + +{\it Description:} [Standard] Sets the minimum allowable spring constant in (Ha/bohr^2) + + +{\it Possible values:} A floating point number $v$ such that $-\text{MAX\_DOUBLE} \leq v \leq \text{MAX\_DOUBLE}$ +\item {\it Parameter name:} {\tt NEB COORDINATES FILE} +\phantomsection\label{parameters:NEB/NEB COORDINATES FILE} +\label{parameters:NEB/NEB_20COORDINATES_20FILE} + + +\index[prmindex]{NEB COORDINATES FILE} +\index[prmindexfull]{NEB!NEB COORDINATES FILE} +{\it Value:} coordinates.inp + + +{\it Default:} + + +{\it Description:} [Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES. + + +{\it Possible values:} Any string +\item {\it Parameter name:} {\tt NEB DOMAIN VECTORS FILE} +\phantomsection\label{parameters:NEB/NEB DOMAIN VECTORS FILE} +\label{parameters:NEB/NEB_20DOMAIN_20VECTORS_20FILE} + + +\index[prmindex]{NEB DOMAIN VECTORS FILE} +\index[prmindexfull]{NEB!NEB DOMAIN VECTORS FILE} +{\it Value:} domainVectors.inp + + +{\it Default:} + + +{\it Description:} [Standard] Atomic-coordinates input file name. For fully non-periodic domain give Cartesian coordinates of the atoms (in a.u) with respect to origin at the center of the domain. For periodic and semi-periodic domain give fractional coordinates of atoms. File format (example for two atoms): Atom1-atomic-charge Atom1-valence-charge x1 y1 z1 (row1), Atom2-atomic-charge Atom2-valence-charge x2 y2 z2 (row2). The number of rows must be equal to NATOMS, and number of unique atoms must be equal to NATOM TYPES. + + +{\it Possible values:} Any string +\item {\it Parameter name:} {\tt NEB OPT SOLVER} +\phantomsection\label{parameters:NEB/NEB OPT SOLVER} +\label{parameters:NEB/NEB_20OPT_20SOLVER} + + +\index[prmindex]{NEB OPT SOLVER} +\index[prmindexfull]{NEB!NEB OPT SOLVER} +{\it Value:} LBFGS + + +{\it Default:} LBFGS + + +{\it Description:} [Standard] Method for Ion relaxation solver. LBFGS is the default + + +{\it Possible values:} Any one of BFGS, LBFGS, CGPRP +\item {\it Parameter name:} {\tt NUMBER OF IMAGES} +\phantomsection\label{parameters:NEB/NUMBER OF IMAGES} +\label{parameters:NEB/NUMBER_20OF_20IMAGES} + + +\index[prmindex]{NUMBER OF IMAGES} +\index[prmindexfull]{NEB!NUMBER OF IMAGES} +{\it Value:} 7 + + +{\it Default:} 7 + + +{\it Description:} [Standard] NUMBER OF IMAGES:Default option is 7. When NEB is triggered this controls the total number of images along the MEP including the end points + + +{\it Possible values:} An integer $n$ such that $1\leq n \leq 50$ +\item {\it Parameter name:} {\tt PATH THRESHOLD} +\phantomsection\label{parameters:NEB/PATH THRESHOLD} +\label{parameters:NEB/PATH_20THRESHOLD} + + +\index[prmindex]{PATH THRESHOLD} +\index[prmindexfull]{NEB!PATH THRESHOLD} +{\it Value:} 0.0005 + + +{\it Default:} 5e-4 + + +{\it Description:} [Standard] Simulation stops when the error(norm of force orthogonal to path in Ha/bohr) is less than PATH THRESHOLD + + +{\it Possible values:} A floating point number $v$ such that $-\text{MAX\_DOUBLE} \leq v \leq \text{MAX\_DOUBLE}$ +\end{itemize} \subsection{Parameters in section \tt Boundary conditions} \label{parameters:Boundary_20conditions}