From 3caebd26e4303ff8ba57b1f16df96cbe28e86301 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Mon, 13 Aug 2018 01:39:14 -0400 Subject: [PATCH 01/59] Making changes to remove dealii partitioner memory --- include/dft.h | 3 ++- src/dft/dft.cc | 2 +- src/dft/psiInitialGuess.cc | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/include/dft.h b/include/dft.h index 649cb5d4f..68570bad1 100644 --- a/include/dft.h +++ b/include/dft.h @@ -569,7 +569,8 @@ namespace dftfe { /// Spectrum split higher eigenvalues computed in Rayleigh-Ritz step std::vector > eigenValuesRRSplit; - std::vector> d_eigenVectorsFlattened; + std::vector > d_eigenVectorsFlattened; + std::vector > d_eigenVectorsFlattenedSTL; /// parallel message stream ConditionalOStream pcout; diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 55009bcc5..98f2dffcd 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -344,7 +344,7 @@ namespace dftfe { a0.resize((dftParameters::spinPolarized+1)*d_kPointWeights.size(),dftParameters::lowerEndWantedSpectrum); bLow.resize((dftParameters::spinPolarized+1)*d_kPointWeights.size(),0.0); - d_eigenVectorsFlattened.resize((1+dftParameters::spinPolarized)*d_kPointWeights.size()); + d_eigenVectorsFlattenedSTL.resize((1+dftParameters::spinPolarized)*d_kPointWeights.size()); for(unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) { diff --git a/src/dft/psiInitialGuess.cc b/src/dft/psiInitialGuess.cc index dd4d7aa59..33b70d27b 100644 --- a/src/dft/psiInitialGuess.cc +++ b/src/dft/psiInitialGuess.cc @@ -246,8 +246,8 @@ void dftClass::readPSIRadialValues(){ const dealii::types::global_dof_index dofID = locallyOwnedDOFs[dof]; Point<3> node = d_supportPoints[dofID]; - if(d_eigenVectorsFlattened[0].in_local_range(dofID*numEigenValues)) - { + //if(d_eigenVectorsFlattened[0].in_local_range(dofID*numEigenValues)) + //{ if(!constraintsNone.is_constrained(dofID)) { // @@ -312,7 +312,7 @@ void dftClass::readPSIRadialValues(){ //spherical part if (it->m > 0) { - d_eigenVectorsFlattened[kPoint][dofID*numEigenValues+waveFunction] += + d_eigenVectorsFlattenedSTL[kPoint][dofID*numEigenValues+waveFunction] += dataTypes::number(R*std::sqrt(2)*boost::math::spherical_harmonic_r(it->l,it->m,theta,phi)); } else if (it->m == 0) @@ -355,7 +355,7 @@ void dftClass::readPSIRadialValues(){ } } - } + //} } for(int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) From a885862e1fa210a9bf40dc8d485ae35f7c8f925c Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Mon, 13 Aug 2018 17:21:55 -0400 Subject: [PATCH 02/59] Removing partitioner memory --- src/dft/density.cc | 37 ++++++++++++++++--- src/dft/initElectronicFields.cc | 8 ++-- src/dft/kohnShamEigenSolve.cc | 16 ++++---- src/dft/psiInitialGuess.cc | 18 ++++----- ...evOrthogonalizedSubspaceIterationSolver.cc | 32 ++++++++-------- src/symmetry/symmetrizeRho.cc | 24 +++++++++++- 6 files changed, 92 insertions(+), 43 deletions(-) diff --git a/src/dft/density.cc b/src/dft/density.cc index 26a49f68b..cfd819ade 100644 --- a/src/dft/density.cc +++ b/src/dft/density.cc @@ -78,7 +78,12 @@ void dftClass::compute_rhoOut() const unsigned int eigenVectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); + const unsigned int localVectorSize = d_eigenVectorsFlattenedSTL.size()/numEigenValues; + std::vector> eigenVectors((1+dftParameters::spinPolarized)*d_kPointWeights.size()); + + + for(unsigned int ivec = 0; ivec < numEigenValues; ivec+=eigenVectorsBlockSize) { const unsigned int currentBlockSize=std::min(eigenVectorsBlockSize,numEigenValues-ivec); @@ -97,21 +102,41 @@ void dftClass::compute_rhoOut() (ivec+currentBlockSize)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { + dealii::parallel::distributed::Vector eigenVectorsFlattenedArrayBlock; + vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), + currentBlockSize, + eigenVectorsFlattenedArrayBlock); + + constraintsNoneDataInfo.precomputeMaps(matrix_free_data.get_partitioner(), + eigenVectorsFlattenedArrayBlock.get_partitioner(), + currentBlockSize); + + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { + + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < currentBlockSize; ++iWave) + eigenVectorsFlattenedArrayBlock.local_element(iNode*currentBlockSize+iWave) + = d_eigenVectorsFlattenedSTL[kPoint][iNode*numEigenValues+ivec+iWave]; + + constraintsNoneDataInfo.distribute(eigenVectorsFlattenedArrayBlock, + currentBlockSize); + + #ifdef USE_COMPLEX vectorTools::copyFlattenedDealiiVecToSingleCompVec - (d_eigenVectorsFlattened[kPoint], - numEigenValues, - std::make_pair(ivec,ivec+currentBlockSize), + (eigenVectorsFlattenedArrayBlock, + currentBlockSize, + std::make_pair(0,currentBlockSize), localProc_dof_indicesReal, localProc_dof_indicesImag, eigenVectors[kPoint]); #else vectorTools::copyFlattenedDealiiVecToSingleCompVec - (d_eigenVectorsFlattened[kPoint], - numEigenValues, - std::make_pair(ivec,ivec+currentBlockSize), + (eigenVectorsFlattenedArrayBlock, + currentBlockSize, + std::make_pair(0,currentBlockSize), eigenVectors[kPoint]); #endif diff --git a/src/dft/initElectronicFields.cc b/src/dft/initElectronicFields.cc index fcd8445a1..c293cd4cc 100644 --- a/src/dft/initElectronicFields.cc +++ b/src/dft/initElectronicFields.cc @@ -96,11 +96,13 @@ void dftClass::initElectronicFields(const unsigned int usePreviousGroun { for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { - vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), + /*vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), numEigenValues, - d_eigenVectorsFlattened[kPoint]); + d_eigenVectorsFlattened[kPoint]);*/ - d_eigenVectorsFlattened[kPoint] = dataTypes::number(0.0); + d_eigenVectorsFlattenedSTL[kPoint].resize(numEigenValues*matrix_free_data.get_vector_partitioner()->local_size(),dataTypes::number(0.0)); + + //d_eigenVectorsFlattened[kPoint] = dataTypes::number(0.0); } diff --git a/src/dft/kohnShamEigenSolve.cc b/src/dft/kohnShamEigenSolve.cc index 06fb94b01..4d0de5158 100644 --- a/src/dft/kohnShamEigenSolve.cc +++ b/src/dft/kohnShamEigenSolve.cc @@ -39,13 +39,13 @@ namespace internal const std::shared_ptr & singleComponentPartitioner, const unsigned int numberFields, const std::vector & localProc_dof_indicesReal, - dealii::parallel::distributed::Vector & fieldsArrayFlattened, + std::vector & fieldsArrayFlattened, dftUtils::constraintMatrixInfo & constraintsNoneDataInfo) { - constraintsNoneDataInfo.precomputeMaps(singleComponentPartitioner, - fieldsArrayFlattened.get_partitioner(), - numberFields); + //constraintsNoneDataInfo.precomputeMaps(singleComponentPartitioner, + // fieldsArrayFlattened.get_partitioner(), + // numberFields); const unsigned int numberDofs = fieldsArrayFlattened.local_size()/numberFields; const unsigned int inc = 1; @@ -67,9 +67,9 @@ namespace internal #endif } - constraintsNoneDataInfo.distribute(fieldsArrayFlattened, - numberFields); - fieldsArrayFlattened.update_ghost_values(); + //constraintsNoneDataInfo.distribute(fieldsArrayFlattened, + // numberFields); + //fieldsArrayFlattened.update_ghost_values(); } } @@ -109,7 +109,7 @@ void dftClass::kohnShamEigenSpaceCompute(const unsigned int spinType, bLow[(1+dftParameters::spinPolarized)*kPointIndex+spinType]); subspaceIterationSolver.solve(kohnShamDFTEigenOperator, - d_eigenVectorsFlattened[(1+dftParameters::spinPolarized)*kPointIndex+spinType], + d_eigenVectorsFlattenedSTL[(1+dftParameters::spinPolarized)*kPointIndex+spinType], d_tempEigenVec, numEigenValues, eigenValuesTemp, diff --git a/src/dft/psiInitialGuess.cc b/src/dft/psiInitialGuess.cc index 33b70d27b..f723dcb8b 100644 --- a/src/dft/psiInitialGuess.cc +++ b/src/dft/psiInitialGuess.cc @@ -312,17 +312,17 @@ void dftClass::readPSIRadialValues(){ //spherical part if (it->m > 0) { - d_eigenVectorsFlattenedSTL[kPoint][dofID*numEigenValues+waveFunction] += + d_eigenVectorsFlattenedSTL[kPoint][dof*numEigenValues+waveFunction] += dataTypes::number(R*std::sqrt(2)*boost::math::spherical_harmonic_r(it->l,it->m,theta,phi)); } else if (it->m == 0) { - d_eigenVectorsFlattened[kPoint][dofID*numEigenValues+waveFunction] += + d_eigenVectorsFlattenedSTL[kPoint][dof*numEigenValues+waveFunction] += dataTypes::number(R*boost::math::spherical_harmonic_r(it->l,it->m,theta,phi)); } else { - d_eigenVectorsFlattened[kPoint][dofID*numEigenValues+waveFunction] += + d_eigenVectorsFlattenedSTL[kPoint][dof*numEigenValues+waveFunction] += dataTypes::number(R*std::sqrt(2)*boost::math::spherical_harmonic_i(it->l,-(it->m),theta,phi)); } } @@ -348,7 +348,7 @@ void dftClass::readPSIRadialValues(){ if(rand()%2 == 0) value = -1.0*value; - d_eigenVectorsFlattened[kPoint][dofID*numEigenValues+iWave] = dataTypes::number(value); + d_eigenVectorsFlattened[kPoint][dof*numEigenValues+iWave] = dataTypes::number(value); } } @@ -358,11 +358,11 @@ void dftClass::readPSIRadialValues(){ //} } - for(int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) - { - d_eigenVectorsFlattened[kPoint].compress(VectorOperation::insert); - d_eigenVectorsFlattened[kPoint].update_ghost_values(); - } + //for(int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + //{ + // d_eigenVectorsFlattened[kPoint].compress(VectorOperation::insert); + // d_eigenVectorsFlattened[kPoint].update_ghost_values(); + // } if (dftParameters::startingWFCType=="RANDOM") { diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index 0d617424b..4e8bf4c81 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -108,8 +108,8 @@ namespace dftfe{ // solve // eigenSolverClass::ReturnValueType - chebyshevOrthogonalizedSubspaceIterationSolver::solve(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & eigenVectorsFlattened, + chebyshevOrthogonalizedSubspaceIterationSolver::solve(operatorDFTClass & operatorMatrix, + std::vector & eigenVectorsFlattened, vectorType & tempEigenVec, const unsigned int totalNumberWaveFunctions, std::vector & eigenValues, @@ -119,7 +119,7 @@ namespace dftfe{ if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(eigenVectorsFlattened.get_mpi_communicator(), + dftUtils::printCurrentMemoryUsage(operatorMatrix.getMPICommunicator(), "Before Lanczos k-step upper Bound"); computing_timer.enter_section("Lanczos k-step Upper Bound"); @@ -155,15 +155,15 @@ namespace dftfe{ // //Set the constraints to zero // - operatorMatrix.getOverloadedConstraintMatrix()->set_zero(eigenVectorsFlattened, - totalNumberWaveFunctions); + //operatorMatrix.getOverloadedConstraintMatrix()->set_zero(eigenVectorsFlattened, + // totalNumberWaveFunctions); if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(eigenVectorsFlattened.get_mpi_communicator(), + dftUtils::printCurrentMemoryUsage(operatorMatrix.getMPICommunicator(), "Before starting chebyshev filtering"); - const unsigned int localVectorSize = eigenVectorsFlattened.local_size()/totalNumberWaveFunctions; + const unsigned int localVectorSize = eigenVectorsFlattened.size()/totalNumberWaveFunctions; //band group parallelization data structures @@ -178,8 +178,8 @@ namespace dftfe{ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - if(totalNumberBlocks > 1 || numberBandGroups>1) - { + // if(totalNumberBlocks >= 1 || numberBandGroups>1) + //{ // //allocate storage for eigenVectorsFlattenedArray for multiple blocks // @@ -208,7 +208,7 @@ namespace dftfe{ for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) for(unsigned int iWave = 0; iWave < BVec; ++iWave) eigenVectorsFlattenedArrayBlock.local_element(iNode*BVec+iWave) - =eigenVectorsFlattened.local_element(iNode*totalNumberWaveFunctions+jvec+iWave); + =eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave]; computing_timer.exit_section("Copy from full to block flattened array"); @@ -226,14 +226,14 @@ namespace dftfe{ computing_timer.exit_section("Chebyshev filtering opt"); if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(eigenVectorsFlattened.get_mpi_communicator(), + dftUtils::printCurrentMemoryUsage(operatorMatrix.getMPICommunicator(), "During blocked chebyshev filtering"); //copy the eigenVectorsFlattenedArrayBlock into eigenVectorsFlattenedArray after filtering computing_timer.enter_section("Copy from block to full flattened array"); for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) for(unsigned int iWave = 0; iWave < BVec; ++iWave) - eigenVectorsFlattened.local_element(iNode*totalNumberWaveFunctions+jvec+iWave) + eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave] = eigenVectorsFlattenedArrayBlock.local_element(iNode*BVec+iWave); computing_timer.exit_section("Copy from block to full flattened array"); @@ -243,7 +243,7 @@ namespace dftfe{ //set to zero wavefunctions which wont go through chebyshev filtering inside a given band group for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) for(unsigned int iWave = 0; iWave < BVec; ++iWave) - eigenVectorsFlattened.local_element(iNode*totalNumberWaveFunctions+jvec+iWave) + eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave] = dataTypes::number(0.0); } @@ -273,8 +273,8 @@ namespace dftfe{ computing_timer.exit_section("MPI All Reduce wavefunctions across all band groups"); } - } - else + //} + /*else { operatorMatrix.reinit(totalNumberWaveFunctions, eigenVectorsFlattened, @@ -292,7 +292,7 @@ namespace dftfe{ d_lowerBoundWantedSpectrum); computing_timer.exit_section("Chebyshev filtering opt"); - } + }*/ if(dftParameters::verbosity >= 4) pcout<<"ChebyShev Filtering Done: "< void symmetryClass::computeLocalrhoOut() { std::vector> eigenVectors((1+dftParameters::spinPolarized)*dftPtr->d_kPointWeights.size()); + + const unsigned int localVectorSize = dftPtr->d_eigenVectorsFlattenedSTL.size()/numEigenValues; + + dealii::parallel::distributed::Vector eigenVectorsFlattenedArrayFullBlock; + vectorTools::createDealiiVector(dftPtr->matrix_free_data.get_vector_partitioner(), + dftPtr->numEigenValues, + eigenVectorsFlattenedArrayFullBlock); + + dftPtr->constraintsNoneDataInfo.precomputeMaps(dftPtr->matrix_free_data.get_partitioner(), + eigenVectorsFlattenedArrayBlock.get_partitioner(), + dftPtr->numEigenValues); + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*dftPtr->d_kPointWeights.size(); ++kPoint) { eigenVectors[kPoint].resize(dftPtr->numEigenValues); for(unsigned int i = 0; i < dftPtr->numEigenValues; ++i) eigenVectors[kPoint][i].reinit(dftPtr->d_tempEigenVec); + + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < dftPtr->numEigenValues; ++iWave) + eigenVectorsFlattenedArrayFullBlock.local_element(iNode*dftPtr->numEigenValues+iWave) + = d_eigenVectorsFlattenedSTL[kPoint][iNode*dftPtr->numEigenValues+iWave]; + + constraintsNoneDataInfo.distribute(eigenVectorsFlattenedArrayFullBlock, + dftPtr->numEigenValues); + + #ifdef USE_COMPLEX vectorTools::copyFlattenedDealiiVecToSingleCompVec - (dftPtr->d_eigenVectorsFlattened[kPoint], + (eigenVectorsFlattenedArrayFullBlock, dftPtr->numEigenValues, std::make_pair(0,dftPtr->numEigenValues), dftPtr->localProc_dof_indicesReal, From 298d069e92b77d4a503efad7cc98a35e4cd13e87 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Sun, 19 Aug 2018 02:03:48 -0400 Subject: [PATCH 03/59] Optimized overlap matrix construction in PGS. ctests passed. --- src/linAlg/linearAlgebraOperationsInternal.cc | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index 024b4298a..ec18c0095 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -162,7 +162,7 @@ namespace dftfe const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - std::vector overlapMatrixBlock(numberVectors*vectorsBlockSize,0.0); + //std::vector overlapMatrixBlock(numberVectors*vectorsBlockSize,0.0); std::vector blockVectorsMatrix(numLocalDofs*vectorsBlockSize,0.0); for (unsigned int ivec = 0; ivec < numberVectors; ivec += vectorsBlockSize) @@ -176,25 +176,29 @@ namespace dftfe const char transA = 'N',transB = 'N'; const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - std::fill(overlapMatrixBlock.begin(),overlapMatrixBlock.end(),0.); + //std::fill(overlapMatrixBlock.begin(),overlapMatrixBlock.end(),0.); for (unsigned int i = 0; i overlapMatrixBlock(symmetricOptSize*B,0.0); + dgemm_(&transA, &transB, - &numberVectors, + &symmetricOptSize, &B, &numLocalDofs, &scalarCoeffAlpha, - X.begin(), + X.begin()+ivec, &numberVectors, &blockVectorsMatrix[0], &numLocalDofs, &scalarCoeffBeta, &overlapMatrixBlock[0], - &numberVectors); + &symmetricOptSize); dealii::Utilities::MPI::sum(overlapMatrixBlock, X.get_mpi_communicator(), @@ -206,14 +210,14 @@ namespace dftfe if (globalToLocalColumnIdMap.find(i+ivec)!=globalToLocalColumnIdMap.end()) { const unsigned int localColumnId=globalToLocalColumnIdMap[i+ivec]; - for (unsigned int j = 0; j ::iterator it= globalToLocalRowIdMap.find(j); if(it!=globalToLocalRowIdMap.end()) overlapMatPar.local_el(it->second, localColumnId) - =overlapMatrixBlock[i*numberVectors+j]; + =overlapMatrixBlock[i*symmetricOptSize+j-ivec]; } } }//band parallelization @@ -267,7 +271,7 @@ namespace dftfe bandGroupLowHighPlusOneIndices[1]); const unsigned int dofsBlockSize=dftParameters::subspaceRotDofsBlockSize; - std::vector rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); + //std::vector rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); std::vector rotatedVectorsMatBlock(numberSubspaceVectors*dofsBlockSize,0.0); std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); @@ -298,7 +302,8 @@ namespace dftfe const char transA = 'N',transB = 'N'; const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); + std::vector rotationMatBlock(vectorsBlockSize*nonZeroVectorsSize,0.0); + //std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); if (rotationMatTranspose) { From 06b945817f41dd0fd00284a4079707d91f34b277 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Sun, 19 Aug 2018 17:17:30 -0400 Subject: [PATCH 04/59] Inmproved cache reuse in overlap matrix construction and subspace rotation. ctests passed. --- src/linAlg/linearAlgebraOperationsInternal.cc | 56 ++++++++++++++----- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index ec18c0095..cedd19cc2 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -162,7 +162,7 @@ namespace dftfe const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - //std::vector overlapMatrixBlock(numberVectors*vectorsBlockSize,0.0); + std::vector overlapMatrixBlock(numberVectors*vectorsBlockSize,0.0); std::vector blockVectorsMatrix(numLocalDofs*vectorsBlockSize,0.0); for (unsigned int ivec = 0; ivec < numberVectors; ivec += vectorsBlockSize) @@ -176,7 +176,7 @@ namespace dftfe const char transA = 'N',transB = 'N'; const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - //std::fill(overlapMatrixBlock.begin(),overlapMatrixBlock.end(),0.); + std::fill(overlapMatrixBlock.begin(),overlapMatrixBlock.end(),0.); for (unsigned int i = 0; i overlapMatrixBlock(symmetricOptSize*B,0.0); + //std::vector overlapMatrixBlock(symmetricOptSize*B,0.0); dgemm_(&transA, &transB, @@ -200,10 +200,24 @@ namespace dftfe &overlapMatrixBlock[0], &symmetricOptSize); - dealii::Utilities::MPI::sum(overlapMatrixBlock, - X.get_mpi_communicator(), - overlapMatrixBlock); - + //dealii::Utilities::MPI::sum(overlapMatrixBlock, + // X.get_mpi_communicator(), + // overlapMatrixBlock); +#ifdef USE_COMPLEX + MPI_Allreduce(MPI_IN_PLACE, + &overlapMatrixBlock[0], + symmetricOptSize*B, + MPI_C_DOUBLE_COMPLEX, + MPI_SUM, + X.get_mpi_communicator()); +#else + MPI_Allreduce(MPI_IN_PLACE, + &overlapMatrixBlock[0], + symmetricOptSize*B, + MPI_DOUBLE, + MPI_SUM, + X.get_mpi_communicator()); +#endif if (processGrid->is_process_active()) for(unsigned int i = 0; i rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); + std::vector rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); std::vector rotatedVectorsMatBlock(numberSubspaceVectors*dofsBlockSize,0.0); std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); @@ -302,8 +316,8 @@ namespace dftfe const char transA = 'N',transB = 'N'; const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - std::vector rotationMatBlock(vectorsBlockSize*nonZeroVectorsSize,0.0); - //std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); + //std::vector rotationMatBlock(vectorsBlockSize*nonZeroVectorsSize,0.0); + std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); if (rotationMatTranspose) { @@ -344,9 +358,25 @@ namespace dftfe } } - dealii::Utilities::MPI::sum(rotationMatBlock, - subspaceVectorsArray.get_mpi_communicator(), - rotationMatBlock); + //dealii::Utilities::MPI::sum(rotationMatBlock, + // subspaceVectorsArray.get_mpi_communicator(), + // rotationMatBlock); +#ifdef USE_COMPLEX + MPI_Allreduce(MPI_IN_PLACE, + &rotationMatBlock[0], + vectorsBlockSize*nonZeroVectorsSize, + MPI_C_DOUBLE_COMPLEX, + MPI_SUM, + subspaceVectorsArray.get_mpi_communicator()); +#else + MPI_Allreduce(MPI_IN_PLACE, + &rotationMatBlock[0], + vectorsBlockSize*nonZeroVectorsSize, + MPI_DOUBLE, + MPI_SUM, + subspaceVectorsArray.get_mpi_communicator()); +#endif + if (BDof!=0) { From 1eae996c13a256dfa78b2987c1406c0c55bea7f8 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Sun, 19 Aug 2018 23:30:39 -0400 Subject: [PATCH 05/59] Optimized XtHX and added more code comments. ctests passed. --- include/linearAlgebraOperationsInternal.h | 18 +- src/dftOperator/kohnShamDFTOperator.cc | 69 ++++++-- src/linAlg/linearAlgebraOperationsInternal.cc | 165 ++++++++++++------ 3 files changed, 173 insertions(+), 79 deletions(-) diff --git a/include/linearAlgebraOperationsInternal.h b/include/linearAlgebraOperationsInternal.h index cf2662d91..ca0318628 100644 --- a/include/linearAlgebraOperationsInternal.h +++ b/include/linearAlgebraOperationsInternal.h @@ -24,7 +24,7 @@ namespace dftfe namespace linearAlgebraOperations { /** - * @brief Contains small internal functions used in linearAlgebraOperations + * @brief Contains internal functions used in linearAlgebraOperations * * @author Sambit Das */ @@ -70,9 +70,9 @@ namespace dftfe const MPI_Comm &interComm, const unsigned int broadcastRoot); - /** @brief Computes S=X^{T}*X and stores in a parallel ScaLAPACK matrix. - * X^{T} is the subspaceVectorsArray in the column major format. S is the - * overlapMatPar. + /** @brief Computes Sc=X^{T}*Xc and stores in a parallel ScaLAPACK matrix. + * X^{T} is the subspaceVectorsArray stored in the column major format (N x M). + * Sc is the overlapMatPar. * * The overlap matrix computation and filling is done in a blocked approach * which avoids creation of full serial overlap matrix memory, and also avoids creation @@ -80,14 +80,14 @@ namespace dftfe * */ template - void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors, + void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & subspaceVectorsArray, + const unsigned int N, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, dealii::ScaLAPACKMatrix & overlapMatPar); - /** @brief Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray in the column major - * format. Q is rotationMatPar. + /** @brief Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray + * stored in the column major format (N x M). Q is rotationMatPar. * * The subspace rotation inside this function is done in a blocked approach * which avoids creation of full serial rotation matrix memory, and also avoids creation @@ -96,7 +96,7 @@ namespace dftfe */ template void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, - const unsigned int numberSubspaceVectors, + const unsigned int N, const unsigned int numberCoreVectors, dealii::parallel::distributed::Vector & nonCoreVectorsArray, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, diff --git a/src/dftOperator/kohnShamDFTOperator.cc b/src/dftOperator/kohnShamDFTOperator.cc index 640a3719d..8785e6364 100644 --- a/src/dftOperator/kohnShamDFTOperator.cc +++ b/src/dftOperator/kohnShamDFTOperator.cc @@ -995,11 +995,25 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map::computeVEff(const std::mapbandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { XBlock=0; - //fill XBlock from X: + //fill XBlock^{T} from X: for(unsigned int iNode = 0; iNode::computeVEff(const std::map::computeVEff(const std::mapis_process_active()) for (unsigned int j = 0; j ::iterator it= globalToLocalRowIdMap.find(i); if (it!=globalToLocalRowIdMap.end()) projHamPar.local_el(it->second, localColumnId) - =projHamBlock[j*numberWaveFunctions+i]; + =projHamBlock[j*D+i-jvec]; } } diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index cedd19cc2..84acb59f1 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -131,8 +131,8 @@ namespace dftfe } template - void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors, + void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & subspaceVectorsArray, + const unsigned int N, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, dealii::ScaLAPACKMatrix & overlapMatPar) @@ -140,7 +140,7 @@ namespace dftfe #ifdef USE_COMPLEX AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - const unsigned int numLocalDofs = X.local_size()/numberVectors; + const unsigned int numLocalDofs = subspaceVectorsArray.local_size()/N; //band group parallelization data structures const unsigned int numberBandGroups= @@ -148,7 +148,7 @@ namespace dftfe const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); std::vector bandGroupLowHighPlusOneIndices; dftUtils::createBandParallelizationIndices(interBandGroupComm, - numberVectors, + N, bandGroupLowHighPlusOneIndices); //get global to local index maps for Scalapack matrix @@ -159,17 +159,39 @@ namespace dftfe globalToLocalRowIdMap, globalToLocalColumnIdMap); + + /* + * Sc=X^{T}*Xc is done in a blocked approach for memory optimization: + * Sum_{blocks} X^{T}*XcBlock. The result of each X^{T}*XBlock + * has a much smaller memory compared to X^{T}*Xc. + * X^{T} is a matrix with size number of wavefunctions times + * number of local degrees of freedom (N x MLoc). + * MLoc is denoted by numLocalDofs. + * Xc denotes complex conjugate of X. + * A further optimization is done to reduce floating point operations: + * As X^{T}*Xc is a Hermitian matrix, it suffices to compute only the lower + * triangular part. To exploit this, we do + * X^{T}*Xc=Sum_{blocks} XTrunc^{T}*XcBlock + * where XTrunc^{T} is a (D x MLoc) sub matrix of X^{T} with the row indices + * ranging fromt the lowest global index of XcBlock (denoted by ivec in the code) + * to N. D=N-ivec. + * The parallel ScaLapack overlap matrix is directly filled from + * the XTrunc^{T}*XcBlock result + */ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - std::vector overlapMatrixBlock(numberVectors*vectorsBlockSize,0.0); + std::vector overlapMatrixBlock(N*vectorsBlockSize,0.0); std::vector blockVectorsMatrix(numLocalDofs*vectorsBlockSize,0.0); - for (unsigned int ivec = 0; ivec < numberVectors; ivec += vectorsBlockSize) + for (unsigned int ivec = 0; ivec < N; ivec += vectorsBlockSize) { // Correct block dimensions if block "goes off edge of" the matrix - const unsigned int B = std::min(vectorsBlockSize, numberVectors-ivec); + const unsigned int B = std::min(vectorsBlockSize, N-ivec); + // If one plus the ending index of a block lies within a band parallelization group + // do computations for that block within the band group, otherwise skip that + // block. This is only activated if NPBAND>1 if ((ivec+B)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && (ivec+B)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { @@ -178,65 +200,75 @@ namespace dftfe std::fill(overlapMatrixBlock.begin(),overlapMatrixBlock.end(),0.); + // Extract XcBlock from X^{T}. for (unsigned int i = 0; i overlapMatrixBlock(symmetricOptSize*B,0.0); + // Comptute local XTrunc^{T}*XcBlock. dgemm_(&transA, &transB, - &symmetricOptSize, + &D, &B, &numLocalDofs, &scalarCoeffAlpha, - X.begin()+ivec, - &numberVectors, + subspaceVectorsArray.begin()+ivec, + &N, &blockVectorsMatrix[0], &numLocalDofs, &scalarCoeffBeta, &overlapMatrixBlock[0], - &symmetricOptSize); + &D); - //dealii::Utilities::MPI::sum(overlapMatrixBlock, - // X.get_mpi_communicator(), - // overlapMatrixBlock); + + // Sum local XTrunc^{T}*XcBlock across domain decomposition processors #ifdef USE_COMPLEX MPI_Allreduce(MPI_IN_PLACE, &overlapMatrixBlock[0], - symmetricOptSize*B, + D*B, MPI_C_DOUBLE_COMPLEX, MPI_SUM, - X.get_mpi_communicator()); + subspaceVectorsArray.get_mpi_communicator()); #else MPI_Allreduce(MPI_IN_PLACE, &overlapMatrixBlock[0], - symmetricOptSize*B, + D*B, MPI_DOUBLE, MPI_SUM, - X.get_mpi_communicator()); + subspaceVectorsArray.get_mpi_communicator()); #endif + //Copying only the lower triangular part to the ScaLAPACK overlap matrix if (processGrid->is_process_active()) for(unsigned int i = 0; i ::iterator it= globalToLocalRowIdMap.find(j); if(it!=globalToLocalRowIdMap.end()) overlapMatPar.local_el(it->second, localColumnId) - =overlapMatrixBlock[i*symmetricOptSize+j-ivec]; + =overlapMatrixBlock[i*D+j-ivec]; } } }//band parallelization }//block loop + //accumulate contribution from all band parallelization groups linearAlgebraOperations::internal::sumAcrossInterCommScaLAPACKMat (processGrid, overlapMatPar, @@ -247,7 +279,7 @@ namespace dftfe template void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, - const unsigned int numberSubspaceVectors, + const unsigned int N, const unsigned int numberCoreVectors, dealii::parallel::distributed::Vector & nonCoreVectorsArray, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, @@ -259,7 +291,7 @@ namespace dftfe #ifdef USE_COMPLEX AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - const unsigned int numLocalDofs = subspaceVectorsArray.local_size()/numberSubspaceVectors; + const unsigned int numLocalDofs = subspaceVectorsArray.local_size()/N; const unsigned int maxNumLocalDofs=dealii::Utilities::MPI::max(numLocalDofs, subspaceVectorsArray.get_mpi_communicator()); @@ -270,7 +302,7 @@ namespace dftfe const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); std::vector bandGroupLowHighPlusOneIndices; dftUtils::createBandParallelizationIndices(interBandGroupComm, - numberSubspaceVectors, + N, bandGroupLowHighPlusOneIndices); std::map globalToLocalColumnIdMap; @@ -280,13 +312,36 @@ namespace dftfe globalToLocalRowIdMap, globalToLocalColumnIdMap); - + /* + * Q*X^{T} is done in a blocked approach for memory optimization: + * Sum_{dof_blocks} Sum_{vector_blocks} QBvec*XBdof^{T}. + * The result of each QBvec*XBdof^{T} + * has a much smaller memory compared to Q*X^{T}. + * X^{T} (denoted by subspaceVectorsArray in the code with column major format storage) + * is a matrix with size (N x MLoc). + * N is denoted by numberWaveFunctions in the code. + * MLoc, which is number of local dofs is denoted by numLocalDofs in the code. + * QBvec is a matrix of size (BVec x N) + * XBdof is a matrix of size (N x BDof) + * A further optimization is done to reduce floating point operations when + * Q is a lower triangular matrix in the subspace rotation step of PGS: + * Then it suffices to compute only the multiplication of lower + * triangular part of Q with X^{T}. To exploit this, we do + * Sum_{dof_blocks} Sum_{vector_blocks} QBvecTrunc*XBdofTrunc^{T}. + * where QBvecTrunc is a (BVec x D) sub matrix of QBvec with the column indices + * ranging from O to D-1, where D=jvec(lowest global index of QBvec) + BVec. + * XBdofTrunc is a (D x BDof) sub matrix of XBdof with the row indices + * ranging from 0 to D-1. + * X^{T} is directly updated from + * the Sum_{vector_blocks} QBvecTrunc*XBdofTrunc^{T} result + * for each {dof_block}. + */ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); const unsigned int dofsBlockSize=dftParameters::subspaceRotDofsBlockSize; - std::vector rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); - std::vector rotatedVectorsMatBlock(numberSubspaceVectors*dofsBlockSize,0.0); + std::vector rotationMatBlock(vectorsBlockSize*N,0.0); + std::vector rotatedVectorsMatBlock(N*dofsBlockSize,0.0); std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); if (dftParameters::verbosity>=4) @@ -301,28 +356,31 @@ namespace dftfe BDof = std::min(dofsBlockSize, numLocalDofs-idof); std::fill(rotatedVectorsMatBlock.begin(),rotatedVectorsMatBlock.end(),0.); - for (unsigned int jvec = 0; jvec < numberSubspaceVectors; jvec += vectorsBlockSize) + for (unsigned int jvec = 0; jvec < N; jvec += vectorsBlockSize) { // Correct block dimensions if block "goes off edge of" the matrix - const unsigned int BVec = std::min(vectorsBlockSize, numberSubspaceVectors-jvec); + const unsigned int BVec = std::min(vectorsBlockSize, N-jvec); - const unsigned int nonZeroVectorsSize=isRotationMatLowerTria? + const unsigned int D=isRotationMatLowerTria? (jvec+BVec) - :numberSubspaceVectors; + :N; + // If one plus the ending index of a block lies within a band parallelization group + // do computations for that block within the band group, otherwise skip that + // block. This is only activated if NPBAND>1 if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { const char transA = 'N',transB = 'N'; const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - //std::vector rotationMatBlock(vectorsBlockSize*nonZeroVectorsSize,0.0); std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); + //Extract QBVec from parallel ScaLAPACK matrix Q if (rotationMatTranspose) { if (processGrid->is_process_active()) - for (unsigned int i = 0; i is_process_active()) - for (unsigned int i = 0; i 1) { if (numberCoreVectors!=0) { - const unsigned int numberNonCoreVectors=numberSubspaceVectors-numberCoreVectors; + const unsigned int numberNonCoreVectors=N-numberCoreVectors; for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors +iWave) - =subspaceVectorsArray.local_element(iNode*numberSubspaceVectors + =subspaceVectorsArray.local_element(iNode*N +numberCoreVectors +iWave); @@ -435,7 +492,7 @@ namespace dftfe for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) subspaceVectorsArray.local_element - (iNode*numberSubspaceVectors + (iNode*N +numberCoreVectors +iWave) =nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors+iWave); @@ -445,7 +502,7 @@ namespace dftfe { MPI_Allreduce(MPI_IN_PLACE, subspaceVectorsArray.begin(), - numberSubspaceVectors*numLocalDofs, + N*numLocalDofs, MPI_DOUBLE, MPI_SUM, interBandGroupComm); @@ -464,14 +521,14 @@ namespace dftfe template void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors, + const unsigned int N, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, dealii::ScaLAPACKMatrix & overlapMatPar); template void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, - const unsigned int numberSubspaceVectors, + const unsigned int N, const unsigned int numberCoreVectors, dealii::parallel::distributed::Vector & nonCoreVectorsArray, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, From dfe05122f5aeb9277b061c520a7a03d26dfebcf2 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Sun, 19 Aug 2018 23:49:44 -0400 Subject: [PATCH 06/59] Minor elaboration of code comments. --- src/dftOperator/kohnShamDFTOperator.cc | 1 + src/linAlg/linearAlgebraOperationsInternal.cc | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/dftOperator/kohnShamDFTOperator.cc b/src/dftOperator/kohnShamDFTOperator.cc index 8785e6364..c48adb970 100644 --- a/src/dftOperator/kohnShamDFTOperator.cc +++ b/src/dftOperator/kohnShamDFTOperator.cc @@ -1004,6 +1004,7 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map Date: Mon, 20 Aug 2018 02:03:20 -0400 Subject: [PATCH 07/59] Reworked arguments of various classes to remove dealii partitioner memory by storing as STL vector wherever required. This helps reducing memory and improve scalability --- ...hevOrthogonalizedSubspaceIterationSolver.h | 2 +- include/linearAlgebraOperations.h | 16 +- include/linearAlgebraOperationsInternal.h | 25 +- src/dft/density.cc | 2 +- src/dft/kohnShamEigenSolve.cc | 10 +- src/linAlg/linearAlgebraOperationsInternal.cc | 825 +++++++++++------- src/linAlg/linearAlgebraOperationsOpt.cc | 92 +- src/linAlg/pseudoGS.cc | 52 +- ...evOrthogonalizedSubspaceIterationSolver.cc | 102 ++- src/symmetry/symmetrizeRho.cc | 12 +- 10 files changed, 702 insertions(+), 436 deletions(-) diff --git a/include/chebyshevOrthogonalizedSubspaceIterationSolver.h b/include/chebyshevOrthogonalizedSubspaceIterationSolver.h index 9067e160f..69b217843 100644 --- a/include/chebyshevOrthogonalizedSubspaceIterationSolver.h +++ b/include/chebyshevOrthogonalizedSubspaceIterationSolver.h @@ -54,7 +54,7 @@ namespace dftfe{ * @brief Solve a generalized eigen problem. */ eigenSolverClass::ReturnValueType solve(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & eigenVectorsFlattened, + std::vector & eigenVectorsFlattened, vectorType & tempEigenVec, const unsigned int totalNumberWaveFunctions, std::vector & eigenValues, diff --git a/include/linearAlgebraOperations.h b/include/linearAlgebraOperations.h index 65ce8cb73..bb142a46e 100644 --- a/include/linearAlgebraOperations.h +++ b/include/linearAlgebraOperations.h @@ -152,10 +152,12 @@ namespace dftfe * @param[in,out] X Given subspace as flattened array of multi-vectors. * In-place update of the given subspace * @param[in] numberComponents Number of multiple-fields + * @param[in] mpiComm global communicator */ template - void gramSchmidtOrthogonalization(dealii::parallel::distributed::Vector & X, - const unsigned int numberComponents); + void gramSchmidtOrthogonalization(std::vector & X, + const unsigned int numberComponents, + const MPI_Comm & mpiComm); /** @brief Orthogonalize given subspace using Lowden orthogonalization for double data-type @@ -164,11 +166,12 @@ namespace dftfe * @param[in,out] X Given subspace as flattened array of multi-vectors. * In-place update of the given subspace * @param[in] numberComponents Number of multiple-fields - * + * @param[in] mpiComm global communicator * @return flag indicating success/failure. 1 for failure, 0 for success */ - unsigned int lowdenOrthogonalization(dealii::parallel::distributed::Vector & X, - const unsigned int numberComponents); + unsigned int lowdenOrthogonalization(std::vector & X, + const unsigned int numberComponents, + const MPI_Comm & mpiComm); /** @brief Orthogonalize given subspace using Pseudo-Gram-Schmidt orthogonalization @@ -188,10 +191,11 @@ namespace dftfe * @return flag indicating success/failure. 1 for failure, 0 for success */ template - unsigned int pseudoGramSchmidtOrthogonalization(dealii::parallel::distributed::Vector & X, + unsigned int pseudoGramSchmidtOrthogonalization(std::vector & X, const unsigned int numberComponents, const MPI_Comm &interBandGroupComm, const unsigned int numberCoreVectors, + const MPI_Comm &mpiComm, dealii::parallel::distributed::Vector & nonCoreVectorsArray); /** @brief Compute Rayleigh-Ritz projection diff --git a/include/linearAlgebraOperationsInternal.h b/include/linearAlgebraOperationsInternal.h index cf2662d91..d7b362aac 100644 --- a/include/linearAlgebraOperationsInternal.h +++ b/include/linearAlgebraOperationsInternal.h @@ -80,12 +80,34 @@ namespace dftfe * */ template - void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & X, + void fillParallelOverlapMatrix(const std::vector & X, const unsigned int numberVectors, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, dealii::ScaLAPACKMatrix & overlapMatPar); + /** @brief Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray in the column major + * format. Q is rotationMatPar. + * + * The subspace rotation inside this function is done in a blocked approach + * which avoids creation of full serial rotation matrix memory, and also avoids creation + * of another full subspaceVectorsArray memory. + * + */ + template + void subspaceRotation(std::vector & subspaceVectorsArray, + const unsigned int numberSubspaceVectors, + const unsigned int numberCoreVectors, + dealii::parallel::distributed::Vector & nonCoreVectorsArray, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + const dealii::ScaLAPACKMatrix & rotationMatPar, + const bool rotationMatTranspose=false, + const bool isRotationMatLowerTria=false); + + /** @brief Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray in the column major * format. Q is rotationMatPar. * @@ -105,6 +127,7 @@ namespace dftfe const bool rotationMatTranspose=false, const bool isRotationMatLowerTria=false); + #endif } } diff --git a/src/dft/density.cc b/src/dft/density.cc index cfd819ade..56cbb72d7 100644 --- a/src/dft/density.cc +++ b/src/dft/density.cc @@ -107,7 +107,7 @@ void dftClass::compute_rhoOut() currentBlockSize, eigenVectorsFlattenedArrayBlock); - constraintsNoneDataInfo.precomputeMaps(matrix_free_data.get_partitioner(), + constraintsNoneDataInfo.precomputeMaps(matrix_free_data.get_vector_partitioner(), eigenVectorsFlattenedArrayBlock.get_partitioner(), currentBlockSize); diff --git a/src/dft/kohnShamEigenSolve.cc b/src/dft/kohnShamEigenSolve.cc index 4d0de5158..f85d1eecd 100644 --- a/src/dft/kohnShamEigenSolve.cc +++ b/src/dft/kohnShamEigenSolve.cc @@ -46,7 +46,7 @@ namespace internal //constraintsNoneDataInfo.precomputeMaps(singleComponentPartitioner, // fieldsArrayFlattened.get_partitioner(), // numberFields); - const unsigned int numberDofs = fieldsArrayFlattened.local_size()/numberFields; + const unsigned int numberDofs = fieldsArrayFlattened.size()/numberFields; const unsigned int inc = 1; for(unsigned int i = 0; i < numberDofs; ++i) @@ -56,13 +56,13 @@ namespace internal diagonal.local_element(localProc_dof_indicesReal[i]); zdscal_(&numberFields, &scalingCoeff, - fieldsArrayFlattened.begin()+i*numberFields, + fieldsArrayFlattened[i*numberFields], &inc); #else double scalingCoeff = diagonal.local_element(i); dscal_(&numberFields, &scalingCoeff, - fieldsArrayFlattened.begin()+i*numberFields, + &fieldsArrayFlattened[i*numberFields], &inc); #endif } @@ -99,7 +99,7 @@ void dftClass::kohnShamEigenSpaceCompute(const unsigned int spinType, matrix_free_data.get_vector_partitioner(), numEigenValues, localProc_dof_indicesReal, - d_eigenVectorsFlattened[(1+dftParameters::spinPolarized)*kPointIndex+spinType], + d_eigenVectorsFlattenedSTL[(1+dftParameters::spinPolarized)*kPointIndex+spinType], constraintsNoneDataInfo); std::vector eigenValuesTemp(isSpectrumSplit?numEigenValuesRR @@ -123,7 +123,7 @@ void dftClass::kohnShamEigenSpaceCompute(const unsigned int spinType, matrix_free_data.get_vector_partitioner(), numEigenValues, localProc_dof_indicesReal, - d_eigenVectorsFlattened[(1+dftParameters::spinPolarized)*kPointIndex+spinType], + d_eigenVectorsFlattenedSTL[(1+dftParameters::spinPolarized)*kPointIndex+spinType], constraintsNoneDataInfo); // diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index 024b4298a..1be915d53 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -34,361 +34,548 @@ namespace dftfe namespace internal { #ifdef DEAL_II_WITH_SCALAPACK - void createProcessGridSquareMatrix(const MPI_Comm & mpi_communicator, - const unsigned size, - std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid) - { - const unsigned int numberProcs = dealii::Utilities::MPI::n_mpi_processes(mpi_communicator); - - //Rule of thumb from http://netlib.org/scalapack/slug/node106.html#SECTION04511000000000000000 - const unsigned int rowProcs=dftParameters::scalapackParalProcs==0? - std::min(std::floor(std::sqrt(numberProcs)), - std::ceil((double)size/(double)(1000))): - std::min((unsigned int)std::floor(std::sqrt(numberProcs)), - dftParameters::scalapackParalProcs); - if(dftParameters::verbosity>=4) - { - dealii::ConditionalOStream pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)); - pcout<<"Scalapack Matrix created, row procs: "<< rowProcs< & processGrid) + { + const unsigned int numberProcs = dealii::Utilities::MPI::n_mpi_processes(mpi_communicator); + + //Rule of thumb from http://netlib.org/scalapack/slug/node106.html#SECTION04511000000000000000 + const unsigned int rowProcs=dftParameters::scalapackParalProcs==0? + std::min(std::floor(std::sqrt(numberProcs)), + std::ceil((double)size/(double)(1000))): + std::min((unsigned int)std::floor(std::sqrt(numberProcs)), + dftParameters::scalapackParalProcs); + if(dftParameters::verbosity>=4) + { + dealii::ConditionalOStream pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)); + pcout<<"Scalapack Matrix created, row procs: "<< rowProcs<(mpi_communicator, - rowProcs, - rowProcs); - } + processGrid=std::make_shared(mpi_communicator, + rowProcs, + rowProcs); + } - template - void createGlobalToLocalIdMapsScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const dealii::ScaLAPACKMatrix & mat, - std::map & globalToLocalRowIdMap, - std::map & globalToLocalColumnIdMap) - { + template + void createGlobalToLocalIdMapsScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const dealii::ScaLAPACKMatrix & mat, + std::map & globalToLocalRowIdMap, + std::map & globalToLocalColumnIdMap) + { #ifdef USE_COMPLEX - AssertThrow(false,dftUtils::ExcNotImplementedYet()); + AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - globalToLocalRowIdMap.clear(); - globalToLocalColumnIdMap.clear(); - if (processGrid->is_process_active()) + globalToLocalRowIdMap.clear(); + globalToLocalColumnIdMap.clear(); + if (processGrid->is_process_active()) { - for (unsigned int i = 0; i < mat.local_m(); ++i) - globalToLocalRowIdMap[mat.global_row(i)]=i; + for (unsigned int i = 0; i < mat.local_m(); ++i) + globalToLocalRowIdMap[mat.global_row(i)]=i; - for (unsigned int j = 0; j < mat.local_n(); ++j) - globalToLocalColumnIdMap[mat.global_column(j)]=j; + for (unsigned int j = 0; j < mat.local_n(); ++j) + globalToLocalColumnIdMap[mat.global_column(j)]=j; } #endif - } + } - template - void sumAcrossInterCommScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - dealii::ScaLAPACKMatrix & mat, - const MPI_Comm &interComm) - { + template + void sumAcrossInterCommScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + dealii::ScaLAPACKMatrix & mat, + const MPI_Comm &interComm) + { #ifdef USE_COMPLEX - AssertThrow(false,dftUtils::ExcNotImplementedYet()); + AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - //sum across all inter communicator groups - if (processGrid->is_process_active() && - dealii::Utilities::MPI::n_mpi_processes(interComm)>1) + //sum across all inter communicator groups + if (processGrid->is_process_active() && + dealii::Utilities::MPI::n_mpi_processes(interComm)>1) { - MPI_Allreduce(MPI_IN_PLACE, - &mat.local_el(0,0), - mat.local_m()*mat.local_n(), - MPI_DOUBLE, - MPI_SUM, - interComm); + MPI_Allreduce(MPI_IN_PLACE, + &mat.local_el(0,0), + mat.local_m()*mat.local_n(), + MPI_DOUBLE, + MPI_SUM, + interComm); - } + } #endif - } - - template - void broadcastAcrossInterCommScaLAPACKMat - (const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - dealii::ScaLAPACKMatrix & mat, - const MPI_Comm &interComm, - const unsigned int broadcastRoot) - { + } + + template + void broadcastAcrossInterCommScaLAPACKMat + (const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + dealii::ScaLAPACKMatrix & mat, + const MPI_Comm &interComm, + const unsigned int broadcastRoot) + { #ifdef USE_COMPLEX - AssertThrow(false,dftUtils::ExcNotImplementedYet()); + AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - //sum across all inter communicator groups - if (processGrid->is_process_active() && - dealii::Utilities::MPI::n_mpi_processes(interComm)>1) + //sum across all inter communicator groups + if (processGrid->is_process_active() && + dealii::Utilities::MPI::n_mpi_processes(interComm)>1) { - MPI_Bcast(&mat.local_el(0,0), - mat.local_m()*mat.local_n(), - MPI_DOUBLE, - broadcastRoot, - interComm); + MPI_Bcast(&mat.local_el(0,0), + mat.local_m()*mat.local_n(), + MPI_DOUBLE, + broadcastRoot, + interComm); - } + } #endif - } - - template - void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors, - const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const MPI_Comm &interBandGroupComm, - dealii::ScaLAPACKMatrix & overlapMatPar) - { + } + + template + void fillParallelOverlapMatrix(const std::vector & X, + const unsigned int numberVectors, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + dealii::ScaLAPACKMatrix & overlapMatPar) + { #ifdef USE_COMPLEX - AssertThrow(false,dftUtils::ExcNotImplementedYet()); + AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - const unsigned int numLocalDofs = X.local_size()/numberVectors; - - //band group parallelization data structures - const unsigned int numberBandGroups= - dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); - const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); - std::vector bandGroupLowHighPlusOneIndices; - dftUtils::createBandParallelizationIndices(interBandGroupComm, - numberVectors, - bandGroupLowHighPlusOneIndices); - - //get global to local index maps for Scalapack matrix - std::map globalToLocalColumnIdMap; - std::map globalToLocalRowIdMap; - internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, - overlapMatPar, - globalToLocalRowIdMap, - globalToLocalColumnIdMap); - - const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, - bandGroupLowHighPlusOneIndices[1]); - - std::vector overlapMatrixBlock(numberVectors*vectorsBlockSize,0.0); - std::vector blockVectorsMatrix(numLocalDofs*vectorsBlockSize,0.0); - - for (unsigned int ivec = 0; ivec < numberVectors; ivec += vectorsBlockSize) + const unsigned int numLocalDofs = X.size()/numberVectors; + + //band group parallelization data structures + const unsigned int numberBandGroups= + dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); + const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); + std::vector bandGroupLowHighPlusOneIndices; + dftUtils::createBandParallelizationIndices(interBandGroupComm, + numberVectors, + bandGroupLowHighPlusOneIndices); + + //get global to local index maps for Scalapack matrix + std::map globalToLocalColumnIdMap; + std::map globalToLocalRowIdMap; + internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, + overlapMatPar, + globalToLocalRowIdMap, + globalToLocalColumnIdMap); + + const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, + bandGroupLowHighPlusOneIndices[1]); + + std::vector overlapMatrixBlock(numberVectors*vectorsBlockSize,0.0); + std::vector blockVectorsMatrix(numLocalDofs*vectorsBlockSize,0.0); + + for (unsigned int ivec = 0; ivec < numberVectors; ivec += vectorsBlockSize) { - // Correct block dimensions if block "goes off edge of" the matrix - const unsigned int B = std::min(vectorsBlockSize, numberVectors-ivec); + // Correct block dimensions if block "goes off edge of" the matrix + const unsigned int B = std::min(vectorsBlockSize, numberVectors-ivec); - if ((ivec+B)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && - (ivec+B)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) + if ((ivec+B)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && + (ivec+B)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { - const char transA = 'N',transB = 'N'; - const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - - std::fill(overlapMatrixBlock.begin(),overlapMatrixBlock.end(),0.); - - for (unsigned int i = 0; i is_process_active()) - for(unsigned int i = 0; i is_process_active()) + for(unsigned int i = 0; i ::iterator it= - globalToLocalRowIdMap.find(j); - if(it!=globalToLocalRowIdMap.end()) - overlapMatPar.local_el(it->second, - localColumnId) - =overlapMatrixBlock[i*numberVectors+j]; - } + std::map::iterator it= + globalToLocalRowIdMap.find(j); + if(it!=globalToLocalRowIdMap.end()) + overlapMatPar.local_el(it->second, + localColumnId) + =overlapMatrixBlock[i*numberVectors+j]; } - }//band parallelization + } + }//band parallelization }//block loop - linearAlgebraOperations::internal::sumAcrossInterCommScaLAPACKMat - (processGrid, - overlapMatPar, - interBandGroupComm); + linearAlgebraOperations::internal::sumAcrossInterCommScaLAPACKMat + (processGrid, + overlapMatPar, + interBandGroupComm); #endif - } + } + + + template + void subspaceRotation(std::vector & subspaceVectorsArray, + const unsigned int numberSubspaceVectors, + const unsigned int numberCoreVectors, + dealii::parallel::distributed::Vector & nonCoreVectorsArray, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + const dealii::ScaLAPACKMatrix & rotationMatPar, + const bool rotationMatTranspose, + const bool isRotationMatLowerTria) + { +#ifdef USE_COMPLEX + AssertThrow(false,dftUtils::ExcNotImplementedYet()); +#else + const unsigned int numLocalDofs = subspaceVectorsArray.size()/numberSubspaceVectors; + const unsigned int maxNumLocalDofs=dealii::Utilities::MPI::max(numLocalDofs, + mpiComm); - template - void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, - const unsigned int numberSubspaceVectors, - const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & nonCoreVectorsArray, - const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const MPI_Comm &interBandGroupComm, - const dealii::ScaLAPACKMatrix & rotationMatPar, - const bool rotationMatTranspose, - const bool isRotationMatLowerTria) - { + //band group parallelization data structures + const unsigned int numberBandGroups= + dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); + const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); + std::vector bandGroupLowHighPlusOneIndices; + dftUtils::createBandParallelizationIndices(interBandGroupComm, + numberSubspaceVectors, + bandGroupLowHighPlusOneIndices); + + std::map globalToLocalColumnIdMap; + std::map globalToLocalRowIdMap; + internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, + rotationMatPar, + globalToLocalRowIdMap, + globalToLocalColumnIdMap); + + + const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, + bandGroupLowHighPlusOneIndices[1]); + const unsigned int dofsBlockSize=dftParameters::subspaceRotDofsBlockSize; + + std::vector rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); + std::vector rotatedVectorsMatBlock(numberSubspaceVectors*dofsBlockSize,0.0); + std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); + + if (dftParameters::verbosity>=4) + dftUtils::printCurrentMemoryUsage(mpiComm, + "Inside Blocked susbpace rotation"); + + for (unsigned int idof = 0; idof < maxNumLocalDofs; idof += dofsBlockSize) + { + // Correct block dimensions if block "goes off edge of" the matrix + unsigned int BDof=0; + if (numLocalDofs>=idof) + BDof = std::min(dofsBlockSize, numLocalDofs-idof); + + std::fill(rotatedVectorsMatBlock.begin(),rotatedVectorsMatBlock.end(),0.); + for (unsigned int jvec = 0; jvec < numberSubspaceVectors; jvec += vectorsBlockSize) + { + // Correct block dimensions if block "goes off edge of" the matrix + const unsigned int BVec = std::min(vectorsBlockSize, numberSubspaceVectors-jvec); + + const unsigned int nonZeroVectorsSize=isRotationMatLowerTria? + (jvec+BVec) + :numberSubspaceVectors; + + if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && + (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) + { + const char transA = 'N',transB = 'N'; + const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; + + std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); + + if (rotationMatTranspose) + { + if (processGrid->is_process_active()) + for (unsigned int i = 0; i ::iterator it= + globalToLocalColumnIdMap.find(j+jvec); + if(it!=globalToLocalColumnIdMap.end()) + rotationMatBlock[i*BVec+j]= + rotationMatPar.local_el(localRowId, + it->second); + } + } + } + else + { + if (processGrid->is_process_active()) + for (unsigned int i = 0; i ::iterator it= + globalToLocalRowIdMap.find(j+jvec); + if (it!=globalToLocalRowIdMap.end()) + rotationMatBlock[i*BVec+j]= + rotationMatPar.local_el(it->second, + localColumnId); + } + } + } + + dealii::Utilities::MPI::sum(rotationMatBlock, + mpiComm, + rotationMatBlock); + if (BDof!=0) + { + + dgemm_(&transA, + &transB, + &BVec, + &BDof, + &nonZeroVectorsSize, + &scalarCoeffAlpha, + &rotationMatBlock[0], + &BVec, + &subspaceVectorsArray[idof*numberSubspaceVectors], + &numberSubspaceVectors, + &scalarCoeffBeta, + &rotatedVectorsMatBlockTemp[0], + &BVec); + + for (unsigned int i = 0; i 1) + { + if (numberCoreVectors!=0) + { + + const unsigned int numberNonCoreVectors=numberSubspaceVectors-numberCoreVectors; + for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) + for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) + nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors +iWave) + =subspaceVectorsArray[iNode*numberSubspaceVectors+numberCoreVectors+iWave]; + + MPI_Allreduce(MPI_IN_PLACE, + nonCoreVectorsArray.begin(), + numberNonCoreVectors*numLocalDofs, + MPI_DOUBLE, + MPI_SUM, + interBandGroupComm); + + for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) + for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) + subspaceVectorsArray[iNode*numberSubspaceVectors+numberCoreVectors+iWave] + =nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors+iWave); + + } + else + { + MPI_Allreduce(MPI_IN_PLACE, + &subspaceVectorsArray[0], + numberSubspaceVectors*numLocalDofs, + MPI_DOUBLE, + MPI_SUM, + interBandGroupComm); + } + } +#endif + } + + template + void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, + const unsigned int numberSubspaceVectors, + const unsigned int numberCoreVectors, + dealii::parallel::distributed::Vector & nonCoreVectorsArray, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const dealii::ScaLAPACKMatrix & rotationMatPar, + const bool rotationMatTranspose, + const bool isRotationMatLowerTria) + { #ifdef USE_COMPLEX - AssertThrow(false,dftUtils::ExcNotImplementedYet()); + AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - const unsigned int numLocalDofs = subspaceVectorsArray.local_size()/numberSubspaceVectors; + const unsigned int numLocalDofs = subspaceVectorsArray.local_size()/numberSubspaceVectors; - const unsigned int maxNumLocalDofs=dealii::Utilities::MPI::max(numLocalDofs, - subspaceVectorsArray.get_mpi_communicator()); + const unsigned int maxNumLocalDofs=dealii::Utilities::MPI::max(numLocalDofs, + subspaceVectorsArray.get_mpi_communicator()); - //band group parallelization data structures - const unsigned int numberBandGroups= - dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); - const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); - std::vector bandGroupLowHighPlusOneIndices; - dftUtils::createBandParallelizationIndices(interBandGroupComm, - numberSubspaceVectors, - bandGroupLowHighPlusOneIndices); + //band group parallelization data structures + const unsigned int numberBandGroups= + dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); + const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); + std::vector bandGroupLowHighPlusOneIndices; + dftUtils::createBandParallelizationIndices(interBandGroupComm, + numberSubspaceVectors, + bandGroupLowHighPlusOneIndices); - std::map globalToLocalColumnIdMap; - std::map globalToLocalRowIdMap; - internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, - rotationMatPar, - globalToLocalRowIdMap, - globalToLocalColumnIdMap); + std::map globalToLocalColumnIdMap; + std::map globalToLocalRowIdMap; + internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, + rotationMatPar, + globalToLocalRowIdMap, + globalToLocalColumnIdMap); - const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, - bandGroupLowHighPlusOneIndices[1]); - const unsigned int dofsBlockSize=dftParameters::subspaceRotDofsBlockSize; + const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, + bandGroupLowHighPlusOneIndices[1]); + const unsigned int dofsBlockSize=dftParameters::subspaceRotDofsBlockSize; - std::vector rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); - std::vector rotatedVectorsMatBlock(numberSubspaceVectors*dofsBlockSize,0.0); - std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); + std::vector rotationMatBlock(vectorsBlockSize*numberSubspaceVectors,0.0); + std::vector rotatedVectorsMatBlock(numberSubspaceVectors*dofsBlockSize,0.0); + std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); - if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(subspaceVectorsArray.get_mpi_communicator(), - "Inside Blocked susbpace rotation"); + if (dftParameters::verbosity>=4) + dftUtils::printCurrentMemoryUsage(subspaceVectorsArray.get_mpi_communicator(), + "Inside Blocked susbpace rotation"); - for (unsigned int idof = 0; idof < maxNumLocalDofs; idof += dofsBlockSize) + for (unsigned int idof = 0; idof < maxNumLocalDofs; idof += dofsBlockSize) { - // Correct block dimensions if block "goes off edge of" the matrix - unsigned int BDof=0; - if (numLocalDofs>=idof) - BDof = std::min(dofsBlockSize, numLocalDofs-idof); + // Correct block dimensions if block "goes off edge of" the matrix + unsigned int BDof=0; + if (numLocalDofs>=idof) + BDof = std::min(dofsBlockSize, numLocalDofs-idof); - std::fill(rotatedVectorsMatBlock.begin(),rotatedVectorsMatBlock.end(),0.); - for (unsigned int jvec = 0; jvec < numberSubspaceVectors; jvec += vectorsBlockSize) + std::fill(rotatedVectorsMatBlock.begin(),rotatedVectorsMatBlock.end(),0.); + for (unsigned int jvec = 0; jvec < numberSubspaceVectors; jvec += vectorsBlockSize) { - // Correct block dimensions if block "goes off edge of" the matrix - const unsigned int BVec = std::min(vectorsBlockSize, numberSubspaceVectors-jvec); + // Correct block dimensions if block "goes off edge of" the matrix + const unsigned int BVec = std::min(vectorsBlockSize, numberSubspaceVectors-jvec); - const unsigned int nonZeroVectorsSize=isRotationMatLowerTria? - (jvec+BVec) - :numberSubspaceVectors; + const unsigned int nonZeroVectorsSize=isRotationMatLowerTria? + (jvec+BVec) + :numberSubspaceVectors; - if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && - (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) + if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && + (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { - const char transA = 'N',transB = 'N'; - const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; + const char transA = 'N',transB = 'N'; + const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); + std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); - if (rotationMatTranspose) + if (rotationMatTranspose) { - if (processGrid->is_process_active()) - for (unsigned int i = 0; i is_process_active()) + for (unsigned int i = 0; i ::iterator it= - globalToLocalColumnIdMap.find(j+jvec); - if(it!=globalToLocalColumnIdMap.end()) - rotationMatBlock[i*BVec+j]= - rotationMatPar.local_el(localRowId, - it->second); - } + std::map::iterator it= + globalToLocalColumnIdMap.find(j+jvec); + if(it!=globalToLocalColumnIdMap.end()) + rotationMatBlock[i*BVec+j]= + rotationMatPar.local_el(localRowId, + it->second); } + } } - else + else { - if (processGrid->is_process_active()) - for (unsigned int i = 0; i is_process_active()) + for (unsigned int i = 0; i ::iterator it= - globalToLocalRowIdMap.find(j+jvec); - if (it!=globalToLocalRowIdMap.end()) - rotationMatBlock[i*BVec+j]= - rotationMatPar.local_el(it->second, - localColumnId); - } + std::map::iterator it= + globalToLocalRowIdMap.find(j+jvec); + if (it!=globalToLocalRowIdMap.end()) + rotationMatBlock[i*BVec+j]= + rotationMatPar.local_el(it->second, + localColumnId); } + } } - dealii::Utilities::MPI::sum(rotationMatBlock, - subspaceVectorsArray.get_mpi_communicator(), - rotationMatBlock); - if (BDof!=0) + dealii::Utilities::MPI::sum(rotationMatBlock, + subspaceVectorsArray.get_mpi_communicator(), + rotationMatBlock); + if (BDof!=0) { - dgemm_(&transA, - &transB, - &BVec, - &BDof, - &nonZeroVectorsSize, - &scalarCoeffAlpha, - &rotationMatBlock[0], - &BVec, - subspaceVectorsArray.begin()+idof*numberSubspaceVectors, - &numberSubspaceVectors, - &scalarCoeffBeta, - &rotatedVectorsMatBlockTemp[0], - &BVec); - - for (unsigned int i = 0; i 1) + if (numberBandGroups>1) { if (numberCoreVectors!=0) - { + { const unsigned int numberNonCoreVectors=numberSubspaceVectors-numberCoreVectors; for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) - for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) - nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors +iWave) - =subspaceVectorsArray.local_element(iNode*numberSubspaceVectors - +numberCoreVectors - +iWave); + for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) + nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors +iWave) + =subspaceVectorsArray.local_element(iNode*numberSubspaceVectors+numberCoreVectors+iWave); MPI_Allreduce(MPI_IN_PLACE, nonCoreVectorsArray.begin(), @@ -398,43 +585,56 @@ namespace dftfe interBandGroupComm); for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) - for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) - subspaceVectorsArray.local_element - (iNode*numberSubspaceVectors - +numberCoreVectors - +iWave) - =nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors+iWave); - - } + for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) + subspaceVectorsArray.local_element(iNode*numberSubspaceVectors+numberCoreVectors+iWave) + =nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors+iWave); + + } else - { + { MPI_Allreduce(MPI_IN_PLACE, subspaceVectorsArray.begin(), numberSubspaceVectors*numLocalDofs, MPI_DOUBLE, MPI_SUM, interBandGroupComm); - } + } } #endif - } + } + #endif #ifdef DEAL_II_WITH_SCALAPACK - template - void createGlobalToLocalIdMapsScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const dealii::ScaLAPACKMatrix & mat, - std::map & globalToLocalRowIdMap, - std::map & globalToLocalColumnIdMap); - - template - void fillParallelOverlapMatrix(const dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors, - const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const MPI_Comm &interBandGroupComm, - dealii::ScaLAPACKMatrix & overlapMatPar); - - template + template + void createGlobalToLocalIdMapsScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const dealii::ScaLAPACKMatrix & mat, + std::map & globalToLocalRowIdMap, + std::map & globalToLocalColumnIdMap); + + template + void fillParallelOverlapMatrix(const std::vector & X, + const unsigned int numberVectors, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + dealii::ScaLAPACKMatrix & overlapMatPar); + + template + void subspaceRotation(std::vector & subspaceVectorsArray, + const unsigned int numberSubspaceVectors, + const unsigned int numberCoreVectors, + dealii::parallel::distributed::Vector & nonCoreVectorsArray, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + const dealii::ScaLAPACKMatrix & rotationMatPar, + const bool rotationMatTranpose, + const bool isRotationMatLowerTria); + + + + template void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, const unsigned int numberSubspaceVectors, const unsigned int numberCoreVectors, @@ -445,16 +645,17 @@ namespace dftfe const bool rotationMatTranpose, const bool isRotationMatLowerTria); - template - void sumAcrossInterCommScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - dealii::ScaLAPACKMatrix & mat, - const MPI_Comm &interComm); - template - void broadcastAcrossInterCommScaLAPACKMat - (const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - dealii::ScaLAPACKMatrix & mat, - const MPI_Comm &interComm, - const unsigned int broadcastRoot); + + template + void sumAcrossInterCommScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + dealii::ScaLAPACKMatrix & mat, + const MPI_Comm &interComm); + template + void broadcastAcrossInterCommScaLAPACKMat + (const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + dealii::ScaLAPACKMatrix & mat, + const MPI_Comm &interComm, + const unsigned int broadcastRoot); #endif } } diff --git a/src/linAlg/linearAlgebraOperationsOpt.cc b/src/linAlg/linearAlgebraOperationsOpt.cc index 030f398f2..fcc1de0c3 100644 --- a/src/linAlg/linearAlgebraOperationsOpt.cc +++ b/src/linAlg/linearAlgebraOperationsOpt.cc @@ -350,17 +350,18 @@ namespace dftfe{ } template - void gramSchmidtOrthogonalization(dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors) + void gramSchmidtOrthogonalization(std::vector & X, + const unsigned int numberVectors, + const MPI_Comm & mpiComm) { - const unsigned int localVectorSize = X.local_size()/numberVectors; + const unsigned int localVectorSize = X.size()/numberVectors; // //Create template PETSc vector to create BV object later // Vec templateVec; - VecCreateMPI(X.get_mpi_communicator(), + VecCreateMPI(mpiComm, localVectorSize, PETSC_DETERMINE, &templateVec); @@ -371,7 +372,7 @@ namespace dftfe{ //Set BV options after creating BV object // BV columnSpaceOfVectors; - BVCreate(X.get_mpi_communicator(),&columnSpaceOfVectors); + BVCreate(mpiComm,&columnSpaceOfVectors); BVSetSizesFromVec(columnSpaceOfVectors, templateVec, numberVectors); @@ -407,7 +408,7 @@ namespace dftfe{ &v); VecSet(v,0.0); for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - data[iNode] = X.local_element(numberVectors*iNode + iColumn); + data[iNode] = X[numberVectors*iNode + iColumn]; VecSetValues(v, localVectorSize, @@ -443,7 +444,7 @@ namespace dftfe{ &pointerv1); for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - X.local_element(numberVectors*iNode + iColumn) = pointerv1[iNode]; + X[numberVectors*iNode + iColumn] = pointerv1[iNode]; VecRestoreArray(v1, &pointerv1); @@ -773,10 +774,11 @@ namespace dftfe{ #endif #ifdef USE_COMPLEX - unsigned int lowdenOrthogonalization(dealii::parallel::distributed::Vector > & X, - const unsigned int numberVectors) + unsigned int lowdenOrthogonalization(std::vector > & X, + const unsigned int numberVectors, + const MPI_Comm & mpiComm) { - const unsigned int localVectorSize = X.local_size()/numberVectors; + const unsigned int localVectorSize = X.size()/numberVectors; std::vector > overlapMatrix(numberVectors*numberVectors,0.0); // @@ -801,14 +803,16 @@ namespace dftfe{ &numberVectors, &localVectorSize, &alpha, - X.begin(), + &X[0], &numberVectors, &beta, &overlapMatrix[0], &numberVectors); - dealii::Utilities::MPI::sum(overlapMatrix, X.get_mpi_communicator(), overlapMatrix); + dealii::Utilities::MPI::sum(overlapMatrix, + mpiComm, + overlapMatrix); // //evaluate the conjugate of {S^T} to get actual overlap matrix @@ -868,7 +872,7 @@ namespace dftfe{ break; } } - nanFlag=dealii::Utilities::MPI::max(nanFlag,X.get_mpi_communicator()); + nanFlag=dealii::Utilities::MPI::max(nanFlag,mpi_comm); if (dftParameters::enableSwitchToGS && nanFlag==1) return nanFlag; @@ -919,21 +923,22 @@ namespace dftfe{ //using the column major format of blas // const char transA2 = 'T', transB2 = 'N'; - dealii::parallel::distributed::Vector > orthoNormalizedBasis; - orthoNormalizedBasis.reinit(X); + //dealii::parallel::distributed::Vector > orthoNormalizedBasis; + std::vector > orthoNormalizedBasis(X.size(),0.0); + zgemm_(&transA2, - &transB2, - &numberEigenValues, - &localVectorSize, - &numberEigenValues, - &alpha1, - &invSqrtOverlapMatrix[0], - &numberEigenValues, - X.begin(), - &numberEigenValues, - &beta1, - orthoNormalizedBasis.begin(), - &numberEigenValues); + &transB2, + &numberEigenValues, + &localVectorSize, + &numberEigenValues, + &alpha1, + &invSqrtOverlapMatrix[0], + &numberEigenValues, + &X[0], + &numberEigenValues, + &beta1, + &orthoNormalizedBasis[0], + &numberEigenValues); X = orthoNormalizedBasis; @@ -941,10 +946,11 @@ namespace dftfe{ return 0; } #else - unsigned int lowdenOrthogonalization(dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors) + unsigned int lowdenOrthogonalization(std::vector & X, + const unsigned int numberVectors, + const MPI_Comm & mpiComm) { - const unsigned int localVectorSize = X.local_size()/numberVectors; + const unsigned int localVectorSize = X.size()/numberVectors; std::vector overlapMatrix(numberVectors*numberVectors,0.0); @@ -982,14 +988,16 @@ namespace dftfe{ &numberVectors, &localVectorSize, &alpha, - X.begin(), + &X[0], &numberVectors, &beta, &overlapMatrix[0], &numberVectors); computing_timer.exit_section("local overlap matrix for lowden"); - dealii::Utilities::MPI::sum(overlapMatrix, X.get_mpi_communicator(), overlapMatrix); + dealii::Utilities::MPI::sum(overlapMatrix, + mpiComm, + overlapMatrix); std::vector eigenValuesOverlap(numberVectors); computing_timer.enter_section("eigen decomp. of overlap matrix"); @@ -1013,7 +1021,7 @@ namespace dftfe{ } } - nanFlag=dealii::Utilities::MPI::max(nanFlag,X.get_mpi_communicator()); + nanFlag=dealii::Utilities::MPI::max(nanFlag,mpiComm); if (dftParameters::enableSwitchToGS && nanFlag==1) return nanFlag; @@ -1094,8 +1102,10 @@ namespace dftfe{ //using the column major format of blas // const char transA2 = 'N', transB2 = 'N'; - dealii::parallel::distributed::Vector orthoNormalizedBasis; - orthoNormalizedBasis.reinit(X); + //dealii::parallel::distributed::Vector orthoNormalizedBasis; + //orthoNormalizedBasis.reinit(X); + std::vector orthoNormalizedBasis(X.size(),0.0); + computing_timer.enter_section("subspace rotation in lowden"); dgemm_(&transA2, &transB2, @@ -1105,10 +1115,10 @@ namespace dftfe{ &alpha, &invSqrtOverlapMatrix[0], &numberEigenValues, - X.begin(), + &X[0], &numberEigenValues, &beta, - orthoNormalizedBasis.begin(), + &orthoNormalizedBasis[0], &numberEigenValues); computing_timer.exit_section("subspace rotation in lowden"); @@ -1130,13 +1140,15 @@ namespace dftfe{ const double ); - template void gramSchmidtOrthogonalization(dealii::parallel::distributed::Vector &, - const unsigned int); + template void gramSchmidtOrthogonalization(std::vector &, + const unsigned int, + const MPI_Comm &); - template unsigned int pseudoGramSchmidtOrthogonalization(dealii::parallel::distributed::Vector &, + template unsigned int pseudoGramSchmidtOrthogonalization(std::vector &, const unsigned int, const MPI_Comm &, const unsigned int numberCoreVectors, + const MPI_Comm &mpiComm, dealii::parallel::distributed::Vector & tempNonCoreVectorsArray); template void rayleighRitz(operatorDFTClass & operatorMatrix, diff --git a/src/linAlg/pseudoGS.cc b/src/linAlg/pseudoGS.cc index 8abf4af28..c198798d8 100644 --- a/src/linAlg/pseudoGS.cc +++ b/src/linAlg/pseudoGS.cc @@ -28,13 +28,15 @@ namespace dftfe { #if(defined DEAL_II_WITH_SCALAPACK && !USE_COMPLEX) template - unsigned int pseudoGramSchmidtOrthogonalization(dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors, - const MPI_Comm &interBandGroupComm, - const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & tempNonCoreVectorsArray) + unsigned int pseudoGramSchmidtOrthogonalization(std::vector & X, + const unsigned int numberVectors, + const MPI_Comm &interBandGroupComm, + const unsigned int numberCoreVectors, + const MPI_Comm & mpiComm, + dealii::parallel::distributed::Vector & tempNonCoreVectorsArray) + { - const unsigned int numLocalDofs = X.local_size()/numberVectors; + const unsigned int numLocalDofs = X.size()/numberVectors; dealii::ConditionalOStream pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)); dealii::TimerOutput computing_timer(pcout, @@ -45,9 +47,9 @@ namespace dftfe const unsigned rowsBlockSize=std::min((unsigned int)50,numberVectors); std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> processGrid; - internal::createProcessGridSquareMatrix(X.get_mpi_communicator(), - numberVectors, - processGrid); + internal::createProcessGridSquareMatrix(mpiComm, + numberVectors, + processGrid); dealii::ScaLAPACKMatrix overlapMatPar(numberVectors, processGrid, @@ -59,6 +61,7 @@ namespace dftfe numberVectors, processGrid, interBandGroupComm, + mpiComm, overlapMatPar); computing_timer.exit_section("Fill overlap matrix for PGS"); @@ -122,7 +125,7 @@ namespace dftfe break; } - flag=dealii::Utilities::MPI::max(flag,X.get_mpi_communicator()); + flag=dealii::Utilities::MPI::max(flag,mpiComm); if (dftParameters::enableSwitchToGS && flag==1) return flag; @@ -138,6 +141,7 @@ namespace dftfe tempNonCoreVectorsArray, processGrid, interBandGroupComm, + mpiComm, LMatPar, overlapMatPropertyPostCholesky==dealii::LAPACKSupport::Property::upper_triangular?true:false, dftParameters::triMatPGSOpt?true:false); @@ -148,13 +152,14 @@ namespace dftfe } #else template - unsigned int pseudoGramSchmidtOrthogonalization(dealii::parallel::distributed::Vector & X, - const unsigned int numberVectors, - const MPI_Comm &interBandGroupComm, - const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & tempNonCoreVectorsArray) + unsigned int pseudoGramSchmidtOrthogonalization(std::vector & X, + const unsigned int numberVectors, + const MPI_Comm &interBandGroupComm, + const unsigned int numberCoreVectors, + const MPI_Comm & mpiComm, + dealii::parallel::distributed::Vector & tempNonCoreVectorsArray) { - const unsigned int localVectorSize = X.local_size()/numberVectors; + const unsigned int localVectorSize = X.size()/numberVectors; std::vector overlapMatrix(numberVectors*numberVectors,0.0); @@ -186,7 +191,7 @@ namespace dftfe &numberVectors, &localVectorSize, &alpha1, - X.begin(), + &X[0], &numberVectors, &beta1, &overlapMatrix[0], @@ -197,13 +202,13 @@ namespace dftfe &numberVectors, &localVectorSize, &alpha1, - X.begin(), + &X[0], &numberVectors, &beta1, &overlapMatrix[0], &numberVectors); #endif - dealii::Utilities::MPI::sum(overlapMatrix, X.get_mpi_communicator(), overlapMatrix); + dealii::Utilities::MPI::sum(overlapMatrix, mpiComm, overlapMatrix); computing_timer.exit_section("local overlap matrix for pgs"); computing_timer.enter_section("PGS cholesky and triangular matrix invert"); @@ -269,8 +274,9 @@ namespace dftfe //X=X*Lc^{-1}^{T} implemented as X^{T}=Lc^{-1}*X^{T} with X^{T} stored in the column major format computing_timer.enter_section("subspace rotation in pgs"); - dealii::parallel::distributed::Vector orthoNormalizedBasis; - orthoNormalizedBasis.reinit(X); + //dealii::parallel::distributed::Vector orthoNormalizedBasis; + //orthoNormalizedBasis.reinit(X); + std::vector orthoNormalizedBasis(X.size(),0.0); const char transA4 = 'N', transB4 = 'N'; const T alpha4 = 1.0, beta4 = 0.0; #ifdef USE_COMPLEX @@ -282,7 +288,7 @@ namespace dftfe &alpha4, &overlapMatrix[0], &numberVectors, - X.begin(), + &X[0], &numberVectors, &beta4, orthoNormalizedBasis.begin(), @@ -296,7 +302,7 @@ namespace dftfe &alpha4, &overlapMatrix[0], &numberVectors, - X.begin(), + &X[0], &numberVectors, &beta4, orthoNormalizedBasis.begin(), diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index 4e8bf4c81..2d3250d72 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -126,7 +126,7 @@ namespace dftfe{ operatorMatrix.reinit(1); const double upperBoundUnwantedSpectrum =linearAlgebraOperations::lanczosUpperBoundEigenSpectrum(operatorMatrix, - tempEigenVec); + tempEigenVec); computing_timer.exit_section("Lanczos k-step Upper Bound"); unsigned int chebyshevOrder = dftParameters::chebyshevOrder; @@ -227,7 +227,7 @@ namespace dftfe{ if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(operatorMatrix.getMPICommunicator(), - "During blocked chebyshev filtering"); + "During blocked chebyshev filtering"); //copy the eigenVectorsFlattenedArrayBlock into eigenVectorsFlattenedArray after filtering computing_timer.enter_section("Copy from block to full flattened array"); @@ -257,14 +257,14 @@ namespace dftfe{ #ifdef USE_COMPLEX MPI_Allreduce(MPI_IN_PLACE, - eigenVectorsFlattened.begin(), + &eigenVectorsFlattened[0], totalNumberWaveFunctions*localVectorSize, MPI_C_DOUBLE_COMPLEX, MPI_SUM, interBandGroupComm); #else MPI_Allreduce(MPI_IN_PLACE, - eigenVectorsFlattened.begin(), + &eigenVectorsFlattened[0], totalNumberWaveFunctions*localVectorSize, MPI_DOUBLE, MPI_SUM, @@ -309,9 +309,9 @@ namespace dftfe{ if(dftParameters::orthogType.compare("LW") == 0) { computing_timer.enter_section("Lowden Orthogn Opt"); - const unsigned int flag=linearAlgebraOperations::lowdenOrthogonalization - (eigenVectorsFlattened, - totalNumberWaveFunctions); + const unsigned int flag = linearAlgebraOperations::lowdenOrthogonalization(eigenVectorsFlattened, + totalNumberWaveFunctions, + operatorMatrix.getMPICommunicator()); if (flag==1) { @@ -320,7 +320,8 @@ namespace dftfe{ computing_timer.enter_section("Gram-Schmidt Orthogn Opt"); linearAlgebraOperations::gramSchmidtOrthogonalization(eigenVectorsFlattened, - totalNumberWaveFunctions); + totalNumberWaveFunctions, + operatorMatrix.getMPICommunicator()); computing_timer.exit_section("Gram-Schmidt Orthogn Opt"); } computing_timer.exit_section("Lowden Orthogn Opt"); @@ -328,12 +329,13 @@ namespace dftfe{ else if (dftParameters::orthogType.compare("PGS") == 0) { computing_timer.enter_section("Pseudo-Gram-Schmidt"); - const unsigned int flag=linearAlgebraOperations::pseudoGramSchmidtOrthogonalization - (eigenVectorsFlattened, - totalNumberWaveFunctions, - interBandGroupComm, - totalNumberWaveFunctions-eigenValues.size(), - eigenVectorsFlattenedRR); + const unsigned int flag=linearAlgebraOperations::pseudoGramSchmidtOrthogonalization(eigenVectorsFlattened, + totalNumberWaveFunctions, + interBandGroupComm, + totalNumberWaveFunctions-eigenValues.size(), + operatorMatrix.getMPICommunicator(), + eigenVectorsFlattenedRR); + if (flag==1) { if(dftParameters::verbosity >= 1) @@ -341,7 +343,8 @@ namespace dftfe{ computing_timer.enter_section("Gram-Schmidt Orthogn Opt"); linearAlgebraOperations::gramSchmidtOrthogonalization(eigenVectorsFlattened, - totalNumberWaveFunctions); + totalNumberWaveFunctions, + operatorMatrix.getMPICommunicator()); computing_timer.exit_section("Gram-Schmidt Orthogn Opt"); } computing_timer.exit_section("Pseudo-Gram-Schmidt"); @@ -350,7 +353,8 @@ namespace dftfe{ { computing_timer.enter_section("Gram-Schmidt Orthogn Opt"); linearAlgebraOperations::gramSchmidtOrthogonalization(eigenVectorsFlattened, - totalNumberWaveFunctions); + totalNumberWaveFunctions, + operatorMatrix.getMPICommunicator()); computing_timer.exit_section("Gram-Schmidt Orthogn Opt"); } @@ -366,9 +370,7 @@ namespace dftfe{ for(unsigned int iWave = 0; iWave < eigenValues.size(); ++iWave) eigenVectorsFlattenedRR.local_element(iNode*eigenValues.size() +iWave) - =eigenVectorsFlattened.local_element(iNode*totalNumberWaveFunctions - +(totalNumberWaveFunctions-eigenValues.size()) - +iWave); + =eigenVectorsFlattened[iNode*totalNumberWaveFunctions+(totalNumberWaveFunctions-eigenValues.size())+iWave]; linearAlgebraOperations::rayleighRitz(operatorMatrix, eigenVectorsFlattenedRR, @@ -378,18 +380,36 @@ namespace dftfe{ for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) for(unsigned int iWave = 0; iWave < eigenValues.size(); ++iWave) - eigenVectorsFlattened.local_element(iNode*totalNumberWaveFunctions - +(totalNumberWaveFunctions-eigenValues.size()) - +iWave) - = eigenVectorsFlattenedRR.local_element(iNode*eigenValues.size() - +iWave); + eigenVectorsFlattened[iNode*totalNumberWaveFunctions+(totalNumberWaveFunctions-eigenValues.size())+iWave] + = eigenVectorsFlattenedRR.local_element(iNode*eigenValues.size()+iWave); } else - linearAlgebraOperations::rayleighRitz(operatorMatrix, - eigenVectorsFlattened, - totalNumberWaveFunctions, - interBandGroupComm, - eigenValues); + { + operatorMatrix.reinit(totalNumberWaveFunctions, + eigenVectorsFlattenedRR, + true); + + + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < totalNumberWaveFunctions; ++iWave) + eigenVectorsFlattenedRR.local_element(iNode*eigenValues.size() + +iWave) + =eigenVectorsFlattened[iNode*totalNumberWaveFunctions+iWave]; + + linearAlgebraOperations::rayleighRitz(operatorMatrix, + eigenVectorsFlattenedRR, + totalNumberWaveFunctions, + interBandGroupComm, + eigenValues); + + + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < totalNumberWaveFunctions; ++iWave) + eigenVectorsFlattened[iNode*totalNumberWaveFunctions+iWave] + = eigenVectorsFlattenedRR.local_element(iNode*totalNumberWaveFunctions+iWave); + + + } computing_timer.exit_section("Rayleigh-Ritz proj Opt"); @@ -401,16 +421,16 @@ namespace dftfe{ } computing_timer.enter_section("eigen vectors residuals opt"); - if (eigenValues.size()!=totalNumberWaveFunctions) - linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, - eigenVectorsFlattenedRR, - eigenValues, - residualNorms); - else - linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, - eigenVectorsFlattened, - eigenValues, - residualNorms); + //if (eigenValues.size()!=totalNumberWaveFunctions) + linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, + eigenVectorsFlattenedRR, + eigenValues, + residualNorms); + //else + //linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, + // eigenVectorsFlattened, + // eigenValues, + // residualNorms); computing_timer.exit_section("eigen vectors residuals opt"); if(dftParameters::verbosity >= 4) @@ -420,8 +440,8 @@ namespace dftfe{ } if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(eigenVectorsFlattened.get_mpi_communicator(), - "After all steps of subspace iteration"); + dftUtils::printCurrentMemoryUsage(operatorMatrix.getMPICommunicator(), + "After all steps of subspace iteration"); return; diff --git a/src/symmetry/symmetrizeRho.cc b/src/symmetry/symmetrizeRho.cc index 41acee402..f2068e4cd 100644 --- a/src/symmetry/symmetrizeRho.cc +++ b/src/symmetry/symmetrizeRho.cc @@ -185,15 +185,15 @@ void symmetryClass::computeLocalrhoOut() { std::vector> eigenVectors((1+dftParameters::spinPolarized)*dftPtr->d_kPointWeights.size()); - const unsigned int localVectorSize = dftPtr->d_eigenVectorsFlattenedSTL.size()/numEigenValues; + const unsigned int localVectorSize = dftPtr->d_eigenVectorsFlattenedSTL.size()/dftPtr->numEigenValues; dealii::parallel::distributed::Vector eigenVectorsFlattenedArrayFullBlock; vectorTools::createDealiiVector(dftPtr->matrix_free_data.get_vector_partitioner(), dftPtr->numEigenValues, eigenVectorsFlattenedArrayFullBlock); - dftPtr->constraintsNoneDataInfo.precomputeMaps(dftPtr->matrix_free_data.get_partitioner(), - eigenVectorsFlattenedArrayBlock.get_partitioner(), + dftPtr->constraintsNoneDataInfo.precomputeMaps(dftPtr->matrix_free_data.get_vector_partitioner(), + eigenVectorsFlattenedArrayFullBlock.get_partitioner(), dftPtr->numEigenValues); for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*dftPtr->d_kPointWeights.size(); ++kPoint) @@ -205,10 +205,10 @@ void symmetryClass::computeLocalrhoOut() for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) for(unsigned int iWave = 0; iWave < dftPtr->numEigenValues; ++iWave) eigenVectorsFlattenedArrayFullBlock.local_element(iNode*dftPtr->numEigenValues+iWave) - = d_eigenVectorsFlattenedSTL[kPoint][iNode*dftPtr->numEigenValues+iWave]; + = dftPtr->d_eigenVectorsFlattenedSTL[kPoint][iNode*dftPtr->numEigenValues+iWave]; - constraintsNoneDataInfo.distribute(eigenVectorsFlattenedArrayFullBlock, - dftPtr->numEigenValues); + dftPtr->constraintsNoneDataInfo.distribute(eigenVectorsFlattenedArrayFullBlock, + dftPtr->numEigenValues); #ifdef USE_COMPLEX From 46b89cf3824ed0ddb7b46cebb30d85bcba4ada4e Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Tue, 21 Aug 2018 09:44:16 -0400 Subject: [PATCH 08/59] Fixed compilation and other seg faults --- demo/ex1/parameterFile_a.prm | 5 ++- src/dft/density.cc | 16 +++++--- src/dft/dft.cc | 50 ++++++++++++++++++++++++ src/dft/kohnShamEigenSolve.cc | 2 +- src/dft/psiInitialGuess.cc | 2 +- src/linAlg/linearAlgebraOperationsOpt.cc | 2 +- src/linAlg/pseudoGS.cc | 4 +- src/symmetry/symmetrizeRho.cc | 2 +- 8 files changed, 69 insertions(+), 14 deletions(-) diff --git a/demo/ex1/parameterFile_a.prm b/demo/ex1/parameterFile_a.prm index 7a3e15041..d48cd3dda 100644 --- a/demo/ex1/parameterFile_a.prm +++ b/demo/ex1/parameterFile_a.prm @@ -1,3 +1,4 @@ +set VERBOSITY = 3 subsection Geometry set NATOMS=2 set NATOM TYPES=1 @@ -15,7 +16,7 @@ subsection Boundary conditions end subsection Finite element mesh parameters - set POLYNOMIAL ORDER=4 + set POLYNOMIAL ORDER=1 subsection Auto mesh generation parameters set MESH SIZE AROUND ATOM = 0.5 end @@ -30,7 +31,7 @@ end subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set MAXIMUM ITERATIONS = 40 + set MAXIMUM ITERATIONS = 1 set TEMPERATURE = 500 set TOLERANCE = 1e-5 subsection Eigen-solver parameters diff --git a/src/dft/density.cc b/src/dft/density.cc index 56cbb72d7..75d4bd443 100644 --- a/src/dft/density.cc +++ b/src/dft/density.cc @@ -78,7 +78,7 @@ void dftClass::compute_rhoOut() const unsigned int eigenVectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - const unsigned int localVectorSize = d_eigenVectorsFlattenedSTL.size()/numEigenValues; + const unsigned int localVectorSize = d_eigenVectorsFlattenedSTL[0].size()/numEigenValues; std::vector> eigenVectors((1+dftParameters::spinPolarized)*d_kPointWeights.size()); @@ -98,7 +98,7 @@ void dftClass::compute_rhoOut() } } - if ((ivec+currentBlockSize)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && + if((ivec+currentBlockSize)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && (ivec+currentBlockSize)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { @@ -111,14 +111,18 @@ void dftClass::compute_rhoOut() eigenVectorsFlattenedArrayBlock.get_partitioner(), currentBlockSize); + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - for(unsigned int iWave = 0; iWave < currentBlockSize; ++iWave) - eigenVectorsFlattenedArrayBlock.local_element(iNode*currentBlockSize+iWave) - = d_eigenVectorsFlattenedSTL[kPoint][iNode*numEigenValues+ivec+iWave]; + { + for(unsigned int iWave = 0; iWave < currentBlockSize; ++iWave) + { + eigenVectorsFlattenedArrayBlock.local_element(iNode*currentBlockSize+iWave) + = d_eigenVectorsFlattenedSTL[kPoint][iNode*numEigenValues+ivec+iWave]; + } + } constraintsNoneDataInfo.distribute(eigenVectorsFlattenedArrayBlock, currentBlockSize); diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 98f2dffcd..979940c90 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -1382,11 +1382,61 @@ namespace dftfe { computingTimerStandard.exit_section("Total scf solve"); + if(dftParameters::isIonForce || dftParameters::isCellStress) + { + // + //Recreate the full dealii partitioned array + // + d_eigenVectorsFlattened.resize((1+dftParameters::spinPolarized)*d_kPointWeights.size()); + + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + { + vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), + numEigenValues, + d_eigenVectorsFlattened[kPoint]); + + + d_eigenVectorsFlattened[kPoint] = dataTypes::number(0.0); + + } + + const unsigned int localVectorSize = d_eigenVectorsFlattenedSTL[0].size()/numEigenValues; + + constraintsNoneDataInfo.precomputeMaps(matrix_free_data.get_vector_partitioner(), + d_eigenVectorsFlattened[0].get_partitioner(), + numEigenValues); + + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + { + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + { + for(unsigned int iWave = 0; iWave < numEigenValues; ++iWave) + { + d_eigenVectorsFlattened[kPoint].local_element(iNode*numEigenValues+iWave) + = d_eigenVectorsFlattenedSTL[kPoint][iNode*numEigenValues+iWave]; + } + } + + constraintsNoneDataInfo.distribute(d_eigenVectorsFlattened[kPoint], + numEigenValues); + + } + + + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + { + d_eigenVectorsFlattenedSTL[kPoint].clear(); + std::vector().swap(d_eigenVectorsFlattenedSTL[kPoint]); + } + + } + if (dftParameters::isIonForce) { if(dftParameters::selfConsistentSolverTolerance>1e-5 && dftParameters::verbosity>=1) pcout<<"DFT-FE Warning: Ion force accuracy may be affected for the given scf iteration solve tolerance: "<computeAtomsForces(); diff --git a/src/dft/kohnShamEigenSolve.cc b/src/dft/kohnShamEigenSolve.cc index f85d1eecd..1d55131c2 100644 --- a/src/dft/kohnShamEigenSolve.cc +++ b/src/dft/kohnShamEigenSolve.cc @@ -56,7 +56,7 @@ namespace internal diagonal.local_element(localProc_dof_indicesReal[i]); zdscal_(&numberFields, &scalingCoeff, - fieldsArrayFlattened[i*numberFields], + &fieldsArrayFlattened[i*numberFields], &inc); #else double scalingCoeff = diagonal.local_element(i); diff --git a/src/dft/psiInitialGuess.cc b/src/dft/psiInitialGuess.cc index f723dcb8b..cb7916a14 100644 --- a/src/dft/psiInitialGuess.cc +++ b/src/dft/psiInitialGuess.cc @@ -348,7 +348,7 @@ void dftClass::readPSIRadialValues(){ if(rand()%2 == 0) value = -1.0*value; - d_eigenVectorsFlattened[kPoint][dof*numEigenValues+iWave] = dataTypes::number(value); + d_eigenVectorsFlattenedSTL[kPoint][dof*numEigenValues+iWave] = dataTypes::number(value); } } diff --git a/src/linAlg/linearAlgebraOperationsOpt.cc b/src/linAlg/linearAlgebraOperationsOpt.cc index fcc1de0c3..4c1cb043e 100644 --- a/src/linAlg/linearAlgebraOperationsOpt.cc +++ b/src/linAlg/linearAlgebraOperationsOpt.cc @@ -872,7 +872,7 @@ namespace dftfe{ break; } } - nanFlag=dealii::Utilities::MPI::max(nanFlag,mpi_comm); + nanFlag=dealii::Utilities::MPI::max(nanFlag,mpiComm); if (dftParameters::enableSwitchToGS && nanFlag==1) return nanFlag; diff --git a/src/linAlg/pseudoGS.cc b/src/linAlg/pseudoGS.cc index c198798d8..d4930f41a 100644 --- a/src/linAlg/pseudoGS.cc +++ b/src/linAlg/pseudoGS.cc @@ -291,7 +291,7 @@ namespace dftfe &X[0], &numberVectors, &beta4, - orthoNormalizedBasis.begin(), + &orthoNormalizedBasis[0], &numberVectors); #else dgemm_(&transA4, @@ -305,7 +305,7 @@ namespace dftfe &X[0], &numberVectors, &beta4, - orthoNormalizedBasis.begin(), + &orthoNormalizedBasis[0], &numberVectors); #endif computing_timer.exit_section("subspace rotation in pgs"); diff --git a/src/symmetry/symmetrizeRho.cc b/src/symmetry/symmetrizeRho.cc index f2068e4cd..f669e8a5d 100644 --- a/src/symmetry/symmetrizeRho.cc +++ b/src/symmetry/symmetrizeRho.cc @@ -185,7 +185,7 @@ void symmetryClass::computeLocalrhoOut() { std::vector> eigenVectors((1+dftParameters::spinPolarized)*dftPtr->d_kPointWeights.size()); - const unsigned int localVectorSize = dftPtr->d_eigenVectorsFlattenedSTL.size()/dftPtr->numEigenValues; + const unsigned int localVectorSize = dftPtr->d_eigenVectorsFlattenedSTL[0].size()/dftPtr->numEigenValues; dealii::parallel::distributed::Vector eigenVectorsFlattenedArrayFullBlock; vectorTools::createDealiiVector(dftPtr->matrix_free_data.get_vector_partitioner(), From d86f597ef180cf6f884f8db6742aadbfb7eff2dd Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Tue, 21 Aug 2018 19:34:20 -0400 Subject: [PATCH 09/59] putting in Broyden mixing --- include/dft.h | 12 + include/dftParameters.h | 1 + src/dft/dft.cc | 500 +++++++++++++------------------------- src/dft/mixingschemes.cc | 501 ++++++++++++++++++++++++++++++++++++++- utils/dftParameters.cc | 14 +- 5 files changed, 681 insertions(+), 347 deletions(-) diff --git a/include/dft.h b/include/dft.h index 7316821c2..e07b4bf81 100644 --- a/include/dft.h +++ b/include/dft.h @@ -392,6 +392,9 @@ namespace dftfe { double mixing_anderson(); double mixing_simple_spinPolarized(); double mixing_anderson_spinPolarized(); + double mixing_broyden(); + double mixing_broyden_spinPolarized(); + /** * Re solves the all electrostatics on a p refined mesh, and computes @@ -603,6 +606,15 @@ namespace dftfe { std::map > * gradRhoOutValues, *gradRhoOutValuesSpinPolarized; std::deque >> gradRhoInVals,gradRhoInValsSpinPolarized,gradRhoOutVals, gradRhoOutValsSpinPolarized; + // Broyden mixing related objects + std::map > F, gradF ; + std::deque >> dF, graddF ; + std::deque >> u, gradU ; + std::deque wt; + double w0 = 0.0 ; + // + + // storage for total electrostatic potential solution vector corresponding to input scf electron density vectorType d_phiTotRhoIn; diff --git a/include/dftParameters.h b/include/dftParameters.h index 76bb50306..212dcf4c6 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -46,6 +46,7 @@ namespace dftfe { extern double outerAtomBallRadius, meshSizeOuterDomain; extern double meshSizeInnerBall, meshSizeOuterBall; extern double chebyshevTolerance; + std::string mixingMethod ; extern bool isIonOpt, isCellOpt, isIonForce, isCellStress; diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 44c006e70..037b8fcef 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -18,7 +18,6 @@ //Include header files #include -#include #include #include #include @@ -67,6 +66,7 @@ namespace dftfe { #include "mixingschemes.cc" #include "kohnShamEigenSolve.cc" #include "restart.cc" +//#include "electrostaticPRefinedEnergy.cc" #include "moveAtoms.cc" // @@ -96,7 +96,7 @@ namespace dftfe { pcout (std::cout, (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)), computing_timer (pcout, dftParameters::reproducible_output - || dftParameters::verbosity<4? TimerOutput::never : TimerOutput::summary, + || dftParameters::verbosity<2? TimerOutput::never : TimerOutput::summary, TimerOutput::wall_times), computingTimerStandard(pcout, dftParameters::reproducible_output @@ -185,7 +185,6 @@ namespace dftfe { template void dftClass::set() { - computingTimerStandard.enter_section("Atomic system initialization"); if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, "Entered call to set"); @@ -200,10 +199,7 @@ namespace dftfe { //read fractionalCoordinates of atoms in periodic case // dftUtils::readFile(numberColumnsCoordinatesFile, atomLocations, dftParameters::coordinatesFile); - AssertThrow(dftParameters::natoms==atomLocations.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.")); + AssertThrow(dftParameters::natoms==atomLocations.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: " << atomLocations.size() << "\n"; atomLocationsFractional.resize(atomLocations.size()) ; // @@ -212,14 +208,6 @@ namespace dftfe { for (std::vector >::iterator it=atomLocations.begin(); it >::iterator it=atomLocations.begin(); it cross; - dftUtils::cross_product(d_domainBoundingVectors[0], - d_domainBoundingVectors[1], - cross); - - double scalarConst = d_domainBoundingVectors[2][0]*cross[0] + d_domainBoundingVectors[2][1]*cross[1] + d_domainBoundingVectors[2][2]*cross[2]; - AssertThrow(scalarConst>0,ExcMessage("DFT-FE Error: Domain bounding vectors or lattice vectors read from" - "input file (input through DOMAIN VECTORS FILE) should form a right-handed coordinate system." - "Please check your domain vectors file. This is usually fixed by changing the order of the" - "vectors in the domain vectors file.")); - + AssertThrow(dftParameters::natomTypes==atomTypes.size(),ExcMessage("DFT-FE Error: The number atom types read from the atomic coordinates file (input through ATOMIC COORDINATES FILE) doesn't match the NATOM TYPES input. Please check your atomic coordinates file.")); pcout << "number of atoms types: " << atomTypes.size() << "\n"; - - // //determine number of electrons - // for(unsigned int iAtom = 0; iAtom < atomLocations.size(); iAtom++) { const unsigned int Z = atomLocations[iAtom][0]; @@ -296,43 +253,30 @@ namespace dftfe { numElectrons += valenceZ; else numElectrons += Z; + // } - - if(dftParameters::numberEigenValues <= numElectrons/2.0) - { - if(dftParameters::verbosity >= 1) - { - pcout <<" Warning: User has requested the number of Kohn-Sham wavefunctions to be less than or" - "equal to half the number of electrons in the system. Setting the Kohn-Sham wavefunctions" - "to half the number of electrons with a 10 percent buffer to avoid convergence issues in" - "SCF iterations"<= 1) - { - pcout <<" Setting the number of Kohn-Sham wave functions to be set to "<(numElectrons)/2.0); + numElectronsDown = numElectrons - numElectronsUp; + // + int netMagnetization = std::round(2.0 * static_cast(numElectrons) * dftParameters::start_magnetization ) ; + // + while ( (numElectronsUp-numElectronsDown) < std::abs(netMagnetization)) + { + numElectronsDown -=1 ; + numElectronsUp +=1 ; + } + } + numElectrons += (int) std::round(dftParameters::tot_charge) ; //estimate total number of wave functions from atomic orbital filling if (dftParameters::startingWFCType=="ATOMIC") determineOrbitalFilling(); - AssertThrow(dftParameters::numCoreWfcRR<=numEigenValues - ,ExcMessage("DFT-FE Error: Incorrect input value used- SPECTRUM SPLIT CORE EIGENSTATES should be less than the total number of wavefunctions.")); - numEigenValuesRR=numEigenValues-dftParameters::numCoreWfcRR; - - #ifdef USE_COMPLEX - if(dftParameters::kPointDataFile == "") - generateMPGrid(); - else - { - AssertThrow(dftParameters::npool=1 - ,ExcMessage("DFT-FE Error: k-Point parallelization is not implemented for external k-point file")); - readkPointData(); - } + generateMPGrid(); #else d_kPointCoordinates.resize(3,0.0); d_kPointWeights.resize(1,1.0); @@ -340,7 +284,6 @@ namespace dftfe { //set size of eigenvalues and eigenvectors data structures eigenValues.resize(d_kPointWeights.size()); - eigenValuesRRSplit.resize(d_kPointWeights.size()); a0.resize((dftParameters::spinPolarized+1)*d_kPointWeights.size(),dftParameters::lowerEndWantedSpectrum); bLow.resize((dftParameters::spinPolarized+1)*d_kPointWeights.size(),0.0); @@ -349,7 +292,6 @@ namespace dftfe { for(unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) { eigenValues[kPoint].resize((dftParameters::spinPolarized+1)*numEigenValues); - eigenValuesRRSplit[kPoint].resize((dftParameters::spinPolarized+1)*numEigenValuesRR); } //convert pseudopotential files in upf format to dftfe format @@ -362,7 +304,7 @@ namespace dftfe { pseudoUtils::convert(dftParameters::pseudoPotentialFile); MPI_Barrier(MPI_COMM_WORLD); - computingTimerStandard.exit_section("Atomic system initialization"); + } //dft pseudopotential init @@ -378,9 +320,18 @@ namespace dftfe { pcout<initPseudoData(); } @@ -417,16 +368,8 @@ namespace dftfe { for(unsigned int i = 0; i < atomLocationsFractional.size(); ++i) { for(unsigned int idim = 0; idim < 3; ++idim) - { if (periodicBc[idim]) - AssertThrow(atomLocationsFractional[i][2+idim]>-tol && atomLocationsFractional[i][2+idim]<1.0+tol,ExcMessage("DFT-FE Error: periodic direction fractional coordinates doesn't lie in [0,1]. Please check input" - "fractional coordinates, or if this is an ionic relaxation step, please check the corresponding" - "algorithm.")); - if (!periodicBc[idim]) - AssertThrow(atomLocationsFractional[i][2+idim]>tol && atomLocationsFractional[i][2+idim]<1.0-tol,ExcMessage("DFT-FE Error: non-periodic direction fractional coordinates doesn't lie in (0,1). Please check" - "input fractional coordinates, or if this is an ionic relaxation step, please check the" - "corresponding algorithm.")); - } + AssertThrow(atomLocationsFractional[i][2+idim]>-tol && atomLocationsFractional[i][2+idim]<1.0+tol,ExcMessage("DFT-FE Error: periodic direction fractional coordinates doesn't lie in [0,1]. Please check input fractional coordinates, or if this is an ionic relaxation step, please check the corresponding algorithm.")); } generateImageCharges(d_pspCutOff, @@ -446,10 +389,22 @@ namespace dftfe { internaldft::convertToCellCenteredCartesianCoordinates(atomLocations, d_domainBoundingVectors); + // + //print cartesian coordinates + // + if (dftParameters::verbosity>=2) { + pcout<<"------------Cartesian coordinates of atoms (origin at center of domain)------------------"<=4) + if (dftParameters::verbosity>=2) { //FIXME: Print all k points across all pools pcout<<"-------------------k points cartesian coordinates and weights-----------------------------"< void dftClass::init (const unsigned int usePreviousGroundStateFields) { - computingTimerStandard.enter_section("KSDFT problem initialization"); + computingTimerStandard.enter_section("Pre-processing steps"); if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, @@ -568,16 +523,15 @@ namespace dftfe { if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, "initPseudopotential completed"); - computingTimerStandard.exit_section("KSDFT problem initialization"); + computingTimerStandard.exit_section("Pre-processing steps"); } template void dftClass::initNoRemesh() { - computingTimerStandard.enter_section("KSDFT problem initialization"); + computingTimerStandard.enter_section("Pre-processing steps"); initImageChargesUpdateKPoints(); - updatePrevMeshDataStructures(); // //reinitialize dirichlet BCs for total potential and vSelf poisson solutions // @@ -591,7 +545,7 @@ namespace dftfe { //reinitialize pseudopotential related data structures // initPseudoPotentialAll(); - computingTimerStandard.exit_section("KSDFT problem initialization"); + computingTimerStandard.exit_section("Pre-processing steps"); } // @@ -662,9 +616,6 @@ namespace dftfe { 2, d_phiExt, d_noConstraints, - d_imagePositions, - d_imageIds, - d_imageCharges, d_localVselfs); computingTimerStandard.exit_section("Nuclear self-potential solve"); computing_timer.exit_section("Nuclear self-potential solve"); @@ -680,9 +631,9 @@ namespace dftfe { // - //create kohnShamDFTOperatorClass object + //create eigenClass object // - kohnShamDFTOperatorClass kohnShamDFTEigenOperator(this,mpi_communicator); + eigenClass kohnShamDFTEigenOperator(this,mpi_communicator); kohnShamDFTEigenOperator.init(); if (dftParameters::verbosity>=4) @@ -751,10 +702,18 @@ namespace dftfe { { if (dftParameters::spinPolarized==1) { - norm = sqrt(mixing_anderson_spinPolarized()); + if (dftParameters::mixingMethod=="ANDERSON") + norm = sqrt(mixing_anderson_spinPolarized()); + if (dftParameters::mixingMethod=="BROYDEN") + norm = sqrt(mixing_broyden_spinPolarized()); + } + else + { + if (dftParameters::mixingMethod=="ANDERSON") + norm = sqrt(mixing_anderson()); + if (dftParameters::mixingMethod=="BROYDEN") + norm = sqrt(mixing_broyden()); } - else - norm = sqrt(mixing_anderson()); if (dftParameters::verbosity>=1) pcout<<"Anderson mixing, L2 norm of electron-density difference: "<< norm<< std::endl; @@ -791,6 +750,7 @@ namespace dftfe { phiTotDofHandlerIndex, d_atomNodeIdToChargeMap, *rhoInValues, + backgroundCharge, false); else phiTotalSolverProblem.reinit(matrix_free_data, @@ -798,7 +758,8 @@ namespace dftfe { *d_constraintsVector[phiTotDofHandlerIndex], phiTotDofHandlerIndex, d_atomNodeIdToChargeMap, - *rhoInValues); + *rhoInValues, + backgroundCharge); dealiiCGSolver.solve(phiTotalSolverProblem, @@ -815,15 +776,13 @@ namespace dftfe { if (dftParameters::spinPolarized==1) { - std::vector > > - eigenValuesSpins(2, - std::vector >(d_kPointWeights.size(), - std::vector(numEigenValuesRR))); + std::vector > > eigenValuesSpins(2, + std::vector >(d_kPointWeights.size(), + std::vector(numEigenValues))); - std::vector>> - residualNormWaveFunctionsAllkPointsSpins(2, - std::vector >(d_kPointWeights.size(), - std::vector(numEigenValuesRR))); + std::vector>> residualNormWaveFunctionsAllkPointsSpins(2, + std::vector >(d_kPointWeights.size(), + std::vector(numEigenValues))); for(unsigned int s=0; s<2; ++s) { @@ -852,7 +811,7 @@ namespace dftfe { dftUtils::printCurrentMemoryUsage(mpi_communicator, "Hamiltonian Matrix computed"); - for(unsigned int j = 0; j < 1; ++j) + for(unsigned int j = 0; j < dftParameters::numPass; ++j) { if (dftParameters::verbosity>=2) pcout<<"Beginning Chebyshev filter pass "<< j+1<< " for spin "<< s+1<=2) - { - pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; - } + pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; //if the residual norm is greater than adaptiveChebysevFilterPassesTol (a heuristic value) // do more passes of chebysev filter till the check passes. @@ -922,7 +880,7 @@ namespace dftfe { { kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); if (dftParameters::verbosity>=2) - pcout<< "Beginning Chebyshev filter pass "<< 1+count<< " for spin "<< s+1<=2) - { - pcout << "Fermi Energy computed: "<> residualNormWaveFunctionsAllkPoints; residualNormWaveFunctionsAllkPoints.resize(d_kPointWeights.size()); for(unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) - residualNormWaveFunctionsAllkPoints[kPoint].resize(numEigenValuesRR); + residualNormWaveFunctionsAllkPoints[kPoint].resize(numEigenValues); if(dftParameters::xc_id < 4) { @@ -1001,7 +954,7 @@ namespace dftfe { if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, "Hamiltonian Matrix computed"); - for(unsigned int j = 0; j < 1; ++j) + for(unsigned int j = 0; j < dftParameters::numPass; ++j) { if (dftParameters::verbosity>=2) pcout<< "Beginning Chebyshev filter pass "<< j+1<=2) pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; @@ -1048,39 +1001,34 @@ namespace dftfe { { kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); if (dftParameters::verbosity>=2) - pcout<< "Beginning Chebyshev filter pass "<< 1+count<=4) + if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, - "Hamiltonian Matrix computed"); + "Hamiltonian Matrix computed"); kohnShamEigenSpaceCompute(0, kPoint, kohnShamDFTEigenOperator, subspaceIterationSolver, - residualNormWaveFunctionsAllkPoints[kPoint], - true); + residualNormWaveFunctionsAllkPoints[kPoint]); } count++; - compute_fermienergy(eigenValues, - numElectrons); + if (dftParameters::constraintMagnetization) + compute_fermienergy_constraintMagnetization(); + else + compute_fermienergy(); maxRes = computeMaximumHighestOccupiedStateResidualNorm (residualNormWaveFunctionsAllkPoints, - eigenValuesRRSplit, + eigenValues, fermiEnergy); if (dftParameters::verbosity>=2) pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; } - - numberChebyshevSolvePasses=count; - - if(dftParameters::verbosity>=2) - { - pcout << "Fermi Energy computed: "<=2) pcout<< std::endl<<"Poisson solve for total electrostatic potential (rhoOut+b): "; @@ -1154,6 +1102,7 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, + backgroundCharge, 0, dftParameters::verbosity>=2) : energyCalc.computeEnergySpinPolarized(dofHandler, @@ -1163,6 +1112,8 @@ namespace dftfe { eigenValues, d_kPointWeights, fermiEnergy, + fermiEnergyUp, + fermiEnergyDown, funcX, funcC, d_phiTotRhoIn, @@ -1180,17 +1131,14 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, + backgroundCharge, 0, dftParameters::verbosity>=2); if (dftParameters::verbosity==1) + { pcout<<"Total energy : " << totalEnergy << std::endl; + } } - else - { - if (numEigenValuesRR!=numEigenValues && dftParameters::computeEnergyEverySCF && dftParameters::verbosity>=1) - pcout<<"DFT-FE Message: energy computation is not performed at the end of each scf iteration step\n"<<"if SPECTRUM SPLIT CORE EIGENSTATES is set to a non-zero value."<< std::endl; - } - if (dftParameters::verbosity>=1) pcout<<"***********************Self-Consistent-Field Iteration: "<>> - residualNormWaveFunctionsAllkPointsSpins(2, - std::vector >(d_kPointWeights.size(), - std::vector(numEigenValues))); - - for(unsigned int s=0; s<2; ++s) - { - - if(dftParameters::xc_id < 4) - { - computing_timer.enter_section("VEff Computation"); - kohnShamDFTEigenOperator.computeVEffSpinPolarized(rhoInValuesSpinPolarized, d_phiTotRhoIn, d_phiExt, s, pseudoValues); - computing_timer.exit_section("VEff Computation"); - } - else if (dftParameters::xc_id == 4) - { - computing_timer.enter_section("VEff Computation"); - kohnShamDFTEigenOperator.computeVEffSpinPolarized(rhoInValuesSpinPolarized, gradRhoInValuesSpinPolarized, d_phiTotRhoIn, d_phiExt, s, pseudoValues); - computing_timer.exit_section("VEff Computation"); - } - for (unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) - { - kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); - - - computing_timer.enter_section("Hamiltonian Matrix Computation"); - kohnShamDFTEigenOperator.computeHamiltonianMatrix(kPoint); - computing_timer.exit_section("Hamiltonian Matrix Computation"); - - - - if (dftParameters::verbosity>=2) - pcout<<"Doing one full spectrum Chebyshev filter pass for spin "<< s+1<> residualNormWaveFunctionsAllkPoints; - residualNormWaveFunctionsAllkPoints.resize(d_kPointWeights.size()); - for(unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) - residualNormWaveFunctionsAllkPoints[kPoint].resize(numEigenValues); - - for (unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) - { - kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); - - computing_timer.enter_section("Hamiltonian Matrix Computation"); - kohnShamDFTEigenOperator.computeHamiltonianMatrix(kPoint); - computing_timer.exit_section("Hamiltonian Matrix Computation"); - - - - if (dftParameters::verbosity>=2) - pcout<<"Doing one full spectrum Chebyshev filter pass "<=2) pcout<< std::endl<<"Poisson solve for total electrostatic potential (rhoOut+b): "; @@ -1307,6 +1172,7 @@ namespace dftfe { phiTotDofHandlerIndex, d_atomNodeIdToChargeMap, *rhoOutValues, + backgroundCharge, false); @@ -1316,6 +1182,7 @@ namespace dftfe { dftParameters::verbosity); computing_timer.exit_section("phiTot solve"); + } // // compute and print ground state energy or energy after max scf iterations @@ -1342,6 +1209,7 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, + backgroundCharge, 1, true) : energyCalc.computeEnergySpinPolarized(dofHandler, @@ -1351,6 +1219,8 @@ namespace dftfe { eigenValues, d_kPointWeights, fermiEnergy, + fermiEnergyUp, + fermiEnergyDown, funcX, funcC, d_phiTotRhoIn, @@ -1368,6 +1238,7 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, + backgroundCharge, 1, true); @@ -1409,135 +1280,86 @@ namespace dftfe { //if (dftParameters::electrostaticsPRefinement) // computeElectrostaticEnergyPRefined(); - if (dftParameters::writeWfcSolutionFields) - outputWfc(); + // + pcout << " check 0.0 " << std::endl; + //hyperFineTensor(rhoOutValuesSpinPolarized) ; + //computeDTensorWrapper() ; + efgTensor(rhoOutValues) ; + // + computeNodalRhoFromQuadData(); + - if (dftParameters::writeDensitySolutionFields) - outputDensity(); + if (dftParameters::writeSolutionFields) + output(); if (dftParameters::verbosity>=1) pcout << std::endl<< "Elapsed wall time since start of the program: " << d_globalTimer.wall_time() << " seconds\n"< - void dftClass::outputWfc() + void dftClass::output() { DataOut<3> data_outEigen; data_outEigen.attach_dof_handler (dofHandlerEigen); std::vector tempVec(1); tempVec[0].reinit(d_tempEigenVec); - for (unsigned int s=0; s<1+dftParameters::spinPolarized; ++s) - for (unsigned int k=0; k()); + std::ofstream output ("eigen.vtu"); dftUtils::writeDataVTUParallelLowestPoolId(data_outEigen, mpi_communicator, interpoolcomm, interBandGroupComm, - "wfcOutput"); - } - + std::string("eigen")); - //Output density - template - void dftClass::outputDensity() - { // //compute nodal electron-density from quad data // dealii::parallel::distributed::Vector rhoNodalField; matrix_free_data.initialize_dof_vector(rhoNodalField,densityDofHandlerIndex); rhoNodalField=0; - std::function::active_cell_iterator & cell , - const unsigned int q)> funcRho = - [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , - const unsigned int q) - {return (*rhoOutValues).find(cell->id())->second[q];}; dealii::VectorTools::project<3,dealii::parallel::distributed::Vector> (dealii::MappingQ1<3,3>(), dofHandler, constraintsNone, QGauss<3>(C_num1DQuad()), - funcRho, + [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , const unsigned int q) -> double {return (*rhoOutValues).find(cell->id())->second[q];}, rhoNodalField); rhoNodalField.update_ghost_values(); - dealii::parallel::distributed::Vector rhoNodalFieldSpin0; - dealii::parallel::distributed::Vector rhoNodalFieldSpin1; - if (dftParameters::spinPolarized==1) - { - matrix_free_data.initialize_dof_vector(rhoNodalFieldSpin0,densityDofHandlerIndex); - rhoNodalFieldSpin0=0; - std::function::active_cell_iterator & cell , - const unsigned int q)> funcRhoSpin0 = - [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , - const unsigned int q) - {return (*rhoOutValuesSpinPolarized).find(cell->id())->second[2*q];}; - dealii::VectorTools::project<3,dealii::parallel::distributed::Vector> (dealii::MappingQ1<3,3>(), - dofHandler, - constraintsNone, - QGauss<3>(C_num1DQuad()), - funcRhoSpin0, - rhoNodalFieldSpin0); - rhoNodalFieldSpin0.update_ghost_values(); - - - matrix_free_data.initialize_dof_vector(rhoNodalFieldSpin1,densityDofHandlerIndex); - rhoNodalFieldSpin1=0; - std::function::active_cell_iterator & cell , - const unsigned int q)> funcRhoSpin1 = - [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , - const unsigned int q) - {return (*rhoOutValuesSpinPolarized).find(cell->id())->second[2*q+1];}; - dealii::VectorTools::project<3,dealii::parallel::distributed::Vector> (dealii::MappingQ1<3,3>(), - dofHandler, - constraintsNone, - QGauss<3>(C_num1DQuad()), - funcRhoSpin1, - rhoNodalFieldSpin1); - rhoNodalFieldSpin1.update_ghost_values(); - } - // //only generate output for electron-density // DataOut<3> dataOutRho; dataOutRho.attach_dof_handler(dofHandler); - dataOutRho.add_data_vector(rhoNodalField, std::string("density")); - if (dftParameters::spinPolarized==1) - { - dataOutRho.add_data_vector(rhoNodalFieldSpin0, std::string("density_0")); - dataOutRho.add_data_vector(rhoNodalFieldSpin1, std::string("density_1")); - } + char buffer[100]; sprintf(buffer,"rhoField"); + dataOutRho.add_data_vector(rhoNodalField, buffer); dataOutRho.build_patches(C_num1DQuad()); dftUtils::writeDataVTUParallelLowestPoolId(dataOutRho, mpi_communicator, interpoolcomm, interBandGroupComm, - "densityOutput"); + std::string("rhoField")); } diff --git a/src/dft/mixingschemes.cc b/src/dft/mixingschemes.cc index f19648aea..727112e51 100644 --- a/src/dft/mixingschemes.cc +++ b/src/dft/mixingschemes.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (c) 2017-2018 The Regents of the University of Michigan and DFT-FE authors. +// Copyright (c) 2017 The Regents of the University of Michigan and DFT-FE authors. // // This file is part of the DFT-FE code. // @@ -13,12 +13,33 @@ // // --------------------------------------------------------------------- // -// @author Shiva Rudraraju, Phani Motamarri, Krishnendu Ghosh +// @author Shiva Rudraraju (2016), Phani Motamarri (2016), Krishnendu Ghosh(2017) // //source file for all the mixing schemes +#include + +using namespace std; + +void calldgesv(const unsigned int dimensionMatrix, + double *matrix, + double *matrixInverse) + { + int N = dimensionMatrix; + int NRHS=N, lda=N, ldb=N, info; + std::vector ipiv(N); + // + dgesv_(&N, &NRHS, &matrix[0], &lda, &ipiv[0], &matrixInverse[0], &ldb, &info); + /* Check for convergence */ + if( info != 0 ) { + std::cout << "zgesv algorithm failed to compute inverse " << info << std::endl; + exit( 1 ); + } + + + } //implement simple mixing scheme @@ -185,7 +206,6 @@ double dftClass::mixing_anderson(){ if (cell->is_locally_owned()) { (*gradRhoInValues)[cell->id()]=std::vector(3*num_quad_points); - fe_values.reinit (cell); for (unsigned int q_point=0; q_point::mixing_anderson(){ return Utilities::MPI::sum(normValue, mpi_communicator); } + +//implement Broyden mixing scheme +template +double dftClass::mixing_broyden(){ + double normValue=0.0; + QGauss<3> quadrature(C_num1DQuad()); + FEValues<3> fe_values (FE, quadrature, update_JxW_values); + const unsigned int num_quad_points = quadrature.size(); + // + int N = rhoOutVals.size()- 1; + //if (rhoOutVals.size() > 2) + // N = u.size() ; + // + // + pcout << " mixing check 1.0 " << std::endl ; + std::map > delRho, delGradRho ; + dF.push_back(std::map >()); + u.push_back(std::map >()); + if (dftParameters::xc_id == 4) + { + graddF.push_back(std::map >()); + gradU.push_back(std::map >()); + } + // + double FOld ; + std::vector gradFOld (3,0.0) ; + // + //parallel loop over all elements + double dfMag = 0.0, dfMagLoc=0.0 ; + double wtTemp = 0.0, wtTempLoc=0.0 ; + double w0Loc = 0.0 ; + // + typename DoFHandler<3>::active_cell_iterator cell = dofHandler.begin_active(), endc = dofHandler.end(); + for (; cell!=endc; ++cell) { + if (cell->is_locally_owned()){ + // + (dF[N-1])[cell->id()]=std::vector(num_quad_points); + delRho[cell->id()]=std::vector(num_quad_points); + if (N==1) + F[cell->id()]=std::vector(num_quad_points); + // + if (dftParameters::xc_id == 4) + { + (graddF[N-1])[cell->id()]=std::vector(3*num_quad_points); + delGradRho[cell->id()]=std::vector(3*num_quad_points); + if (N==1) + gradF[cell->id()]=std::vector(3*num_quad_points); + } + fe_values.reinit (cell); + for (unsigned int q_point=0; q_pointid()][q_point])- ((rhoInVals[0])[cell->id()][q_point]); + w0Loc += FOld * FOld * fe_values.JxW(q_point) ; + //F[cell->id()]=std::vector(num_quad_points); + if (dftParameters::xc_id == 4) + { + //gradF[cell->id()]=std::vector(3*num_quad_points); + for (unsigned int dir=0; dir < 3; ++dir) + gradFOld[dir] = ((gradRhoOutVals[0])[cell->id()][3*q_point+dir])- ((gradRhoInVals[0])[cell->id()][3*q_point+dir]); + } + } + else + { + FOld = F[cell->id()][q_point] ; + if (dftParameters::xc_id == 4) + for (unsigned int dir=0; dir < 3; ++dir) + gradFOld[dir] = gradF[cell->id()][3*q_point+dir] ; + } + // + //pcout << " mixing check 1.01 " << std::endl ; + F[cell->id()][q_point] = (rhoOutVals[N])[cell->id()][q_point]- (rhoInVals[N])[cell->id()][q_point]; + delRho[cell->id()][q_point] = (rhoInVals[N])[cell->id()][q_point]- (rhoInVals[N-1])[cell->id()][q_point]; + // + (dF[N-1])[cell->id()][q_point] = F[cell->id()][q_point]- FOld; + if (dftParameters::xc_id == 4) + { + for (unsigned int dir=0; dir < 3; ++dir) { + delGradRho[cell->id()][3*q_point+dir] = (gradRhoInVals[N])[cell->id()][3*q_point + dir]- (gradRhoInVals[N-1])[cell->id()][3*q_point+dir]; + gradF[cell->id()][3*q_point+dir] = (gradRhoOutVals[N])[cell->id()][3*q_point + dir]- (gradRhoInVals[N])[cell->id()][3*q_point+dir]; + (graddF[N-1])[cell->id()][3*q_point+dir] = gradF[cell->id()][3*q_point+dir]- gradFOld[dir]; + } + } + dfMagLoc += (dF[N-1])[cell->id()][q_point] * (dF[N-1])[cell->id()][q_point] *fe_values.JxW(q_point); + wtTempLoc += F[cell->id()][q_point] * F[cell->id()][q_point] *fe_values.JxW(q_point) ; + } + } + } + // + wtTemp=Utilities::MPI::sum(wtTempLoc, mpi_communicator); + dfMag=Utilities::MPI::sum(dfMagLoc, mpi_communicator); + if (N==1) + w0 = Utilities::MPI::sum(w0Loc, mpi_communicator); + + // + pcout << " mixing check 1.1 " << std::endl ; + cell = dofHandler.begin_active(), endc = dofHandler.end(); + // + wtTemp = std::pow(wtTemp, -0.5 ) ; + wt.push_back(wtTemp) ; + double G = dftParameters::mixingParameter ; + // + std::vector c(N, 0.0) , invBeta(N*N, 0.0), beta(N*N, 0.0), gamma(N, 0.0), cLoc(N, 0.0) , invBetaLoc(N*N, 0.0) ; + for (; cell!=endc; ++cell) + if (cell->is_locally_owned()) + { + (u[N-1])[cell->id()]=std::vector(num_quad_points); + if (dftParameters::xc_id == 4) + (gradU[N-1])[cell->id()]=std::vector(3*num_quad_points); + fe_values.reinit (cell); + // + for (unsigned int q_point=0; q_pointid()][q_point] /= dfMag ; + delRho[cell->id()][q_point] /= dfMag ; + (u[N-1])[cell->id()][q_point] = G * (dF[N-1])[cell->id()][q_point] + delRho[cell->id()][q_point] ; + // + if (dftParameters::xc_id == 4) + { + for (unsigned int dir=0; dir < 3; ++dir) { + (graddF[N-1])[cell->id()][3*q_point+dir] /= dfMag ; + delGradRho[cell->id()][3*q_point+dir] /= dfMag ; + (gradU[N-1])[cell->id()][3*q_point+dir] = G * (graddF[N-1])[cell->id()][3*q_point+dir] + delGradRho[cell->id()][3*q_point+dir] ; + } + } + // + //pcout << " mixing check 1.11 " << std::endl ; + // + for (unsigned int k = 0; k < N ; ++k) { + cLoc[k] += wt[k] * (dF[k])[cell->id()][q_point] * F[cell->id()][q_point] *fe_values.JxW(q_point); + for (unsigned int l = k; l < N ; ++l) + { + invBetaLoc[N*k + l] += wt[k] * wt[l] * (dF[k])[cell->id()][q_point] * (dF[l])[cell->id()][q_point] *fe_values.JxW(q_point); + invBetaLoc[N*l + k] = invBetaLoc[N*k + l] ; + if (l==k) { + invBetaLoc[N*l + l] = w0*w0 + invBetaLoc[N*l + l] ; + beta[N*l + l] = 1.0 ; + } + } + } + } + } + // + for (unsigned int k = 0; k < N ; ++k) { + for (unsigned int l = 0; l < N ; ++l) { + invBeta[N*k + l]=Utilities::MPI::sum(invBetaLoc[N*k + l], mpi_communicator); + } + c[k]=Utilities::MPI::sum(cLoc[k], mpi_communicator); + } + // + pcout << " mixing check 1.2 " << std::endl ; + + // + // Invert beta + // + calldgesv(N, + &invBeta[0], + &beta[0]); + // + pcout << " mixing check 1.3 " << std::endl ; + + for (unsigned int m = 0; m < N ; ++m) + for (unsigned int l = 0; l < N ; ++l) + gamma[m] += c[l] * beta[N*m + l] ; + + // + pcout << " mixing check 1.4 " << std::endl ; + // + std::map > rhoInValuesOld= *rhoInValues; + rhoInVals.push_back(std::map >()); + rhoInValues=&(rhoInVals.back()); + // + std::map > gradRhoInValuesOld ; + if (dftParameters::xc_id == 4) + { + gradRhoInValuesOld=*gradRhoInValues; + gradRhoInVals.push_back(std::map >()); + gradRhoInValues=&(gradRhoInVals.back()); + } + // + cell = dofHandler.begin_active(); + for (; cell!=endc; ++cell) { + if (cell->is_locally_owned()){ + (*rhoInValues)[cell->id()]=std::vector(num_quad_points); + if (dftParameters::xc_id == 4) + (*gradRhoInValues)[cell->id()]=std::vector(3*num_quad_points); + fe_values.reinit (cell); + for (unsigned int q_point=0; q_pointid()][q_point]-(*rhoOutValues)[cell->id()][q_point],2.0)*fe_values.JxW(q_point); + //normValue+=0.1; + (*rhoInValues)[cell->id()][q_point] = rhoInValuesOld[cell->id()][q_point] + G * F[cell->id()][q_point] ; + //pcout << " mixing check 1.41 " << std::endl ; + if (dftParameters::xc_id == 4) + for (unsigned int dir=0; dir < 3; ++dir) + (*gradRhoInValues)[cell->id()][3*q_point + dir] = gradRhoInValuesOld[cell->id()][3*q_point + dir] + G * gradF[cell->id()][3*q_point+dir] ; + // + for (int i = 0; i < N; ++i){ + (*rhoInValues)[cell->id()][q_point] -= wt[i] * gamma[i] * (u[i])[cell->id()][q_point] ; + if (dftParameters::xc_id == 4) + for (unsigned int dir=0; dir < 3; ++dir) + (*gradRhoInValues)[cell->id()][3*q_point + dir] -= wt[i] * gamma[i] * (gradU[i])[cell->id()][3*q_point+dir] ; + } + } + //pcout << " mixing check 1.42 " << std::endl ; + } + } + // + //pcout << normValue << std::endl; + pcout << " mixing check 1.5 " << std::endl ; + // + + + + + return Utilities::MPI::sum(normValue, mpi_communicator); +} + + + +//implement Broyden mixing scheme +template +double dftClass::mixing_broyden_spinPolarized(){ + double normValue=0.0; + QGauss<3> quadrature(C_num1DQuad()); + FEValues<3> fe_values (FE, quadrature, update_JxW_values); + const unsigned int num_quad_points = quadrature.size(); + // + int N = rhoOutVals.size()- 1; + //if (rhoOutVals.size() > 2) + // N = u.size() ; + // + // + pcout << " mixing check 1.0 " << std::endl ; + std::map > delRho, delGradRho ; + dF.push_back(std::map >()); + u.push_back(std::map >()); + if (dftParameters::xc_id == 4) + { + graddF.push_back(std::map >()); + gradU.push_back(std::map >()); + } + // + double FOld ; + std::vector gradFOld (3,0.0) ; + // + //parallel loop over all elements + double dfMag = 0.0, dfMagLoc=0.0 ; + double wtTemp = 0.0, wtTempLoc=0.0 ; + double w0Loc = 0.0 ; + // + typename DoFHandler<3>::active_cell_iterator cell = dofHandler.begin_active(), endc = dofHandler.end(); + for (; cell!=endc; ++cell) { + if (cell->is_locally_owned()){ + // + (dF[N-1])[cell->id()]=std::vector(2*num_quad_points); + delRho[cell->id()]=std::vector(2*num_quad_points); + if (N==1) + F[cell->id()]=std::vector(2*num_quad_points); + // + if (dftParameters::xc_id == 4) + { + (graddF[N-1])[cell->id()]=std::vector(6*num_quad_points); + delGradRho[cell->id()]=std::vector(6*num_quad_points); + if (N==1) + gradF[cell->id()]=std::vector(6*num_quad_points); + } + fe_values.reinit (cell); + for (unsigned int q_point=0; q_point<2*num_quad_points; ++q_point){ // factor 2 due to spin splitting + if (N==1){ + FOld = ((rhoOutValsSpinPolarized[0])[cell->id()][q_point])- ((rhoInValsSpinPolarized[0])[cell->id()][q_point]); + //w0Loc += FOld * FOld * fe_values.JxW(q_point) ; + //F[cell->id()]=std::vector(num_quad_points); + if (dftParameters::xc_id == 4) + { + //gradF[cell->id()]=std::vector(6*num_quad_points); + for (unsigned int dir=0; dir < 3; ++dir) + gradFOld[dir] = ((gradRhoOutValsSpinPolarized[0])[cell->id()][3*q_point+dir])- ((gradRhoInValsSpinPolarized[0])[cell->id()][3*q_point+dir]); + } + } + else + { + FOld = F[cell->id()][q_point] ; + if (dftParameters::xc_id == 4) + for (unsigned int dir=0; dir < 3; ++dir) + gradFOld[dir] = gradF[cell->id()][3*q_point+dir] ; + } + // + //pcout << " mixing check 1.01 " << std::endl ; + F[cell->id()][q_point] = (rhoOutValsSpinPolarized[N])[cell->id()][q_point]- (rhoInValsSpinPolarized[N])[cell->id()][q_point]; + delRho[cell->id()][q_point] = (rhoInValsSpinPolarized[N])[cell->id()][q_point]- (rhoInValsSpinPolarized[N-1])[cell->id()][q_point]; + // + (dF[N-1])[cell->id()][q_point] = F[cell->id()][q_point]- FOld; + if (dftParameters::xc_id == 4) + { + for (unsigned int dir=0; dir < 3; ++dir) { + delGradRho[cell->id()][3*q_point+dir] = (gradRhoInValsSpinPolarized[N])[cell->id()][3*q_point + dir]- (gradRhoInValsSpinPolarized[N-1])[cell->id()][3*q_point+dir]; + gradF[cell->id()][3*q_point+dir] = (gradRhoOutValsSpinPolarized[N])[cell->id()][3*q_point + dir]- (gradRhoInValsSpinPolarized[N])[cell->id()][3*q_point+dir]; + (graddF[N-1])[cell->id()][3*q_point+dir] = gradF[cell->id()][3*q_point+dir]- gradFOld[dir]; + } + } + } + // + for (unsigned int q_point=0; q_pointid()][2*q_point] + (dF[N-1])[cell->id()][2*q_point+1] ) * ( (dF[N-1])[cell->id()][2*q_point] + (dF[N-1])[cell->id()][2*q_point+1] ) ) *fe_values.JxW(q_point); + wtTempLoc += ( (F[cell->id()][2*q_point] + F[cell->id()][2*q_point+1]) * ((F[cell->id()][2*q_point] + F[cell->id()][2*q_point+1]))) *fe_values.JxW(q_point) ; + if (N==1){ + FOld = ((rhoOutVals[0])[cell->id()][q_point])- ((rhoInVals[0])[cell->id()][q_point]); + w0Loc += FOld * FOld * fe_values.JxW(q_point) ; + } + } + } + } + // + wtTemp=Utilities::MPI::sum(wtTempLoc, mpi_communicator); + dfMag=Utilities::MPI::sum(dfMagLoc, mpi_communicator); + if (N==1) + w0 = Utilities::MPI::sum(w0Loc, mpi_communicator); + + // + pcout << " mixing check 1.1 " << std::endl ; + cell = dofHandler.begin_active(), endc = dofHandler.end(); + // + wtTemp = std::pow(wtTemp, -0.5 ) ; + wt.push_back(wtTemp) ; + double G = dftParameters::mixingParameter ; + // + std::vector c(N, 0.0) , invBeta(N*N, 0.0), beta(N*N, 0.0), gamma(N, 0.0), cLoc(N, 0.0) , invBetaLoc(N*N, 0.0) ; + for (; cell!=endc; ++cell) + if (cell->is_locally_owned()) + { + (u[N-1])[cell->id()]=std::vector(2*num_quad_points); + if (dftParameters::xc_id == 4) + (gradU[N-1])[cell->id()]=std::vector(6*num_quad_points); + fe_values.reinit (cell); + // + for (unsigned int q_point=0; q_pointid()][2*q_point] /= dfMag ; (dF[N-1])[cell->id()][2*q_point+1] /= dfMag ; + delRho[cell->id()][2*q_point] /= dfMag ; delRho[cell->id()][2*q_point+1] /= dfMag ; + // + (u[N-1])[cell->id()][2*q_point] = G * (dF[N-1])[cell->id()][2*q_point] + delRho[cell->id()][2*q_point] ; + (u[N-1])[cell->id()][2*q_point+1] = G * (dF[N-1])[cell->id()][2*q_point+1] + delRho[cell->id()][2*q_point+1] ; + // + if (dftParameters::xc_id == 4) + { + for (unsigned int dir=0; dir < 3; ++dir) { + (graddF[N-1])[cell->id()][6*q_point+dir] /= dfMag ; (graddF[N-1])[cell->id()][6*q_point+3+dir] /= dfMag ; + delGradRho[cell->id()][6*q_point+dir] /= dfMag ; delGradRho[cell->id()][6*q_point+3+dir] /= dfMag ; + // + (gradU[N-1])[cell->id()][6*q_point+dir] = G * (graddF[N-1])[cell->id()][6*q_point+dir] + delGradRho[cell->id()][6*q_point+dir] ; + (gradU[N-1])[cell->id()][6*q_point+3+dir] = G * (graddF[N-1])[cell->id()][6*q_point+3+dir] + delGradRho[cell->id()][6*q_point+3+dir] ; + } + } + // + //pcout << " mixing check 1.11 " << std::endl ; + // + for (unsigned int k = 0; k < N ; ++k) { + cLoc[k] += wt[k] * ( (dF[k])[cell->id()][2*q_point] + (dF[k])[cell->id()][2*q_point+1]) * ( F[cell->id()][2*q_point] + F[cell->id()][2*q_point+1] ) *fe_values.JxW(q_point); + for (unsigned int l = k; l < N ; ++l) + { + invBetaLoc[N*k + l] += wt[k] * wt[l] * ( (dF[k])[cell->id()][2*q_point] + (dF[k])[cell->id()][2*q_point+1]) * + ( (dF[l])[cell->id()][2*q_point] + (dF[l])[cell->id()][2*q_point+1]) *fe_values.JxW(q_point); + invBetaLoc[N*l + k] = invBetaLoc[N*k + l] ; + if (l==k) { + invBetaLoc[N*l + l] = w0*w0 + invBetaLoc[N*l + l] ; + beta[N*l + l] = 1.0 ; + } + } + } + } + } + // + for (unsigned int k = 0; k < N ; ++k) { + for (unsigned int l = 0; l < N ; ++l) { + invBeta[N*k + l]=Utilities::MPI::sum(invBetaLoc[N*k + l], mpi_communicator); + } + c[k]=Utilities::MPI::sum(cLoc[k], mpi_communicator); + } + // + pcout << " mixing check 1.2 " << std::endl ; + + // + // Invert beta + // + calldgesv(N, + &invBeta[0], + &beta[0]); + // + pcout << " mixing check 1.3 " << std::endl ; + + for (unsigned int m = 0; m < N ; ++m) + for (unsigned int l = 0; l < N ; ++l) + gamma[m] += c[l] * beta[N*m + l] ; + + // + pcout << " mixing check 1.4 " << std::endl ; + // + std::map > rhoInValuesOld= *rhoInValues; + rhoInVals.push_back(std::map >()); + rhoInValues=&(rhoInVals.back()); + // + std::map > rhoInValuesOldSpinPolarized= *rhoInValuesSpinPolarized; + rhoInValsSpinPolarized.push_back(std::map >()); + rhoInValuesSpinPolarized=&(rhoInValsSpinPolarized.back()); + // + std::map > gradRhoInValuesOld ; + std::map > gradRhoInValuesOldSpinPolarized ; + if (dftParameters::xc_id == 4) + { + gradRhoInValuesOld=*gradRhoInValues; + gradRhoInVals.push_back(std::map >()); + gradRhoInValues=&(gradRhoInVals.back()); + // + gradRhoInValuesOldSpinPolarized=*gradRhoInValuesSpinPolarized; + gradRhoInValsSpinPolarized.push_back(std::map >()); + gradRhoInValuesSpinPolarized=&(gradRhoInValsSpinPolarized.back()); + } + // + cell = dofHandler.begin_active(); + for (; cell!=endc; ++cell) { + if (cell->is_locally_owned()){ + (*rhoInValues)[cell->id()]=std::vector(num_quad_points); + (*rhoInValuesSpinPolarized)[cell->id()]=std::vector(2*num_quad_points); + if (dftParameters::xc_id == 4) + { + (*gradRhoInValues)[cell->id()]=std::vector(3*num_quad_points); + (*gradRhoInValuesSpinPolarized)[cell->id()]=std::vector(6*num_quad_points); + } + fe_values.reinit (cell); + for (unsigned int q_point=0; q_pointid()][q_point]-(*rhoOutValues)[cell->id()][q_point],2.0)*fe_values.JxW(q_point); + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] = rhoInValuesOldSpinPolarized[cell->id()][2*q_point] + G * F[cell->id()][2*q_point] ; + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] = rhoInValuesOldSpinPolarized[cell->id()][2*q_point+1] + G * F[cell->id()][2*q_point+1] ; + // + if (dftParameters::xc_id == 4) + for (unsigned int dir=0; dir < 3; ++dir) { + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + dir] = gradRhoInValuesOldSpinPolarized[cell->id()][6*q_point + dir] + G * gradF[cell->id()][6*q_point+dir] ; + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + 3 + dir] = gradRhoInValuesOldSpinPolarized[cell->id()][6*q_point + 3 + dir] + G * gradF[cell->id()][6*q_point+3+dir] ; + } + // + for (int i = 0; i < N; ++i){ + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] -= wt[i] * gamma[i] * (u[i])[cell->id()][2*q_point] ; + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] -= wt[i] * gamma[i] * (u[i])[cell->id()][2*q_point+1] ; + if (dftParameters::xc_id == 4) + for (unsigned int dir=0; dir < 3; ++dir) { + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + dir] -= wt[i] * gamma[i] * (gradU[i])[cell->id()][6*q_point+dir] ; + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + 3 + dir] -= wt[i] * gamma[i] * (gradU[i])[cell->id()][6*q_point+3+dir] ; + } + } + (*rhoInValues)[cell->id()][q_point] = (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] ; + if (dftParameters::xc_id == 4) + for (unsigned int dir=0; dir < 3; ++dir) + (*gradRhoInValues)[cell->id()][3*q_point+dir] = (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point+dir] + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point+3+dir] ; + + + } + //pcout << " mixing check 1.42 " << std::endl ; + } + } + // + //pcout << normValue << std::endl; + pcout << " mixing check 1.5 " << std::endl ; + // + + + + + return Utilities::MPI::sum(normValue, mpi_communicator); +} + + + template double dftClass::mixing_simple_spinPolarized() { @@ -451,7 +945,6 @@ double dftClass::mixing_anderson_spinPolarized(){ (*gradRhoInValues)[cell->id()]=std::vector(3*num_quad_points); (*gradRhoInValuesSpinPolarized)[cell->id()]=std::vector(6*num_quad_points); // - fe_values.reinit (cell); for (unsigned int q_point=0; q_point Date: Wed, 22 Aug 2018 15:47:51 -0400 Subject: [PATCH 10/59] ctests passed including energy and forces --- src/dft/dft.cc | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 979940c90..35a8581b3 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -1385,7 +1385,7 @@ namespace dftfe { if(dftParameters::isIonForce || dftParameters::isCellStress) { // - //Recreate the full dealii partitioned array + //Create the full dealii partitioned array // d_eigenVectorsFlattened.resize((1+dftParameters::spinPolarized)*d_kPointWeights.size()); @@ -1400,12 +1400,16 @@ namespace dftfe { } - const unsigned int localVectorSize = d_eigenVectorsFlattenedSTL[0].size()/numEigenValues; + + Assert(d_eigenVectorsFlattened[0].local_size()==d_eigenVectorsFlattenedSTL[0].size(), + dealii::ExcMessage("Incorrect local sizes of STL and dealii arrays")); constraintsNoneDataInfo.precomputeMaps(matrix_free_data.get_vector_partitioner(), d_eigenVectorsFlattened[0].get_partitioner(), numEigenValues); + const unsigned int localVectorSize = d_eigenVectorsFlattenedSTL[0].size()/numEigenValues; + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) @@ -1459,6 +1463,41 @@ namespace dftfe { } #endif + if(dftParameters::isIonForce || dftParameters::isCellStress) + { + // + //Create the full STL array from dealii flattened array + // + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + d_eigenVectorsFlattenedSTL[kPoint].resize(numEigenValues*matrix_free_data.get_vector_partitioner()->local_size(),dataTypes::number(0.0)); + + Assert(d_eigenVectorsFlattened[0].local_size()==d_eigenVectorsFlattenedSTL[0].size(), + dealii::ExcMessage("Incorrect local sizes of STL and dealii arrays")); + + const unsigned int localVectorSize = d_eigenVectorsFlattenedSTL[0].size()/numEigenValues; + + // + //copy the data into STL array + // + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + { + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + { + for(unsigned int iWave = 0; iWave < numEigenValues; ++iWave) + { + d_eigenVectorsFlattenedSTL[kPoint][iNode*numEigenValues+iWave] = d_eigenVectorsFlattened[kPoint].local_element(iNode*numEigenValues+iWave); + } + } + } + + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + { + d_eigenVectorsFlattened[kPoint].reinit(0); + } + + } + + //if (dftParameters::electrostaticsPRefinement) // computeElectrostaticEnergyPRefined(); From 8badafa1fa5857721f8653732e9a1ac41bb07253 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Wed, 22 Aug 2018 17:09:11 -0400 Subject: [PATCH 11/59] Minor memory alignment improvement. ctests passed --- src/dftOperator/hamiltonianMatrixCalculator.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/dftOperator/hamiltonianMatrixCalculator.cc b/src/dftOperator/hamiltonianMatrixCalculator.cc index ed4901830..e608b4202 100644 --- a/src/dftOperator/hamiltonianMatrixCalculator.cc +++ b/src/dftOperator/hamiltonianMatrixCalculator.cc @@ -153,7 +153,14 @@ void kohnShamDFTOperatorClass::computeHamiltonianMatrix(unsigned int kP for(unsigned int iSubCell = 0; iSubCell < n_sub_cells; ++iSubCell) { - d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement,0.0); + //FIXME: Aligning to 16 byte memory boundaries. However, this is not a guaranteed to align for 64 byte boundaries + //as required for efficient AVX512 vectorization. + //Use functions like mkl_malloc for 64 byte memory alignment. +#ifdef USE_COMPLEX + d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement+(numberDofsPerElement*numberDofsPerElement)%4); +#else + d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement+(numberDofsPerElement*numberDofsPerElement)%8); +#endif for(unsigned int iNode = 0; iNode < numberDofsPerElement; ++iNode) { for(unsigned int jNode = 0; jNode < numberDofsPerElement; ++jNode) From 0cdf4661670c2a0cf765b101b59a2e28c5c23f36 Mon Sep 17 00:00:00 2001 From: Vikram Gavini Date: Wed, 22 Aug 2018 22:07:58 +0000 Subject: [PATCH 12/59] A few edits to readme.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6d2d49b8b..8a535c22f 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ DFT-FE : Density Functional Theory With Finite-Elements About ----- -DFT-FE is a C++ code for materials modeling from first principles using Kohn-Sham density functional theory. +DFT-FE is a C++ code for materials modeling from first principles using Kohn-Sham density functional theory, developed by the Computational Materials Physics Group at University of Michigan(http://www-personal.umich.edu/~vikramg/). It is based on adaptive finite-element discretization that handles all-electron and pseudopotential calculations in the same framework, and incorporates scalable and efficient solvers for the solution of the Kohn-Sham equations. Importantly, DFT-FE can handle general geometries and boundary conditions, including periodic, semi-periodic and non-periodic systems. DFT-FE code builds on top of the deal.II library for everything that has to do with finite elements, geometries, meshes, etc., and, through deal.II on p4est for parallel adaptive mesh handling. @@ -34,7 +34,7 @@ More information For more information see: - - The official [website](https://sites.google.com/umich.edu/dftfe). + - The official [website](https://sites.google.com/umich.edu/dftfe) for information on code capabilities, appropriate referencing of the code, acknowledgements, and news related to DFT-FE. - Doxygen generated [documentation](https://dftfedevelopers.github.io/dftfe/). From ad57262058d33fdd6f8ffaae1b46776ecc1354a7 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Wed, 22 Aug 2018 22:10:20 +0000 Subject: [PATCH 13/59] README.md edited online with Bitbucket --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a535c22f..25c572ea8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ DFT-FE : Density Functional Theory With Finite-Elements About ----- -DFT-FE is a C++ code for materials modeling from first principles using Kohn-Sham density functional theory, developed by the Computational Materials Physics Group at University of Michigan(http://www-personal.umich.edu/~vikramg/). +DFT-FE is a C++ code for materials modeling from first principles using Kohn-Sham density functional theory, developed by the [Computational Materials Physics Group](http://www-personal.umich.edu/~vikramg) at University of Michigan. It is based on adaptive finite-element discretization that handles all-electron and pseudopotential calculations in the same framework, and incorporates scalable and efficient solvers for the solution of the Kohn-Sham equations. Importantly, DFT-FE can handle general geometries and boundary conditions, including periodic, semi-periodic and non-periodic systems. DFT-FE code builds on top of the deal.II library for everything that has to do with finite elements, geometries, meshes, etc., and, through deal.II on p4est for parallel adaptive mesh handling. From 1170effabb2917b7bfe50d1fc47c7a029e116505 Mon Sep 17 00:00:00 2001 From: Vikram Gavini Date: Wed, 22 Aug 2018 22:18:22 +0000 Subject: [PATCH 14/59] Some edits to readme.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 25c572ea8..8059b93e7 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,9 @@ Learn more about contributing to DFT-FE's development [here](https://github.com/ More information ---------------- -For more information see: - - - The official [website](https://sites.google.com/umich.edu/dftfe) for information on code capabilities, appropriate referencing of the code, acknowledgements, and news related to DFT-FE. + - See the official [website](https://sites.google.com/umich.edu/dftfe) for information on code capabilities, appropriate referencing of the code, acknowledgements, and news related to DFT-FE. - - Doxygen generated [documentation](https://dftfedevelopers.github.io/dftfe/). + - See Doxygen generated [documentation](https://dftfedevelopers.github.io/dftfe/). - For questions about DFT-FE, installation, bugs, etc., use the [DFT-FE discussion forum](https://groups.google.com/forum/#!forum/dftfe-user-group). From 1f980895825164bc5d5c1601da159d3453298368 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Wed, 22 Aug 2018 18:27:00 -0400 Subject: [PATCH 15/59] Removed merged conflicts and compilation fixes after merging --- src/linAlg/linearAlgebraOperationsInternal.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index 404e39118..6aaa5f25f 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -353,7 +353,7 @@ namespace dftfe if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(subspaceVectorsArray.get_mpi_communicator(), + dftUtils::printCurrentMemoryUsage(mpiComm, "Inside Blocked susbpace rotation"); for (unsigned int idof = 0; idof < maxNumLocalDofs; idof += dofsBlockSize) @@ -488,7 +488,7 @@ namespace dftfe for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors +iWave) - =subspaceVectorsArray[iNode*N+numberCoreVectors+iWave); + =subspaceVectorsArray[iNode*N+numberCoreVectors+iWave]; MPI_Allreduce(MPI_IN_PLACE, @@ -507,7 +507,7 @@ namespace dftfe else { MPI_Allreduce(MPI_IN_PLACE, - subspaceVectorsArray.begin(), + &subspaceVectorsArray[0], N*numLocalDofs, MPI_DOUBLE, MPI_SUM, From 8bd1e0b0e6e89a719ddd26e27a13c6822d6db227 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Wed, 22 Aug 2018 18:53:08 -0400 Subject: [PATCH 16/59] Cleaned up the code comments. --- src/dftOperator/hamiltonianMatrixCalculator.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dftOperator/hamiltonianMatrixCalculator.cc b/src/dftOperator/hamiltonianMatrixCalculator.cc index e608b4202..505975122 100644 --- a/src/dftOperator/hamiltonianMatrixCalculator.cc +++ b/src/dftOperator/hamiltonianMatrixCalculator.cc @@ -153,13 +153,13 @@ void kohnShamDFTOperatorClass::computeHamiltonianMatrix(unsigned int kP for(unsigned int iSubCell = 0; iSubCell < n_sub_cells; ++iSubCell) { - //FIXME: Aligning to 16 byte memory boundaries. However, this is not a guaranteed to align for 64 byte boundaries - //as required for efficient AVX512 vectorization. + //Aligning to 64 byte memory boundaries as required for efficient AVX512 vectorization. + //FIXME: However, this memory alignement is not guaranteed to work. //Use functions like mkl_malloc for 64 byte memory alignment. #ifdef USE_COMPLEX - d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement+(numberDofsPerElement*numberDofsPerElement)%4); + d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement+(numberDofsPerElement*numberDofsPerElement)%4,0.0); #else - d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement+(numberDofsPerElement*numberDofsPerElement)%8); + d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement+(numberDofsPerElement*numberDofsPerElement)%8,0.0); #endif for(unsigned int iNode = 0; iNode < numberDofsPerElement; ++iNode) { From ef84c3918a052fe7b37beba19cc2640329b9419f Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Wed, 22 Aug 2018 19:09:13 -0400 Subject: [PATCH 17/59] Broyden mixing added. ctests passed --- include/dft.h | 10 +- include/dftParameters.h | 2 +- src/dft/dft.cc | 494 +++++-- src/dft/mixingschemes.cc | 201 ++- .../dft/allElectron/complex/silicon_01.prm.in | 4 +- tests/dft/allElectron/real/methane_01.prm.in | 4 +- .../complex/cubicAlPrim_01.prm.in | 4 +- .../pseudopotential/complex/fccAl_01.prm.in | 4 +- .../pseudopotential/complex/fccAl_02.prm.in | 4 +- .../complex/graphene_01.prm.in | 4 +- .../complex/hcpMgPrim_01.prm.in | 4 +- .../complex/hcpMgPrim_01_c.prm.in | 4 +- .../complex/hcpMgPrim_01_d.prm.in | 4 +- .../complex/hcpMgPrim_02.prm.in | 4 +- .../complex/hcpMgPrim_02_b.prm.in | 4 +- .../complex/hcpMgPrim_03.prm.in | 4 +- .../complex/hcpMgPrim_04.prm.in | 4 +- .../complex/hcpMgPrim_04_b.prm.in | 4 +- .../complex/hcpMgPrim_04_c.prm.in | 4 +- .../complex/hcpMgPrim_05.prm.in | 4 +- .../complex/hcpMgPrim_06.prm.in | 4 +- .../complex/hcpMgPrim_06_b.prm.in | 4 +- .../complex/hcpMgPrim_07.prm.in | 4 +- .../complex/nitrogenMolecule_02.prm.in | 4 +- .../pseudopotential/real/Al_ONCV_PBE-1.0.upf | 1227 +++++++++++++++++ .../real/aluminumSingleAtom_01.prm.in | 4 +- .../real/aluminumSingleAtom_01_b.prm.in | 4 +- .../real/aluminumSingleAtom_02.output | 39 + .../real/aluminumSingleAtom_02.prm.in | 68 + .../real/aluminumSingleAtom_02_b.output | 39 + .../real/aluminumSingleAtom_02_b.prm.in | 70 + .../pseudopotential/real/hcpMgPrim_01.prm.in | 4 +- .../real/hcpMgPrim_01_b.prm.in | 4 +- .../real/hcpMgPrim_01_c.prm.in | 4 +- .../real/hcpMgPrim_01_d.prm.in | 4 +- .../real/hcpMgPrim_01_e.prm.in | 4 +- .../pseudopotential/real/hcpMgPrim_02.prm.in | 4 +- .../real/hcpMgPrim_02_b.prm.in | 4 +- .../real/hcpMgPrim_02_c.prm.in | 4 +- .../pseudopotential/real/hcpMgPrim_03.prm.in | 4 +- .../real/hcpMgPrim_03_b.prm.in | 4 +- .../real/hcpMgPrim_03_c.prm.in | 4 +- .../real/hcpMgPrim_03_d.prm.in | 4 +- .../real/nitrogenMolecule_01.prm.in | 4 +- .../real/nitrogenMolecule_02.prm.in | 4 +- .../dft/pseudopotential/real/pseudoAlONCV.inp | 1 + utils/dftParameters.cc | 6 +- 47 files changed, 1949 insertions(+), 352 deletions(-) create mode 100644 tests/dft/pseudopotential/real/Al_ONCV_PBE-1.0.upf create mode 100644 tests/dft/pseudopotential/real/aluminumSingleAtom_02.output create mode 100644 tests/dft/pseudopotential/real/aluminumSingleAtom_02.prm.in create mode 100644 tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output create mode 100644 tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.prm.in create mode 100644 tests/dft/pseudopotential/real/pseudoAlONCV.inp diff --git a/include/dft.h b/include/dft.h index e07b4bf81..d4d9829ba 100644 --- a/include/dft.h +++ b/include/dft.h @@ -607,11 +607,11 @@ namespace dftfe { std::deque >> gradRhoInVals,gradRhoInValsSpinPolarized,gradRhoOutVals, gradRhoOutValsSpinPolarized; // Broyden mixing related objects - std::map > F, gradF ; - std::deque >> dF, graddF ; - std::deque >> u, gradU ; - std::deque wt; - double w0 = 0.0 ; + std::map > FBroyden, gradFBroyden ; + std::deque >> dFBroyden, graddFBroyden ; + std::deque >> uBroyden, gradUBroyden ; + std::deque wtBroyden; + double w0Broyden = 0.0 ; // diff --git a/include/dftParameters.h b/include/dftParameters.h index 212dcf4c6..1c48f3fda 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -46,7 +46,7 @@ namespace dftfe { extern double outerAtomBallRadius, meshSizeOuterDomain; extern double meshSizeInnerBall, meshSizeOuterBall; extern double chebyshevTolerance; - std::string mixingMethod ; + extern std::string mixingMethod ; extern bool isIonOpt, isCellOpt, isIonForce, isCellStress; diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 037b8fcef..91659a0f9 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -18,6 +18,7 @@ //Include header files #include +#include #include #include #include @@ -66,7 +67,6 @@ namespace dftfe { #include "mixingschemes.cc" #include "kohnShamEigenSolve.cc" #include "restart.cc" -//#include "electrostaticPRefinedEnergy.cc" #include "moveAtoms.cc" // @@ -96,7 +96,7 @@ namespace dftfe { pcout (std::cout, (Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)), computing_timer (pcout, dftParameters::reproducible_output - || dftParameters::verbosity<2? TimerOutput::never : TimerOutput::summary, + || dftParameters::verbosity<4? TimerOutput::never : TimerOutput::summary, TimerOutput::wall_times), computingTimerStandard(pcout, dftParameters::reproducible_output @@ -185,6 +185,7 @@ namespace dftfe { template void dftClass::set() { + computingTimerStandard.enter_section("Atomic system initialization"); if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, "Entered call to set"); @@ -199,7 +200,10 @@ namespace dftfe { //read fractionalCoordinates of atoms in periodic case // dftUtils::readFile(numberColumnsCoordinatesFile, atomLocations, dftParameters::coordinatesFile); - AssertThrow(dftParameters::natoms==atomLocations.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.")); + AssertThrow(dftParameters::natoms==atomLocations.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: " << atomLocations.size() << "\n"; atomLocationsFractional.resize(atomLocations.size()) ; // @@ -208,6 +212,14 @@ namespace dftfe { for (std::vector >::iterator it=atomLocations.begin(); it >::iterator it=atomLocations.begin(); it cross; + dftUtils::cross_product(d_domainBoundingVectors[0], + d_domainBoundingVectors[1], + cross); + + double scalarConst = d_domainBoundingVectors[2][0]*cross[0] + d_domainBoundingVectors[2][1]*cross[1] + d_domainBoundingVectors[2][2]*cross[2]; + AssertThrow(scalarConst>0,ExcMessage("DFT-FE Error: Domain bounding vectors or lattice vectors read from" + "input file (input through DOMAIN VECTORS FILE) should form a right-handed coordinate system." + "Please check your domain vectors file. This is usually fixed by changing the order of the" + "vectors in the domain vectors file.")); + pcout << "number of atoms types: " << atomTypes.size() << "\n"; + + // //determine number of electrons + // for(unsigned int iAtom = 0; iAtom < atomLocations.size(); iAtom++) { const unsigned int Z = atomLocations[iAtom][0]; @@ -253,30 +296,43 @@ namespace dftfe { numElectrons += valenceZ; else numElectrons += Z; - // - } - // - // - if (dftParameters::constraintMagnetization) - { - numElectronsUp = std::ceil(static_cast(numElectrons)/2.0); - numElectronsDown = numElectrons - numElectronsUp; - // - int netMagnetization = std::round(2.0 * static_cast(numElectrons) * dftParameters::start_magnetization ) ; - // - while ( (numElectronsUp-numElectronsDown) < std::abs(netMagnetization)) - { - numElectronsDown -=1 ; - numElectronsUp +=1 ; - } } - numElectrons += (int) std::round(dftParameters::tot_charge) ; + + if(dftParameters::numberEigenValues <= numElectrons/2.0) + { + if(dftParameters::verbosity >= 1) + { + pcout <<" Warning: User has requested the number of Kohn-Sham wavefunctions to be less than or" + "equal to half the number of electrons in the system. Setting the Kohn-Sham wavefunctions" + "to half the number of electrons with a 10 percent buffer to avoid convergence issues in" + "SCF iterations"<= 1) + { + pcout <<" Setting the number of Kohn-Sham wave functions to be set to "<initPseudoData(); } @@ -368,8 +417,16 @@ namespace dftfe { for(unsigned int i = 0; i < atomLocationsFractional.size(); ++i) { for(unsigned int idim = 0; idim < 3; ++idim) + { if (periodicBc[idim]) - AssertThrow(atomLocationsFractional[i][2+idim]>-tol && atomLocationsFractional[i][2+idim]<1.0+tol,ExcMessage("DFT-FE Error: periodic direction fractional coordinates doesn't lie in [0,1]. Please check input fractional coordinates, or if this is an ionic relaxation step, please check the corresponding algorithm.")); + AssertThrow(atomLocationsFractional[i][2+idim]>-tol && atomLocationsFractional[i][2+idim]<1.0+tol,ExcMessage("DFT-FE Error: periodic direction fractional coordinates doesn't lie in [0,1]. Please check input" + "fractional coordinates, or if this is an ionic relaxation step, please check the corresponding" + "algorithm.")); + if (!periodicBc[idim]) + AssertThrow(atomLocationsFractional[i][2+idim]>tol && atomLocationsFractional[i][2+idim]<1.0-tol,ExcMessage("DFT-FE Error: non-periodic direction fractional coordinates doesn't lie in (0,1). Please check" + "input fractional coordinates, or if this is an ionic relaxation step, please check the" + "corresponding algorithm.")); + } } generateImageCharges(d_pspCutOff, @@ -389,22 +446,10 @@ namespace dftfe { internaldft::convertToCellCenteredCartesianCoordinates(atomLocations, d_domainBoundingVectors); - // - //print cartesian coordinates - // - if (dftParameters::verbosity>=2) { - pcout<<"------------Cartesian coordinates of atoms (origin at center of domain)------------------"<=2) + if (dftParameters::verbosity>=4) { //FIXME: Print all k points across all pools pcout<<"-------------------k points cartesian coordinates and weights-----------------------------"< void dftClass::init (const unsigned int usePreviousGroundStateFields) { - computingTimerStandard.enter_section("Pre-processing steps"); + computingTimerStandard.enter_section("KSDFT problem initialization"); if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, @@ -523,15 +568,16 @@ namespace dftfe { if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, "initPseudopotential completed"); - computingTimerStandard.exit_section("Pre-processing steps"); + computingTimerStandard.exit_section("KSDFT problem initialization"); } template void dftClass::initNoRemesh() { - computingTimerStandard.enter_section("Pre-processing steps"); + computingTimerStandard.enter_section("KSDFT problem initialization"); initImageChargesUpdateKPoints(); + updatePrevMeshDataStructures(); // //reinitialize dirichlet BCs for total potential and vSelf poisson solutions // @@ -545,7 +591,7 @@ namespace dftfe { //reinitialize pseudopotential related data structures // initPseudoPotentialAll(); - computingTimerStandard.exit_section("Pre-processing steps"); + computingTimerStandard.exit_section("KSDFT problem initialization"); } // @@ -616,6 +662,9 @@ namespace dftfe { 2, d_phiExt, d_noConstraints, + d_imagePositions, + d_imageIds, + d_imageCharges, d_localVselfs); computingTimerStandard.exit_section("Nuclear self-potential solve"); computing_timer.exit_section("Nuclear self-potential solve"); @@ -631,9 +680,9 @@ namespace dftfe { // - //create eigenClass object + //create kohnShamDFTOperatorClass object // - eigenClass kohnShamDFTEigenOperator(this,mpi_communicator); + kohnShamDFTOperatorClass kohnShamDFTEigenOperator(this,mpi_communicator); kohnShamDFTEigenOperator.init(); if (dftParameters::verbosity>=4) @@ -702,9 +751,9 @@ namespace dftfe { { if (dftParameters::spinPolarized==1) { - if (dftParameters::mixingMethod=="ANDERSON") + if (dftParameters::mixingMethod=="ANDERSON" ) norm = sqrt(mixing_anderson_spinPolarized()); - if (dftParameters::mixingMethod=="BROYDEN") + if (dftParameters::mixingMethod=="BROYDEN" ) norm = sqrt(mixing_broyden_spinPolarized()); } else @@ -716,9 +765,10 @@ namespace dftfe { } if (dftParameters::verbosity>=1) - pcout<<"Anderson mixing, L2 norm of electron-density difference: "<< norm<< std::endl; + pcout<<"L2 norm of electron-density difference: "<< norm<< std::endl; } + d_phiTotRhoIn = d_phiTotRhoOut; } else if (dftParameters::restartFromChk && dftParameters::chkType==2) @@ -750,7 +800,6 @@ namespace dftfe { phiTotDofHandlerIndex, d_atomNodeIdToChargeMap, *rhoInValues, - backgroundCharge, false); else phiTotalSolverProblem.reinit(matrix_free_data, @@ -758,8 +807,7 @@ namespace dftfe { *d_constraintsVector[phiTotDofHandlerIndex], phiTotDofHandlerIndex, d_atomNodeIdToChargeMap, - *rhoInValues, - backgroundCharge); + *rhoInValues); dealiiCGSolver.solve(phiTotalSolverProblem, @@ -776,13 +824,15 @@ namespace dftfe { if (dftParameters::spinPolarized==1) { - std::vector > > eigenValuesSpins(2, - std::vector >(d_kPointWeights.size(), - std::vector(numEigenValues))); + std::vector > > + eigenValuesSpins(2, + std::vector >(d_kPointWeights.size(), + std::vector(numEigenValuesRR))); - std::vector>> residualNormWaveFunctionsAllkPointsSpins(2, - std::vector >(d_kPointWeights.size(), - std::vector(numEigenValues))); + std::vector>> + residualNormWaveFunctionsAllkPointsSpins(2, + std::vector >(d_kPointWeights.size(), + std::vector(numEigenValuesRR))); for(unsigned int s=0; s<2; ++s) { @@ -811,7 +861,7 @@ namespace dftfe { dftUtils::printCurrentMemoryUsage(mpi_communicator, "Hamiltonian Matrix computed"); - for(unsigned int j = 0; j < dftParameters::numPass; ++j) + for(unsigned int j = 0; j < 1; ++j) { if (dftParameters::verbosity>=2) pcout<<"Beginning Chebyshev filter pass "<< j+1<< " for spin "<< s+1<=2) - pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; + { + pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; + } //if the residual norm is greater than adaptiveChebysevFilterPassesTol (a heuristic value) // do more passes of chebysev filter till the check passes. @@ -880,7 +931,7 @@ namespace dftfe { { kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); if (dftParameters::verbosity>=2) - pcout<< "Beginning Chebyshev filter pass "<< dftParameters::numPass+count<< " for spin "<< s+1<=2) + { + pcout << "Fermi Energy computed: "<> residualNormWaveFunctionsAllkPoints; residualNormWaveFunctionsAllkPoints.resize(d_kPointWeights.size()); for(unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) - residualNormWaveFunctionsAllkPoints[kPoint].resize(numEigenValues); + residualNormWaveFunctionsAllkPoints[kPoint].resize(numEigenValuesRR); if(dftParameters::xc_id < 4) { @@ -954,7 +1010,7 @@ namespace dftfe { if (dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, "Hamiltonian Matrix computed"); - for(unsigned int j = 0; j < dftParameters::numPass; ++j) + for(unsigned int j = 0; j < 1; ++j) { if (dftParameters::verbosity>=2) pcout<< "Beginning Chebyshev filter pass "<< j+1<=2) pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; @@ -1001,34 +1057,39 @@ namespace dftfe { { kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); if (dftParameters::verbosity>=2) - pcout<< "Beginning Chebyshev filter pass "<< dftParameters::numPass+count<=4) + if(dftParameters::verbosity>=4) dftUtils::printCurrentMemoryUsage(mpi_communicator, - "Hamiltonian Matrix computed"); + "Hamiltonian Matrix computed"); kohnShamEigenSpaceCompute(0, kPoint, kohnShamDFTEigenOperator, subspaceIterationSolver, - residualNormWaveFunctionsAllkPoints[kPoint]); + residualNormWaveFunctionsAllkPoints[kPoint], + true); } count++; - if (dftParameters::constraintMagnetization) - compute_fermienergy_constraintMagnetization(); - else - compute_fermienergy(); + compute_fermienergy(eigenValues, + numElectrons); maxRes = computeMaximumHighestOccupiedStateResidualNorm (residualNormWaveFunctionsAllkPoints, - eigenValues, + eigenValuesRRSplit, fermiEnergy); if (dftParameters::verbosity>=2) pcout << "Maximum residual norm of the state closest to and below Fermi level: "<< maxRes << std::endl; } - numberChebyshevSolvePasses=dftParameters::numPass+count-1; + + numberChebyshevSolvePasses=count; + + if(dftParameters::verbosity>=2) + { + pcout << "Fermi Energy computed: "<=2) pcout<< std::endl<<"Poisson solve for total electrostatic potential (rhoOut+b): "; @@ -1102,7 +1163,6 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, - backgroundCharge, 0, dftParameters::verbosity>=2) : energyCalc.computeEnergySpinPolarized(dofHandler, @@ -1112,8 +1172,6 @@ namespace dftfe { eigenValues, d_kPointWeights, fermiEnergy, - fermiEnergyUp, - fermiEnergyDown, funcX, funcC, d_phiTotRhoIn, @@ -1131,14 +1189,17 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, - backgroundCharge, 0, dftParameters::verbosity>=2); if (dftParameters::verbosity==1) - { pcout<<"Total energy : " << totalEnergy << std::endl; - } } + else + { + if (numEigenValuesRR!=numEigenValues && dftParameters::computeEnergyEverySCF && dftParameters::verbosity>=1) + pcout<<"DFT-FE Message: energy computation is not performed at the end of each scf iteration step\n"<<"if SPECTRUM SPLIT CORE EIGENSTATES is set to a non-zero value."<< std::endl; + } + if (dftParameters::verbosity>=1) pcout<<"***********************Self-Consistent-Field Iteration: "<>> + residualNormWaveFunctionsAllkPointsSpins(2, + std::vector >(d_kPointWeights.size(), + std::vector(numEigenValues))); + + for(unsigned int s=0; s<2; ++s) + { + + if(dftParameters::xc_id < 4) + { + computing_timer.enter_section("VEff Computation"); + kohnShamDFTEigenOperator.computeVEffSpinPolarized(rhoInValuesSpinPolarized, d_phiTotRhoIn, d_phiExt, s, pseudoValues); + computing_timer.exit_section("VEff Computation"); + } + else if (dftParameters::xc_id == 4) + { + computing_timer.enter_section("VEff Computation"); + kohnShamDFTEigenOperator.computeVEffSpinPolarized(rhoInValuesSpinPolarized, gradRhoInValuesSpinPolarized, d_phiTotRhoIn, d_phiExt, s, pseudoValues); + computing_timer.exit_section("VEff Computation"); + } + for (unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) + { + kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); + + + computing_timer.enter_section("Hamiltonian Matrix Computation"); + kohnShamDFTEigenOperator.computeHamiltonianMatrix(kPoint); + computing_timer.exit_section("Hamiltonian Matrix Computation"); + + + + if (dftParameters::verbosity>=2) + pcout<<"Doing one full spectrum Chebyshev filter pass for spin "<< s+1<> residualNormWaveFunctionsAllkPoints; + residualNormWaveFunctionsAllkPoints.resize(d_kPointWeights.size()); + for(unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) + residualNormWaveFunctionsAllkPoints[kPoint].resize(numEigenValues); + + for (unsigned int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) + { + kohnShamDFTEigenOperator.reinitkPointIndex(kPoint); + + computing_timer.enter_section("Hamiltonian Matrix Computation"); + kohnShamDFTEigenOperator.computeHamiltonianMatrix(kPoint); + computing_timer.exit_section("Hamiltonian Matrix Computation"); + + + + if (dftParameters::verbosity>=2) + pcout<<"Doing one full spectrum Chebyshev filter pass "<=2) pcout<< std::endl<<"Poisson solve for total electrostatic potential (rhoOut+b): "; @@ -1172,7 +1316,6 @@ namespace dftfe { phiTotDofHandlerIndex, d_atomNodeIdToChargeMap, *rhoOutValues, - backgroundCharge, false); @@ -1182,7 +1325,6 @@ namespace dftfe { dftParameters::verbosity); computing_timer.exit_section("phiTot solve"); - } // // compute and print ground state energy or energy after max scf iterations @@ -1209,7 +1351,6 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, - backgroundCharge, 1, true) : energyCalc.computeEnergySpinPolarized(dofHandler, @@ -1219,8 +1360,6 @@ namespace dftfe { eigenValues, d_kPointWeights, fermiEnergy, - fermiEnergyUp, - fermiEnergyDown, funcX, funcC, d_phiTotRhoIn, @@ -1238,7 +1377,6 @@ namespace dftfe { d_atomNodeIdToChargeMap, atomLocations.size(), lowerBoundKindex, - backgroundCharge, 1, true); @@ -1280,86 +1418,135 @@ namespace dftfe { //if (dftParameters::electrostaticsPRefinement) // computeElectrostaticEnergyPRefined(); - // - pcout << " check 0.0 " << std::endl; - //hyperFineTensor(rhoOutValuesSpinPolarized) ; - //computeDTensorWrapper() ; - efgTensor(rhoOutValues) ; - // - computeNodalRhoFromQuadData(); - + if (dftParameters::writeWfcSolutionFields) + outputWfc(); - if (dftParameters::writeSolutionFields) - output(); + if (dftParameters::writeDensitySolutionFields) + outputDensity(); if (dftParameters::verbosity>=1) pcout << std::endl<< "Elapsed wall time since start of the program: " << d_globalTimer.wall_time() << " seconds\n"< - void dftClass::output() + void dftClass::outputWfc() { DataOut<3> data_outEigen; data_outEigen.attach_dof_handler (dofHandlerEigen); std::vector tempVec(1); tempVec[0].reinit(d_tempEigenVec); - for(unsigned int i=0; i()); - std::ofstream output ("eigen.vtu"); dftUtils::writeDataVTUParallelLowestPoolId(data_outEigen, mpi_communicator, interpoolcomm, interBandGroupComm, - std::string("eigen")); + "wfcOutput"); + } + + //Output density + template + void dftClass::outputDensity() + { // //compute nodal electron-density from quad data // dealii::parallel::distributed::Vector rhoNodalField; matrix_free_data.initialize_dof_vector(rhoNodalField,densityDofHandlerIndex); rhoNodalField=0; + std::function::active_cell_iterator & cell , + const unsigned int q)> funcRho = + [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , + const unsigned int q) + {return (*rhoOutValues).find(cell->id())->second[q];}; dealii::VectorTools::project<3,dealii::parallel::distributed::Vector> (dealii::MappingQ1<3,3>(), dofHandler, constraintsNone, QGauss<3>(C_num1DQuad()), - [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , const unsigned int q) -> double {return (*rhoOutValues).find(cell->id())->second[q];}, + funcRho, rhoNodalField); rhoNodalField.update_ghost_values(); + dealii::parallel::distributed::Vector rhoNodalFieldSpin0; + dealii::parallel::distributed::Vector rhoNodalFieldSpin1; + if (dftParameters::spinPolarized==1) + { + matrix_free_data.initialize_dof_vector(rhoNodalFieldSpin0,densityDofHandlerIndex); + rhoNodalFieldSpin0=0; + std::function::active_cell_iterator & cell , + const unsigned int q)> funcRhoSpin0 = + [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , + const unsigned int q) + {return (*rhoOutValuesSpinPolarized).find(cell->id())->second[2*q];}; + dealii::VectorTools::project<3,dealii::parallel::distributed::Vector> (dealii::MappingQ1<3,3>(), + dofHandler, + constraintsNone, + QGauss<3>(C_num1DQuad()), + funcRhoSpin0, + rhoNodalFieldSpin0); + rhoNodalFieldSpin0.update_ghost_values(); + + + matrix_free_data.initialize_dof_vector(rhoNodalFieldSpin1,densityDofHandlerIndex); + rhoNodalFieldSpin1=0; + std::function::active_cell_iterator & cell , + const unsigned int q)> funcRhoSpin1 = + [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , + const unsigned int q) + {return (*rhoOutValuesSpinPolarized).find(cell->id())->second[2*q+1];}; + dealii::VectorTools::project<3,dealii::parallel::distributed::Vector> (dealii::MappingQ1<3,3>(), + dofHandler, + constraintsNone, + QGauss<3>(C_num1DQuad()), + funcRhoSpin1, + rhoNodalFieldSpin1); + rhoNodalFieldSpin1.update_ghost_values(); + } + // //only generate output for electron-density // DataOut<3> dataOutRho; dataOutRho.attach_dof_handler(dofHandler); - char buffer[100]; sprintf(buffer,"rhoField"); - dataOutRho.add_data_vector(rhoNodalField, buffer); + dataOutRho.add_data_vector(rhoNodalField, std::string("density")); + if (dftParameters::spinPolarized==1) + { + dataOutRho.add_data_vector(rhoNodalFieldSpin0, std::string("density_0")); + dataOutRho.add_data_vector(rhoNodalFieldSpin1, std::string("density_1")); + } dataOutRho.build_patches(C_num1DQuad()); dftUtils::writeDataVTUParallelLowestPoolId(dataOutRho, mpi_communicator, interpoolcomm, interBandGroupComm, - std::string("rhoField")); + "densityOutput"); } @@ -1377,3 +1564,4 @@ namespace dftfe { template class dftClass<12>; } + diff --git a/src/dft/mixingschemes.cc b/src/dft/mixingschemes.cc index 727112e51..10d61ddb9 100644 --- a/src/dft/mixingschemes.cc +++ b/src/dft/mixingschemes.cc @@ -1,6 +1,6 @@ // --------------------------------------------------------------------- // -// Copyright (c) 2017 The Regents of the University of Michigan and DFT-FE authors. +// Copyright (c) 2017-2018 The Regents of the University of Michigan and DFT-FE authors. // // This file is part of the DFT-FE code. // @@ -13,15 +13,12 @@ // // --------------------------------------------------------------------- // -// @author Shiva Rudraraju (2016), Phani Motamarri (2016), Krishnendu Ghosh(2017) +// @author Shiva Rudraraju, Phani Motamarri, Krishnendu Ghosh // //source file for all the mixing schemes -#include - -using namespace std; - + void calldgesv(const unsigned int dimensionMatrix, double *matrix, double *matrixInverse) @@ -41,7 +38,6 @@ void calldgesv(const unsigned int dimensionMatrix, } - //implement simple mixing scheme template double dftClass::mixing_simple() @@ -206,6 +202,7 @@ double dftClass::mixing_anderson(){ if (cell->is_locally_owned()) { (*gradRhoInValues)[cell->id()]=std::vector(3*num_quad_points); + fe_values.reinit (cell); for (unsigned int q_point=0; q_point::mixing_broyden(){ FEValues<3> fe_values (FE, quadrature, update_JxW_values); const unsigned int num_quad_points = quadrature.size(); // - int N = rhoOutVals.size()- 1; - //if (rhoOutVals.size() > 2) - // N = u.size() ; + int N = dFBroyden.size() + 1; // - // - pcout << " mixing check 1.0 " << std::endl ; std::map > delRho, delGradRho ; - dF.push_back(std::map >()); - u.push_back(std::map >()); + dFBroyden.push_back(std::map >()); + uBroyden.push_back(std::map >()); if (dftParameters::xc_id == 4) { - graddF.push_back(std::map >()); - gradU.push_back(std::map >()); + graddFBroyden.push_back(std::map >()); + gradUBroyden.push_back(std::map >()); } // double FOld ; @@ -280,54 +273,51 @@ double dftClass::mixing_broyden(){ for (; cell!=endc; ++cell) { if (cell->is_locally_owned()){ // - (dF[N-1])[cell->id()]=std::vector(num_quad_points); + (dFBroyden[N-1])[cell->id()]=std::vector(num_quad_points); delRho[cell->id()]=std::vector(num_quad_points); if (N==1) - F[cell->id()]=std::vector(num_quad_points); + FBroyden[cell->id()]=std::vector(num_quad_points); // if (dftParameters::xc_id == 4) { - (graddF[N-1])[cell->id()]=std::vector(3*num_quad_points); + (graddFBroyden[N-1])[cell->id()]=std::vector(3*num_quad_points); delGradRho[cell->id()]=std::vector(3*num_quad_points); if (N==1) - gradF[cell->id()]=std::vector(3*num_quad_points); + gradFBroyden[cell->id()]=std::vector(3*num_quad_points); } fe_values.reinit (cell); for (unsigned int q_point=0; q_pointid()][q_point])- ((rhoInVals[0])[cell->id()][q_point]); w0Loc += FOld * FOld * fe_values.JxW(q_point) ; - //F[cell->id()]=std::vector(num_quad_points); if (dftParameters::xc_id == 4) { - //gradF[cell->id()]=std::vector(3*num_quad_points); for (unsigned int dir=0; dir < 3; ++dir) gradFOld[dir] = ((gradRhoOutVals[0])[cell->id()][3*q_point+dir])- ((gradRhoInVals[0])[cell->id()][3*q_point+dir]); } } else { - FOld = F[cell->id()][q_point] ; + FOld = FBroyden[cell->id()][q_point] ; if (dftParameters::xc_id == 4) for (unsigned int dir=0; dir < 3; ++dir) - gradFOld[dir] = gradF[cell->id()][3*q_point+dir] ; + gradFOld[dir] = gradFBroyden[cell->id()][3*q_point+dir] ; } // - //pcout << " mixing check 1.01 " << std::endl ; - F[cell->id()][q_point] = (rhoOutVals[N])[cell->id()][q_point]- (rhoInVals[N])[cell->id()][q_point]; + FBroyden[cell->id()][q_point] = (rhoOutVals[N])[cell->id()][q_point]- (rhoInVals[N])[cell->id()][q_point]; delRho[cell->id()][q_point] = (rhoInVals[N])[cell->id()][q_point]- (rhoInVals[N-1])[cell->id()][q_point]; // - (dF[N-1])[cell->id()][q_point] = F[cell->id()][q_point]- FOld; + (dFBroyden[N-1])[cell->id()][q_point] = FBroyden[cell->id()][q_point]- FOld; if (dftParameters::xc_id == 4) { for (unsigned int dir=0; dir < 3; ++dir) { delGradRho[cell->id()][3*q_point+dir] = (gradRhoInVals[N])[cell->id()][3*q_point + dir]- (gradRhoInVals[N-1])[cell->id()][3*q_point+dir]; - gradF[cell->id()][3*q_point+dir] = (gradRhoOutVals[N])[cell->id()][3*q_point + dir]- (gradRhoInVals[N])[cell->id()][3*q_point+dir]; - (graddF[N-1])[cell->id()][3*q_point+dir] = gradF[cell->id()][3*q_point+dir]- gradFOld[dir]; + gradFBroyden[cell->id()][3*q_point+dir] = (gradRhoOutVals[N])[cell->id()][3*q_point + dir]- (gradRhoInVals[N])[cell->id()][3*q_point+dir]; + (graddFBroyden[N-1])[cell->id()][3*q_point+dir] = gradFBroyden[cell->id()][3*q_point+dir]- gradFOld[dir]; } } - dfMagLoc += (dF[N-1])[cell->id()][q_point] * (dF[N-1])[cell->id()][q_point] *fe_values.JxW(q_point); - wtTempLoc += F[cell->id()][q_point] * F[cell->id()][q_point] *fe_values.JxW(q_point) ; + dfMagLoc += (dFBroyden[N-1])[cell->id()][q_point] * (dFBroyden[N-1])[cell->id()][q_point] *fe_values.JxW(q_point); + wtTempLoc += FBroyden[cell->id()][q_point] * FBroyden[cell->id()][q_point] *fe_values.JxW(q_point) ; } } } @@ -335,50 +325,47 @@ double dftClass::mixing_broyden(){ wtTemp=Utilities::MPI::sum(wtTempLoc, mpi_communicator); dfMag=Utilities::MPI::sum(dfMagLoc, mpi_communicator); if (N==1) - w0 = Utilities::MPI::sum(w0Loc, mpi_communicator); + w0Broyden = Utilities::MPI::sum(w0Loc, mpi_communicator); // - pcout << " mixing check 1.1 " << std::endl ; cell = dofHandler.begin_active(), endc = dofHandler.end(); // wtTemp = std::pow(wtTemp, -0.5 ) ; - wt.push_back(wtTemp) ; + wtBroyden.push_back(wtTemp) ; double G = dftParameters::mixingParameter ; // std::vector c(N, 0.0) , invBeta(N*N, 0.0), beta(N*N, 0.0), gamma(N, 0.0), cLoc(N, 0.0) , invBetaLoc(N*N, 0.0) ; for (; cell!=endc; ++cell) if (cell->is_locally_owned()) { - (u[N-1])[cell->id()]=std::vector(num_quad_points); + (uBroyden[N-1])[cell->id()]=std::vector(num_quad_points); if (dftParameters::xc_id == 4) - (gradU[N-1])[cell->id()]=std::vector(3*num_quad_points); + (gradUBroyden[N-1])[cell->id()]=std::vector(3*num_quad_points); fe_values.reinit (cell); // for (unsigned int q_point=0; q_pointid()][q_point] /= dfMag ; + (dFBroyden[N-1])[cell->id()][q_point] /= dfMag ; delRho[cell->id()][q_point] /= dfMag ; - (u[N-1])[cell->id()][q_point] = G * (dF[N-1])[cell->id()][q_point] + delRho[cell->id()][q_point] ; + (uBroyden[N-1])[cell->id()][q_point] = G * (dFBroyden[N-1])[cell->id()][q_point] + delRho[cell->id()][q_point] ; // if (dftParameters::xc_id == 4) { for (unsigned int dir=0; dir < 3; ++dir) { - (graddF[N-1])[cell->id()][3*q_point+dir] /= dfMag ; + (graddFBroyden[N-1])[cell->id()][3*q_point+dir] /= dfMag ; delGradRho[cell->id()][3*q_point+dir] /= dfMag ; - (gradU[N-1])[cell->id()][3*q_point+dir] = G * (graddF[N-1])[cell->id()][3*q_point+dir] + delGradRho[cell->id()][3*q_point+dir] ; + (gradUBroyden[N-1])[cell->id()][3*q_point+dir] = G * (graddFBroyden[N-1])[cell->id()][3*q_point+dir] + delGradRho[cell->id()][3*q_point+dir] ; } } - // - //pcout << " mixing check 1.11 " << std::endl ; // for (unsigned int k = 0; k < N ; ++k) { - cLoc[k] += wt[k] * (dF[k])[cell->id()][q_point] * F[cell->id()][q_point] *fe_values.JxW(q_point); + cLoc[k] += wtBroyden[k] * (dFBroyden[k])[cell->id()][q_point] * FBroyden[cell->id()][q_point] *fe_values.JxW(q_point); for (unsigned int l = k; l < N ; ++l) { - invBetaLoc[N*k + l] += wt[k] * wt[l] * (dF[k])[cell->id()][q_point] * (dF[l])[cell->id()][q_point] *fe_values.JxW(q_point); + invBetaLoc[N*k + l] += wtBroyden[k] * wtBroyden[l] * (dFBroyden[k])[cell->id()][q_point] * (dFBroyden[l])[cell->id()][q_point] *fe_values.JxW(q_point); invBetaLoc[N*l + k] = invBetaLoc[N*k + l] ; if (l==k) { - invBetaLoc[N*l + l] = w0*w0 + invBetaLoc[N*l + l] ; + invBetaLoc[N*l + l] = w0Broyden*w0Broyden + invBetaLoc[N*l + l] ; beta[N*l + l] = 1.0 ; } } @@ -392,8 +379,6 @@ double dftClass::mixing_broyden(){ } c[k]=Utilities::MPI::sum(cLoc[k], mpi_communicator); } - // - pcout << " mixing check 1.2 " << std::endl ; // // Invert beta @@ -401,15 +386,11 @@ double dftClass::mixing_broyden(){ calldgesv(N, &invBeta[0], &beta[0]); - // - pcout << " mixing check 1.3 " << std::endl ; + for (unsigned int m = 0; m < N ; ++m) for (unsigned int l = 0; l < N ; ++l) gamma[m] += c[l] * beta[N*m + l] ; - - // - pcout << " mixing check 1.4 " << std::endl ; // std::map > rhoInValuesOld= *rhoInValues; rhoInVals.push_back(std::map >()); @@ -432,27 +413,22 @@ double dftClass::mixing_broyden(){ fe_values.reinit (cell); for (unsigned int q_point=0; q_pointid()][q_point]-(*rhoOutValues)[cell->id()][q_point],2.0)*fe_values.JxW(q_point); - //normValue+=0.1; - (*rhoInValues)[cell->id()][q_point] = rhoInValuesOld[cell->id()][q_point] + G * F[cell->id()][q_point] ; - //pcout << " mixing check 1.41 " << std::endl ; + normValue+=std::pow((rhoInValuesOld)[cell->id()][q_point]-(*rhoOutValues)[cell->id()][q_point],2.0)*fe_values.JxW(q_point);; + (*rhoInValues)[cell->id()][q_point] = rhoInValuesOld[cell->id()][q_point] + G * FBroyden[cell->id()][q_point] ; if (dftParameters::xc_id == 4) for (unsigned int dir=0; dir < 3; ++dir) - (*gradRhoInValues)[cell->id()][3*q_point + dir] = gradRhoInValuesOld[cell->id()][3*q_point + dir] + G * gradF[cell->id()][3*q_point+dir] ; + (*gradRhoInValues)[cell->id()][3*q_point + dir] = gradRhoInValuesOld[cell->id()][3*q_point + dir] + G * gradFBroyden[cell->id()][3*q_point+dir] ; // for (int i = 0; i < N; ++i){ - (*rhoInValues)[cell->id()][q_point] -= wt[i] * gamma[i] * (u[i])[cell->id()][q_point] ; + (*rhoInValues)[cell->id()][q_point] -= wtBroyden[i] * gamma[i] * (uBroyden[i])[cell->id()][q_point] ; if (dftParameters::xc_id == 4) for (unsigned int dir=0; dir < 3; ++dir) - (*gradRhoInValues)[cell->id()][3*q_point + dir] -= wt[i] * gamma[i] * (gradU[i])[cell->id()][3*q_point+dir] ; + (*gradRhoInValues)[cell->id()][3*q_point + dir] -= wtBroyden[i] * gamma[i] * (gradUBroyden[i])[cell->id()][3*q_point+dir] ; } } - //pcout << " mixing check 1.42 " << std::endl ; } } // - //pcout << normValue << std::endl; - pcout << " mixing check 1.5 " << std::endl ; // @@ -471,19 +447,15 @@ double dftClass::mixing_broyden_spinPolarized(){ FEValues<3> fe_values (FE, quadrature, update_JxW_values); const unsigned int num_quad_points = quadrature.size(); // - int N = rhoOutVals.size()- 1; - //if (rhoOutVals.size() > 2) - // N = u.size() ; - // + int N = dFBroyden.size() + 1; // - pcout << " mixing check 1.0 " << std::endl ; std::map > delRho, delGradRho ; - dF.push_back(std::map >()); - u.push_back(std::map >()); + dFBroyden.push_back(std::map >()); + uBroyden.push_back(std::map >()); if (dftParameters::xc_id == 4) { - graddF.push_back(std::map >()); - gradU.push_back(std::map >()); + graddFBroyden.push_back(std::map >()); + gradUBroyden.push_back(std::map >()); } // double FOld ; @@ -498,17 +470,17 @@ double dftClass::mixing_broyden_spinPolarized(){ for (; cell!=endc; ++cell) { if (cell->is_locally_owned()){ // - (dF[N-1])[cell->id()]=std::vector(2*num_quad_points); + (dFBroyden[N-1])[cell->id()]=std::vector(2*num_quad_points); delRho[cell->id()]=std::vector(2*num_quad_points); if (N==1) - F[cell->id()]=std::vector(2*num_quad_points); + FBroyden[cell->id()]=std::vector(2*num_quad_points); // if (dftParameters::xc_id == 4) { - (graddF[N-1])[cell->id()]=std::vector(6*num_quad_points); + (graddFBroyden[N-1])[cell->id()]=std::vector(6*num_quad_points); delGradRho[cell->id()]=std::vector(6*num_quad_points); if (N==1) - gradF[cell->id()]=std::vector(6*num_quad_points); + gradFBroyden[cell->id()]=std::vector(6*num_quad_points); } fe_values.reinit (cell); for (unsigned int q_point=0; q_point<2*num_quad_points; ++q_point){ // factor 2 due to spin splitting @@ -525,31 +497,32 @@ double dftClass::mixing_broyden_spinPolarized(){ } else { - FOld = F[cell->id()][q_point] ; + FOld = FBroyden[cell->id()][q_point] ; if (dftParameters::xc_id == 4) for (unsigned int dir=0; dir < 3; ++dir) - gradFOld[dir] = gradF[cell->id()][3*q_point+dir] ; + gradFOld[dir] = gradFBroyden[cell->id()][3*q_point+dir] ; } - // - //pcout << " mixing check 1.01 " << std::endl ; - F[cell->id()][q_point] = (rhoOutValsSpinPolarized[N])[cell->id()][q_point]- (rhoInValsSpinPolarized[N])[cell->id()][q_point]; + + FBroyden[cell->id()][q_point] = (rhoOutValsSpinPolarized[N])[cell->id()][q_point]- (rhoInValsSpinPolarized[N])[cell->id()][q_point]; delRho[cell->id()][q_point] = (rhoInValsSpinPolarized[N])[cell->id()][q_point]- (rhoInValsSpinPolarized[N-1])[cell->id()][q_point]; // - (dF[N-1])[cell->id()][q_point] = F[cell->id()][q_point]- FOld; + (dFBroyden[N-1])[cell->id()][q_point] = FBroyden[cell->id()][q_point]- FOld; if (dftParameters::xc_id == 4) { for (unsigned int dir=0; dir < 3; ++dir) { delGradRho[cell->id()][3*q_point+dir] = (gradRhoInValsSpinPolarized[N])[cell->id()][3*q_point + dir]- (gradRhoInValsSpinPolarized[N-1])[cell->id()][3*q_point+dir]; - gradF[cell->id()][3*q_point+dir] = (gradRhoOutValsSpinPolarized[N])[cell->id()][3*q_point + dir]- (gradRhoInValsSpinPolarized[N])[cell->id()][3*q_point+dir]; - (graddF[N-1])[cell->id()][3*q_point+dir] = gradF[cell->id()][3*q_point+dir]- gradFOld[dir]; + gradFBroyden[cell->id()][3*q_point+dir] = (gradRhoOutValsSpinPolarized[N])[cell->id()][3*q_point + dir]- (gradRhoInValsSpinPolarized[N])[cell->id()][3*q_point+dir]; + (graddFBroyden[N-1])[cell->id()][3*q_point+dir] = gradFBroyden[cell->id()][3*q_point+dir]- gradFOld[dir]; } } } // for (unsigned int q_point=0; q_pointid()][2*q_point] + (dF[N-1])[cell->id()][2*q_point+1] ) * ( (dF[N-1])[cell->id()][2*q_point] + (dF[N-1])[cell->id()][2*q_point+1] ) ) *fe_values.JxW(q_point); - wtTempLoc += ( (F[cell->id()][2*q_point] + F[cell->id()][2*q_point+1]) * ((F[cell->id()][2*q_point] + F[cell->id()][2*q_point+1]))) *fe_values.JxW(q_point) ; + dfMagLoc += ( ( (dFBroyden[N-1])[cell->id()][2*q_point] + + (dFBroyden[N-1])[cell->id()][2*q_point+1] ) * ( (dFBroyden[N-1])[cell->id()][2*q_point] + (dFBroyden[N-1])[cell->id()][2*q_point+1] ) ) *fe_values.JxW(q_point); + // + wtTempLoc += ( (FBroyden[cell->id()][2*q_point] + FBroyden[cell->id()][2*q_point+1]) * ((FBroyden[cell->id()][2*q_point] + FBroyden[cell->id()][2*q_point+1]))) *fe_values.JxW(q_point) ; if (N==1){ FOld = ((rhoOutVals[0])[cell->id()][q_point])- ((rhoInVals[0])[cell->id()][q_point]); w0Loc += FOld * FOld * fe_values.JxW(q_point) ; @@ -561,55 +534,53 @@ double dftClass::mixing_broyden_spinPolarized(){ wtTemp=Utilities::MPI::sum(wtTempLoc, mpi_communicator); dfMag=Utilities::MPI::sum(dfMagLoc, mpi_communicator); if (N==1) - w0 = Utilities::MPI::sum(w0Loc, mpi_communicator); + w0Broyden = Utilities::MPI::sum(w0Loc, mpi_communicator); // - pcout << " mixing check 1.1 " << std::endl ; cell = dofHandler.begin_active(), endc = dofHandler.end(); // wtTemp = std::pow(wtTemp, -0.5 ) ; - wt.push_back(wtTemp) ; + wtBroyden.push_back(wtTemp) ; double G = dftParameters::mixingParameter ; // std::vector c(N, 0.0) , invBeta(N*N, 0.0), beta(N*N, 0.0), gamma(N, 0.0), cLoc(N, 0.0) , invBetaLoc(N*N, 0.0) ; for (; cell!=endc; ++cell) if (cell->is_locally_owned()) { - (u[N-1])[cell->id()]=std::vector(2*num_quad_points); + (uBroyden[N-1])[cell->id()]=std::vector(2*num_quad_points); if (dftParameters::xc_id == 4) - (gradU[N-1])[cell->id()]=std::vector(6*num_quad_points); + (gradUBroyden[N-1])[cell->id()]=std::vector(6*num_quad_points); fe_values.reinit (cell); // for (unsigned int q_point=0; q_pointid()][2*q_point] /= dfMag ; (dF[N-1])[cell->id()][2*q_point+1] /= dfMag ; + (dFBroyden[N-1])[cell->id()][2*q_point] /= dfMag ; (dFBroyden[N-1])[cell->id()][2*q_point+1] /= dfMag ; delRho[cell->id()][2*q_point] /= dfMag ; delRho[cell->id()][2*q_point+1] /= dfMag ; // - (u[N-1])[cell->id()][2*q_point] = G * (dF[N-1])[cell->id()][2*q_point] + delRho[cell->id()][2*q_point] ; - (u[N-1])[cell->id()][2*q_point+1] = G * (dF[N-1])[cell->id()][2*q_point+1] + delRho[cell->id()][2*q_point+1] ; + (uBroyden[N-1])[cell->id()][2*q_point] = G * (dFBroyden[N-1])[cell->id()][2*q_point] + delRho[cell->id()][2*q_point] ; + (uBroyden[N-1])[cell->id()][2*q_point+1] = G * (dFBroyden[N-1])[cell->id()][2*q_point+1] + delRho[cell->id()][2*q_point+1] ; // if (dftParameters::xc_id == 4) { for (unsigned int dir=0; dir < 3; ++dir) { - (graddF[N-1])[cell->id()][6*q_point+dir] /= dfMag ; (graddF[N-1])[cell->id()][6*q_point+3+dir] /= dfMag ; + (graddFBroyden[N-1])[cell->id()][6*q_point+dir] /= dfMag ; (graddFBroyden[N-1])[cell->id()][6*q_point+3+dir] /= dfMag ; delGradRho[cell->id()][6*q_point+dir] /= dfMag ; delGradRho[cell->id()][6*q_point+3+dir] /= dfMag ; // - (gradU[N-1])[cell->id()][6*q_point+dir] = G * (graddF[N-1])[cell->id()][6*q_point+dir] + delGradRho[cell->id()][6*q_point+dir] ; - (gradU[N-1])[cell->id()][6*q_point+3+dir] = G * (graddF[N-1])[cell->id()][6*q_point+3+dir] + delGradRho[cell->id()][6*q_point+3+dir] ; + (gradUBroyden[N-1])[cell->id()][6*q_point+dir] = G * (graddFBroyden[N-1])[cell->id()][6*q_point+dir] + delGradRho[cell->id()][6*q_point+dir] ; + (gradUBroyden[N-1])[cell->id()][6*q_point+3+dir] = G * (graddFBroyden[N-1])[cell->id()][6*q_point+3+dir] + delGradRho[cell->id()][6*q_point+3+dir] ; } } - // - //pcout << " mixing check 1.11 " << std::endl ; // for (unsigned int k = 0; k < N ; ++k) { - cLoc[k] += wt[k] * ( (dF[k])[cell->id()][2*q_point] + (dF[k])[cell->id()][2*q_point+1]) * ( F[cell->id()][2*q_point] + F[cell->id()][2*q_point+1] ) *fe_values.JxW(q_point); + cLoc[k] += wtBroyden[k] * ( (dFBroyden[k])[cell->id()][2*q_point] + + (dFBroyden[k])[cell->id()][2*q_point+1]) * ( FBroyden[cell->id()][2*q_point] + FBroyden[cell->id()][2*q_point+1] ) *fe_values.JxW(q_point); for (unsigned int l = k; l < N ; ++l) { - invBetaLoc[N*k + l] += wt[k] * wt[l] * ( (dF[k])[cell->id()][2*q_point] + (dF[k])[cell->id()][2*q_point+1]) * - ( (dF[l])[cell->id()][2*q_point] + (dF[l])[cell->id()][2*q_point+1]) *fe_values.JxW(q_point); + invBetaLoc[N*k + l] += wtBroyden[k] * wtBroyden[l] * ( (dFBroyden[k])[cell->id()][2*q_point] + (dFBroyden[k])[cell->id()][2*q_point+1]) * + ( (dFBroyden[l])[cell->id()][2*q_point] + (dFBroyden[l])[cell->id()][2*q_point+1]) *fe_values.JxW(q_point); invBetaLoc[N*l + k] = invBetaLoc[N*k + l] ; if (l==k) { - invBetaLoc[N*l + l] = w0*w0 + invBetaLoc[N*l + l] ; + invBetaLoc[N*l + l] = w0Broyden*w0Broyden + invBetaLoc[N*l + l] ; beta[N*l + l] = 1.0 ; } } @@ -623,8 +594,6 @@ double dftClass::mixing_broyden_spinPolarized(){ } c[k]=Utilities::MPI::sum(cLoc[k], mpi_communicator); } - // - pcout << " mixing check 1.2 " << std::endl ; // // Invert beta @@ -633,14 +602,11 @@ double dftClass::mixing_broyden_spinPolarized(){ &invBeta[0], &beta[0]); // - pcout << " mixing check 1.3 " << std::endl ; for (unsigned int m = 0; m < N ; ++m) for (unsigned int l = 0; l < N ; ++l) gamma[m] += c[l] * beta[N*m + l] ; - // - pcout << " mixing check 1.4 " << std::endl ; // std::map > rhoInValuesOld= *rhoInValues; rhoInVals.push_back(std::map >()); @@ -677,22 +643,22 @@ double dftClass::mixing_broyden_spinPolarized(){ for (unsigned int q_point=0; q_pointid()][q_point]-(*rhoOutValues)[cell->id()][q_point],2.0)*fe_values.JxW(q_point); - (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] = rhoInValuesOldSpinPolarized[cell->id()][2*q_point] + G * F[cell->id()][2*q_point] ; - (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] = rhoInValuesOldSpinPolarized[cell->id()][2*q_point+1] + G * F[cell->id()][2*q_point+1] ; + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] = rhoInValuesOldSpinPolarized[cell->id()][2*q_point] + G * FBroyden[cell->id()][2*q_point] ; + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] = rhoInValuesOldSpinPolarized[cell->id()][2*q_point+1] + G * FBroyden[cell->id()][2*q_point+1] ; // if (dftParameters::xc_id == 4) for (unsigned int dir=0; dir < 3; ++dir) { - (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + dir] = gradRhoInValuesOldSpinPolarized[cell->id()][6*q_point + dir] + G * gradF[cell->id()][6*q_point+dir] ; - (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + 3 + dir] = gradRhoInValuesOldSpinPolarized[cell->id()][6*q_point + 3 + dir] + G * gradF[cell->id()][6*q_point+3+dir] ; + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + dir] = gradRhoInValuesOldSpinPolarized[cell->id()][6*q_point + dir] + G * gradFBroyden[cell->id()][6*q_point+dir] ; + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + 3 + dir] = gradRhoInValuesOldSpinPolarized[cell->id()][6*q_point + 3 + dir] + G * gradFBroyden[cell->id()][6*q_point+3+dir] ; } // for (int i = 0; i < N; ++i){ - (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] -= wt[i] * gamma[i] * (u[i])[cell->id()][2*q_point] ; - (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] -= wt[i] * gamma[i] * (u[i])[cell->id()][2*q_point+1] ; + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] -= wtBroyden[i] * gamma[i] * (uBroyden[i])[cell->id()][2*q_point] ; + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] -= wtBroyden[i] * gamma[i] * (uBroyden[i])[cell->id()][2*q_point+1] ; if (dftParameters::xc_id == 4) for (unsigned int dir=0; dir < 3; ++dir) { - (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + dir] -= wt[i] * gamma[i] * (gradU[i])[cell->id()][6*q_point+dir] ; - (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + 3 + dir] -= wt[i] * gamma[i] * (gradU[i])[cell->id()][6*q_point+3+dir] ; + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + dir] -= wtBroyden[i] * gamma[i] * (gradUBroyden[i])[cell->id()][6*q_point+dir] ; + (*gradRhoInValuesSpinPolarized)[cell->id()][6*q_point + 3 + dir] -= wtBroyden[i] * gamma[i] * (gradUBroyden[i])[cell->id()][6*q_point+3+dir] ; } } (*rhoInValues)[cell->id()][q_point] = (*rhoInValuesSpinPolarized)[cell->id()][2*q_point] + (*rhoInValuesSpinPolarized)[cell->id()][2*q_point+1] ; @@ -702,12 +668,9 @@ double dftClass::mixing_broyden_spinPolarized(){ } - //pcout << " mixing check 1.42 " << std::endl ; } } // - //pcout << normValue << std::endl; - pcout << " mixing check 1.5 " << std::endl ; // @@ -945,6 +908,7 @@ double dftClass::mixing_anderson_spinPolarized(){ (*gradRhoInValues)[cell->id()]=std::vector(3*num_quad_points); (*gradRhoInValuesSpinPolarized)[cell->id()]=std::vector(6*num_quad_points); // + fe_values.reinit (cell); for (unsigned int q_point=0; q_point::mixing_anderson_spinPolarized(){ } return Utilities::MPI::sum(normValue, mpi_communicator); } + diff --git a/tests/dft/allElectron/complex/silicon_01.prm.in b/tests/dft/allElectron/complex/silicon_01.prm.in index 38e4361b8..45355b1fa 100644 --- a/tests/dft/allElectron/complex/silicon_01.prm.in +++ b/tests/dft/allElectron/complex/silicon_01.prm.in @@ -68,8 +68,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/allElectron/real/methane_01.prm.in b/tests/dft/allElectron/real/methane_01.prm.in index 352e2008d..c2899bf16 100644 --- a/tests/dft/allElectron/real/methane_01.prm.in +++ b/tests/dft/allElectron/real/methane_01.prm.in @@ -36,8 +36,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 1e-6 diff --git a/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in b/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in index d573d1a77..d4fbb7361 100644 --- a/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in +++ b/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/fccAl_01.prm.in b/tests/dft/pseudopotential/complex/fccAl_01.prm.in index 636fd2f81..b7bee91a6 100644 --- a/tests/dft/pseudopotential/complex/fccAl_01.prm.in +++ b/tests/dft/pseudopotential/complex/fccAl_01.prm.in @@ -57,8 +57,8 @@ end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 50 set TEMPERATURE = 500 set TOLERANCE = 1e-7 diff --git a/tests/dft/pseudopotential/complex/fccAl_02.prm.in b/tests/dft/pseudopotential/complex/fccAl_02.prm.in index 38d7ed4c6..3a27aa93d 100644 --- a/tests/dft/pseudopotential/complex/fccAl_02.prm.in +++ b/tests/dft/pseudopotential/complex/fccAl_02.prm.in @@ -65,8 +65,8 @@ end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 50 set TEMPERATURE = 500 set TOLERANCE = 1e-6 diff --git a/tests/dft/pseudopotential/complex/graphene_01.prm.in b/tests/dft/pseudopotential/complex/graphene_01.prm.in index 2bdbe9b14..29e740066 100644 --- a/tests/dft/pseudopotential/complex/graphene_01.prm.in +++ b/tests/dft/pseudopotential/complex/graphene_01.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in index 6fcfb6a1c..781a6a533 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in index 5ea58476e..fd3b8144f 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in index f9a89448e..34b57de2b 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in index 5d5376aac..f4fe37e32 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in @@ -70,8 +70,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in index 7a29e7190..db9eb4ecb 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in @@ -71,8 +71,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in index b22ae9dfe..6f7002e4a 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in index 0681e7b28..056d9218a 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in index 94ffc6daa..ddb27f471 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in index efff1ef23..4702f56dd 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in index 2c7300dca..beb362f15 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in @@ -64,8 +64,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in index 461a44b5e..4bb8b4333 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in index de7685b4c..9385be863 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in index 6d6c99fb0..fa858656d 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in @@ -70,8 +70,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in index 081c14ded..9379ea34f 100644 --- a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in +++ b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in @@ -39,8 +39,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 5e-6 diff --git a/tests/dft/pseudopotential/real/Al_ONCV_PBE-1.0.upf b/tests/dft/pseudopotential/real/Al_ONCV_PBE-1.0.upf new file mode 100644 index 000000000..f981939f8 --- /dev/null +++ b/tests/dft/pseudopotential/real/Al_ONCV_PBE-1.0.upf @@ -0,0 +1,1227 @@ + + + + This pseudopotential file has been produced using the code + ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential) + scalar-relativistic version 2.1.1, 03/26/2014 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. + + + Copyright 2015 The Regents of the University of California + + This work is licensed under the Creative Commons Attribution-ShareAlike + 4.0 International License. To view a copy of this license, visit + http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to + Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. + + This pseudopotential is part of the Schlipf-Gygi norm-conserving + pseudopotential library. Its construction parameters were tuned to + reproduce materials of a training set with very high accuracy and + should be suitable as a general purpose pseudopotential to treat a + variety of different compounds. For details of the construction and + testing of the pseudopotential please refer to: + + M. Schlipf, F. Gygi, Comp. Phys. Comm. 196, 36 (2015) + http://dx.doi.org/10.1016/j.cpc.2015.05.011 + + We kindly ask that you include this reference in all publications + associated to this pseudopotential. + + + +# ATOM AND REFERENCE CONFIGURATION +# atsym z nc nv iexc psfile + Al 13.00 1 4 4 upf +# +# n l f energy (Ha) + 1 0 2.00 + 2 0 2.00 + 2 1 6.00 + 3 0 2.00 + 3 1 1.00 +# +# PSEUDOPOTENTIAL AND OPTIMIZATION +# lmax + 1 +# +# l, rc, ep, ncon, nbas, qcut + 0 1.29657 -3.97500 5 8 10.30030 + 1 2.41091 -2.55934 5 8 7.02214 +# +# LOCAL POTENTIAL +# lloc, lpopt, rc(5), dvloc0 + 4 5 0.93955 0.00000 +# +# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs +# l, nproj, debl + 0 2 3.69008 + 1 2 2.45967 +# +# MODEL CORE CHARGE +# icmod, fcfact + 0 0.00000 +# +# LOG DERIVATIVE ANALYSIS +# epsh1, epsh2, depsh + -5.00 3.00 0.02 +# +# OUTPUT GRID +# rlmax, drl + 6.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 + + + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 + + + + -4.5793174225E+01 -4.5788454271E+01 -4.5774276797E+01 -4.5750659428E+01 + -4.5717619792E+01 -4.5675182552E+01 -4.5623379390E+01 -4.5562248988E+01 + -4.5491837004E+01 -4.5412196044E+01 -4.5323385623E+01 -4.5225472132E+01 + -4.5118528788E+01 -4.5002635589E+01 -4.4877879255E+01 -4.4744353169E+01 + -4.4602157309E+01 -4.4451398177E+01 -4.4292188720E+01 -4.4124648245E+01 + -4.3948902327E+01 -4.3765082717E+01 -4.3573327237E+01 -4.3373779671E+01 + -4.3166589651E+01 -4.2951912547E+01 -4.2729909330E+01 -4.2500746455E+01 + -4.2264595727E+01 -4.2021634162E+01 -4.1772043851E+01 -4.1516011824E+01 + -4.1253729894E+01 -4.0985394533E+01 -4.0711206709E+01 -4.0431371752E+01 + -4.0146099200E+01 -3.9855602666E+01 -3.9560099675E+01 -3.9259811534E+01 + -3.8954963181E+01 -3.8645783041E+01 -3.8332502872E+01 -3.8015357622E+01 + -3.7694585273E+01 -3.7370426682E+01 -3.7043125420E+01 -3.6712927591E+01 + -3.6380081658E+01 -3.6044838254E+01 -3.5707449960E+01 -3.5368171082E+01 + -3.5027257428E+01 -3.4684966035E+01 -3.4341554884E+01 -3.3997282619E+01 + -3.3652408207E+01 -3.3307190596E+01 -3.2961888362E+01 -3.2616759283E+01 + -3.2272059999E+01 -3.1928045476E+01 -3.1584968662E+01 -3.1243079972E+01 + -3.0902626759E+01 -3.0563852936E+01 -3.0226998404E+01 -2.9892298452E+01 + -2.9559983380E+01 -2.9230277982E+01 -2.8903400893E+01 -2.8579564063E+01 + -2.8258972337E+01 -2.7941822884E+01 -2.7628304667E+01 -2.7318598034E+01 + -2.7012873867E+01 -2.6711293357E+01 -2.6414007425E+01 -2.6121156194E+01 + -2.5832868475E+01 -2.5549261252E+01 -2.5270439163E+01 -2.4996493981E+01 + -2.4727504090E+01 -2.4463533948E+01 -2.4204633551E+01 -2.3950837873E+01 + -2.3702166308E+01 -2.3458622083E+01 -2.3220191664E+01 -2.2986844139E+01 + -2.2758530585E+01 -2.2535183375E+01 -2.2316715573E+01 -2.2103021768E+01 + -2.1893987279E+01 -2.1689498489E+01 -2.1489442457E+01 -2.1293706326E+01 + -2.1102176634E+01 -2.0914738702E+01 -2.0731276196E+01 -2.0551670390E+01 + -2.0375799754E+01 -2.0203539748E+01 -2.0034762549E+01 -1.9869337083E+01 + -1.9707128683E+01 -1.9547999147E+01 -1.9391807463E+01 -1.9238410108E+01 + -1.9087661528E+01 -1.8939414588E+01 -1.8793522086E+01 -1.8649837370E+01 + -1.8508214910E+01 -1.8368512890E+01 -1.8230593513E+01 -1.8094323159E+01 + -1.7959575768E+01 -1.7826233921E+01 -1.7694187632E+01 -1.7563336319E+01 + -1.7433593958E+01 -1.7304883939E+01 -1.7177140271E+01 -1.7050316722E+01 + -1.6924377020E+01 -1.6799297378E+01 -1.6675076787E+01 -1.6551723315E+01 + -1.6429261334E+01 -1.6307737259E+01 -1.6187204514E+01 -1.6067738582E+01 + -1.5949430494E+01 -1.5832376776E+01 -1.5716700129E+01 -1.5602525316E+01 + -1.5489990378E+01 -1.5379242195E+01 -1.5270429836E+01 -1.5163707747E+01 + -1.5059226717E+01 -1.4957136513E+01 -1.4857570026E+01 -1.4760663767E+01 + -1.4666511197E+01 -1.4575211522E+01 -1.4486807710E+01 -1.4401324722E+01 + -1.4318744132E+01 -1.4238980817E+01 -1.4161938010E+01 -1.4087395431E+01 + -1.4015161855E+01 -1.3944887653E+01 -1.3876268641E+01 -1.3808878106E+01 + -1.3742319487E+01 -1.3676155917E+01 -1.3609972047E+01 -1.3543392863E+01 + -1.3476076459E+01 -1.3407777571E+01 -1.3338297766E+01 -1.3267560877E+01 + -1.3195533856E+01 -1.3122304307E+01 -1.3047978845E+01 -1.2972761216E+01 + -1.2896845774E+01 -1.2820482588E+01 -1.2743900257E+01 -1.2667329709E+01 + -1.2590993198E+01 -1.2515060914E+01 -1.2439723914E+01 -1.2365079394E+01 + -1.2291274968E+01 -1.2218347544E+01 -1.2146390771E+01 -1.2075410030E+01 + -1.2005443278E+01 -1.1936484441E+01 -1.1868531365E+01 -1.1801570383E+01 + -1.1735578217E+01 -1.1670534625E+01 -1.1606409500E+01 -1.1543176908E+01 + -1.1480807926E+01 -1.1419273524E+01 -1.1358547699E+01 -1.1298603110E+01 + -1.1239414754E+01 -1.1180959916E+01 -1.1123213929E+01 -1.1066158555E+01 + -1.1009771504E+01 -1.0954036114E+01 -1.0898934548E+01 -1.0844449966E+01 + -1.0790568699E+01 -1.0737274132E+01 -1.0684554834E+01 -1.0632397012E+01 + -1.0580788619E+01 -1.0529718843E+01 -1.0479175385E+01 -1.0429149053E+01 + -1.0379629099E+01 -1.0330605943E+01 -1.0282070767E+01 -1.0234013649E+01 + -1.0186426820E+01 -1.0139301497E+01 -1.0092629437E+01 -1.0046403192E+01 + -1.0000614450E+01 -9.9552562574E+00 -9.9103213175E+00 -9.8658021883E+00 + -9.8216925418E+00 -9.7779853200E+00 -9.7346741018E+00 -9.6917528630E+00 + -9.6492148919E+00 -9.6070546837E+00 -9.5652664266E+00 -9.5238440186E+00 + -9.4827825370E+00 -9.4420764134E+00 -9.4017203379E+00 -9.3617097175E+00 + -9.3220393177E+00 -9.2827045571E+00 -9.2437011572E+00 -9.2050242481E+00 + -9.1666698740E+00 -9.1286340414E+00 -9.0909123106E+00 -9.0535011176E+00 + -9.0163966698E+00 -8.9795949149E+00 -8.9430924504E+00 -8.9068856197E+00 + -8.8709706212E+00 -8.8353441902E+00 -8.8000028322E+00 -8.7649429429E+00 + -8.7301613994E+00 -8.6956548633E+00 -8.6614198846E+00 -8.6274535016E+00 + -8.5937525419E+00 -8.5603136998E+00 -8.5271341568E+00 -8.4942109030E+00 + -8.4615407433E+00 -8.4291210081E+00 -8.3969488321E+00 -8.3650211679E+00 + -8.3333354339E+00 -8.3018889174E+00 -8.2706787325E+00 -8.2397023489E+00 + -8.2089572110E+00 -8.1784405968E+00 -8.1481500047E+00 -8.1180830358E+00 + -8.0882371342E+00 -8.0586098070E+00 -8.0291988103E+00 -8.0000017559E+00 + -7.9710161441E+00 -7.9422398810E+00 -7.9136707096E+00 -7.8853062259E+00 + -7.8571443658E+00 -7.8291830147E+00 -7.8014199340E+00 -7.7738530065E+00 + -7.7464802780E+00 -7.7192996806E+00 -7.6923090311E+00 -7.6655065287E+00 + -7.6388902172E+00 -7.6124580244E+00 -7.5862081118E+00 -7.5601386729E+00 + -7.5342478061E+00 -7.5085335693E+00 -7.4829943156E+00 -7.4576282669E+00 + -7.4324335284E+00 -7.4074084470E+00 -7.3825513770E+00 -7.3578605956E+00 + -7.3333343157E+00 -7.3089710527E+00 -7.2847691902E+00 -7.2607270198E+00 + -7.2368429926E+00 -7.2131156354E+00 -7.1895434072E+00 -7.1661246255E+00 + -7.1428579503E+00 -7.1197419205E+00 -7.0967750240E+00 -7.0739557449E+00 + -7.0512827904E+00 -7.0287547599E+00 -7.0063701691E+00 -6.9841276710E+00 + -6.9620259959E+00 -6.9400638084E+00 -6.9182396593E+00 -6.8965523464E+00 + -6.8750006260E+00 -6.8535832250E+00 -6.8322987355E+00 -6.8111460762E+00 + -6.7901240341E+00 -6.7692313755E+00 -6.7484667982E+00 -6.7278292605E+00 + -6.7073176048E+00 -6.6869306406E+00 -6.6666671559E+00 -6.6465261477E+00 + -6.6265065128E+00 -6.6066071075E+00 -6.5868267918E+00 -6.5671646050E+00 + -6.5476194954E+00 -6.5281903708E+00 -6.5088761451E+00 -6.4896759038E+00 + -6.4705886441E+00 -6.4516133289E+00 -6.4327489098E+00 -6.4139945219E+00 + -6.3953492088E+00 -6.3768119923E+00 -6.3583818464E+00 -6.3400579585E+00 + -6.3218394170E+00 -6.3037253054E+00 -6.2857146065E+00 -6.2678065624E+00 + -6.2500003039E+00 -6.2322949620E+00 -6.2146895692E+00 -6.1971833707E+00 + -6.1797755553E+00 -6.1624652945E+00 -6.1452516893E+00 -6.1281339595E+00 + -6.1111113599E+00 -6.0941831004E+00 -6.0773483541E+00 -6.0606063040E+00 + -6.0439562720E+00 -6.0273975048E+00 -6.0109292492E+00 -5.9945506474E+00 + -5.9782610829E+00 -5.9620598393E+00 -5.9459461983E+00 -5.9299193785E+00 + -5.9139787003E+00 -5.8981235231E+00 -5.8823531622E+00 -5.8666669171E+00 + -5.8510640359E+00 -5.8355439529E+00 -5.8201060154E+00 -5.8047495705E+00 + -5.7894738992E+00 -5.7742783981E+00 -5.7591624809E+00 -5.7441255252E+00 + -5.7291668988E+00 -5.7142859036E+00 -5.6994820342E+00 -5.6847546971E+00 + -5.6701032988E+00 -5.6555271981E+00 -5.6410258128E+00 -5.6265986270E+00 + -5.6122450750E+00 -5.5979645910E+00 -5.5837565316E+00 -5.5696204135E+00 + -5.5555557140E+00 -5.5415618937E+00 -5.5276384028E+00 -5.5137846338E+00 + -5.5000001533E+00 -5.4862844471E+00 -5.4726370009E+00 -5.4590572697E+00 + -5.4455447177E+00 -5.4320989146E+00 -5.4187193700E+00 -5.4054055938E+00 + -5.3921570507E+00 -5.3789732622E+00 -5.3658538052E+00 -5.3527982121E+00 + -5.3398060155E+00 -5.3268766948E+00 -5.3140098151E+00 -5.3012049642E+00 + -5.2884616967E+00 -5.2757795668E+00 -5.2631580727E+00 -5.2505968098E+00 + -5.2380953817E+00 -5.2256533635E+00 -5.2132703304E+00 -5.2009458033E+00 + -5.1886793955E+00 -5.1764707305E+00 -5.1643194032E+00 -5.1522250085E+00 + -5.1401870938E+00 -5.1282052788E+00 -5.1162792108E+00 -5.1044085035E+00 + -5.0925927708E+00 -5.0808315898E+00 -5.0691245763E+00 -5.0574714045E+00 + -5.0458717063E+00 -5.0343251134E+00 -5.0228312366E+00 -5.0113896772E+00 + -5.0000001400E+00 -4.9886622737E+00 -4.9773757274E+00 -4.9661401487E+00 + -4.9549551157E+00 -4.9438203658E+00 -4.9327355642E+00 -4.9217003762E+00 + -4.9107144672E+00 -4.8997774511E+00 -4.8888890330E+00 -4.8780489159E+00 + -4.8672567807E+00 -4.8565123083E+00 -4.8458151563E+00 -4.8351649849E+00 + -4.8245615383E+00 -4.8140045122E+00 -4.8034936025E+00 -4.7930285048E+00 + -4.7826088542E+00 -4.7722344106E+00 -4.7619048927E+00 -4.7516200103E+00 + -4.7413794734E+00 -4.7311829666E+00 -4.7210301867E+00 -4.7109209003E+00 + -4.7008548308E+00 -4.6908317017E+00 -4.6808512365E+00 -4.6709131059E+00 + -4.6610170820E+00 -4.6511629151E+00 -4.6413503415E+00 -4.6315790976E+00 + -4.6218489098E+00 -4.6121594711E+00 -4.6025105849E+00 -4.5929019999E+00 + -4.5833334646E+00 -4.5738047277E+00 -4.5643155095E+00 -4.5548655562E+00 + -4.5454546636E+00 -4.5360825922E+00 -4.5267491023E+00 -4.5174539542E+00 + -4.5081968671E+00 -4.4989776284E+00 -4.4897960308E+00 -4.4806518458E+00 + -4.4715448449E+00 -4.4624747996E+00 -4.4534414324E+00 -4.4444445607E+00 + -4.4354839781E+00 -4.4265594668E+00 -4.4176708089E+00 -4.4088177866E+00 + -4.4000001296E+00 -4.3912176749E+00 -4.3824702213E+00 -4.3737575609E+00 + -4.3650794862E+00 -4.3564357893E+00 -4.3478262108E+00 -4.3392505977E+00 + -4.3307087577E+00 -4.3222004926E+00 -4.3137256045E+00 -4.3052838953E+00 + -4.2968751196E+00 -4.2884991254E+00 -4.2801557329E+00 -4.2718447532E+00 + -4.2635659975E+00 -4.2553192771E+00 -4.2471043640E+00 -4.2389210984E+00 + -4.2307693165E+00 -4.2226488383E+00 -4.2145594838E+00 -4.2065010729E+00 + -4.1984733984E+00 -4.1904762847E+00 -4.1825095871E+00 -4.1745731339E+00 + -4.1666667536E+00 -4.1587902745E+00 -4.1509435132E+00 -4.1431262707E+00 + -4.1353384242E+00 -4.1275798099E+00 -4.1198502644E+00 -4.1121496240E+00 + -4.1044777250E+00 -4.0968343597E+00 -4.0892194079E+00 -4.0816327208E+00 + -4.0740741423E+00 -4.0665435164E+00 -4.0590406871E+00 -4.0515654768E+00 + -4.0441177254E+00 -4.0366973128E+00 -4.0293040903E+00 -4.0219379092E+00 + -4.0145986208E+00 -4.0072860764E+00 -4.0000000825E+00 -3.9927405372E+00 + -3.9855073028E+00 -3.9783002375E+00 -3.9711191995E+00 -3.9639640470E+00 + -3.9568346222E+00 -3.9497307693E+00 -3.9426523852E+00 -3.9355993345E+00 + -3.9285714822E+00 -3.9215686930E+00 -3.9145908318E+00 -3.9076377324E+00 + -3.9007092786E+00 -3.8938053575E+00 -3.8869258402E+00 -3.8800705978E+00 + -3.8732395014E+00 -3.8664324222E+00 -3.8596491897E+00 -3.8528897179E+00 + -3.8461538879E+00 -3.8394415767E+00 -3.8327526616E+00 -3.8260870197E+00 + -3.8194445241E+00 -3.8128250158E+00 -3.8062284180E+00 -3.7996546136E+00 + -3.7931034854E+00 -3.7865749162E+00 -3.7800687890E+00 -3.7735849788E+00 + -3.7671233412E+00 -3.7606838002E+00 -3.7542662442E+00 -3.7478705615E+00 + -3.7414966404E+00 -3.7351443691E+00 -3.7288136282E+00 -3.7225042799E+00 + -3.7162162523E+00 -3.7099494390E+00 -3.7037037335E+00 -3.6974790292E+00 + -3.6912752197E+00 -3.6850921941E+00 -3.6789298138E+00 -3.6727880140E+00 + -3.6666666933E+00 -3.6605657501E+00 + + + + 0.0000000000E+00 8.1959788337E-02 1.6389680452E-01 2.4578292762E-01 + 3.2757945385E-01 4.0923209012E-01 4.9066628384E-01 5.7178299213E-01 + 6.5245498564E-01 7.3252377312E-01 8.1179722184E-01 8.9004793688E-01 + 9.6701244883E-01 1.0423912454E+00 1.1158496674E+00 1.1870196733E+00 + 1.2555024628E+00 1.3208719323E+00 1.3826789204E+00 1.4404561895E+00 + 1.4937240648E+00 1.5419966682E+00 1.5847886227E+00 1.6216221501E+00 + 1.6520344202E+00 1.6755850973E+00 1.6918638179E+00 1.7004976921E+00 + 1.7011584600E+00 1.6935693577E+00 1.6775114916E+00 1.6528296167E+00 + 1.6194371715E+00 1.5773206519E+00 1.5265428914E+00 1.4672455267E+00 + 1.3996503949E+00 1.3240598869E+00 1.2408561029E+00 1.1504990593E+00 + 1.0535236873E+00 9.5053575514E-01 8.4220679309E-01 7.2926802100E-01 + 6.1250336841E-01 4.9274167614E-01 3.7084818278E-01 2.4771546294E-01 + 1.2425386707E-01 1.3813194463E-03 -1.1998657264E-01 -2.3894639470E-01 + -3.5461775436E-01 -4.6615303210E-01 -5.7274544611E-01 -6.7364109027E-01 + -7.6814360571E-01 -8.5562532978E-01 -9.3553062351E-01 -1.0073854605E+00 + -1.0707974255E+00 -1.1254649411E+00 -1.1711748262E+00 -1.2078060192E+00 + -1.2353302905E+00 -1.2538089488E+00 -1.2633921704E+00 -1.2643161462E+00 + -1.2568972238E+00 -1.2415270112E+00 -1.2186667307E+00 -1.1888397354E+00 + -1.1526235486E+00 -1.1106417836E+00 -1.0635554309E+00 -1.0120542028E+00 + -9.5684640407E-01 -8.9865036693E-01 -8.3818527115E-01 -7.7616221762E-01 + -7.1327568510E-01 -6.5019544375E-01 -5.8755902571E-01 -5.2596484036E-01 + -4.6596600774E-01 -4.0806496843E-01 -3.5270891279E-01 -3.0028605589E-01 + -2.5112276889E-01 -2.0548156076E-01 -1.6355988888E-01 -1.2548976165E-01 + -9.1338081356E-02 -6.1107635535E-02 -3.4738766420E-02 -1.2113182579E-02 + 6.9366425281E-03 2.2612724892E-02 3.5145144523E-02 4.4786293794E-02 + 5.1804938121E-02 5.6480406614E-02 5.9097799689E-02 5.9941271770E-02 + 5.9288880955E-02 5.7409099658E-02 5.4556678865E-02 5.0970738549E-02 + 4.6869448638E-02 4.2446513423E-02 3.7873610309E-02 3.3298679834E-02 + 2.8847425361E-02 2.4614620657E-02 2.0675219413E-02 1.7083365056E-02 + 1.3873528814E-02 1.1058091993E-02 8.6372297172E-03 6.5992973718E-03 + 4.9200658773E-03 3.5689959976E-03 2.5113059388E-03 1.7086013343E-03 + 1.1227305605E-03 7.1611571407E-04 4.5225014442E-04 2.9869025096E-04 + 2.2376348042E-04 2.0808442838E-04 1.5295374786E-04 2.3398705055E-05 + -1.2623857798E-05 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 0.0000000000E+00 -7.7175952907E-03 -1.4916854342E-02 -2.1086880496E-02 + -2.5731546758E-02 -2.8376608547E-02 -2.8576494606E-02 -2.5920676461E-02 + -2.0039523233E-02 -1.0609556503E-02 2.6419710152E-03 1.9933238862E-02 + 4.1424818823E-02 6.7217473921E-02 9.7350826557E-02 1.3180291127E-01 + 1.7049061644E-01 2.1327100328E-01 2.5994347910E-01 3.1025278862E-01 + 3.6389277025E-01 4.2051082780E-01 4.7971303013E-01 5.4106977360E-01 + 6.0412189959E-01 6.6838722019E-01 7.3336724280E-01 7.9855416069E-01 + 8.6343781125E-01 9.2751264008E-01 9.9028450228E-01 1.0512772086E+00 + 1.1100386765E+00 1.1661467811E+00 1.2192144736E+00 1.2688944425E+00 + 1.3148830711E+00 1.3569237057E+00 1.3948090182E+00 1.4283828005E+00 + 1.4575408219E+00 1.4822308453E+00 1.5024519230E+00 1.5182528874E+00 + 1.5297301022E+00 1.5370245181E+00 1.5403180955E+00 1.5398296691E+00 + 1.5358103451E+00 1.5285384000E+00 1.5183139567E+00 1.5054535589E+00 + 1.4902842587E+00 1.4731378880E+00 1.4543460523E+00 1.4342333766E+00 + 1.4131138878E+00 1.3912845692E+00 1.3690225108E+00 1.3465791146E+00 + 1.3241790763E+00 1.3020147293E+00 1.2802464515E+00 1.2589999252E+00 + 1.2383649827E+00 1.2183967307E+00 1.1991152464E+00 1.1805064719E+00 + 1.1625248997E+00 1.1450957228E+00 1.1281173437E+00 1.1114649877E+00 + 1.0949946488E+00 1.0785470304E+00 1.0619518542E+00 1.0450321853E+00 + 1.0276093245E+00 1.0095071212E+00 9.9055641022E-01 9.7059928504E-01 + 9.4949311358E-01 9.2711424462E-01 9.0336134563E-01 8.7815832242E-01 + 8.5145678087E-01 8.2323800106E-01 7.9351440554E-01 7.6233051397E-01 + 7.2976338788E-01 6.9592258017E-01 6.6094961455E-01 6.2501703037E-01 + 5.8832703790E-01 5.5110988669E-01 5.1362180519E-01 4.7614111278E-01 + 4.3895065095E-01 4.0231969623E-01 3.6650170831E-01 3.3173181093E-01 + 2.9822472583E-01 2.6617282323E-01 2.3574556921E-01 2.0708504676E-01 + 1.8030598672E-01 1.5549603366E-01 1.3271474535E-01 1.1199467316E-01 + 9.3339304043E-02 7.6723714857E-02 6.2098903174E-02 4.9392524523E-02 + 3.8511312292E-02 2.9340007125E-02 2.1749511592E-02 1.5598113229E-02 + 1.0733579834E-02 6.9985976130E-03 4.2344967945E-03 2.2819866171E-03 + 9.8836865576E-04 2.1129921025E-04 -1.8286643702E-04 -3.1447636558E-04 + -2.8064364907E-04 -1.6485866071E-04 -3.3670708672E-05 7.7242412191E-05 + 1.4571537069E-04 1.8119691635E-04 1.3914527860E-04 2.1967252687E-05 + -1.1290354030E-05 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 0.0000000000E+00 -9.9945741232E-05 -3.9560031198E-04 -8.7445007377E-04 + -1.5157531248E-03 -2.2907097090E-03 -3.1626991244E-03 -4.0875814821E-03 + -5.0140622112E-03 -5.8841167683E-03 -6.6334725893E-03 -7.1921449151E-03 + -7.4850227480E-03 -7.4325008418E-03 -6.9511532780E-03 -5.9544439475E-03 + -4.3534688675E-03 -2.0577252197E-03 1.0240984534E-03 4.9833163186E-03 + 9.9104295560E-03 1.5894306215E-02 2.3021363142E-02 3.1374755220E-02 + 4.1033578177E-02 5.2072090186E-02 6.4558958812E-02 7.8556537617E-02 + 9.4120178816E-02 1.1129758635E-01 1.3012821457E-01 1.5064271702E-01 + 1.7286244865E-01 1.9679902857E-01 2.2245396123E-01 2.4981832421E-01 + 2.7887252334E-01 3.0958611888E-01 3.4191771634E-01 3.7581493977E-01 + 4.1121447434E-01 4.4804217871E-01 4.8621327613E-01 5.2563261712E-01 + 5.6619501398E-01 6.0778564550E-01 6.5028052974E-01 6.9354705693E-01 + 7.3744458996E-01 7.8182514807E-01 8.2653409566E-01 8.7141088548E-01 + 9.1628993048E-01 9.6100144068E-01 1.0053722068E+00 1.0492267463E+00 + 1.0923879728E+00 1.1346784219E+00 1.1759209742E+00 1.2159401209E+00 + 1.2545625893E+00 1.2916187470E+00 1.3269431848E+00 1.3603758483E+00 + 1.3917630209E+00 1.4209580136E+00 1.4478221533E+00 1.4722256652E+00 + 1.4940482806E+00 1.5131799734E+00 1.5295217172E+00 1.5429860473E+00 + 1.5534975253E+00 1.5609932333E+00 1.5654231610E+00 1.5667505007E+00 + 1.5649519402E+00 1.5600177460E+00 1.5519518544E+00 1.5407718645E+00 + 1.5265089452E+00 1.5092076591E+00 1.4889257061E+00 1.4657335853E+00 + 1.4397141783E+00 1.4109622556E+00 1.3795839089E+00 1.3456959119E+00 + 1.3094250127E+00 1.2709071634E+00 1.2302866879E+00 1.1877153964E+00 + 1.1433516483E+00 1.0973593749E+00 1.0499070494E+00 1.0011667239E+00 + 9.5131123738E-01 9.0051243413E-01 8.4894081664E-01 7.9676488342E-01 + 7.4415063150E-01 6.9126107080E-01 6.3825619210E-01 5.8529138955E-01 + 5.3251756215E-01 4.8008106322E-01 4.2812307808E-01 3.7677966204E-01 + 3.2618054523E-01 2.7644862879E-01 2.2770078076E-01 1.8004723701E-01 + 1.3359184254E-01 8.8429474919E-02 4.4648519264E-02 2.3301135114E-03 + -3.8451993596E-02 -7.7633161320E-02 -1.1515564636E-01 -1.5096888387E-01 + -1.8503104826E-01 -2.1730791748E-01 -2.4777221308E-01 -2.7640431165E-01 + -3.0319233793E-01 -3.2813076609E-01 -3.5122097694E-01 -3.7247096173E-01 + -3.9189436432E-01 -4.0951091419E-01 -4.2534488669E-01 -4.3942561004E-01 + -4.5178693326E-01 -4.6246509387E-01 -4.7150113564E-01 -4.7893759190E-01 + -4.8481857411E-01 -4.8919295626E-01 -4.9210676034E-01 -4.9361023819E-01 + -4.9375409540E-01 -4.9258812052E-01 -4.9016680037E-01 -4.8654128055E-01 + -4.8176718158E-01 -4.7590038102E-01 -4.6899787912E-01 -4.6112073751E-01 + -4.5232902827E-01 -4.4268815818E-01 -4.3226315395E-01 -4.2112269111E-01 + -4.0933692057E-01 -3.9697638130E-01 -3.8411532119E-01 -3.7082386619E-01 + -3.5717873644E-01 -3.4324733042E-01 -3.2910537333E-01 -3.1481669456E-01 + -3.0045212655E-01 -2.8607106868E-01 -2.7173708238E-01 -2.5750367759E-01 + -2.4342593838E-01 -2.2955040551E-01 -2.1592329726E-01 -2.0258351882E-01 + -1.8956864256E-01 -1.7690966706E-01 -1.6463610250E-01 -1.5277111163E-01 + -1.4133688289E-01 -1.3034908904E-01 -1.1982335088E-01 -1.0976841093E-01 + -1.0019400584E-01 -9.1102675466E-02 -8.2498843713E-02 -7.4379711613E-02 + -6.6744837374E-02 -5.9587158080E-02 -5.2901396754E-02 -4.6677544158E-02 + -4.0905749075E-02 -3.5573783526E-02 -3.0668209988E-02 -2.6174638782E-02 + -2.2077320689E-02 -1.8359626189E-02 -1.5004818525E-02 -1.1993901594E-02 + -9.3100303837E-03 -6.9329121560E-03 -4.8450842795E-03 -3.0267586224E-03 + -1.4590651946E-03 -1.2421266598E-04 9.9844507624E-04 1.9242844757E-03 + 2.6738537500E-03 3.2621653424E-03 3.7066144692E-03 4.0238714604E-03 + 4.2268163111E-03 4.3337759130E-03 4.3545668729E-03 4.3040747398E-03 + 4.1939566699E-03 4.0336342835E-03 3.8366308830E-03 3.6086533374E-03 + 3.3600764424E-03 3.0980594804E-03 2.8276771418E-03 2.5578082615E-03 + 2.2903823604E-03 2.0308352750E-03 1.7829911670E-03 1.5480999508E-03 + 1.3301987527E-03 1.1293525376E-03 9.4656834312E-04 7.8328267224E-04 + 6.3832556782E-04 5.1194173150E-04 4.0340561061E-04 3.1134588957E-04 + 2.3498049038E-04 1.7273223574E-04 1.2308531443E-04 8.4466871588E-05 + 5.5468983325E-05 3.4361185347E-05 1.9569994672E-05 1.0087586140E-05 + 4.1587949536E-06 8.4730539255E-07 -4.0457636654E-07 -1.0986793689E-06 + -1.2459491952E-06 -9.2168416541E-07 -6.4347904540E-07 -3.1381847554E-07 + 1.6418605726E-09 5.8064837812E-08 4.4046055656E-08 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.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.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.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.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.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.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.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.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.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.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.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.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 0.0000000000E+00 2.3473144743E-04 9.3978935350E-04 2.1177458006E-03 + 3.7728257410E-03 5.9108148403E-03 8.5389316960E-03 1.1665665657E-02 + 1.5300581804E-02 1.9454094970E-02 2.4137214993E-02 2.9361265674E-02 + 3.5137580187E-02 4.1477175938E-02 4.8390412106E-02 5.5886633240E-02 + 6.3973802576E-02 7.2658128719E-02 8.1943689618E-02 9.1832057686E-02 + 1.0232193013E-01 1.1340876835E-01 1.2508445054E-01 1.3733694131E-01 + 1.5014998218E-01 1.6350280681E-01 1.7736988415E-01 1.9172069375E-01 + 2.0651953526E-01 2.2172537608E-01 2.3729173945E-01 2.5316663539E-01 + 2.6929253566E-01 2.8560639842E-01 3.0203973685E-01 3.1851873963E-01 + 3.3496444078E-01 3.5129294089E-01 3.6741567203E-01 3.8323972110E-01 + 3.9866819739E-01 4.1360064373E-01 4.2793349734E-01 4.4156059231E-01 + 4.5437370253E-01 4.6626312197E-01 4.7711827907E-01 4.8682837783E-01 + 4.9528306943E-01 5.0237316183E-01 5.0799131236E-01 5.1203273816E-01 + 5.1439598694E-01 5.1498365821E-01 5.1370307399E-01 5.1046713457E-01 + 5.0519486974E-01 4.9781227632E-01 4.8825284902E-01 4.7645835944E-01 + 4.6237928701E-01 4.4597557094E-01 4.2721695957E-01 4.0608355463E-01 + 3.8256623348E-01 3.5666693805E-01 3.2839900562E-01 2.9778739082E-01 + 2.6486878623E-01 2.2969172089E-01 1.9231655823E-01 1.5281540433E-01 + 1.1127196706E-01 6.7781320239E-02 2.2449589342E-02 -2.4606399304E-02 + -7.3259712313E-02 -1.2337376689E-01 -1.7480297607E-01 -2.2739345818E-01 + -2.8098381332E-01 -3.3540596893E-01 -3.9048609077E-01 -4.4604555536E-01 + -5.0190197939E-01 -5.5787030140E-01 -6.1376391058E-01 -6.6939581712E-01 + -7.2457985848E-01 -7.7913193545E-01 -8.3287127169E-01 -8.8562169027E-01 + -9.3721290067E-01 -9.8748179707E-01 -1.0362737300E+00 -1.0834432764E+00 + -1.1288533943E+00 -1.1723733832E+00 -1.2138791736E+00 -1.2532538460E+00 + -1.2903880678E+00 -1.3251804953E+00 -1.3575379316E+00 -1.3873762280E+00 + -1.4146202902E+00 -1.4392041677E+00 -1.4610713935E+00 -1.4801750180E+00 + -1.4964781344E+00 -1.5099539804E+00 -1.5205855875E+00 -1.5283659736E+00 + -1.5332980959E+00 -1.5353952942E+00 -1.5346804782E+00 -1.5311862536E+00 + -1.5249549122E+00 -1.5160379684E+00 -1.5044958200E+00 -1.4903978412E+00 + -1.4738214928E+00 -1.4548516999E+00 -1.4335811137E+00 -1.4101094271E+00 + -1.3845410012E+00 -1.3569863736E+00 -1.3275617315E+00 -1.2963840341E+00 + -1.2635747891E+00 -1.2292587253E+00 -1.1935571827E+00 -1.1565948216E+00 + -1.1184951743E+00 -1.0793757950E+00 -1.0393570420E+00 -9.9855161617E-01 + -9.5706768190E-01 -9.1501560887E-01 -8.7249185934E-01 -8.2959565947E-01 + -7.8642043018E-01 -7.4305414195E-01 -6.9958717760E-01 -6.5610269483E-01 + -6.1268736121E-01 -5.6942628572E-01 -5.2640623485E-01 -4.8371616181E-01 + -4.4144677760E-01 -3.9969189463E-01 -3.5854728903E-01 -3.1811069556E-01 + -2.7848167142E-01 -2.3975796567E-01 -2.0204019809E-01 -1.6542001159E-01 + -1.2999526555E-01 -9.5845740202E-02 -6.3059876657E-02 -3.1703203855E-02 + -1.8478069897E-03 2.6456388633E-02 5.3157312817E-02 7.8222294671E-02 + 1.0162022624E-01 1.2333624746E-01 1.4335935819E-01 1.6169204316E-01 + 1.7834145331E-01 1.9332609886E-01 2.0666887111E-01 2.1840235270E-01 + 2.2856277217E-01 2.3719441418E-01 2.4434470705E-01 2.5006702838E-01 + 2.5441823366E-01 2.5745807803E-01 2.5925143176E-01 2.5986170558E-01 + 2.5936066275E-01 2.5781313365E-01 2.5529563060E-01 2.5187401911E-01 + 2.4762567618E-01 2.4261845523E-01 2.3692721571E-01 2.3062201653E-01 + 2.2377226232E-01 2.1645046611E-01 2.0871801154E-01 2.0064985720E-01 + 1.9229951254E-01 1.8373774650E-01 1.7501646743E-01 1.6619557601E-01 + 1.5732879776E-01 1.4846228171E-01 1.3965183306E-01 1.3093126852E-01 + 1.2235110638E-01 1.1394168184E-01 1.0573925716E-01 9.7776770635E-02 + 9.0074365687E-02 8.2666351382E-02 7.5562674454E-02 6.8785364645E-02 + 6.2347453467E-02 5.6255327952E-02 5.0523756717E-02 4.5149397336E-02 + 4.0137616957E-02 3.5486734122E-02 3.1190137804E-02 2.7246728723E-02 + 2.3643672271E-02 2.0372238964E-02 1.7421055170E-02 1.4775017024E-02 + 1.2420317981E-02 1.0340462914E-02 8.5182289126E-03 6.9356094255E-03 + 5.5753944786E-03 4.4175665075E-03 3.4440767234E-03 2.6378733749E-03 + 1.9768667837E-03 1.4468136594E-03 1.0304532927E-03 7.0724358018E-04 + 4.6709087668E-04 2.9297414211E-04 1.7010811352E-04 9.1216598523E-05 + 4.1230126412E-05 1.2498772302E-05 8.1912250875E-07 -5.7304560233E-06 + -7.4821006550E-06 -5.2773363344E-06 -3.8024302514E-06 -1.9122122872E-06 + 9.2792861288E-09 3.2816443312E-07 2.4893462946E-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.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.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.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.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.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.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.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.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.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.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.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.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 + + + 5.3707838603E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 -8.2930195943E-01 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 -6.5836757852E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -4.6797927123E+00 + + + + + + 0.0000000000E+00 3.6337392512E-03 1.4532726686E-02 3.2690254089E-02 + 5.8095083688E-02 9.0731362153E-02 1.3057850042E-01 1.7761101960E-01 + 2.3179836335E-01 2.9310467717E-01 3.6148855530E-01 4.3690275613E-01 + 5.1929388710E-01 6.0860206053E-01 7.0476052195E-01 8.0769525292E-01 + 9.1732455075E-01 1.0335585876E+00 1.1562989524E+00 1.2854381786E+00 + 1.4208592623E+00 1.5624351747E+00 1.7100283733E+00 1.8634903182E+00 + 2.0226609977E+00 2.1873684690E+00 2.3574284220E+00 2.5326437698E+00 + 2.7128042747E+00 2.8976862147E+00 3.0870520986E+00 3.2806504354E+00 + 3.4782155630E+00 3.6794675480E+00 3.8841121546E+00 4.0918408942E+00 + 4.3023311599E+00 4.5152464500E+00 4.7302366781E+00 4.9469385892E+00 + 5.1649762707E+00 5.3839617584E+00 5.6034957507E+00 5.8231684219E+00 + 6.0425603366E+00 6.2612434633E+00 6.4787822832E+00 6.6947349849E+00 + 6.9086547535E+00 7.1200911721E+00 7.3285916360E+00 7.5337028366E+00 + 7.7349724152E+00 7.9319505675E+00 8.1241915721E+00 8.3112557863E+00 + 8.4927110052E+00 8.6681345343E+00 8.8371145884E+00 8.9992523726E+00 + 9.1541633151E+00 9.3014792651E+00 9.4408496187E+00 9.5719431028E+00 + 9.6944493238E+00 9.8080799314E+00 9.9125700903E+00 1.0007679760E+01 + 1.0093194629E+01 1.0168927143E+01 1.0234717464E+01 1.0290434168E+01 + 1.0335974800E+01 1.0371266368E+01 1.0396265673E+01 1.0410959508E+01 + 1.0415364647E+01 1.0409527749E+01 1.0393525104E+01 1.0367462228E+01 + 1.0331473323E+01 1.0285720597E+01 1.0230393446E+01 1.0165707519E+01 + 1.0091903652E+01 1.0009246696E+01 9.9180242353E+00 9.8185452072E+00 + 9.7111384364E+00 9.5961510889E+00 9.4739470582E+00 9.3449052926E+00 + 9.2094180770E+00 9.0678892777E+00 8.9207325646E+00 8.7683700317E+00 + 8.6112294809E+00 8.4497429486E+00 8.2843452989E+00 8.1154722690E+00 + 7.9435587681E+00 7.7690372271E+00 7.5923368874E+00 7.4138800648E+00 + 7.2340816365E+00 7.0533484206E+00 6.8720774257E+00 6.6906555240E+00 + 6.5094564964E+00 6.3288395036E+00 6.1491505419E+00 5.9707208962E+00 + 5.7938674803E+00 5.6188868212E+00 5.4460604926E+00 5.2756533163E+00 + 5.1079129335E+00 4.9430658776E+00 4.7813225332E+00 4.6228764242E+00 + 4.4679007281E+00 4.3165508358E+00 4.1689657220E+00 4.0252663456E+00 + 3.8855554730E+00 3.7499205335E+00 3.6184323546E+00 3.4911456193E+00 + 3.3681006701E+00 3.2493225176E+00 3.1348234429E+00 3.0246019824E+00 + 2.9186436753E+00 2.8169246302E+00 2.7194071560E+00 2.6260454034E+00 + 2.5367854140E+00 2.4515589197E+00 2.3702979672E+00 2.2929218291E+00 + 2.2193439190E+00 2.1494770076E+00 2.0832191146E+00 2.0204757977E+00 + 1.9611404784E+00 1.9051060938E+00 1.8522672026E+00 1.8025059353E+00 + 1.7557184211E+00 1.7117841216E+00 1.6705956276E+00 1.6320368440E+00 + 1.5959953992E+00 1.5623623163E+00 1.5310219477E+00 1.5018733788E+00 + 1.4747995986E+00 1.4497071160E+00 1.4264823982E+00 1.4050359478E+00 + 1.3852617971E+00 1.3670731484E+00 1.3503725061E+00 1.3350767537E+00 + 1.3210966541E+00 1.3083536863E+00 1.2967664067E+00 1.2862616781E+00 + 1.2767652268E+00 1.2682099288E+00 1.2605279717E+00 1.2536586994E+00 + 1.2475400254E+00 1.2421180367E+00 1.2373356593E+00 1.2331458190E+00 + 1.2294958038E+00 1.2263452962E+00 1.2236453955E+00 1.2213622815E+00 + 1.2194504458E+00 1.2178816542E+00 1.2166149560E+00 1.2156251607E+00 + 1.2148777815E+00 1.2143485156E+00 1.2140095293E+00 1.2138371121E+00 + 1.2138095524E+00 1.2139036413E+00 1.2141030896E+00 1.2143853120E+00 + 1.2147378237E+00 1.2151412592E+00 1.2155835681E+00 1.2160501540E+00 + 1.2165283430E+00 1.2170080212E+00 1.2174761507E+00 1.2179257517E+00 + 1.2183454395E+00 1.2187286550E+00 1.2190674121E+00 1.2193542786E+00 + 1.2195844911E+00 1.2197502235E+00 1.2198483732E+00 1.2198733400E+00 + 1.2198210656E+00 1.2196885929E+00 1.2194712638E+00 1.2191675791E+00 + 1.2187742775E+00 1.2182892598E+00 1.2177111876E+00 1.2170374526E+00 + 1.2162677177E+00 1.2154005329E+00 1.2144349485E+00 1.2133708105E+00 + 1.2122071235E+00 1.2109440931E+00 1.2095816422E+00 1.2081195667E+00 + 1.2065584875E+00 1.2048985591E+00 1.2031402985E+00 1.2012844650E+00 + 1.1993315328E+00 1.1972824616E+00 1.1951381338E+00 1.1928993789E+00 + 1.1905673346E+00 1.1881430440E+00 1.1856276106E+00 1.1830222548E+00 + 1.1803281860E+00 1.1775466610E+00 1.1746789772E+00 1.1717264817E+00 + 1.1686905067E+00 1.1655724200E+00 1.1623736766E+00 1.1590956410E+00 + 1.1557397436E+00 1.1523075175E+00 1.1488003414E+00 1.1452197002E+00 + 1.1415671671E+00 1.1378441391E+00 1.1340521336E+00 1.1301927496E+00 + 1.1262673905E+00 1.1222775883E+00 1.1182249603E+00 1.1141109034E+00 + 1.1099369471E+00 1.1057047233E+00 1.1014156105E+00 1.0970711187E+00 + 1.0926728944E+00 1.0882222862E+00 1.0837207811E+00 1.0791700051E+00 + 1.0745713035E+00 1.0699261228E+00 1.0652360438E+00 1.0605024265E+00 + 1.0557266617E+00 1.0509102695E+00 1.0460546343E+00 1.0411610808E+00 + 1.0362310553E+00 1.0312659736E+00 1.0262670873E+00 1.0212357582E+00 + 1.0161734365E+00 1.0110812978E+00 1.0059606377E+00 1.0008128611E+00 + 9.9563914560E-01 9.9044070744E-01 9.8521885185E-01 9.7997480791E-01 + 9.7470969675E-01 9.6942471810E-01 9.6412114931E-01 9.5880002099E-01 + 9.5346246389E-01 9.4810968078E-01 9.4274273075E-01 9.3736265040E-01 + 9.3197053163E-01 9.2656748811E-01 9.2115446008E-01 9.1573245889E-01 + 9.1030255379E-01 9.0486568236E-01 8.9942277207E-01 8.9397478368E-01 + 8.8852270283E-01 8.8306736527E-01 8.7760966109E-01 8.7215051076E-01 + 8.6669076178E-01 8.6123122146E-01 8.5577271562E-01 8.5031610936E-01 + 8.4486214142E-01 8.3941158119E-01 8.3396520155E-01 8.2852376589E-01 + 8.2308796716E-01 8.1765851498E-01 8.1223612231E-01 8.0682146521E-01 + 8.0141519287E-01 7.9601795348E-01 7.9063039288E-01 7.8525312049E-01 + 7.7988673579E-01 7.7453182714E-01 7.6918896874E-01 7.6385872049E-01 + 7.5854162766E-01 7.5323821877E-01 7.4794900044E-01 7.4267448993E-01 + 7.3741517779E-01 7.3217153222E-01 7.2694400112E-01 7.2173305912E-01 + 7.1653914459E-01 7.1136266724E-01 7.0620402105E-01 7.0106363983E-01 + 6.9594191255E-01 6.9083919455E-01 6.8575582635E-01 6.8069220471E-01 + 6.7564867225E-01 6.7062553616E-01 6.6562307970E-01 6.6064166829E-01 + 6.5568160130E-01 6.5074314620E-01 6.4582652108E-01 6.4093206741E-01 + 6.3606004453E-01 6.3121069062E-01 6.2638414702E-01 6.2158073995E-01 + 6.1680069198E-01 6.1204420820E-01 6.0731138695E-01 6.0260250037E-01 + 5.9791775360E-01 5.9325731829E-01 5.8862127567E-01 5.8400981118E-01 + 5.7942312965E-01 5.7486137257E-01 5.7032462109E-01 5.6581294949E-01 + 5.6132657600E-01 5.5686561518E-01 5.5243016428E-01 5.4802016798E-01 + 5.4363586382E-01 5.3927734478E-01 5.3494468457E-01 5.3063784966E-01 + 5.2635693302E-01 5.2210206658E-01 5.1787330362E-01 5.1367065629E-01 + 5.0949403909E-01 5.0534363783E-01 5.0121948821E-01 4.9712160943E-01 + 4.9304989315E-01 4.8900440633E-01 4.8498523012E-01 4.8099236931E-01 + 4.7702579480E-01 4.7308534188E-01 4.6917117612E-01 4.6528329053E-01 + 4.6142166239E-01 4.5758616045E-01 4.5377675072E-01 4.4999351224E-01 + 4.4623641341E-01 4.4250540727E-01 4.3880027158E-01 4.3512109643E-01 + 4.3146787739E-01 4.2784056136E-01 4.2423905777E-01 4.2066313465E-01 + 4.1711292351E-01 4.1358836714E-01 4.1008939400E-01 4.0661584752E-01 + 4.0316757642E-01 3.9974465785E-01 3.9634701856E-01 3.9297457142E-01 + 3.8962710727E-01 3.8630453791E-01 3.8300689577E-01 3.7973409424E-01 + 3.7648603335E-01 3.7326246566E-01 3.7006334429E-01 3.6688866911E-01 + 3.6373834268E-01 3.6061225471E-01 3.5751013444E-01 3.5443195167E-01 + 3.5137768748E-01 3.4834723595E-01 3.4534047887E-01 3.4235713759E-01 + 3.3939717182E-01 3.3646055869E-01 3.3354718596E-01 3.3065692964E-01 + 3.2778951925E-01 3.2494487605E-01 3.2212298854E-01 3.1932374013E-01 + 3.1654700304E-01 3.1379253165E-01 3.1106017927E-01 3.0834996112E-01 + 3.0566175806E-01 3.0299544026E-01 3.0035080419E-01 2.9772760550E-01 + 2.9512590082E-01 2.9254557001E-01 2.8998648282E-01 2.8744849490E-01 + 2.8493123602E-01 2.8243481716E-01 2.7995911859E-01 2.7750401105E-01 + 2.7506935560E-01 2.7265484123E-01 2.7026043368E-01 2.6788608470E-01 + 2.6553166718E-01 2.6319704491E-01 2.6088199743E-01 2.5858630197E-01 + 2.5630999879E-01 2.5405296400E-01 2.5181506514E-01 2.4959616109E-01 + 2.4739590190E-01 2.4521433867E-01 2.4305138020E-01 2.4090689864E-01 + 2.3878075797E-01 2.3667272923E-01 2.3458261485E-01 2.3251044351E-01 + 2.3045609267E-01 2.2841943216E-01 2.2640032411E-01 2.2439844431E-01 + 2.2241380244E-01 2.2044632927E-01 2.1849590099E-01 2.1656238659E-01 + 2.1464561395E-01 2.1274528782E-01 2.1086148488E-01 2.0899408806E-01 + 2.0714297360E-01 2.0530801092E-01 2.0348896494E-01 2.0168568084E-01 + 1.9989817205E-01 1.9812632228E-01 1.9637000893E-01 1.9462910303E-01 + 1.9290332547E-01 1.9119262730E-01 1.8949697398E-01 1.8781625099E-01 + 1.8615033789E-01 1.8449910828E-01 1.8286225705E-01 1.8123980610E-01 + 1.7963168936E-01 1.7803779494E-01 1.7645800539E-01 1.7489219768E-01 + 1.7334005745E-01 1.7180164353E-01 1.7027687481E-01 1.6876564271E-01 + 1.6726783349E-01 1.6578332817E-01 1.6431181865E-01 1.6285336847E-01 + 1.6140789735E-01 1.5997530064E-01 1.5855546884E-01 1.5714828758E-01 + 1.5575346966E-01 1.5437105276E-01 1.5300097253E-01 1.5164312865E-01 + 1.5029741632E-01 1.4896372623E-01 1.4764180602E-01 1.4633163879E-01 + 1.4503318997E-01 1.4374636395E-01 1.4247106098E-01 1.4120717711E-01 + 1.3995450820E-01 1.3871295607E-01 1.3748252837E-01 1.3626313447E-01 + 1.3505467991E-01 1.3385706629E-01 1.3267015027E-01 1.3149372853E-01 + 1.3032786142E-01 1.2917246345E-01 1.2802744557E-01 1.2689271513E-01 + 1.2576817583E-01 1.2465357395E-01 1.2354895607E-01 1.2245426661E-01 + 1.2136942200E-01 1.2029433538E-01 1.1922891650E-01 1.1817299678E-01 + 1.1712646443E-01 1.1608934316E-01 1.1506155491E-01 1.1404301858E-01 + 1.1303364995E-01 1.1203336173E-01 1.1104191034E-01 1.1005936167E-01 + 1.0908565688E-01 1.0812072055E-01 1.0716447442E-01 1.0621683739E-01 + 1.0527767162E-01 1.0434684171E-01 1.0342438843E-01 1.0251024196E-01 + 1.0160432985E-01 1.0070657703E-01 9.9816905799E-02 9.8935132159E-02 + 9.8061235924E-02 9.7195205765E-02 9.6336974888E-02 9.5486474088E-02 + 9.4643631728E-02 9.3808373729E-02 9.2980486778E-02 9.2160032146E-02 + 9.1346961575E-02 9.0541211504E-02 8.9742716146E-02 8.8951407471E-02 + 8.8167202844E-02 8.7389911584E-02 8.6619608133E-02 8.5856234335E-02 + 8.5099729995E-02 8.4350032869E-02 8.3607078648E-02 8.2870776603E-02 + 8.2140970530E-02 8.1417721111E-02 8.0700973471E-02 7.9990670860E-02 + 7.9286754644E-02 7.8589164292E-02 7.7897813190E-02 7.7212554420E-02 + 7.6533446468E-02 7.5860437783E-02 7.5193475091E-02 7.4532503386E-02 + 7.3877465923E-02 7.3228291074E-02 7.2584818662E-02 7.1947115361E-02 + 7.1315132942E-02 7.0688821596E-02 + + diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in b/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in index 4a0685ae4..1f53b5b97 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in @@ -46,8 +46,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 # low tolerance ot run in Debug mode - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in b/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in index 995b6c7e1..22a32f665 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in @@ -46,8 +46,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 # low tolerance ot run in Debug mode - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output new file mode 100644 index 000000000..3a7a86b89 --- /dev/null +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output @@ -0,0 +1,39 @@ +number of atoms: 1 +number of atoms types: 1 +Z:13 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 20 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 4.000000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 4.000000000000000000e+01 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 4.000000000000000000e+01 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 288 +number of degrees of freedom: 10381 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 11 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -35.96431251 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000000,0.000000,0.000000 +-------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02.prm.in b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.prm.in new file mode 100644 index 000000000..458cad6fe --- /dev/null +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.prm.in @@ -0,0 +1,68 @@ +set VERBOSITY = 0 +set REPRODUCIBLE OUTPUT = true + +subsection Geometry + set NATOMS=1 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/aluminumSingleAtom_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/aluminumSingleAtom_domainBoundingVectors.inp + + subsection Optimization + set ION FORCE=true + end + +end + + +subsection Boundary conditions + set SELF POTENTIAL RADIUS = 8.0 + set PERIODIC1 = false + set PERIODIC2 = false + set PERIODIC3 = false +end + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 3 + + subsection Auto mesh generation parameters + set BASE MESH SIZE = 10.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AROUND ATOM = 1.0 + set MESH SIZE AT ATOM = 1.0 + end + +end + + +subsection DFT functional parameters + set PSEUDOPOTENTIAL CALCULATION =true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoAlONCV.inp + set PSEUDO TESTS FLAG = true + set EXCHANGE CORRELATION TYPE = 4 +end + + +subsection SCF parameters + set MAXIMUM ITERATIONS = 100 + set TOLERANCE = 1e-6 # low tolerance ot run in Debug mode + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING METHOD = BROYDEN + set TEMPERATURE = 500 + set STARTING WFC=ATOMIC + + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 + set LOWER BOUND WANTED SPECTRUM = -10.0 + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set ORTHOGONALIZATION TYPE=GS + set CHEBYSHEV FILTER TOLERANCE=1e-3 + end +end + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output new file mode 100644 index 000000000..cbbb4cd0b --- /dev/null +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output @@ -0,0 +1,39 @@ +number of atoms: 1 +number of atoms types: 1 +Z:13 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 20 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 4.000000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 4.000000000000000000e+01 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 4.000000000000000000e+01 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 288 +number of degrees of freedom: 10381 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -36.01068518 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000000,0.000000,0.000000 +-------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.prm.in b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.prm.in new file mode 100644 index 000000000..44b701208 --- /dev/null +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.prm.in @@ -0,0 +1,70 @@ +set VERBOSITY = 0 +set REPRODUCIBLE OUTPUT = true + +subsection Geometry + set NATOMS=1 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/aluminumSingleAtom_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/aluminumSingleAtom_domainBoundingVectors.inp + + subsection Optimization + set ION FORCE=true + end + +end + + +subsection Boundary conditions + set SELF POTENTIAL RADIUS = 8.0 + set PERIODIC1 = false + set PERIODIC2 = false + set PERIODIC3 = false +end + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 3 + + subsection Auto mesh generation parameters + set BASE MESH SIZE = 10.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AROUND ATOM = 1.0 + set MESH SIZE AT ATOM = 1.0 + end + +end + + +subsection DFT functional parameters + set PSEUDOPOTENTIAL CALCULATION =true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoAlONCV.inp + set PSEUDO TESTS FLAG = true + set EXCHANGE CORRELATION TYPE = 4 + set SPIN POLARIZATION = 1 + set START MAGNETIZATION = 0.25 +end + + +subsection SCF parameters + set MAXIMUM ITERATIONS = 100 + set TOLERANCE = 1e-6 # low tolerance ot run in Debug mode + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING METHOD = BROYDEN + set TEMPERATURE = 500 + set STARTING WFC=ATOMIC + + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 + set LOWER BOUND WANTED SPECTRUM = -10.0 + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set ORTHOGONALIZATION TYPE=GS + set CHEBYSHEV FILTER TOLERANCE=1e-3 + end +end + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in index 67d060483..0b99ff83e 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC = ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in index b1644bcf2..ccd3a4df6 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in index d42121f40..fe8e6a596 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in @@ -65,8 +65,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in index 58c812f7c..3bc9f4103 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in @@ -65,8 +65,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in index 5f35db14c..ab8cc1429 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in @@ -65,8 +65,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in index a7fcfa084..1135b771e 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in index db446f311..c930dc1a5 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in index 8600b7672..7eca2c450 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in index 37f525e96..e8ee90829 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in index 2d98e7571..d8417e9cb 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in index fb2e62c68..79599787c 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in @@ -64,8 +64,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in index 095046700..acf0c4333 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in @@ -64,8 +64,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC subsection Eigen-solver parameters diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in index f925ad190..e68bf0165 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in @@ -38,8 +38,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 5e-6 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in index d51bc0d98..cb1eceae9 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in @@ -39,8 +39,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 5e-6 diff --git a/tests/dft/pseudopotential/real/pseudoAlONCV.inp b/tests/dft/pseudopotential/real/pseudoAlONCV.inp new file mode 100644 index 000000000..820d18371 --- /dev/null +++ b/tests/dft/pseudopotential/real/pseudoAlONCV.inp @@ -0,0 +1 @@ +13 Al_ONCV_PBE-1.0.upf diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 6e7a56911..4121e697a 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -331,7 +331,7 @@ namespace dftParameters Patterns::Double(0.0,1.0), "[Standard] Mixing parameter to be used in density mixing schemes."); - prm.declare_entry("MIXING METHOD","BROYDEN", + prm.declare_entry("MIXING METHOD","ANDERSON", Patterns::Selection("BROYDEN|ANDERSON"), "[Standard] Method for density mixing. ANDERSON is the default option."); @@ -521,8 +521,8 @@ namespace dftParameters dftParameters::TVal = prm.get_double("TEMPERATURE"); dftParameters::numSCFIterations = prm.get_integer("MAXIMUM ITERATIONS"); dftParameters::selfConsistentSolverTolerance = prm.get_double("TOLERANCE"); - dftParameters::mixingHistory = prm.get_integer("ANDERSON SCHEME MIXING HISTORY"); - dftParameters::mixingParameter = prm.get_double("ANDERSON SCHEME MIXING PARAMETER"); + dftParameters::mixingHistory = prm.get_integer("MIXING HISTORY"); + dftParameters::mixingParameter = prm.get_double("MIXING PARAMETER"); dftParameters::mixingMethod = prm.get("MIXING METHOD"); dftParameters::startingWFCType = prm.get("STARTING WFC"); dftParameters::computeEnergyEverySCF = prm.get_bool("COMPUTE ENERGY EACH ITER"); From b7322b4458b7bac7dcbb0a6f8d73bfc79035383f Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Wed, 22 Aug 2018 21:31:28 -0400 Subject: [PATCH 18/59] Reset parameterFile_a.prm --- demo/ex1/parameterFile_a.prm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/ex1/parameterFile_a.prm b/demo/ex1/parameterFile_a.prm index d48cd3dda..a57978bab 100644 --- a/demo/ex1/parameterFile_a.prm +++ b/demo/ex1/parameterFile_a.prm @@ -16,7 +16,7 @@ subsection Boundary conditions end subsection Finite element mesh parameters - set POLYNOMIAL ORDER=1 + set POLYNOMIAL ORDER=4 subsection Auto mesh generation parameters set MESH SIZE AROUND ATOM = 0.5 end From 96dd45c65021e38e0a22dfad4eb7023c7cc7c630 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Wed, 22 Aug 2018 21:40:04 -0400 Subject: [PATCH 19/59] Reset parameterFile --- demo/ex1/parameterFile_a.prm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/ex1/parameterFile_a.prm b/demo/ex1/parameterFile_a.prm index a57978bab..b4e8e8547 100644 --- a/demo/ex1/parameterFile_a.prm +++ b/demo/ex1/parameterFile_a.prm @@ -31,7 +31,7 @@ end subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set MAXIMUM ITERATIONS = 1 + set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 1e-5 subsection Eigen-solver parameters From d862af5c6e3b1e9e4aa749c1bab7affdde6d26b7 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Wed, 22 Aug 2018 21:40:52 -0400 Subject: [PATCH 20/59] Changed verbosity back to 1 --- demo/ex1/parameterFile_a.prm | 1 - 1 file changed, 1 deletion(-) diff --git a/demo/ex1/parameterFile_a.prm b/demo/ex1/parameterFile_a.prm index b4e8e8547..7a3e15041 100644 --- a/demo/ex1/parameterFile_a.prm +++ b/demo/ex1/parameterFile_a.prm @@ -1,4 +1,3 @@ -set VERBOSITY = 3 subsection Geometry set NATOMS=2 set NATOM TYPES=1 From 903ff2970cc8d3bec8b0970970f59f193bf62edb Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Thu, 23 Aug 2018 02:04:06 -0400 Subject: [PATCH 21/59] Made reuse wfc to work with the new changes. ctests passed. --- include/dft.h | 1 + include/vectorUtilities.h | 102 +++++++++++++ src/dft/dft.cc | 21 +-- src/dft/initElectronicFields.cc | 50 +++--- .../nitrogenMolecule_02.mpirun=10.output | 143 ++++++++++++++++-- .../complex/nitrogenMolecule_02.prm.in | 16 +- .../complex/nitrogenMolecule_coordinates2.inp | 4 +- .../real/nitrogenMolecule_02.mpirun=10.output | 140 +++++++++++++++-- .../real/nitrogenMolecule_02.prm.in | 16 +- .../real/nitrogenMolecule_coordinates2.inp | 4 +- utils/vectorTools/vectorUtilities.cc | 106 +++++++++++++ 11 files changed, 522 insertions(+), 81 deletions(-) diff --git a/include/dft.h b/include/dft.h index a1304320b..ace105f32 100644 --- a/include/dft.h +++ b/include/dft.h @@ -572,6 +572,7 @@ namespace dftfe { */ dftUtils::constraintMatrixInfo constraintsNoneDataInfo; + ConstraintMatrix constraintsNone, constraintsNoneEigen, d_constraintsForTotalPotential, d_noConstraints; diff --git a/include/vectorUtilities.h b/include/vectorUtilities.h index 856e84c8f..835fb0536 100644 --- a/include/vectorUtilities.h +++ b/include/vectorUtilities.h @@ -63,6 +63,57 @@ namespace dftfe{ std::vector > & flattenedArrayCellLocalProcIndexId); +#ifdef USE_COMPLEX + /** @brief Copies a single field component from a flattenedArray STL + * vector containing multiple component fields to a 2-component field (real and complex) + * parallel distributed vector. + * + * @param[in] flattenedArray flattened STL vector with multiple component fields + * @param[in] totalNumberComponents total number of component fiels in flattenedArray + * @param[in] componentIndexRange desired range field components + * [componentIndexRange.first,componentIndexRange.second) + * @param[in] localProcDofIndicesReal local dof indices in the current processor + * which correspond to component-1 of 2-component parallel distributed array + * @param[in] localProcDofIndicesImag local dof indices in the current processor + * which correspond to component-2 of 2-component parallel distributed array + * @param[out] componentVectors vector of two component field parallel distributed vectors with + * the values corresponding to fields of componentIndexRange of flattenedArray. + * componentVectors is expected to be of the size + * componentIndexRange.second-componentIndexRange.first. Further, + * each entry of componentVectors is assumed to be already initialized with the 2-component + * version of the same single component partitioner used in the creation of the flattenedArray + * partitioner. + */ + void copyFlattenedSTLVecToSingleCompVec + (const std::vector> & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + const std::vector & localProcDofIndicesReal, + const std::vector & localProcDofIndicesImag, + std::vector> & componentVectors); + +#else + /** @brief Copies a single field component from a flattenedArray STL + * vector containing multiple component fields to a single field parallel distributed vector. + * + * @param[in] flattenedArray flattened STL vector with multiple component fields + * @param[in] totalNumberComponents total number of component fiels in flattenedArray + * @param[in] componentIndexRange desired range field components + * [componentIndexRange.first,componentIndexRange.second) + * @param[out] componentVectors vector of parallel distributed vectors with fields + * corresponding to componentIndexRange. componentVectors is expected to be of the size + * componentIndexRange.second-componentIndexRange.first. Further, each entry of + * componentVectors is assumed to be already initialized with the same single component + * partitioner used in the creation of the flattenedArray partitioner. + */ + void copyFlattenedSTLVecToSingleCompVec + (const std::vector & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + std::vector> & componentVectors); + +#endif + #ifdef USE_COMPLEX /** @brief Copies a single field component from a flattenedArray parallel distributed * vector containing multiple component fields to a 2-component field (real and complex) @@ -163,6 +214,57 @@ namespace dftfe{ const std::pair componentIndexRange, const std::vector> & componentVectors); +#endif + +#ifdef USE_COMPLEX + /** @brief Copies to a flattenedArray stl + * vector containing multiple component fields from a 2-component field (real and complex) + * parallel distributed vector. + * + * @param[out] flattenedArray flattened stl vector with multiple component fields + * @param[in] totalNumberComponents total number of component fiels in flattenedArray + * @param[in] componentIndexRange desired range field components + * [componentIndexRange.first,componentIndexRange.second) + * @param[in] localProcDofIndicesReal local dof indices in the current processor + * which correspond to component-1 of 2-component parallel distributed array + * @param[in] localProcDofIndicesImag local dof indices in the current processor + * which correspond to component-2 of 2-component parallel distributed array + * @param[in] componentVectors vector of two component field parallel distributed vectors with + * the values corresponding to fields of componentIndexRange of flattenedArray. + * componentVectors is expected to be of the size + * componentIndexRange.second-componentIndexRange.first. Further, + * each entry of componentVectors is assumed to be already initialized with the 2-component + * version of the same single component partitioner used in the creation of the flattenedArray + * partitioner. + */ + void copySingleCompVecToFlattenedSTLVec + (std::vector> & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + const std::vector & localProcDofIndicesReal, + const std::vector & localProcDofIndicesImag, + const std::vector> & componentVectors); + +#else + /** @brief Copies to a flattenedArray stl + * vector containing multiple component fields from a single field parallel distributed vector. + * + * @param[out] flattenedArray flattened stl vector with multiple component fields + * @param[in] totalNumberComponents total number of component fiels in flattenedArray + * @param[in] componentIndexRange desired range field components + * [componentIndexRange.first,componentIndexRange.second) + * @param[in] componentVectors vector of parallel distributed vectors with fields + * corresponding to componentIndexRange. componentVectors is expected to be of the size + * componentIndexRange.second-componentIndexRange.first. Further, each entry of + * componentVectors is assumed to be already initialized with the same single component + * partitioner used in the creation of the flattenedArray partitioner. + */ + void copySingleCompVecToFlattenedSTLVec + (std::vector & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + const std::vector> & componentVectors); + #endif } diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 66b964695..a68d9bea6 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -577,7 +577,8 @@ namespace dftfe { computingTimerStandard.enter_section("KSDFT problem initialization"); initImageChargesUpdateKPoints(); - updatePrevMeshDataStructures(); + if (dftParameters::isIonOpt || dftParameters::isCellOpt) + updatePrevMeshDataStructures(); // //reinitialize dirichlet BCs for total potential and vSelf poisson solutions // @@ -1385,14 +1386,14 @@ namespace dftfe { //Create the full dealii partitioned array // d_eigenVectorsFlattened.resize((1+dftParameters::spinPolarized)*d_kPointWeights.size()); - + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), numEigenValues, d_eigenVectorsFlattened[kPoint]); - + d_eigenVectorsFlattened[kPoint] = dataTypes::number(0.0); } @@ -1491,7 +1492,7 @@ namespace dftfe { { d_eigenVectorsFlattened[kPoint].reinit(0); } - + } @@ -1561,8 +1562,8 @@ namespace dftfe { dealii::parallel::distributed::Vector rhoNodalField; matrix_free_data.initialize_dof_vector(rhoNodalField,densityDofHandlerIndex); rhoNodalField=0; - std::function::active_cell_iterator & cell , - const unsigned int q)> funcRho = + std::function::active_cell_iterator & cell , + const unsigned int q)> funcRho = [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , const unsigned int q) {return (*rhoOutValues).find(cell->id())->second[q];}; @@ -1580,8 +1581,8 @@ namespace dftfe { { matrix_free_data.initialize_dof_vector(rhoNodalFieldSpin0,densityDofHandlerIndex); rhoNodalFieldSpin0=0; - std::function::active_cell_iterator & cell , - const unsigned int q)> funcRhoSpin0 = + std::function::active_cell_iterator & cell , + const unsigned int q)> funcRhoSpin0 = [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , const unsigned int q) {return (*rhoOutValuesSpinPolarized).find(cell->id())->second[2*q];}; @@ -1596,8 +1597,8 @@ namespace dftfe { matrix_free_data.initialize_dof_vector(rhoNodalFieldSpin1,densityDofHandlerIndex); rhoNodalFieldSpin1=0; - std::function::active_cell_iterator & cell , - const unsigned int q)> funcRhoSpin1 = + std::function::active_cell_iterator & cell , + const unsigned int q)> funcRhoSpin1 = [&](const typename dealii::DoFHandler<3>::active_cell_iterator & cell , const unsigned int q) {return (*rhoOutValuesSpinPolarized).find(cell->id())->second[2*q+1];}; diff --git a/src/dft/initElectronicFields.cc b/src/dft/initElectronicFields.cc index e5d16431a..aa652841c 100644 --- a/src/dft/initElectronicFields.cc +++ b/src/dft/initElectronicFields.cc @@ -143,10 +143,7 @@ void dftClass::initElectronicFields(const unsigned int usePreviousGroun else if (usePreviousGroundStateFields==1) { for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) - vectorTools::createDealiiVector - (matrix_free_data.get_vector_partitioner(), - numEigenValues, - d_eigenVectorsFlattened[kPoint]); + d_eigenVectorsFlattenedSTL[kPoint].resize(numEigenValues*matrix_free_data.get_vector_partitioner()->local_size(),dataTypes::number(0.0)); pcout <::initElectronicFields(const unsigned int usePreviousGroun for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { #ifdef USE_COMPLEX - vectorTools::copyFlattenedDealiiVecToSingleCompVec - (d_eigenVectorsFlattened[kPoint], + vectorTools::copyFlattenedSTLVecToSingleCompVec + (d_eigenVectorsFlattenedSTL[kPoint], numEigenValues, std::make_pair(0,numEigenValues), localProc_dof_indicesReal, localProc_dof_indicesImag, eigenVectors[kPoint]); #else - vectorTools::copyFlattenedDealiiVecToSingleCompVec - (d_eigenVectorsFlattened[kPoint], + vectorTools::copyFlattenedSTLVecToSingleCompVec + (d_eigenVectorsFlattenedSTL[kPoint], numEigenValues, std::make_pair(0,numEigenValues), eigenVectors[kPoint]); #endif - d_eigenVectorsFlattened[kPoint].reinit(0); + for(unsigned int i= 0; i < numEigenValues; ++i) + { + constraintsNoneEigenDataInfoPrev.distribute(eigenVectors[kPoint][i]); + eigenVectors[kPoint][i].update_ghost_values(); + } + + d_eigenVectorsFlattenedSTL[kPoint].clear(); + std::vector().swap(d_eigenVectorsFlattenedSTL[kPoint]); } initPsiAndRhoFromPreviousGroundStatePsi(eigenVectors); for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { - vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), - numEigenValues, - d_eigenVectorsFlattened[kPoint]); + //Create the full STL array + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + d_eigenVectorsFlattenedSTL[kPoint].resize(numEigenValues*matrix_free_data.get_vector_partitioner()->local_size(), + dataTypes::number(0.0)); + #ifdef USE_COMPLEX - vectorTools::copySingleCompVecToFlattenedDealiiVec - (d_eigenVectorsFlattened[kPoint], + vectorTools::copySingleCompVecToFlattenedSTLVec + (d_eigenVectorsFlattenedSTL[kPoint], numEigenValues, std::make_pair(0,numEigenValues), localProc_dof_indicesReal, localProc_dof_indicesImag, eigenVectors[kPoint]); #else - vectorTools::copySingleCompVecToFlattenedDealiiVec - (d_eigenVectorsFlattened[kPoint], + vectorTools::copySingleCompVecToFlattenedSTLVec + (d_eigenVectorsFlattenedSTL[kPoint], numEigenValues, std::make_pair(0,numEigenValues), eigenVectors[kPoint]); @@ -208,9 +214,10 @@ void dftClass::initElectronicFields(const unsigned int usePreviousGroun } } - updatePrevMeshDataStructures(); + if (dftParameters::isIonOpt || dftParameters::isCellOpt) + updatePrevMeshDataStructures(); - if (dftParameters::verbosity>=2) + if (dftParameters::verbosity>=2) if (dftParameters::spinPolarized==1) pcout<< std::endl<<"net magnetization: "<< totalMagnetization(rhoInValuesSpinPolarized) <::updatePrevMeshDataStructures() { matrix_free_data.initialize_dof_vector(d_tempEigenVecPrev,eigenDofHandlerIndex); + constraintsNoneEigenDataInfoPrev.initialize(d_tempEigenVecPrev.get_partitioner(), - constraintsNoneEigen); + constraintsNoneEigen); + // //update serial and parallel unmoved previous mesh // - if (dftParameters::isIonOpt || dftParameters::isCellOpt) - d_mesh.generateSerialAndParallelUnmovedPreviousMesh(atomLocations, + d_mesh.generateSerialAndParallelUnmovedPreviousMesh(atomLocations, d_imagePositions, d_domainBoundingVectors); if (dftParameters::verbosity>=4) diff --git a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output index a438af63a..f34a9410e 100644 --- a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output +++ b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output @@ -7,15 +7,15 @@ v2 : 0.000000000000000000e+00 8.000000000000000000e+01 0.000000000000000000e+00 v3 : 0.000000000000000000e+00 0.000000000000000000e+00 8.000000000000000000e+01 ----------------------------------------------------------------------------------------- -----Fractional coordinates of atoms------ -AtomId 0: 4.871249999999999747e-01 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 5.128749999999999698e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 0: 4.837500000000000133e-01 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 5.162499999999999867e-01 0.000000000000000000e+00 0.000000000000000000e+00 ----------------------------------------------------------------------------------------- Number Image Charges 14 Finite element mesh information ------------------------------------------------- -number of elements: 960 -number of degrees of freedom: 33369 +number of elements: 2792 +number of degrees of freedom: 94211 ------------------------------------------------- Setting initial guess for wavefunctions.... @@ -33,12 +33,12 @@ SCF iterations converged to the specified tolerance after: 12 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.88860965 + Total energy: -19.79765856 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.078047,0.000000,0.000000 -AtomId 1: 0.078047,0.000000,0.000000 +AtomId 0: 0.292465,0.000000,0.000000 +AtomId 1: 0.292453,0.000011,0.000012 -------------------------------------------------------------------------------------------- -----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- v1 : 80.000000 0.000000 0.000000 @@ -46,15 +46,128 @@ v2 : 0.000000 80.000000 0.000000 v3 : 0.000000 0.000000 80.000000 ----------------------------------------------------------------------------------------- -----Fractional coordinates of atoms------ -AtomId 0: 0.486442 0.000000 0.000000 -AtomId 1: 0.513558 0.000000 0.000000 +AtomId 0: 0.486309 0.000000 0.000000 +AtomId 1: 0.513691 0.000000 0.000000 ----------------------------------------------------------------------------------------- Number Image Charges 14 Finite element mesh information ------------------------------------------------- -number of elements: 960 -number of degrees of freedom: 33369 +number of elements: 2736 +number of degrees of freedom: 92699 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.89600598 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.126044,0.000000,0.000000 +AtomId 1: 0.126052,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.488247 0.000000 0.000000 +AtomId 1: 0.511753 0.000000 0.000000 +----------------------------------------------------------------------------------------- +Number Image Charges 14 + +Finite element mesh information +------------------------------------------------- +number of elements: 2624 +number of degrees of freedom: 88475 +------------------------------------------------- + +Reading initial guess for PSI.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.83956439 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.401557,0.000000,0.000000 +AtomId 1: 0.401557,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.486772 0.000000 0.000000 +AtomId 1: 0.513228 0.000000 0.000000 +----------------------------------------------------------------------------------------- +Number Image Charges 14 + +Finite element mesh information +------------------------------------------------- +number of elements: 2736 +number of degrees of freedom: 92699 +------------------------------------------------- + +Reading initial guess for PSI.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.90260843 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.044737,0.000000,0.000000 +AtomId 1: 0.044724,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.486920 0.000000 0.000000 +AtomId 1: 0.513080 0.000000 0.000000 +----------------------------------------------------------------------------------------- +Number Image Charges 14 + +Finite element mesh information +------------------------------------------------- +number of elements: 2736 +number of degrees of freedom: 92699 ------------------------------------------------- Interpolating previous groundstate PSI into the new finite element mesh.... @@ -62,14 +175,14 @@ Interpolating previous groundstate PSI into the new finite element mesh.... Pseudopotential initalization.... Starting SCF iterations.... -SCF iterations converged to the specified tolerance after: 9 iterations. +SCF iterations converged to the specified tolerance after: 11 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.88297263 + Total energy: -19.90333353 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.072328,0.000000,0.000000 -AtomId 1: 0.072326,0.000000,0.000000 +AtomId 0: 0.013419,0.000000,0.000000 +AtomId 1: 0.013420,0.000000,0.000000 -------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in index 081c14ded..746f8bdbf 100644 --- a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in +++ b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in @@ -8,7 +8,7 @@ subsection Geometry set DOMAIN VECTORS FILE = @SOURCE_DIR@/nitrogenMolecule_domainVectors.inp subsection Optimization set ION OPT=true - set FORCE TOL=0.075 + set FORCE TOL=4e-2 set ION RELAX FLAGS FILE =@SOURCE_DIR@/nitrogenMolecule_relaxationFlags.inp set REUSE WFC=true end @@ -24,10 +24,10 @@ end subsection Finite element mesh parameters set POLYNOMIAL ORDER=3 subsection Auto mesh generation parameters - set MESH SIZE AROUND ATOM = 0.7 - set BASE MESH SIZE = 10.0 + set MESH SIZE AROUND ATOM = 0.5 + set BASE MESH SIZE = 13.0 set ATOM BALL RADIUS = 2.0 - set MESH SIZE AT ATOM = 0.7 + set MESH SIZE AT ATOM = 0.5 end end @@ -43,12 +43,12 @@ subsection SCF parameters set ANDERSON SCHEME MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 - set TOLERANCE = 5e-6 + set TOLERANCE = 1e-5 subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 - set ORTHOGONALIZATION TYPE=LW - set CHEBYSHEV POLYNOMIAL DEGREE = 30 - set CHEBYSHEV FILTER TOLERANCE=1e-3 + set ORTHOGONALIZATION TYPE=PGS + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-2 end end diff --git a/tests/dft/pseudopotential/complex/nitrogenMolecule_coordinates2.inp b/tests/dft/pseudopotential/complex/nitrogenMolecule_coordinates2.inp index 547edf486..a8442a9f2 100644 --- a/tests/dft/pseudopotential/complex/nitrogenMolecule_coordinates2.inp +++ b/tests/dft/pseudopotential/complex/nitrogenMolecule_coordinates2.inp @@ -1,2 +1,2 @@ -7 5 0.487125 0.00000000E+00 0.00000000E+00 -7 5 0.512875 0.00000000E+00 0.00000000E+00 +7 5 0.48375 0.00000000E+00 0.00000000E+00 +7 5 0.51625 0.00000000E+00 0.00000000E+00 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_02.mpirun=10.output b/tests/dft/pseudopotential/real/nitrogenMolecule_02.mpirun=10.output index 34ff6ff16..b579edc16 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_02.mpirun=10.output +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_02.mpirun=10.output @@ -6,14 +6,14 @@ v2 : 0.000000000000000000e+00 8.000000000000000000e+01 0.000000000000000000e+00 v3 : 0.000000000000000000e+00 0.000000000000000000e+00 8.000000000000000000e+01 ----------------------------------------------------------------------------------------- ------------Cartesian coordinates of atoms (origin at center of domain)------------------ -AtomId 0: -1.030000000000000027e+00 0.000000000000000000e+00 0.000000000000000000e+00 -AtomId 1: 1.030000000000000027e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 0: -1.300000000000000044e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 1.300000000000000044e+00 0.000000000000000000e+00 0.000000000000000000e+00 ----------------------------------------------------------------------------------------- Finite element mesh information ------------------------------------------------- -number of elements: 960 -number of degrees of freedom: 31257 +number of elements: 2792 +number of degrees of freedom: 88305 ------------------------------------------------- Setting initial guess for wavefunctions.... @@ -26,17 +26,127 @@ Reading initial guess for electron-density..... Pseudopotential initalization.... +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.79765864 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.292441,0.000000,0.000000 +AtomId 1: 0.292440,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.095291 0.000000 0.000000 +AtomId 1: 1.095292 0.000000 0.000000 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2736 +number of degrees of freedom: 86793 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 11 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.89600270 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.126070,0.000000,0.000000 +AtomId 1: 0.126076,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -0.940163 0.000000 0.000000 +AtomId 1: 0.940165 0.000000 0.000000 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2624 +number of degrees of freedom: 83069 +------------------------------------------------- + +Reading initial guess for PSI.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.83952675 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.401845,0.000000,0.000000 +AtomId 1: 0.401847,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.058245 0.000000 0.000000 +AtomId 1: 1.058246 0.000000 0.000000 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2736 +number of degrees of freedom: 86793 +------------------------------------------------- + +Reading initial guess for PSI.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Pseudopotential initalization.... + Starting SCF iterations.... SCF iterations converged to the specified tolerance after: 12 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.88861860 + Total energy: -19.90260726 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.078047,0.000000,0.000000 -AtomId 1: 0.078045,0.000000,0.000000 +AtomId 0: 0.044776,0.000000,0.000000 +AtomId 1: 0.044776,0.000000,0.000000 -------------------------------------------------------------------------------------------- -----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- v1 : 80.000000 0.000000 0.000000 @@ -44,14 +154,14 @@ v2 : 0.000000 80.000000 0.000000 v3 : 0.000000 0.000000 80.000000 ----------------------------------------------------------------------------------------- ------------Cartesian coordinates of atoms (origin at center of domain)------------------ -AtomId 0: -1.084633 0.000000 0.000000 -AtomId 1: 1.084631 0.000000 0.000000 +AtomId 0: -1.046407 0.000000 0.000000 +AtomId 1: 1.046408 0.000000 0.000000 ----------------------------------------------------------------------------------------- Finite element mesh information ------------------------------------------------- -number of elements: 960 -number of degrees of freedom: 31257 +number of elements: 2736 +number of degrees of freedom: 86793 ------------------------------------------------- Interpolating previous groundstate PSI into the new finite element mesh.... @@ -59,14 +169,14 @@ Interpolating previous groundstate PSI into the new finite element mesh.... Pseudopotential initalization.... Starting SCF iterations.... -SCF iterations converged to the specified tolerance after: 9 iterations. +SCF iterations converged to the specified tolerance after: 11 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.88298179 + Total energy: -19.90333345 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.072326,0.000000,0.000000 -AtomId 1: 0.072323,0.000000,0.000000 +AtomId 0: 0.013435,0.000000,0.000000 +AtomId 1: 0.013434,0.000000,0.000000 -------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in index d51bc0d98..b414bd539 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in @@ -8,7 +8,7 @@ subsection Geometry set DOMAIN VECTORS FILE = @SOURCE_DIR@/nitrogenMolecule_domainVectors.inp subsection Optimization set ION OPT=true - set FORCE TOL=0.075 + set FORCE TOL=4e-2 set ION RELAX FLAGS FILE =@SOURCE_DIR@/nitrogenMolecule_relaxationFlags.inp set REUSE WFC=true end @@ -24,10 +24,10 @@ end subsection Finite element mesh parameters set POLYNOMIAL ORDER=3 subsection Auto mesh generation parameters - set MESH SIZE AROUND ATOM = 0.7 - set BASE MESH SIZE = 10.0 + set MESH SIZE AROUND ATOM = 0.5 + set BASE MESH SIZE = 13.0 set ATOM BALL RADIUS = 2.0 - set MESH SIZE AT ATOM = 0.7 + set MESH SIZE AT ATOM = 0.5 end end @@ -43,12 +43,12 @@ subsection SCF parameters set ANDERSON SCHEME MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 - set TOLERANCE = 5e-6 + set TOLERANCE = 1e-5 subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 - set ORTHOGONALIZATION TYPE=LW - set CHEBYSHEV POLYNOMIAL DEGREE = 30 - set CHEBYSHEV FILTER TOLERANCE=1e-3 + set ORTHOGONALIZATION TYPE=PGS + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-2 end end diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_coordinates2.inp b/tests/dft/pseudopotential/real/nitrogenMolecule_coordinates2.inp index 6b72b102d..ed186382c 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_coordinates2.inp +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_coordinates2.inp @@ -1,2 +1,2 @@ -7 5 -1.030000000E+00 0.00000000E+00 0.00000000E+00 -7 5 1.030000000E+00 0.00000000E+00 0.00000000E+00 +7 5 -1.30000000E+00 0.00000000E+00 0.00000000E+00 +7 5 1.30000000E+00 0.00000000E+00 0.00000000E+00 diff --git a/utils/vectorTools/vectorUtilities.cc b/utils/vectorTools/vectorUtilities.cc index f9cee9372..8c3b8c6b2 100644 --- a/utils/vectorTools/vectorUtilities.cc +++ b/utils/vectorTools/vectorUtilities.cc @@ -199,6 +199,58 @@ namespace dftfe } +#ifdef USE_COMPLEX + void copyFlattenedSTLVecToSingleCompVec + (const std::vector> & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + const std::vector & localProcDofIndicesReal, + const std::vector & localProcDofIndicesImag, + std::vector> & componentVectors) + { + Assert(componentVectors.size()==(componentIndexRange.second-componentIndexRange.first), + dealii::ExcMessage("Incorrect dimensions of componentVectors")); + Assert(componentIndexRange.first & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + std::vector> & componentVectors) + { + Assert(componentVectors.size()==(componentIndexRange.second-componentIndexRange.first), + dealii::ExcMessage("Incorrect dimensions of componentVectors")); + Assert(componentIndexRange.first > & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + const std::vector & localProcDofIndicesReal, + const std::vector & localProcDofIndicesImag, + const std::vector> & componentVectors) + { + Assert(componentVectors.size()==(componentIndexRange.second-componentIndexRange.first), + dealii::ExcMessage("Incorrect dimensions of componentVectors")); + Assert(componentIndexRange.first (real,imag); + } + + } +#else + void copySingleCompVecToFlattenedSTLVec + (std::vector & flattenedArray, + const unsigned int totalNumberComponents, + const std::pair componentIndexRange, + const std::vector> & componentVectors) + { + Assert(componentVectors.size()==(componentIndexRange.second-componentIndexRange.first), + dealii::ExcMessage("Incorrect dimensions of componentVectors")); + Assert(componentIndexRange.first &, const unsigned int , From 0c85170df2da1a36ead9840ad15984f3986005b7 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Thu, 23 Aug 2018 03:14:33 -0400 Subject: [PATCH 22/59] Removed extra copy operation in density.cc. ctests passed. --- src/dft/density.cc | 50 ++++++++++++++-------------------------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/src/dft/density.cc b/src/dft/density.cc index 75d4bd443..2cad42435 100644 --- a/src/dft/density.cc +++ b/src/dft/density.cc @@ -101,49 +101,29 @@ void dftClass::compute_rhoOut() if((ivec+currentBlockSize)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && (ivec+currentBlockSize)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) { - - dealii::parallel::distributed::Vector eigenVectorsFlattenedArrayBlock; - vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), - currentBlockSize, - eigenVectorsFlattenedArrayBlock); - - constraintsNoneDataInfo.precomputeMaps(matrix_free_data.get_vector_partitioner(), - eigenVectorsFlattenedArrayBlock.get_partitioner(), - currentBlockSize); - - - - for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) - { - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - { - for(unsigned int iWave = 0; iWave < currentBlockSize; ++iWave) - { - eigenVectorsFlattenedArrayBlock.local_element(iNode*currentBlockSize+iWave) - = d_eigenVectorsFlattenedSTL[kPoint][iNode*numEigenValues+ivec+iWave]; - } - } - - constraintsNoneDataInfo.distribute(eigenVectorsFlattenedArrayBlock, - currentBlockSize); - - + for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) + { #ifdef USE_COMPLEX - vectorTools::copyFlattenedDealiiVecToSingleCompVec - (eigenVectorsFlattenedArrayBlock, - currentBlockSize, - std::make_pair(0,currentBlockSize), + vectorTools::copyFlattenedSTLVecToSingleCompVec + (d_eigenVectorsFlattenedSTL[kPoint], + numEigenValues, + std::make_pair(ivec,ivec+currentBlockSize), localProc_dof_indicesReal, localProc_dof_indicesImag, eigenVectors[kPoint]); #else - vectorTools::copyFlattenedDealiiVecToSingleCompVec - (eigenVectorsFlattenedArrayBlock, - currentBlockSize, - std::make_pair(0,currentBlockSize), + vectorTools::copyFlattenedSTLVecToSingleCompVec + (d_eigenVectorsFlattenedSTL[kPoint], + numEigenValues, + std::make_pair(ivec,ivec+currentBlockSize), eigenVectors[kPoint]); #endif + for(unsigned int i= 0; i < currentBlockSize; ++i) + { + constraintsNoneEigenDataInfo.distribute(eigenVectors[kPoint][i]); + eigenVectors[kPoint][i].update_ghost_values(); + } } #ifdef USE_COMPLEX From 23f4efe5927cb3140f86dcb1e118719c40ad311d Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Thu, 23 Aug 2018 04:28:32 -0400 Subject: [PATCH 23/59] A small tweak to reduce peak memory in subspace rotation. ctests passed. --- src/linAlg/linearAlgebraOperationsInternal.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index 6aaa5f25f..1c3413e7f 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -345,7 +345,8 @@ namespace dftfe */ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - const unsigned int dofsBlockSize=dftParameters::subspaceRotDofsBlockSize; + const unsigned int dofsBlockSize=std::min(numLocalDofs, + dftParameters::subspaceRotDofsBlockSize); std::vector rotationMatBlock(vectorsBlockSize*N,0.0); std::vector rotatedVectorsMatBlock(N*dofsBlockSize,0.0); @@ -578,7 +579,8 @@ namespace dftfe */ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - const unsigned int dofsBlockSize=dftParameters::subspaceRotDofsBlockSize; + const unsigned int dofsBlockSize=std::min(numLocalDofs, + dftParameters::subspaceRotDofsBlockSize); std::vector rotationMatBlock(vectorsBlockSize*N,0.0); std::vector rotatedVectorsMatBlock(N*dofsBlockSize,0.0); From 2b914e5a13787fa2711d2f994dc899ab998df5f4 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Thu, 23 Aug 2018 12:58:52 -0400 Subject: [PATCH 24/59] Bug fix in subspace rotation. Added new ctest related to the bug. ctests passed. --- src/linAlg/linearAlgebraOperationsInternal.cc | 4 +- .../real/hcpMgPrim_01_f.mpirun=8.output | 42 +++++++++ .../real/hcpMgPrim_01_f.prm.in | 90 +++++++++++++++++++ 3 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_f.mpirun=8.output create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index 1c3413e7f..4803989b2 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -345,7 +345,7 @@ namespace dftfe */ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - const unsigned int dofsBlockSize=std::min(numLocalDofs, + const unsigned int dofsBlockSize=std::min(maxNumLocalDofs, dftParameters::subspaceRotDofsBlockSize); std::vector rotationMatBlock(vectorsBlockSize*N,0.0); @@ -579,7 +579,7 @@ namespace dftfe */ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - const unsigned int dofsBlockSize=std::min(numLocalDofs, + const unsigned int dofsBlockSize=std::min(maxNumLocalDofs, dftParameters::subspaceRotDofsBlockSize); std::vector rotationMatBlock(vectorsBlockSize*N,0.0); diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_f.mpirun=8.output b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.mpirun=8.output new file mode 100644 index 000000000..eccad9ebc --- /dev/null +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.mpirun=8.output @@ -0,0 +1,42 @@ +number of atoms: 2 +number of atoms types: 1 +Z:12 +============================================================================================================================= +number of electrons: 20 +number of eigen values: 27 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 5.882191053999999752e+00 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : -2.941095526999999876e+00 5.094126882677563195e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 9.585777736000000715e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 6.666666666666666297e-01 3.333333333333333148e-01 5.000000000000000000e-01 +----------------------------------------------------------------------------------------- +Number Image Charges 2661 + +Finite element mesh information +------------------------------------------------- +number of elements: 976 +number of degrees of freedom: 10699 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -108.57428916 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000046,0.000027,0.005593 +AtomId 1: 0.005189,0.002996,0.005591 +-------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in new file mode 100644 index 000000000..8af45446a --- /dev/null +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in @@ -0,0 +1,90 @@ +set VERBOSITY= 0 +set REPRODUCIBLE OUTPUT=true + +subsection Parallelization + set NPBAND=2 +end + +subsection Geometry + set NATOMS=2 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/hcpMgPrim_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/hcpMgPrim_domainBoundingVectors.inp + + subsection Optimization + set ION FORCE=true + set CELL STRESS=false + end + +end + + +subsection Boundary conditions + set SELF POTENTIAL RADIUS = 1.6 + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true +end + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 2 + + subsection Auto mesh generation parameters + set BASE MESH SIZE = 1.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AROUND ATOM = 0.5 + set MESH SIZE AT ATOM = 0.5 + end + +end + + +subsection Brillouin zone k point sampling options + + subsection Monkhorst-Pack (MP) grid generation + set SAMPLING POINTS 1 = 1 + set SAMPLING POINTS 2 = 1 + set SAMPLING POINTS 3 = 1 + set SAMPLING SHIFT 1 = 0 + set SAMPLING SHIFT 2 = 0 + set SAMPLING SHIFT 3 = 0 + end +end + + + +subsection DFT functional parameters + set PSEUDOPOTENTIAL CALCULATION =true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoMgONCV.inp + set PSEUDO TESTS FLAG = true + set EXCHANGE CORRELATION TYPE = 4 +end + + +subsection SCF parameters + set MAXIMUM ITERATIONS = 100 + set TOLERANCE = 1e-6 + set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set ANDERSON SCHEME MIXING HISTORY = 70 + set TEMPERATURE = 500 + set STARTING WFC= ATOMIC + + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 27 + set SPECTRUM SPLIT CORE EIGENSTATES=7 + set LOWER BOUND WANTED SPECTRUM = -10.0 + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-3 + set ORTHOGONALIZATION TYPE=PGS + set WFC BLOCK SIZE=5 + set ENABLE SUBSPACE ROT PGS OPT=true + set SUBSPACE ROT DOFS BLOCK SIZE=10000 + end +end + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end From 20b226cbac56dbe331c3522e6bcf403a937dbb32 Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Sat, 25 Aug 2018 18:08:46 -0400 Subject: [PATCH 25/59] some issues with Broyden mixing are fixed. Changes on Broyden mixing needed for relaxation are still not done. Will make those changes soon. --- src/dft/density.cc | 12 ++++ src/dft/mixingschemes.cc | 55 +++++++++++++------ src/symmetry/symmetrizeRho.cc | 12 ++++ .../real/aluminumSingleAtom_02.output | 2 +- .../real/aluminumSingleAtom_02_b.output | 4 +- 5 files changed, 64 insertions(+), 21 deletions(-) diff --git a/src/dft/density.cc b/src/dft/density.cc index 26a49f68b..8df22ff3a 100644 --- a/src/dft/density.cc +++ b/src/dft/density.cc @@ -375,6 +375,18 @@ void dftClass::compute_rhoOut() gradRhoInValsSpinPolarized.pop_front(); gradRhoOutValsSpinPolarized.pop_front(); } + + if (dftParameters::mixingMethod=="BROYDEN") + { + dFBroyden.pop_front(); + uBroyden.pop_front(); + if(dftParameters::xc_id == 4)//GGA + { + graddFBroyden.pop_front(); + gradUBroyden.pop_front(); + } + } + } } diff --git a/src/dft/mixingschemes.cc b/src/dft/mixingschemes.cc index 10d61ddb9..ddd58aa8a 100644 --- a/src/dft/mixingschemes.cc +++ b/src/dft/mixingschemes.cc @@ -251,6 +251,7 @@ double dftClass::mixing_broyden(){ const unsigned int num_quad_points = quadrature.size(); // int N = dFBroyden.size() + 1; + // std::map > delRho, delGradRho ; dFBroyden.push_back(std::map >()); @@ -324,17 +325,25 @@ double dftClass::mixing_broyden(){ // wtTemp=Utilities::MPI::sum(wtTempLoc, mpi_communicator); dfMag=Utilities::MPI::sum(dfMagLoc, mpi_communicator); - if (N==1) + if (N==1) { w0Broyden = Utilities::MPI::sum(w0Loc, mpi_communicator); - + w0Broyden = std::pow(w0Broyden, -0.5 ) ; + } + // Comment out following line, for using w0 computed from simply mixed rho (not recommended) + w0Broyden = 0.0 ; + // + wtTemp = std::pow(wtTemp, -0.5 ) ; + // + // Comment out push_back(1.0) and uncomment push_back(wtTemp) to include history dependence in wtBroyden (not recommended) + //wtBroyden.push_back(wtTemp) ; + wtBroyden.push_back(1.0) ; // - cell = dofHandler.begin_active(), endc = dofHandler.end(); // - wtTemp = std::pow(wtTemp, -0.5 ) ; - wtBroyden.push_back(wtTemp) ; double G = dftParameters::mixingParameter ; // std::vector c(N, 0.0) , invBeta(N*N, 0.0), beta(N*N, 0.0), gamma(N, 0.0), cLoc(N, 0.0) , invBetaLoc(N*N, 0.0) ; + // + cell = dofHandler.begin_active(), endc = dofHandler.end(); for (; cell!=endc; ++cell) if (cell->is_locally_owned()) { @@ -364,10 +373,6 @@ double dftClass::mixing_broyden(){ { invBetaLoc[N*k + l] += wtBroyden[k] * wtBroyden[l] * (dFBroyden[k])[cell->id()][q_point] * (dFBroyden[l])[cell->id()][q_point] *fe_values.JxW(q_point); invBetaLoc[N*l + k] = invBetaLoc[N*k + l] ; - if (l==k) { - invBetaLoc[N*l + l] = w0Broyden*w0Broyden + invBetaLoc[N*l + l] ; - beta[N*l + l] = 1.0 ; - } } } } @@ -376,6 +381,11 @@ double dftClass::mixing_broyden(){ for (unsigned int k = 0; k < N ; ++k) { for (unsigned int l = 0; l < N ; ++l) { invBeta[N*k + l]=Utilities::MPI::sum(invBetaLoc[N*k + l], mpi_communicator); + if (l==k) + { + invBeta[N*l + l] = w0Broyden*w0Broyden + invBeta[N*l + l] ; + beta[N*l + l] = 1.0 ; + } } c[k]=Utilities::MPI::sum(cLoc[k], mpi_communicator); } @@ -533,17 +543,24 @@ double dftClass::mixing_broyden_spinPolarized(){ // wtTemp=Utilities::MPI::sum(wtTempLoc, mpi_communicator); dfMag=Utilities::MPI::sum(dfMagLoc, mpi_communicator); - if (N==1) + if (N==1) { w0Broyden = Utilities::MPI::sum(w0Loc, mpi_communicator); - + w0Broyden = std::pow(w0Broyden, -0.5 ) ; + } + // Comment out following line, for using w0 computed from simply mixed rho (not recommended) + w0Broyden = 0.0 ; // - cell = dofHandler.begin_active(), endc = dofHandler.end(); + wtTemp = std::pow(wtTemp, -0.5 ) ; + // + // Comment out push_back(1.0) and uncomment push_back(wtTemp) to include history dependence in wtBroyden (not recommended) + //wtBroyden.push_back(wtTemp) ; + wtBroyden.push_back(1.0) ; // - wtTemp = std::pow(wtTemp, -0.5 ) ; - wtBroyden.push_back(wtTemp) ; double G = dftParameters::mixingParameter ; // std::vector c(N, 0.0) , invBeta(N*N, 0.0), beta(N*N, 0.0), gamma(N, 0.0), cLoc(N, 0.0) , invBetaLoc(N*N, 0.0) ; + // + cell = dofHandler.begin_active(), endc = dofHandler.end(); for (; cell!=endc; ++cell) if (cell->is_locally_owned()) { @@ -579,10 +596,6 @@ double dftClass::mixing_broyden_spinPolarized(){ invBetaLoc[N*k + l] += wtBroyden[k] * wtBroyden[l] * ( (dFBroyden[k])[cell->id()][2*q_point] + (dFBroyden[k])[cell->id()][2*q_point+1]) * ( (dFBroyden[l])[cell->id()][2*q_point] + (dFBroyden[l])[cell->id()][2*q_point+1]) *fe_values.JxW(q_point); invBetaLoc[N*l + k] = invBetaLoc[N*k + l] ; - if (l==k) { - invBetaLoc[N*l + l] = w0Broyden*w0Broyden + invBetaLoc[N*l + l] ; - beta[N*l + l] = 1.0 ; - } } } } @@ -591,6 +604,12 @@ double dftClass::mixing_broyden_spinPolarized(){ for (unsigned int k = 0; k < N ; ++k) { for (unsigned int l = 0; l < N ; ++l) { invBeta[N*k + l]=Utilities::MPI::sum(invBetaLoc[N*k + l], mpi_communicator); + // + if (l==k) + { + invBeta[N*l + l] = w0Broyden*w0Broyden + invBeta[N*l + l] ; + beta[N*l + l] = 1.0 ; + } } c[k]=Utilities::MPI::sum(cLoc[k], mpi_communicator); } diff --git a/src/symmetry/symmetrizeRho.cc b/src/symmetry/symmetrizeRho.cc index e03167eb4..a29633b1b 100644 --- a/src/symmetry/symmetrizeRho.cc +++ b/src/symmetry/symmetrizeRho.cc @@ -172,6 +172,18 @@ void symmetryClass::computeAndSymmetrize_rhoOut() dftPtr->gradRhoOutValsSpinPolarized.pop_front(); } } + // + if (dftParameters::mixingMethod=="BROYDEN") + { + dftPtr->dFBroyden.pop_front(); + dftPtr->uBroyden.pop_front(); + if(dftParameters::xc_id == 4)//GGA + { + dftPtr->graddFBroyden.pop_front(); + dftPtr->gradUBroyden.pop_front(); + } + } + } } //============================================================================================================================================= diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output index 3a7a86b89..b9e26b443 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output @@ -27,7 +27,7 @@ Reading initial guess for electron-density..... Pseudopotential initalization.... Starting SCF iterations.... -SCF iterations converged to the specified tolerance after: 11 iterations. +SCF iterations converged to the specified tolerance after: 9 iterations. Energy computations (Hartree) ------------------- diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output index cbbb4cd0b..297853275 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output @@ -27,11 +27,11 @@ Reading initial guess for electron-density..... Pseudopotential initalization.... Starting SCF iterations.... -SCF iterations converged to the specified tolerance after: 13 iterations. +SCF iterations converged to the specified tolerance after: 11 iterations. Energy computations (Hartree) ------------------- - Total energy: -36.01068518 + Total energy: -36.01068519 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- From edd175adab89fd061b628bc0e006815e9e574f6b Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Thu, 30 Aug 2018 01:42:32 -0500 Subject: [PATCH 26/59] Updated helpers/XSEDEStampede2KNL/setupStampede2.sh to the new installation paths --- helpers/XSEDEStampede2KNL/setupStampede2.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/helpers/XSEDEStampede2KNL/setupStampede2.sh b/helpers/XSEDEStampede2KNL/setupStampede2.sh index b713beee0..7bb5c6e7a 100755 --- a/helpers/XSEDEStampede2KNL/setupStampede2.sh +++ b/helpers/XSEDEStampede2KNL/setupStampede2.sh @@ -8,11 +8,11 @@ set -o pipefail # and optimization flag #Paths for external libraries -dealiiPetscRealDir="/work/05316/dsambit/groupSoftwaresStampede2/dealiiKnl/intel_18.0.0_petscReal_scalapack_64Bit_avx512" -dealiiPetscComplexDir="/work/05316/dsambit/groupSoftwaresStampede2/dealiiExpt/intel_18.0.1_petscComplex_64Bit_scalapack" -alglibDir="/work/05316/dsambit/groupSoftwaresStampede2/alglib/cpp/src" -libxcDir="/work/05316/dsambit/groupSoftwaresStampede2/libxc/libxc-4.0.4_install_intel" -spglibDir="/work/05316/dsambit/groupSoftwaresStampede2/spglibInstall" +dealiiPetscRealDir="/work/05316/dsambit/publicSharedSoftware/dealiiDev/intel_18.0.0_petscReal_scalapack_64Bit" +dealiiPetscComplexDir="/work/05316/dsambit/publicSharedSoftware/dealiiDev/intel_18.0.0_petscComplex_scalapack_64Bit" +alglibDir="/work/05316/dsambit/publicSharedSoftware/alglib/cppIntel18.0.0/src" +libxcDir="/work/05316/dsambit/publicSharedSoftware/libxc/install_intel18.0.0" +spglibDir="/work/05316/dsambit/publicSharedSoftware/spglib/install_intel18.0.0" xmlIncludeDir="/usr/include/libxml2" xmlLibDir="/usr/lib64" From f8f3785cf42e14347d34f68adcf6d6eb5c50ea1d Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Fri, 31 Aug 2018 02:42:14 -0400 Subject: [PATCH 27/59] Use update_ghost_values over blocks of wave functions instead of one by one in rho computation. Only done for real case, still doing one by one for complex case. ctests passed. --- doc/manual/installation.tex | 5 +- include/vectorUtilities.h | 10 ++- src/dft/density.cc | 60 +++++++++++----- utils/vectorTools/vectorUtilities.cc | 102 +++++++++++++++++++-------- 4 files changed, 127 insertions(+), 50 deletions(-) diff --git a/doc/manual/installation.tex b/doc/manual/installation.tex index b053c6cde..1aed639c0 100644 --- a/doc/manual/installation.tex +++ b/doc/manual/installation.tex @@ -156,8 +156,9 @@ \subsubsection{Instructions for deal.II} $ mkdir build $ cd build $ cmake -DCMAKE_C_COMPILER=mpicc -DCMAKE_CXX_COMPILER=mpicxx - -DCMAKE_Fortran_COMPILER=mpif90 -DDEAL_II_CXX_FLAGS_RELEASE=-xMIC-AVX512 - -DDEAL_II_CXX_FLAGS_DEBUG=-xMIC-AVX512 -DDEAL_II_COMPONENT_EXAMPLES=OFF + -DCMAKE_Fortran_COMPILER=mpif90 + -DCMAKE_CXX_FLAGS="-xMIC-AVX512" -DCMAKE_C_FLAGS="-xMIC-AVX512" + -DDEAL_II_CXX_FLAGS_RELEASE=-O3 -DDEAL_II_COMPONENT_EXAMPLES=OFF -DDEAL_II_WITH_MPI=ON -DDEAL_II_WITH_64BIT_INDICES=ON -DDEAL_II_WITH_P4EST=ON -DP4EST_DIR=p4est_install_dir_path diff --git a/include/vectorUtilities.h b/include/vectorUtilities.h index 835fb0536..c8b9b3fb9 100644 --- a/include/vectorUtilities.h +++ b/include/vectorUtilities.h @@ -134,6 +134,8 @@ namespace dftfe{ * each entry of componentVectors is assumed to be already initialized with the 2-component * version of the same single component partitioner used in the creation of the flattenedArray * partitioner. + * @param[in] isFlattenedDealiiGhostValuesUpdated default is false. Use true for + * optimization if update ghost values has already been called in the flattened dealii vec. */ void copyFlattenedDealiiVecToSingleCompVec (const dealii::parallel::distributed::Vector> & flattenedArray, @@ -141,7 +143,8 @@ namespace dftfe{ const std::pair componentIndexRange, const std::vector & localProcDofIndicesReal, const std::vector & localProcDofIndicesImag, - std::vector> & componentVectors); + std::vector> & componentVectors, + const bool isFlattenedDealiiGhostValuesUpdated=false); #else /** @brief Copies a single field component from a flattenedArray parallel distributed @@ -156,12 +159,15 @@ namespace dftfe{ * componentIndexRange.second-componentIndexRange.first. Further, each entry of * componentVectors is assumed to be already initialized with the same single component * partitioner used in the creation of the flattenedArray partitioner. + * @param[in] isFlattenedDealiiGhostValuesUpdated default is false. Use true for + * optimization if update ghost values has already been called in the flattened dealii vec. */ void copyFlattenedDealiiVecToSingleCompVec (const dealii::parallel::distributed::Vector & flattenedArray, const unsigned int totalNumberComponents, const std::pair componentIndexRange, - std::vector> & componentVectors); + std::vector> & componentVectors, + const bool isFlattenedDealiiGhostValuesUpdated=false); #endif diff --git a/src/dft/density.cc b/src/dft/density.cc index 2cad42435..588eda695 100644 --- a/src/dft/density.cc +++ b/src/dft/density.cc @@ -82,7 +82,7 @@ void dftClass::compute_rhoOut() std::vector> eigenVectors((1+dftParameters::spinPolarized)*d_kPointWeights.size()); - + std::vector > eigenVectorsFlattenedBlock((1+dftParameters::spinPolarized)*d_kPointWeights.size()); for(unsigned int ivec = 0; ivec < numEigenValues; ivec+=eigenVectorsBlockSize) { @@ -95,7 +95,17 @@ void dftClass::compute_rhoOut() eigenVectors[kPoint].resize(currentBlockSize); for(unsigned int i= 0; i < currentBlockSize; ++i) eigenVectors[kPoint][i].reinit(d_tempEigenVec); + + + vectorTools::createDealiiVector(matrix_free_data.get_vector_partitioner(), + currentBlockSize, + eigenVectorsFlattenedBlock[kPoint]); + eigenVectorsFlattenedBlock[kPoint] = dataTypes::number(0.0); } + + constraintsNoneDataInfo.precomputeMaps(matrix_free_data.get_vector_partitioner(), + eigenVectorsFlattenedBlock[0].get_partitioner(), + currentBlockSize); } if((ivec+currentBlockSize)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && @@ -103,27 +113,45 @@ void dftClass::compute_rhoOut() { for(unsigned int kPoint = 0; kPoint < (1+dftParameters::spinPolarized)*d_kPointWeights.size(); ++kPoint) { + + + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < currentBlockSize; ++iWave) + eigenVectorsFlattenedBlock[kPoint].local_element(iNode*currentBlockSize+iWave) + = d_eigenVectorsFlattenedSTL[kPoint][iNode*numEigenValues+ivec+iWave]; + + constraintsNoneDataInfo.distribute(eigenVectorsFlattenedBlock[kPoint], + currentBlockSize); + eigenVectorsFlattenedBlock[kPoint].update_ghost_values(); + #ifdef USE_COMPLEX - vectorTools::copyFlattenedSTLVecToSingleCompVec - (d_eigenVectorsFlattenedSTL[kPoint], - numEigenValues, - std::make_pair(ivec,ivec+currentBlockSize), + vectorTools::copyFlattenedDealiiVecToSingleCompVec + (eigenVectorsFlattenedBlock[kPoint], + currentBlockSize, + std::make_pair(0,currentBlockSize), localProc_dof_indicesReal, localProc_dof_indicesImag, - eigenVectors[kPoint]); + eigenVectors[kPoint], + false); + + //FIXME: The underlying call to update_ghost_values + //is required because currently localProc_dof_indicesReal + //and localProc_dof_indicesImag are only available for + //locally owned nodes. Once they are also made available + //for ghost nodes- use true for the last argument in + //copyFlattenedDealiiVecToSingleCompVec(..) above and supress + //underlying call. + for(unsigned int i= 0; i < currentBlockSize; ++i) + eigenVectors[kPoint][i].update_ghost_values(); #else - vectorTools::copyFlattenedSTLVecToSingleCompVec - (d_eigenVectorsFlattenedSTL[kPoint], - numEigenValues, - std::make_pair(ivec,ivec+currentBlockSize), - eigenVectors[kPoint]); + vectorTools::copyFlattenedDealiiVecToSingleCompVec + (eigenVectorsFlattenedBlock[kPoint], + currentBlockSize, + std::make_pair(0,currentBlockSize), + eigenVectors[kPoint], + true); #endif - for(unsigned int i= 0; i < currentBlockSize; ++i) - { - constraintsNoneEigenDataInfo.distribute(eigenVectors[kPoint][i]); - eigenVectors[kPoint][i].update_ghost_values(); - } } #ifdef USE_COMPLEX diff --git a/utils/vectorTools/vectorUtilities.cc b/utils/vectorTools/vectorUtilities.cc index 8c3b8c6b2..02b358404 100644 --- a/utils/vectorTools/vectorUtilities.cc +++ b/utils/vectorTools/vectorUtilities.cc @@ -259,7 +259,8 @@ namespace dftfe const std::pair componentIndexRange, const std::vector & localProcDofIndicesReal, const std::vector & localProcDofIndicesImag, - std::vector> & componentVectors) + std::vector> & componentVectors, + const bool isFlattenedDealiiGhostValuesUpdated) { Assert(componentVectors.size()==(componentIndexRange.second-componentIndexRange.first), dealii::ExcMessage("Incorrect dimensions of componentVectors")); @@ -267,49 +268,90 @@ namespace dftfe && componentIndexRange.second <=totalNumberComponents, dealii::ExcMessage("componentIndexRange doesn't lie within totalNumberComponents")); - const unsigned int localVectorSize = flattenedArray.local_size()/totalNumberComponents; - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - { - for(unsigned int icomp = componentIndexRange.first; icomp & partitioner + =flattenedArray.get_partitioner(); + const unsigned int localSize = partitioner->local_size()/totalNumberComponents; + const unsigned int n_ghosts = partitioner->n_ghost_indices()/totalNumberComponents; + const unsigned int totalSize = localSize + n_ghosts; - componentVectors[icomp-componentIndexRange.first].local_element(localProcDofIndicesReal[iNode]) - = flattenedArray.local_element(flattenedArrayLocalIndex).real(); - componentVectors[icomp-componentIndexRange.first].local_element(localProcDofIndicesImag[iNode]) - = flattenedArray.local_element(flattenedArrayLocalIndex).imag(); - } - } - for(unsigned int i=0; i & flattenedArray, const unsigned int totalNumberComponents, const std::pair componentIndexRange, - std::vector> & componentVectors) + std::vector> & componentVectors, + const bool isFlattenedDealiiGhostValuesUpdated) { Assert(componentVectors.size()==(componentIndexRange.second-componentIndexRange.first), dealii::ExcMessage("Incorrect dimensions of componentVectors")); Assert(componentIndexRange.first & partitioner + =flattenedArray.get_partitioner(); + const unsigned int localSize = partitioner->local_size()/totalNumberComponents; + const unsigned int n_ghosts = partitioner->n_ghost_indices()/totalNumberComponents; + const unsigned int totalSize = localSize + n_ghosts; + + if (!isFlattenedDealiiGhostValuesUpdated) + { + for(unsigned int iNode = 0; iNode < localSize; ++iNode) + for(unsigned int icomp = componentIndexRange.first; icomp Date: Fri, 31 Aug 2018 19:22:38 -0400 Subject: [PATCH 28/59] added the constrained magnetization functionality where the starting magnetization is maintained through all the SCF iterations. Currently experimental, not to be used for production. --- include/dft.h | 8 +++-- include/dftParameters.h | 2 +- include/energyCalculator.h | 4 +++ src/dft/density.cc | 13 ++++++-- src/dft/dft.cc | 57 +++++++++++++++++++++++++++++------ src/dft/energyCalculator.cc | 37 ++++++++++++++++++++--- src/dft/fermiEnergy.cc | 35 +++++++++++++++++++++ src/symmetry/symmetrizeRho.cc | 13 ++++++-- utils/dftParameters.cc | 7 ++++- 9 files changed, 154 insertions(+), 22 deletions(-) diff --git a/include/dft.h b/include/dft.h index 9eab45879..764901441 100644 --- a/include/dft.h +++ b/include/dft.h @@ -412,6 +412,10 @@ namespace dftfe { */ void compute_fermienergy(const std::vector> & eigenValuesInput, const double numElectronsInput); + /** + *@brief Computes Fermi-energy obtained by imposing separate constraints on the number of spin-up and spin-down electrons + */ + void compute_fermienergy_constraintMagnetization(const std::vector> & eigenValuesInput); /** *@brief write wavefunction solution fields @@ -461,7 +465,7 @@ namespace dftfe { /** * stores required data for Kohn-Sham problem */ - unsigned int numElectrons, numLevels; + unsigned int numElectrons, numElectronsUp, numElectronsDown, numLevels; std::set atomTypes; std::vector > atomLocations,atomLocationsFractional,d_reciprocalLatticeVectors, d_domainBoundingVectors; @@ -734,7 +738,7 @@ namespace dftfe { void recomputeKPointCoordinates(); /// fermi energy - double fermiEnergy; + double fermiEnergy, fermiEnergyUp, fermiEnergyDown; //chebyshev filter variables and functions //int numPass ; // number of filter passes diff --git a/include/dftParameters.h b/include/dftParameters.h index 1c48f3fda..36e31e5e2 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -40,7 +40,7 @@ namespace dftfe { extern double radiusAtomBall, mixingParameter; extern double lowerEndWantedSpectrum,relLinearSolverTolerance,selfConsistentSolverTolerance,TVal, start_magnetization; - extern bool isPseudopotential, periodicX, periodicY, periodicZ, useSymm, timeReversal,pseudoTestsFlag; + extern bool isPseudopotential, periodicX, periodicY, periodicZ, useSymm, timeReversal,pseudoTestsFlag, constraintMagnetization; extern std::string meshFileName,coordinatesFile,domainBoundingVectorsFile,kPointDataFile, ionRelaxFlagsFile, orthogType,pseudoPotentialFile; extern double outerAtomBallRadius, meshSizeOuterDomain; diff --git a/include/energyCalculator.h b/include/energyCalculator.h index ba26f5add..050152d20 100644 --- a/include/energyCalculator.h +++ b/include/energyCalculator.h @@ -119,6 +119,8 @@ namespace dftfe { * @param eigenValues eigenValues for each k point. * @param kPointWeights * @param fermiEnergy + * @param fermiEnergyUp + * @param fermiEnergyDown * @param funcX exchange functional object. * @param funcC correlation functional object. * @param phiTotRhoIn nodal vector field of total electrostatic potential using input @@ -161,6 +163,8 @@ namespace dftfe { const std::vector > & eigenValues, const std::vector & kPointWeights, const double fermiEnergy, + const double fermiEnergyUp, + const double fermiEnergyDown, const xc_func_type & funcX, const xc_func_type & funcC, const vectorType & phiTotRhoIn, diff --git a/src/dft/density.cc b/src/dft/density.cc index a4aac469d..79aa401d5 100644 --- a/src/dft/density.cc +++ b/src/dft/density.cc @@ -231,17 +231,26 @@ void dftClass::compute_rhoOut() for(unsigned int iEigenVec=0; iEigenVec fermiEnergyDown) + partialOccupancy2 = 0.0 ; + if (eigenValues[kPoint][ivec+iEigenVec] > fermiEnergyUp) + partialOccupancy = 0.0 ; + + } for(unsigned int q=0; q(numElectrons)/2.0); + numElectronsDown = numElectrons - numElectronsUp; + // + int netMagnetization = std::round(2.0 * static_cast(numElectrons) * dftParameters::start_magnetization ) ; + // + while ( (numElectronsUp-numElectronsDown) < std::abs(netMagnetization)) + { + numElectronsDown -=1 ; + numElectronsUp +=1 ; + } + // + if(dftParameters::verbosity >= 1) + { + pcout <<" Number of spin up electrons "< > & eigenValues, const std::vector & kPointWeights, const double fermiEnergy, + const double fermiEnergyUp, + const double fermiEnergyDown, const double TVal, const unsigned int spinPolarized, const dealii::ConditionalOStream & scout, @@ -102,26 +104,45 @@ namespace dftfe scout<<" Printing KS eigen values (spin split if this is a spin polarized calculation ) and fractional occupancies for kPoint " << (lowerBoundKindex + kPoint) << std::endl; scout << " " << std::endl ; } - for (unsigned int i=0; i2) scout << i<<" : "<< eigenValues[kPoint][i] << " " << partialOccupancy< fermiEnergyDown) + partialOccupancy2 = 0.0 ; + if (eigenValues[kPoint][i] > fermiEnergyUp) + partialOccupancy = 0.0 ; + + } + bandEnergyLocal+= partialOccupancy*kPointWeights[kPoint]*eigenValues[kPoint][i]; + bandEnergyLocal+= partialOccupancy2*kPointWeights[kPoint]*eigenValues[kPoint][i+numEigenValues]; // if (verbosity>2) scout<< i<<" : "<< eigenValues[kPoint][i] << " " << eigenValues[kPoint][i+numEigenValues] << " " << @@ -246,6 +267,8 @@ namespace dftfe dealii::Utilities::MPI::sum(internal::localBandEnergy(eigenValues, kPointWeights, fermiEnergy, + fermiEnergy, + fermiEnergy, dftParameters::TVal, dftParameters::spinPolarized, scout, @@ -420,6 +443,8 @@ namespace dftfe const std::vector > & eigenValues, const std::vector & kPointWeights, const double fermiEnergy, + const double fermiEnergyUp, + const double fermiEnergyDown, const xc_func_type & funcX, const xc_func_type & funcC, const vectorType & phiTotRhoIn, @@ -454,6 +479,8 @@ namespace dftfe dealii::Utilities::MPI::sum(internal::localBandEnergy(eigenValues, kPointWeights, fermiEnergy, + fermiEnergyUp, + fermiEnergyDown, dftParameters::TVal, dftParameters::spinPolarized, scout, diff --git a/src/dft/fermiEnergy.cc b/src/dft/fermiEnergy.cc index e24e5ddb4..8aa7d1b19 100644 --- a/src/dft/fermiEnergy.cc +++ b/src/dft/fermiEnergy.cc @@ -228,3 +228,38 @@ void dftClass::compute_fermienergy(const std::vector=2) pcout<< "Fermi energy : "<< fermiEnergy< +void dftClass::compute_fermienergy_constraintMagnetization(const std::vector> & eigenValuesInput) +{ + + + int countUp = numElectronsUp; + int countDown = numElectronsDown; + + + std::vector eigenValuesAllkPointsUp, eigenValuesAllkPointsDown; + for(int kPoint = 0; kPoint < d_kPointWeights.size(); ++kPoint) + { + for(int statesIter = 0; statesIter < numEigenValues; ++statesIter) + { + eigenValuesAllkPointsUp.push_back(eigenValuesInput[kPoint][statesIter]); + eigenValuesAllkPointsDown.push_back(eigenValuesInput[kPoint][numEigenValues+statesIter]); + } + } + + std::sort(eigenValuesAllkPointsUp.begin(),eigenValuesAllkPointsUp.end()); + std::sort(eigenValuesAllkPointsDown.begin(),eigenValuesAllkPointsDown.end()); + + fermiEnergyUp = eigenValuesAllkPointsUp[countUp - 1] ; + fermiEnergyDown = eigenValuesAllkPointsDown[countDown - 1] ; + // + fermiEnergy = std::max(fermiEnergyUp, fermiEnergyDown) ; + // + if (dftParameters::verbosity==2) + { + pcout << "This is a constrained magnetization calculation " << std::endl ; + pcout<< "Fermi energy for spin up : "<< fermiEnergyUp<::computeLocalrhoOut() for(unsigned int i=0; i<(dftPtr->numEigenValues); ++i) { double factor=((dftPtr->eigenValues)[kPoint][i]-(dftPtr->fermiEnergy))/(C_kb*dftParameters::TVal); - const double partialOccupancyAlpha = getOccupancy(factor) ; + double partialOccupancyAlpha = getOccupancy(factor) ; // factor=((dftPtr->eigenValues)[kPoint][i+dftParameters::spinPolarized*(dftPtr->numEigenValues)]-(dftPtr->fermiEnergy))/(C_kb*dftParameters::TVal); - const double partialOccupancyBeta = getOccupancy(factor) ; + double partialOccupancyBeta = getOccupancy(factor) ; + // + if(dftParameters::constraintMagnetization) + { + partialOccupancyAlpha = 1.0 , partialOccupancyBeta = 1.0 ; + if ((dftPtr->eigenValues)[kPoint][i+dftParameters::spinPolarized*(dftPtr->numEigenValues)] > (dftPtr->fermiEnergyDown)) + partialOccupancyBeta = 0.0 ; + if ((dftPtr->eigenValues)[kPoint][i] > (dftPtr->fermiEnergyUp)) + partialOccupancyAlpha = 0.0 ; + } // fe_values.get_function_values((eigenVectors[(1+dftParameters::spinPolarized)*kPoint][i]), tempPsiAlpha); if (dftParameters::spinPolarized==1) diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 4121e697a..20f891237 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -35,7 +35,7 @@ namespace dftParameters double chebyshevTolerance = 1e-02; std::string mixingMethod = ""; - bool isPseudopotential=false,periodicX=false,periodicY=false,periodicZ=false, useSymm=false, timeReversal=false,pseudoTestsFlag=false; + bool isPseudopotential=false,periodicX=false,periodicY=false,periodicZ=false, useSymm=false, timeReversal=false,pseudoTestsFlag=false, constraintMagnetization=false; std::string meshFileName="",coordinatesFile="",domainBoundingVectorsFile="",kPointDataFile="", ionRelaxFlagsFile="",orthogType="",pseudoPotentialFile=""; double outerAtomBallRadius=2.0, meshSizeOuterDomain=10.0; @@ -335,6 +335,10 @@ namespace dftParameters Patterns::Selection("BROYDEN|ANDERSON"), "[Standard] Method for density mixing. ANDERSON is the default option."); + prm.declare_entry("CONSTRAINT MAGNETIZATION", "false", + Patterns::Bool(), + "[Standard] Boolean parameter specifying whether to keep the starting magnetization fixed through the SCF iterations. Default is FALSE"); + prm.declare_entry("STARTING WFC","RANDOM", Patterns::Selection("ATOMIC|RANDOM"), "[Standard] Sets the type of the starting Kohn-Sham wavefunctions guess: Atomic(Superposition of single atom atomic orbitals. Atom types for which atomic orbitals are not available, random wavefunctions are taken. Currently, atomic orbitals data is not available for all atoms.), Random(The starting guess for all wavefunctions are taken to be random). Default: RANDOM."); @@ -524,6 +528,7 @@ namespace dftParameters dftParameters::mixingHistory = prm.get_integer("MIXING HISTORY"); dftParameters::mixingParameter = prm.get_double("MIXING PARAMETER"); dftParameters::mixingMethod = prm.get("MIXING METHOD"); + dftParameters::constraintMagnetization = prm.get_bool("CONSTRAINT MAGNETIZATION"); dftParameters::startingWFCType = prm.get("STARTING WFC"); dftParameters::computeEnergyEverySCF = prm.get_bool("COMPUTE ENERGY EACH ITER"); From b992c0eecd1fb7922a256fda428cbb234643a60f Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Sat, 1 Sep 2018 21:42:12 -0400 Subject: [PATCH 29/59] Optimization in create vself bins. ctests passed. --- src/dft/vselfBinsManager.cc | 119 +++++++++++++++++++++++++++++++----- 1 file changed, 103 insertions(+), 16 deletions(-) diff --git a/src/dft/vselfBinsManager.cc b/src/dft/vselfBinsManager.cc index e7bcd6a6c..3298b2ec4 100644 --- a/src/dft/vselfBinsManager.cc +++ b/src/dft/vselfBinsManager.cc @@ -97,6 +97,79 @@ namespace dftfe } } + + void exchangeInteractionMaps(const unsigned int totalNumberAtoms, + std::map > & interactionMap, + const unsigned int numMeshPartitions, + const MPI_Comm & mpi_communicator) + + { + std::map >::iterator iter; + + for(unsigned int iGlobal = 0; iGlobal < totalNumberAtoms; ++iGlobal) + { + + // + // for each charge, exchange its global list across all procs + // + iter = interactionMap.find(iGlobal); + + std::vector localAtomToInteractingAtomsList; + + if(iter != interactionMap.end()) + { + std::set & localInteractingAtomsSet = iter->second; + std::copy(localInteractingAtomsSet.begin(), + localInteractingAtomsSet.end(), + std::back_inserter(localAtomToInteractingAtomsList)); + + } + + const int sizeOnLocalProc = localAtomToInteractingAtomsList.size(); + + std::vector interactionMapListSizes(numMeshPartitions); + + MPI_Allgather(&sizeOnLocalProc, + 1, + MPI_INT, + &(interactionMapListSizes[0]), + 1, + MPI_INT, + mpi_communicator); + + const int newListSize = + std::accumulate(&(interactionMapListSizes[0]), + &(interactionMapListSizes[numMeshPartitions]), + 0); + + std::vector globalInteractionMapList(newListSize); + + std::vector mpiOffsets(numMeshPartitions); + + mpiOffsets[0] = 0; + + for(unsigned int i = 1; i < numMeshPartitions; ++i) + mpiOffsets[i] = interactionMapListSizes[i-1]+ mpiOffsets[i-1]; + + MPI_Allgatherv(&(localAtomToInteractingAtomsList[0]), + sizeOnLocalProc, + MPI_INT, + &(globalInteractionMapList[0]), + &(interactionMapListSizes[0]), + &(mpiOffsets[0]), + MPI_INT, + mpi_communicator); + + // + // over-write local interaction with items of globalInteractionList + // + for(unsigned int i = 0 ; i < globalInteractionMapList.size(); ++i) + (interactionMap[iGlobal]).insert(globalInteractionMapList[i]); + + } + } + + // unsigned int createAndCheckInteractionMap(std::map > & interactionMap, const dealii::DoFHandler<3> & dofHandler, @@ -144,7 +217,7 @@ namespace dftfe std::vector cell_dof_indices(dofs_per_cell); for(; cell!= endc; ++cell) - if(cell->is_locally_owned()) + if(cell->is_locally_owned() || cell->is_ghost()) { int cutOffFlag = 0; cell->get_dof_indices(cell_dof_indices); @@ -175,27 +248,26 @@ namespace dftfe }//cell locally owned if loop - atomToGlobalNodeIdMap[iAtom] = tempNodalSet; + if (!tempNodalSet.empty()) + atomToGlobalNodeIdMap[iAtom] = tempNodalSet; }//atom loop // //exchange atomToGlobalNodeIdMap across all processors // - internal::exchangeAtomToGlobalNodeIdMaps(totalNumberAtoms, - atomToGlobalNodeIdMap, - n_mpi_processes, - mpi_communicator); + //internal::exchangeAtomToGlobalNodeIdMaps(totalNumberAtoms, + // atomToGlobalNodeIdMap, + // n_mpi_processes, + // mpi_communicator); - // - //erase keys which have empty values - // - for(unsigned int iAtom = numberGlobalAtoms; iAtom < totalNumberAtoms; ++iAtom) - if(atomToGlobalNodeIdMap[iAtom].empty() == true) - atomToGlobalNodeIdMap.erase(iAtom); + unsigned int ilegalInteraction=0; for(unsigned int iAtom = 0; iAtom < totalNumberAtoms; ++iAtom) { + if (atomToGlobalNodeIdMap.find(iAtom)==atomToGlobalNodeIdMap.end()) + continue; + // //Add iAtom to the interactionMap corresponding to the key iAtom // @@ -207,7 +279,8 @@ namespace dftfe for(int jAtom = iAtom - 1; jAtom > -1; jAtom--) { //std::cout<<"JAtom: "<0) + return 1; + + internal::exchangeInteractionMaps(totalNumberAtoms, + interactionMap, + n_mpi_processes, + mpi_communicator); return 0; } } From 8aa1eda72788b68a76d4e2855020810589a7c292 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Mon, 3 Sep 2018 21:35:05 -0400 Subject: [PATCH 30/59] Supressed redundant serial mesh generation in case of only cell optimization. ctests passed. --- src/dft/dft.cc | 2 +- src/dft/initElectronicFields.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dft/dft.cc b/src/dft/dft.cc index a68d9bea6..407805b03 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -577,7 +577,7 @@ namespace dftfe { computingTimerStandard.enter_section("KSDFT problem initialization"); initImageChargesUpdateKPoints(); - if (dftParameters::isIonOpt || dftParameters::isCellOpt) + if (dftParameters::isIonOpt) updatePrevMeshDataStructures(); // //reinitialize dirichlet BCs for total potential and vSelf poisson solutions diff --git a/src/dft/initElectronicFields.cc b/src/dft/initElectronicFields.cc index aa652841c..6bd5ad46c 100644 --- a/src/dft/initElectronicFields.cc +++ b/src/dft/initElectronicFields.cc @@ -214,7 +214,7 @@ void dftClass::initElectronicFields(const unsigned int usePreviousGroun } } - if (dftParameters::isIonOpt || dftParameters::isCellOpt) + if (dftParameters::isIonOpt) updatePrevMeshDataStructures(); if (dftParameters::verbosity>=2) From 63710f2d1f28e004646fade06957648336e256b3 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Tue, 4 Sep 2018 01:43:58 -0400 Subject: [PATCH 31/59] refactored linear algebra to remove unnecessary use of parallel distributed vector. ctests passed. --- include/kohnShamDFTOperator.h | 6 +- include/linearAlgebraOperations.h | 29 +- include/linearAlgebraOperationsInternal.h | 30 +- include/operator.h | 8 +- src/dftOperator/kohnShamDFTOperator.cc | 58 +++- src/linAlg/linearAlgebraOperationsInternal.cc | 290 ++---------------- src/linAlg/linearAlgebraOperationsOpt.cc | 163 +++------- src/linAlg/pseudoGS.cc | 14 +- ...evOrthogonalizedSubspaceIterationSolver.cc | 267 +++++++--------- 9 files changed, 253 insertions(+), 612 deletions(-) diff --git a/include/kohnShamDFTOperator.h b/include/kohnShamDFTOperator.h index eeeef2571..866a32a9c 100644 --- a/include/kohnShamDFTOperator.h +++ b/include/kohnShamDFTOperator.h @@ -31,7 +31,7 @@ namespace dftfe{ /** * @brief Implementation class for building the Kohn-Sham DFT discrete operator and the action of the discrete operator on a single vector or multiple vectors * - * @author Phani Motamarri, + * @author Phani Motamarri, Sambit Das */ // @@ -87,7 +87,7 @@ namespace dftfe{ * @param src given orthogonal basis vectors * @return ProjMatrix projected small matrix */ - void XtHX(dealii::parallel::distributed::Vector & src, + void XtHX(const std::vector & src, const unsigned int numberComponents, std::vector & ProjHam); @@ -105,7 +105,7 @@ namespace dftfe{ * which avoids creation of full projected Hamiltonian matrix memory, and also avoids creation * of another full X memory. */ - void XtHX(const dealii::parallel::distributed::Vector & X, + void XtHX(const std::vector & X, const unsigned int numberComponents, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, dealii::ScaLAPACKMatrix & projHamPar); diff --git a/include/linearAlgebraOperations.h b/include/linearAlgebraOperations.h index bb142a46e..2bdf0c60c 100644 --- a/include/linearAlgebraOperations.h +++ b/include/linearAlgebraOperations.h @@ -152,7 +152,7 @@ namespace dftfe * @param[in,out] X Given subspace as flattened array of multi-vectors. * In-place update of the given subspace * @param[in] numberComponents Number of multiple-fields - * @param[in] mpiComm global communicator + * @param[in] mpiComm global communicator */ template void gramSchmidtOrthogonalization(std::vector & X, @@ -166,7 +166,7 @@ namespace dftfe * @param[in,out] X Given subspace as flattened array of multi-vectors. * In-place update of the given subspace * @param[in] numberComponents Number of multiple-fields - * @param[in] mpiComm global communicator + * @param[in] mpiComm global communicator * @return flag indicating success/failure. 1 for failure, 0 for success */ unsigned int lowdenOrthogonalization(std::vector & X, @@ -196,7 +196,7 @@ namespace dftfe const MPI_Comm &interBandGroupComm, const unsigned int numberCoreVectors, const MPI_Comm &mpiComm, - dealii::parallel::distributed::Vector & nonCoreVectorsArray); + std::vector & nonCoreVectorsArray); /** @brief Compute Rayleigh-Ritz projection * @@ -219,13 +219,15 @@ namespace dftfe * In-place rotated subspace * @param[in] numberComponents Number of multiple-fields * @param[in] interBandGroupComm interpool communicator for parallelization over band groups + * @param[in] mpiComm domain decomposition communicator * @param[out] eigenValues of the Projected Hamiltonian */ template void rayleighRitz(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & X, + std::vector & X, const unsigned int numberComponents, const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, std::vector & eigenValues); /** @brief Compute Compute residual norm associated with eigenValue problem of the given operator @@ -233,27 +235,16 @@ namespace dftfe * @param[in] operatorMatrix An object which has access to the given matrix * @param[in] X Given subspace as STL vector of dealii vectors * @param[in] eigenValues eigenValues of the operator + * @param[in] mpiComm domain decomposition communicator * @param[out] residualNorms of the eigen Value problem */ + template void computeEigenResidualNorm(operatorDFTClass & operatorMatrix, - std::vector & X, + std::vector & X, const std::vector & eigenValues, + const MPI_Comm &mpiComm, std::vector & residualNorm); - - /** @brief Compute residual norm associated with eigenValue problem of the given operator - * - * @param[in] operatorMatrix An object which has access to the given matrix - * @param[in] X Given eigenvector subspace as flattened array of multi-vectors - * @param[in] eigenValues eigenValues of the operator - * @param[out] residualNorms of the eigen Value problem - */ - template - void computeEigenResidualNorm(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & X, - const std::vector & eigenValues, - std::vector & residualNorm); - } } diff --git a/include/linearAlgebraOperationsInternal.h b/include/linearAlgebraOperationsInternal.h index dfc00cc7e..8db403a5b 100644 --- a/include/linearAlgebraOperationsInternal.h +++ b/include/linearAlgebraOperationsInternal.h @@ -80,7 +80,8 @@ namespace dftfe * */ template - void fillParallelOverlapMatrix(const std::vector & X, + void fillParallelOverlapMatrix(const T* X, + const unsigned int XLocalSize, const unsigned int numberVectors, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, @@ -96,38 +97,17 @@ namespace dftfe * */ template - void subspaceRotation(std::vector & subspaceVectorsArray, + void subspaceRotation(T* subspaceVectorsArray, + const unsigned int subspaceVectorsArrayLocalSize, const unsigned int numberSubspaceVectors, const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & nonCoreVectorsArray, + T* nonCoreVectorsArray, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, const dealii::ScaLAPACKMatrix & rotationMatPar, const bool rotationMatTranspose=false, const bool isRotationMatLowerTria=false); - - - /** @brief Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray in the column major - * format. Q is rotationMatPar. - * - * The subspace rotation inside this function is done in a blocked approach - * which avoids creation of full serial rotation matrix memory, and also avoids creation - * of another full subspaceVectorsArray memory. - * - */ - template - void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, - const unsigned int N, - const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & nonCoreVectorsArray, - const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const MPI_Comm &interBandGroupComm, - const dealii::ScaLAPACKMatrix & rotationMatPar, - const bool rotationMatTranspose=false, - const bool isRotationMatLowerTria=false); - - #endif } } diff --git a/include/operator.h b/include/operator.h index c348a7b64..7469b5d65 100644 --- a/include/operator.h +++ b/include/operator.h @@ -113,13 +113,11 @@ namespace dftfe{ /** * @brief Compute projection of the operator into a subspace spanned by a given orthogonal basis * - * @param X Vector of Vectors containing multi-wavefunction fields (though X does not - * change inside the function it is scaled inside HX function and rescaled back to - * avoid duplication of memory and hence is not const) + * @param X Vector of Vectors containing multi-wavefunction fields * @param numberComponents number of wavefunctions associated with a given node * @param ProjMatrix projected small matrix */ - virtual void XtHX(dealii::parallel::distributed::Vector & X, + virtual void XtHX(const std::vector & X, const unsigned int numberComponents, std::vector & ProjHam) = 0; @@ -133,7 +131,7 @@ namespace dftfe{ * @param projHamPar parallel ScaLAPACKMatrix which stores the computed projection * of the operation into the given subspace */ - virtual void XtHX(const dealii::parallel::distributed::Vector & X, + virtual void XtHX(const std::vector & X, const unsigned int numberComponents, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, dealii::ScaLAPACKMatrix & projHamPar) = 0; diff --git a/src/dftOperator/kohnShamDFTOperator.cc b/src/dftOperator/kohnShamDFTOperator.cc index c48adb970..ad83b938e 100644 --- a/src/dftOperator/kohnShamDFTOperator.cc +++ b/src/dftOperator/kohnShamDFTOperator.cc @@ -773,21 +773,32 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map - void kohnShamDFTOperatorClass::XtHX(dealii::parallel::distributed::Vector > & X, + void kohnShamDFTOperatorClass::XtHX(const std::vector > & X, const unsigned int numberWaveFunctions, std::vector > & ProjHam) { // //Get access to number of locally owned nodes on the current processor // - const unsigned int numberDofs = X.local_size()/numberWaveFunctions; + const unsigned int numberDofs = X.size()/numberWaveFunctions; // //Resize ProjHam // ProjHam.clear(); ProjHam.resize(numberWaveFunctions*numberWaveFunctions,0.0); - + // + //create temporary array XTemp + // + dealii::parallel::distributed::Vector> XTemp; + reinit(numberWaveFunctions, + XTemp, + true); + for(unsigned int iNode = 0; iNode::computeVEff(const std::map::computeVEff(const std::map::computeVEff(const std::map - void kohnShamDFTOperatorClass::XtHX(dealii::parallel::distributed::Vector & X, + void kohnShamDFTOperatorClass::XtHX(const std::vector & X, const unsigned int numberWaveFunctions, std::vector & ProjHam) { @@ -910,7 +921,7 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map::computeVEff(const std::map XTemp; + reinit(numberWaveFunctions, + XTemp, + true); + for(unsigned int iNode = 0; iNode::computeVEff(const std::map::computeVEff(const std::map::computeVEff(const std::map - void kohnShamDFTOperatorClass::XtHX(const dealii::parallel::distributed::Vector & X, + void kohnShamDFTOperatorClass::XtHX(const std::vector & X, const unsigned int numberWaveFunctions, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, dealii::ScaLAPACKMatrix & projHamPar) @@ -975,7 +999,7 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map XBlock,HXBlock; @@ -1046,7 +1070,7 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map::computeVEff(const std::map::computeVEff(const std::map - void fillParallelOverlapMatrix(const std::vector & subspaceVectorsArray, + void fillParallelOverlapMatrix(const T* subspaceVectorsArray, + const unsigned int subspaceVectorsArrayLocalSize, const unsigned int N, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, @@ -142,7 +143,7 @@ namespace dftfe #ifdef USE_COMPLEX AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - const unsigned int numLocalDofs = subspaceVectorsArray.size()/N; + const unsigned int numLocalDofs = subspaceVectorsArrayLocalSize/N; //band group parallelization data structures const unsigned int numberBandGroups= @@ -226,7 +227,7 @@ namespace dftfe &B, &numLocalDofs, &scalarCoeffAlpha, - &subspaceVectorsArray[ivec], + subspaceVectorsArray+ivec, &N, &blockVectorsMatrix[0], &numLocalDofs, @@ -283,10 +284,11 @@ namespace dftfe template - void subspaceRotation(std::vector & subspaceVectorsArray, + void subspaceRotation(T* subspaceVectorsArray, + const unsigned int subspaceVectorsArrayLocalSize, const unsigned int N, const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & nonCoreVectorsArray, + T* nonCoreVectorsArray, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, @@ -297,7 +299,7 @@ namespace dftfe #ifdef USE_COMPLEX AssertThrow(false,dftUtils::ExcNotImplementedYet()); #else - const unsigned int numLocalDofs = subspaceVectorsArray.size()/N; + const unsigned int numLocalDofs = subspaceVectorsArrayLocalSize/N; const unsigned int maxNumLocalDofs=dealii::Utilities::MPI::max(numLocalDofs, mpiComm); @@ -454,7 +456,7 @@ namespace dftfe &scalarCoeffAlpha, &rotationMatBlock[0], &BVec, - &subspaceVectorsArray[idof*N], + subspaceVectorsArray+idof*N, &N, &scalarCoeffBeta, &rotatedVectorsMatBlockTemp[0], @@ -473,7 +475,7 @@ namespace dftfe { for (unsigned int i = 0; i - void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, - const unsigned int N, - const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & nonCoreVectorsArray, - const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const MPI_Comm &interBandGroupComm, - const dealii::ScaLAPACKMatrix & rotationMatPar, - const bool rotationMatTranspose, - const bool isRotationMatLowerTria) - { -#ifdef USE_COMPLEX - AssertThrow(false,dftUtils::ExcNotImplementedYet()); -#else - const unsigned int numLocalDofs = subspaceVectorsArray.local_size()/N; - - const unsigned int maxNumLocalDofs=dealii::Utilities::MPI::max(numLocalDofs, - subspaceVectorsArray.get_mpi_communicator()); - - //band group parallelization data structures - const unsigned int numberBandGroups= - dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); - const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); - std::vector bandGroupLowHighPlusOneIndices; - dftUtils::createBandParallelizationIndices(interBandGroupComm, - N, - bandGroupLowHighPlusOneIndices); - - std::map globalToLocalColumnIdMap; - std::map globalToLocalRowIdMap; - internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, - rotationMatPar, - globalToLocalRowIdMap, - globalToLocalColumnIdMap); - - /* - * Q*X^{T} is done in a blocked approach for memory optimization: - * Sum_{dof_blocks} Sum_{vector_blocks} QBvec*XBdof^{T}. - * The result of each QBvec*XBdof^{T} - * has a much smaller memory compared to Q*X^{T}. - * X^{T} (denoted by subspaceVectorsArray in the code with column major format storage) - * is a matrix with size (N x MLoc). - * N is denoted by numberWaveFunctions in the code. - * MLoc, which is number of local dofs is denoted by numLocalDofs in the code. - * QBvec is a matrix of size (BVec x N). BVec is the vectors block size. - * XBdof is a matrix of size (N x BDof). BDof is the block size of dofs. - * A further optimization is done to reduce floating point operations when - * Q is a lower triangular matrix in the subspace rotation step of PGS: - * Then it suffices to compute only the multiplication of lower - * triangular part of Q with X^{T}. To exploit this, we do - * Sum_{dof_blocks} Sum_{vector_blocks} QBvecTrunc*XBdofTrunc^{T}. - * where QBvecTrunc is a (BVec x D) sub matrix of QBvec with the column indices - * ranging from O to D-1, where D=jvec(lowest global index of QBvec) + BVec. - * XBdofTrunc is a (D x BDof) sub matrix of XBdof with the row indices - * ranging from 0 to D-1. - * X^{T} is directly updated from - * the Sum_{vector_blocks} QBvecTrunc*XBdofTrunc^{T} result - * for each {dof_block}. - */ - const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, - bandGroupLowHighPlusOneIndices[1]); - const unsigned int dofsBlockSize=std::min(maxNumLocalDofs, - dftParameters::subspaceRotDofsBlockSize); - - std::vector rotationMatBlock(vectorsBlockSize*N,0.0); - std::vector rotatedVectorsMatBlock(N*dofsBlockSize,0.0); - std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); - - if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(subspaceVectorsArray.get_mpi_communicator(), - "Inside Blocked susbpace rotation"); - - for (unsigned int idof = 0; idof < maxNumLocalDofs; idof += dofsBlockSize) - { - // Correct block dimensions if block "goes off edge of" the matrix - unsigned int BDof=0; - if (numLocalDofs>=idof) - BDof = std::min(dofsBlockSize, numLocalDofs-idof); - - std::fill(rotatedVectorsMatBlock.begin(),rotatedVectorsMatBlock.end(),0.); - for (unsigned int jvec = 0; jvec < N; jvec += vectorsBlockSize) - { - // Correct block dimensions if block "goes off edge of" the matrix - const unsigned int BVec = std::min(vectorsBlockSize, N-jvec); - - const unsigned int D=isRotationMatLowerTria? - (jvec+BVec) - :N; - - // If one plus the ending index of a block lies within a band parallelization group - // do computations for that block within the band group, otherwise skip that - // block. This is only activated if NPBAND>1 - if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && - (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) - { - const char transA = 'N',transB = 'N'; - const T scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; - - std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); - - //Extract QBVec from parallel ScaLAPACK matrix Q - if (rotationMatTranspose) - { - if (processGrid->is_process_active()) - for (unsigned int i = 0; i ::iterator it= - globalToLocalColumnIdMap.find(j+jvec); - if(it!=globalToLocalColumnIdMap.end()) - rotationMatBlock[i*BVec+j]= - rotationMatPar.local_el(localRowId, - it->second); - } - } - } - else - { - if (processGrid->is_process_active()) - for (unsigned int i = 0; i ::iterator it= - globalToLocalRowIdMap.find(j+jvec); - if (it!=globalToLocalRowIdMap.end()) - rotationMatBlock[i*BVec+j]= - rotationMatPar.local_el(it->second, - localColumnId); - } - } - } - -#ifdef USE_COMPLEX - MPI_Allreduce(MPI_IN_PLACE, - &rotationMatBlock[0], - vectorsBlockSize*D, - MPI_C_DOUBLE_COMPLEX, - MPI_SUM, - subspaceVectorsArray.get_mpi_communicator()); -#else - MPI_Allreduce(MPI_IN_PLACE, - &rotationMatBlock[0], - vectorsBlockSize*D, - MPI_DOUBLE, - MPI_SUM, - subspaceVectorsArray.get_mpi_communicator()); -#endif - - if (BDof!=0) - { - - dgemm_(&transA, - &transB, - &BVec, - &BDof, - &D, - &scalarCoeffAlpha, - &rotationMatBlock[0], - &BVec, - subspaceVectorsArray.begin()+idof*N, - &N, - &scalarCoeffBeta, - &rotatedVectorsMatBlockTemp[0], - &BVec); - - for (unsigned int i = 0; i 1) - { - if (numberCoreVectors!=0) - { - - const unsigned int numberNonCoreVectors=N-numberCoreVectors; - for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) - for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) - nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors +iWave) - =subspaceVectorsArray.local_element(iNode*N - +numberCoreVectors - +iWave); - - MPI_Allreduce(MPI_IN_PLACE, - nonCoreVectorsArray.begin(), - numberNonCoreVectors*numLocalDofs, - MPI_DOUBLE, - MPI_SUM, - interBandGroupComm); - - for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) - for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) - subspaceVectorsArray.local_element - (iNode*N - +numberCoreVectors - +iWave) - =nonCoreVectorsArray.local_element(iNode*numberNonCoreVectors+iWave); - - } - else - { - MPI_Allreduce(MPI_IN_PLACE, - subspaceVectorsArray.begin(), - N*numLocalDofs, - MPI_DOUBLE, - MPI_SUM, - interBandGroupComm); - } - } -#endif - } -#endif - - - -#ifdef DEAL_II_WITH_SCALAPACK - template void createGlobalToLocalIdMapsScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const dealii::ScaLAPACKMatrix & mat, @@ -765,7 +527,8 @@ namespace dftfe std::map & globalToLocalColumnIdMap); template - void fillParallelOverlapMatrix(const std::vector & X, + void fillParallelOverlapMatrix(const dataTypes::number* X, + const unsigned int XLocalSize, const unsigned int numberVectors, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, @@ -773,10 +536,11 @@ namespace dftfe dealii::ScaLAPACKMatrix & overlapMatPar); template - void subspaceRotation(std::vector & subspaceVectorsArray, + void subspaceRotation(dataTypes::number* subspaceVectorsArray, + const unsigned int subspaceVectorsArrayLocalSize, const unsigned int numberSubspaceVectors, const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & nonCoreVectorsArray, + dataTypes::number* nonCoreVectorsArray, const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, @@ -784,18 +548,6 @@ namespace dftfe const bool rotationMatTranpose, const bool isRotationMatLowerTria); - template - void subspaceRotation(dealii::parallel::distributed::Vector & subspaceVectorsArray, - const unsigned int N, - const unsigned int numberCoreVectors, - dealii::parallel::distributed::Vector & nonCoreVectorsArray, - const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, - const MPI_Comm &interBandGroupComm, - const dealii::ScaLAPACKMatrix & rotationMatPar, - const bool rotationMatTranpose, - const bool isRotationMatLowerTria); - - template void sumAcrossInterCommScaLAPACKMat(const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, dealii::ScaLAPACKMatrix & mat, diff --git a/src/linAlg/linearAlgebraOperationsOpt.cc b/src/linAlg/linearAlgebraOperationsOpt.cc index 4c1cb043e..fb76256bb 100644 --- a/src/linAlg/linearAlgebraOperationsOpt.cc +++ b/src/linAlg/linearAlgebraOperationsOpt.cc @@ -204,8 +204,8 @@ namespace dftfe{ void callgemm(const unsigned int numberEigenValues, const unsigned int localVectorSize, const std::vector & eigenVectorSubspaceMatrix, - const dealii::parallel::distributed::Vector & X, - dealii::parallel::distributed::Vector & Y) + const std::vector & X, + std::vector & Y) { @@ -219,10 +219,10 @@ namespace dftfe{ &alpha, &eigenVectorSubspaceMatrix[0], &numberEigenValues, - X.begin(), + &X[0], &numberEigenValues, &beta, - Y.begin(), + &Y[0], &numberEigenValues); } @@ -231,8 +231,8 @@ namespace dftfe{ void callgemm(const unsigned int numberEigenValues, const unsigned int localVectorSize, const std::vector > & eigenVectorSubspaceMatrix, - const dealii::parallel::distributed::Vector > & X, - dealii::parallel::distributed::Vector > & Y) + const std::vector > & X, + std::vector > & Y) { @@ -246,10 +246,10 @@ namespace dftfe{ &alpha, &eigenVectorSubspaceMatrix[0], &numberEigenValues, - X.begin(), + &X[0], &numberEigenValues, &beta, - Y.begin(), + &Y[0], &numberEigenValues); } @@ -461,9 +461,10 @@ namespace dftfe{ #if(defined DEAL_II_WITH_SCALAPACK && !USE_COMPLEX) template void rayleighRitz(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & X, + std::vector & X, const unsigned int numberWaveFunctions, const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpi_communicator, std::vector & eigenValues) { @@ -478,7 +479,7 @@ namespace dftfe{ // const unsigned rowsBlockSize=std::min((unsigned int)50,numberWaveFunctions); std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> processGrid; - internal::createProcessGridSquareMatrix(X.get_mpi_communicator(), + internal::createProcessGridSquareMatrix(mpi_communicator, numberWaveFunctions, processGrid); @@ -514,15 +515,20 @@ namespace dftfe{ //stored in the column major format // computing_timer.enter_section("Blocked subspace rotation, RR step"); - dealii::parallel::distributed::Vector temp; - internal::subspaceRotation(X, + std::vector temp; + const unsigned int numberCoreWaveFunctions=0; + + internal::subspaceRotation(&X[0], + X.size(), numberWaveFunctions, - 0, - temp, + numberCoreWaveFunctions, + &temp[0], processGrid, interBandGroupComm, + mpi_communicator, projHamPar, true); + computing_timer.exit_section("Blocked subspace rotation, RR step"); } @@ -530,9 +536,10 @@ namespace dftfe{ template void rayleighRitz(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & X, + std::vector & X, const unsigned int numberWaveFunctions, const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpi_communicator, std::vector & eigenValues) { dealii::ConditionalOStream pcout(std::cout, (dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)); @@ -567,13 +574,13 @@ namespace dftfe{ numberEigenValues*numberEigenValues, MPI_C_DOUBLE_COMPLEX, 0, - X.get_mpi_communicator()); + mpi_communicator); #else MPI_Bcast(&ProjHam[0], numberEigenValues*numberEigenValues, MPI_DOUBLE, 0, - X.get_mpi_communicator()); + mpi_communicator); #endif computing_timer.exit_section("eigen decomp in RR"); @@ -582,9 +589,8 @@ namespace dftfe{ // //rotate the basis in the subspace X = X*Q // - const unsigned int localVectorSize = X.local_size()/numberEigenValues; - dealii::parallel::distributed::Vector rotatedBasis; - rotatedBasis.reinit(X); + const unsigned int localVectorSize = X.size()/numberEigenValues; + std::vector rotatedBasis(X.size()); computing_timer.enter_section("subspace rotation in RR"); callgemm(numberEigenValues, @@ -598,11 +604,12 @@ namespace dftfe{ } #endif -#ifdef DEAL_II_WITH_SCALAPACK + template void computeEigenResidualNorm(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & X, + std::vector & X, const std::vector & eigenValues, + const MPI_Comm &mpiComm, std::vector & residualNorm) { @@ -611,11 +618,11 @@ namespace dftfe{ //get the number of eigenVectors // const unsigned int totalNumberVectors = eigenValues.size(); - const unsigned int localVectorSize = X.local_size()/totalNumberVectors; + const unsigned int localVectorSize = X.size()/totalNumberVectors; std::vector residualNormSquare(totalNumberVectors,0.0); //create temporary arrays XBlock,HXBlock - dealii::parallel::distributed::Vector XBlock,HXBlock; + dealii::parallel::distributed::Vector XBlock,HXBlock; // Do H*X using a blocked approach and compute // the residual norms: H*XBlock-XBlock*D, where @@ -641,7 +648,7 @@ namespace dftfe{ for(unsigned int iWave = 0; iWave < B; ++iWave) XBlock.local_element(iNode*B +iWave) - =X.local_element(iNode*totalNumberVectors+jvec+iWave); + =X[iNode*totalNumberVectors+jvec+iWave]; //evaluate H times XBlock and store in HXBlock @@ -665,7 +672,9 @@ namespace dftfe{ } - dealii::Utilities::MPI::sum(residualNormSquare,X.get_mpi_communicator(),residualNormSquare); + dealii::Utilities::MPI::sum(residualNormSquare, + mpiComm, + residualNormSquare); if(dftParameters::verbosity>=4) { if(dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) @@ -685,93 +694,7 @@ namespace dftfe{ std::cout < - void computeEigenResidualNorm(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & X, - const std::vector & eigenValues, - std::vector & residualNorm) - { - - // - //get the number of eigenVectors - // - const unsigned int totalNumberVectors = eigenValues.size(); - std::vector residualNormSquare(totalNumberVectors,0.0); - - // - //reinit blockSize require for HX later - // - operatorMatrix.reinit(totalNumberVectors, - X, - false); - - // - //create temp Array - // - dealii::parallel::distributed::Vector Y; - Y.reinit(X); - - // - //initialize to zero - // - const T zeroValue = 0.0; - Y = zeroValue; - - // - //compute operator times X - // - const bool scaleFlag = false; - const double scalar = 1.0; - operatorMatrix.HX(X, - totalNumberVectors, - scaleFlag, - scalar, - Y); - - if(dftParameters::verbosity>=4) - { - if(dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) - std::cout<<"L-2 Norm of residue :"<=4) - { - if(dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) - std::cout<<"eigen vector "<< iWave<<": "<=4) - { - if(dealii::Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0) - std::cout < > & X, @@ -810,8 +733,8 @@ namespace dftfe{ &numberVectors); - dealii::Utilities::MPI::sum(overlapMatrix, - mpiComm, + dealii::Utilities::MPI::sum(overlapMatrix, + mpiComm, overlapMatrix); // @@ -995,8 +918,8 @@ namespace dftfe{ &numberVectors); computing_timer.exit_section("local overlap matrix for lowden"); - dealii::Utilities::MPI::sum(overlapMatrix, - mpiComm, + dealii::Utilities::MPI::sum(overlapMatrix, + mpiComm, overlapMatrix); std::vector eigenValuesOverlap(numberVectors); @@ -1149,17 +1072,19 @@ namespace dftfe{ const MPI_Comm &, const unsigned int numberCoreVectors, const MPI_Comm &mpiComm, - dealii::parallel::distributed::Vector & tempNonCoreVectorsArray); + std::vector & tempNonCoreVectorsArray); template void rayleighRitz(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector &, + std::vector &, const unsigned int numberWaveFunctions, const MPI_Comm &, + const MPI_Comm &, std::vector & eigenValues); template void computeEigenResidualNorm(operatorDFTClass & operatorMatrix, - dealii::parallel::distributed::Vector & X, + std::vector & X, const std::vector & eigenValues, + const MPI_Comm &mpiComm, std::vector & residualNorm); }//end of namespace diff --git a/src/linAlg/pseudoGS.cc b/src/linAlg/pseudoGS.cc index d4930f41a..4eddc4635 100644 --- a/src/linAlg/pseudoGS.cc +++ b/src/linAlg/pseudoGS.cc @@ -33,7 +33,7 @@ namespace dftfe const MPI_Comm &interBandGroupComm, const unsigned int numberCoreVectors, const MPI_Comm & mpiComm, - dealii::parallel::distributed::Vector & tempNonCoreVectorsArray) + std::vector & tempNonCoreVectorsArray) { const unsigned int numLocalDofs = X.size()/numberVectors; @@ -57,7 +57,8 @@ namespace dftfe //S=X*X^{T}. Implemented as S=X^{T}*X with X^{T} stored in the column major format computing_timer.enter_section("Fill overlap matrix for PGS"); - internal::fillParallelOverlapMatrix(X, + internal::fillParallelOverlapMatrix(&X[0], + X.size(), numberVectors, processGrid, interBandGroupComm, @@ -135,10 +136,11 @@ namespace dftfe //X=X*L^{-1}^{T} implemented as X^{T}=L^{-1}*X^{T} with X^{T} stored in the column major format computing_timer.enter_section("Subspace rotation PGS"); - internal::subspaceRotation(X, + internal::subspaceRotation(&X[0], + X.size(), numberVectors, numberCoreVectors, - tempNonCoreVectorsArray, + &tempNonCoreVectorsArray[0], processGrid, interBandGroupComm, mpiComm, @@ -156,8 +158,8 @@ namespace dftfe const unsigned int numberVectors, const MPI_Comm &interBandGroupComm, const unsigned int numberCoreVectors, - const MPI_Comm & mpiComm, - dealii::parallel::distributed::Vector & tempNonCoreVectorsArray) + const MPI_Comm & mpiComm, + std::vector & tempNonCoreVectorsArray) { const unsigned int localVectorSize = X.size()/numberVectors; diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index 2d3250d72..2c109fef5 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -178,132 +178,113 @@ namespace dftfe{ const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - // if(totalNumberBlocks >= 1 || numberBandGroups>1) - //{ - // - //allocate storage for eigenVectorsFlattenedArray for multiple blocks - // - dealii::parallel::distributed::Vector eigenVectorsFlattenedArrayBlock; - operatorMatrix.reinit(vectorsBlockSize, - eigenVectorsFlattenedArrayBlock, - true); - - for (unsigned int jvec = 0; jvec < totalNumberWaveFunctions; jvec += vectorsBlockSize) - { - // Correct block dimensions if block "goes off edge of" the matrix - const unsigned int BVec = std::min(vectorsBlockSize, totalNumberWaveFunctions-jvec); - - if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && - (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) - { - //create custom partitioned dealii array - if (BVec!=vectorsBlockSize) - operatorMatrix.reinit(BVec, - eigenVectorsFlattenedArrayBlock, - true); - - //fill the eigenVectorsFlattenedArrayBlock from eigenVectorsFlattenedArray - computing_timer.enter_section("Copy from full to block flattened array"); - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - for(unsigned int iWave = 0; iWave < BVec; ++iWave) - eigenVectorsFlattenedArrayBlock.local_element(iNode*BVec+iWave) - =eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave]; - - computing_timer.exit_section("Copy from full to block flattened array"); - - // - //call Chebyshev filtering function only for the current block to be filtered - //and does in-place filtering - computing_timer.enter_section("Chebyshev filtering opt"); - linearAlgebraOperations::chebyshevFilter(operatorMatrix, - eigenVectorsFlattenedArrayBlock, - BVec, - chebyshevOrder, - d_lowerBoundUnWantedSpectrum, - upperBoundUnwantedSpectrum, - d_lowerBoundWantedSpectrum); - computing_timer.exit_section("Chebyshev filtering opt"); - - if (dftParameters::verbosity>=4) - dftUtils::printCurrentMemoryUsage(operatorMatrix.getMPICommunicator(), - "During blocked chebyshev filtering"); - - //copy the eigenVectorsFlattenedArrayBlock into eigenVectorsFlattenedArray after filtering - computing_timer.enter_section("Copy from block to full flattened array"); - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - for(unsigned int iWave = 0; iWave < BVec; ++iWave) - eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave] - = eigenVectorsFlattenedArrayBlock.local_element(iNode*BVec+iWave); - - computing_timer.exit_section("Copy from block to full flattened array"); - } - else - { - //set to zero wavefunctions which wont go through chebyshev filtering inside a given band group - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - for(unsigned int iWave = 0; iWave < BVec; ++iWave) - eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave] - = dataTypes::number(0.0); - - } - }//block loop - - eigenVectorsFlattenedArrayBlock.reinit(0); - - if (numberBandGroups>1) + // + //allocate storage for eigenVectorsFlattenedArray for multiple blocks + // + dealii::parallel::distributed::Vector eigenVectorsFlattenedArrayBlock; + operatorMatrix.reinit(vectorsBlockSize, + eigenVectorsFlattenedArrayBlock, + true); + + for (unsigned int jvec = 0; jvec < totalNumberWaveFunctions; jvec += vectorsBlockSize) + { + + // Correct block dimensions if block "goes off edge of" the matrix + const unsigned int BVec = std::min(vectorsBlockSize, totalNumberWaveFunctions-jvec); + + if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && + (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) + { + //create custom partitioned dealii array + if (BVec!=vectorsBlockSize) + operatorMatrix.reinit(BVec, + eigenVectorsFlattenedArrayBlock, + true); + + //fill the eigenVectorsFlattenedArrayBlock from eigenVectorsFlattenedArray + computing_timer.enter_section("Copy from full to block flattened array"); + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < BVec; ++iWave) + eigenVectorsFlattenedArrayBlock.local_element(iNode*BVec+iWave) + =eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave]; + + computing_timer.exit_section("Copy from full to block flattened array"); + + // + //call Chebyshev filtering function only for the current block to be filtered + //and does in-place filtering + computing_timer.enter_section("Chebyshev filtering opt"); + linearAlgebraOperations::chebyshevFilter(operatorMatrix, + eigenVectorsFlattenedArrayBlock, + BVec, + chebyshevOrder, + d_lowerBoundUnWantedSpectrum, + upperBoundUnwantedSpectrum, + d_lowerBoundWantedSpectrum); + computing_timer.exit_section("Chebyshev filtering opt"); + + if (dftParameters::verbosity>=4) + dftUtils::printCurrentMemoryUsage(operatorMatrix.getMPICommunicator(), + "During blocked chebyshev filtering"); + + //copy the eigenVectorsFlattenedArrayBlock into eigenVectorsFlattenedArray after filtering + computing_timer.enter_section("Copy from block to full flattened array"); + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < BVec; ++iWave) + eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave] + = eigenVectorsFlattenedArrayBlock.local_element(iNode*BVec+iWave); + + computing_timer.exit_section("Copy from block to full flattened array"); + } + else { - computing_timer.enter_section("MPI All Reduce wavefunctions across all band groups"); + //set to zero wavefunctions which wont go through chebyshev filtering inside a given band group + for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) + for(unsigned int iWave = 0; iWave < BVec; ++iWave) + eigenVectorsFlattened[iNode*totalNumberWaveFunctions+jvec+iWave] + = dataTypes::number(0.0); + + } + }//block loop + + eigenVectorsFlattenedArrayBlock.reinit(0); + + if (numberBandGroups>1) + { + computing_timer.enter_section("MPI All Reduce wavefunctions across all band groups"); #ifdef USE_COMPLEX - MPI_Allreduce(MPI_IN_PLACE, - &eigenVectorsFlattened[0], - totalNumberWaveFunctions*localVectorSize, - MPI_C_DOUBLE_COMPLEX, - MPI_SUM, - interBandGroupComm); + MPI_Allreduce(MPI_IN_PLACE, + &eigenVectorsFlattened[0], + totalNumberWaveFunctions*localVectorSize, + MPI_C_DOUBLE_COMPLEX, + MPI_SUM, + interBandGroupComm); #else - MPI_Allreduce(MPI_IN_PLACE, - &eigenVectorsFlattened[0], - totalNumberWaveFunctions*localVectorSize, - MPI_DOUBLE, - MPI_SUM, - interBandGroupComm); + MPI_Allreduce(MPI_IN_PLACE, + &eigenVectorsFlattened[0], + totalNumberWaveFunctions*localVectorSize, + MPI_DOUBLE, + MPI_SUM, + interBandGroupComm); #endif - computing_timer.exit_section("MPI All Reduce wavefunctions across all band groups"); - } - //} - /*else - { - operatorMatrix.reinit(totalNumberWaveFunctions, - eigenVectorsFlattened, - false); - // - //call Chebyshev filtering function only for the current block to be filtered - //and does in-place filtering - computing_timer.enter_section("Chebyshev filtering opt"); - linearAlgebraOperations::chebyshevFilter(operatorMatrix, - eigenVectorsFlattened, - totalNumberWaveFunctions, - chebyshevOrder, - d_lowerBoundUnWantedSpectrum, - upperBoundUnwantedSpectrum, - d_lowerBoundWantedSpectrum); - computing_timer.exit_section("Chebyshev filtering opt"); - - }*/ + computing_timer.exit_section("MPI All Reduce wavefunctions across all band groups"); + } + if(dftParameters::verbosity >= 4) pcout<<"ChebyShev Filtering Done: "< eigenVectorsFlattenedRR; + std::vector eigenVectorsFlattenedRR; if (eigenValues.size()!=totalNumberWaveFunctions) { - operatorMatrix.reinit(eigenValues.size(), - eigenVectorsFlattenedRR, - true); + eigenVectorsFlattenedRR.resize(eigenValues.size()*localVectorSize,dataTypes::number(0.0)); + //operatorMatrix.reinit(eigenValues.size(), + // eigenVectorsFlattenedRR, + // true); } if(dftParameters::orthogType.compare("LW") == 0) @@ -329,12 +310,13 @@ namespace dftfe{ else if (dftParameters::orthogType.compare("PGS") == 0) { computing_timer.enter_section("Pseudo-Gram-Schmidt"); - const unsigned int flag=linearAlgebraOperations::pseudoGramSchmidtOrthogonalization(eigenVectorsFlattened, - totalNumberWaveFunctions, - interBandGroupComm, - totalNumberWaveFunctions-eigenValues.size(), - operatorMatrix.getMPICommunicator(), - eigenVectorsFlattenedRR); + const unsigned int flag=linearAlgebraOperations::pseudoGramSchmidtOrthogonalization + (eigenVectorsFlattened, + totalNumberWaveFunctions, + interBandGroupComm, + totalNumberWaveFunctions-eigenValues.size(), + operatorMatrix.getMPICommunicator(), + eigenVectorsFlattenedRR); if (flag==1) { @@ -368,47 +350,32 @@ namespace dftfe{ for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) for(unsigned int iWave = 0; iWave < eigenValues.size(); ++iWave) - eigenVectorsFlattenedRR.local_element(iNode*eigenValues.size() - +iWave) + eigenVectorsFlattenedRR[iNode*eigenValues.size() + +iWave] =eigenVectorsFlattened[iNode*totalNumberWaveFunctions+(totalNumberWaveFunctions-eigenValues.size())+iWave]; linearAlgebraOperations::rayleighRitz(operatorMatrix, eigenVectorsFlattenedRR, eigenValues.size(), interBandGroupComm, + operatorMatrix.getMPICommunicator(), eigenValues); for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) for(unsigned int iWave = 0; iWave < eigenValues.size(); ++iWave) eigenVectorsFlattened[iNode*totalNumberWaveFunctions+(totalNumberWaveFunctions-eigenValues.size())+iWave] - = eigenVectorsFlattenedRR.local_element(iNode*eigenValues.size()+iWave); + = eigenVectorsFlattenedRR[iNode*eigenValues.size()+iWave]; } else { - operatorMatrix.reinit(totalNumberWaveFunctions, - eigenVectorsFlattenedRR, - true); - - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - for(unsigned int iWave = 0; iWave < totalNumberWaveFunctions; ++iWave) - eigenVectorsFlattenedRR.local_element(iNode*eigenValues.size() - +iWave) - =eigenVectorsFlattened[iNode*totalNumberWaveFunctions+iWave]; linearAlgebraOperations::rayleighRitz(operatorMatrix, - eigenVectorsFlattenedRR, + eigenVectorsFlattened, totalNumberWaveFunctions, interBandGroupComm, + operatorMatrix.getMPICommunicator(), eigenValues); - - - for(unsigned int iNode = 0; iNode < localVectorSize; ++iNode) - for(unsigned int iWave = 0; iWave < totalNumberWaveFunctions; ++iWave) - eigenVectorsFlattened[iNode*totalNumberWaveFunctions+iWave] - = eigenVectorsFlattenedRR.local_element(iNode*totalNumberWaveFunctions+iWave); - - } @@ -421,16 +388,18 @@ namespace dftfe{ } computing_timer.enter_section("eigen vectors residuals opt"); - //if (eigenValues.size()!=totalNumberWaveFunctions) + if (eigenValues.size()!=totalNumberWaveFunctions) linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, eigenVectorsFlattenedRR, eigenValues, + operatorMatrix.getMPICommunicator(), residualNorms); - //else - //linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, - // eigenVectorsFlattened, - // eigenValues, - // residualNorms); + else + linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, + eigenVectorsFlattened, + eigenValues, + operatorMatrix.getMPICommunicator(), + residualNorms); computing_timer.exit_section("eigen vectors residuals opt"); if(dftParameters::verbosity >= 4) @@ -543,10 +512,10 @@ namespace dftfe{ computing_timer.enter_section("compute eigen vectors residuals"); - linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, - eigenVectors, - eigenValues, - residualNorms); + //linearAlgebraOperations::computeEigenResidualNorm(operatorMatrix, + // eigenVectors, + // eigenValues, + // residualNorms); computing_timer.exit_section("compute eigen vectors residuals"); return; From 61747a080e1f912454e985ab4d9b13d18141ab22 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Sat, 8 Sep 2018 18:58:29 -0400 Subject: [PATCH 32/59] Implemented blocked mpiallreduce over wfcs during band parallelization. Added two relevant ctests. ctests passed. --- include/dftParameters.h | 1 + src/linAlg/linearAlgebraOperationsInternal.cc | 49 +++++++--- ...evOrthogonalizedSubspaceIterationSolver.cc | 36 ++++--- .../complex/hcpMgPrim_02_c.mpirun=8.output | 50 ++++++++++ .../complex/hcpMgPrim_02_c.prm.in | 93 +++++++++++++++++++ .../real/hcpMgPrim_01_g.mpirun=8.output | 42 +++++++++ .../real/hcpMgPrim_01_g.prm.in | 91 ++++++++++++++++++ utils/dftParameters.cc | 6 ++ 8 files changed, 340 insertions(+), 28 deletions(-) create mode 100644 tests/dft/pseudopotential/complex/hcpMgPrim_02_c.mpirun=8.output create mode 100644 tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_g.mpirun=8.output create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in diff --git a/include/dftParameters.h b/include/dftParameters.h index 76bb50306..d18a39a48 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -76,6 +76,7 @@ namespace dftfe { extern double lowerBoundUnwantedFracUpper; extern bool triMatPGSOpt; extern bool reuseWfcGeoOpt; + extern double mpiAllReduceMessageBlockSizeMB; /** * Declare parameters. diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index d6fe7ace3..c7d4fd282 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -485,7 +485,7 @@ namespace dftfe if (numberBandGroups>1) { if (numberCoreVectors!=0) - { + { const unsigned int numberNonCoreVectors=N-numberCoreVectors; for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) @@ -493,13 +493,23 @@ namespace dftfe *(nonCoreVectorsArray+iNode*numberNonCoreVectors +iWave) =*(subspaceVectorsArray+iNode*N+numberCoreVectors+iWave); + //8 bytes for double + const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/8; + + for (unsigned int i=0; i1) { computing_timer.enter_section("MPI All Reduce wavefunctions across all band groups"); - #ifdef USE_COMPLEX - MPI_Allreduce(MPI_IN_PLACE, - &eigenVectorsFlattened[0], - totalNumberWaveFunctions*localVectorSize, - MPI_C_DOUBLE_COMPLEX, - MPI_SUM, - interBandGroupComm); + //16 bytes for std::complex + const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/16; #else - MPI_Allreduce(MPI_IN_PLACE, - &eigenVectorsFlattened[0], - totalNumberWaveFunctions*localVectorSize, - MPI_DOUBLE, - MPI_SUM, - interBandGroupComm); + //8 bytes for double + const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/8; #endif + for (unsigned int i=0; i1. The optimum value is architecture specific. Default value is 2.0 MB."); } prm.leave_subsection (); @@ -423,6 +428,7 @@ namespace dftParameters { dftParameters::npool = prm.get_integer("NPKPT"); dftParameters::nbandGrps = prm.get_integer("NPBAND"); + dftParameters::mpiAllReduceMessageBlockSizeMB = prm.get_double("MPI ALLREDUCE BLOCK SIZE"); } prm.leave_subsection (); From b6b45e756047390d42d385ac578fa696d40f82d0 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Sat, 8 Sep 2018 19:48:19 -0400 Subject: [PATCH 33/59] Adjusted default block message size. --- utils/dftParameters.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index aaefc8f59..3a1b0fd3d 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -96,9 +96,9 @@ namespace dftParameters Patterns::Integer(1), "[Standard] Number of groups of MPI tasks across which the work load of the bands is parallelised. NPKPT times NPBAND must be a divisor of total number of MPI tasks. Further, NPBAND must be less than or equal to NUMBER OF KOHN-SHAM WAVEFUNCTIONS."); - prm.declare_entry("MPI ALLREDUCE BLOCK SIZE", "2.0", + prm.declare_entry("MPI ALLREDUCE BLOCK SIZE", "100.0", Patterns::Double(0), - "[Advanced] Block size in MB used to break a single MPI_Allreduce call on wavefunction vectors data into multiple MPI_Allreduce calls to avoid hitting network latency. This variable is relevant only if NPBAND>1. The optimum value is architecture specific. Default value is 2.0 MB."); + "[Advanced] Block message size in MB used to break a single MPI_Allreduce call on wavefunction vectors data into multiple MPI_Allreduce calls. This is useful on certain architectures which take advantage of High Bandwidth Memory to improve efficiency of MPI operations. This variable is relevant only if NPBAND>1. Default value is 100.0 MB."); } prm.leave_subsection (); From 3963c61529cdb304f0412aa1390bce3497b44fa5 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Sun, 9 Sep 2018 21:37:29 -0400 Subject: [PATCH 34/59] Added single atom wavefunctions for Cu pseudopotential --- .../z29/oncv/pseudoAtomData/PseudoAtomDat | 26 - .../z29/oncv/pseudoAtomData/denom.dat | 6 - .../z29/oncv/pseudoAtomData/locPot.dat | 600 -------- .../z29/oncv/pseudoAtomData/proj_l0.dat | 600 -------- .../z29/oncv/pseudoAtomData/proj_l1.dat | 600 -------- .../z29/oncv/pseudoAtomData/proj_l2.dat | 600 -------- .../z29/oncv/singleAtomData/psi32.inp | 525 ------- .../z29/oncv/singleAtomData/psi40.inp | 525 ------- .../z29/oncv/singleAtomData/psi41.inp | 525 ------- .../z29/oncv/singleAtomData/psi43.inp | 525 ------- .../z29/{oncv => }/singleAtomData/density.inp | 0 .../z29/singleAtomData/psi30.inp | 1335 +++++++++++++++++ .../z29/singleAtomData/psi31.inp | 1335 +++++++++++++++++ .../z29/singleAtomData/psi32.inp | 1335 +++++++++++++++++ .../z29/singleAtomData/psi40.inp | 1335 +++++++++++++++++ 15 files changed, 5340 insertions(+), 4532 deletions(-) delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/PseudoAtomDat delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/denom.dat delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/locPot.dat delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l0.dat delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l1.dat delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l2.dat delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi32.inp delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi40.inp delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi41.inp delete mode 100644 data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi43.inp rename data/electronicStructure/pseudoPotential/z29/{oncv => }/singleAtomData/density.inp (100%) create mode 100644 data/electronicStructure/pseudoPotential/z29/singleAtomData/psi30.inp create mode 100644 data/electronicStructure/pseudoPotential/z29/singleAtomData/psi31.inp create mode 100644 data/electronicStructure/pseudoPotential/z29/singleAtomData/psi32.inp create mode 100644 data/electronicStructure/pseudoPotential/z29/singleAtomData/psi40.inp diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/PseudoAtomDat b/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/PseudoAtomDat deleted file mode 100644 index 61086c5b5..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/PseudoAtomDat +++ /dev/null @@ -1,26 +0,0 @@ -18 -0 0 0 0 -1 0 0 1 -2 1 -1 2 -2 1 0 2 -2 1 1 2 -3 1 -1 3 -3 1 0 3 -3 1 1 3 -4 2 -2 4 -4 2 -1 4 -4 2 0 4 -4 2 1 4 -4 2 2 4 -5 2 -2 5 -5 2 -1 5 -5 2 0 5 -5 2 1 5 -5 2 2 5 -proj_l0.dat -2 -proj_l1.dat -2 -proj_l2.dat -2 -denom.dat diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/denom.dat b/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/denom.dat deleted file mode 100644 index 7561308fd..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/denom.dat +++ /dev/null @@ -1,6 +0,0 @@ --3.30892101275000 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000 - 0.00000000000000 -0.08248237469000 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000 - 0.00000000000000 0.00000000000000 -6.08509173800000 0.00000000000000 0.00000000000000 0.00000000000000 - 0.00000000000000 0.00000000000000 0.00000000000000 -2.31936161760000 0.00000000000000 0.00000000000000 - 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000 -9.62818298900000 0.00000000000000 - 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000 0.00000000000000 -3.54692786140000 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/locPot.dat b/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/locPot.dat deleted file mode 100644 index bdfe6aef6..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/locPot.dat +++ /dev/null @@ -1,600 +0,0 @@ -0.00000000000000e+00 -2.67132910870000e+01 -1.00000000000000e-02 -2.67131471885000e+01 -2.00000000000000e-02 -2.67129809040000e+01 -3.00000000000000e-02 -2.67124501935000e+01 -4.00000000000000e-02 -2.67112130175000e+01 -5.00000000000000e-02 -2.67088578875000e+01 -6.00000000000000e-02 -2.67049528990000e+01 -7.00000000000000e-02 -2.66990894115000e+01 -8.00000000000000e-02 -2.66909144920000e+01 -9.00000000000000e-02 -2.66801498655000e+01 -1.00000000000000e-01 -2.66665982410000e+01 -1.10000000000000e-01 -2.66501398175000e+01 -1.20000000000000e-01 -2.66307224370000e+01 -1.30000000000000e-01 -2.66083486345000e+01 -1.40000000000000e-01 -2.65830620660000e+01 -1.50000000000000e-01 -2.65549349655000e+01 -1.60000000000000e-01 -2.65240574895000e+01 -1.70000000000000e-01 -2.64905292495000e+01 -1.80000000000000e-01 -2.64544529730000e+01 -1.90000000000000e-01 -2.64159300185000e+01 -2.00000000000000e-01 -2.63750574040000e+01 -2.10000000000000e-01 -2.63319260035000e+01 -2.20000000000000e-01 -2.62866195955000e+01 -2.30000000000000e-01 -2.62392145080000e+01 -2.40000000000000e-01 -2.61897796495000e+01 -2.50000000000000e-01 -2.61383767860000e+01 -2.60000000000000e-01 -2.60850609320000e+01 -2.70000000000000e-01 -2.60298808020000e+01 -2.80000000000000e-01 -2.59728792570000e+01 -2.90000000000000e-01 -2.59140937125000e+01 -3.00000000000000e-01 -2.58535564975000e+01 -3.10000000000000e-01 -2.57912951495000e+01 -3.20000000000000e-01 -2.57273326390000e+01 -3.30000000000000e-01 -2.56616875390000e+01 -3.40000000000000e-01 -2.55943741040000e+01 -3.50000000000000e-01 -2.55254023380000e+01 -3.60000000000000e-01 -2.54547779585000e+01 -3.70000000000000e-01 -2.53825023820000e+01 -3.80000000000000e-01 -2.53085726390000e+01 -3.90000000000000e-01 -2.52329813055000e+01 -4.00000000000000e-01 -2.51557164530000e+01 -4.10000000000000e-01 -2.50767616295000e+01 -4.20000000000000e-01 -2.49960959105000e+01 -4.30000000000000e-01 -2.49136940415000e+01 -4.40000000000000e-01 -2.48295267160000e+01 -4.50000000000000e-01 -2.47435610025000e+01 -4.60000000000000e-01 -2.46557609560000e+01 -4.70000000000000e-01 -2.45660884310000e+01 -4.80000000000000e-01 -2.44745040970000e+01 -4.90000000000000e-01 -2.43809686450000e+01 -5.00000000000000e-01 -2.42854442140000e+01 -5.10000000000000e-01 -2.41878959285000e+01 -5.20000000000000e-01 -2.40882934535000e+01 -5.30000000000000e-01 -2.39866127975000e+01 -5.40000000000000e-01 -2.38828377500000e+01 -5.50000000000000e-01 -2.37769613400000e+01 -5.60000000000000e-01 -2.36689871920000e+01 -5.70000000000000e-01 -2.35589301260000e+01 -5.80000000000000e-01 -2.34468171205000e+01 -5.90000000000000e-01 -2.33326870455000e+01 -6.00000000000000e-01 -2.32165907640000e+01 -6.10000000000000e-01 -2.30985904080000e+01 -6.20000000000000e-01 -2.29787582450000e+01 -6.30000000000000e-01 -2.28571759545000e+01 -6.40000000000000e-01 -2.27339327515000e+01 -6.50000000000000e-01 -2.26091240880000e+01 -6.60000000000000e-01 -2.24828502335000e+01 -6.70000000000000e-01 -2.23552145885000e+01 -6.80000000000000e-01 -2.22263223940000e+01 -6.90000000000000e-01 -2.20962795050000e+01 -7.00000000000000e-01 -2.19651912795000e+01 -7.10000000000000e-01 -2.18331617210000e+01 -7.20000000000000e-01 -2.17002927910000e+01 -7.30000000000000e-01 -2.15666839205000e+01 -7.40000000000000e-01 -2.14324315695000e+01 -7.50000000000000e-01 -2.12976290470000e+01 -7.60000000000000e-01 -2.11623664170000e+01 -7.70000000000000e-01 -2.10267304500000e+01 -7.80000000000000e-01 -2.08908046560000e+01 -7.90000000000000e-01 -2.07546693530000e+01 -8.00000000000000e-01 -2.06184017560000e+01 -8.10000000000000e-01 -2.04820760770000e+01 -8.20000000000000e-01 -2.03457636185000e+01 -8.30000000000000e-01 -2.02095328535000e+01 -8.40000000000000e-01 -2.00734494915000e+01 -8.50000000000000e-01 -1.99375765180000e+01 -8.60000000000000e-01 -1.98019742190000e+01 -8.70000000000000e-01 -1.96667001760000e+01 -8.80000000000000e-01 -1.95318092450000e+01 -8.90000000000000e-01 -1.93973535170000e+01 -9.00000000000000e-01 -1.92633822630000e+01 -9.10000000000000e-01 -1.91299418640000e+01 -9.20000000000000e-01 -1.89970757390000e+01 -9.30000000000000e-01 -1.88648242650000e+01 -9.40000000000000e-01 -1.87332246960000e+01 -9.50000000000000e-01 -1.86023110930000e+01 -9.60000000000000e-01 -1.84721142560000e+01 -9.70000000000000e-01 -1.83426617390000e+01 -9.80000000000000e-01 -1.82139777045000e+01 -9.90000000000000e-01 -1.80860828595000e+01 -1.00000000000000e+00 -1.79589946325000e+01 -1.01000000000000e+00 -1.78327271585000e+01 -1.02000000000000e+00 -1.77072913645000e+01 -1.03000000000000e+00 -1.75826951280000e+01 -1.04000000000000e+00 -1.74589434745000e+01 -1.05000000000000e+00 -1.73360383920000e+01 -1.06000000000000e+00 -1.72139795580000e+01 -1.07000000000000e+00 -1.70927644715000e+01 -1.08000000000000e+00 -1.69723888070000e+01 -1.09000000000000e+00 -1.68528466835000e+01 -1.10000000000000e+00 -1.67341309595000e+01 -1.11000000000000e+00 -1.66162339120000e+01 -1.12000000000000e+00 -1.64991475135000e+01 -1.13000000000000e+00 -1.63828636850000e+01 -1.14000000000000e+00 -1.62673749860000e+01 -1.15000000000000e+00 -1.61526748660000e+01 -1.16000000000000e+00 -1.60387578760000e+01 -1.17000000000000e+00 -1.59256198825000e+01 -1.18000000000000e+00 -1.58132589495000e+01 -1.19000000000000e+00 -1.57016748280000e+01 -1.20000000000000e+00 -1.55908688765000e+01 -1.21000000000000e+00 -1.54808450925000e+01 -1.22000000000000e+00 -1.53716093995000e+01 -1.23000000000000e+00 -1.52631692465000e+01 -1.24000000000000e+00 -1.51555341650000e+01 -1.25000000000000e+00 -1.50487154155000e+01 -1.26000000000000e+00 -1.49427251635000e+01 -1.27000000000000e+00 -1.48375768440000e+01 -1.28000000000000e+00 -1.47332846205000e+01 -1.29000000000000e+00 -1.46298628325000e+01 -1.30000000000000e+00 -1.45273260555000e+01 -1.31000000000000e+00 -1.44256882055000e+01 -1.32000000000000e+00 -1.43249628825000e+01 -1.33000000000000e+00 -1.42251624520000e+01 -1.34000000000000e+00 -1.41262976385000e+01 -1.35000000000000e+00 -1.40283787085000e+01 -1.36000000000000e+00 -1.39314126700000e+01 -1.37000000000000e+00 -1.38354054405000e+01 -1.38000000000000e+00 -1.37403611755000e+01 -1.39000000000000e+00 -1.36462806580000e+01 -1.40000000000000e+00 -1.35531642935000e+01 -1.41000000000000e+00 -1.34610089695000e+01 -1.42000000000000e+00 -1.33698105230000e+01 -1.43000000000000e+00 -1.32795633445000e+01 -1.44000000000000e+00 -1.31902597000000e+01 -1.45000000000000e+00 -1.31018918315000e+01 -1.46000000000000e+00 -1.30144504250000e+01 -1.47000000000000e+00 -1.29279264750000e+01 -1.48000000000000e+00 -1.28423105865000e+01 -1.49000000000000e+00 -1.27575942430000e+01 -1.50000000000000e+00 -1.26737687525000e+01 -1.51000000000000e+00 -1.25908275780000e+01 -1.52000000000000e+00 -1.25087636245000e+01 -1.53000000000000e+00 -1.24275727470000e+01 -1.54000000000000e+00 -1.23472504415000e+01 -1.55000000000000e+00 -1.22677945110000e+01 -1.56000000000000e+00 -1.21892030375000e+01 -1.57000000000000e+00 -1.21114754130000e+01 -1.58000000000000e+00 -1.20346114460000e+01 -1.59000000000000e+00 -1.19586115245000e+01 -1.60000000000000e+00 -1.18834758870000e+01 -1.61000000000000e+00 -1.18092051570000e+01 -1.62000000000000e+00 -1.17357986210000e+01 -1.63000000000000e+00 -1.16632562890000e+01 -1.64000000000000e+00 -1.15915753210000e+01 -1.65000000000000e+00 -1.15207542700000e+01 -1.66000000000000e+00 -1.14507873800000e+01 -1.67000000000000e+00 -1.13816709800000e+01 -1.68000000000000e+00 -1.13133961170000e+01 -1.69000000000000e+00 -1.12459561045000e+01 -1.70000000000000e+00 -1.11793397055000e+01 -1.71000000000000e+00 -1.11135375270000e+01 -1.72000000000000e+00 -1.10485369580000e+01 -1.73000000000000e+00 -1.09843267405000e+01 -1.74000000000000e+00 -1.09208931095000e+01 -1.75000000000000e+00 -1.08582231830000e+01 -1.76000000000000e+00 -1.07963024760000e+01 -1.77000000000000e+00 -1.07351168510000e+01 -1.78000000000000e+00 -1.06746515290000e+01 -1.79000000000000e+00 -1.06148916525000e+01 -1.80000000000000e+00 -1.05558224845000e+01 -1.81000000000000e+00 -1.04974291040000e+01 -1.82000000000000e+00 -1.04396970385000e+01 -1.83000000000000e+00 -1.03826120325000e+01 -1.84000000000000e+00 -1.03261599920000e+01 -1.85000000000000e+00 -1.02703280730000e+01 -1.86000000000000e+00 -1.02151026020000e+01 -1.87000000000000e+00 -1.01604726810000e+01 -1.88000000000000e+00 -1.01064255280000e+01 -1.89000000000000e+00 -1.00529518205000e+01 -1.90000000000000e+00 -1.00000408450000e+01 -1.91000000000000e+00 -9.94768375200000e+00 -1.92000000000000e+00 -9.89587197600000e+00 -1.93000000000000e+00 -9.84459692600000e+00 -1.94000000000000e+00 -9.79385071500000e+00 -1.95000000000000e+00 -9.74362510150000e+00 -1.96000000000000e+00 -9.69391223800000e+00 -1.97000000000000e+00 -9.64470384150000e+00 -1.98000000000000e+00 -9.59599253100000e+00 -1.99000000000000e+00 -9.54777080950000e+00 -2.00000000000000e+00 -9.50003128750000e+00 -2.01000000000000e+00 -9.45276694500000e+00 -2.02000000000000e+00 -9.40597037500000e+00 -2.03000000000000e+00 -9.35963501650000e+00 -2.04000000000000e+00 -9.31375386250000e+00 -2.05000000000000e+00 -9.26832035450000e+00 -2.06000000000000e+00 -9.22332804050000e+00 -2.07000000000000e+00 -9.17877030350000e+00 -2.08000000000000e+00 -9.13464116000000e+00 -2.09000000000000e+00 -9.09093420850000e+00 -2.10000000000000e+00 -9.04764356300000e+00 -2.11000000000000e+00 -9.00476332900000e+00 -2.12000000000000e+00 -8.96228750600000e+00 -2.13000000000000e+00 -8.92021065900000e+00 -2.14000000000000e+00 -8.87852696800000e+00 -2.15000000000000e+00 -8.83723106550000e+00 -2.16000000000000e+00 -8.79631762600000e+00 -2.17000000000000e+00 -8.75578112550000e+00 -2.18000000000000e+00 -8.71561665050000e+00 -2.19000000000000e+00 -8.67581893550000e+00 -2.20000000000000e+00 -8.63638299850000e+00 -2.21000000000000e+00 -8.59730407350000e+00 -2.22000000000000e+00 -8.55857705900000e+00 -2.23000000000000e+00 -8.52019746600000e+00 -2.24000000000000e+00 -8.48216058950000e+00 -2.25000000000000e+00 -8.44446171750000e+00 -2.26000000000000e+00 -8.40709658150000e+00 -2.27000000000000e+00 -8.37006060050000e+00 -2.28000000000000e+00 -8.33334948550000e+00 -2.29000000000000e+00 -8.29695910400000e+00 -2.30000000000000e+00 -8.26088502950000e+00 -2.31000000000000e+00 -8.22512335100000e+00 -2.32000000000000e+00 -8.18967003850000e+00 -2.33000000000000e+00 -8.15452090900000e+00 -2.34000000000000e+00 -8.11967230300000e+00 -2.35000000000000e+00 -8.08512029350000e+00 -2.36000000000000e+00 -8.05086101700000e+00 -2.37000000000000e+00 -8.01689095050000e+00 -2.38000000000000e+00 -7.98320630950000e+00 -2.39000000000000e+00 -7.94980351500000e+00 -2.40000000000000e+00 -7.91667917550000e+00 -2.41000000000000e+00 -7.88382965100000e+00 -2.42000000000000e+00 -7.85125161450000e+00 -2.43000000000000e+00 -7.81894180350000e+00 -2.44000000000000e+00 -7.78689672400000e+00 -2.45000000000000e+00 -7.75511326850000e+00 -2.46000000000000e+00 -7.72358830400000e+00 -2.47000000000000e+00 -7.69231848200000e+00 -2.48000000000000e+00 -7.66130088500000e+00 -2.49000000000000e+00 -7.63053251000000e+00 -2.50000000000000e+00 -7.60001015300000e+00 -2.51000000000000e+00 -7.56973106000000e+00 -2.52000000000000e+00 -7.53969235850000e+00 -2.53000000000000e+00 -7.50989098750000e+00 -2.54000000000000e+00 -7.48032433050000e+00 -2.55000000000000e+00 -7.45098964750000e+00 -2.56000000000000e+00 -7.42188401950000e+00 -2.57000000000000e+00 -7.39300494350000e+00 -2.58000000000000e+00 -7.36434981350000e+00 -2.59000000000000e+00 -7.33591585050000e+00 -2.60000000000000e+00 -7.30770064450000e+00 -2.61000000000000e+00 -7.27970172200000e+00 -2.62000000000000e+00 -7.25191644550000e+00 -2.63000000000000e+00 -7.22434247450000e+00 -2.64000000000000e+00 -7.19697747100000e+00 -2.65000000000000e+00 -7.16981893850000e+00 -2.66000000000000e+00 -7.14286458700000e+00 -2.67000000000000e+00 -7.11611221150000e+00 -2.68000000000000e+00 -7.08955945950000e+00 -2.69000000000000e+00 -7.06320407200000e+00 -2.70000000000000e+00 -7.03704397750000e+00 -2.71000000000000e+00 -7.01107696700000e+00 -2.72000000000000e+00 -6.98530079650000e+00 -2.73000000000000e+00 -6.95971352600000e+00 -2.74000000000000e+00 -6.93431308500000e+00 -2.75000000000000e+00 -6.90909725100000e+00 -2.76000000000000e+00 -6.88406419100000e+00 -2.77000000000000e+00 -6.85921193800000e+00 -2.78000000000000e+00 -6.83453840800000e+00 -2.79000000000000e+00 -6.81004174400000e+00 -2.80000000000000e+00 -6.78572011750000e+00 -2.81000000000000e+00 -6.76157159050000e+00 -2.82000000000000e+00 -6.73759426400000e+00 -2.83000000000000e+00 -6.71378644600000e+00 -2.84000000000000e+00 -6.69014634300000e+00 -2.85000000000000e+00 -6.66667201600000e+00 -2.86000000000000e+00 -6.64336189250000e+00 -2.87000000000000e+00 -6.62021426500000e+00 -2.88000000000000e+00 -6.59722733650000e+00 -2.89000000000000e+00 -6.57439946150000e+00 -2.90000000000000e+00 -6.55172907500000e+00 -2.91000000000000e+00 -6.52921452750000e+00 -2.92000000000000e+00 -6.50685409000000e+00 -2.93000000000000e+00 -6.48464633200000e+00 -2.94000000000000e+00 -6.46258969950000e+00 -2.95000000000000e+00 -6.44068254550000e+00 -2.96000000000000e+00 -6.41892339700000e+00 -2.97000000000000e+00 -6.39731082600000e+00 -2.98000000000000e+00 -6.37584333550000e+00 -2.99000000000000e+00 -6.35451934150000e+00 -3.00000000000000e+00 -6.33333755200000e+00 -3.01000000000000e+00 -6.31229655400000e+00 -3.02000000000000e+00 -6.29139486050000e+00 -3.03000000000000e+00 -6.27063109950000e+00 -3.04000000000000e+00 -6.25000398950000e+00 -3.05000000000000e+00 -6.22951218200000e+00 -3.06000000000000e+00 -6.20915421200000e+00 -3.07000000000000e+00 -6.18892889350000e+00 -3.08000000000000e+00 -6.16883495400000e+00 -3.09000000000000e+00 -6.14887107550000e+00 -3.10000000000000e+00 -6.12903592350000e+00 -3.11000000000000e+00 -6.10932837000000e+00 -3.12000000000000e+00 -6.08974719050000e+00 -3.13000000000000e+00 -6.07029108950000e+00 -3.14000000000000e+00 -6.05095888250000e+00 -3.15000000000000e+00 -6.03174946250000e+00 -3.16000000000000e+00 -6.01266166000000e+00 -3.17000000000000e+00 -5.99369421050000e+00 -3.18000000000000e+00 -5.97484605900000e+00 -3.19000000000000e+00 -5.95611611900000e+00 -3.20000000000000e+00 -5.93750327700000e+00 -3.21000000000000e+00 -5.91900630200000e+00 -3.22000000000000e+00 -5.90062424900000e+00 -3.23000000000000e+00 -5.88235605700000e+00 -3.24000000000000e+00 -5.86420064400000e+00 -3.25000000000000e+00 -5.84615687750000e+00 -3.26000000000000e+00 -5.82822384350000e+00 -3.27000000000000e+00 -5.81040052950000e+00 -3.28000000000000e+00 -5.79268589200000e+00 -3.29000000000000e+00 -5.77507887800000e+00 -3.30000000000000e+00 -5.75757860750000e+00 -3.31000000000000e+00 -5.74018411500000e+00 -3.32000000000000e+00 -5.72289439700000e+00 -3.33000000000000e+00 -5.70570846650000e+00 -3.34000000000000e+00 -5.68862547950000e+00 -3.35000000000000e+00 -5.67164451550000e+00 -3.36000000000000e+00 -5.65476461400000e+00 -3.37000000000000e+00 -5.63798483850000e+00 -3.38000000000000e+00 -5.62130438400000e+00 -3.39000000000000e+00 -5.60472237350000e+00 -3.40000000000000e+00 -5.58823789250000e+00 -3.41000000000000e+00 -5.57185004150000e+00 -3.42000000000000e+00 -5.55555805650000e+00 -3.43000000000000e+00 -5.53936110150000e+00 -3.44000000000000e+00 -5.52325831250000e+00 -3.45000000000000e+00 -5.50724881150000e+00 -3.46000000000000e+00 -5.49133188000000e+00 -3.47000000000000e+00 -5.47550672100000e+00 -3.48000000000000e+00 -5.45977252250000e+00 -3.49000000000000e+00 -5.44412841800000e+00 -3.50000000000000e+00 -5.42857373500000e+00 -3.51000000000000e+00 -5.41310771350000e+00 -3.52000000000000e+00 -5.39772959400000e+00 -3.53000000000000e+00 -5.38243852100000e+00 -3.54000000000000e+00 -5.36723385750000e+00 -3.55000000000000e+00 -5.35211488450000e+00 -3.56000000000000e+00 -5.33708087650000e+00 -3.57000000000000e+00 -5.32213103650000e+00 -3.58000000000000e+00 -5.30726470900000e+00 -3.59000000000000e+00 -5.29248123050000e+00 -3.60000000000000e+00 -5.27777991000000e+00 -3.61000000000000e+00 -5.26316001150000e+00 -3.62000000000000e+00 -5.24862085050000e+00 -3.63000000000000e+00 -5.23416182100000e+00 -3.64000000000000e+00 -5.21978226400000e+00 -3.65000000000000e+00 -5.20548150850000e+00 -3.66000000000000e+00 -5.19125883100000e+00 -3.67000000000000e+00 -5.17711368400000e+00 -3.68000000000000e+00 -5.16304543950000e+00 -3.69000000000000e+00 -5.14905347000000e+00 -3.70000000000000e+00 -5.13513707750000e+00 -3.71000000000000e+00 -5.12129570150000e+00 -3.72000000000000e+00 -5.10752876650000e+00 -3.73000000000000e+00 -5.09383567400000e+00 -3.74000000000000e+00 -5.08021579550000e+00 -3.75000000000000e+00 -5.06666850900000e+00 -3.76000000000000e+00 -5.05319330500000e+00 -3.77000000000000e+00 -5.03978961200000e+00 -3.78000000000000e+00 -5.02645686000000e+00 -3.79000000000000e+00 -5.01319440450000e+00 -3.80000000000000e+00 -5.00000175500000e+00 -3.81000000000000e+00 -4.98687838145000e+00 -3.82000000000000e+00 -4.97382373995000e+00 -3.83000000000000e+00 -4.96083726000000e+00 -3.84000000000000e+00 -4.94791837030000e+00 -3.85000000000000e+00 -4.93506661215000e+00 -3.86000000000000e+00 -4.92228146665000e+00 -3.87000000000000e+00 -4.90956241490000e+00 -3.88000000000000e+00 -4.89690887855000e+00 -3.89000000000000e+00 -4.88432038950000e+00 -3.90000000000000e+00 -4.87179647820000e+00 -3.91000000000000e+00 -4.85933664990000e+00 -3.92000000000000e+00 -4.84694040500000e+00 -3.93000000000000e+00 -4.83460717880000e+00 -3.94000000000000e+00 -4.82233657535000e+00 -3.95000000000000e+00 -4.81012812295000e+00 -3.96000000000000e+00 -4.79798134990000e+00 -3.97000000000000e+00 -4.78589575555000e+00 -3.98000000000000e+00 -4.77387085270000e+00 -3.99000000000000e+00 -4.76190624350000e+00 -4.00000000000000e+00 -4.75000147820000e+00 -4.01000000000000e+00 -4.73815610710000e+00 -4.02000000000000e+00 -4.72636963355000e+00 -4.03000000000000e+00 -4.71464163465000e+00 -4.04000000000000e+00 -4.70297171390000e+00 -4.05000000000000e+00 -4.69135944240000e+00 -4.06000000000000e+00 -4.67980439150000e+00 -4.07000000000000e+00 -4.66830607305000e+00 -4.08000000000000e+00 -4.65686411550000e+00 -4.09000000000000e+00 -4.64547812735000e+00 -4.10000000000000e+00 -4.63414769990000e+00 -4.11000000000000e+00 -4.62287242425000e+00 -4.12000000000000e+00 -4.61165182495000e+00 -4.13000000000000e+00 -4.60048556945000e+00 -4.14000000000000e+00 -4.58937327530000e+00 -4.15000000000000e+00 -4.57831455285000e+00 -4.16000000000000e+00 -4.56730901230000e+00 -4.17000000000000e+00 -4.55635619425000e+00 -4.18000000000000e+00 -4.54545579375000e+00 -4.19000000000000e+00 -4.53460744135000e+00 -4.20000000000000e+00 -4.52381076555000e+00 -4.21000000000000e+00 -4.51306539470000e+00 -4.22000000000000e+00 -4.50237088870000e+00 -4.23000000000000e+00 -4.49172695950000e+00 -4.24000000000000e+00 -4.48113325450000e+00 -4.25000000000000e+00 -4.47058941940000e+00 -4.26000000000000e+00 -4.46009509995000e+00 -4.27000000000000e+00 -4.44964987815000e+00 -4.28000000000000e+00 -4.43925347315000e+00 -4.29000000000000e+00 -4.42890555245000e+00 -4.30000000000000e+00 -4.41860577835000e+00 -4.31000000000000e+00 -4.40835381300000e+00 -4.32000000000000e+00 -4.39814926365000e+00 -4.33000000000000e+00 -4.38799184710000e+00 -4.34000000000000e+00 -4.37788125425000e+00 -4.35000000000000e+00 -4.36781716320000e+00 -4.36000000000000e+00 -4.35779925180000e+00 -4.37000000000000e+00 -4.34782715545000e+00 -4.38000000000000e+00 -4.33790057970000e+00 -4.39000000000000e+00 -4.32801924185000e+00 -4.40000000000000e+00 -4.31818283495000e+00 -4.41000000000000e+00 -4.30839105195000e+00 -4.42000000000000e+00 -4.29864355935000e+00 -4.43000000000000e+00 -4.28894004310000e+00 -4.44000000000000e+00 -4.27928024950000e+00 -4.45000000000000e+00 -4.26966388575000e+00 -4.46000000000000e+00 -4.26009065925000e+00 -4.47000000000000e+00 -4.25056027060000e+00 -4.48000000000000e+00 -4.24107237865000e+00 -4.49000000000000e+00 -4.23162676055000e+00 -4.50000000000000e+00 -4.22222313715000e+00 -4.51000000000000e+00 -4.21286122950000e+00 -4.52000000000000e+00 -4.20354075845000e+00 -4.53000000000000e+00 -4.19426139910000e+00 -4.54000000000000e+00 -4.18502291120000e+00 -4.55000000000000e+00 -4.17582504505000e+00 -4.56000000000000e+00 -4.16666753460000e+00 -4.57000000000000e+00 -4.15755011380000e+00 -4.58000000000000e+00 -4.14847249730000e+00 -4.59000000000000e+00 -4.13943440030000e+00 -4.60000000000000e+00 -4.13043561080000e+00 -4.61000000000000e+00 -4.12147587500000e+00 -4.62000000000000e+00 -4.11255493930000e+00 -4.63000000000000e+00 -4.10367255005000e+00 -4.64000000000000e+00 -4.09482840515000e+00 -4.65000000000000e+00 -4.08602229805000e+00 -4.66000000000000e+00 -4.07725399760000e+00 -4.67000000000000e+00 -4.06852326195000e+00 -4.68000000000000e+00 -4.05982984930000e+00 -4.69000000000000e+00 -4.05117350235000e+00 -4.70000000000000e+00 -4.04255395490000e+00 -4.71000000000000e+00 -4.03397101885000e+00 -4.72000000000000e+00 -4.02542446360000e+00 -4.73000000000000e+00 -4.01691405860000e+00 -4.74000000000000e+00 -4.00843957325000e+00 -4.75000000000000e+00 -4.00000074080000e+00 -4.76000000000000e+00 -3.99159735275000e+00 -4.77000000000000e+00 -3.98322921000000e+00 -4.78000000000000e+00 -3.97489609265000e+00 -4.79000000000000e+00 -3.96659778085000e+00 -4.80000000000000e+00 -3.95833405480000e+00 -4.81000000000000e+00 -3.95010464310000e+00 -4.82000000000000e+00 -3.94190938380000e+00 -4.83000000000000e+00 -3.93374807045000e+00 -4.84000000000000e+00 -3.92562049340000e+00 -4.85000000000000e+00 -3.91752644310000e+00 -4.86000000000000e+00 -3.90946569980000e+00 -4.87000000000000e+00 -3.90143802205000e+00 -4.88000000000000e+00 -3.89344325355000e+00 -4.89000000000000e+00 -3.88548119455000e+00 -4.90000000000000e+00 -3.87755164510000e+00 -4.91000000000000e+00 -3.86965440550000e+00 -4.92000000000000e+00 -3.86178925700000e+00 -4.93000000000000e+00 -3.85395598770000e+00 -4.94000000000000e+00 -3.84615444110000e+00 -4.95000000000000e+00 -3.83838442675000e+00 -4.96000000000000e+00 -3.83064575400000e+00 -4.97000000000000e+00 -3.82293823245000e+00 -4.98000000000000e+00 -3.81526164785000e+00 -4.99000000000000e+00 -3.80761580915000e+00 -5.00000000000000e+00 -3.80000056270000e+00 -5.01000000000000e+00 -3.79241572690000e+00 -5.02000000000000e+00 -3.78486112015000e+00 -5.03000000000000e+00 -3.77733656075000e+00 -5.04000000000000e+00 -3.76984184255000e+00 -5.05000000000000e+00 -3.76237678635000e+00 -5.06000000000000e+00 -3.75494124495000e+00 -5.07000000000000e+00 -3.74753504520000e+00 -5.08000000000000e+00 -3.74015801390000e+00 -5.09000000000000e+00 -3.73280997785000e+00 -5.10000000000000e+00 -3.72549074205000e+00 -5.11000000000000e+00 -3.71820013105000e+00 -5.12000000000000e+00 -3.71093800725000e+00 -5.13000000000000e+00 -3.70370420555000e+00 -5.14000000000000e+00 -3.69649856080000e+00 -5.15000000000000e+00 -3.68932090785000e+00 -5.16000000000000e+00 -3.68217106585000e+00 -5.17000000000000e+00 -3.67504885560000e+00 -5.18000000000000e+00 -3.66795415190000e+00 -5.19000000000000e+00 -3.66088679735000e+00 -5.20000000000000e+00 -3.65384663450000e+00 -5.21000000000000e+00 -3.64683350595000e+00 -5.22000000000000e+00 -3.63984724770000e+00 -5.23000000000000e+00 -3.63288766980000e+00 -5.24000000000000e+00 -3.62595466215000e+00 -5.25000000000000e+00 -3.61904807465000e+00 -5.26000000000000e+00 -3.61216775720000e+00 -5.27000000000000e+00 -3.60531355975000e+00 -5.28000000000000e+00 -3.59848533220000e+00 -5.29000000000000e+00 -3.59168288460000e+00 -5.30000000000000e+00 -3.58490610705000e+00 -5.31000000000000e+00 -3.57815486210000e+00 -5.32000000000000e+00 -3.57142900665000e+00 -5.33000000000000e+00 -3.56472839760000e+00 -5.34000000000000e+00 -3.55805289195000e+00 -5.35000000000000e+00 -3.55140232225000e+00 -5.36000000000000e+00 -3.54477655255000e+00 -5.37000000000000e+00 -3.53817546700000e+00 -5.38000000000000e+00 -3.53159892920000e+00 -5.39000000000000e+00 -3.52504680270000e+00 -5.40000000000000e+00 -3.51851895110000e+00 -5.41000000000000e+00 -3.51201523245000e+00 -5.42000000000000e+00 -3.50553547870000e+00 -5.43000000000000e+00 -3.49907959760000e+00 -5.44000000000000e+00 -3.49264745910000e+00 -5.45000000000000e+00 -3.48623893305000e+00 -5.46000000000000e+00 -3.47985388945000e+00 -5.47000000000000e+00 -3.47349219825000e+00 -5.48000000000000e+00 -3.46715370215000e+00 -5.49000000000000e+00 -3.46083828640000e+00 -5.50000000000000e+00 -3.45454584260000e+00 -5.51000000000000e+00 -3.44827624670000e+00 -5.52000000000000e+00 -3.44202937470000e+00 -5.53000000000000e+00 -3.43580510265000e+00 -5.54000000000000e+00 -3.42960330365000e+00 -5.55000000000000e+00 -3.42342381845000e+00 -5.56000000000000e+00 -3.41726656715000e+00 -5.57000000000000e+00 -3.41113143150000e+00 -5.58000000000000e+00 -3.40501829335000e+00 -5.59000000000000e+00 -3.39892703440000e+00 -5.60000000000000e+00 -3.39285753650000e+00 -5.61000000000000e+00 -3.38680966415000e+00 -5.62000000000000e+00 -3.38078329490000e+00 -5.63000000000000e+00 -3.37477833965000e+00 -5.64000000000000e+00 -3.36879468570000e+00 -5.65000000000000e+00 -3.36283222035000e+00 -5.66000000000000e+00 -3.35689083075000e+00 -5.67000000000000e+00 -3.35097040435000e+00 -5.68000000000000e+00 -3.34507080080000e+00 -5.69000000000000e+00 -3.33919192615000e+00 -5.70000000000000e+00 -3.33333368520000e+00 -5.71000000000000e+00 -3.32749597055000e+00 -5.72000000000000e+00 -3.32167867465000e+00 -5.73000000000000e+00 -3.31588169010000e+00 -5.74000000000000e+00 -3.31010490935000e+00 -5.75000000000000e+00 -3.30434819090000e+00 -5.76000000000000e+00 -3.29861146115000e+00 -5.77000000000000e+00 -3.29289462220000e+00 -5.78000000000000e+00 -3.28719757150000e+00 -5.79000000000000e+00 -3.28152020665000e+00 -5.80000000000000e+00 -3.27586242520000e+00 -5.81000000000000e+00 -3.27022412465000e+00 -5.82000000000000e+00 -3.26460516520000e+00 -5.83000000000000e+00 -3.25900548620000e+00 -5.84000000000000e+00 -3.25342499020000e+00 -5.85000000000000e+00 -3.24786357940000e+00 -5.86000000000000e+00 -3.24232115620000e+00 -5.87000000000000e+00 -3.23679762285000e+00 -5.88000000000000e+00 -3.23129288080000e+00 -5.89000000000000e+00 -3.22580679760000e+00 -5.90000000000000e+00 -3.22033931575000e+00 -5.91000000000000e+00 -3.21489034215000e+00 -5.92000000000000e+00 -3.20945978365000e+00 -5.93000000000000e+00 -3.20404754705000e+00 -5.94000000000000e+00 -3.19865353930000e+00 -5.95000000000000e+00 -3.19327766725000e+00 -5.96000000000000e+00 -3.18791980305000e+00 -5.97000000000000e+00 -3.18257989125000e+00 -5.98000000000000e+00 -3.17725784410000e+00 -5.99000000000000e+00 -3.17195357290000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l0.dat b/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l0.dat deleted file mode 100644 index 34918f683..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l0.dat +++ /dev/null @@ -1,600 +0,0 @@ -0.00000000000000e+00 -4.43298168230000e+00 7.65800249580000E+00 -1.00000000000000e-02 -4.43209278760000e+00 7.64914241570000e+00 -2.00000000000000e-02 -4.42942054690000e+00 7.62236677100000e+00 -3.00000000000000e-02 -4.42497053833333e+00 7.57787245700000e+00 -4.00000000000000e-02 -4.41874834050000e+00 7.51585636850000e+00 -5.00000000000000e-02 -4.41076174100000e+00 7.43659267260000e+00 -6.00000000000000e-02 -4.40102071616667e+00 7.34043133250000e+00 -7.00000000000000e-02 -4.38953740328571e+00 7.22779622571429e+00 -8.00000000000000e-02 -4.37632606737500e+00 7.09918286612500e+00 -9.00000000000000e-02 -4.36140306233333e+00 6.95515574388889e+00 -1.00000000000000e-01 -4.34478678690000e+00 6.79634530020000e+00 -1.10000000000000e-01 -4.32649763481818e+00 6.62344455118182e+00 -1.20000000000000e-01 -4.30655794041667e+00 6.43720538516667e+00 -1.30000000000000e-01 -4.28499191953846e+00 6.23843455123077e+00 -1.40000000000000e-01 -4.26182560557143e+00 6.02798936642857e+00 -1.50000000000000e-01 -4.23708678146667e+00 5.80677316186667e+00 -1.60000000000000e-01 -4.21080490831250e+00 5.57573050056250e+00 -1.70000000000000e-01 -4.18301104982353e+00 5.33584218717647e+00 -1.80000000000000e-01 -4.15373779400000e+00 5.08812010744444e+00 -1.90000000000000e-01 -4.12301917194737e+00 4.83360192352632e+00 -2.00000000000000e-01 -4.09089057425000e+00 4.57334564925000e+00 -2.10000000000000e-01 -4.05738866528571e+00 4.30842415095238e+00 -2.20000000000000e-01 -4.02255129590909e+00 4.03991959277273e+00 -2.30000000000000e-01 -3.98641741473913e+00 3.76891786591304e+00 -2.40000000000000e-01 -3.94902697875000e+00 3.49650303045833e+00 -2.50000000000000e-01 -3.91042086304000e+00 3.22375180628000e+00 -2.60000000000000e-01 -3.87064077115385e+00 2.95172813180769e+00 -2.70000000000000e-01 -3.82972914407407e+00 2.68147783855556e+00 -2.80000000000000e-01 -3.78772907250000e+00 2.41402346703571e+00 -2.90000000000000e-01 -3.74468420689655e+00 2.15035923968966e+00 -3.00000000000000e-01 -3.70063867133333e+00 1.89144623063333e+00 -3.10000000000000e-01 -3.65563697741936e+00 1.63820775554839e+00 -3.20000000000000e-01 -3.60972394187500e+00 1.39152501550000e+00 -3.30000000000000e-01 -3.56294460303030e+00 1.15223308054545e+00 -3.40000000000000e-01 -3.51534414441176e+00 9.21116877058824e-01 -3.50000000000000e-01 -3.46696781714286e+00 6.98908055028571e-01 -3.60000000000000e-01 -3.41786086638889e+00 4.86281411277778e-01 -3.70000000000000e-01 -3.36806846297297e+00 2.83852492162162e-01 -3.80000000000000e-01 -3.31763563552632e+00 9.21749029552632e-02 -3.90000000000000e-01 -3.26660720717949e+00 -8.82617771205128e-02 -4.00000000000000e-01 -3.21502773600000e+00 -2.57033551675000e-01 -4.10000000000000e-01 -3.16294146024390e+00 -4.13783376634146e-01 -4.20000000000000e-01 -3.11039224452381e+00 -5.58222077095238e-01 -4.30000000000000e-01 -3.05742353325581e+00 -6.90128867465116e-01 -4.40000000000000e-01 -3.00407830500000e+00 -8.09351477545455e-01 -4.50000000000000e-01 -2.95039903222222e+00 -9.15805889066667e-01 -4.60000000000000e-01 -2.89642764456522e+00 -1.00947568606522e+00 -4.70000000000000e-01 -2.84220549595745e+00 -1.09041102270213e+00 -4.80000000000000e-01 -2.78777333604167e+00 -1.15872716714583e+00 -4.90000000000000e-01 -2.73317128551020e+00 -1.21460261469388e+00 -5.00000000000000e-01 -2.67843880720000e+00 -1.25827765310000e+00 -5.10000000000000e-01 -2.62361469372549e+00 -1.29005124152941e+00 -5.20000000000000e-01 -2.56873705692308e+00 -1.31027802919231e+00 -5.30000000000000e-01 -2.51384329716981e+00 -1.31936661852830e+00 -5.40000000000000e-01 -2.45897011111111e+00 -1.31777493287037e+00 -5.50000000000000e-01 -2.40415347836364e+00 -1.30600721665455e+00 -5.60000000000000e-01 -2.34942864839286e+00 -1.28461066723214e+00 -5.70000000000000e-01 -2.29483015561404e+00 -1.25417052547368e+00 -5.80000000000000e-01 -2.24039179379310e+00 -1.21530716393103e+00 -5.90000000000000e-01 -2.18614664254237e+00 -1.16867070235593e+00 -6.00000000000000e-01 -2.13212704783333e+00 -1.11493742918333e+00 -6.10000000000000e-01 -2.07836463295082e+00 -1.05480506277049e+00 -6.20000000000000e-01 -2.02489031693548e+00 -9.88987962306452e-01 -6.30000000000000e-01 -1.97173428253968e+00 -9.18213257285714e-01 -6.40000000000000e-01 -1.91892601890625e+00 -8.43215658640625e-01 -6.50000000000000e-01 -1.86649431492308e+00 -7.64733301215385e-01 -6.60000000000000e-01 -1.81446724257576e+00 -6.83503147590909e-01 -6.70000000000000e-01 -1.76287218955224e+00 -6.00256636492537e-01 -6.80000000000000e-01 -1.71173586191176e+00 -5.15715678264706e-01 -6.90000000000000e-01 -1.66108426550725e+00 -4.30588081840580e-01 -7.00000000000000e-01 -1.61094272057143e+00 -3.45563705385714e-01 -7.10000000000000e-01 -1.56133586873239e+00 -2.61310866309859e-01 -7.20000000000000e-01 -1.51228766861111e+00 -1.78472677888889e-01 -7.30000000000000e-01 -1.46382140205479e+00 -9.76640279890411e-02 -7.40000000000000e-01 -1.41595965202703e+00 -1.94675695527027e-02 -7.50000000000000e-01 -1.36872431186667e+00 5.55686538706667e-02 -7.60000000000000e-01 -1.32213658144737e+00 1.26933623911842e-01 -7.70000000000000e-01 -1.27621695768831e+00 1.94155807272727e-01 -7.80000000000000e-01 -1.23098522514103e+00 2.56805179115385e-01 -7.90000000000000e-01 -1.18646044607595e+00 3.14494944050633e-01 -8.00000000000000e-01 -1.14266094826250e+00 3.66882947975000e-01 -8.10000000000000e-01 -1.09960431164198e+00 4.13672776493827e-01 -8.20000000000000e-01 -1.05730735340244e+00 4.54614538134146e-01 -8.30000000000000e-01 -1.01578611175904e+00 4.89505332493976e-01 -8.40000000000000e-01 -9.75055828464286e-01 5.18189406023810e-01 -8.50000000000000e-01 -9.35130930282353e-01 5.40557999905882e-01 -8.60000000000000e-01 -8.96025009348837e-01 5.56548896476744e-01 -8.70000000000000e-01 -8.57750802850575e-01 5.66145672597701e-01 -8.80000000000000e-01 -8.20320172068182e-01 5.69376669750000e-01 -8.90000000000000e-01 -7.83744080921348e-01 5.66313692674157e-01 -9.00000000000000e-01 -7.48032574366667e-01 5.57070449466667e-01 -9.10000000000000e-01 -7.13194756802198e-01 5.41800748000000e-01 -9.20000000000000e-01 -6.79238770695652e-01 5.20696464619565e-01 -9.30000000000000e-01 -6.46171775741935e-01 4.93985302935484e-01 -9.40000000000000e-01 -6.13999928808511e-01 4.61928362053191e-01 -9.50000000000000e-01 -5.82728364905263e-01 4.24817534842105e-01 -9.60000000000000e-01 -5.52361179489583e-01 3.82972759072917e-01 -9.70000000000000e-01 -5.22901433030928e-01 3.36738786144330e-01 -9.80000000000000e-01 -4.94351100908163e-01 2.86483072959184e-01 -9.90000000000000e-01 -4.66711043707071e-01 2.32592653151515e-01 -1.00000000000000e+00 -4.39981047050000e-01 1.75470138870000e-01 -1.01000000000000e+00 -4.14159793168317e-01 1.15530990029703e-01 -1.02000000000000e+00 -3.89244856000000e-01 5.32003522676471e-02 -1.03000000000000e+00 -3.65232713019417e-01 -1.10900784174757e-02 -1.04000000000000e+00 -3.42118771125000e-01 -7.69048241644231e-02 -1.05000000000000e+00 -3.19897201314286e-01 -1.43808082028571e-01 -1.06000000000000e+00 -2.98561130707547e-01 -2.11366989584906e-01 -1.07000000000000e+00 -2.78102594831776e-01 -2.79154270009346e-01 -1.08000000000000e+00 -2.58512580870370e-01 -3.46750562305556e-01 -1.09000000000000e+00 -2.39781034440367e-01 -4.13746666431193e-01 -1.10000000000000e+00 -2.21896708127273e-01 -4.79749031672727e-01 -1.11000000000000e+00 -2.04847411549550e-01 -5.44379315828829e-01 -1.12000000000000e+00 -1.88619972187500e-01 -6.07276996919643e-01 -1.13000000000000e+00 -1.73200364902655e-01 -6.68098408061947e-01 -1.14000000000000e+00 -1.58573374956140e-01 -7.26527844052632e-01 -1.15000000000000e+00 -1.44723016008696e-01 -7.82270763991304e-01 -1.16000000000000e+00 -1.31632493534483e-01 -8.35055965137931e-01 -1.17000000000000e+00 -1.19284226829060e-01 -8.84636525897436e-01 -1.18000000000000e+00 -1.07659687262712e-01 -9.30799416525424e-01 -1.19000000000000e+00 -9.67397464705883e-02 -9.73355841680672e-01 -1.20000000000000e+00 -8.65047125166667e-02 -1.01213999658333e+00 -1.21000000000000e+00 -7.69341005446281e-02 -1.04702271495868e+00 -1.22000000000000e+00 -6.80069220663934e-02 -1.07790252639344e+00 -1.23000000000000e+00 -5.97017897040650e-02 -1.10470060544715e+00 -1.24000000000000e+00 -5.19968032282258e-02 -1.12736991580645e+00 -1.25000000000000e+00 -4.48696582008000e-02 -1.14589550520000e+00 -1.26000000000000e+00 -3.82978360341270e-02 -1.16028166365079e+00 -1.27000000000000e+00 -3.22585222590551e-02 -1.17056080086614e+00 -1.28000000000000e+00 -2.67287075296875e-02 -1.17679659039063e+00 -1.29000000000000e+00 -2.16853208759690e-02 -1.17906738891473e+00 -1.30000000000000e+00 -1.71051948584615e-02 -1.17747779707692e+00 -1.31000000000000e+00 -1.29652264221374e-02 -1.17215746885496e+00 -1.32000000000000e+00 -9.24234812348485e-03 -1.16324616386364e+00 -1.33000000000000e+00 -5.91365862939850e-03 -1.15090882315789e+00 -1.34000000000000e+00 -2.95653342320896e-03 -1.13532520686567e+00 -1.35000000000000e+00 -3.48412385311111e-04 -1.11668201925926e+00 -1.36000000000000e+00 1.93267376169118e-03 -1.09518811088235e+00 -1.37000000000000e+00 3.90845227430657e-03 -1.07105545897810e+00 -1.38000000000000e+00 5.60031751311594e-03 -1.04450541000000e+00 -1.39000000000000e+00 7.02884768791367e-03 -1.01576778899281e+00 -1.40000000000000e+00 8.21452832714286e-03 -9.85073400571429e-01 -1.41000000000000e+00 9.17686574822695e-03 -9.52658248936170e-01 -1.42000000000000e+00 9.93488658028169e-03 -9.18756659154930e-01 -1.43000000000000e+00 1.05071878909091e-02 -8.83604145804196e-01 -1.44000000000000e+00 1.09110995229167e-02 -8.47429661666667e-01 -1.45000000000000e+00 1.11640165310345e-02 -8.10462975241379e-01 -1.46000000000000e+00 1.12817667623288e-02 -7.72921921506849e-01 -1.47000000000000e+00 1.12799665986395e-02 -7.35021085306123e-01 -1.48000000000000e+00 1.11732710527027e-02 -6.96965921689189e-01 -1.49000000000000e+00 1.09752778859060e-02 -6.58947912489933e-01 -1.50000000000000e+00 1.06994352433333e-02 -6.21157544753333e-01 -1.51000000000000e+00 1.03573439000000e-02 -5.83758743688742e-01 -1.52000000000000e+00 9.96102271052632e-03 -5.46921825065789e-01 -1.53000000000000e+00 9.52038565424837e-03 -5.10784478339869e-01 -1.54000000000000e+00 9.04561081558442e-03 -4.75488207727273e-01 -1.55000000000000e+00 8.54530052451613e-03 -4.41148650903226e-01 -1.56000000000000e+00 8.02772244358974e-03 -4.07875294743590e-01 -1.57000000000000e+00 7.50020273121019e-03 -3.75761513987261e-01 -1.58000000000000e+00 6.96920275759494e-03 -3.44885212734177e-01 -1.59000000000000e+00 6.44080666603774e-03 -3.15317640949686e-01 -1.60000000000000e+00 5.91982214456250e-03 -2.87107395856250e-01 -1.61000000000000e+00 5.41113354086956e-03 -2.60304246645963e-01 -1.62000000000000e+00 4.91808085253086e-03 -2.34931256086420e-01 -1.63000000000000e+00 4.44440553901841e-03 -2.11018007717791e-01 -1.64000000000000e+00 3.99218617585366e-03 -1.88566920786585e-01 -1.65000000000000e+00 3.56409652496970e-03 -1.67589437551515e-01 -1.66000000000000e+00 3.16116935632530e-03 -1.48072965150602e-01 -1.67000000000000e+00 2.78510685832335e-03 -1.30014076700599e-01 -1.68000000000000e+00 2.43610688285714e-03 -1.13389904619048e-01 -1.69000000000000e+00 2.11502743082840e-03 -9.81893268994083e-02 -1.70000000000000e+00 1.82138383047059e-03 -8.43715251823530e-02 -1.71000000000000e+00 1.55528140286550e-03 -7.19120815906433e-02 -1.72000000000000e+00 1.31570163575581e-03 -6.07489348837209e-02 -1.73000000000000e+00 1.10207835387283e-03 -5.08351397722543e-02 -1.74000000000000e+00 9.13039035574713e-04 -4.20967216942529e-02 -1.75000000000000e+00 7.47486357028571e-04 -3.44685669371429e-02 -1.76000000000000e+00 6.03839578636364e-04 -2.78705969363636e-02 -1.77000000000000e+00 4.80626126870057e-04 -2.22255799118644e-02 -1.78000000000000e+00 3.76170937955056e-04 -1.74516202460674e-02 -1.79000000000000e+00 2.88789510089385e-04 -1.34657654614525e-02 -1.80000000000000e+00 2.16793258194444e-04 -1.01873035588889e-02 -1.81000000000000e+00 1.58450583646409e-04 -7.53408067016575e-03 -1.82000000000000e+00 1.12108817087912e-04 -5.42833768824176e-03 -1.83000000000000e+00 7.61460763442623e-05 -3.79495007382514e-03 -1.84000000000000e+00 4.89706821315217e-05 -2.55993103543478e-03 -1.85000000000000e+00 2.92057637535135e-05 -1.66054458486486e-03 -1.86000000000000e+00 1.53336073946237e-05 -1.02695420489247e-03 -1.87000000000000e+00 6.30086758983957e-06 -6.11714049946524e-04 -1.88000000000000e+00 7.36456402340426e-07 -3.52344187670213e-04 -1.89000000000000e+00 -2.14369739523810e-06 -2.13716707724868e-04 -1.90000000000000e+00 -3.57435621189474e-06 -1.51816215268421e-04 -1.91000000000000e+00 -3.88346550287958e-06 -1.31549260298429e-04 -1.92000000000000e+00 -3.04044559833333e-06 -1.03210627317708e-04 -1.93000000000000e+00 -1.41694973191710e-06 -4.47426071632124e-05 -1.94000000000000e+00 5.02032975149485e-08 1.77408896628866e-06 -1.95000000000000e+00 2.31817521400000e-07 8.19198991435898e-06 -1.96000000000000e+00 5.82995934336735e-08 2.06019665183673e-06 -1.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l1.dat b/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l1.dat deleted file mode 100644 index 927fd2f95..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l1.dat +++ /dev/null @@ -1,600 +0,0 @@ -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.00000000000000e-02 1.44438429160000e-01 1.20745801180000e-01 -2.00000000000000e-02 2.88605041935000e-01 2.41131420735000e-01 -3.00000000000000e-02 4.32228741233333e-01 3.60797732466667e-01 -4.00000000000000e-02 5.75039866325000e-01 4.79387718950000e-01 -5.00000000000000e-02 7.16770905600000e-01 5.96547520340000e-01 -6.00000000000000e-02 8.57157202450000e-01 7.11927476833333e-01 -7.00000000000000e-02 9.95937652742857e-01 8.25183162228571e-01 -8.00000000000000e-02 1.13285539092500e+00 9.35976406462500e-01 -9.00000000000000e-02 1.26765846344444e+00 1.04397630484444e+00 -1.00000000000000e-01 1.40010048700000e+00 1.14886021160000e+00 -1.10000000000000e-01 1.52994128918182e+00 1.25031471563636e+00 -1.20000000000000e-01 1.65694753083333e+00 1.34803659516667e+00 -1.30000000000000e-01 1.78089330638462e+00 1.44173375038462e+00 -1.40000000000000e-01 1.90156072228571e+00 1.53112610950000e+00 -1.50000000000000e-01 2.01874045000000e+00 1.61594650793333e+00 -1.60000000000000e-01 2.13223225300000e+00 1.69594153568750e+00 -1.70000000000000e-01 2.24184548552941e+00 1.77087235194118e+00 -1.80000000000000e-01 2.34739956216667e+00 1.84051546344444e+00 -1.90000000000000e-01 2.44872439636842e+00 1.90466346410526e+00 -2.00000000000000e-01 2.54566080605000e+00 1.96312573255000e+00 -2.10000000000000e-01 2.63806088685714e+00 2.01572908600000e+00 -2.20000000000000e-01 2.72578834945455e+00 2.06231838613636e+00 -2.30000000000000e-01 2.80871882213043e+00 2.10275709578261e+00 -2.40000000000000e-01 2.88674011608333e+00 2.13692778237500e+00 -2.50000000000000e-01 2.95975245372000e+00 2.16473256612000e+00 -2.60000000000000e-01 3.02766865926923e+00 2.18609351134615e+00 -2.70000000000000e-01 3.09041430985185e+00 2.20095295600000e+00 -2.80000000000000e-01 3.14792784821429e+00 2.20927377828571e+00 -2.90000000000000e-01 3.20016065613793e+00 2.21103959968966e+00 -3.00000000000000e-01 3.24707708870000e+00 2.20625491980000e+00 -3.10000000000000e-01 3.28865446838710e+00 2.19494518241935e+00 -3.20000000000000e-01 3.32488304093750e+00 2.17715677003125e+00 -3.30000000000000e-01 3.35576589060606e+00 2.15295692572727e+00 -3.40000000000000e-01 3.38131881852941e+00 2.12243360620588e+00 -3.50000000000000e-01 3.40157018285714e+00 2.08569525108571e+00 -3.60000000000000e-01 3.41656069888889e+00 2.04287048636111e+00 -3.70000000000000e-01 3.42634320594595e+00 1.99410774621622e+00 -3.80000000000000e-01 3.43098239789474e+00 1.93957482189474e+00 -3.90000000000000e-01 3.43055451461538e+00 1.87945833217949e+00 -4.00000000000000e-01 3.42514700700000e+00 1.81396312322500e+00 -4.10000000000000e-01 3.41485816463415e+00 1.74331159185366e+00 -4.20000000000000e-01 3.39979671452381e+00 1.66774293673810e+00 -4.30000000000000e-01 3.38008139000000e+00 1.58751233890698e+00 -4.40000000000000e-01 3.35584047159091e+00 1.50289007354545e+00 -4.50000000000000e-01 3.32721130311111e+00 1.41416055546667e+00 -4.60000000000000e-01 3.29433978130435e+00 1.32162132150000e+00 -4.70000000000000e-01 3.25737982531915e+00 1.22558195314894e+00 -4.80000000000000e-01 3.21649282833333e+00 1.12636294966667e+00 -4.90000000000000e-01 3.17184709918367e+00 1.02429456544898e+00 -5.00000000000000e-01 3.12361723280000e+00 9.19715492820000e-01 -5.10000000000000e-01 3.07198355039216e+00 8.12971662901961e-01 -5.20000000000000e-01 3.01713152134615e+00 7.04415002884615e-01 -5.30000000000000e-01 2.95925103056604e+00 5.94401865641509e-01 -5.40000000000000e-01 2.89853586351852e+00 4.83291886018518e-01 -5.50000000000000e-01 2.83518303909091e+00 3.71446524472727e-01 -5.60000000000000e-01 2.76939210875000e+00 2.59227522660714e-01 -5.70000000000000e-01 2.70136466894737e+00 1.46995801275439e-01 -5.80000000000000e-01 2.63130352603448e+00 3.51096230948276e-02 -5.90000000000000e-01 2.55941228033898e+00 -7.60763655728814e-02 -6.00000000000000e-01 2.48589453400000e+00 -1.86212888950000e-01 -6.10000000000000e-01 2.41095333147541e+00 -2.94957305049180e-01 -6.20000000000000e-01 2.33479070435484e+00 -4.01974637209677e-01 -6.30000000000000e-01 2.25760673253968e+00 -5.06939644126984e-01 -6.40000000000000e-01 2.17959933484375e+00 -6.09537311156250e-01 -6.50000000000000e-01 2.10096360415385e+00 -7.09464313092308e-01 -6.60000000000000e-01 2.02189104666667e+00 -8.06430675666667e-01 -6.70000000000000e-01 1.94256935268657e+00 -9.00160272074627e-01 -6.80000000000000e-01 1.86318189132353e+00 -9.90391902147059e-01 -6.90000000000000e-01 1.78390701130435e+00 -1.07688077149275e+00 -7.00000000000000e-01 1.70491772214286e+00 -1.15939912650000e+00 -7.10000000000000e-01 1.62638133619718e+00 -1.23773695550704e+00 -7.20000000000000e-01 1.54845903444444e+00 -1.31170282665278e+00 -7.30000000000000e-01 1.47130557589041e+00 -1.38112439972603e+00 -7.40000000000000e-01 1.39506877297297e+00 -1.44584939337838e+00 -7.50000000000000e-01 1.31988932346667e+00 -1.50574577386667e+00 -7.60000000000000e-01 1.24590057082895e+00 -1.56070206460526e+00 -7.70000000000000e-01 1.17322823781818e+00 -1.61062768064935e+00 -7.80000000000000e-01 1.10199022458974e+00 -1.65545309166667e+00 -7.90000000000000e-01 1.03229644024051e+00 -1.69512988278481e+00 -8.00000000000000e-01 9.64248667850000e-01 -1.72963071125000e+00 -8.10000000000000e-01 8.97940462691358e-01 -1.75894915987654e+00 -8.20000000000000e-01 8.33457083524390e-01 -1.78309948817073e+00 -8.30000000000000e-01 7.70875456409639e-01 -1.80211628457831e+00 -8.40000000000000e-01 7.10264170690476e-01 -1.81605401857143e+00 -8.50000000000000e-01 6.51683506329412e-01 -1.82498650011765e+00 -8.60000000000000e-01 5.95185491906977e-01 -1.82900624534884e+00 -8.70000000000000e-01 5.40813992379310e-01 -1.82822375597701e+00 -8.80000000000000e-01 4.88604825693182e-01 -1.82276671431818e+00 -8.90000000000000e-01 4.38585907033708e-01 -1.81277910000000e+00 -9.00000000000000e-01 3.90777419655556e-01 -1.79842023388889e+00 -9.10000000000000e-01 3.45192010868132e-01 -1.77986375395604e+00 -9.20000000000000e-01 3.01835011836957e-01 -1.75729653152174e+00 -9.30000000000000e-01 2.60704679677419e-01 -1.73091753161290e+00 -9.40000000000000e-01 2.21792460085106e-01 -1.70093662882979e+00 -9.50000000000000e-01 1.85083268821053e-01 -1.66757338231579e+00 -9.60000000000000e-01 1.50555790031250e-01 -1.63105578197917e+00 -9.70000000000000e-01 1.18182793237113e-01 -1.59161911360825e+00 -9.80000000000000e-01 8.79314274785714e-02 -1.54950448581633e+00 -9.90000000000000e-01 5.97635972797980e-02 -1.50495730464646e+00 -1.00000000000000e+00 3.36363204440000e-02 -1.45822631570000e+00 -1.01000000000000e+00 9.50207345900990e-03 -1.40956218613861e+00 -1.02000000000000e+00 -1.26908468970588e-02 -1.35921622931373e+00 -1.03000000000000e+00 -3.29979818834951e-02 -1.30743931378641e+00 -1.04000000000000e+00 -5.14784184673077e-02 -1.25448100807692e+00 -1.05000000000000e+00 -6.81941063552381e-02 -1.20058636685714e+00 -1.06000000000000e+00 -8.32097627839622e-02 -1.14599683547170e+00 -1.07000000000000e+00 -9.65924382710280e-02 -1.09094855168224e+00 -1.08000000000000e+00 -1.08411250500000e-01 -1.03567175027778e+00 -1.09000000000000e+00 -1.18737056275229e-01 -9.80389753119266e-01 -1.10000000000000e+00 -1.27641514509091e-01 -9.25315391272727e-01 -1.11000000000000e+00 -1.35197402072072e-01 -8.70653405450450e-01 -1.12000000000000e+00 -1.41478131116071e-01 -8.16598803250000e-01 -1.13000000000000e+00 -1.46557919362832e-01 -7.63337988637168e-01 -1.14000000000000e+00 -1.50509865175439e-01 -7.11041691728070e-01 -1.15000000000000e+00 -1.53407176060870e-01 -6.59870781252174e-01 -1.16000000000000e+00 -1.55322691465517e-01 -6.09974738887931e-01 -1.17000000000000e+00 -1.56328633632479e-01 -5.61491106521368e-01 -1.18000000000000e+00 -1.56494985288136e-01 -5.14540708364407e-01 -1.19000000000000e+00 -1.55890942739496e-01 -4.69233382537815e-01 -1.20000000000000e+00 -1.54584959466667e-01 -4.25668174716667e-01 -1.21000000000000e+00 -1.52642411867769e-01 -3.83926704520661e-01 -1.22000000000000e+00 -1.50126861278689e-01 -3.44078091598361e-01 -1.23000000000000e+00 -1.47100693065041e-01 -3.06180950048780e-01 -1.24000000000000e+00 -1.43623449467742e-01 -2.70279163346774e-01 -1.25000000000000e+00 -1.39751506104000e-01 -2.36402318088000e-01 -1.26000000000000e+00 -1.35540013103175e-01 -2.04570902484127e-01 -1.27000000000000e+00 -1.31041212157480e-01 -1.74792462102362e-01 -1.28000000000000e+00 -1.26303484406250e-01 -1.47060959359375e-01 -1.29000000000000e+00 -1.21374108596899e-01 -1.21362854232558e-01 -1.30000000000000e+00 -1.16296946338462e-01 -9.76727406615385e-02 -1.31000000000000e+00 -1.11112093526718e-01 -7.59544358572519e-02 -1.32000000000000e+00 -1.05858769227273e-01 -5.61656482787879e-02 -1.33000000000000e+00 -1.00571808120301e-01 -3.82533732729323e-02 -1.34000000000000e+00 -9.52831994253731e-02 -2.21577310447761e-02 -1.35000000000000e+00 -9.00242335333333e-02 -7.81351602592593e-03 -1.36000000000000e+00 -8.48205757500000e-02 4.85267547676471e-03 -1.37000000000000e+00 -7.96970758248175e-02 1.59177575700730e-02 -1.38000000000000e+00 -7.46761372971014e-02 2.54638360304348e-02 -1.39000000000000e+00 -6.97759839633093e-02 3.35761242215827e-02 -1.40000000000000e+00 -6.50147031407143e-02 4.03433000192857e-02 -1.41000000000000e+00 -6.04060032063830e-02 4.58555168014184e-02 -1.42000000000000e+00 -5.59623177147887e-02 5.02041393838028e-02 -1.43000000000000e+00 -5.16943885867133e-02 5.34826660769231e-02 -1.44000000000000e+00 -4.76094181902778e-02 5.57814402368056e-02 -1.45000000000000e+00 -4.37147653475862e-02 5.71944305124138e-02 -1.46000000000000e+00 -4.00139559123288e-02 5.78096507034247e-02 -1.47000000000000e+00 -3.65102656034014e-02 5.77164106523810e-02 -1.48000000000000e+00 -3.32048548601351e-02 5.70007738216216e-02 -1.49000000000000e+00 -3.00972993375839e-02 5.57438708382550e-02 -1.50000000000000e+00 -2.71866052940000e-02 5.40284514360000e-02 -1.51000000000000e+00 -2.44694845192053e-02 5.19258123549669e-02 -1.52000000000000e+00 -2.19428277388158e-02 4.95126093236842e-02 -1.53000000000000e+00 -1.96014246947712e-02 4.68512031686275e-02 -1.54000000000000e+00 -1.74401277883117e-02 4.40077714344156e-02 -1.55000000000000e+00 -1.54524962038710e-02 4.10375886896774e-02 -1.56000000000000e+00 -1.36318339416667e-02 3.79946370653846e-02 -1.57000000000000e+00 -1.19707395076433e-02 3.49265382949045e-02 -1.58000000000000e+00 -1.04615482822785e-02 3.18749240291139e-02 -1.59000000000000e+00 -9.09616019182390e-03 2.88792830949686e-02 -1.60000000000000e+00 -7.86645345187500e-03 2.59693635887500e-02 -1.61000000000000e+00 -6.76389384099379e-03 2.31762091180124e-02 -1.62000000000000e+00 -5.78033308907407e-03 2.05186258246914e-02 -1.63000000000000e+00 -4.90706943852761e-03 1.80191306963190e-02 -1.64000000000000e+00 -4.13627629884146e-03 1.56868608524390e-02 -1.65000000000000e+00 -3.45934789727273e-03 1.35359914484848e-02 -1.66000000000000e+00 -2.86904923656627e-03 1.15674649072289e-02 -1.67000000000000e+00 -2.35713230371258e-03 9.78754292754491e-03 -1.68000000000000e+00 -1.91712901988095e-03 8.19061991130952e-03 -1.69000000000000e+00 -1.54145302603550e-03 6.77551987100592e-03 -1.70000000000000e+00 -1.22428313752941e-03 5.53256681547059e-03 -1.71000000000000e+00 -9.58723752105263e-04 4.45479071660819e-03 -1.72000000000000e+00 -7.39498476918605e-04 3.53052007976744e-03 -1.73000000000000e+00 -5.60315662219653e-04 2.74913842537572e-03 -1.74000000000000e+00 -4.16534495971264e-04 2.09798396362069e-03 -1.75000000000000e+00 -3.02593791371429e-04 1.56419155742857e-03 -1.76000000000000e+00 -2.14494065295455e-04 1.13504892710227e-03 -1.77000000000000e+00 -1.47526707355932e-04 7.96842527175141e-04 -1.78000000000000e+00 -9.83050007921348e-05 5.37493963988764e-04 -1.79000000000000e+00 -6.30649031173184e-05 3.43848898508380e-04 -1.80000000000000e+00 -3.89872105477778e-05 2.04873407283333e-04 -1.81000000000000e+00 -2.33100490801105e-05 1.09279897662983e-04 -1.82000000000000e+00 -1.37318244538462e-05 4.72713004483516e-05 -1.83000000000000e+00 -8.51003236284153e-06 1.04997269469945e-05 -1.84000000000000e+00 -5.81855233750000e-06 -9.51805257554348e-06 -1.85000000000000e+00 -4.94792325718919e-06 -1.77010563735135e-05 -1.86000000000000e+00 -4.66244365698925e-06 -2.17504720311828e-05 -1.87000000000000e+00 -4.44909093705882e-06 -1.99727952021390e-05 -1.88000000000000e+00 -2.61398621537234e-06 -1.20015216590426e-05 -1.89000000000000e+00 -5.69229001111111e-07 -2.67306818269841e-06 -1.90000000000000e+00 2.72076817131579e-07 1.20919401610526e-06 -1.91000000000000e+00 1.89030552225131e-07 8.40110579895288e-07 -1.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l2.dat b/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l2.dat deleted file mode 100644 index b560bf644..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/pseudoAtomData/proj_l2.dat +++ /dev/null @@ -1,600 +0,0 @@ -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.00000000000000e-02 2.79774988840000e-03 1.18169348640000e-03 -2.00000000000000e-02 1.11809226735000e-02 4.72122989675000e-03 -3.00000000000000e-02 2.51193183333333e-02 1.06019847353333e-02 -4.00000000000000e-02 4.45627055400000e-02 1.87962762030000e-02 -5.00000000000000e-02 6.94409746660000e-02 2.92654044000000e-02 -6.00000000000000e-02 9.96643518800000e-02 4.19597075200000e-02 -7.00000000000000e-02 1.35123674191429e-01 5.68186363114286e-02 -8.00000000000000e-02 1.75690725275000e-01 7.37708484237500e-02 -9.00000000000000e-02 2.21218631855556e-01 9.27343245366667e-02 -1.00000000000000e-01 2.71542320250000e-01 1.13616508440000e-01 -1.10000000000000e-01 3.26479032863636e-01 1.36314473472727e-01 -1.20000000000000e-01 3.85828903891667e-01 1.60715117816667e-01 -1.30000000000000e-01 4.49375593800000e-01 1.86695391461538e-01 -1.40000000000000e-01 5.16886981800000e-01 2.14122557521429e-01 -1.50000000000000e-01 5.88115915313333e-01 2.42854490666667e-01 -1.60000000000000e-01 6.62801015500000e-01 2.72740015543750e-01 -1.70000000000000e-01 7.40667537470588e-01 3.03619287682353e-01 -1.80000000000000e-01 8.21428283611111e-01 3.35324219550000e-01 -1.90000000000000e-01 9.04784569052632e-01 3.67678953910526e-01 -2.00000000000000e-01 9.90427235750000e-01 4.00500386490000e-01 -2.10000000000000e-01 1.07803771504762e+00 4.33598739776191e-01 -2.20000000000000e-01 1.16728913440909e+00 4.66778188954545e-01 -2.30000000000000e-01 1.25784746682609e+00 4.99837541217391e-01 -2.40000000000000e-01 1.34937271929167e+00 5.32570968291667e-01 -2.50000000000000e-01 1.44152015676000e+00 5.64768792440000e-01 -2.60000000000000e-01 1.53394155911538e+00 5.96218325423077e-01 -2.70000000000000e-01 1.62628650548148e+00 6.26704758111111e-01 -2.80000000000000e-01 1.71820368292857e+00 6.56012099535714e-01 -2.90000000000000e-01 1.80934221475862e+00 6.83924163103448e-01 -3.00000000000000e-01 1.89935300326667e+00 7.10225595900000e-01 -3.10000000000000e-01 1.98789008212903e+00 7.34702947967742e-01 -3.20000000000000e-01 2.07461197268750e+00 7.57145776031250e-01 -3.30000000000000e-01 2.15918303745455e+00 7.77347775393939e-01 -3.40000000000000e-01 2.24127483197059e+00 7.95107944264706e-01 -3.50000000000000e-01 2.32056743260000e+00 8.10231748942857e-01 -3.60000000000000e-01 2.39675075833333e+00 8.22532322583333e-01 -3.70000000000000e-01 2.46952585345946e+00 8.31831643270270e-01 -3.80000000000000e-01 2.53860614805263e+00 8.37961725947368e-01 -3.90000000000000e-01 2.60371867512821e+00 8.40765794897436e-01 -4.00000000000000e-01 2.66460524275000e+00 8.40099431025000e-01 -4.10000000000000e-01 2.72102355487805e+00 8.35831694219512e-01 -4.20000000000000e-01 2.77274827619048e+00 8.27846204857143e-01 -4.30000000000000e-01 2.81957202953488e+00 8.16042176395349e-01 -4.40000000000000e-01 2.86130632500000e+00 8.00335390863636e-01 -4.50000000000000e-01 2.89778241244444e+00 7.80659107088889e-01 -4.60000000000000e-01 2.92885205195652e+00 7.56964893717391e-01 -4.70000000000000e-01 2.95438819680851e+00 7.29223377382979e-01 -4.80000000000000e-01 2.97428558750000e+00 6.97424899375000e-01 -4.90000000000000e-01 2.98846125571429e+00 6.61580076510204e-01 -5.00000000000000e-01 2.99685489000000e+00 6.21720236680000e-01 -5.10000000000000e-01 2.99942915019608e+00 5.77897758254902e-01 -5.20000000000000e-01 2.99616988326923e+00 5.30186308173077e-01 -5.30000000000000e-01 2.98708610698113e+00 4.78680871339623e-01 -5.40000000000000e-01 2.97221006333333e+00 4.23497762444444e-01 -5.50000000000000e-01 2.95159704818182e+00 3.64774442200000e-01 -5.60000000000000e-01 2.92532507892857e+00 3.02669142714286e-01 -5.70000000000000e-01 2.89349467438596e+00 2.37360547280702e-01 -5.80000000000000e-01 2.85622815189655e+00 1.69047013841379e-01 -5.90000000000000e-01 2.81366926661017e+00 9.79460579745763e-02 -6.00000000000000e-01 2.76598231300000e+00 2.42933133050000e-02 -6.10000000000000e-01 2.71335137147541e+00 -5.16584141081967e-02 -6.20000000000000e-01 2.65597959709677e+00 -1.29640073162903e-01 -6.30000000000000e-01 2.59408774079365e+00 -2.09368083222222e-01 -6.40000000000000e-01 2.52791354000000e+00 -2.90545212484375e-01 -6.50000000000000e-01 2.45771040076923e+00 -3.72862180430769e-01 -6.60000000000000e-01 2.38374578454545e+00 -4.55999602909091e-01 -6.70000000000000e-01 2.30630029716418e+00 -5.39629218373134e-01 -6.80000000000000e-01 2.22566628985294e+00 -6.23415627426471e-01 -6.90000000000000e-01 2.14214601492754e+00 -7.07018532608696e-01 -7.00000000000000e-01 2.05605030614286e+00 -7.90094419600000e-01 -7.10000000000000e-01 1.96769713042254e+00 -8.72298375521127e-01 -7.20000000000000e-01 1.87740992916667e+00 -9.53286137305556e-01 -7.30000000000000e-01 1.78551614328767e+00 -1.03271593184932e+00 -7.40000000000000e-01 1.69234521716216e+00 -1.11025089216216e+00 -7.50000000000000e-01 1.59822720986667e+00 -1.18556078438667e+00 -7.60000000000000e-01 1.50349123618421e+00 -1.25832390921053e+00 -7.70000000000000e-01 1.40846380129870e+00 -1.32822910467532e+00 -7.80000000000000e-01 1.31346722179487e+00 -1.39497762974359e+00 -7.90000000000000e-01 1.21881808451899e+00 -1.45828498278481e+00 -8.00000000000000e-01 1.12482574883750e+00 -1.51788264050000e+00 -8.10000000000000e-01 1.03179090443210e+00 -1.57351970567901e+00 -8.20000000000000e-01 9.40004191121951e-01 -1.62496444914634e+00 -8.30000000000000e-01 8.49744889819277e-01 -1.67200573590361e+00 -8.40000000000000e-01 7.61279691976190e-01 -1.71445432261905e+00 -8.50000000000000e-01 6.74861554705882e-01 -1.75214401741176e+00 -8.60000000000000e-01 5.90728648255814e-01 -1.78493269255814e+00 -8.70000000000000e-01 5.09103401632184e-01 -1.81270314172414e+00 -8.80000000000000e-01 4.30191651943182e-01 -1.83536377340909e+00 -8.90000000000000e-01 3.54181901910112e-01 -1.85284913696629e+00 -9.00000000000000e-01 2.81244689411111e-01 -1.86512027477778e+00 -9.10000000000000e-01 2.11532072395604e-01 -1.87216489813187e+00 -9.20000000000000e-01 1.45177230945652e-01 -1.87399738423913e+00 -9.30000000000000e-01 8.22941881032258e-02 -1.87065859569892e+00 -9.40000000000000e-01 2.29776494755319e-02 -1.86221552212766e+00 -9.50000000000000e-01 -3.26970391926316e-02 -1.84876074873684e+00 -9.60000000000000e-01 -8.46738183989583e-02 -1.83041175593750e+00 -9.70000000000000e-01 -1.32915728659794e-01 -1.80731015628866e+00 -9.80000000000000e-01 -1.77404695193878e-01 -1.77962061673469e+00 -9.90000000000000e-01 -2.18140995000000e-01 -1.74752943303030e+00 -1.00000000000000e+00 -2.55142744250000e-01 -1.71124345410000e+00 -1.01000000000000e+00 -2.88445311148515e-01 -1.67098857089109e+00 -1.02000000000000e+00 -3.18100617872549e-01 -1.62700816127451e+00 -1.03000000000000e+00 -3.44176447116505e-01 -1.57956161786408e+00 -1.04000000000000e+00 -3.66755857759615e-01 -1.52892308682692e+00 -1.05000000000000e+00 -3.85935082219048e-01 -1.47537723419048e+00 -1.06000000000000e+00 -4.01823556905660e-01 -1.41921963556604e+00 -1.07000000000000e+00 -4.14542602878505e-01 -1.36075418149533e+00 -1.08000000000000e+00 -4.24224677407407e-01 -1.30029170379630e+00 -1.09000000000000e+00 -4.31012332779816e-01 -1.23814803036697e+00 -1.10000000000000e+00 -4.35054860900000e-01 -1.17463822954545e+00 -1.11000000000000e+00 -4.36509540081081e-01 -1.11007896738739e+00 -1.12000000000000e+00 -4.35539862678571e-01 -1.04478543294643e+00 -1.13000000000000e+00 -4.32316145150443e-01 -9.79072230176991e-01 -1.14000000000000e+00 -4.27008292131579e-01 -9.13241776578948e-01 -1.15000000000000e+00 -4.19790296565217e-01 -8.47591840252174e-01 -1.16000000000000e+00 -4.10838329534483e-01 -7.82412395853448e-01 -1.17000000000000e+00 -4.00329632222222e-01 -7.17983833470086e-01 -1.18000000000000e+00 -3.88436338559322e-01 -6.54567985940678e-01 -1.19000000000000e+00 -3.75330706747899e-01 -5.92416228521008e-01 -1.20000000000000e+00 -3.61185012100000e-01 -5.31769047883333e-01 -1.21000000000000e+00 -3.46162713239669e-01 -4.72843658123967e-01 -1.22000000000000e+00 -3.30422986065574e-01 -4.15841031827869e-01 -1.23000000000000e+00 -3.14122753943089e-01 -3.60948535243902e-01 -1.24000000000000e+00 -2.97410335048387e-01 -3.08331456854839e-01 -1.25000000000000e+00 -2.80424267784000e-01 -2.58132404128000e-01 -1.26000000000000e+00 -2.63299976634921e-01 -2.10479870984127e-01 -1.27000000000000e+00 -2.46163448685039e-01 -1.65480286551181e-01 -1.28000000000000e+00 -2.29128052140625e-01 -1.23215492273438e-01 -1.29000000000000e+00 -2.12303799666667e-01 -8.37535420620155e-02 -1.30000000000000e+00 -1.95789110300000e-01 -4.71394745069231e-02 -1.31000000000000e+00 -1.79670017900763e-01 -1.33962339343511e-02 -1.32000000000000e+00 -1.64029263856061e-01 1.74665143075758e-02 -1.33000000000000e+00 -1.48934889015038e-01 4.54626316556391e-02 -1.34000000000000e+00 -1.34445653843284e-01 7.06225748335821e-02 -1.35000000000000e+00 -1.20616811281481e-01 9.29902244518518e-02 -1.36000000000000e+00 -1.07486087323529e-01 1.12630466573529e-01 -1.37000000000000e+00 -9.50878071824817e-02 1.29619095956204e-01 -1.38000000000000e+00 -8.34476326376812e-02 1.44046923644928e-01 -1.39000000000000e+00 -7.25792749712230e-02 1.56016595115108e-01 -1.40000000000000e+00 -6.24939700021429e-02 1.65642218421429e-01 -1.41000000000000e+00 -5.31910003794326e-02 1.73046998297872e-01 -1.42000000000000e+00 -4.46653606035211e-02 1.78361780091549e-01 -1.43000000000000e+00 -3.69059348202797e-02 1.81727193174825e-01 -1.44000000000000e+00 -2.98941405777778e-02 1.83283442076389e-01 -1.45000000000000e+00 -2.36086547434483e-02 1.83183033462069e-01 -1.46000000000000e+00 -1.80215248541096e-02 1.81572197993151e-01 -1.47000000000000e+00 -1.31023735761905e-02 1.78604641816327e-01 -1.48000000000000e+00 -8.81659104324324e-03 1.74432571074324e-01 -1.49000000000000e+00 -5.12779587845638e-03 1.69202657248322e-01 -1.50000000000000e+00 -1.99596515013333e-03 1.63069522586667e-01 -1.51000000000000e+00 6.18136323264901e-04 1.56167980350993e-01 -1.52000000000000e+00 2.75803346368421e-03 1.48648219578947e-01 -1.53000000000000e+00 4.46398349339869e-03 1.40633650398693e-01 -1.54000000000000e+00 5.77976439415584e-03 1.32259324240260e-01 -1.55000000000000e+00 6.74603035032258e-03 1.23639845793548e-01 -1.56000000000000e+00 7.40421604487179e-03 1.14889846211538e-01 -1.57000000000000e+00 7.79411653949044e-03 1.06112580840764e-01 -1.58000000000000e+00 7.95301438481013e-03 9.74003113607595e-02 -1.59000000000000e+00 7.91861854654088e-03 8.88425503522012e-02 -1.60000000000000e+00 7.72284827250000e-03 8.05087101562500e-02 -1.61000000000000e+00 7.40018601863354e-03 7.24725519503105e-02 -1.62000000000000e+00 6.97653758888889e-03 6.47813906543210e-02 -1.63000000000000e+00 6.48217780122699e-03 5.74918154889571e-02 -1.64000000000000e+00 5.93683770371951e-03 5.06307683579268e-02 -1.65000000000000e+00 5.36582858381818e-03 4.42369767848485e-02 -1.66000000000000e+00 4.78294559644578e-03 3.83194499728916e-02 -1.67000000000000e+00 4.20804408293413e-03 3.28991502101796e-02 -1.68000000000000e+00 3.64955390404762e-03 2.79701196720238e-02 -1.69000000000000e+00 3.12161505177515e-03 2.35363356118343e-02 -1.70000000000000e+00 2.62833490047059e-03 1.95806245864706e-02 -1.71000000000000e+00 2.17847799801170e-03 1.60921797912281e-02 -1.72000000000000e+00 1.77290999610465e-03 1.30461817395349e-02 -1.73000000000000e+00 1.41576964930636e-03 1.04201898393064e-02 -1.74000000000000e+00 1.10551266166667e-03 8.18451525804598e-03 -1.75000000000000e+00 8.42403637942857e-04 6.30827992171429e-03 -1.76000000000000e+00 6.23303679886364e-04 4.75940470647727e-03 -1.77000000000000e+00 4.45563857367232e-04 3.50222041367232e-03 -1.78000000000000e+00 3.05132389977528e-04 2.50419582078652e-03 -1.79000000000000e+00 1.97581580871508e-04 1.72882609435754e-03 -1.80000000000000e+00 1.18449565650000e-04 1.14446776661111e-03 -1.81000000000000e+00 6.27468384088398e-05 7.17758501049724e-04 -1.82000000000000e+00 2.59326873967033e-05 4.18773702439560e-04 -1.83000000000000e+00 3.62784606043716e-06 2.20908095163934e-04 -1.84000000000000e+00 -8.56992957500000e-06 9.65075458478261e-05 -1.85000000000000e+00 -1.34600164821622e-05 2.85066417102703e-05 -1.86000000000000e+00 -1.51039909666667e-05 -7.87024638655914e-06 -1.87000000000000e+00 -1.42448769128342e-05 -1.93147174812834e-05 -1.88000000000000e+00 -1.44741523473404e-05 -2.57326443138298e-05 -1.89000000000000e+00 -1.37028754333333e-05 -2.44198507677249e-05 -1.90000000000000e+00 -9.36708302052632e-06 -1.65116926221053e-05 -1.91000000000000e+00 -3.25214142858639e-06 -5.84025995863874e-06 -1.92000000000000e+00 6.03660989270833e-07 1.04435356177083e-06 -1.93000000000000e+00 7.68009578134715e-07 1.32868207927461e-06 -1.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.01000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.02000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.03000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.04000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.05000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.06000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.07000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.08000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.09000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.10000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.11000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.12000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.13000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.14000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.15000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.16000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.17000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.18000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.19000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.20000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.21000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.22000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.23000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.24000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.25000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.26000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.27000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.28000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.29000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.30000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.31000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.32000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.33000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.34000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.35000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.36000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.37000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.38000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.39000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.40000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.41000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.42000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.43000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.44000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.45000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.46000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.47000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.48000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.49000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.50000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.51000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.52000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.53000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.54000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.55000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.56000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.57000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.58000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.59000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.60000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.61000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.62000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.63000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.64000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.65000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.66000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.67000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.68000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.69000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.70000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.71000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.72000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.73000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.74000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.75000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.76000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.77000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.78000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.79000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.80000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.81000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.82000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.83000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.84000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.85000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.86000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.87000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.88000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.89000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.90000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.91000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.92000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.93000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.94000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.95000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.96000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.97000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.98000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -5.99000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi32.inp b/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi32.inp deleted file mode 100644 index b2c4d756c..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi32.inp +++ /dev/null @@ -1,525 +0,0 @@ -2.15517241379310e-04 3.44498511992821e-07 -2.20840517241380e-04 3.61726913582449e-07 -2.26295278017240e-04 3.79816909086132e-07 -2.31884771384270e-04 3.98811586893046e-07 -2.37612325237460e-04 4.18756211852096e-07 -2.43481349670820e-04 4.39698270219505e-07 -2.49495339007690e-04 4.61687643536257e-07 -2.55657873881180e-04 4.84776708204032e-07 -2.61972623366050e-04 5.09020459928109e-07 -2.68443347163190e-04 5.34476644753758e-07 -2.75073897838120e-04 5.61205896610583e-07 -2.81868223114720e-04 5.89271881735774e-07 -2.88830368225660e-04 6.18741450320158e-07 -2.95964478320830e-04 6.49684795737655e-07 -3.03274800935350e-04 6.82175621738031e-07 -3.10765688518460e-04 7.16291318000788e-07 -3.18441601024860e-04 7.52113144468748e-07 -3.26307108570180e-04 7.89726424899680e-07 -3.34366894151860e-04 8.29220750097958e-07 -3.42625756437410e-04 8.70690191309235e-07 -3.51088612621420e-04 9.14233524287501e-07 -3.59760501353160e-04 9.59954464567227e-07 -3.68646585736590e-04 1.00796191450157e-06 -3.77752156404280e-04 1.05837022265517e-06 -3.87082634667470e-04 1.11129945616863e-06 -3.96643575743750e-04 1.16687568674422e-06 -4.06440672064620e-04 1.22523129093349e-06 -4.16479756664620e-04 1.28650526544225e-06 -4.26766806654240e-04 1.35084355820383e-06 -4.37307946778600e-04 1.41839941600911e-06 -4.48109453064030e-04 1.48933374952145e-06 -4.59177756554710e-04 1.56381551654590e-06 -4.70519447141610e-04 1.64202212446546e-06 -4.82141277486010e-04 1.72413985280300e-06 -4.94050167039910e-04 1.81036429691541e-06 -5.06253206165800e-04 1.90090083387640e-06 -5.18757660358090e-04 1.99596511165824e-06 -5.31570974568940e-04 2.09578356277637e-06 -5.44700777640790e-04 2.20059394362215e-06 -5.58154886848520e-04 2.31064590076700e-06 -5.71941312553680e-04 2.42620156558521e-06 -5.86068262973750e-04 2.54753617861709e-06 -6.00544149069200e-04 2.67493874515160e-06 -6.15377589551210e-04 2.80871272359792e-06 -6.30577416013130e-04 2.94917674827935e-06 -6.46152678188650e-04 3.09666538837484e-06 -6.62112649339910e-04 3.25152994481347e-06 -6.78466831778610e-04 3.41413928702112e-06 -6.95224962523540e-04 3.58488073151259e-06 -7.12397019097870e-04 3.76416096441948e-06 -7.29993225469590e-04 3.95240701015422e-06 -7.48024058138690e-04 4.15006724851439e-06 -7.66500252374710e-04 4.35761248265142e-06 -7.85432808608370e-04 4.57553706044716e-06 -8.04832998980990e-04 4.80436005196853e-06 -8.24712374055830e-04 5.04462648580396e-06 -8.45082769695000e-04 5.29690864722820e-06 -8.65956314106470e-04 5.56180744128420e-06 -8.87345435064900e-04 5.83995382403245e-06 -9.09262867311000e-04 6.13201030537151e-06 -9.31721660133590e-04 6.43867252701290e-06 -9.54735185138880e-04 6.76067091936732e-06 -9.78317144211820e-04 7.09877244128560e-06 -1.00248157767380e-03 7.45378240680301e-06 -1.02724287264240e-03 7.82654640322880e-06 -1.05261577159670e-03 8.21795230516250e-06 -1.07861538115510e-03 8.62893238921655e-06 -1.10525718106960e-03 9.06046555449287e-06 -1.13255703344200e-03 9.51357965410118e-06 -1.16053119216810e-03 9.98935394326204e-06 -1.18919631261460e-03 1.04889216498415e-05 -1.21856946153620e-03 1.10134726734117e-05 -1.24866812723610e-03 1.15642564192981e-05 -1.27951022997890e-03 1.21425847743337e-05 -1.31111413265940e-03 1.27498352314227e-05 -1.34349865173600e-03 1.33874541703495e-05 -1.37668306843390e-03 1.40569603026357e-05 -1.41068714022420e-03 1.47599482886750e-05 -1.44553111258780e-03 1.54980925357207e-05 -1.48123573106870e-03 1.62731511858048e-05 -1.51782225362610e-03 1.70869703030582e-05 -1.55531246329070e-03 1.79414882704193e-05 -1.59372868113390e-03 1.88387404061912e-05 -1.63309377955790e-03 1.97808638114347e-05 -1.67343119591300e-03 2.07701024597548e-05 -1.71476494645210e-03 2.18088125415804e-05 -1.75711964062940e-03 2.28994680756707e-05 -1.80052049575300e-03 2.40446668012015e-05 -1.84499335199810e-03 2.52471363644697e-05 -1.89056468779240e-03 2.65097408149302e-05 -1.93726163558090e-03 2.78354874260360e-05 -1.98511199797980e-03 2.92275338571227e-05 -2.03414426432990e-03 3.06891956733766e-05 -2.08438762765880e-03 3.22239542417893e-05 -2.13587200206200e-03 3.38354650218938e-05 -2.18862804051290e-03 3.55275662710256e-05 -2.24268715311360e-03 3.73042881847994e-05 -2.29808152579550e-03 3.91698624945933e-05 -2.35484413948260e-03 4.11287325448477e-05 -2.41300878972790e-03 4.31855638741792e-05 -2.47261010683410e-03 4.53452553254983e-05 -2.53368357647290e-03 4.76129507115153e-05 -2.59626556081180e-03 4.99940510634955e-05 -2.66039332016390e-03 5.24942274922740e-05 -2.72610503517190e-03 5.51194346922458e-05 -2.79343982954070e-03 5.78759251203891e-05 -2.86243779333030e-03 6.07702638840849e-05 -2.93314000682560e-03 6.38093443731165e-05 -3.00558856499420e-03 6.70004046730889e-05 -3.07982660254950e-03 7.03510447992202e-05 -3.15589831963250e-03 7.38692447915739e-05 -3.23384900812740e-03 7.75633837147317e-05 -3.31372507862820e-03 8.14422596070530e-05 -3.39557408807030e-03 8.55151104270319e-05 -3.47944476804560e-03 8.97916360464686e-05 -3.56538705381630e-03 9.42820213427913e-05 -3.65345211404560e-03 9.89969604454095e-05 -3.74369238126250e-03 1.03947682193711e-04 -3.83616158307970e-03 1.09145976867229e-04 -3.93091477418180e-03 1.14604224251478e-04 -4.02800836910410e-03 1.20335423106156e-04 -4.12750017582090e-03 1.26353222105701e-04 -4.22944943016370e-03 1.32671952325722e-04 -4.33391683108880e-03 1.39306661352454e-04 -4.44096457681670e-03 1.46273149096233e-04 -4.55065640186400e-03 1.53588005394013e-04 -4.66305761499010e-03 1.61268649490209e-04 -4.77823513808030e-03 1.69333371489614e-04 -4.89625754599090e-03 1.77801375880653e-04 -5.01719510737690e-03 1.86692827232382e-04 -5.14111982652910e-03 1.96028898173532e-04 -5.26810548624440e-03 2.05831819767474e-04 -5.39822769175460e-03 2.16124934402440e-04 -5.53156391574090e-03 2.26932751322546e-04 -5.66819354445970e-03 2.38281004931183e-04 -5.80819792500790e-03 2.50196716004753e-04 -5.95166041375560e-03 2.62708255962133e-04 -6.09866642597530e-03 2.75845414341721e-04 -6.24930348669690e-03 2.89639469645986e-04 -6.40366128281830e-03 3.04123263721249e-04 -6.56183171650400e-03 3.19331279848683e-04 -6.72390895990160e-03 3.35299724731058e-04 -6.88998951121120e-03 3.52066614569385e-04 -7.06017225213810e-03 3.69671865432717e-04 -7.23455850676590e-03 3.88157388134779e-04 -7.41325210188300e-03 4.07567187841332e-04 -7.59635942879950e-03 4.27947468643628e-04 -7.78398950669090e-03 4.49346743344626e-04 -7.97625404750610e-03 4.71815948716862e-04 -8.17326752247950e-03 4.95408566503894e-04 -8.37514723028480e-03 5.20180750450205e-04 -8.58201336687280e-03 5.46191459658965e-04 -8.79398909703460e-03 5.73502598591277e-04 -9.01120062773130e-03 6.02179164036498e-04 -9.23377728323630e-03 6.32289399398826e-04 -9.46185158213220e-03 6.63904956662988e-04 -9.69555931621090e-03 6.97101066418857e-04 -9.93503963132130e-03 7.31956716344187e-04 -1.01804351102150e-02 7.68554838563561e-04 -1.04318918574370e-02 8.06982506322741e-04 -1.06895595863160e-02 8.47331140438047e-04 -1.09535917080980e-02 8.89696726004479e-04 -1.12241454232880e-02 9.34180039867518e-04 -1.15013818152430e-02 9.80886889390398e-04 -1.17854659460800e-02 1.02992836307328e-03 -1.20765669549480e-02 1.08142109360741e-03 -1.23748581587350e-02 1.13548753397666e-03 -1.26805171552560e-02 1.19225624724734e-03 -1.29937259289910e-02 1.25186221071966e-03 -1.33146709594370e-02 1.31444713514393e-03 -1.36435433321350e-02 1.38015979974165e-03 -1.39805388524390e-02 1.44915640380424e-03 -1.43258581620940e-02 1.52160093568180e-03 -1.46797068586970e-02 1.59766556000995e-03 -1.50422956181070e-02 1.67753102406670e-03 -1.54138403198750e-02 1.76138708419027e-03 -1.57945621757750e-02 1.84943295323637e-03 -1.61846878615170e-02 1.94187777009437e-03 -1.65844496516970e-02 2.03894109233826e-03 -1.69940855580930e-02 2.14085341312867e-03 -1.74138394713780e-02 2.24785670354164e-03 -1.78439613063210e-02 2.36020498155374e-03 -1.82847071505880e-02 2.47816490896546e-03 -1.87363394172070e-02 2.60201641761085e-03 -1.91991270008120e-02 2.73205336625663e-03 -1.96733454377320e-02 2.86858422966485e-03 -2.01592770700440e-02 3.01193282135427e-03 -2.06572112136740e-02 3.16243905166956e-03 -2.11674443306520e-02 3.32045972283783e-03 -2.16902802056190e-02 3.48636936276776e-03 -2.22260301266980e-02 3.66056109942438e-03 -2.27750130708270e-02 3.84344757769509e-03 -2.33375558936770e-02 4.03546192074330e-03 -2.39139935242510e-02 4.23705873793840e-03 -2.45046691643000e-02 4.44871518153320e-03 -2.51099344926580e-02 4.67093205436215e-03 -2.57301498746260e-02 4.90423497092219e-03 -2.63656845765300e-02 5.14917557429937e-03 -2.70169169855700e-02 5.40633281151448e-03 -2.76842348351130e-02 5.67631426994679e-03 -2.83680354355410e-02 5.95975757762993e-03 -2.90687259107990e-02 6.25733187029938e-03 -2.97867234407950e-02 6.56973932820243e-03 -3.05224555097830e-02 6.89771678578742e-03 -3.12763601608750e-02 7.24203741751525e-03 -3.20488862568480e-02 7.60351250315075e-03 -3.28404937473920e-02 7.98299327601400e-03 -3.36516539429530e-02 8.38137285780551e-03 -3.44828497953440e-02 8.79958828373057e-03 -3.53345761852890e-02 9.23862262178255e-03 -3.62073402170660e-02 9.69950719017074e-03 -3.71016615204270e-02 1.01833238769998e-02 -3.80180725599820e-02 1.06912075664386e-02 -3.89571189522130e-02 1.12243486757311e-02 -3.99193597903330e-02 1.17839958075284e-02 -4.09053679771540e-02 1.23714585221360e-02 -4.19157305661900e-02 1.29881102343727e-02 -4.29510491111750e-02 1.36353912398595e-02 -4.40119400242210e-02 1.43148118756306e-02 -4.50990349428190e-02 1.50279558200683e-02 -4.62129811059070e-02 1.57764835372196e-02 -4.73544417392220e-02 1.65621358706303e-02 -4.85240964501810e-02 1.73867377918610e-02 -4.97226416325010e-02 1.82522023088983e-02 -5.09507908808230e-02 1.91605345396546e-02 -5.22092754155800e-02 2.01138359557491e-02 -5.34988445183450e-02 2.11143088017080e-02 -5.48202659779480e-02 2.21642606946410e-02 -5.61743265476030e-02 2.32661094093236e-02 -5.75618324133290e-02 2.44223878534654e-02 -5.89836096739380e-02 2.56357492377364e-02 -6.04405048328840e-02 2.69089724448335e-02 -6.19333853022570e-02 2.82449676015781e-02 -6.34631399192220e-02 2.96467818576249e-02 -6.50306794752270e-02 3.11176053738540e-02 -6.66369372582650e-02 3.26607775230510e-02 -6.82828696085440e-02 3.42797933046946e-02 -6.99694564878750e-02 3.59783099750266e-02 -7.16977020631260e-02 3.77601538926053e-02 -7.34686353040850e-02 3.96293275785649e-02 -7.52833105960960e-02 4.15900169896097e-02 -7.71428083678200e-02 4.36465990004539e-02 -7.90482357345050e-02 4.58036490908683e-02 -8.10007271571470e-02 4.80659492307752e-02 -8.30014451179280e-02 5.04384959549028e-02 -8.50515808123410e-02 5.29265086162635e-02 -8.71523548584060e-02 5.55354378052662e-02 -8.93050180234090e-02 5.82709739185007e-02 -9.15108519685870e-02 6.11390558580818e-02 -9.37711700122110e-02 6.41458798389837e-02 -9.60873179115130e-02 6.72979082779019e-02 -9.84606746639270e-02 7.06018787328473e-02 -1.00892653328130e-01 7.40648128578680e-02 -1.03384701865330e-01 7.76940253319737e-02 -1.05938304001400e-01 8.14971327153463e-02 -1.08554980110240e-01 8.54820621795164e-02 -1.11236288118960e-01 8.96570600508379e-02 -1.13983824435500e-01 9.40307000985739e-02 -1.16799224899060e-01 9.86118914903664e-02 -1.19684165754060e-01 1.03409886327934e-01 -1.22640364648190e-01 1.08434286665343e-01 -1.25669581655000e-01 1.13695050900780e-01 -1.28773620321880e-01 1.19202499419595e-01 -1.31954328743830e-01 1.24967319353061e-01 -1.35213600663800e-01 1.31000568301619e-01 -1.38553376600200e-01 1.37313676855318e-01 -1.41975645002220e-01 1.43918449726004e-01 -1.45482443433780e-01 1.50827065286395e-01 -1.49075859786590e-01 1.58052073290403e-01 -1.52758033523320e-01 1.65606390525936e-01 -1.56531156951350e-01 1.73503294127456e-01 -1.60397476528040e-01 1.81756412248970e-01 -1.64359294198290e-01 1.90379711769999e-01 -1.68418968764980e-01 1.99387482677436e-01 -1.72578917293480e-01 2.08794318733476e-01 -1.76841616550630e-01 2.18615094006837e-01 -1.81209604479430e-01 2.28864934807784e-01 -1.85685481710070e-01 2.39559186530498e-01 -1.90271913108310e-01 2.50713374866821e-01 -1.94971629362080e-01 2.62343160814514e-01 -1.99787428607330e-01 2.74464288861117e-01 -2.04722178093930e-01 2.87092527681795e-01 -2.09778815892850e-01 3.00243602645441e-01 -2.14960352645400e-01 3.13933119380604e-01 -2.20269873355740e-01 3.28176477609489e-01 -2.25710539227630e-01 3.42988774417642e-01 -2.31285589546550e-01 3.58384696088085e-01 -2.36998343608350e-01 3.74378397594265e-01 -2.42852202695480e-01 3.90983368816935e-01 -2.48850652102060e-01 4.08212286527856e-01 -2.54997263208980e-01 4.26076851170314e-01 -2.61295695610240e-01 4.44587607465193e-01 -2.67749699291810e-01 4.63753747884744e-01 -2.74363116864320e-01 4.83582898066917e-01 -2.81139885850870e-01 5.04080883295811e-01 -2.88084041031390e-01 5.25251475252120e-01 -2.95199716844860e-01 5.47096118346233e-01 -3.02491149850930e-01 5.69613635091547e-01 -3.09962681252250e-01 5.92799910163108e-01 -3.17618759479180e-01 6.16647553021151e-01 -3.25463942838310e-01 6.41145539271602e-01 -3.33502902226420e-01 6.66278831289993e-01 -3.41740423911410e-01 6.92027979061900e-01 -3.50181412382020e-01 7.18368702700013e-01 -3.58830893267860e-01 7.45271458693557e-01 -3.67694016331580e-01 7.72700992638558e-01 -3.76776058534970e-01 8.00615881995120e-01 -3.86082427180780e-01 8.28968073329090e-01 -3.95618663132140e-01 8.57702419522213e-01 -4.05390444111510e-01 8.86756223584140e-01 -4.15403588081060e-01 9.16058796969044e-01 -4.25664056706670e-01 9.45531041685257e-01 -4.36177958907320e-01 9.75085066979441e-01 -4.46951554492330e-01 1.00462385296032e+00 -4.57991257888290e-01 1.03404097517506e+00 -4.69303641958130e-01 1.06322040583058e+00 -4.80895441914500e-01 1.09203640901346e+00 -4.92773559329790e-01 1.12035354884530e+00 -5.04945066245230e-01 1.14802683093842e+00 -5.17417209381490e-01 1.17490199869575e+00 -5.30197414453210e-01 1.20081600681673e+00 -5.43293290590210e-01 1.22559769469627e+00 -5.56712634867780e-01 1.24906868209038e+00 -5.70463436949020e-01 1.27104450830392e+00 -5.84553883841660e-01 1.29133603405961e+00 -5.98992364772550e-01 1.30975112195162e+00 -6.13787476182430e-01 1.32609660679768e+00 -6.28948026844140e-01 1.34018056111834e+00 -6.44483043107190e-01 1.35181485326668e+00 -6.60401774271930e-01 1.36081798632572e+00 -6.76713698096450e-01 1.36701819478479e+00 -6.93428526439430e-01 1.37025676328938e+00 -7.10556211042490e-01 1.37039151765091e+00 -7.28106949455240e-01 1.36730042316478e+00 -7.46091191106780e-01 1.36088520964616e+00 -7.64519643527120e-01 1.35107492716485e+00 -7.83403278722240e-01 1.33782932213192e+00 -8.02753339706680e-01 1.32114191121885e+00 -8.22581347197430e-01 1.30104262176983e+00 -8.42899106473210e-01 1.27759986314878e+00 -8.63718714403100e-01 1.25092189511220e+00 -8.85052566648850e-01 1.22115736793023e+00 -9.06913365045080e-01 1.18849492547177e+00 -9.29314125161690e-01 1.15316178731228e+00 -9.52268184053190e-01 1.11542125902977e+00 -9.75789208199300e-01 1.07556916052789e+00 -9.99891201641820e-01 1.03392920895851e+00 -1.02458851432240e+00 9.90847443373204e-01 -1.04989585062610e+00 9.46685829641712e-01 -1.07582827813660e+00 9.01815232888675e-01 -1.10240123660660e+00 8.56607986893178e-01 -1.12963054715080e+00 8.11430321726814e-01 -1.15753242166540e+00 7.66634929005925e-01 -1.18612347248050e+00 7.22553945945286e-01 -1.21542072225080e+00 6.79492623620674e-01 -1.24544161409040e+00 6.37723938627050e-01 -1.27620402195840e+00 5.97484211217817e-01 -1.30772626130080e+00 5.58970060065821e-01 -1.34002709995490e+00 5.22336579772056e-01 -1.37312576932380e+00 4.87696789818649e-01 -1.40704197582610e+00 4.55122267800300e-01 -1.44179591262900e+00 4.24644834398593e-01 -1.47740827167090e+00 3.96259120195368e-01 -1.51390025598120e+00 3.69925827286831e-01 -1.55129359230390e+00 3.45575504108000e-01 -1.58961054403390e+00 3.23112680159441e-01 -1.62887392447150e+00 3.02420256109133e-01 -1.66910711040590e+00 2.83364108328478e-01 -1.71033405603300e+00 2.65797935133544e-01 -1.75257930721700e+00 2.49568428670854e-01 -1.79586801610520e+00 2.34520877969046e-01 -1.84022595610300e+00 2.20505263797892e-01 -1.88567953721880e+00 2.07382757761986e-01 -1.93225582178810e+00 1.95032262363564e-01 -1.97998254058630e+00 1.83356108842641e-01 -2.02888810933870e+00 1.72283643907890e-01 -2.07900164563940e+00 1.61771579775538e-01 -2.13035298628670e+00 1.51793329556129e-01 -2.18297270504800e+00 1.42327461219067e-01 -2.23689213086270e+00 1.33353472629704e-01 -2.29214336649500e+00 1.24851305683354e-01 -2.34875930764740e+00 1.16801379553125e-01 -2.40677366254630e+00 1.09184617596822e-01 -2.46622097201120e+00 1.01982468322436e-01 -2.52713663001980e+00 9.51769208620689e-02 -2.58955690478130e+00 8.87505154328863e-02 -2.65351896032940e+00 8.26863492709444e-02 -2.71906087864960e+00 7.69680785120588e-02 -2.78622168235220e+00 7.15799164683335e-02 -2.85504135790630e+00 6.65066287156327e-02 -2.92556087944660e+00 6.17335253728931e-02 -2.99782223316890e+00 5.72464509241369e-02 -3.07186844232820e+00 5.30317719141681e-02 -3.14774359285370e+00 4.90763628413205e-02 -3.22549285959720e+00 4.53675905770612e-02 -3.30516253322930e+00 4.18932976603889e-02 -3.38680004780000e+00 3.86417848409185e-02 -3.47045400898070e+00 3.56017932713071e-02 -3.55617422300250e+00 3.27624867692986e-02 -3.64401172631070e+00 3.01134345739215e-02 -3.73401881595050e+00 2.76445950017297e-02 -3.82624908070450e+00 2.53463003643988e-02 -3.92075743299790e+00 2.32092434371121e-02 -4.01760014159300e+00 2.12244656724782e-02 -4.11683486509030e+00 1.93833472448450e-02 -4.21852068625800e+00 1.76775988943770e-02 -4.32271814720860e+00 1.60992554297546e-02 -4.42948928544470e+00 1.46406706521963e-02 -4.53889767079510e+00 1.32945133889926e-02 -4.65100844326380e+00 1.20537642762041e-02 -4.76588835181240e+00 1.09117129090608e-02 -4.88360579410220e+00 9.86195498395526e-03 -5.00423085721650e+00 8.89838908502908e-03 -5.12783535938970e+00 8.01521281741848e-03 -5.25449289276670e+00 7.20691805401656e-03 -5.38427886721800e+00 6.46828513853235e-03 -5.51727055523830e+00 5.79437596994048e-03 -5.65354713795270e+00 5.18052597702017e-03 -5.79318975226010e+00 4.62233507109448e-03 -5.93628153914090e+00 4.11565773464524e-03 -6.08290769315770e+00 3.65659245779802e-03 -6.23315551317870e+00 3.24147076929793e-03 -6.38711445435420e+00 2.86684612092401e-03 -6.54487618137680e+00 2.52948287406339e-03 -6.70653462305680e+00 2.22634560681452e-03 -6.87218602824630e+00 1.95458891422425e-03 -7.04192902314400e+00 1.71154781934906e-03 -7.21586467001560e+00 1.49472885551659e-03 -7.39409652736500e+00 1.30180182659198e-03 -7.57673071159090e+00 1.13059220701004e-03 -7.76387596016720e+00 9.79074109732737e-04 -7.95564369638330e+00 8.45363729210765e-04 -8.15214809568400e+00 7.27713157319702e-04 -8.35350615364740e+00 6.24504471428920e-04 -8.55983775564250e+00 5.34244002903493e-04 -8.77126574820690e+00 4.55556708901296e-04 -8.98791601218760e+00 3.87180587900554e-04 -9.20991753768860e+00 3.27961097923950e-04 -9.43740250086950e+00 2.76845554310159e-04 -9.67050634264100e+00 2.32877499990478e-04 -9.90936784930420e+00 1.95191054857290e-04 -1.01541292351820e+01 1.63005261622774e-04 -1.04049362272910e+01 1.35618453502967e-04 -1.06619381521050e+01 1.12402674266038e-04 -1.09252880244620e+01 9.27981839288604e-05 -1.11951426386660e+01 7.63080840220080e-05 -1.14716626618410e+01 6.24930952488164e-05 -1.17550127295890e+01 5.09665179207796e-05 -1.20453615440100e+01 4.13894021146690e-05 -1.23428819741470e+01 3.34659503919688e-05 -1.26477511589080e+01 2.69391714290240e-05 -1.29601506125330e+01 2.15867982640968e-05 -1.32802663326630e+01 1.72174802626688e-05 -1.36082889110800e+01 1.36672536322275e-05 -1.39444136471830e+01 1.07962899212749e-05 -1.42888406642690e+01 8.48592730488420e-06 -1.46417750286760e+01 6.63594495770988e-06 -1.50034268718840e+01 5.16216408536068e-06 -1.53740115156200e+01 3.99422094076788e-06 -1.57537496000560e+01 3.07359052195637e-06 -1.61428672151770e+01 2.35186635576719e-06 -1.65415960353920e+01 1.78923424308836e-06 -1.69501734574660e+01 1.35312938087365e-06 -1.73688427418660e+01 1.01707026558231e-06 -1.77978531575900e+01 7.59636089393532e-07 -1.82374601305820e+01 0.00000000000000e+00 -1.86879253958070e+01 0.00000000000000e+00 -1.91495171530840e+01 0.00000000000000e+00 -1.96225102267650e+01 0.00000000000000e+00 -2.01071862293660e+01 0.00000000000000e+00 -2.06038337292320e+01 0.00000000000000e+00 -2.11127484223440e+01 0.00000000000000e+00 -2.16342333083750e+01 0.00000000000000e+00 -2.21685988710920e+01 0.00000000000000e+00 -2.27161632632080e+01 0.00000000000000e+00 -2.32772524958100e+01 0.00000000000000e+00 -2.38522006324560e+01 0.00000000000000e+00 -2.44413499880780e+01 0.00000000000000e+00 -2.50450513327830e+01 0.00000000000000e+00 -2.56636641007030e+01 0.00000000000000e+00 -2.62975566039900e+01 0.00000000000000e+00 -2.69471062521090e+01 0.00000000000000e+00 -2.76126997765360e+01 0.00000000000000e+00 -2.82947334610160e+01 0.00000000000000e+00 -2.89936133775030e+01 0.00000000000000e+00 -2.97097556279280e+01 0.00000000000000e+00 -3.04435865919380e+01 0.00000000000000e+00 -3.11955431807580e+01 0.00000000000000e+00 -3.19660730973230e+01 0.00000000000000e+00 -3.27556351028270e+01 0.00000000000000e+00 -3.35646992898670e+01 0.00000000000000e+00 -3.43937473623270e+01 0.00000000000000e+00 -3.52432729221760e+01 0.00000000000000e+00 -3.61137817633540e+01 0.00000000000000e+00 -3.70057921729090e+01 0.00000000000000e+00 -3.79198352395800e+01 0.00000000000000e+00 -3.88564551699970e+01 0.00000000000000e+00 -3.98162096126960e+01 0.00000000000000e+00 -4.07996699901300e+01 0.00000000000000e+00 -4.18074218388860e+01 0.00000000000000e+00 -4.28400651583060e+01 0.00000000000000e+00 -4.38982147677160e+01 0.00000000000000e+00 -4.49825006724790e+01 0.00000000000000e+00 -4.60935684390890e+01 0.00000000000000e+00 -4.72320795795350e+01 0.00000000000000e+00 -4.83987119451490e+01 0.00000000000000e+00 -4.95941601301950e+01 0.00000000000000e+00 -5.08191358854100e+01 0.00000000000000e+00 -5.20743685417800e+01 0.00000000000000e+00 -5.33606054447620e+01 0.00000000000000e+00 -5.46786123992480e+01 0.00000000000000e+00 -5.60291741255090e+01 0.00000000000000e+00 -5.74130947264090e+01 0.00000000000000e+00 -5.88311981661510e+01 0.00000000000000e+00 -6.02843287608550e+01 0.00000000000000e+00 -6.17733516812480e+01 0.00000000000000e+00 -6.32991534677750e+01 0.00000000000000e+00 -6.48626425584290e+01 0.00000000000000e+00 -6.64647498296220e+01 0.00000000000000e+00 -6.81064291504140e+01 0.00000000000000e+00 -6.97886579504290e+01 0.00000000000000e+00 -7.15124378018050e+01 0.00000000000000e+00 -7.32787950155100e+01 0.00000000000000e+00 -7.50887812523930e+01 0.00000000000000e+00 -7.69434741493270e+01 0.00000000000000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi40.inp b/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi40.inp deleted file mode 100644 index 878bb8b96..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi40.inp +++ /dev/null @@ -1,525 +0,0 @@ -2.15517241379310e-04 2.14653831555243e-01 -2.20840517241380e-04 2.14653831555243e-01 -2.26295278017240e-04 2.14653831555245e-01 -2.31884771384270e-04 2.14653831555242e-01 -2.37612325237460e-04 2.14653831606783e-01 -2.43481349670820e-04 2.14653831669735e-01 -2.49495339007690e-04 2.14653831742249e-01 -2.55657873881180e-04 2.14653831825004e-01 -2.61972623366050e-04 2.14653831918299e-01 -2.68443347163190e-04 2.14653832022451e-01 -2.75073897838120e-04 2.14653832137792e-01 -2.81868223114720e-04 2.14653832264682e-01 -2.88830368225660e-04 2.14653832403497e-01 -2.95964478320830e-04 2.14653832554651e-01 -3.03274800935350e-04 2.14653832718566e-01 -3.10765688518460e-04 2.14653832895691e-01 -3.18441601024860e-04 2.14653833086525e-01 -3.26307108570180e-04 2.14653833291559e-01 -3.34366894151860e-04 2.14653833511351e-01 -3.42625756437410e-04 2.14653833746463e-01 -3.51088612621420e-04 2.14653833997498e-01 -3.59760501353160e-04 2.14653834265104e-01 -3.68646585736590e-04 2.14653834549942e-01 -3.77752156404280e-04 2.14653834852733e-01 -3.87082634667470e-04 2.14653835174220e-01 -3.96643575743750e-04 2.14653835515206e-01 -4.06440672064620e-04 2.14653835876514e-01 -4.16479756664620e-04 2.14653836259028e-01 -4.26766806654240e-04 2.14653836663674e-01 -4.37307946778600e-04 2.14653837091431e-01 -4.48109453064030e-04 2.14653837543331e-01 -4.59177756554710e-04 2.14653838020451e-01 -4.70519447141610e-04 2.14653838523943e-01 -4.82141277486010e-04 2.14653839054971e-01 -4.94050167039910e-04 2.14653839614861e-01 -5.06253206165800e-04 2.14653840204876e-01 -5.18757660358090e-04 2.14653840826456e-01 -5.31570974568940e-04 2.14653841481072e-01 -5.44700777640790e-04 2.14653842170253e-01 -5.58154886848520e-04 2.14653842895629e-01 -5.71941312553680e-04 2.14653843658911e-01 -5.86068262973750e-04 2.14653844461912e-01 -6.00544149069200e-04 2.14653845306510e-01 -6.15377589551210e-04 2.14653846194683e-01 -6.30577416013130e-04 2.14653847128537e-01 -6.46152678188650e-04 2.14653848110269e-01 -6.62112649339910e-04 2.14653849142183e-01 -6.78466831778610e-04 2.14653850226701e-01 -6.95224962523540e-04 2.14653851366373e-01 -7.12397019097870e-04 2.14653852563892e-01 -7.29993225469590e-04 2.14653853822042e-01 -7.48024058138690e-04 2.14653855143800e-01 -7.66500252374710e-04 2.14653856532283e-01 -7.85432808608370e-04 2.14653857990728e-01 -8.04832998980990e-04 2.14653859522590e-01 -8.24712374055830e-04 2.14653861131452e-01 -8.45082769695000e-04 2.14653862821105e-01 -8.65956314106470e-04 2.14653864595525e-01 -8.87345435064900e-04 2.14653866458882e-01 -9.09262867311000e-04 2.14653868415560e-01 -9.31721660133590e-04 2.14653870470173e-01 -9.54735185138880e-04 2.14653872627559e-01 -9.78317144211820e-04 2.14653874892794e-01 -1.00248157767380e-03 2.14653877271229e-01 -1.02724287264240e-03 2.14653879768432e-01 -1.05261577159670e-03 2.14653882390316e-01 -1.07861538115510e-03 2.14653885143074e-01 -1.10525718106960e-03 2.14653888033196e-01 -1.13255703344200e-03 2.14653891067482e-01 -1.16053119216810e-03 2.14653894253087e-01 -1.18919631261460e-03 2.14653897597568e-01 -1.21856946153620e-03 2.14653901108788e-01 -1.24866812723610e-03 2.14653904795073e-01 -1.27951022997890e-03 2.14653908665091e-01 -1.31111413265940e-03 2.14653912728017e-01 -1.34349865173600e-03 2.14653916993464e-01 -1.37668306843390e-03 2.14653921471490e-01 -1.41068714022420e-03 2.14653926172712e-01 -1.44553111258780e-03 2.14653931108220e-01 -1.48123573106870e-03 2.14653936289735e-01 -1.51782225362610e-03 2.14653941729490e-01 -1.55531246329070e-03 2.14653947440374e-01 -1.59372868113390e-03 2.14653953435922e-01 -1.63309377955790e-03 2.14653959730315e-01 -1.67343119591300e-03 2.14653966338467e-01 -1.71476494645210e-03 2.14653973276035e-01 -1.75711964062940e-03 2.14653980559489e-01 -1.80052049575300e-03 2.14653988206052e-01 -1.84499335199810e-03 2.14653996233883e-01 -1.89056468779240e-03 2.14654004662020e-01 -1.93726163558090e-03 2.14654013510425e-01 -1.98511199797980e-03 2.14654022800111e-01 -2.03414426432990e-03 2.14654032553114e-01 -2.08438762765880e-03 2.14654042792577e-01 -2.13587200206200e-03 2.14654053542798e-01 -2.18862804051290e-03 2.14654064829295e-01 -2.24268715311360e-03 2.14654076678864e-01 -2.29808152579550e-03 2.14654089119638e-01 -2.35484413948260e-03 2.14654102181163e-01 -2.41300878972790e-03 2.14654115894446e-01 -2.47261010683410e-03 2.14654130292080e-01 -2.53368357647290e-03 2.14654145408251e-01 -2.59626556081180e-03 2.14654161278869e-01 -2.66039332016390e-03 2.14654177941650e-01 -2.72610503517190e-03 2.14654195436197e-01 -2.79343982954070e-03 2.14654213804068e-01 -2.86243779333030e-03 2.14654233088939e-01 -2.93314000682560e-03 2.14654253336628e-01 -3.00558856499420e-03 2.14654274595284e-01 -3.07982660254950e-03 2.14654296915443e-01 -3.15589831963250e-03 2.14654320350168e-01 -3.23384900812740e-03 2.14654344955184e-01 -3.31372507862820e-03 2.14654370788995e-01 -3.39557408807030e-03 2.14654397913049e-01 -3.47944476804560e-03 2.14654426391849e-01 -3.56538705381630e-03 2.14654456293129e-01 -3.65345211404560e-03 2.14654487688006e-01 -3.74369238126250e-03 2.14654520651170e-01 -3.83616158307970e-03 2.14654555261032e-01 -3.93091477418180e-03 2.14654591599931e-01 -4.02800836910410e-03 2.14654629754319e-01 -4.12750017582090e-03 2.14654669814986e-01 -4.22944943016370e-03 2.14654711877239e-01 -4.33391683108880e-03 2.14654756041166e-01 -4.44096457681670e-03 2.14654802411867e-01 -4.55065640186400e-03 2.14654851099693e-01 -4.66305761499010e-03 2.14654902220509e-01 -4.77823513808030e-03 2.14654955895970e-01 -4.89625754599090e-03 2.14655012253813e-01 -5.01719510737690e-03 2.14655071428219e-01 -5.14111982652910e-03 2.14655133559987e-01 -5.26810548624440e-03 2.14655198797027e-01 -5.39822769175460e-03 2.14655267294619e-01 -5.53156391574090e-03 2.14655339215829e-01 -5.66819354445970e-03 2.14655414731834e-01 -5.80819792500790e-03 2.14655494022426e-01 -5.95166041375560e-03 2.14655577276365e-01 -6.09866642597530e-03 2.14655664691834e-01 -6.24930348669690e-03 2.14655756476956e-01 -6.40366128281830e-03 2.14655852850252e-01 -6.56183171650400e-03 2.14655954041159e-01 -6.72390895990160e-03 2.14656060290623e-01 -6.88998951121120e-03 2.14656171851604e-01 -7.06017225213810e-03 2.14656288989726e-01 -7.23455850676590e-03 2.14656411983890e-01 -7.41325210188300e-03 2.14656541126977e-01 -7.59635942879950e-03 2.14656676726472e-01 -7.78398950669090e-03 2.14656819105274e-01 -7.97625404750610e-03 2.14656968602390e-01 -8.17326752247950e-03 2.14657125573844e-01 -8.37514723028480e-03 2.14657290393385e-01 -8.58201336687280e-03 2.14657463453541e-01 -8.79398909703460e-03 2.14657645166395e-01 -9.01120062773130e-03 2.14657835964684e-01 -9.23377728323630e-03 2.14658036302778e-01 -9.46185158213220e-03 2.14658246657776e-01 -9.69555931621090e-03 2.14658467530614e-01 -9.93503963132130e-03 2.14658699447299e-01 -1.01804351102150e-02 2.14658942960155e-01 -1.04318918574370e-02 2.14659198649119e-01 -1.06895595863160e-02 2.14659467123117e-01 -1.09535917080980e-02 2.14659749021564e-01 -1.12241454232880e-02 2.14660045015819e-01 -1.15013818152430e-02 2.14660355810850e-01 -1.17854659460800e-02 2.14660682146850e-01 -1.20765669549480e-02 2.14661024801064e-01 -1.23748581587350e-02 2.14661384589587e-01 -1.26805171552560e-02 2.14661762369340e-01 -1.29937259289910e-02 2.14662159040097e-01 -1.33146709594370e-02 2.14662575546655e-01 -1.36435433321350e-02 2.14663012881038e-01 -1.39805388524390e-02 2.14663472084886e-01 -1.43258581620940e-02 2.14663954251973e-01 -1.46797068586970e-02 2.14664460530740e-01 -1.50422956181070e-02 2.14664992127070e-01 -1.54138403198750e-02 2.14665550307176e-01 -1.57945621757750e-02 2.14666136400633e-01 -1.61846878615170e-02 2.14666751803433e-01 -1.65844496516970e-02 2.14667397981464e-01 -1.69940855580930e-02 2.14668076473929e-01 -1.74138394713780e-02 2.14668788896966e-01 -1.78439613063210e-02 2.14669536947610e-01 -1.82847071505880e-02 2.14670322407727e-01 -1.87363394172070e-02 2.14671147148378e-01 -1.91991270008120e-02 2.14672013134149e-01 -1.96733454377320e-02 2.14672922427914e-01 -2.01592770700440e-02 2.14673877195744e-01 -2.06572112136740e-02 2.14674879712056e-01 -2.11674443306520e-02 2.14675932365026e-01 -2.16902802056190e-02 2.14677037662313e-01 -2.22260301266980e-02 2.14678198236986e-01 -2.27750130708270e-02 2.14679416853861e-01 -2.33375558936770e-02 2.14680696416026e-01 -2.39139935242510e-02 2.14682039971828e-01 -2.45046691643000e-02 2.14683450722102e-01 -2.51099344926580e-02 2.14684932027792e-01 -2.57301498746260e-02 2.14686487417998e-01 -2.63656845765300e-02 2.14688120598349e-01 -2.70169169855700e-02 2.14689835459896e-01 -2.76842348351130e-02 2.14691636088339e-01 -2.83680354355410e-02 2.14693526773778e-01 -2.90687259107990e-02 2.14695512020972e-01 -2.97867234407950e-02 2.14697596560067e-01 -3.05224555097830e-02 2.14699785357852e-01 -3.12763601608750e-02 2.14702083629655e-01 -3.20488862568480e-02 2.14704496851756e-01 -3.28404937473920e-02 2.14707030774437e-01 -3.36516539429530e-02 2.14709691435730e-01 -3.44828497953440e-02 2.14712485175816e-01 -3.53345761852890e-02 2.14715418652150e-01 -3.62073402170660e-02 2.14718498855335e-01 -3.71016615204270e-02 2.14721733125838e-01 -3.80180725599820e-02 2.14725129171476e-01 -3.89571189522130e-02 2.14728695085847e-01 -3.99193597903330e-02 2.14732439367623e-01 -4.09053679771540e-02 2.14736370940867e-01 -4.19157305661900e-02 2.14740499176321e-01 -4.29510491111750e-02 2.14744833913813e-01 -4.40119400242210e-02 2.14749385485729e-01 -4.50990349428190e-02 2.14754164741717e-01 -4.62129811059070e-02 2.14759183074593e-01 -4.73544417392220e-02 2.14764452447605e-01 -4.85240964501810e-02 2.14769985422925e-01 -4.97226416325010e-02 2.14775795191834e-01 -5.09507908808230e-02 2.14781895606097e-01 -5.22092754155800e-02 2.14788301211198e-01 -5.34988445183450e-02 2.14795027281077e-01 -5.48202659779480e-02 2.14802089854686e-01 -5.61743265476030e-02 2.14809505774322e-01 -5.75618324133290e-02 2.14817292726016e-01 -5.89836096739380e-02 2.14825469281762e-01 -6.04405048328840e-02 2.14834054944084e-01 -6.19333853022570e-02 2.14843070192662e-01 -6.34631399192220e-02 2.14852536533464e-01 -6.50306794752270e-02 2.14862476550161e-01 -6.66369372582650e-02 2.14872913958393e-01 -6.82828696085440e-02 2.14883873662554e-01 -6.99694564878750e-02 2.14895381815501e-01 -7.16977020631260e-02 2.14907465881344e-01 -7.34686353040850e-02 2.14920154701295e-01 -7.52833105960960e-02 2.14933478562978e-01 -7.71428083678200e-02 2.14947469273131e-01 -7.90482357345050e-02 2.14962160233979e-01 -8.10007271571470e-02 2.14977586523599e-01 -8.30014451179280e-02 2.14993784980204e-01 -8.50515808123410e-02 2.15010794290734e-01 -8.71523548584060e-02 2.15028655084051e-01 -8.93050180234090e-02 2.15047410028672e-01 -9.15108519685870e-02 2.15067103935596e-01 -9.37711700122110e-02 2.15087783866295e-01 -9.60873179115130e-02 2.15109499246200e-01 -9.84606746639270e-02 2.15132301983936e-01 -1.00892653328130e-01 2.15156246596665e-01 -1.03384701865330e-01 2.15181390341769e-01 -1.05938304001400e-01 2.15207793355203e-01 -1.08554980110240e-01 2.15235518796995e-01 -1.11236288118960e-01 2.15264633004098e-01 -1.13983824435500e-01 2.15295205650996e-01 -1.16799224899060e-01 2.15327309918650e-01 -1.19684165754060e-01 2.15361022671929e-01 -1.22640364648190e-01 2.15396424646156e-01 -1.25669581655000e-01 2.15433600643301e-01 -1.28773620321880e-01 2.15472639738074e-01 -1.31954328743830e-01 2.15513635494673e-01 -1.35213600663800e-01 2.15556686194580e-01 -1.38553376600200e-01 2.15601895076138e-01 -1.41975645002220e-01 2.15649370586387e-01 -1.45482443433780e-01 2.15699226645768e-01 -1.49075859786590e-01 2.15751582926622e-01 -1.52758033523320e-01 2.15806565145828e-01 -1.56531156951350e-01 2.15864305372635e-01 -1.60397476528040e-01 2.15924942352366e-01 -1.64359294198290e-01 2.15988621846645e-01 -1.68418968764980e-01 2.16055496991472e-01 -1.72578917293480e-01 2.16125728673401e-01 -1.76841616550630e-01 2.16199485925502e-01 -1.81209604479430e-01 2.16276946343486e-01 -1.85685481710070e-01 2.16358296523429e-01 -1.90271913108310e-01 2.16443732522093e-01 -1.94971629362080e-01 2.16533460340989e-01 -1.99787428607330e-01 2.16627696435341e-01 -2.04722178093930e-01 2.16726668249411e-01 -2.09778815892850e-01 2.16830614779242e-01 -2.14960352645400e-01 2.16939787164440e-01 -2.20269873355740e-01 2.17054449310292e-01 -2.25710539227630e-01 2.17174878541770e-01 -2.31285589546550e-01 2.17301366290992e-01 -2.36998343608350e-01 2.17434218819648e-01 -2.42852202695480e-01 2.17573757978216e-01 -2.48850652102060e-01 2.17720322003526e-01 -2.54997263208980e-01 2.17874266356493e-01 -2.61295695610240e-01 2.18035964601789e-01 -2.67749699291810e-01 2.18205809331305e-01 -2.74363116864320e-01 2.18384213133165e-01 -2.81139885850870e-01 2.18571609608206e-01 -2.88084041031390e-01 2.18768454435662e-01 -2.95199716844860e-01 2.18975226489922e-01 -3.02491149850930e-01 2.19192429009976e-01 -3.09962681252250e-01 2.19420590823323e-01 -3.17618759479180e-01 2.19660267625689e-01 -3.25463942838310e-01 2.19912043317962e-01 -3.33502902226420e-01 2.20176531401402e-01 -3.41740423911410e-01 2.20454376431982e-01 -3.50181412382020e-01 2.20746255534144e-01 -3.58830893267860e-01 2.21052879974082e-01 -3.67694016331580e-01 2.21374996791845e-01 -3.76776058534970e-01 2.21713390490948e-01 -3.86082427180780e-01 2.22068884783361e-01 -3.95618663132140e-01 2.22442344386661e-01 -4.05390444111510e-01 2.22834676868907e-01 -4.15403588081060e-01 2.23246834535393e-01 -4.25664056706670e-01 2.23679816349495e-01 -4.36177958907320e-01 2.24134669878002e-01 -4.46951554492330e-01 2.24612493248533e-01 -4.57991257888290e-01 2.25114437104054e-01 -4.69303641958130e-01 2.25641706535590e-01 -4.80895441914500e-01 2.26195562970734e-01 -4.92773559329790e-01 2.26777325990377e-01 -5.04945066245230e-01 2.27388375040360e-01 -5.17417209381490e-01 2.28030150998899e-01 -5.30197414453210e-01 2.28704157552207e-01 -5.43293290590210e-01 2.29411962322429e-01 -5.56712634867780e-01 2.30155197681316e-01 -5.70463436949020e-01 2.30935561171597e-01 -5.84553883841660e-01 2.31754815443440e-01 -5.98992364772550e-01 2.32614787598350e-01 -6.13787476182430e-01 2.33517367813610e-01 -6.28948026844140e-01 2.34464507099763e-01 -6.44483043107190e-01 2.35458214019420e-01 -6.60401774271930e-01 2.36500550167841e-01 -6.76713698096450e-01 2.37593624184543e-01 -6.93428526439430e-01 2.38739584029588e-01 -7.10556211042490e-01 2.39940607217907e-01 -7.28106949455240e-01 2.41198888660485e-01 -7.46091191106780e-01 2.42516625710360e-01 -7.64519643527120e-01 2.43895999956613e-01 -7.83403278722240e-01 2.45339155248105e-01 -8.02753339706680e-01 2.46848171362931e-01 -8.22581347197430e-01 2.48425032668500e-01 -8.42899106473210e-01 2.50071591042883e-01 -8.63718714403100e-01 2.51789522250856e-01 -8.85052566648850e-01 2.53580274891485e-01 -9.06913365045080e-01 2.55445010960087e-01 -9.29314125161690e-01 2.57384537001881e-01 -9.52268184053190e-01 2.59399224782210e-01 -9.75789208199300e-01 2.61488920368317e-01 -9.99891201641820e-01 2.63652840520018e-01 -1.02458851432240e+00 2.65889455334942e-01 -1.04989585062610e+00 2.68196356205010e-01 -1.07582827813660e+00 2.70570108335152e-01 -1.10240123660660e+00 2.73006087378275e-01 -1.12963054715080e+00 2.75498300179815e-01 -1.15753242166540e+00 2.78039190236947e-01 -1.18612347248050e+00 2.80619429295918e-01 -1.21542072225080e+00 2.83227697576878e-01 -1.24544161409040e+00 2.85850456466769e-01 -1.27620402195840e+00 2.88471719191033e-01 -1.30772626130080e+00 2.91072826987991e-01 -1.34002709995490e+00 2.93632240669739e-01 -1.37312576932380e+00 2.96125360134352e-01 -1.40704197582610e+00 2.98524387328977e-01 -1.44179591262900e+00 3.00798251220834e-01 -1.47740827167090e+00 3.02912616310178e-01 -1.51390025598120e+00 3.04829998812531e-01 -1.55129359230390e+00 3.06510016440151e-01 -1.58961054403390e+00 3.07909798198779e-01 -1.62887392447150e+00 3.08984579158186e-01 -1.66910711040590e+00 3.09688501045968e-01 -1.71033405603300e+00 3.09975632036769e-01 -1.75257930721700e+00 3.09801207621153e-01 -1.79586801610520e+00 3.09123078519819e-01 -1.84022595610300e+00 3.07903331225090e-01 -1.88567953721880e+00 3.06110022444102e-01 -1.93225582178810e+00 3.03718941789851e-01 -1.97998254058630e+00 3.00715289707297e-01 -2.02888810933870e+00 2.97095132943087e-01 -2.07900164563940e+00 2.92866481784949e-01 -2.13035298628670e+00 2.88049826261509e-01 -2.18297270504800e+00 2.82677977082751e-01 -2.23689213086270e+00 2.76795085623793e-01 -2.29214336649500e+00 2.70454769536093e-01 -2.34875930764740e+00 2.63717350269578e-01 -2.40677366254630e+00 2.56646320511860e-01 -2.46622097201120e+00 2.49304310991054e-01 -2.52713663001980e+00 2.41749031026618e-01 -2.58955690478130e+00 2.34029938590839e-01 -2.65351896032940e+00 2.26186787050051e-01 -2.71906087864960e+00 2.18251406293697e-01 -2.78622168235220e+00 2.10252208331469e-01 -2.85504135790630e+00 2.02216968174626e-01 -2.92556087944660e+00 1.94172166327038e-01 -2.99782223316890e+00 1.86143025380782e-01 -3.07186844232820e+00 1.78153552700891e-01 -3.14774359285370e+00 1.70226488726556e-01 -3.22549285959720e+00 1.62383274503264e-01 -3.30516253322930e+00 1.54644017496249e-01 -3.38680004780000e+00 1.47027458315418e-01 -3.47045400898070e+00 1.39550939206059e-01 -3.55617422300250e+00 1.32230375387514e-01 -3.64401172631070e+00 1.25080230637748e-01 -3.73401881595050e+00 1.18113498809832e-01 -3.82624908070450e+00 1.11341692823252e-01 -3.92075743299790e+00 1.04774842687614e-01 -4.01760014159300e+00 9.84215045389645e-02 -4.11683486509030e+00 9.22887813023019e-02 -4.21852068625800e+00 8.63823557257112e-02 -4.32271814720860e+00 8.07065358416496e-02 -4.42948928544470e+00 7.52643123273838e-02 -4.53889767079510e+00 7.00574266747519e-02 -4.65100844326380e+00 6.50864485824629e-02 -4.76588835181240e+00 6.03508605863123e-02 -4.88360579410220e+00 5.58491476669323e-02 -5.00423085721650e+00 5.15788894347192e-02 -5.12783535938970e+00 4.75368524916860e-02 -5.25449289276670e+00 4.37190807083103e-02 -5.38427886721800e+00 4.01209814211140e-02 -5.51727055523830e+00 3.67374059382856e-02 -5.65354713795270e+00 3.35627232124384e-02 -5.79318975226010e+00 3.05908860689453e-02 -5.93628153914090e+00 2.78154899241093e-02 -6.08290769315770e+00 2.52298244422828e-02 -6.23315551317870e+00 2.28269190176598e-02 -6.38711445435420e+00 2.05995832831844e-02 -6.54487618137680e+00 1.85404440184739e-02 -6.70653462305680e+00 1.66419798415875e-02 -6.87218602824630e+00 1.48965549371404e-02 -7.04192902314400e+00 1.32964528247852e-02 -7.21586467001560e+00 1.18339108480609e-02 -7.39409652736500e+00 1.05011557095698e-02 -7.57673071159090e+00 9.29044003655989e-03 -7.76387596016720e+00 8.19407966508096e-03 -7.95564369638330e+00 7.20449110333027e-03 -8.15214809568400e+00 6.31422848590217e-03 -8.35350615364740e+00 5.51601926028664e-03 -8.55983775564250e+00 4.80279784711868e-03 -8.77126574820690e+00 4.16773657346537e-03 -8.98791601218760e+00 3.60427327873998e-03 -9.20991753768860e+00 3.10613512053296e-03 -9.43740250086950e+00 2.66735824902093e-03 -9.67050634264100e+00 2.28230316221347e-03 -9.90936784930420e+00 1.94566569124233e-03 -1.01541292351820e+01 1.65248368886318e-03 -1.04049362272910e+01 1.39813960127986e-03 -1.06619381521050e+01 1.17835919119176e-03 -1.09252880244620e+01 9.89206747994838e-04 -1.11951426386660e+01 8.27077169860984e-04 -1.14716626618410e+01 6.88685333304975e-04 -1.17550127295890e+01 5.71053180642655e-04 -1.20453615440100e+01 4.71494956591017e-04 -1.23428819741470e+01 3.87601014383695e-04 -1.26477511589080e+01 3.17220591426089e-04 -1.29601506125330e+01 2.58443926797342e-04 -1.32802663326630e+01 2.09584059803925e-04 -1.36082889110800e+01 1.69158613595338e-04 -1.39444136471830e+01 1.35871812833769e-04 -1.42888406642690e+01 1.08597062448844e-04 -1.46417750286760e+01 8.63598351971291e-05 -1.50034268718840e+01 6.83222367042058e-05 -1.53740115156200e+01 5.37674739479219e-05 -1.57537496000560e+01 4.20855121182987e-05 -1.61428672151770e+01 3.27602400979473e-05 -1.65415960353920e+01 2.53575561990152e-05 -1.69501734574660e+01 1.95144478397007e-05 -1.73688427418660e+01 1.49291353589717e-05 -1.77978531575900e+01 1.13522456376210e-05 -1.82374601305820e+01 8.57896866193708e-06 -1.86879253958070e+01 6.44214058727685e-06 -1.91495171530840e+01 4.80618999120721e-06 -1.96225102267650e+01 3.56187957813049e-06 -2.01071862293660e+01 2.62177331909211e-06 -2.06038337292320e+01 1.91635858337019e-06 -2.11127484223440e+01 1.39075394431362e-06 -2.16342333083750e+01 1.00193573292601e-06 -2.21685988710920e+01 7.16419786986911e-07 -2.27161632632080e+01 5.08338979144018e-07 -2.32772524958100e+01 3.57861612967387e-07 -2.38522006324560e+01 2.49901250512026e-07 -2.44413499880780e+01 1.73071297811187e-07 -2.50450513327830e+01 1.18849339044954e-07 -2.56636641007030e+01 8.09086904445582e-08 -2.62975566039900e+01 5.45918480499697e-08 -2.69471062521090e+01 3.65004985819522e-08 -2.76126997765360e+01 2.41774175899826e-08 -2.82947334610160e+01 1.58620896455083e-08 -2.89936133775030e+01 1.03049757507452e-08 -2.97097556279280e+01 6.62771355369821e-09 -3.04435865919380e+01 4.21892763051982e-09 -3.11955431807580e+01 2.65736160502699e-09 -3.19660730973230e+01 1.65575194983460e-09 -3.27556351028270e+01 1.02027869691846e-09 -3.35646992898670e+01 6.21585921100253e-10 -3.43937473623270e+01 3.74299390592256e-10 -3.52432729221760e+01 2.22713369214572e-10 -3.61137817633540e+01 1.30904030933750e-10 -3.70057921729090e+01 7.59812261766337e-11 -3.79198352395800e+01 4.35381166923099e-11 -3.88564551699970e+01 2.46208472515583e-11 -3.98162096126960e+01 1.37360745268532e-11 -4.07996699901300e+01 7.55789867123108e-12 -4.18074218388860e+01 4.09983960217689e-12 -4.28400651583060e+01 2.19181863891304e-12 -4.38982147677160e+01 1.15439582440627e-12 -4.49825006724790e+01 5.98760871293856e-13 -4.60935684390890e+01 3.05725998787403e-13 -4.72320795795350e+01 1.53609699249948e-13 -4.83987119451490e+01 7.59162461897743e-14 -4.95941601301950e+01 3.68888233433283e-14 -5.08191358854100e+01 1.76161577022131e-14 -5.20743685417800e+01 8.26288460666012e-15 -5.33606054447620e+01 3.80463979002526e-15 -5.46786123992480e+01 0.00000000000000e+00 -5.60291741255090e+01 0.00000000000000e+00 -5.74130947264090e+01 0.00000000000000e+00 -5.88311981661510e+01 0.00000000000000e+00 -6.02843287608550e+01 0.00000000000000e+00 -6.17733516812480e+01 0.00000000000000e+00 -6.32991534677750e+01 0.00000000000000e+00 -6.48626425584290e+01 0.00000000000000e+00 -6.64647498296220e+01 0.00000000000000e+00 -6.81064291504140e+01 0.00000000000000e+00 -6.97886579504290e+01 0.00000000000000e+00 -7.15124378018050e+01 0.00000000000000e+00 -7.32787950155100e+01 0.00000000000000e+00 -7.50887812523930e+01 0.00000000000000e+00 -7.69434741493270e+01 0.00000000000000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi41.inp b/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi41.inp deleted file mode 100644 index c703e5f7b..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi41.inp +++ /dev/null @@ -1,525 +0,0 @@ -2.15517241379310e-04 1.97093601157299e-05 -2.20840517241380e-04 2.01961813105882e-05 -2.26295278017240e-04 2.06950269889601e-05 -2.31884771384270e-04 2.12061941555869e-05 -2.37612325237460e-04 2.17299873031308e-05 -2.43481349670820e-04 2.22667181465503e-05 -2.49495339007690e-04 2.28167062455437e-05 -2.55657873881180e-04 2.33802790547130e-05 -2.61972623366050e-04 2.39577721165049e-05 -2.68443347163190e-04 2.45495292612708e-05 -2.75073897838120e-04 2.51559028119729e-05 -2.81868223114720e-04 2.57772537939544e-05 -2.88830368225660e-04 2.64139521498886e-05 -2.95964478320830e-04 2.70663769600374e-05 -3.03274800935350e-04 2.77349166679478e-05 -3.10765688518460e-04 2.84199693117259e-05 -3.18441601024860e-04 2.91219427610271e-05 -3.26307108570180e-04 2.98412549598868e-05 -3.34366894151860e-04 3.05783341755670e-05 -3.42625756437410e-04 3.13336192535343e-05 -3.51088612621420e-04 3.21075598787400e-05 -3.59760501353160e-04 3.29006168433672e-05 -3.68646585736590e-04 3.37132623211609e-05 -3.77752156404280e-04 3.45459801485759e-05 -3.87082634667470e-04 3.53992661128193e-05 -3.96643575743750e-04 3.62736282470616e-05 -4.06440672064620e-04 3.71695871328893e-05 -4.16479756664620e-04 3.80876762102650e-05 -4.26766806654240e-04 3.90284420951287e-05 -4.37307946778600e-04 3.99924449048357e-05 -4.48109453064030e-04 4.09802585916527e-05 -4.59177756554710e-04 4.19924712844743e-05 -4.70519447141610e-04 4.30296856389861e-05 -4.82141277486010e-04 4.40925191964773e-05 -4.94050167039910e-04 4.51816047515227e-05 -5.06253206165800e-04 4.62975907287269e-05 -5.18757660358090e-04 4.74411415687950e-05 -5.31570974568940e-04 4.86129381241293e-05 -5.44700777640790e-04 4.98136780641987e-05 -5.58154886848520e-04 5.10440762909206e-05 -5.71941312553680e-04 5.23048653643013e-05 -5.86068262973750e-04 5.35967959385952e-05 -6.00544149069200e-04 5.49206372092296e-05 -6.15377589551210e-04 5.62771773707759e-05 -6.30577416013130e-04 5.76672240862268e-05 -6.46152678188650e-04 5.90916049678716e-05 -6.62112649339910e-04 6.05511680700380e-05 -6.78466831778610e-04 6.20467823940162e-05 -6.95224962523540e-04 6.35793384054508e-05 -7.12397019097870e-04 6.51497485645063e-05 -7.29993225469590e-04 6.67589478691390e-05 -7.48024058138690e-04 6.84078944117804e-05 -7.66500252374710e-04 7.00975699497718e-05 -7.85432808608370e-04 7.18289804898835e-05 -8.04832998980990e-04 7.36031568872913e-05 -8.24712374055830e-04 7.54211554593156e-05 -8.45082769695000e-04 7.72840586143599e-05 -8.65956314106470e-04 7.91929754963405e-05 -8.87345435064900e-04 8.11490426450725e-05 -9.09262867311000e-04 8.31534246729448e-05 -9.31721660133590e-04 8.52073149583119e-05 -9.54735185138880e-04 8.73119363560264e-05 -9.78317144211820e-04 8.94685419254983e-05 -1.00248157767380e-03 9.16784156767662e-05 -1.02724287264240e-03 9.39428733349528e-05 -1.05261577159670e-03 9.62632631236814e-05 -1.07861538115510e-03 9.86409665677397e-05 -1.10525718106960e-03 1.01077399315658e-04 -1.13255703344200e-03 1.03574011982556e-04 -1.16053119216810e-03 1.06132291013803e-04 -1.18919631261460e-03 1.08753759570102e-04 -1.21856946153620e-03 1.11439978434258e-04 -1.24866812723610e-03 1.14192546940552e-04 -1.27951022997890e-03 1.17013103926890e-04 -1.31111413265940e-03 1.19903328710613e-04 -1.34349865173600e-03 1.22864942088305e-04 -1.37668306843390e-03 1.25899707360331e-04 -1.41068714022420e-03 1.29009431380743e-04 -1.44553111258780e-03 1.32195965633008e-04 -1.48123573106870e-03 1.35461207332403e-04 -1.51782225362610e-03 1.38807100555583e-04 -1.55531246329070e-03 1.42235637398060e-04 -1.59372868113390e-03 1.45748859160328e-04 -1.63309377955790e-03 1.49348857563163e-04 -1.67343119591300e-03 1.53037775993083e-04 -1.71476494645210e-03 1.56817810778494e-04 -1.75711964062940e-03 1.60691212497375e-04 -1.80052049575300e-03 1.64660287317202e-04 -1.84499335199810e-03 1.68727398368122e-04 -1.89056468779240e-03 1.72894967149901e-04 -1.93726163558090e-03 1.77165474973645e-04 -1.98511199797980e-03 1.81541464439241e-04 -2.03414426432990e-03 1.86025540949169e-04 -2.08438762765880e-03 1.90620374259744e-04 -2.13587200206200e-03 1.95328700070712e-04 -2.18862804051290e-03 2.00153321654086e-04 -2.24268715311360e-03 2.05097111523183e-04 -2.29808152579550e-03 2.10163013142972e-04 -2.35484413948260e-03 2.15354042682572e-04 -2.41300878972790e-03 2.20673290811110e-04 -2.47261010683410e-03 2.26123924537951e-04 -2.53368357647290e-03 2.31709189098266e-04 -2.59626556081180e-03 2.37432409885344e-04 -2.66039332016390e-03 2.43296994430528e-04 -2.72610503517190e-03 2.49306434432096e-04 -2.79343982954070e-03 2.55464307834203e-04 -2.86243779333030e-03 2.61774280957318e-04 -2.93314000682560e-03 2.68240110681096e-04 -3.00558856499420e-03 2.74865646681359e-04 -3.07982660254950e-03 2.81654833722201e-04 -3.15589831963250e-03 2.88611714004761e-04 -3.23384900812740e-03 2.95740429574068e-04 -3.31372507862820e-03 3.03045224785249e-04 -3.39557408807030e-03 3.10530448830710e-04 -3.47944476804560e-03 3.18200558329854e-04 -3.56538705381630e-03 3.26060119982445e-04 -3.65345211404560e-03 3.34113813287978e-04 -3.74369238126250e-03 3.42366433331833e-04 -3.83616158307970e-03 3.50822893640515e-04 -3.93091477418180e-03 3.59488229107265e-04 -4.02800836910410e-03 3.68367598990074e-04 -4.12750017582090e-03 3.77466289983680e-04 -4.22944943016370e-03 3.86789719367512e-04 -4.33391683108880e-03 3.96343438231338e-04 -4.44096457681670e-03 4.06133134780697e-04 -4.55065640186400e-03 4.16164637723883e-04 -4.66305761499010e-03 4.26443919742759e-04 -4.77823513808030e-03 4.36977101049210e-04 -4.89625754599090e-03 4.47770453029407e-04 -5.01719510737690e-03 4.58830401978359e-04 -5.14111982652910e-03 4.70163532926423e-04 -5.26810548624440e-03 4.81776593560612e-04 -5.39822769175460e-03 4.93676498242684e-04 -5.53156391574090e-03 5.05870332126480e-04 -5.66819354445970e-03 5.18365355377058e-04 -5.80819792500790e-03 5.31169007494145e-04 -5.95166041375560e-03 5.44288911742273e-04 -6.09866642597530e-03 5.57732879690439e-04 -6.24930348669690e-03 5.71508915864054e-04 -6.40366128281830e-03 5.85625222511743e-04 -6.56183171650400e-03 6.00090204489931e-04 -6.72390895990160e-03 6.14912474268243e-04 -6.88998951121120e-03 6.30100857058507e-04 -7.06017225213810e-03 6.45664396070592e-04 -7.23455850676590e-03 6.61612357898108e-04 -7.41325210188300e-03 6.77954238037232e-04 -7.59635942879950e-03 6.94699766541930e-04 -7.78398950669090e-03 7.11858913818990e-04 -7.97625404750610e-03 7.29441896566328e-04 -8.17326752247950e-03 7.47459183857948e-04 -8.37514723028480e-03 7.65921503379513e-04 -8.58201336687280e-03 7.84839847818001e-04 -8.79398909703460e-03 8.04225481409211e-04 -9.01120062773130e-03 8.24089946647377e-04 -9.23377728323630e-03 8.44445071160480e-04 -9.46185158213220e-03 8.65302974755698e-04 -9.69555931621090e-03 8.86676076638950e-04 -9.93503963132130e-03 9.08577102813116e-04 -1.01804351102150e-02 9.31019093659115e-04 -1.04318918574370e-02 9.54015411704521e-04 -1.06895595863160e-02 9.77579749584277e-04 -1.09535917080980e-02 1.00172613819840e-03 -1.12241454232880e-02 1.02646895507150e-03 -1.15013818152430e-02 1.05182293291907e-03 -1.17854659460800e-02 1.07780316842543e-03 -1.20765669549480e-02 1.10442513123966e-03 -1.23748581587350e-02 1.13170467319317e-03 -1.26805171552560e-02 1.15965803774579e-03 -1.29937259289910e-02 1.18830186966634e-03 -1.33146709594370e-02 1.21765322495138e-03 -1.36435433321350e-02 1.24772958099090e-03 -1.39805388524390e-02 1.27854884698451e-03 -1.43258581620940e-02 1.31012937461693e-03 -1.46797068586970e-02 1.34248996899624e-03 -1.50422956181070e-02 1.37564989986416e-03 -1.54138403198750e-02 1.40962891308382e-03 -1.57945621757750e-02 1.44444724241212e-03 -1.61846878615170e-02 1.48012562156300e-03 -1.65844496516970e-02 1.51668529657101e-03 -1.69940855580930e-02 1.55414803846049e-03 -1.74138394713780e-02 1.59253615622847e-03 -1.78439613063210e-02 1.63187251015076e-03 -1.82847071505880e-02 1.67218052541644e-03 -1.87363394172070e-02 1.71348420610213e-03 -1.91991270008120e-02 1.75580814949129e-03 -1.96733454377320e-02 1.79917756075026e-03 -2.01592770700440e-02 1.84361826796782e-03 -2.06572112136740e-02 1.88915673756846e-03 -2.11674443306520e-02 1.93582009010796e-03 -2.16902802056190e-02 1.98363611646211e-03 -2.22260301266980e-02 2.03263329441652e-03 -2.27750130708270e-02 2.08284080567013e-03 -2.33375558936770e-02 2.13428855325990e-03 -2.39139935242510e-02 2.18700717942057e-03 -2.45046691643000e-02 2.24102808388708e-03 -2.51099344926580e-02 2.29638344265347e-03 -2.57301498746260e-02 2.35310622719873e-03 -2.63656845765300e-02 2.41123022419079e-03 -2.70169169855700e-02 2.47079005568269e-03 -2.76842348351130e-02 2.53182119981085e-03 -2.83680354355410e-02 2.59436001201006e-03 -2.90687259107990e-02 2.65844374675849e-03 -2.97867234407950e-02 2.72411057986418e-03 -3.05224555097830e-02 2.79139963130885e-03 -3.12763601608750e-02 2.86035098866284e-03 -3.20488862568480e-02 2.93100573108510e-03 -3.28404937473920e-02 3.00340595392321e-03 -3.36516539429530e-02 3.07759479393012e-03 -3.44828497953440e-02 3.15361645511251e-03 -3.53345761852890e-02 3.23151623522596e-03 -3.62073402170660e-02 3.31134055293624e-03 -3.71016615204270e-02 3.39313697566155e-03 -3.80180725599820e-02 3.47695424811490e-03 -3.89571189522130e-02 3.56284232156381e-03 -3.99193597903330e-02 3.65085238382688e-03 -4.09053679771540e-02 3.74103689002548e-03 -4.19157305661900e-02 3.83344959411155e-03 -4.29510491111750e-02 3.92814558119008e-03 -4.40119400242210e-02 4.02518130066060e-03 -4.50990349428190e-02 4.12461460019443e-03 -4.62129811059070e-02 4.22650476057352e-03 -4.73544417392220e-02 4.33091253141398e-03 -4.85240964501810e-02 4.43790016779420e-03 -4.97226416325010e-02 4.54753146781668e-03 -5.09507908808230e-02 4.65987181112418e-03 -5.22092754155800e-02 4.77498819839828e-03 -5.34988445183450e-02 4.89294929186870e-03 -5.48202659779480e-02 5.01382545685541e-03 -5.61743265476030e-02 5.13768880437740e-03 -5.75618324133290e-02 5.26461323485418e-03 -5.89836096739380e-02 5.39467448293159e-03 -6.04405048328840e-02 5.52795016346122e-03 -6.19333853022570e-02 5.66451981866790e-03 -6.34631399192220e-02 5.80446496653747e-03 -6.50306794752270e-02 5.94786915045731e-03 -6.66369372582650e-02 6.09481799014909e-03 -6.82828696085440e-02 6.24539923392659e-03 -6.99694564878750e-02 6.39970281231863e-03 -7.16977020631260e-02 6.55782089309656e-03 -7.34686353040850e-02 6.71984793774520e-03 -7.52833105960960e-02 6.88588075942123e-03 -7.71428083678200e-02 7.05601858244239e-03 -7.90482357345050e-02 7.23036310335218e-03 -8.10007271571470e-02 7.40901855360675e-03 -8.30014451179280e-02 7.59209176393423e-03 -8.50515808123410e-02 7.77969223041579e-03 -8.71523548584060e-02 7.97193218234135e-03 -8.93050180234090e-02 8.16892665189490e-03 -9.15108519685870e-02 8.37079354572528e-03 -9.37711700122110e-02 8.57765371846270e-03 -9.60873179115130e-02 8.78963104824164e-03 -9.84606746639270e-02 9.00685251429416e-03 -1.00892653328130e-01 9.22944827667968e-03 -1.03384701865330e-01 9.45755175822414e-03 -1.05938304001400e-01 9.69129972873204e-03 -1.08554980110240e-01 9.93083239155887e-03 -1.11236288118960e-01 1.01762934726169e-02 -1.13983824435500e-01 1.04278303118878e-02 -1.16799224899060e-01 1.06855939575456e-02 -1.19684165754060e-01 1.09497392627683e-02 -1.22640364648190e-01 1.12204249853297e-02 -1.25669581655000e-01 1.14978138900800e-02 -1.28773620321880e-01 1.17820728544075e-02 -1.31954328743830e-01 1.20733729767959e-02 -1.35213600663800e-01 1.23718896885841e-02 -1.38553376600200e-01 1.26778028690509e-02 -1.41975645002220e-01 1.29912969639487e-02 -1.45482443433780e-01 1.33125611076079e-02 -1.49075859786590e-01 1.36417892487583e-02 -1.52758033523320e-01 1.39791802801985e-02 -1.56531156951350e-01 1.43249381724765e-02 -1.60397476528040e-01 1.46792721117242e-02 -1.64359294198290e-01 1.50423966418117e-02 -1.68418968764980e-01 1.54145318110119e-02 -1.72578917293480e-01 1.57959033233220e-02 -1.76841616550630e-01 1.61867426946686e-02 -1.81209604479430e-01 1.65872874141641e-02 -1.85685481710070e-01 1.69977811106367e-02 -1.90271913108310e-01 1.74184737246543e-02 -1.94971629362080e-01 1.78496216862609e-02 -1.99787428607330e-01 1.82914880986612e-02 -2.04722178093930e-01 1.87443429281211e-02 -2.09778815892850e-01 1.92084632003118e-02 -2.14960352645400e-01 1.96841332033945e-02 -2.20269873355740e-01 2.01716446981088e-02 -2.25710539227630e-01 2.06712971351599e-02 -2.31285589546550e-01 2.11833978802065e-02 -2.36998343608350e-01 2.17082624467420e-02 -2.42852202695480e-01 2.22462147372092e-02 -2.48850652102060e-01 2.27975872926464e-02 -2.54997263208980e-01 2.33627215512049e-02 -2.61295695610240e-01 2.39419681158580e-02 -2.67749699291810e-01 2.45356870316341e-02 -2.74363116864320e-01 2.51442480726915e-02 -2.81139885850870e-01 2.57680310395473e-02 -2.88084041031390e-01 2.64074260667514e-02 -2.95199716844860e-01 2.70628339412901e-02 -3.02491149850930e-01 2.77346664319386e-02 -3.09962681252250e-01 2.84233466297832e-02 -3.17618759479180e-01 2.91293093000304e-02 -3.25463942838310e-01 2.98530012451878e-02 -3.33502902226420e-01 3.05948816795804e-02 -3.41740423911410e-01 3.13554226150746e-02 -3.50181412382020e-01 3.21351092577345e-02 -3.58830893267860e-01 3.29344404149232e-02 -3.67694016331580e-01 3.37539289122586e-02 -3.76776058534970e-01 3.45941020194022e-02 -3.86082427180780e-01 3.54555018835300e-02 -3.95618663132140e-01 3.63386859688498e-02 -4.05390444111510e-01 3.72442275000565e-02 -4.15403588081060e-01 3.81727159072221e-02 -4.25664056706670e-01 3.91247572687573e-02 -4.36177958907320e-01 4.01009747485488e-02 -4.46951554492330e-01 4.11020090222558e-02 -4.57991257888290e-01 4.21285186868505e-02 -4.69303641958130e-01 4.31811806460709e-02 -4.80895441914500e-01 4.42606904630972e-02 -4.92773559329790e-01 4.53677626698578e-02 -5.04945066245230e-01 4.65031310204644e-02 -5.17417209381490e-01 4.76675486737189e-02 -5.30197414453210e-01 4.88617882869367e-02 -5.43293290590210e-01 5.00866419999598e-02 -5.56712634867780e-01 5.13429212844766e-02 -5.70463436949020e-01 5.26314566293214e-02 -5.84553883841660e-01 5.39530970273100e-02 -5.98992364772550e-01 5.53087092232970e-02 -6.13787476182430e-01 5.66991766763246e-02 -6.28948026844140e-01 5.81253981810367e-02 -6.44483043107190e-01 5.95882860845925e-02 -6.60401774271930e-01 6.10887640252994e-02 -6.76713698096450e-01 6.26277641077801e-02 -6.93428526439430e-01 6.42062234165874e-02 -7.10556211042490e-01 6.58250797558761e-02 -7.28106949455240e-01 6.74852664866738e-02 -7.46091191106780e-01 6.91877063156602e-02 -7.64519643527120e-01 7.09333038699866e-02 -7.83403278722240e-01 7.27229368717890e-02 -8.02753339706680e-01 7.45574457035771e-02 -8.22581347197430e-01 7.64376211322501e-02 -8.42899106473210e-01 7.83641899351941e-02 -8.63718714403100e-01 8.03377981477322e-02 -8.85052566648850e-01 8.23589916278344e-02 -9.06913365045080e-01 8.44281936129753e-02 -9.29314125161690e-01 8.65456789268897e-02 -9.52268184053190e-01 8.87115444830932e-02 -9.75789208199300e-01 9.09256757303218e-02 -9.99891201641820e-01 9.31877086959987e-02 -1.02458851432240e+00 9.54969873121882e-02 -1.04989585062610e+00 9.78525157594294e-02 -1.07582827813660e+00 1.00252905643976e-01 -1.10240123660660e+00 1.02696317941233e-01 -1.12963054715080e+00 1.05180399799740e-01 -1.15753242166540e+00 1.07702216517834e-01 -1.18612347248050e+00 1.10258179285749e-01 -1.21542072225080e+00 1.12843969642035e-01 -1.24544161409040e+00 1.15454462031709e-01 -1.27620402195840e+00 1.18083646381231e-01 -1.30772626130080e+00 1.20724553224871e-01 -1.34002709995490e+00 1.23369184623030e-01 -1.37312576932380e+00 1.26008454892094e-01 -1.40704197582610e+00 1.28632145990120e-01 -1.44179591262900e+00 1.31228883228015e-01 -1.47740827167090e+00 1.33786137737057e-01 -1.51390025598120e+00 1.36290262727621e-01 -1.55129359230390e+00 1.38726570903325e-01 -1.58961054403390e+00 1.41079460299219e-01 -1.62887392447150e+00 1.43332595120750e-01 -1.66910711040590e+00 1.45469146677839e-01 -1.71033405603300e+00 1.47472097045253e-01 -1.75257930721700e+00 1.49324604461570e-01 -1.79586801610520e+00 1.51010424588782e-01 -1.84022595610300e+00 1.52514375573252e-01 -1.88567953721880e+00 1.53822827504896e-01 -1.93225582178810e+00 1.54924188705360e-01 -1.97998254058630e+00 1.55809352897909e-01 -2.02888810933870e+00 1.56472063678704e-01 -2.07900164563940e+00 1.56909147205289e-01 -2.13035298628670e+00 1.57120562576649e-01 -2.18297270504800e+00 1.57109224663516e-01 -2.23689213086270e+00 1.56880569871632e-01 -2.29214336649500e+00 1.56441866762374e-01 -2.34875930764740e+00 1.55801349323430e-01 -2.40677366254630e+00 1.54967448231612e-01 -2.46622097201120e+00 1.53948507823575e-01 -2.52713663001980e+00 1.52752863128269e-01 -2.58955690478130e+00 1.51388819761537e-01 -2.65351896032940e+00 1.49864652076221e-01 -2.71906087864960e+00 1.48188608497914e-01 -2.78622168235220e+00 1.46368915150876e-01 -2.85504135790630e+00 1.44413779122758e-01 -2.92556087944660e+00 1.42331390550665e-01 -2.99782223316890e+00 1.40129922900146e-01 -3.07186844232820e+00 1.37817530780616e-01 -3.14774359285370e+00 1.35402344632814e-01 -3.22549285959720e+00 1.32892461666202e-01 -3.30516253322930e+00 1.30295932530245e-01 -3.38680004780000e+00 1.27620743384291e-01 -3.47045400898070e+00 1.24874793288719e-01 -3.55617422300250e+00 1.22065867165869e-01 -3.64401172631070e+00 1.19201604950879e-01 -3.73401881595050e+00 1.16289467938109e-01 -3.82624908070450e+00 1.13336703687669e-01 -3.92075743299790e+00 1.10350311148964e-01 -4.01760014159300e+00 1.07337007846219e-01 -4.11683486509030e+00 1.04303201029700e-01 -4.21852068625800e+00 1.01254964615780e-01 -4.32271814720860e+00 9.81980235186488e-02 -4.42948928544470e+00 9.51377466330415e-02 -4.53889767079510e+00 9.20791492835435e-02 -4.65100844326380e+00 8.90269054398800e-02 -4.76588835181240e+00 8.59853694388456e-02 -4.88360579410220e+00 8.29586063815723e-02 -5.00423085721650e+00 7.99504298195851e-02 -5.12783535938970e+00 7.69644448350135e-02 -5.25449289276670e+00 7.40040941932920e-02 -5.38427886721800e+00 7.10727049362628e-02 -5.51727055523830e+00 6.81735326267490e-02 -5.65354713795270e+00 6.53098004846721e-02 -5.79318975226010e+00 6.24847308904871e-02 -5.93628153914090e+00 5.97015671763842e-02 -6.08290769315770e+00 5.69635842560659e-02 -6.23315551317870e+00 5.42740874103876e-02 -6.38711445435420e+00 5.16363993765862e-02 -6.54487618137680e+00 4.90538366988301e-02 -6.70653462305680e+00 4.65296770042914e-02 -6.87218602824630e+00 4.40671191406151e-02 -7.04192902314400e+00 4.16692401827194e-02 -7.21586467001560e+00 3.93389486100598e-02 -7.39409652736500e+00 3.70789398134302e-02 -7.57673071159090e+00 3.48916541746949e-02 -7.76387596016720e+00 3.27792399689471e-02 -7.95564369638330e+00 3.07435224530983e-02 -8.15214809568400e+00 2.87859800282530e-02 -8.35350615364740e+00 2.69077279117053e-02 -8.55983775564250e+00 2.51095093561440e-02 -8.77126574820690e+00 2.33916941245947e-02 -8.98791601218760e+00 2.17542836762513e-02 -9.20991753768860e+00 2.01969223389554e-02 -9.43740250086950e+00 1.87189136323521e-02 -9.67050634264100e+00 1.73192408518425e-02 -9.90936784930420e+00 1.59965910168175e-02 -1.01541292351820e+01 1.47493813163287e-02 -1.04049362272910e+01 1.35757872414963e-02 -1.06619381521050e+01 1.24737716679310e-02 -1.09252880244620e+01 1.14411142358991e-02 -1.11951426386660e+01 1.04754404653333e-02 -1.14716626618410e+01 9.57425013244713e-03 -1.17550127295890e+01 8.73494452153946e-03 -1.20453615440100e+01 7.95485224717440e-03 -1.23428819741470e+01 7.23125341684062e-03 -1.26477511589080e+01 6.56140197172847e-03 -1.29601506125330e+01 5.94254610173358e-03 -1.32802663326630e+01 5.37194668601292e-03 -1.36082889110800e+01 4.84689378564313e-03 -1.39444136471830e+01 4.36472065236285e-03 -1.42888406642690e+01 3.92281965938519e-03 -1.46417750286760e+01 3.51864093592167e-03 -1.50034268718840e+01 3.14972816040186e-03 -1.53740115156200e+01 2.81370819210242e-03 -1.57537496000560e+01 2.50828577515797e-03 -1.61428672151770e+01 2.23125733893687e-03 -1.65415960353920e+01 1.98051772297682e-03 -1.69501734574660e+01 1.75406222150548e-03 -1.73688427418660e+01 1.54998766351602e-03 -1.77978531575900e+01 1.36649263819768e-03 -1.82374601305820e+01 1.20187697002272e-03 -1.86879253958070e+01 1.05454054144837e-03 -1.91495171530840e+01 9.22981554299949e-04 -1.96225102267650e+01 8.05794313732650e-04 -2.01071862293660e+01 7.01666611441180e-04 -2.06038337292320e+01 6.09376777673599e-04 -2.11127484223440e+01 5.27790464775635e-04 -2.16342333083750e+01 4.55857218364993e-04 -2.21685988710920e+01 3.92606886554539e-04 -2.27161632632080e+01 3.37145916990343e-04 -2.32772524958100e+01 2.88653507187777e-04 -2.38522006324560e+01 2.46378193402543e-04 -2.44413499880780e+01 2.09632485549891e-04 -2.50450513327830e+01 1.77792409292547e-04 -2.56636641007030e+01 1.50291348733673e-04 -2.62975566039900e+01 1.26614994818104e-04 -2.69471062521090e+01 1.06298965482771e-04 -2.76126997765360e+01 8.89256612110038e-05 -2.82947334610160e+01 7.41207550832144e-05 -2.89936133775030e+01 6.15498181275565e-05 -2.97097556279280e+01 5.09150857856550e-05 -3.04435865919380e+01 4.19523706201989e-05 -3.11955431807580e+01 3.44281255937312e-05 -3.19660730973230e+01 2.81366613596386e-05 -3.27556351028270e+01 2.28975200463623e-05 -3.35646992898670e+01 1.85530070047047e-05 -3.43937473623270e+01 1.49658809472375e-05 -3.52432729221760e+01 1.20172018591402e-05 -3.61137817633540e+01 9.60433502251876e-06 -3.70057921729090e+01 7.63910849130426e-06 -3.79198352395800e+01 6.04612039996140e-06 -3.88564551699970e+01 4.76119160339696e-06 -3.98162096126960e+01 3.72995834245469e-06 -4.07996699901300e+01 2.90659892150912e-06 -4.18074218388860e+01 2.25268778156088e-06 -4.28400651583060e+01 1.73616986060481e-06 -4.38982147677160e+01 1.33044775670368e-06 -4.49825006724790e+01 1.01357394902924e-06 -4.60935684390890e+01 7.67540186237710e-07 -4.72320795795350e+01 5.77656115408853e-07 -4.83987119451490e+01 4.32009291571440e-07 -4.95941601301950e+01 3.20998868730704e-07 -5.08191358854100e+01 2.36935517866841e-07 -5.20743685417800e+01 1.73700433941712e-07 -5.33606054447620e+01 1.26456670116422e-07 -5.46786123992480e+01 9.14064603736330e-08 -5.60291741255090e+01 6.55886488392839e-08 -5.74130947264090e+01 4.67108230178335e-08 -5.88311981661510e+01 3.30112373545810e-08 -6.02843287608550e+01 2.31461025019616e-08 -6.17733516812480e+01 1.60982951201805e-08 -6.32991534677750e+01 1.11040050527108e-08 -6.48626425584290e+01 7.59427491402966e-09 -6.64647498296220e+01 5.14879634905543e-09 -6.81064291504140e+01 3.45970627334905e-09 -6.97886579504290e+01 2.30345744403145e-09 -7.15124378018050e+01 0.00000000000000e+00 -7.32787950155100e+01 0.00000000000000e+00 -7.50887812523930e+01 0.00000000000000e+00 -7.69434741493270e+01 0.00000000000000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi43.inp b/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi43.inp deleted file mode 100644 index b2c4d756c..000000000 --- a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/psi43.inp +++ /dev/null @@ -1,525 +0,0 @@ -2.15517241379310e-04 3.44498511992821e-07 -2.20840517241380e-04 3.61726913582449e-07 -2.26295278017240e-04 3.79816909086132e-07 -2.31884771384270e-04 3.98811586893046e-07 -2.37612325237460e-04 4.18756211852096e-07 -2.43481349670820e-04 4.39698270219505e-07 -2.49495339007690e-04 4.61687643536257e-07 -2.55657873881180e-04 4.84776708204032e-07 -2.61972623366050e-04 5.09020459928109e-07 -2.68443347163190e-04 5.34476644753758e-07 -2.75073897838120e-04 5.61205896610583e-07 -2.81868223114720e-04 5.89271881735774e-07 -2.88830368225660e-04 6.18741450320158e-07 -2.95964478320830e-04 6.49684795737655e-07 -3.03274800935350e-04 6.82175621738031e-07 -3.10765688518460e-04 7.16291318000788e-07 -3.18441601024860e-04 7.52113144468748e-07 -3.26307108570180e-04 7.89726424899680e-07 -3.34366894151860e-04 8.29220750097958e-07 -3.42625756437410e-04 8.70690191309235e-07 -3.51088612621420e-04 9.14233524287501e-07 -3.59760501353160e-04 9.59954464567227e-07 -3.68646585736590e-04 1.00796191450157e-06 -3.77752156404280e-04 1.05837022265517e-06 -3.87082634667470e-04 1.11129945616863e-06 -3.96643575743750e-04 1.16687568674422e-06 -4.06440672064620e-04 1.22523129093349e-06 -4.16479756664620e-04 1.28650526544225e-06 -4.26766806654240e-04 1.35084355820383e-06 -4.37307946778600e-04 1.41839941600911e-06 -4.48109453064030e-04 1.48933374952145e-06 -4.59177756554710e-04 1.56381551654590e-06 -4.70519447141610e-04 1.64202212446546e-06 -4.82141277486010e-04 1.72413985280300e-06 -4.94050167039910e-04 1.81036429691541e-06 -5.06253206165800e-04 1.90090083387640e-06 -5.18757660358090e-04 1.99596511165824e-06 -5.31570974568940e-04 2.09578356277637e-06 -5.44700777640790e-04 2.20059394362215e-06 -5.58154886848520e-04 2.31064590076700e-06 -5.71941312553680e-04 2.42620156558521e-06 -5.86068262973750e-04 2.54753617861709e-06 -6.00544149069200e-04 2.67493874515160e-06 -6.15377589551210e-04 2.80871272359792e-06 -6.30577416013130e-04 2.94917674827935e-06 -6.46152678188650e-04 3.09666538837484e-06 -6.62112649339910e-04 3.25152994481347e-06 -6.78466831778610e-04 3.41413928702112e-06 -6.95224962523540e-04 3.58488073151259e-06 -7.12397019097870e-04 3.76416096441948e-06 -7.29993225469590e-04 3.95240701015422e-06 -7.48024058138690e-04 4.15006724851439e-06 -7.66500252374710e-04 4.35761248265142e-06 -7.85432808608370e-04 4.57553706044716e-06 -8.04832998980990e-04 4.80436005196853e-06 -8.24712374055830e-04 5.04462648580396e-06 -8.45082769695000e-04 5.29690864722820e-06 -8.65956314106470e-04 5.56180744128420e-06 -8.87345435064900e-04 5.83995382403245e-06 -9.09262867311000e-04 6.13201030537151e-06 -9.31721660133590e-04 6.43867252701290e-06 -9.54735185138880e-04 6.76067091936732e-06 -9.78317144211820e-04 7.09877244128560e-06 -1.00248157767380e-03 7.45378240680301e-06 -1.02724287264240e-03 7.82654640322880e-06 -1.05261577159670e-03 8.21795230516250e-06 -1.07861538115510e-03 8.62893238921655e-06 -1.10525718106960e-03 9.06046555449287e-06 -1.13255703344200e-03 9.51357965410118e-06 -1.16053119216810e-03 9.98935394326204e-06 -1.18919631261460e-03 1.04889216498415e-05 -1.21856946153620e-03 1.10134726734117e-05 -1.24866812723610e-03 1.15642564192981e-05 -1.27951022997890e-03 1.21425847743337e-05 -1.31111413265940e-03 1.27498352314227e-05 -1.34349865173600e-03 1.33874541703495e-05 -1.37668306843390e-03 1.40569603026357e-05 -1.41068714022420e-03 1.47599482886750e-05 -1.44553111258780e-03 1.54980925357207e-05 -1.48123573106870e-03 1.62731511858048e-05 -1.51782225362610e-03 1.70869703030582e-05 -1.55531246329070e-03 1.79414882704193e-05 -1.59372868113390e-03 1.88387404061912e-05 -1.63309377955790e-03 1.97808638114347e-05 -1.67343119591300e-03 2.07701024597548e-05 -1.71476494645210e-03 2.18088125415804e-05 -1.75711964062940e-03 2.28994680756707e-05 -1.80052049575300e-03 2.40446668012015e-05 -1.84499335199810e-03 2.52471363644697e-05 -1.89056468779240e-03 2.65097408149302e-05 -1.93726163558090e-03 2.78354874260360e-05 -1.98511199797980e-03 2.92275338571227e-05 -2.03414426432990e-03 3.06891956733766e-05 -2.08438762765880e-03 3.22239542417893e-05 -2.13587200206200e-03 3.38354650218938e-05 -2.18862804051290e-03 3.55275662710256e-05 -2.24268715311360e-03 3.73042881847994e-05 -2.29808152579550e-03 3.91698624945933e-05 -2.35484413948260e-03 4.11287325448477e-05 -2.41300878972790e-03 4.31855638741792e-05 -2.47261010683410e-03 4.53452553254983e-05 -2.53368357647290e-03 4.76129507115153e-05 -2.59626556081180e-03 4.99940510634955e-05 -2.66039332016390e-03 5.24942274922740e-05 -2.72610503517190e-03 5.51194346922458e-05 -2.79343982954070e-03 5.78759251203891e-05 -2.86243779333030e-03 6.07702638840849e-05 -2.93314000682560e-03 6.38093443731165e-05 -3.00558856499420e-03 6.70004046730889e-05 -3.07982660254950e-03 7.03510447992202e-05 -3.15589831963250e-03 7.38692447915739e-05 -3.23384900812740e-03 7.75633837147317e-05 -3.31372507862820e-03 8.14422596070530e-05 -3.39557408807030e-03 8.55151104270319e-05 -3.47944476804560e-03 8.97916360464686e-05 -3.56538705381630e-03 9.42820213427913e-05 -3.65345211404560e-03 9.89969604454095e-05 -3.74369238126250e-03 1.03947682193711e-04 -3.83616158307970e-03 1.09145976867229e-04 -3.93091477418180e-03 1.14604224251478e-04 -4.02800836910410e-03 1.20335423106156e-04 -4.12750017582090e-03 1.26353222105701e-04 -4.22944943016370e-03 1.32671952325722e-04 -4.33391683108880e-03 1.39306661352454e-04 -4.44096457681670e-03 1.46273149096233e-04 -4.55065640186400e-03 1.53588005394013e-04 -4.66305761499010e-03 1.61268649490209e-04 -4.77823513808030e-03 1.69333371489614e-04 -4.89625754599090e-03 1.77801375880653e-04 -5.01719510737690e-03 1.86692827232382e-04 -5.14111982652910e-03 1.96028898173532e-04 -5.26810548624440e-03 2.05831819767474e-04 -5.39822769175460e-03 2.16124934402440e-04 -5.53156391574090e-03 2.26932751322546e-04 -5.66819354445970e-03 2.38281004931183e-04 -5.80819792500790e-03 2.50196716004753e-04 -5.95166041375560e-03 2.62708255962133e-04 -6.09866642597530e-03 2.75845414341721e-04 -6.24930348669690e-03 2.89639469645986e-04 -6.40366128281830e-03 3.04123263721249e-04 -6.56183171650400e-03 3.19331279848683e-04 -6.72390895990160e-03 3.35299724731058e-04 -6.88998951121120e-03 3.52066614569385e-04 -7.06017225213810e-03 3.69671865432717e-04 -7.23455850676590e-03 3.88157388134779e-04 -7.41325210188300e-03 4.07567187841332e-04 -7.59635942879950e-03 4.27947468643628e-04 -7.78398950669090e-03 4.49346743344626e-04 -7.97625404750610e-03 4.71815948716862e-04 -8.17326752247950e-03 4.95408566503894e-04 -8.37514723028480e-03 5.20180750450205e-04 -8.58201336687280e-03 5.46191459658965e-04 -8.79398909703460e-03 5.73502598591277e-04 -9.01120062773130e-03 6.02179164036498e-04 -9.23377728323630e-03 6.32289399398826e-04 -9.46185158213220e-03 6.63904956662988e-04 -9.69555931621090e-03 6.97101066418857e-04 -9.93503963132130e-03 7.31956716344187e-04 -1.01804351102150e-02 7.68554838563561e-04 -1.04318918574370e-02 8.06982506322741e-04 -1.06895595863160e-02 8.47331140438047e-04 -1.09535917080980e-02 8.89696726004479e-04 -1.12241454232880e-02 9.34180039867518e-04 -1.15013818152430e-02 9.80886889390398e-04 -1.17854659460800e-02 1.02992836307328e-03 -1.20765669549480e-02 1.08142109360741e-03 -1.23748581587350e-02 1.13548753397666e-03 -1.26805171552560e-02 1.19225624724734e-03 -1.29937259289910e-02 1.25186221071966e-03 -1.33146709594370e-02 1.31444713514393e-03 -1.36435433321350e-02 1.38015979974165e-03 -1.39805388524390e-02 1.44915640380424e-03 -1.43258581620940e-02 1.52160093568180e-03 -1.46797068586970e-02 1.59766556000995e-03 -1.50422956181070e-02 1.67753102406670e-03 -1.54138403198750e-02 1.76138708419027e-03 -1.57945621757750e-02 1.84943295323637e-03 -1.61846878615170e-02 1.94187777009437e-03 -1.65844496516970e-02 2.03894109233826e-03 -1.69940855580930e-02 2.14085341312867e-03 -1.74138394713780e-02 2.24785670354164e-03 -1.78439613063210e-02 2.36020498155374e-03 -1.82847071505880e-02 2.47816490896546e-03 -1.87363394172070e-02 2.60201641761085e-03 -1.91991270008120e-02 2.73205336625663e-03 -1.96733454377320e-02 2.86858422966485e-03 -2.01592770700440e-02 3.01193282135427e-03 -2.06572112136740e-02 3.16243905166956e-03 -2.11674443306520e-02 3.32045972283783e-03 -2.16902802056190e-02 3.48636936276776e-03 -2.22260301266980e-02 3.66056109942438e-03 -2.27750130708270e-02 3.84344757769509e-03 -2.33375558936770e-02 4.03546192074330e-03 -2.39139935242510e-02 4.23705873793840e-03 -2.45046691643000e-02 4.44871518153320e-03 -2.51099344926580e-02 4.67093205436215e-03 -2.57301498746260e-02 4.90423497092219e-03 -2.63656845765300e-02 5.14917557429937e-03 -2.70169169855700e-02 5.40633281151448e-03 -2.76842348351130e-02 5.67631426994679e-03 -2.83680354355410e-02 5.95975757762993e-03 -2.90687259107990e-02 6.25733187029938e-03 -2.97867234407950e-02 6.56973932820243e-03 -3.05224555097830e-02 6.89771678578742e-03 -3.12763601608750e-02 7.24203741751525e-03 -3.20488862568480e-02 7.60351250315075e-03 -3.28404937473920e-02 7.98299327601400e-03 -3.36516539429530e-02 8.38137285780551e-03 -3.44828497953440e-02 8.79958828373057e-03 -3.53345761852890e-02 9.23862262178255e-03 -3.62073402170660e-02 9.69950719017074e-03 -3.71016615204270e-02 1.01833238769998e-02 -3.80180725599820e-02 1.06912075664386e-02 -3.89571189522130e-02 1.12243486757311e-02 -3.99193597903330e-02 1.17839958075284e-02 -4.09053679771540e-02 1.23714585221360e-02 -4.19157305661900e-02 1.29881102343727e-02 -4.29510491111750e-02 1.36353912398595e-02 -4.40119400242210e-02 1.43148118756306e-02 -4.50990349428190e-02 1.50279558200683e-02 -4.62129811059070e-02 1.57764835372196e-02 -4.73544417392220e-02 1.65621358706303e-02 -4.85240964501810e-02 1.73867377918610e-02 -4.97226416325010e-02 1.82522023088983e-02 -5.09507908808230e-02 1.91605345396546e-02 -5.22092754155800e-02 2.01138359557491e-02 -5.34988445183450e-02 2.11143088017080e-02 -5.48202659779480e-02 2.21642606946410e-02 -5.61743265476030e-02 2.32661094093236e-02 -5.75618324133290e-02 2.44223878534654e-02 -5.89836096739380e-02 2.56357492377364e-02 -6.04405048328840e-02 2.69089724448335e-02 -6.19333853022570e-02 2.82449676015781e-02 -6.34631399192220e-02 2.96467818576249e-02 -6.50306794752270e-02 3.11176053738540e-02 -6.66369372582650e-02 3.26607775230510e-02 -6.82828696085440e-02 3.42797933046946e-02 -6.99694564878750e-02 3.59783099750266e-02 -7.16977020631260e-02 3.77601538926053e-02 -7.34686353040850e-02 3.96293275785649e-02 -7.52833105960960e-02 4.15900169896097e-02 -7.71428083678200e-02 4.36465990004539e-02 -7.90482357345050e-02 4.58036490908683e-02 -8.10007271571470e-02 4.80659492307752e-02 -8.30014451179280e-02 5.04384959549028e-02 -8.50515808123410e-02 5.29265086162635e-02 -8.71523548584060e-02 5.55354378052662e-02 -8.93050180234090e-02 5.82709739185007e-02 -9.15108519685870e-02 6.11390558580818e-02 -9.37711700122110e-02 6.41458798389837e-02 -9.60873179115130e-02 6.72979082779019e-02 -9.84606746639270e-02 7.06018787328473e-02 -1.00892653328130e-01 7.40648128578680e-02 -1.03384701865330e-01 7.76940253319737e-02 -1.05938304001400e-01 8.14971327153463e-02 -1.08554980110240e-01 8.54820621795164e-02 -1.11236288118960e-01 8.96570600508379e-02 -1.13983824435500e-01 9.40307000985739e-02 -1.16799224899060e-01 9.86118914903664e-02 -1.19684165754060e-01 1.03409886327934e-01 -1.22640364648190e-01 1.08434286665343e-01 -1.25669581655000e-01 1.13695050900780e-01 -1.28773620321880e-01 1.19202499419595e-01 -1.31954328743830e-01 1.24967319353061e-01 -1.35213600663800e-01 1.31000568301619e-01 -1.38553376600200e-01 1.37313676855318e-01 -1.41975645002220e-01 1.43918449726004e-01 -1.45482443433780e-01 1.50827065286395e-01 -1.49075859786590e-01 1.58052073290403e-01 -1.52758033523320e-01 1.65606390525936e-01 -1.56531156951350e-01 1.73503294127456e-01 -1.60397476528040e-01 1.81756412248970e-01 -1.64359294198290e-01 1.90379711769999e-01 -1.68418968764980e-01 1.99387482677436e-01 -1.72578917293480e-01 2.08794318733476e-01 -1.76841616550630e-01 2.18615094006837e-01 -1.81209604479430e-01 2.28864934807784e-01 -1.85685481710070e-01 2.39559186530498e-01 -1.90271913108310e-01 2.50713374866821e-01 -1.94971629362080e-01 2.62343160814514e-01 -1.99787428607330e-01 2.74464288861117e-01 -2.04722178093930e-01 2.87092527681795e-01 -2.09778815892850e-01 3.00243602645441e-01 -2.14960352645400e-01 3.13933119380604e-01 -2.20269873355740e-01 3.28176477609489e-01 -2.25710539227630e-01 3.42988774417642e-01 -2.31285589546550e-01 3.58384696088085e-01 -2.36998343608350e-01 3.74378397594265e-01 -2.42852202695480e-01 3.90983368816935e-01 -2.48850652102060e-01 4.08212286527856e-01 -2.54997263208980e-01 4.26076851170314e-01 -2.61295695610240e-01 4.44587607465193e-01 -2.67749699291810e-01 4.63753747884744e-01 -2.74363116864320e-01 4.83582898066917e-01 -2.81139885850870e-01 5.04080883295811e-01 -2.88084041031390e-01 5.25251475252120e-01 -2.95199716844860e-01 5.47096118346233e-01 -3.02491149850930e-01 5.69613635091547e-01 -3.09962681252250e-01 5.92799910163108e-01 -3.17618759479180e-01 6.16647553021151e-01 -3.25463942838310e-01 6.41145539271602e-01 -3.33502902226420e-01 6.66278831289993e-01 -3.41740423911410e-01 6.92027979061900e-01 -3.50181412382020e-01 7.18368702700013e-01 -3.58830893267860e-01 7.45271458693557e-01 -3.67694016331580e-01 7.72700992638558e-01 -3.76776058534970e-01 8.00615881995120e-01 -3.86082427180780e-01 8.28968073329090e-01 -3.95618663132140e-01 8.57702419522213e-01 -4.05390444111510e-01 8.86756223584140e-01 -4.15403588081060e-01 9.16058796969044e-01 -4.25664056706670e-01 9.45531041685257e-01 -4.36177958907320e-01 9.75085066979441e-01 -4.46951554492330e-01 1.00462385296032e+00 -4.57991257888290e-01 1.03404097517506e+00 -4.69303641958130e-01 1.06322040583058e+00 -4.80895441914500e-01 1.09203640901346e+00 -4.92773559329790e-01 1.12035354884530e+00 -5.04945066245230e-01 1.14802683093842e+00 -5.17417209381490e-01 1.17490199869575e+00 -5.30197414453210e-01 1.20081600681673e+00 -5.43293290590210e-01 1.22559769469627e+00 -5.56712634867780e-01 1.24906868209038e+00 -5.70463436949020e-01 1.27104450830392e+00 -5.84553883841660e-01 1.29133603405961e+00 -5.98992364772550e-01 1.30975112195162e+00 -6.13787476182430e-01 1.32609660679768e+00 -6.28948026844140e-01 1.34018056111834e+00 -6.44483043107190e-01 1.35181485326668e+00 -6.60401774271930e-01 1.36081798632572e+00 -6.76713698096450e-01 1.36701819478479e+00 -6.93428526439430e-01 1.37025676328938e+00 -7.10556211042490e-01 1.37039151765091e+00 -7.28106949455240e-01 1.36730042316478e+00 -7.46091191106780e-01 1.36088520964616e+00 -7.64519643527120e-01 1.35107492716485e+00 -7.83403278722240e-01 1.33782932213192e+00 -8.02753339706680e-01 1.32114191121885e+00 -8.22581347197430e-01 1.30104262176983e+00 -8.42899106473210e-01 1.27759986314878e+00 -8.63718714403100e-01 1.25092189511220e+00 -8.85052566648850e-01 1.22115736793023e+00 -9.06913365045080e-01 1.18849492547177e+00 -9.29314125161690e-01 1.15316178731228e+00 -9.52268184053190e-01 1.11542125902977e+00 -9.75789208199300e-01 1.07556916052789e+00 -9.99891201641820e-01 1.03392920895851e+00 -1.02458851432240e+00 9.90847443373204e-01 -1.04989585062610e+00 9.46685829641712e-01 -1.07582827813660e+00 9.01815232888675e-01 -1.10240123660660e+00 8.56607986893178e-01 -1.12963054715080e+00 8.11430321726814e-01 -1.15753242166540e+00 7.66634929005925e-01 -1.18612347248050e+00 7.22553945945286e-01 -1.21542072225080e+00 6.79492623620674e-01 -1.24544161409040e+00 6.37723938627050e-01 -1.27620402195840e+00 5.97484211217817e-01 -1.30772626130080e+00 5.58970060065821e-01 -1.34002709995490e+00 5.22336579772056e-01 -1.37312576932380e+00 4.87696789818649e-01 -1.40704197582610e+00 4.55122267800300e-01 -1.44179591262900e+00 4.24644834398593e-01 -1.47740827167090e+00 3.96259120195368e-01 -1.51390025598120e+00 3.69925827286831e-01 -1.55129359230390e+00 3.45575504108000e-01 -1.58961054403390e+00 3.23112680159441e-01 -1.62887392447150e+00 3.02420256109133e-01 -1.66910711040590e+00 2.83364108328478e-01 -1.71033405603300e+00 2.65797935133544e-01 -1.75257930721700e+00 2.49568428670854e-01 -1.79586801610520e+00 2.34520877969046e-01 -1.84022595610300e+00 2.20505263797892e-01 -1.88567953721880e+00 2.07382757761986e-01 -1.93225582178810e+00 1.95032262363564e-01 -1.97998254058630e+00 1.83356108842641e-01 -2.02888810933870e+00 1.72283643907890e-01 -2.07900164563940e+00 1.61771579775538e-01 -2.13035298628670e+00 1.51793329556129e-01 -2.18297270504800e+00 1.42327461219067e-01 -2.23689213086270e+00 1.33353472629704e-01 -2.29214336649500e+00 1.24851305683354e-01 -2.34875930764740e+00 1.16801379553125e-01 -2.40677366254630e+00 1.09184617596822e-01 -2.46622097201120e+00 1.01982468322436e-01 -2.52713663001980e+00 9.51769208620689e-02 -2.58955690478130e+00 8.87505154328863e-02 -2.65351896032940e+00 8.26863492709444e-02 -2.71906087864960e+00 7.69680785120588e-02 -2.78622168235220e+00 7.15799164683335e-02 -2.85504135790630e+00 6.65066287156327e-02 -2.92556087944660e+00 6.17335253728931e-02 -2.99782223316890e+00 5.72464509241369e-02 -3.07186844232820e+00 5.30317719141681e-02 -3.14774359285370e+00 4.90763628413205e-02 -3.22549285959720e+00 4.53675905770612e-02 -3.30516253322930e+00 4.18932976603889e-02 -3.38680004780000e+00 3.86417848409185e-02 -3.47045400898070e+00 3.56017932713071e-02 -3.55617422300250e+00 3.27624867692986e-02 -3.64401172631070e+00 3.01134345739215e-02 -3.73401881595050e+00 2.76445950017297e-02 -3.82624908070450e+00 2.53463003643988e-02 -3.92075743299790e+00 2.32092434371121e-02 -4.01760014159300e+00 2.12244656724782e-02 -4.11683486509030e+00 1.93833472448450e-02 -4.21852068625800e+00 1.76775988943770e-02 -4.32271814720860e+00 1.60992554297546e-02 -4.42948928544470e+00 1.46406706521963e-02 -4.53889767079510e+00 1.32945133889926e-02 -4.65100844326380e+00 1.20537642762041e-02 -4.76588835181240e+00 1.09117129090608e-02 -4.88360579410220e+00 9.86195498395526e-03 -5.00423085721650e+00 8.89838908502908e-03 -5.12783535938970e+00 8.01521281741848e-03 -5.25449289276670e+00 7.20691805401656e-03 -5.38427886721800e+00 6.46828513853235e-03 -5.51727055523830e+00 5.79437596994048e-03 -5.65354713795270e+00 5.18052597702017e-03 -5.79318975226010e+00 4.62233507109448e-03 -5.93628153914090e+00 4.11565773464524e-03 -6.08290769315770e+00 3.65659245779802e-03 -6.23315551317870e+00 3.24147076929793e-03 -6.38711445435420e+00 2.86684612092401e-03 -6.54487618137680e+00 2.52948287406339e-03 -6.70653462305680e+00 2.22634560681452e-03 -6.87218602824630e+00 1.95458891422425e-03 -7.04192902314400e+00 1.71154781934906e-03 -7.21586467001560e+00 1.49472885551659e-03 -7.39409652736500e+00 1.30180182659198e-03 -7.57673071159090e+00 1.13059220701004e-03 -7.76387596016720e+00 9.79074109732737e-04 -7.95564369638330e+00 8.45363729210765e-04 -8.15214809568400e+00 7.27713157319702e-04 -8.35350615364740e+00 6.24504471428920e-04 -8.55983775564250e+00 5.34244002903493e-04 -8.77126574820690e+00 4.55556708901296e-04 -8.98791601218760e+00 3.87180587900554e-04 -9.20991753768860e+00 3.27961097923950e-04 -9.43740250086950e+00 2.76845554310159e-04 -9.67050634264100e+00 2.32877499990478e-04 -9.90936784930420e+00 1.95191054857290e-04 -1.01541292351820e+01 1.63005261622774e-04 -1.04049362272910e+01 1.35618453502967e-04 -1.06619381521050e+01 1.12402674266038e-04 -1.09252880244620e+01 9.27981839288604e-05 -1.11951426386660e+01 7.63080840220080e-05 -1.14716626618410e+01 6.24930952488164e-05 -1.17550127295890e+01 5.09665179207796e-05 -1.20453615440100e+01 4.13894021146690e-05 -1.23428819741470e+01 3.34659503919688e-05 -1.26477511589080e+01 2.69391714290240e-05 -1.29601506125330e+01 2.15867982640968e-05 -1.32802663326630e+01 1.72174802626688e-05 -1.36082889110800e+01 1.36672536322275e-05 -1.39444136471830e+01 1.07962899212749e-05 -1.42888406642690e+01 8.48592730488420e-06 -1.46417750286760e+01 6.63594495770988e-06 -1.50034268718840e+01 5.16216408536068e-06 -1.53740115156200e+01 3.99422094076788e-06 -1.57537496000560e+01 3.07359052195637e-06 -1.61428672151770e+01 2.35186635576719e-06 -1.65415960353920e+01 1.78923424308836e-06 -1.69501734574660e+01 1.35312938087365e-06 -1.73688427418660e+01 1.01707026558231e-06 -1.77978531575900e+01 7.59636089393532e-07 -1.82374601305820e+01 0.00000000000000e+00 -1.86879253958070e+01 0.00000000000000e+00 -1.91495171530840e+01 0.00000000000000e+00 -1.96225102267650e+01 0.00000000000000e+00 -2.01071862293660e+01 0.00000000000000e+00 -2.06038337292320e+01 0.00000000000000e+00 -2.11127484223440e+01 0.00000000000000e+00 -2.16342333083750e+01 0.00000000000000e+00 -2.21685988710920e+01 0.00000000000000e+00 -2.27161632632080e+01 0.00000000000000e+00 -2.32772524958100e+01 0.00000000000000e+00 -2.38522006324560e+01 0.00000000000000e+00 -2.44413499880780e+01 0.00000000000000e+00 -2.50450513327830e+01 0.00000000000000e+00 -2.56636641007030e+01 0.00000000000000e+00 -2.62975566039900e+01 0.00000000000000e+00 -2.69471062521090e+01 0.00000000000000e+00 -2.76126997765360e+01 0.00000000000000e+00 -2.82947334610160e+01 0.00000000000000e+00 -2.89936133775030e+01 0.00000000000000e+00 -2.97097556279280e+01 0.00000000000000e+00 -3.04435865919380e+01 0.00000000000000e+00 -3.11955431807580e+01 0.00000000000000e+00 -3.19660730973230e+01 0.00000000000000e+00 -3.27556351028270e+01 0.00000000000000e+00 -3.35646992898670e+01 0.00000000000000e+00 -3.43937473623270e+01 0.00000000000000e+00 -3.52432729221760e+01 0.00000000000000e+00 -3.61137817633540e+01 0.00000000000000e+00 -3.70057921729090e+01 0.00000000000000e+00 -3.79198352395800e+01 0.00000000000000e+00 -3.88564551699970e+01 0.00000000000000e+00 -3.98162096126960e+01 0.00000000000000e+00 -4.07996699901300e+01 0.00000000000000e+00 -4.18074218388860e+01 0.00000000000000e+00 -4.28400651583060e+01 0.00000000000000e+00 -4.38982147677160e+01 0.00000000000000e+00 -4.49825006724790e+01 0.00000000000000e+00 -4.60935684390890e+01 0.00000000000000e+00 -4.72320795795350e+01 0.00000000000000e+00 -4.83987119451490e+01 0.00000000000000e+00 -4.95941601301950e+01 0.00000000000000e+00 -5.08191358854100e+01 0.00000000000000e+00 -5.20743685417800e+01 0.00000000000000e+00 -5.33606054447620e+01 0.00000000000000e+00 -5.46786123992480e+01 0.00000000000000e+00 -5.60291741255090e+01 0.00000000000000e+00 -5.74130947264090e+01 0.00000000000000e+00 -5.88311981661510e+01 0.00000000000000e+00 -6.02843287608550e+01 0.00000000000000e+00 -6.17733516812480e+01 0.00000000000000e+00 -6.32991534677750e+01 0.00000000000000e+00 -6.48626425584290e+01 0.00000000000000e+00 -6.64647498296220e+01 0.00000000000000e+00 -6.81064291504140e+01 0.00000000000000e+00 -6.97886579504290e+01 0.00000000000000e+00 -7.15124378018050e+01 0.00000000000000e+00 -7.32787950155100e+01 0.00000000000000e+00 -7.50887812523930e+01 0.00000000000000e+00 -7.69434741493270e+01 0.00000000000000e+00 diff --git a/data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/density.inp b/data/electronicStructure/pseudoPotential/z29/singleAtomData/density.inp similarity index 100% rename from data/electronicStructure/pseudoPotential/z29/oncv/singleAtomData/density.inp rename to data/electronicStructure/pseudoPotential/z29/singleAtomData/density.inp diff --git a/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi30.inp b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi30.inp new file mode 100644 index 000000000..df5124176 --- /dev/null +++ b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi30.inp @@ -0,0 +1,1335 @@ +1.00000000000000e-02 3.33855829720000e-02 +2.00000000000000e-02 6.67415121420000e-02 +3.00000000000000e-02 1.00038178330000e-01 +4.00000000000000e-02 1.33246061590000e-01 +5.00000000000000e-02 1.66335775580000e-01 +6.00000000000000e-02 1.99278111620000e-01 +7.00000000000000e-02 2.32044082360000e-01 +8.00000000000000e-02 2.64604965050000e-01 +9.00000000000000e-02 2.96932344090000e-01 +1.00000000000000e-01 3.28998153010000e-01 +1.10000000000000e-01 3.60774715700000e-01 +1.20000000000000e-01 3.92234786710000e-01 +1.30000000000000e-01 4.23351590720000e-01 +1.40000000000000e-01 4.54098860930000e-01 +1.50000000000000e-01 4.84450876380000e-01 +1.60000000000000e-01 5.14382498150000e-01 +1.70000000000000e-01 5.43869204240000e-01 +1.80000000000000e-01 5.72887123240000e-01 +1.90000000000000e-01 6.01413066540000e-01 +2.00000000000000e-01 6.29424559250000e-01 +2.10000000000000e-01 6.56899869470000e-01 +2.20000000000000e-01 6.83818036190000e-01 +2.30000000000000e-01 7.10158895480000e-01 +2.40000000000000e-01 7.35903105210000e-01 +2.50000000000000e-01 7.61032167950000e-01 +2.60000000000000e-01 7.85528452330000e-01 +2.70000000000000e-01 8.09375212570000e-01 +2.80000000000000e-01 8.32556606360000e-01 +2.90000000000000e-01 8.55057710940000e-01 +3.00000000000000e-01 8.76864537410000e-01 +3.10000000000000e-01 8.97964043290000e-01 +3.20000000000000e-01 9.18344143250000e-01 +3.30000000000000e-01 9.37993718100000e-01 +3.40000000000000e-01 9.56902621960000e-01 +3.50000000000000e-01 9.75061687710000e-01 +3.60000000000000e-01 9.92462730620000e-01 +3.70000000000000e-01 1.00909855030000e+00 +3.80000000000000e-01 1.02496293080000e+00 +3.90000000000000e-01 1.04005063920000e+00 +4.00000000000000e-01 1.05435742240000e+00 +4.10000000000000e-01 1.06788000220000e+00 +4.20000000000000e-01 1.08061606910000e+00 +4.30000000000000e-01 1.09256427380000e+00 +4.40000000000000e-01 1.10372421820000e+00 +4.50000000000000e-01 1.11409644400000e+00 +4.60000000000000e-01 1.12368242020000e+00 +4.70000000000000e-01 1.13248452960000e+00 +4.80000000000000e-01 1.14050605270000e+00 +4.90000000000000e-01 1.14775115220000e+00 +5.00000000000000e-01 1.15422485400000e+00 +5.10000000000000e-01 1.15993302920000e+00 +5.20000000000000e-01 1.16488237330000e+00 +5.30000000000000e-01 1.16908038500000e+00 +5.40000000000000e-01 1.17253534400000e+00 +5.50000000000000e-01 1.17525628770000e+00 +5.60000000000000e-01 1.17725298670000e+00 +5.70000000000000e-01 1.17853592000000e+00 +5.80000000000000e-01 1.17911624880000e+00 +5.90000000000000e-01 1.17900579010000e+00 +6.00000000000000e-01 1.17821698930000e+00 +6.10000000000000e-01 1.17676289180000e+00 +6.20000000000000e-01 1.17465711500000e+00 +6.30000000000000e-01 1.17191381880000e+00 +6.40000000000000e-01 1.16854767610000e+00 +6.50000000000000e-01 1.16457384300000e+00 +6.60000000000000e-01 1.16000792850000e+00 +6.70000000000000e-01 1.15486596360000e+00 +6.80000000000000e-01 1.14916437080000e+00 +6.90000000000000e-01 1.14291993290000e+00 +7.00000000000000e-01 1.13614976220000e+00 +7.10000000000000e-01 1.12887126880000e+00 +7.20000000000000e-01 1.12110212980000e+00 +7.30000000000000e-01 1.11286025820000e+00 +7.40000000000000e-01 1.10416377140000e+00 +7.50000000000000e-01 1.09503096080000e+00 +7.60000000000000e-01 1.08548026080000e+00 +7.70000000000000e-01 1.07553021830000e+00 +7.80000000000000e-01 1.06519946290000e+00 +7.90000000000000e-01 1.05450667650000e+00 +8.00000000000000e-01 1.04347056450000e+00 +8.10000000000000e-01 1.03210982630000e+00 +8.20000000000000e-01 1.02044312720000e+00 +8.30000000000000e-01 1.00848907030000e+00 +8.40000000000000e-01 9.96266168810000e-01 +8.50000000000000e-01 9.83792819870000e-01 +8.60000000000000e-01 9.71087278010000e-01 +8.70000000000000e-01 9.58167629860000e-01 +8.80000000000000e-01 9.45051769520000e-01 +8.90000000000000e-01 9.31757374620000e-01 +9.00000000000000e-01 9.18301883270000e-01 +9.10000000000000e-01 9.04702471810000e-01 +9.20000000000000e-01 8.90976033460000e-01 +9.30000000000000e-01 8.77139157890000e-01 +9.40000000000000e-01 8.63208111690000e-01 +9.50000000000000e-01 8.49198819890000e-01 +9.60000000000000e-01 8.35126848350000e-01 +9.70000000000000e-01 8.21007387310000e-01 +9.80000000000000e-01 8.06855235890000e-01 +9.90000000000000e-01 7.92684787640000e-01 +1.00000000000000e+00 7.78510017270000e-01 +1.01000000000000e+00 7.64344468330000e-01 +1.02000000000000e+00 7.50201242120000e-01 +1.03000000000000e+00 7.36092987660000e-01 +1.04000000000000e+00 7.22031892760000e-01 +1.05000000000000e+00 7.08029676310000e-01 +1.06000000000000e+00 6.94097581560000e-01 +1.07000000000000e+00 6.80246370700000e-01 +1.08000000000000e+00 6.66486320410000e-01 +1.09000000000000e+00 6.52827218630000e-01 +1.10000000000000e+00 6.39278362450000e-01 +1.11000000000000e+00 6.25848556990000e-01 +1.12000000000000e+00 6.12546115510000e-01 +1.13000000000000e+00 5.99378860530000e-01 +1.14000000000000e+00 5.86354125910000e-01 +1.15000000000000e+00 5.73478760150000e-01 +1.16000000000000e+00 5.60759130490000e-01 +1.17000000000000e+00 5.48201128120000e-01 +1.18000000000000e+00 5.35810174280000e-01 +1.19000000000000e+00 5.23591227230000e-01 +1.20000000000000e+00 5.11548790170000e-01 +1.21000000000000e+00 4.99686919910000e-01 +1.22000000000000e+00 4.88009236420000e-01 +1.23000000000000e+00 4.76518933000000e-01 +1.24000000000000e+00 4.65218787300000e-01 +1.25000000000000e+00 4.54111172860000e-01 +1.26000000000000e+00 4.43198071370000e-01 +1.27000000000000e+00 4.32481085370000e-01 +1.28000000000000e+00 4.21961451580000e-01 +1.29000000000000e+00 4.11640054570000e-01 +1.30000000000000e+00 4.01517440910000e-01 +1.31000000000000e+00 3.91593833590000e-01 +1.32000000000000e+00 3.81869146830000e-01 +1.33000000000000e+00 3.72343001020000e-01 +1.34000000000000e+00 3.63014737910000e-01 +1.35000000000000e+00 3.53883435890000e-01 +1.36000000000000e+00 3.44947925400000e-01 +1.37000000000000e+00 3.36206804270000e-01 +1.38000000000000e+00 3.27658453120000e-01 +1.39000000000000e+00 3.19301050600000e-01 +1.40000000000000e+00 3.11132588580000e-01 +1.41000000000000e+00 3.03150887080000e-01 +1.42000000000000e+00 2.95353609010000e-01 +1.43000000000000e+00 2.87738274660000e-01 +1.44000000000000e+00 2.80302275830000e-01 +1.45000000000000e+00 2.73042889680000e-01 +1.46000000000000e+00 2.65957292090000e-01 +1.47000000000000e+00 2.59042570710000e-01 +1.48000000000000e+00 2.52295737460000e-01 +1.49000000000000e+00 2.45713740620000e-01 +1.50000000000000e+00 2.39293476370000e-01 +1.51000000000000e+00 2.33031799810000e-01 +1.52000000000000e+00 2.26925535430000e-01 +1.53000000000000e+00 2.20971487030000e-01 +1.54000000000000e+00 2.15166447030000e-01 +1.55000000000000e+00 2.09507205240000e-01 +1.56000000000000e+00 2.03990556960000e-01 +1.57000000000000e+00 1.98613310570000e-01 +1.58000000000000e+00 1.93372294480000e-01 +1.59000000000000e+00 1.88264363470000e-01 +1.60000000000000e+00 1.83286404460000e-01 +1.61000000000000e+00 1.78435341730000e-01 +1.62000000000000e+00 1.73708141500000e-01 +1.63000000000000e+00 1.69101816060000e-01 +1.64000000000000e+00 1.64613427240000e-01 +1.65000000000000e+00 1.60240089480000e-01 +1.66000000000000e+00 1.55978972320000e-01 +1.67000000000000e+00 1.51827302470000e-01 +1.68000000000000e+00 1.47782365420000e-01 +1.69000000000000e+00 1.43841506580000e-01 +1.70000000000000e+00 1.40002132100000e-01 +1.71000000000000e+00 1.36261709310000e-01 +1.72000000000000e+00 1.32617766740000e-01 +1.73000000000000e+00 1.29067893950000e-01 +1.74000000000000e+00 1.25609741010000e-01 +1.75000000000000e+00 1.22241017720000e-01 +1.76000000000000e+00 1.18959492670000e-01 +1.77000000000000e+00 1.15762992080000e-01 +1.78000000000000e+00 1.12649398480000e-01 +1.79000000000000e+00 1.09616649250000e-01 +1.80000000000000e+00 1.06662735100000e-01 +1.81000000000000e+00 1.03785698410000e-01 +1.82000000000000e+00 1.00983631630000e-01 +1.83000000000000e+00 9.82546754800000e-02 +1.84000000000000e+00 9.55970173530000e-02 +1.85000000000000e+00 9.30088895520000e-02 +1.86000000000000e+00 9.04885676780000e-02 +1.87000000000000e+00 8.80343690320000e-02 +1.88000000000000e+00 8.56446510440000e-02 +1.89000000000000e+00 8.33178097900000e-02 +1.90000000000000e+00 8.10522787180000e-02 +1.91000000000000e+00 7.88465272160000e-02 +1.92000000000000e+00 7.66990596670000e-02 +1.93000000000000e+00 7.46084149320000e-02 +1.94000000000000e+00 7.25731655610000e-02 +1.95000000000000e+00 7.05919163360000e-02 +1.96000000000000e+00 6.86633027710000e-02 +1.97000000000000e+00 6.67859912800000e-02 +1.98000000000000e+00 6.49586789030000e-02 +1.99000000000000e+00 6.31800927090000e-02 +2.00000000000000e+00 6.14489893820000e-02 +2.01000000000000e+00 5.97641547720000e-02 +2.02000000000000e+00 5.81244032750000e-02 +2.03000000000000e+00 5.65285772240000e-02 +2.04000000000000e+00 5.49755464130000e-02 +2.05000000000000e+00 5.34642075550000e-02 +2.06000000000000e+00 5.19934837430000e-02 +2.07000000000000e+00 5.05623239250000e-02 +2.08000000000000e+00 4.91697023830000e-02 +2.09000000000000e+00 4.78146182150000e-02 +2.10000000000000e+00 4.64960948220000e-02 +2.11000000000000e+00 4.52131794030000e-02 +2.12000000000000e+00 4.39649424550000e-02 +2.13000000000000e+00 4.27504772770000e-02 +2.14000000000000e+00 4.15688994840000e-02 +2.15000000000000e+00 4.04193465240000e-02 +2.16000000000000e+00 3.93009772060000e-02 +2.17000000000000e+00 3.82129712300000e-02 +2.18000000000000e+00 3.71545287300000e-02 +2.19000000000000e+00 3.61248698130000e-02 +2.20000000000000e+00 3.51232341220000e-02 +2.21000000000000e+00 3.41488803880000e-02 +2.22000000000000e+00 3.32010860050000e-02 +2.23000000000000e+00 3.22791465990000e-02 +2.24000000000000e+00 3.13823756180000e-02 +2.25000000000000e+00 3.05101039140000e-02 +2.26000000000000e+00 2.96616793460000e-02 +2.27000000000000e+00 2.88364663830000e-02 +2.28000000000000e+00 2.80338457140000e-02 +2.29000000000000e+00 2.72532138700000e-02 +2.30000000000000e+00 2.64939828490000e-02 +2.31000000000000e+00 2.57555797500000e-02 +2.32000000000000e+00 2.50374464160000e-02 +2.33000000000000e+00 2.43390390760000e-02 +2.34000000000000e+00 2.36598280060000e-02 +2.35000000000000e+00 2.29992971900000e-02 +2.36000000000000e+00 2.23569439860000e-02 +2.37000000000000e+00 2.17322788030000e-02 +2.38000000000000e+00 2.11248247870000e-02 +2.39000000000000e+00 2.05341175030000e-02 +2.40000000000000e+00 1.99597046390000e-02 +2.41000000000000e+00 1.94011457010000e-02 +2.42000000000000e+00 1.88580117280000e-02 +2.43000000000000e+00 1.83298850010000e-02 +2.44000000000000e+00 1.78163587690000e-02 +2.45000000000000e+00 1.73170369750000e-02 +2.46000000000000e+00 1.68315339890000e-02 +2.47000000000000e+00 1.63594743460000e-02 +2.48000000000000e+00 1.59004924940000e-02 +2.49000000000000e+00 1.54542325450000e-02 +2.50000000000000e+00 1.50203480280000e-02 +2.51000000000000e+00 1.45985016580000e-02 +2.52000000000000e+00 1.41883650940000e-02 +2.53000000000000e+00 1.37896187230000e-02 +2.54000000000000e+00 1.34019514290000e-02 +2.55000000000000e+00 1.30250603820000e-02 +2.56000000000000e+00 1.26586508260000e-02 +2.57000000000000e+00 1.23024358710000e-02 +2.58000000000000e+00 1.19561362900000e-02 +2.59000000000000e+00 1.16194803280000e-02 +2.60000000000000e+00 1.12922035040000e-02 +2.61000000000000e+00 1.09740484260000e-02 +2.62000000000000e+00 1.06647646070000e-02 +2.63000000000000e+00 1.03641082880000e-02 +2.64000000000000e+00 1.00718422640000e-02 +2.65000000000000e+00 9.78773571090000e-03 +2.66000000000000e+00 9.51156402180000e-03 +2.67000000000000e+00 9.24310864560000e-03 +2.68000000000000e+00 8.98215692810000e-03 +2.69000000000000e+00 8.72850195810000e-03 +2.70000000000000e+00 8.48194241770000e-03 +2.71000000000000e+00 8.24228243530000e-03 +2.72000000000000e+00 8.00933144270000e-03 +2.73000000000000e+00 7.78290403650000e-03 +2.74000000000000e+00 7.56281984140000e-03 +2.75000000000000e+00 7.34890337810000e-03 +2.76000000000000e+00 7.14098393430000e-03 +2.77000000000000e+00 6.93889543880000e-03 +2.78000000000000e+00 6.74247633840000e-03 +2.79000000000000e+00 6.55156947880000e-03 +2.80000000000000e+00 6.36602198760000e-03 +2.81000000000000e+00 6.18568516080000e-03 +2.82000000000000e+00 6.01041435220000e-03 +2.83000000000000e+00 5.84006886510000e-03 +2.84000000000000e+00 5.67451184760000e-03 +2.85000000000000e+00 5.51361018940000e-03 +2.86000000000000e+00 5.35723442280000e-03 +2.87000000000000e+00 5.20525862450000e-03 +2.88000000000000e+00 5.05756032160000e-03 +2.89000000000000e+00 4.91402039870000e-03 +2.90000000000000e+00 4.77452300790000e-03 +2.91000000000000e+00 4.63895548140000e-03 +2.92000000000000e+00 4.50720824620000e-03 +2.93000000000000e+00 4.37917474030000e-03 +2.94000000000000e+00 4.25475133250000e-03 +2.95000000000000e+00 4.13383724280000e-03 +2.96000000000000e+00 4.01633446580000e-03 +2.97000000000000e+00 3.90214769620000e-03 +2.98000000000000e+00 3.79118425520000e-03 +2.99000000000000e+00 3.68335402000000e-03 +3.00000000000000e+00 3.57856935450000e-03 +3.01000000000000e+00 3.47674504210000e-03 +3.02000000000000e+00 3.37779822010000e-03 +3.03000000000000e+00 3.28164831570000e-03 +3.04000000000000e+00 3.18821698410000e-03 +3.05000000000000e+00 3.09742804800000e-03 +3.06000000000000e+00 3.00920743840000e-03 +3.07000000000000e+00 2.92348313770000e-03 +3.08000000000000e+00 2.84018512330000e-03 +3.09000000000000e+00 2.75924531400000e-03 +3.10000000000000e+00 2.68059751620000e-03 +3.11000000000000e+00 2.60417737330000e-03 +3.12000000000000e+00 2.52992231490000e-03 +3.13000000000000e+00 2.45777150830000e-03 +3.14000000000000e+00 2.38766581090000e-03 +3.15000000000000e+00 2.31954772430000e-03 +3.16000000000000e+00 2.25336134860000e-03 +3.17000000000000e+00 2.18905233940000e-03 +3.18000000000000e+00 2.12656786470000e-03 +3.19000000000000e+00 2.06585656350000e-03 +3.20000000000000e+00 2.00686850570000e-03 +3.21000000000000e+00 1.94955515230000e-03 +3.22000000000000e+00 1.89386931780000e-03 +3.23000000000000e+00 1.83976513260000e-03 +3.24000000000000e+00 1.78719800690000e-03 +3.25000000000000e+00 1.73612459540000e-03 +3.26000000000000e+00 1.68650276340000e-03 +3.27000000000000e+00 1.63829155280000e-03 +3.28000000000000e+00 1.59145115040000e-03 +3.29000000000000e+00 1.54594285580000e-03 +3.30000000000000e+00 1.50172905080000e-03 +3.31000000000000e+00 1.45877316990000e-03 +3.32000000000000e+00 1.41703967050000e-03 +3.33000000000000e+00 1.37649400540000e-03 +3.34000000000000e+00 1.33710259470000e-03 +3.35000000000000e+00 1.29883279940000e-03 +3.36000000000000e+00 1.26165289520000e-03 +3.37000000000000e+00 1.22553204710000e-03 +3.38000000000000e+00 1.19044028510000e-03 +3.39000000000000e+00 1.15634847960000e-03 +3.40000000000000e+00 1.12322831900000e-03 +3.41000000000000e+00 1.09105228590000e-03 +3.42000000000000e+00 1.05979363620000e-03 +3.43000000000000e+00 1.02942637680000e-03 +3.44000000000000e+00 9.99925244980000e-04 +3.45000000000000e+00 9.71265688230000e-04 +3.46000000000000e+00 9.43423844420000e-04 +3.47000000000000e+00 9.16376522570000e-04 +3.48000000000000e+00 8.90101184180000e-04 +3.49000000000000e+00 8.64575925030000e-04 +3.50000000000000e+00 8.39779457680000e-04 +3.51000000000000e+00 8.15691094090000e-04 +3.52000000000000e+00 7.92290729030000e-04 +3.53000000000000e+00 7.69558823710000e-04 +3.54000000000000e+00 7.47476390170000e-04 +3.55000000000000e+00 7.26024975760000e-04 +3.56000000000000e+00 7.05186648230000e-04 +3.57000000000000e+00 6.84943981170000e-04 +3.58000000000000e+00 6.65280039960000e-04 +3.59000000000000e+00 6.46178367990000e-04 +3.60000000000000e+00 6.27622973260000e-04 +3.61000000000000e+00 6.09598315360000e-04 +3.62000000000000e+00 5.92089292940000e-04 +3.63000000000000e+00 5.75081231390000e-04 +3.64000000000000e+00 5.58559870810000e-04 +3.65000000000000e+00 5.42511354490000e-04 +3.66000000000000e+00 5.26922217510000e-04 +3.67000000000000e+00 5.11779375920000e-04 +3.68000000000000e+00 4.97070115920000e-04 +3.69000000000000e+00 4.82782083510000e-04 +3.70000000000000e+00 4.68903274390000e-04 +3.71000000000000e+00 4.55422024200000e-04 +3.72000000000000e+00 4.42326998960000e-04 +3.73000000000000e+00 4.29607185730000e-04 +3.74000000000000e+00 4.17251883620000e-04 +3.75000000000000e+00 4.05250695050000e-04 +3.76000000000000e+00 3.93593517230000e-04 +3.77000000000000e+00 3.82270533840000e-04 +3.78000000000000e+00 3.71272206960000e-04 +3.79000000000000e+00 3.60589269240000e-04 +3.80000000000000e+00 3.50212716340000e-04 +3.81000000000000e+00 3.40133799490000e-04 +3.82000000000000e+00 3.30344018280000e-04 +3.83000000000000e+00 3.20835113630000e-04 +3.84000000000000e+00 3.11599061070000e-04 +3.85000000000000e+00 3.02628064110000e-04 +3.86000000000000e+00 2.93914547770000e-04 +3.87000000000000e+00 2.85451152350000e-04 +3.88000000000000e+00 2.77230727330000e-04 +3.89000000000000e+00 2.69246325550000e-04 +3.90000000000000e+00 2.61491197420000e-04 +3.91000000000000e+00 2.53958785310000e-04 +3.92000000000000e+00 2.46642718170000e-04 +3.93000000000000e+00 2.39536806190000e-04 +3.94000000000000e+00 2.32635035850000e-04 +3.95000000000000e+00 2.25931564740000e-04 +3.96000000000000e+00 2.19420716850000e-04 +3.97000000000000e+00 2.13096977760000e-04 +3.98000000000000e+00 2.06954990150000e-04 +3.99000000000000e+00 2.00989549380000e-04 +4.00000000000000e+00 1.95195599090000e-04 +4.01000000000000e+00 1.89568227030000e-04 +4.02000000000000e+00 1.84102660940000e-04 +4.03000000000000e+00 1.78794264700000e-04 +4.04000000000000e+00 1.73638534390000e-04 +4.05000000000000e+00 1.68631094520000e-04 +4.06000000000000e+00 1.63767694450000e-04 +4.07000000000000e+00 1.59044204790000e-04 +4.08000000000000e+00 1.54456614030000e-04 +4.09000000000000e+00 1.50001025180000e-04 +4.10000000000000e+00 1.45673652470000e-04 +4.11000000000000e+00 1.41470818240000e-04 +4.12000000000000e+00 1.37388949810000e-04 +4.13000000000000e+00 1.33424576640000e-04 +4.14000000000000e+00 1.29574327280000e-04 +4.15000000000000e+00 1.25834926620000e-04 +4.16000000000000e+00 1.22203193150000e-04 +4.17000000000000e+00 1.18676036270000e-04 +4.18000000000000e+00 1.15250453780000e-04 +4.19000000000000e+00 1.11923529300000e-04 +4.20000000000000e+00 1.08692429840000e-04 +4.21000000000000e+00 1.05554403440000e-04 +4.22000000000000e+00 1.02506776820000e-04 +4.23000000000000e+00 9.95469532740000e-05 +4.24000000000000e+00 9.66724103380000e-05 +4.25000000000000e+00 9.38806977550000e-05 +4.26000000000000e+00 9.11694353950000e-05 +4.27000000000000e+00 8.85363112390000e-05 +4.28000000000000e+00 8.59790795190000e-05 +4.29000000000000e+00 8.34955587570000e-05 +4.30000000000000e+00 8.10836299480000e-05 +4.31000000000000e+00 7.87412347840000e-05 +4.32000000000000e+00 7.64663739010000e-05 +4.33000000000000e+00 7.42571052630000e-05 +4.34000000000000e+00 7.21115424760000e-05 +4.35000000000000e+00 7.00278532060000e-05 +4.36000000000000e+00 6.80042576390000e-05 +4.37000000000000e+00 6.60390269690000e-05 +4.38000000000000e+00 6.41304819820000e-05 +4.39000000000000e+00 6.22769916240000e-05 +4.40000000000000e+00 6.04769716080000e-05 +4.41000000000000e+00 5.87288830890000e-05 +4.42000000000000e+00 5.70312313570000e-05 +4.43000000000000e+00 5.53825645920000e-05 +4.44000000000000e+00 5.37814726540000e-05 +4.45000000000000e+00 5.22265858590000e-05 +4.46000000000000e+00 5.07165738330000e-05 +4.47000000000000e+00 4.92501443870000e-05 +4.48000000000000e+00 4.78260424150000e-05 +4.49000000000000e+00 4.64430488880000e-05 +4.50000000000000e+00 4.50999797610000e-05 +4.51000000000000e+00 4.37956849940000e-05 +4.52000000000000e+00 4.25290475780000e-05 +4.53000000000000e+00 4.12989825760000e-05 +4.54000000000000e+00 4.01044362440000e-05 +4.55000000000000e+00 3.89443851140000e-05 +4.56000000000000e+00 3.78178351210000e-05 +4.57000000000000e+00 3.67238207670000e-05 +4.58000000000000e+00 3.56614042980000e-05 +4.59000000000000e+00 3.46296749150000e-05 +4.60000000000000e+00 3.36277480230000e-05 +4.61000000000000e+00 3.26547644490000e-05 +4.62000000000000e+00 3.17098897240000e-05 +4.63000000000000e+00 3.07923133730000e-05 +4.64000000000000e+00 2.99012482190000e-05 +4.65000000000000e+00 2.90359297490000e-05 +4.66000000000000e+00 2.81956154390000e-05 +4.67000000000000e+00 2.73795841220000e-05 +4.68000000000000e+00 2.65871353760000e-05 +4.69000000000000e+00 2.58175889330000e-05 +4.70000000000000e+00 2.50702840940000e-05 +4.71000000000000e+00 2.43445791980000e-05 +4.72000000000000e+00 2.36398510420000e-05 +4.73000000000000e+00 2.29554943590000e-05 +4.74000000000000e+00 2.22909213080000e-05 +4.75000000000000e+00 2.16455609590000e-05 +4.76000000000000e+00 2.10188588390000e-05 +4.77000000000000e+00 2.04102764420000e-05 +4.78000000000000e+00 1.98192907660000e-05 +4.79000000000000e+00 1.92453938680000e-05 +4.80000000000000e+00 1.86880924390000e-05 +4.81000000000000e+00 1.81469073620000e-05 +4.82000000000000e+00 1.76213733540000e-05 +4.83000000000000e+00 1.71110385240000e-05 +4.84000000000000e+00 1.66154639990000e-05 +4.85000000000000e+00 1.61342235540000e-05 +4.86000000000000e+00 1.56669032430000e-05 +4.87000000000000e+00 1.52131010420000e-05 +4.88000000000000e+00 1.47724265380000e-05 +4.89000000000000e+00 1.43445005590000e-05 +4.90000000000000e+00 1.39289548630000e-05 +4.91000000000000e+00 1.35254318240000e-05 +4.92000000000000e+00 1.31335841220000e-05 +4.93000000000000e+00 1.27530744520000e-05 +4.94000000000000e+00 1.23835752490000e-05 +4.95000000000000e+00 1.20247683840000e-05 +4.96000000000000e+00 1.16763449060000e-05 +4.97000000000000e+00 1.13380047700000e-05 +4.98000000000000e+00 1.10094565830000e-05 +4.99000000000000e+00 1.06904173610000e-05 +5.00000000000000e+00 1.03806122920000e-05 +5.01000000000000e+00 1.00797744860000e-05 +5.02000000000000e+00 9.78764475200000e-06 +5.03000000000000e+00 9.50397137830000e-06 +5.04000000000000e+00 9.22850991070000e-06 +5.05000000000000e+00 8.96102295490000e-06 +5.06000000000000e+00 8.70127997370000e-06 +5.07000000000000e+00 8.44905707850000e-06 +5.08000000000000e+00 8.20413684220000e-06 +5.09000000000000e+00 7.96630811370000e-06 +5.10000000000000e+00 7.73536583250000e-06 +5.11000000000000e+00 7.51111086150000e-06 +5.12000000000000e+00 7.29334981980000e-06 +5.13000000000000e+00 7.08189490470000e-06 +5.14000000000000e+00 6.87656373570000e-06 +5.15000000000000e+00 6.67717919830000e-06 +5.16000000000000e+00 6.48356928970000e-06 +5.17000000000000e+00 6.29556697440000e-06 +5.18000000000000e+00 6.11301005030000e-06 +5.19000000000000e+00 5.93574099460000e-06 +5.20000000000000e+00 5.76360683410000e-06 +5.21000000000000e+00 5.59645901400000e-06 +5.22000000000000e+00 5.43415326960000e-06 +5.23000000000000e+00 5.27654949940000e-06 +5.24000000000000e+00 5.12351166220000e-06 +5.25000000000000e+00 4.97490764110000e-06 +5.26000000000000e+00 4.83060913630000e-06 +5.27000000000000e+00 4.69049155480000e-06 +5.28000000000000e+00 4.55443390400000e-06 +5.29000000000000e+00 4.42231868130000e-06 +5.30000000000000e+00 4.29403179180000e-06 +5.31000000000000e+00 4.16946243420000e-06 +5.32000000000000e+00 4.04850300860000e-06 +5.33000000000000e+00 3.93104902480000e-06 +5.34000000000000e+00 3.81699901290000e-06 +5.35000000000000e+00 3.70625443250000e-06 +5.36000000000000e+00 3.59871959620000e-06 +5.37000000000000e+00 3.49430158560000e-06 +5.38000000000000e+00 3.39291016600000e-06 +5.39000000000000e+00 3.29445771110000e-06 +5.40000000000000e+00 3.19885912830000e-06 +5.41000000000000e+00 3.10603178440000e-06 +5.42000000000000e+00 3.01589543240000e-06 +5.43000000000000e+00 2.92837215530000e-06 +5.44000000000000e+00 2.84338628470000e-06 +5.45000000000000e+00 2.76086434070000e-06 +5.46000000000000e+00 2.68073496810000e-06 +5.47000000000000e+00 2.60292887530000e-06 +5.48000000000000e+00 2.52737877190000e-06 +5.49000000000000e+00 2.45401931850000e-06 +5.50000000000000e+00 2.38278706690000e-06 +5.51000000000000e+00 2.31362040220000e-06 +5.52000000000000e+00 2.24645949200000e-06 +5.53000000000000e+00 2.18124623470000e-06 +5.54000000000000e+00 2.11792420930000e-06 +5.55000000000000e+00 2.05643862350000e-06 +5.56000000000000e+00 1.99673627900000e-06 +5.57000000000000e+00 1.93876551280000e-06 +5.58000000000000e+00 1.88247615680000e-06 +5.59000000000000e+00 1.82781949440000e-06 +5.60000000000000e+00 1.77474821870000e-06 +5.61000000000000e+00 1.72321639010000e-06 +5.62000000000000e+00 1.67317939990000e-06 +5.63000000000000e+00 1.62459393360000e-06 +5.64000000000000e+00 1.57741792810000e-06 +5.65000000000000e+00 1.53161053800000e-06 +5.66000000000000e+00 1.48713209970000e-06 +5.67000000000000e+00 1.44394409790000e-06 +5.68000000000000e+00 1.40200912960000e-06 +5.69000000000000e+00 1.36129087860000e-06 +5.70000000000000e+00 1.32175408020000e-06 +5.71000000000000e+00 1.28336448960000e-06 +5.72000000000000e+00 1.24608885310000e-06 +5.73000000000000e+00 1.20989488000000e-06 +5.74000000000000e+00 1.17475121430000e-06 +5.75000000000000e+00 1.14062740510000e-06 +5.76000000000000e+00 1.10749388890000e-06 +5.77000000000000e+00 1.07532195640000e-06 +5.78000000000000e+00 1.04408372910000e-06 +5.79000000000000e+00 1.01375213590000e-06 +5.80000000000000e+00 9.84300889750000e-07 +5.81000000000000e+00 9.55704464600000e-07 +5.82000000000000e+00 9.27938070980000e-07 +5.83000000000000e+00 9.00977643400000e-07 +5.84000000000000e+00 8.74799810690000e-07 +5.85000000000000e+00 8.49381878590000e-07 +5.86000000000000e+00 8.24701810160000e-07 +5.87000000000000e+00 8.00738206780000e-07 +5.88000000000000e+00 7.77470289590000e-07 +5.89000000000000e+00 7.54877879330000e-07 +5.90000000000000e+00 7.32941386530000e-07 +5.91000000000000e+00 7.11641786840000e-07 +5.92000000000000e+00 6.90960607100000e-07 +5.93000000000000e+00 6.70879909300000e-07 +5.94000000000000e+00 6.51382275160000e-07 +5.95000000000000e+00 6.32450791060000e-07 +5.96000000000000e+00 6.14069031260000e-07 +5.97000000000000e+00 5.96221050540000e-07 +5.98000000000000e+00 5.78891363800000e-07 +5.99000000000000e+00 5.62064934580000e-07 +6.00000000000000e+00 5.45727162160000e-07 +6.01000000000000e+00 5.29863868910000e-07 +6.02000000000000e+00 5.14461288080000e-07 +6.03000000000000e+00 4.99506050260000e-07 +6.04000000000000e+00 4.84985176640000e-07 +6.05000000000000e+00 4.70886063770000e-07 +6.06000000000000e+00 4.57196473180000e-07 +6.07000000000000e+00 4.43904521090000e-07 +6.08000000000000e+00 4.30998668200000e-07 +6.09000000000000e+00 4.18467709690000e-07 +6.10000000000000e+00 4.06300764450000e-07 +6.11000000000000e+00 3.94487268380000e-07 +6.12000000000000e+00 3.83016964110000e-07 +6.13000000000000e+00 3.71879890960000e-07 +6.14000000000000e+00 3.61066377000000e-07 +6.15000000000000e+00 3.50567030730000e-07 +6.16000000000000e+00 3.40372732920000e-07 +6.17000000000000e+00 3.30474628290000e-07 +6.18000000000000e+00 3.20864118180000e-07 +6.19000000000000e+00 3.11532855160000e-07 +6.20000000000000e+00 3.02472732790000e-07 +6.21000000000000e+00 2.93675879690000e-07 +6.22000000000000e+00 2.85134652740000e-07 +6.23000000000000e+00 2.76841630470000e-07 +6.24000000000000e+00 2.68789606630000e-07 +6.25000000000000e+00 2.60971582730000e-07 +6.26000000000000e+00 2.53380765680000e-07 +6.27000000000000e+00 2.46010558540000e-07 +6.28000000000000e+00 2.38854555610000e-07 +6.29000000000000e+00 2.31906536940000e-07 +6.30000000000000e+00 2.25160463020000e-07 +6.31000000000000e+00 2.18610469490000e-07 +6.32000000000000e+00 2.12250861640000e-07 +6.33000000000000e+00 2.06076110240000e-07 +6.34000000000000e+00 2.00080847520000e-07 +6.35000000000000e+00 1.94259860720000e-07 +6.36000000000000e+00 1.88608088340000e-07 +6.37000000000000e+00 1.83120615680000e-07 +6.38000000000000e+00 1.77792670660000e-07 +6.39000000000000e+00 1.72619619620000e-07 +6.40000000000000e+00 1.67596962520000e-07 +6.41000000000000e+00 1.62720331460000e-07 +6.42000000000000e+00 1.57985484880000e-07 +6.43000000000000e+00 1.53388304120000e-07 +6.44000000000000e+00 1.48924790020000e-07 +6.45000000000000e+00 1.44591059470000e-07 +6.46000000000000e+00 1.40383342050000e-07 +6.47000000000000e+00 1.36297976600000e-07 +6.48000000000000e+00 1.32331407750000e-07 +6.49000000000000e+00 1.28480184790000e-07 +6.50000000000000e+00 1.24740956410000e-07 +6.51000000000000e+00 1.21110468580000e-07 +6.52000000000000e+00 1.17585561720000e-07 +6.53000000000000e+00 1.14163167940000e-07 +6.54000000000000e+00 1.10840308390000e-07 +6.55000000000000e+00 1.07614090410000e-07 +6.56000000000000e+00 1.04481705430000e-07 +6.57000000000000e+00 1.01440427150000e-07 +6.58000000000000e+00 9.84876079350000e-08 +6.59000000000000e+00 9.56206770320000e-08 +6.60000000000000e+00 9.28371382990000e-08 +6.61000000000000e+00 9.01345680640000e-08 +6.62000000000000e+00 8.75106130180000e-08 +6.63000000000000e+00 8.49629878130000e-08 +6.64000000000000e+00 8.24894738950000e-08 +6.65000000000000e+00 8.00879174430000e-08 +6.66000000000000e+00 7.77562268710000e-08 +6.67000000000000e+00 7.54923713270000e-08 +6.68000000000000e+00 7.32943789240000e-08 +6.69000000000000e+00 7.11603350350000e-08 +6.70000000000000e+00 6.90883806270000e-08 +6.71000000000000e+00 6.70767103160000e-08 +6.72000000000000e+00 6.51235716100000e-08 +6.73000000000000e+00 6.32272630990000e-08 +6.74000000000000e+00 6.13861325540000e-08 +6.75000000000000e+00 5.95985757290000e-08 +6.76000000000000e+00 5.78630349690000e-08 +6.77000000000000e+00 5.61779978600000e-08 +6.78000000000000e+00 5.45419959120000e-08 +6.79000000000000e+00 5.29536030220000e-08 +6.80000000000000e+00 5.14114348380000e-08 +6.81000000000000e+00 4.99141474510000e-08 +6.82000000000000e+00 4.84604357660000e-08 +6.83000000000000e+00 4.70490325990000e-08 +6.84000000000000e+00 4.56787075790000e-08 +6.85000000000000e+00 4.43482660740000e-08 +6.86000000000000e+00 4.30565481570000e-08 +6.87000000000000e+00 4.18024274280000e-08 +6.88000000000000e+00 4.05848103090000e-08 +6.89000000000000e+00 3.94026353730000e-08 +6.90000000000000e+00 3.82548717830000e-08 +6.91000000000000e+00 3.71405186530000e-08 +6.92000000000000e+00 3.60586041800000e-08 +6.93000000000000e+00 3.50081847940000e-08 +6.94000000000000e+00 3.39883443440000e-08 +6.95000000000000e+00 3.29981932420000e-08 +6.96000000000000e+00 3.20368675620000e-08 +6.97000000000000e+00 3.11035290700000e-08 +6.98000000000000e+00 3.01973635970000e-08 +6.99000000000000e+00 2.93175806350000e-08 +7.00000000000000e+00 2.84634126490000e-08 +7.01000000000000e+00 2.76341144110000e-08 +7.02000000000000e+00 2.68289623480000e-08 +7.03000000000000e+00 2.60472539200000e-08 +7.04000000000000e+00 2.52883067480000e-08 +7.05000000000000e+00 2.45514587630000e-08 +7.06000000000000e+00 2.38360670110000e-08 +7.07000000000000e+00 2.31415071760000e-08 +7.08000000000000e+00 2.24671730880000e-08 +7.09000000000000e+00 2.18124761970000e-08 +7.10000000000000e+00 2.11768450590000e-08 +7.11000000000000e+00 2.05597248440000e-08 +7.12000000000000e+00 1.99605767490000e-08 +7.13000000000000e+00 1.93788776790000e-08 +7.14000000000000e+00 1.88141199940000e-08 +7.15000000000000e+00 1.82658106530000e-08 +7.16000000000000e+00 1.77334709510000e-08 +7.17000000000000e+00 1.72166361000000e-08 +7.18000000000000e+00 1.67148548240000e-08 +7.19000000000000e+00 1.62276889700000e-08 +7.20000000000000e+00 1.57547131220000e-08 +7.21000000000000e+00 1.52955140480000e-08 +7.22000000000000e+00 1.48496908840000e-08 +7.23000000000000e+00 1.44168543200000e-08 +7.24000000000000e+00 1.39966263290000e-08 +7.25000000000000e+00 1.35886398790000e-08 +7.26000000000000e+00 1.31925386120000e-08 +7.27000000000000e+00 1.28079765310000e-08 +7.28000000000000e+00 1.24346177020000e-08 +7.29000000000000e+00 1.20721359210000e-08 +7.30000000000000e+00 1.17202144000000e-08 +7.31000000000000e+00 1.13785458430000e-08 +7.32000000000000e+00 1.10468317430000e-08 +7.33000000000000e+00 1.07247822780000e-08 +7.34000000000000e+00 1.04121160570000e-08 +7.35000000000000e+00 1.01085598690000e-08 +7.36000000000000e+00 9.81384845310000e-09 +7.37000000000000e+00 9.52772426310000e-09 +7.38000000000000e+00 9.24993717180000e-09 +7.39000000000000e+00 8.98024439070000e-09 +7.40000000000000e+00 8.71841030540000e-09 +7.41000000000000e+00 8.46420607210000e-09 +7.42000000000000e+00 8.21740950470000e-09 +7.43000000000000e+00 7.97780488050000e-09 +7.44000000000000e+00 7.74518275270000e-09 +7.45000000000000e+00 7.51933976750000e-09 +7.46000000000000e+00 7.30007848700000e-09 +7.47000000000000e+00 7.08720713760000e-09 +7.48000000000000e+00 6.88053963860000e-09 +7.49000000000000e+00 6.67989535600000e-09 +7.50000000000000e+00 6.48509886110000e-09 +7.51000000000000e+00 6.29597982990000e-09 +7.52000000000000e+00 6.11237289390000e-09 +7.53000000000000e+00 5.93411749660000e-09 +7.54000000000000e+00 5.76105775300000e-09 +7.55000000000000e+00 5.59304231430000e-09 +7.56000000000000e+00 5.42992416420000e-09 +7.57000000000000e+00 5.27156067330000e-09 +7.58000000000000e+00 5.11781337630000e-09 +7.59000000000000e+00 4.96854779940000e-09 +7.60000000000000e+00 4.82363338270000e-09 +7.61000000000000e+00 4.68294336560000e-09 +7.62000000000000e+00 4.54635467670000e-09 +7.63000000000000e+00 4.41374782640000e-09 +7.64000000000000e+00 4.28500680240000e-09 +7.65000000000000e+00 4.16001891530000e-09 +7.66000000000000e+00 4.03867482830000e-09 +7.67000000000000e+00 3.92086841540000e-09 +7.68000000000000e+00 3.80649660260000e-09 +7.69000000000000e+00 3.69545931640000e-09 +7.70000000000000e+00 3.58765939600000e-09 +7.71000000000000e+00 3.48300250880000e-09 +7.72000000000000e+00 3.38139706810000e-09 +7.73000000000000e+00 3.28275415300000e-09 +7.74000000000000e+00 3.18698740000000e-09 +7.75000000000000e+00 3.09401297900000e-09 +7.76000000000000e+00 3.00374956420000e-09 +7.77000000000000e+00 2.91611815370000e-09 +7.78000000000000e+00 2.83104204600000e-09 +7.79000000000000e+00 2.74844677230000e-09 +7.80000000000000e+00 2.66826003190000e-09 +7.81000000000000e+00 2.59041162920000e-09 +7.82000000000000e+00 2.51483341200000e-09 +7.83000000000000e+00 2.44145920460000e-09 +7.84000000000000e+00 2.37022471910000e-09 +7.85000000000000e+00 2.30106764600000e-09 +7.86000000000000e+00 2.23392743730000e-09 +7.87000000000000e+00 2.16874530770000e-09 +7.88000000000000e+00 2.10546418400000e-09 +7.89000000000000e+00 2.04402865470000e-09 +7.90000000000000e+00 1.98438492200000e-09 +7.91000000000000e+00 1.92648075430000e-09 +7.92000000000000e+00 1.87026544130000e-09 +7.93000000000000e+00 1.81568971090000e-09 +7.94000000000000e+00 1.76270579080000e-09 +7.95000000000000e+00 1.71126729250000e-09 +7.96000000000000e+00 1.66132916450000e-09 +7.97000000000000e+00 1.61284766800000e-09 +7.98000000000000e+00 1.56578033770000e-09 +7.99000000000000e+00 1.52008594490000e-09 +8.00000000000000e+00 1.47572446190000e-09 +8.01000000000000e+00 1.43265702670000e-09 +8.02000000000000e+00 1.39084589940000e-09 +8.03000000000000e+00 1.35025442590000e-09 +8.04000000000000e+00 1.31084707930000e-09 +8.05000000000000e+00 1.27258933530000e-09 +8.06000000000000e+00 1.23544767560000e-09 +8.07000000000000e+00 1.19938955790000e-09 +8.08000000000000e+00 1.16438338800000e-09 +8.09000000000000e+00 1.13039849200000e-09 +8.10000000000000e+00 1.09740508930000e-09 +8.11000000000000e+00 1.06537426700000e-09 +8.12000000000000e+00 1.03427793300000e-09 +8.13000000000000e+00 1.00408884350000e-09 +8.14000000000000e+00 9.74780556640000e-10 +8.15000000000000e+00 9.46327387550000e-10 +8.16000000000000e+00 9.18704399640000e-10 +8.17000000000000e+00 8.91887382830000e-10 +8.18000000000000e+00 8.65852832310000e-10 +8.19000000000000e+00 8.40577928060000e-10 +8.20000000000000e+00 8.16040514870000e-10 +8.21000000000000e+00 7.92219083020000e-10 +8.22000000000000e+00 7.69092724610000e-10 +8.23000000000000e+00 7.46641188170000e-10 +8.24000000000000e+00 7.24844796380000e-10 +8.25000000000000e+00 7.03684441570000e-10 +8.26000000000000e+00 6.83141572870000e-10 +8.27000000000000e+00 6.63198179940000e-10 +8.28000000000000e+00 6.43836777200000e-10 +8.29000000000000e+00 6.25040388550000e-10 +8.30000000000000e+00 6.06792532560000e-10 +8.31000000000000e+00 5.89077207740000e-10 +8.32000000000000e+00 5.71878856530000e-10 +8.33000000000000e+00 5.55182421640000e-10 +8.34000000000000e+00 5.38973262500000e-10 +8.35000000000000e+00 5.23237165220000e-10 +8.36000000000000e+00 5.07960330160000e-10 +8.37000000000000e+00 4.93129359850000e-10 +8.38000000000000e+00 4.78731247210000e-10 +8.39000000000000e+00 4.64753364240000e-10 +8.40000000000000e+00 4.51183450920000e-10 +8.41000000000000e+00 4.38009603770000e-10 +8.42000000000000e+00 4.25220249710000e-10 +8.43000000000000e+00 4.12804189390000e-10 +8.44000000000000e+00 4.00750532460000e-10 +8.45000000000000e+00 3.89048706010000e-10 +8.46000000000000e+00 3.77688445310000e-10 +8.47000000000000e+00 3.66659784820000e-10 +8.48000000000000e+00 3.55953049450000e-10 +8.49000000000000e+00 3.45558846080000e-10 +8.50000000000000e+00 3.35468055380000e-10 +8.51000000000000e+00 3.25671823850000e-10 +8.52000000000000e+00 3.16161541510000e-10 +8.53000000000000e+00 3.06928878340000e-10 +8.54000000000000e+00 2.97965734770000e-10 +8.55000000000000e+00 2.89264246620000e-10 +8.56000000000000e+00 2.80816778970000e-10 +8.57000000000000e+00 2.72615919480000e-10 +8.58000000000000e+00 2.64654471840000e-10 +8.59000000000000e+00 2.56925449560000e-10 +8.60000000000000e+00 2.49422069750000e-10 +8.61000000000000e+00 2.42137747310000e-10 +8.62000000000000e+00 2.35066079960000e-10 +8.63000000000000e+00 2.28200867460000e-10 +8.64000000000000e+00 2.21536088260000e-10 +8.65000000000000e+00 2.15065893250000e-10 +8.66000000000000e+00 2.08784603840000e-10 +8.67000000000000e+00 2.02686707030000e-10 +8.68000000000000e+00 1.96766850510000e-10 +8.69000000000000e+00 1.91019838040000e-10 +8.70000000000000e+00 1.85440624850000e-10 +8.71000000000000e+00 1.80024313250000e-10 +8.72000000000000e+00 1.74766144360000e-10 +8.73000000000000e+00 1.69661500270000e-10 +8.74000000000000e+00 1.64705906030000e-10 +8.75000000000000e+00 1.59895011490000e-10 +8.76000000000000e+00 1.55224593310000e-10 +8.77000000000000e+00 1.50690551350000e-10 +8.78000000000000e+00 1.46288904970000e-10 +8.79000000000000e+00 1.42015789650000e-10 +8.80000000000000e+00 1.37867453490000e-10 +8.81000000000000e+00 1.33840254030000e-10 +8.82000000000000e+00 1.29930655000000e-10 +8.83000000000000e+00 1.26135215830000e-10 +8.84000000000000e+00 1.22450610990000e-10 +8.85000000000000e+00 1.18873605740000e-10 +8.86000000000000e+00 1.15401059220000e-10 +8.87000000000000e+00 1.12029922190000e-10 +8.88000000000000e+00 1.08757234310000e-10 +8.89000000000000e+00 1.05580121590000e-10 +8.90000000000000e+00 1.02495793830000e-10 +8.91000000000000e+00 9.95015421940000e-11 +8.92000000000000e+00 9.65947368550000e-11 +8.93000000000000e+00 9.37728224050000e-11 +8.94000000000000e+00 9.10333185250000e-11 +8.95000000000000e+00 8.83738233400000e-11 +8.96000000000000e+00 8.57920011250000e-11 +8.97000000000000e+00 8.32855842890000e-11 +8.98000000000000e+00 8.08523713760000e-11 +8.99000000000000e+00 7.84902251390000e-11 +9.00000000000000e+00 7.61970706590000e-11 +9.01000000000000e+00 7.39708935270000e-11 +9.02000000000000e+00 7.18097380850000e-11 +9.03000000000000e+00 6.97117057120000e-11 +9.04000000000000e+00 6.76749499320000e-11 +9.05000000000000e+00 6.56976829370000e-11 +9.06000000000000e+00 6.37781695850000e-11 +9.07000000000000e+00 6.19147236390000e-11 +9.08000000000000e+00 6.01057080540000e-11 +9.09000000000000e+00 5.83495335340000e-11 +9.10000000000000e+00 5.66446571420000e-11 +9.11000000000000e+00 5.49895809430000e-11 +9.12000000000000e+00 5.33828506880000e-11 +9.13000000000000e+00 5.18230545490000e-11 +9.14000000000000e+00 5.03088218770000e-11 +9.15000000000000e+00 4.88388188280000e-11 +9.16000000000000e+00 4.74117561700000e-11 +9.17000000000000e+00 4.60263807930000e-11 +9.18000000000000e+00 4.46814754050000e-11 +9.19000000000000e+00 4.33758582310000e-11 +9.20000000000000e+00 4.21083819690000e-11 +9.21000000000000e+00 4.08779327840000e-11 +9.22000000000000e+00 3.96834293330000e-11 +9.23000000000000e+00 3.85238218120000e-11 +9.24000000000000e+00 3.73980910410000e-11 +9.25000000000000e+00 3.63052475730000e-11 +9.26000000000000e+00 3.52443282340000e-11 +9.27000000000000e+00 3.42144027100000e-11 +9.28000000000000e+00 3.32145663790000e-11 +9.29000000000000e+00 3.22439405250000e-11 +9.30000000000000e+00 3.13016720670000e-11 +9.31000000000000e+00 3.03869328150000e-11 +9.32000000000000e+00 2.94989187400000e-11 +9.33000000000000e+00 2.86368492670000e-11 +9.34000000000000e+00 2.77999665920000e-11 +9.35000000000000e+00 2.69875350190000e-11 +9.36000000000000e+00 2.61988403140000e-11 +9.37000000000000e+00 2.54331872990000e-11 +9.38000000000000e+00 2.46899040530000e-11 +9.39000000000000e+00 2.39683378710000e-11 +9.40000000000000e+00 2.32678544680000e-11 +9.41000000000000e+00 2.25878380650000e-11 +9.42000000000000e+00 2.19276908530000e-11 +9.43000000000000e+00 2.12868324640000e-11 +9.44000000000000e+00 2.06646994610000e-11 +9.45000000000000e+00 2.00607448470000e-11 +9.46000000000000e+00 1.94744375810000e-11 +9.47000000000000e+00 1.89052621170000e-11 +9.48000000000000e+00 1.83527170020000e-11 +9.49000000000000e+00 1.78163163870000e-11 +9.50000000000000e+00 1.72955896310000e-11 +9.51000000000000e+00 1.67900789080000e-11 +9.52000000000000e+00 1.62993397510000e-11 +9.53000000000000e+00 1.58229406650000e-11 +9.54000000000000e+00 1.53604627450000e-11 +9.55000000000000e+00 1.49114993080000e-11 +9.56000000000000e+00 1.44756555370000e-11 +9.57000000000000e+00 1.40525481340000e-11 +9.58000000000000e+00 1.36418049860000e-11 +9.59000000000000e+00 1.32430646460000e-11 +9.60000000000000e+00 1.28559753210000e-11 +9.61000000000000e+00 1.24801979010000e-11 +9.62000000000000e+00 1.21154019410000e-11 +9.63000000000000e+00 1.17612666400000e-11 +9.64000000000000e+00 1.14174805590000e-11 +9.65000000000000e+00 1.10837413490000e-11 +9.66000000000000e+00 1.07597554810000e-11 +9.67000000000000e+00 1.04452379940000e-11 +9.68000000000000e+00 1.01399122400000e-11 +9.69000000000000e+00 9.84350964200000e-12 +9.70000000000000e+00 9.55576946300000e-12 +9.71000000000000e+00 9.27643785930000e-12 +9.72000000000000e+00 9.00526940850000e-12 +9.73000000000000e+00 8.74202604820000e-12 +9.74000000000000e+00 8.48647624440000e-12 +9.75000000000000e+00 8.23839522200000e-12 +9.76000000000000e+00 7.99756476580000e-12 +9.77000000000000e+00 7.76377302930000e-12 +9.78000000000000e+00 7.53681434750000e-12 +9.79000000000000e+00 7.31648905700000e-12 +9.80000000000000e+00 7.10260332050000e-12 +9.81000000000000e+00 6.89496895740000e-12 +9.82000000000000e+00 6.69340327870000e-12 +9.83000000000000e+00 6.49772807130000e-12 +9.84000000000000e+00 6.30777203930000e-12 +9.85000000000000e+00 6.12336810220000e-12 +9.86000000000000e+00 5.94435403820000e-12 +9.87000000000000e+00 5.77057236070000e-12 +9.88000000000000e+00 5.60187017980000e-12 +9.89000000000000e+00 5.43809906760000e-12 +9.90000000000000e+00 5.27911492730000e-12 +9.91000000000000e+00 5.12477786750000e-12 +9.92000000000000e+00 4.97495207870000e-12 +9.93000000000000e+00 4.82950571530000e-12 +9.94000000000000e+00 4.68831064790000e-12 +9.95000000000000e+00 4.55124220680000e-12 +9.96000000000000e+00 4.41818034160000e-12 +9.97000000000000e+00 4.28900797990000e-12 +9.98000000000000e+00 4.16361146730000e-12 +9.99000000000000e+00 4.04188046720000e-12 +1.00000000000000e+01 3.92370786350000e-12 +1.00100000000000e+01 3.80898966640000e-12 +1.00200000000000e+01 3.69762492080000e-12 +1.00300000000000e+01 3.58951561780000e-12 +1.00400000000000e+01 3.48456660870000e-12 +1.00500000000000e+01 3.38268552180000e-12 +1.00600000000000e+01 3.28378254260000e-12 +1.00700000000000e+01 3.18777037990000e-12 +1.00800000000000e+01 3.09456492490000e-12 +1.00900000000000e+01 3.00408415860000e-12 +1.01000000000000e+01 2.91624845660000e-12 +1.01100000000000e+01 2.83098051930000e-12 +1.01200000000000e+01 2.74820530330000e-12 +1.01300000000000e+01 2.66784995540000e-12 +1.01400000000000e+01 2.58984374870000e-12 +1.01500000000000e+01 2.51411802040000e-12 +1.01600000000000e+01 2.44060611140000e-12 +1.01700000000000e+01 2.36924330840000e-12 +1.01800000000000e+01 2.29996670840000e-12 +1.01900000000000e+01 2.23271508780000e-12 +1.02000000000000e+01 2.16742957290000e-12 +1.02100000000000e+01 2.10405270460000e-12 +1.02200000000000e+01 2.04252870170000e-12 +1.02300000000000e+01 1.98280341160000e-12 +1.02400000000000e+01 1.92482426250000e-12 +1.02500000000000e+01 1.86854021700000e-12 +1.02600000000000e+01 1.81390172730000e-12 +1.02700000000000e+01 1.76086069160000e-12 +1.02800000000000e+01 1.70937041200000e-12 +1.02900000000000e+01 1.65938555370000e-12 +1.03000000000000e+01 1.61086210500000e-12 +1.03100000000000e+01 1.56375704560000e-12 +1.03200000000000e+01 1.51802919990000e-12 +1.03300000000000e+01 1.47363832080000e-12 +1.03400000000000e+01 1.43054533180000e-12 +1.03500000000000e+01 1.38871229780000e-12 +1.03600000000000e+01 1.34810239100000e-12 +1.03700000000000e+01 1.30867985850000e-12 +1.03800000000000e+01 1.27040999110000e-12 +1.03900000000000e+01 1.23325909250000e-12 +1.04000000000000e+01 1.19719444990000e-12 +1.04100000000000e+01 1.16218430540000e-12 +1.04200000000000e+01 1.12819782800000e-12 +1.04300000000000e+01 1.09520494570000e-12 +1.04400000000000e+01 1.06317666450000e-12 +1.04500000000000e+01 1.03208487220000e-12 +1.04600000000000e+01 1.00190219600000e-12 +1.04700000000000e+01 9.72602062230000e-13 +1.04800000000000e+01 9.44158673230000e-13 +1.04900000000000e+01 9.16546984340000e-13 +1.05000000000000e+01 8.89742681950000e-13 +1.05100000000000e+01 8.63722162110000e-13 +1.05200000000000e+01 8.38462509760000e-13 +1.05300000000000e+01 8.13941478690000e-13 +1.05400000000000e+01 7.90137472030000e-13 +1.05500000000000e+01 7.67029503580000e-13 +1.05600000000000e+01 7.44597090410000e-13 +1.05700000000000e+01 7.22820630020000e-13 +1.05800000000000e+01 7.01680948310000e-13 +1.05900000000000e+01 6.81159431190000e-13 +1.06000000000000e+01 6.61238008110000e-13 +1.06100000000000e+01 6.41899136090000e-13 +1.06200000000000e+01 6.23125784260000e-13 +1.06300000000000e+01 6.04901418880000e-13 +1.06400000000000e+01 5.87209988740000e-13 +1.06500000000000e+01 5.70035911140000e-13 +1.06600000000000e+01 5.53364058200000e-13 +1.06700000000000e+01 5.37179743640000e-13 +1.06800000000000e+01 5.21468651820000e-13 +1.06900000000000e+01 5.06216933340000e-13 +1.07000000000000e+01 4.91411226180000e-13 +1.07100000000000e+01 4.77038492110000e-13 +1.07200000000000e+01 4.63086073670000e-13 +1.07300000000000e+01 4.49541683000000e-13 +1.07400000000000e+01 4.36393390970000e-13 +1.07500000000000e+01 4.23629616700000e-13 +1.07600000000000e+01 4.11239117330000e-13 +1.07700000000000e+01 3.99210978120000e-13 +1.07800000000000e+01 3.87534602920000e-13 +1.07900000000000e+01 3.76199704880000e-13 +1.08000000000000e+01 3.65196297410000e-13 +1.08100000000000e+01 3.54514624410000e-13 +1.08200000000000e+01 3.44145304340000e-13 +1.08300000000000e+01 3.34079238100000e-13 +1.08400000000000e+01 3.24307560090000e-13 +1.08500000000000e+01 3.14821663660000e-13 +1.08600000000000e+01 3.05613193440000e-13 +1.08700000000000e+01 2.96674038010000e-13 +1.08800000000000e+01 2.87996322740000e-13 +1.08900000000000e+01 2.79572402840000e-13 +1.09000000000000e+01 2.71394856620000e-13 +1.09100000000000e+01 2.63456479040000e-13 +1.09200000000000e+01 2.55750275350000e-13 +1.09300000000000e+01 2.48269455010000e-13 +1.09400000000000e+01 2.41007377950000e-13 +1.09500000000000e+01 2.33957671930000e-13 +1.09600000000000e+01 2.27114149610000e-13 +1.09700000000000e+01 2.20470782880000e-13 +1.09800000000000e+01 2.14021719710000e-13 +1.09900000000000e+01 2.07761278920000e-13 +1.10000000000000e+01 2.01683945220000e-13 +1.10100000000000e+01 1.95784364300000e-13 +1.10200000000000e+01 1.90057338130000e-13 +1.10300000000000e+01 1.84497820410000e-13 +1.10400000000000e+01 1.79100912100000e-13 +1.10500000000000e+01 1.73861857190000e-13 +1.10600000000000e+01 1.68776038470000e-13 +1.10700000000000e+01 1.63838944470000e-13 +1.10800000000000e+01 1.59046231380000e-13 +1.10900000000000e+01 1.54393699720000e-13 +1.11000000000000e+01 1.49877250850000e-13 +1.11100000000000e+01 1.45492905870000e-13 +1.11200000000000e+01 1.41236802050000e-13 +1.11300000000000e+01 1.37105189430000e-13 +1.11400000000000e+01 1.33094427530000e-13 +1.11500000000000e+01 1.29200982130000e-13 +1.11600000000000e+01 1.25421422150000e-13 +1.11700000000000e+01 1.21752416660000e-13 +1.11800000000000e+01 1.18190731940000e-13 +1.11900000000000e+01 1.14733228680000e-13 +1.12000000000000e+01 1.11376848350000e-13 +1.12100000000000e+01 1.08118616500000e-13 +1.12200000000000e+01 1.04955689550000e-13 +1.12300000000000e+01 1.01885280830000e-13 +1.12400000000000e+01 9.89046851080000e-14 +1.12500000000000e+01 9.60112761330000e-14 +1.12600000000000e+01 9.32025043430000e-14 +1.12700000000000e+01 9.04758946000000e-14 +1.12800000000000e+01 8.78290440160000e-14 +1.12900000000000e+01 8.52596198330000e-14 +1.13000000000000e+01 8.27653573730000e-14 +1.13100000000000e+01 8.03440580570000e-14 +1.13200000000000e+01 7.79935874790000e-14 +1.13300000000000e+01 7.57118735390000e-14 +1.13400000000000e+01 7.34968811600000e-14 +1.13500000000000e+01 7.13466777170000e-14 +1.13600000000000e+01 6.92593728000000e-14 +1.13700000000000e+01 6.72331271840000e-14 +1.13800000000000e+01 6.52661553630000e-14 +1.13900000000000e+01 6.33567239660000e-14 +1.14000000000000e+01 6.15031502320000e-14 +1.14100000000000e+01 5.97038005160000e-14 +1.14200000000000e+01 5.79570888550000e-14 +1.14300000000000e+01 5.62614755720000e-14 +1.14400000000000e+01 5.46154659240000e-14 +1.14500000000000e+01 5.30176087940000e-14 +1.14600000000000e+01 5.14664954200000e-14 +1.14700000000000e+01 4.99607530910000e-14 +1.14800000000000e+01 4.84990443130000e-14 +1.14900000000000e+01 4.70800960380000e-14 +1.15000000000000e+01 4.57026578660000e-14 +1.15100000000000e+01 4.43655159230000e-14 +1.15200000000000e+01 4.30674917850000e-14 +1.15300000000000e+01 4.18074414380000e-14 +1.15400000000000e+01 4.05842542620000e-14 +1.15500000000000e+01 3.93968520560000e-14 +1.15600000000000e+01 3.82441880850000e-14 +1.15700000000000e+01 3.71252461620000e-14 +1.15800000000000e+01 3.60390397530000e-14 +1.15900000000000e+01 3.49846111210000e-14 +1.16000000000000e+01 3.39610304800000e-14 +1.16100000000000e+01 3.29673880330000e-14 +1.16200000000000e+01 3.20028074860000e-14 +1.16300000000000e+01 3.10664461770000e-14 +1.16400000000000e+01 3.01574788820000e-14 +1.16500000000000e+01 2.92751044790000e-14 +1.16600000000000e+01 2.84185452450000e-14 +1.16700000000000e+01 2.75870461600000e-14 +1.16800000000000e+01 2.67798742470000e-14 +1.16900000000000e+01 2.59963179190000e-14 +1.17000000000000e+01 2.52356863580000e-14 +1.17100000000000e+01 2.44973089030000e-14 +1.17200000000000e+01 2.37805344660000e-14 +1.17300000000000e+01 2.30847309600000e-14 +1.17400000000000e+01 2.24092847470000e-14 +1.17500000000000e+01 2.17535941770000e-14 +1.17600000000000e+01 2.11170824830000e-14 +1.17700000000000e+01 2.04991932310000e-14 +1.17800000000000e+01 1.98993818150000e-14 +1.17900000000000e+01 1.93171195370000e-14 +1.18000000000000e+01 1.87518931400000e-14 +1.18100000000000e+01 1.82032043490000e-14 +1.18200000000000e+01 1.76705694380000e-14 +1.18300000000000e+01 1.71535187940000e-14 +1.18400000000000e+01 1.66515965120000e-14 +1.18500000000000e+01 1.61643599870000e-14 +1.18600000000000e+01 1.56913795320000e-14 +1.18700000000000e+01 1.52322379970000e-14 +1.18800000000000e+01 1.47865304100000e-14 +1.18900000000000e+01 1.43538600710000e-14 +1.19000000000000e+01 1.39338449990000e-14 +1.19100000000000e+01 1.35261189410000e-14 +1.19200000000000e+01 1.31303225000000e-14 +1.19300000000000e+01 1.27461067730000e-14 +1.19400000000000e+01 1.23731330510000e-14 +1.19500000000000e+01 1.20110725090000e-14 +1.19600000000000e+01 1.16596059230000e-14 +1.19700000000000e+01 1.13184233860000e-14 +1.19800000000000e+01 1.09872240330000e-14 +1.19900000000000e+01 1.06657157770000e-14 +1.20000000000000e+01 1.03536150550000e-14 +1.20100000000000e+01 1.00506465770000e-14 +1.20200000000000e+01 9.75654309000000e-15 +1.20300000000000e+01 9.47104401570000e-15 +1.20400000000000e+01 9.19389439810000e-15 +1.20500000000000e+01 8.92485414720000e-15 +1.20600000000000e+01 8.66368609370000e-15 +1.20700000000000e+01 8.41015999680000e-15 +1.20800000000000e+01 8.16405234040000e-15 +1.20900000000000e+01 7.92514613400000e-15 +1.21000000000000e+01 7.69323072150000e-15 +1.21100000000000e+01 7.46810159430000e-15 +1.21200000000000e+01 7.24956021140000e-15 +1.21300000000000e+01 7.03741382490000e-15 +1.21400000000000e+01 6.83147531010000e-15 +1.21500000000000e+01 6.63156300250000e-15 +1.21600000000000e+01 6.43750053830000e-15 +1.21700000000000e+01 6.24911670120000e-15 +1.21800000000000e+01 6.06624232540000e-15 +1.21900000000000e+01 5.88871823680000e-15 +1.22000000000000e+01 5.71638878430000e-15 +1.22100000000000e+01 5.54910203640000e-15 +1.22200000000000e+01 5.38671049930000e-15 +1.22300000000000e+01 5.22907098600000e-15 +1.22400000000000e+01 5.07604448950000e-15 +1.22500000000000e+01 4.92749605980000e-15 +1.22600000000000e+01 4.78329468470000e-15 +1.22700000000000e+01 4.64331317450000e-15 +1.22800000000000e+01 4.50742805000000e-15 +1.22900000000000e+01 4.37551943450000e-15 +1.23000000000000e+01 4.24747094880000e-15 +1.23100000000000e+01 4.12316960960000e-15 +1.23200000000000e+01 4.00250527710000e-15 +1.23300000000000e+01 3.88536970740000e-15 +1.23400000000000e+01 3.77166184730000e-15 +1.23500000000000e+01 3.66128144300000e-15 +1.23600000000000e+01 3.55413116940000e-15 +1.23700000000000e+01 3.45011654400000e-15 +1.23800000000000e+01 3.34914584270000e-15 +1.23900000000000e+01 3.25113001870000e-15 +1.24000000000000e+01 3.15598262390000e-15 +1.24100000000000e+01 3.06361973210000e-15 +1.24200000000000e+01 2.97395986570000e-15 +1.24300000000000e+01 2.88692392390000e-15 +1.24400000000000e+01 2.80243511330000e-15 +1.24500000000000e+01 2.72041888110000e-15 +1.24600000000000e+01 2.64080284960000e-15 +1.24700000000000e+01 2.56351602370000e-15 +1.24800000000000e+01 2.48848978570000e-15 +1.24900000000000e+01 2.41565913570000e-15 +1.25000000000000e+01 2.34495985480000e-15 +1.25100000000000e+01 2.27632960020000e-15 +1.25200000000000e+01 2.20970784980000e-15 +1.25300000000000e+01 2.14503584790000e-15 +1.25400000000000e+01 2.08225655420000e-15 +1.25500000000000e+01 2.02131459230000e-15 +1.25600000000000e+01 1.96215620150000e-15 +1.25700000000000e+01 1.90472918920000e-15 +1.25800000000000e+01 1.84898288540000e-15 +1.25900000000000e+01 1.79486809780000e-15 +1.26000000000000e+01 1.74233706920000e-15 +1.26100000000000e+01 1.69134343600000e-15 +1.26200000000000e+01 1.64184162420000e-15 +1.26300000000000e+01 1.59378776320000e-15 +1.26400000000000e+01 1.54714023140000e-15 +1.26500000000000e+01 1.50185789400000e-15 +1.26600000000000e+01 1.45790081790000e-15 +1.26700000000000e+01 1.41523023590000e-15 +1.26800000000000e+01 1.37380851270000e-15 +1.26900000000000e+01 1.33359911120000e-15 +1.27000000000000e+01 1.29456656040000e-15 +1.27100000000000e+01 1.25667642400000e-15 +1.27200000000000e+01 1.21989527000000e-15 +1.27300000000000e+01 1.18419064160000e-15 +1.27400000000000e+01 1.14953102860000e-15 +1.27500000000000e+01 1.11588583980000e-15 +1.27600000000000e+01 1.08322537650000e-15 +1.27700000000000e+01 1.05152054250000e-15 +1.27800000000000e+01 1.02074296880000e-15 +1.27900000000000e+01 9.90866162350000e-16 +1.28000000000000e+01 9.61863775550000e-16 +1.28100000000000e+01 9.33710230380000e-16 +1.28200000000000e+01 9.06380695770000e-16 +1.28300000000000e+01 8.79851065550000e-16 +1.28400000000000e+01 8.54097937010000e-16 +1.28500000000000e+01 8.29098590230000e-16 +1.28600000000000e+01 8.04830968000000e-16 +1.28700000000000e+01 7.81273656410000e-16 +1.28800000000000e+01 7.58405866010000e-16 +1.28900000000000e+01 7.36207413640000e-16 +1.29000000000000e+01 7.14658704740000e-16 +1.29100000000000e+01 6.93740716320000e-16 +1.29200000000000e+01 6.73434980370000e-16 +1.29300000000000e+01 6.53722957630000e-16 +1.29400000000000e+01 6.34587850890000e-16 +1.29500000000000e+01 6.16012804530000e-16 +1.29600000000000e+01 5.97981435910000e-16 +1.29700000000000e+01 5.80477840830000e-16 +1.29800000000000e+01 5.63486579410000e-16 +1.29900000000000e+01 5.46992662360000e-16 +1.30000000000000e+01 5.30981537710000e-16 +1.30100000000000e+01 5.15439077950000e-16 +1.30200000000000e+01 5.00351567550000e-16 +1.30300000000000e+01 4.85705690940000e-16 +1.30400000000000e+01 4.71488520800000e-16 +1.30500000000000e+01 4.57687506760000e-16 +1.30600000000000e+01 4.44290464450000e-16 +1.30700000000000e+01 4.31285564910000e-16 +1.30800000000000e+01 4.18661122810000e-16 +1.30900000000000e+01 4.06405963550000e-16 +1.31000000000000e+01 3.94509510830000e-16 +1.31100000000000e+01 3.82961271940000e-16 +1.31200000000000e+01 3.71751060690000e-16 +1.31300000000000e+01 3.60868988270000e-16 +1.31400000000000e+01 3.50305454530000e-16 +1.31500000000000e+01 3.40051139400000e-16 +1.31600000000000e+01 3.30096994680000e-16 +1.31700000000000e+01 3.20434236050000e-16 +1.31800000000000e+01 3.11054335300000e-16 +1.31900000000000e+01 3.01949012880000e-16 +1.32000000000000e+01 2.93110230600000e-16 +1.32100000000000e+01 2.84530184640000e-16 +1.32200000000000e+01 2.76201298770000e-16 +1.32300000000000e+01 2.68116217710000e-16 +1.32400000000000e+01 2.60267571530000e-16 +1.32500000000000e+01 2.52648596260000e-16 +1.32600000000000e+01 2.45252638990000e-16 +1.32700000000000e+01 2.38073175930000e-16 +1.32800000000000e+01 2.31103873810000e-16 +1.32900000000000e+01 2.24338584290000e-16 +1.33000000000000e+01 2.17771338400000e-16 +1.33100000000000e+01 2.11396341350000e-16 +1.33200000000000e+01 2.05207967310000e-16 +1.33300000000000e+01 1.99200754510000e-16 +1.33400000000000e+01 1.93369400400000e-16 +1.33500000000000e+01 1.87708756990000e-16 diff --git a/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi31.inp b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi31.inp new file mode 100644 index 000000000..e74e14e05 --- /dev/null +++ b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi31.inp @@ -0,0 +1,1335 @@ +1.00000000000000e-02 6.34737419270000e-04 +2.00000000000000e-02 2.53749744100000e-03 +3.00000000000000e-02 5.70392748470000e-03 +4.00000000000000e-02 1.01267872140000e-02 +5.00000000000000e-02 1.57959694600000e-02 +6.00000000000000e-02 2.26985294010000e-02 +7.00000000000000e-02 3.08187218870000e-02 +8.00000000000000e-02 4.01380467750000e-02 +9.00000000000000e-02 5.06353020990000e-02 +1.00000000000000e-01 6.22866448850000e-02 +1.10000000000000e-01 7.50656593800000e-02 +1.20000000000000e-01 8.89434324420000e-02 +1.30000000000000e-01 1.03888635820000e-01 +1.40000000000000e-01 1.19867614990000e-01 +1.50000000000000e-01 1.36844484320000e-01 +1.60000000000000e-01 1.54781228050000e-01 +1.70000000000000e-01 1.73637806890000e-01 +1.80000000000000e-01 1.93372269780000e-01 +1.90000000000000e-01 2.13940870390000e-01 +2.00000000000000e-01 2.35298188000000e-01 +2.10000000000000e-01 2.57397252320000e-01 +2.20000000000000e-01 2.80189671780000e-01 +2.30000000000000e-01 3.03625764930000e-01 +2.40000000000000e-01 3.27654694420000e-01 +2.50000000000000e-01 3.52224603150000e-01 +2.60000000000000e-01 3.77282752130000e-01 +2.70000000000000e-01 4.02775659640000e-01 +2.80000000000000e-01 4.28649241100000e-01 +2.90000000000000e-01 4.54848949410000e-01 +3.00000000000000e-01 4.81319915130000e-01 +3.10000000000000e-01 5.08007086180000e-01 +3.20000000000000e-01 5.34855366560000e-01 +3.30000000000000e-01 5.61809753750000e-01 +3.40000000000000e-01 5.88815474350000e-01 +3.50000000000000e-01 6.15818117440000e-01 +3.60000000000000e-01 6.42763765620000e-01 +3.70000000000000e-01 6.69599122910000e-01 +3.80000000000000e-01 6.96271639620000e-01 +3.90000000000000e-01 7.22729633490000e-01 +4.00000000000000e-01 7.48922406990000e-01 +4.10000000000000e-01 7.74800360530000e-01 +4.20000000000000e-01 8.00315101080000e-01 +4.30000000000000e-01 8.25419546150000e-01 +4.40000000000000e-01 8.50068022910000e-01 +4.50000000000000e-01 8.74216362010000e-01 +4.60000000000000e-01 8.97821986180000e-01 +4.70000000000000e-01 9.20843993300000e-01 +4.80000000000000e-01 9.43243233770000e-01 +4.90000000000000e-01 9.64982382120000e-01 +5.00000000000000e-01 9.86026002720000e-01 +5.10000000000000e-01 1.00634060950000e+00 +5.20000000000000e-01 1.02589471950000e+00 +5.30000000000000e-01 1.04465890080000e+00 +5.40000000000000e-01 1.06260581330000e+00 +5.50000000000000e-01 1.07971024450000e+00 +5.60000000000000e-01 1.09594913860000e+00 +5.70000000000000e-01 1.11130161900000e+00 +5.80000000000000e-01 1.12574900560000e+00 +5.90000000000000e-01 1.13927482580000e+00 +6.00000000000000e-01 1.15186481880000e+00 +6.10000000000000e-01 1.16350693520000e+00 +6.20000000000000e-01 1.17419132990000e+00 +6.30000000000000e-01 1.18391034970000e+00 +6.40000000000000e-01 1.19265851540000e+00 +6.50000000000000e-01 1.20043249830000e+00 +6.60000000000000e-01 1.20723109180000e+00 +6.70000000000000e-01 1.21305517690000e+00 +6.80000000000000e-01 1.21790768460000e+00 +6.90000000000000e-01 1.22179355140000e+00 +7.00000000000000e-01 1.22471967190000e+00 +7.10000000000000e-01 1.22669484620000e+00 +7.20000000000000e-01 1.22772972330000e+00 +7.30000000000000e-01 1.22783674060000e+00 +7.40000000000000e-01 1.22703005980000e+00 +7.50000000000000e-01 1.22532549870000e+00 +7.60000000000000e-01 1.22274046050000e+00 +7.70000000000000e-01 1.21929385980000e+00 +7.80000000000000e-01 1.21500604530000e+00 +7.90000000000000e-01 1.20989872040000e+00 +8.00000000000000e-01 1.20399486190000e+00 +8.10000000000000e-01 1.19731863560000e+00 +8.20000000000000e-01 1.18989531100000e+00 +8.30000000000000e-01 1.18175117400000e+00 +8.40000000000000e-01 1.17291343870000e+00 +8.50000000000000e-01 1.16341015760000e+00 +8.60000000000000e-01 1.15327013190000e+00 +8.70000000000000e-01 1.14252282050000e+00 +8.80000000000000e-01 1.13119824940000e+00 +8.90000000000000e-01 1.11932692070000e+00 +9.00000000000000e-01 1.10693972230000e+00 +9.10000000000000e-01 1.09406783790000e+00 +9.20000000000000e-01 1.08074265820000e+00 +9.30000000000000e-01 1.06699569280000e+00 +9.40000000000000e-01 1.05285848350000e+00 +9.50000000000000e-01 1.03836252000000e+00 +9.60000000000000e-01 1.02353915590000e+00 +9.70000000000000e-01 1.00841952840000e+00 +9.80000000000000e-01 9.93034479500000e-01 +9.90000000000000e-01 9.77414479560000e-01 +1.00000000000000e+00 9.61589554300000e-01 +1.01000000000000e+00 9.45589214240000e-01 +1.02000000000000e+00 9.29442387460000e-01 +1.03000000000000e+00 9.13177355760000e-01 +1.04000000000000e+00 8.96821694210000e-01 +1.05000000000000e+00 8.80402214480000e-01 +1.06000000000000e+00 8.63944911910000e-01 +1.07000000000000e+00 8.47474916600000e-01 +1.08000000000000e+00 8.31016448470000e-01 +1.09000000000000e+00 8.14592776550000e-01 +1.10000000000000e+00 7.98226182490000e-01 +1.11000000000000e+00 7.81937928370000e-01 +1.12000000000000e+00 7.65748228880000e-01 +1.13000000000000e+00 7.49676227860000e-01 +1.14000000000000e+00 7.33739979290000e-01 +1.15000000000000e+00 7.17956432630000e-01 +1.16000000000000e+00 7.02341422560000e-01 +1.17000000000000e+00 6.86909663020000e-01 +1.18000000000000e+00 6.71674745540000e-01 +1.19000000000000e+00 6.56649141770000e-01 +1.20000000000000e+00 6.41844210100000e-01 +1.21000000000000e+00 6.27270206180000e-01 +1.22000000000000e+00 6.12936297460000e-01 +1.23000000000000e+00 5.98850581240000e-01 +1.24000000000000e+00 5.85020106390000e-01 +1.25000000000000e+00 5.71450898340000e-01 +1.26000000000000e+00 5.58147987340000e-01 +1.27000000000000e+00 5.45115439570000e-01 +1.28000000000000e+00 5.32356391050000e-01 +1.29000000000000e+00 5.19873084080000e-01 +1.30000000000000e+00 5.07666905910000e-01 +1.31000000000000e+00 4.95738429500000e-01 +1.32000000000000e+00 4.84087456010000e-01 +1.33000000000000e+00 4.72713058830000e-01 +1.34000000000000e+00 4.61613628920000e-01 +1.35000000000000e+00 4.50786921030000e-01 +1.36000000000000e+00 4.40230100820000e-01 +1.37000000000000e+00 4.29939792320000e-01 +1.38000000000000e+00 4.19912125650000e-01 +1.39000000000000e+00 4.10142784680000e-01 +1.40000000000000e+00 4.00627054460000e-01 +1.41000000000000e+00 3.91359868000000e-01 +1.42000000000000e+00 3.82335852380000e-01 +1.43000000000000e+00 3.73549373820000e-01 +1.44000000000000e+00 3.64994581500000e-01 +1.45000000000000e+00 3.56665450050000e-01 +1.46000000000000e+00 3.48555820400000e-01 +1.47000000000000e+00 3.40659438820000e-01 +1.48000000000000e+00 3.32969994120000e-01 +1.49000000000000e+00 3.25481152700000e-01 +1.50000000000000e+00 3.18186591470000e-01 +1.51000000000000e+00 3.11080028450000e-01 +1.52000000000000e+00 3.04155251020000e-01 +1.53000000000000e+00 2.97406141670000e-01 +1.54000000000000e+00 2.90826701330000e-01 +1.55000000000000e+00 2.84411070140000e-01 +1.56000000000000e+00 2.78153545680000e-01 +1.57000000000000e+00 2.72048598740000e-01 +1.58000000000000e+00 2.66090886510000e-01 +1.59000000000000e+00 2.60275263420000e-01 +1.60000000000000e+00 2.54596789510000e-01 +1.61000000000000e+00 2.49050736540000e-01 +1.62000000000000e+00 2.43632591910000e-01 +1.63000000000000e+00 2.38338060420000e-01 +1.64000000000000e+00 2.33163064090000e-01 +1.65000000000000e+00 2.28103740090000e-01 +1.66000000000000e+00 2.23156437050000e-01 +1.67000000000000e+00 2.18317709710000e-01 +1.68000000000000e+00 2.13584312280000e-01 +1.69000000000000e+00 2.08953190480000e-01 +1.70000000000000e+00 2.04421472610000e-01 +1.71000000000000e+00 1.99986459720000e-01 +1.72000000000000e+00 1.95645615040000e-01 +1.73000000000000e+00 1.91396552920000e-01 +1.74000000000000e+00 1.87237027390000e-01 +1.75000000000000e+00 1.83164920580000e-01 +1.76000000000000e+00 1.79178231060000e-01 +1.77000000000000e+00 1.75275062390000e-01 +1.78000000000000e+00 1.71453611850000e-01 +1.79000000000000e+00 1.67712159740000e-01 +1.80000000000000e+00 1.64049059110000e-01 +1.81000000000000e+00 1.60462726280000e-01 +1.82000000000000e+00 1.56951632050000e-01 +1.83000000000000e+00 1.53514293870000e-01 +1.84000000000000e+00 1.50149268900000e-01 +1.85000000000000e+00 1.46855148080000e-01 +1.86000000000000e+00 1.43630551530000e-01 +1.87000000000000e+00 1.40474124420000e-01 +1.88000000000000e+00 1.37384535110000e-01 +1.89000000000000e+00 1.34360473420000e-01 +1.90000000000000e+00 1.31400649860000e-01 +1.91000000000000e+00 1.28503795800000e-01 +1.92000000000000e+00 1.25668663070000e-01 +1.93000000000000e+00 1.22894023750000e-01 +1.94000000000000e+00 1.20178670190000e-01 +1.95000000000000e+00 1.17521415060000e-01 +1.96000000000000e+00 1.14921091890000e-01 +1.97000000000000e+00 1.12376554250000e-01 +1.98000000000000e+00 1.09886675310000e-01 +1.99000000000000e+00 1.07450347820000e-01 +2.00000000000000e+00 1.05066484010000e-01 +2.01000000000000e+00 1.02734015510000e-01 +2.02000000000000e+00 1.00451892980000e-01 +2.03000000000000e+00 9.82190859580000e-02 +2.04000000000000e+00 9.60345826120000e-02 +2.05000000000000e+00 9.38973895660000e-02 +2.06000000000000e+00 9.18065316480000e-02 +2.07000000000000e+00 8.97610516730000e-02 +2.08000000000000e+00 8.77600102100000e-02 +2.09000000000000e+00 8.58024853500000e-02 +2.10000000000000e+00 8.38875724710000e-02 +2.11000000000000e+00 8.20143840000000e-02 +2.12000000000000e+00 8.01820491760000e-02 +2.13000000000000e+00 7.83897138070000e-02 +2.14000000000000e+00 7.66365400350000e-02 +2.15000000000000e+00 7.49217060900000e-02 +2.16000000000000e+00 7.32444060480000e-02 +2.17000000000000e+00 7.16038495950000e-02 +2.18000000000000e+00 6.99992617820000e-02 +2.19000000000000e+00 6.84298827840000e-02 +2.20000000000000e+00 6.68949676600000e-02 +2.21000000000000e+00 6.53937861190000e-02 +2.22000000000000e+00 6.39256222750000e-02 +2.23000000000000e+00 6.24897744160000e-02 +2.24000000000000e+00 6.10855547640000e-02 +2.25000000000000e+00 5.97122892460000e-02 +2.26000000000000e+00 5.83693172610000e-02 +2.27000000000000e+00 5.70559914480000e-02 +2.28000000000000e+00 5.57716774590000e-02 +2.29000000000000e+00 5.45157537350000e-02 +2.30000000000000e+00 5.32876112800000e-02 +2.31000000000000e+00 5.20866534400000e-02 +2.32000000000000e+00 5.09122956840000e-02 +2.33000000000000e+00 4.97639653870000e-02 +2.34000000000000e+00 4.86411016170000e-02 +2.35000000000000e+00 4.75431549210000e-02 +2.36000000000000e+00 4.64695871180000e-02 +2.37000000000000e+00 4.54198710890000e-02 +2.38000000000000e+00 4.43934905740000e-02 +2.39000000000000e+00 4.33899399740000e-02 +2.40000000000000e+00 4.24087241490000e-02 +2.41000000000000e+00 4.14493582220000e-02 +2.42000000000000e+00 4.05113673900000e-02 +2.43000000000000e+00 3.95942867260000e-02 +2.44000000000000e+00 3.86976609970000e-02 +2.45000000000000e+00 3.78210444780000e-02 +2.46000000000000e+00 3.69640007680000e-02 +2.47000000000000e+00 3.61261026130000e-02 +2.48000000000000e+00 3.53069317270000e-02 +2.49000000000000e+00 3.45060786170000e-02 +2.50000000000000e+00 3.37231424190000e-02 +2.51000000000000e+00 3.29577307180000e-02 +2.52000000000000e+00 3.22094593920000e-02 +2.53000000000000e+00 3.14779524450000e-02 +2.54000000000000e+00 3.07628418470000e-02 +2.55000000000000e+00 3.00637673750000e-02 +2.56000000000000e+00 2.93803764590000e-02 +2.57000000000000e+00 2.87123240320000e-02 +2.58000000000000e+00 2.80592723750000e-02 +2.59000000000000e+00 2.74208909740000e-02 +2.60000000000000e+00 2.67968563740000e-02 +2.61000000000000e+00 2.61868520360000e-02 +2.62000000000000e+00 2.55905681980000e-02 +2.63000000000000e+00 2.50077017370000e-02 +2.64000000000000e+00 2.44379560370000e-02 +2.65000000000000e+00 2.38810408520000e-02 +2.66000000000000e+00 2.33366721820000e-02 +2.67000000000000e+00 2.28045721380000e-02 +2.68000000000000e+00 2.22844688240000e-02 +2.69000000000000e+00 2.17760962100000e-02 +2.70000000000000e+00 2.12791940120000e-02 +2.71000000000000e+00 2.07935075740000e-02 +2.72000000000000e+00 2.03187877510000e-02 +2.73000000000000e+00 1.98547907970000e-02 +2.74000000000000e+00 1.94012782490000e-02 +2.75000000000000e+00 1.89580168230000e-02 +2.76000000000000e+00 1.85247783000000e-02 +2.77000000000000e+00 1.81013394270000e-02 +2.78000000000000e+00 1.76874818060000e-02 +2.79000000000000e+00 1.72829918000000e-02 +2.80000000000000e+00 1.68876604270000e-02 +2.81000000000000e+00 1.65012832660000e-02 +2.82000000000000e+00 1.61236603610000e-02 +2.83000000000000e+00 1.57545961230000e-02 +2.84000000000000e+00 1.53938992440000e-02 +2.85000000000000e+00 1.50413826030000e-02 +2.86000000000000e+00 1.46968631770000e-02 +2.87000000000000e+00 1.43601619570000e-02 +2.88000000000000e+00 1.40311038610000e-02 +2.89000000000000e+00 1.37095176500000e-02 +2.90000000000000e+00 1.33952358480000e-02 +2.91000000000000e+00 1.30880946620000e-02 +2.92000000000000e+00 1.27879339000000e-02 +2.93000000000000e+00 1.24945968990000e-02 +2.94000000000000e+00 1.22079304490000e-02 +2.95000000000000e+00 1.19277847140000e-02 +2.96000000000000e+00 1.16540131660000e-02 +2.97000000000000e+00 1.13864725100000e-02 +2.98000000000000e+00 1.11250226190000e-02 +2.99000000000000e+00 1.08695264590000e-02 +3.00000000000000e+00 1.06198500290000e-02 +3.01000000000000e+00 1.03758622930000e-02 +3.02000000000000e+00 1.01374351170000e-02 +3.03000000000000e+00 9.90444320350000e-03 +3.04000000000000e+00 9.67676403480000e-03 +3.05000000000000e+00 9.45427780980000e-03 +3.06000000000000e+00 9.23686738580000e-03 +3.07000000000000e+00 9.02441822160000e-03 +3.08000000000000e+00 8.81681832050000e-03 +3.09000000000000e+00 8.61395817540000e-03 +3.10000000000000e+00 8.41573071430000e-03 +3.11000000000000e+00 8.22203124830000e-03 +3.12000000000000e+00 8.03275741870000e-03 +3.13000000000000e+00 7.84780914690000e-03 +3.14000000000000e+00 7.66708858450000e-03 +3.15000000000000e+00 7.49050006500000e-03 +3.16000000000000e+00 7.31795005560000e-03 +3.17000000000000e+00 7.14934711100000e-03 +3.18000000000000e+00 6.98460182800000e-03 +3.19000000000000e+00 6.82362680000000e-03 +3.20000000000000e+00 6.66633657440000e-03 +3.21000000000000e+00 6.51264760880000e-03 +3.22000000000000e+00 6.36247822980000e-03 +3.23000000000000e+00 6.21574859170000e-03 +3.24000000000000e+00 6.07238063630000e-03 +3.25000000000000e+00 5.93229805400000e-03 +3.26000000000000e+00 5.79542624510000e-03 +3.27000000000000e+00 5.66169228200000e-03 +3.28000000000000e+00 5.53102487300000e-03 +3.29000000000000e+00 5.40335432550000e-03 +3.30000000000000e+00 5.27861251160000e-03 +3.31000000000000e+00 5.15673283270000e-03 +3.32000000000000e+00 5.03765018670000e-03 +3.33000000000000e+00 4.92130093400000e-03 +3.34000000000000e+00 4.80762286600000e-03 +3.35000000000000e+00 4.69655517310000e-03 +3.36000000000000e+00 4.58803841360000e-03 +3.37000000000000e+00 4.48201448390000e-03 +3.38000000000000e+00 4.37842658850000e-03 +3.39000000000000e+00 4.27721921100000e-03 +3.40000000000000e+00 4.17833808610000e-03 +3.41000000000000e+00 4.08173017150000e-03 +3.42000000000000e+00 3.98734362100000e-03 +3.43000000000000e+00 3.89512775760000e-03 +3.44000000000000e+00 3.80503304810000e-03 +3.45000000000000e+00 3.71701107720000e-03 +3.46000000000000e+00 3.63101452280000e-03 +3.47000000000000e+00 3.54699713170000e-03 +3.48000000000000e+00 3.46491369580000e-03 +3.49000000000000e+00 3.38472002880000e-03 +3.50000000000000e+00 3.30637294350000e-03 +3.51000000000000e+00 3.22983022960000e-03 +3.52000000000000e+00 3.15505063160000e-03 +3.53000000000000e+00 3.08199382800000e-03 +3.54000000000000e+00 3.01062040990000e-03 +3.55000000000000e+00 2.94089186100000e-03 +3.56000000000000e+00 2.87277053780000e-03 +3.57000000000000e+00 2.80621964940000e-03 +3.58000000000000e+00 2.74120323920000e-03 +3.59000000000000e+00 2.67768616600000e-03 +3.60000000000000e+00 2.61563408550000e-03 +3.61000000000000e+00 2.55501343280000e-03 +3.62000000000000e+00 2.49579140460000e-03 +3.63000000000000e+00 2.43793594270000e-03 +3.64000000000000e+00 2.38141571660000e-03 +3.65000000000000e+00 2.32620010760000e-03 +3.66000000000000e+00 2.27225919280000e-03 +3.67000000000000e+00 2.21956372960000e-03 +3.68000000000000e+00 2.16808514000000e-03 +3.69000000000000e+00 2.11779549610000e-03 +3.70000000000000e+00 2.06866750540000e-03 +3.71000000000000e+00 2.02067449620000e-03 +3.72000000000000e+00 1.97379040430000e-03 +3.73000000000000e+00 1.92798975870000e-03 +3.74000000000000e+00 1.88324766850000e-03 +3.75000000000000e+00 1.83953980980000e-03 +3.76000000000000e+00 1.79684241320000e-03 +3.77000000000000e+00 1.75513225090000e-03 +3.78000000000000e+00 1.71438662470000e-03 +3.79000000000000e+00 1.67458335410000e-03 +3.80000000000000e+00 1.63570076450000e-03 +3.81000000000000e+00 1.59771767600000e-03 +3.82000000000000e+00 1.56061339200000e-03 +3.83000000000000e+00 1.52436768830000e-03 +3.84000000000000e+00 1.48896080270000e-03 +3.85000000000000e+00 1.45437342430000e-03 +3.86000000000000e+00 1.42058668340000e-03 +3.87000000000000e+00 1.38758214160000e-03 +3.88000000000000e+00 1.35534178170000e-03 +3.89000000000000e+00 1.32384799880000e-03 +3.90000000000000e+00 1.29308359040000e-03 +3.91000000000000e+00 1.26303174750000e-03 +3.92000000000000e+00 1.23367604580000e-03 +3.93000000000000e+00 1.20500043680000e-03 +3.94000000000000e+00 1.17698923940000e-03 +3.95000000000000e+00 1.14962713160000e-03 +3.96000000000000e+00 1.12289914210000e-03 +3.97000000000000e+00 1.09679064290000e-03 +3.98000000000000e+00 1.07128734080000e-03 +3.99000000000000e+00 1.04637527040000e-03 +4.00000000000000e+00 1.02204078630000e-03 +4.01000000000000e+00 9.98270556130000e-04 +4.02000000000000e+00 9.75051553070000e-04 +4.03000000000000e+00 9.52371049200000e-04 +4.04000000000000e+00 9.30216608660000e-04 +4.05000000000000e+00 9.08576080920000e-04 +4.06000000000000e+00 8.87437594350000e-04 +4.07000000000000e+00 8.66789549830000e-04 +4.08000000000000e+00 8.46620614660000e-04 +4.09000000000000e+00 8.26919716390000e-04 +4.10000000000000e+00 8.07676036940000e-04 +4.11000000000000e+00 7.88879006760000e-04 +4.12000000000000e+00 7.70518299220000e-04 +4.13000000000000e+00 7.52583825100000e-04 +4.14000000000000e+00 7.35065727100000e-04 +4.15000000000000e+00 7.17954374630000e-04 +4.16000000000000e+00 7.01240358560000e-04 +4.17000000000000e+00 6.84914486200000e-04 +4.18000000000000e+00 6.68967776440000e-04 +4.19000000000000e+00 6.53391454830000e-04 +4.20000000000000e+00 6.38176948860000e-04 +4.21000000000000e+00 6.23315883400000e-04 +4.22000000000000e+00 6.08800076120000e-04 +4.23000000000000e+00 5.94621533200000e-04 +4.24000000000000e+00 5.80772444940000e-04 +4.25000000000000e+00 5.67245181550000e-04 +4.26000000000000e+00 5.54032289040000e-04 +4.27000000000000e+00 5.41126485210000e-04 +4.28000000000000e+00 5.28520655750000e-04 +4.29000000000000e+00 5.16207850370000e-04 +4.30000000000000e+00 5.04181279040000e-04 +4.31000000000000e+00 4.92434308310000e-04 +4.32000000000000e+00 4.80960457720000e-04 +4.33000000000000e+00 4.69753396390000e-04 +4.34000000000000e+00 4.58806939480000e-04 +4.35000000000000e+00 4.48115044870000e-04 +4.36000000000000e+00 4.37671809940000e-04 +4.37000000000000e+00 4.27471468280000e-04 +4.38000000000000e+00 4.17508386660000e-04 +4.39000000000000e+00 4.07777061950000e-04 +4.40000000000000e+00 3.98272118100000e-04 +4.41000000000000e+00 3.88988303250000e-04 +4.42000000000000e+00 3.79920486860000e-04 +4.43000000000000e+00 3.71063656940000e-04 +4.44000000000000e+00 3.62412917370000e-04 +4.45000000000000e+00 3.53963485160000e-04 +4.46000000000000e+00 3.45710687890000e-04 +4.47000000000000e+00 3.37649961180000e-04 +4.48000000000000e+00 3.29776846160000e-04 +4.49000000000000e+00 3.22086987120000e-04 +4.50000000000000e+00 3.14576129090000e-04 +4.51000000000000e+00 3.07240115520000e-04 +4.52000000000000e+00 3.00074886030000e-04 +4.53000000000000e+00 2.93076474160000e-04 +4.54000000000000e+00 2.86241005300000e-04 +4.55000000000000e+00 2.79564694480000e-04 +4.56000000000000e+00 2.73043844380000e-04 +4.57000000000000e+00 2.66674843230000e-04 +4.58000000000000e+00 2.60454162920000e-04 +4.59000000000000e+00 2.54378357010000e-04 +4.60000000000000e+00 2.48444058920000e-04 +4.61000000000000e+00 2.42647980040000e-04 +4.62000000000000e+00 2.36986907900000e-04 +4.63000000000000e+00 2.31457704510000e-04 +4.64000000000000e+00 2.26057304540000e-04 +4.65000000000000e+00 2.20782713720000e-04 +4.66000000000000e+00 2.15631007190000e-04 +4.67000000000000e+00 2.10599327860000e-04 +4.68000000000000e+00 2.05684884890000e-04 +4.69000000000000e+00 2.00884952100000e-04 +4.70000000000000e+00 1.96196866560000e-04 +4.71000000000000e+00 1.91618027090000e-04 +4.72000000000000e+00 1.87145892820000e-04 +4.73000000000000e+00 1.82777981810000e-04 +4.74000000000000e+00 1.78511869700000e-04 +4.75000000000000e+00 1.74345188350000e-04 +4.76000000000000e+00 1.70275624580000e-04 +4.77000000000000e+00 1.66300918890000e-04 +4.78000000000000e+00 1.62418864210000e-04 +4.79000000000000e+00 1.58627304660000e-04 +4.80000000000000e+00 1.54924134440000e-04 +4.81000000000000e+00 1.51307296570000e-04 +4.82000000000000e+00 1.47774781880000e-04 +4.83000000000000e+00 1.44324627820000e-04 +4.84000000000000e+00 1.40954917420000e-04 +4.85000000000000e+00 1.37663778190000e-04 +4.86000000000000e+00 1.34449381150000e-04 +4.87000000000000e+00 1.31309939770000e-04 +4.88000000000000e+00 1.28243709060000e-04 +4.89000000000000e+00 1.25248984520000e-04 +4.90000000000000e+00 1.22324101260000e-04 +4.91000000000000e+00 1.19467433080000e-04 +4.92000000000000e+00 1.16677391530000e-04 +4.93000000000000e+00 1.13952425090000e-04 +4.94000000000000e+00 1.11291018300000e-04 +4.95000000000000e+00 1.08691690920000e-04 +4.96000000000000e+00 1.06152997080000e-04 +4.97000000000000e+00 1.03673524550000e-04 +4.98000000000000e+00 1.01251893900000e-04 +4.99000000000000e+00 9.88867577730000e-05 +5.00000000000000e+00 9.65768001570000e-05 +5.01000000000000e+00 9.43207356160000e-05 +5.02000000000000e+00 9.21173086050000e-05 +5.03000000000000e+00 8.99652927730000e-05 +5.04000000000000e+00 8.78634902780000e-05 +5.05000000000000e+00 8.58107311410000e-05 +5.06000000000000e+00 8.38058726050000e-05 +5.07000000000000e+00 8.18477984840000e-05 +5.08000000000000e+00 7.99354185510000e-05 +5.09000000000000e+00 7.80676679420000e-05 +5.10000000000000e+00 7.62435065550000e-05 +5.11000000000000e+00 7.44619184930000e-05 +5.12000000000000e+00 7.27219115060000e-05 +5.13000000000000e+00 7.10225164200000e-05 +5.14000000000000e+00 6.93627866140000e-05 +5.15000000000000e+00 6.77417974950000e-05 +5.16000000000000e+00 6.61586459780000e-05 +5.17000000000000e+00 6.46124499970000e-05 +5.18000000000000e+00 6.31023480330000e-05 +5.19000000000000e+00 6.16274986070000e-05 +5.20000000000000e+00 6.01870798260000e-05 +5.21000000000000e+00 5.87802889290000e-05 +5.22000000000000e+00 5.74063418390000e-05 +5.23000000000000e+00 5.60644727270000e-05 +5.24000000000000e+00 5.47539336150000e-05 +5.25000000000000e+00 5.34739939260000e-05 +5.26000000000000e+00 5.22239400970000e-05 +5.27000000000000e+00 5.10030751770000e-05 +5.28000000000000e+00 4.98107184440000e-05 +5.29000000000000e+00 4.86462050190000e-05 +5.30000000000000e+00 4.75088855250000e-05 +5.31000000000000e+00 4.63981257040000e-05 +5.32000000000000e+00 4.53133060660000e-05 +5.33000000000000e+00 4.42538215520000e-05 +5.34000000000000e+00 4.32190811940000e-05 +5.35000000000000e+00 4.22085077810000e-05 +5.36000000000000e+00 4.12215375610000e-05 +5.37000000000000e+00 4.02576199150000e-05 +5.38000000000000e+00 3.93162170500000e-05 +5.39000000000000e+00 3.83968037000000e-05 +5.40000000000000e+00 3.74988668360000e-05 +5.41000000000000e+00 3.66219053820000e-05 +5.42000000000000e+00 3.57654299280000e-05 +5.43000000000000e+00 3.49289624900000e-05 +5.44000000000000e+00 3.41120362110000e-05 +5.45000000000000e+00 3.33141951130000e-05 +5.46000000000000e+00 3.25349938430000e-05 +5.47000000000000e+00 3.17739974290000e-05 +5.48000000000000e+00 3.10307810270000e-05 +5.49000000000000e+00 3.03049297070000e-05 +5.50000000000000e+00 2.95960382090000e-05 +5.51000000000000e+00 2.89037107170000e-05 +5.52000000000000e+00 2.82275606420000e-05 +5.53000000000000e+00 2.75672104030000e-05 +5.54000000000000e+00 2.69222912220000e-05 +5.55000000000000e+00 2.62924429090000e-05 +5.56000000000000e+00 2.56773136910000e-05 +5.57000000000000e+00 2.50765599860000e-05 +5.58000000000000e+00 2.44898462210000e-05 +5.59000000000000e+00 2.39168446500000e-05 +5.60000000000000e+00 2.33572351660000e-05 +5.61000000000000e+00 2.28107051200000e-05 +5.62000000000000e+00 2.22769491600000e-05 +5.63000000000000e+00 2.17556690580000e-05 +5.64000000000000e+00 2.12465735380000e-05 +5.65000000000000e+00 2.07493781150000e-05 +5.66000000000000e+00 2.02638049370000e-05 +5.67000000000000e+00 1.97895826340000e-05 +5.68000000000000e+00 1.93264461550000e-05 +5.69000000000000e+00 1.88741366450000e-05 +5.70000000000000e+00 1.84324012830000e-05 +5.71000000000000e+00 1.80009931420000e-05 +5.72000000000000e+00 1.75796710580000e-05 +5.73000000000000e+00 1.71681994870000e-05 +5.74000000000000e+00 1.67663483820000e-05 +5.75000000000000e+00 1.63738930560000e-05 +5.76000000000000e+00 1.59906140740000e-05 +5.77000000000000e+00 1.56162971180000e-05 +5.78000000000000e+00 1.52507328680000e-05 +5.79000000000000e+00 1.48937168860000e-05 +5.80000000000000e+00 1.45450495050000e-05 +5.81000000000000e+00 1.42045357150000e-05 +5.82000000000000e+00 1.38719850500000e-05 +5.83000000000000e+00 1.35472115020000e-05 +5.84000000000000e+00 1.32300333960000e-05 +5.85000000000000e+00 1.29202732970000e-05 +5.86000000000000e+00 1.26177579090000e-05 +5.87000000000000e+00 1.23223179810000e-05 +5.88000000000000e+00 1.20337882090000e-05 +5.89000000000000e+00 1.17520071440000e-05 +5.90000000000000e+00 1.14768171150000e-05 +5.91000000000000e+00 1.12080641250000e-05 +5.92000000000000e+00 1.09455977720000e-05 +5.93000000000000e+00 1.06892711630000e-05 +5.94000000000000e+00 1.04389408330000e-05 +5.95000000000000e+00 1.01944666670000e-05 +5.96000000000000e+00 9.95571181220000e-06 +5.97000000000000e+00 9.72254262430000e-06 +5.98000000000000e+00 9.49482857210000e-06 +5.99000000000000e+00 9.27244217130000e-06 +6.00000000000000e+00 9.05525891350000e-06 +6.01000000000000e+00 8.84315719640000e-06 +6.02000000000000e+00 8.63601825640000e-06 +6.03000000000000e+00 8.43372609780000e-06 +6.04000000000000e+00 8.23616744160000e-06 +6.05000000000000e+00 8.04323165120000e-06 +6.06000000000000e+00 7.85481067180000e-06 +6.07000000000000e+00 7.67079897150000e-06 +6.08000000000000e+00 7.49109348200000e-06 +6.09000000000000e+00 7.31559354160000e-06 +6.10000000000000e+00 7.14420083550000e-06 +6.11000000000000e+00 6.97681934950000e-06 +6.12000000000000e+00 6.81335531230000e-06 +6.13000000000000e+00 6.65371714060000e-06 +6.14000000000000e+00 6.49781538940000e-06 +6.15000000000000e+00 6.34556270230000e-06 +6.16000000000000e+00 6.19687376310000e-06 +6.17000000000000e+00 6.05166524630000e-06 +6.18000000000000e+00 5.90985577200000e-06 +6.19000000000000e+00 5.77136586680000e-06 +6.20000000000000e+00 5.63611791010000e-06 +6.21000000000000e+00 5.50403609420000e-06 +6.22000000000000e+00 5.37504638190000e-06 +6.23000000000000e+00 5.24907646500000e-06 +6.24000000000000e+00 5.12605572440000e-06 +6.25000000000000e+00 5.00591518670000e-06 +6.26000000000000e+00 4.88858749730000e-06 +6.27000000000000e+00 4.77400687210000e-06 +6.28000000000000e+00 4.66210906330000e-06 +6.29000000000000e+00 4.55283132410000e-06 +6.30000000000000e+00 4.44611237330000e-06 +6.31000000000000e+00 4.34189236130000e-06 +6.32000000000000e+00 4.24011283510000e-06 +6.33000000000000e+00 4.14071670840000e-06 +6.34000000000000e+00 4.04364823220000e-06 +6.35000000000000e+00 3.94885295750000e-06 +6.36000000000000e+00 3.85627770780000e-06 +6.37000000000000e+00 3.76587054870000e-06 +6.38000000000000e+00 3.67758075940000e-06 +6.39000000000000e+00 3.59135880450000e-06 +6.40000000000000e+00 3.50715630260000e-06 +6.41000000000000e+00 3.42492600890000e-06 +6.42000000000000e+00 3.34462178110000e-06 +6.43000000000000e+00 3.26619855460000e-06 +6.44000000000000e+00 3.18961231760000e-06 +6.45000000000000e+00 3.11482008720000e-06 +6.46000000000000e+00 3.04177988490000e-06 +6.47000000000000e+00 2.97045071280000e-06 +6.48000000000000e+00 2.90079252930000e-06 +6.49000000000000e+00 2.83276623440000e-06 +6.50000000000000e+00 2.76633363910000e-06 +6.51000000000000e+00 2.70145744710000e-06 +6.52000000000000e+00 2.63810123380000e-06 +6.53000000000000e+00 2.57622942610000e-06 +6.54000000000000e+00 2.51580728240000e-06 +6.55000000000000e+00 2.45680087190000e-06 +6.56000000000000e+00 2.39917705790000e-06 +6.57000000000000e+00 2.34290348090000e-06 +6.58000000000000e+00 2.28794853630000e-06 +6.59000000000000e+00 2.23428135820000e-06 +6.60000000000000e+00 2.18187180260000e-06 +6.61000000000000e+00 2.13069042980000e-06 +6.62000000000000e+00 2.08070848890000e-06 +6.63000000000000e+00 2.03189789940000e-06 +6.64000000000000e+00 1.98423123940000e-06 +6.65000000000000e+00 1.93768172940000e-06 +6.66000000000000e+00 1.89222321480000e-06 +6.67000000000000e+00 1.84783015280000e-06 +6.68000000000000e+00 1.80447759770000e-06 +6.69000000000000e+00 1.76214118710000e-06 +6.70000000000000e+00 1.72079712850000e-06 +6.71000000000000e+00 1.68042218440000e-06 +6.72000000000000e+00 1.64099366250000e-06 +6.73000000000000e+00 1.60248940230000e-06 +6.74000000000000e+00 1.56488776040000e-06 +6.75000000000000e+00 1.52816759970000e-06 +6.76000000000000e+00 1.49230827740000e-06 +6.77000000000000e+00 1.45728963370000e-06 +6.78000000000000e+00 1.42309198030000e-06 +6.79000000000000e+00 1.38969608800000e-06 +6.80000000000000e+00 1.35708317910000e-06 +6.81000000000000e+00 1.32523491630000e-06 +6.82000000000000e+00 1.29413339000000e-06 +6.83000000000000e+00 1.26376110980000e-06 +6.84000000000000e+00 1.23410099430000e-06 +6.85000000000000e+00 1.20513636190000e-06 +6.86000000000000e+00 1.17685092100000e-06 +6.87000000000000e+00 1.14922876080000e-06 +6.88000000000000e+00 1.12225434270000e-06 +6.89000000000000e+00 1.09591249400000e-06 +6.90000000000000e+00 1.07018839530000e-06 +6.91000000000000e+00 1.04506757440000e-06 +6.92000000000000e+00 1.02053589760000e-06 +6.93000000000000e+00 9.96579561720000e-07 +6.94000000000000e+00 9.73185086930000e-07 +6.95000000000000e+00 9.50339308330000e-07 +6.96000000000000e+00 9.28029368290000e-07 +6.97000000000000e+00 9.06242712930000e-07 +6.98000000000000e+00 8.84967080740000e-07 +6.99000000000000e+00 8.64190497200000e-07 +7.00000000000000e+00 8.43901268020000e-07 +7.01000000000000e+00 8.24087972630000e-07 +7.02000000000000e+00 8.04739457760000e-07 +7.03000000000000e+00 7.85844831220000e-07 +7.04000000000000e+00 7.67393454440000e-07 +7.05000000000000e+00 7.49374940350000e-07 +7.06000000000000e+00 7.31779144350000e-07 +7.07000000000000e+00 7.14596159070000e-07 +7.08000000000000e+00 6.97816309050000e-07 +7.09000000000000e+00 6.81430145350000e-07 +7.10000000000000e+00 6.65428440200000e-07 +7.11000000000000e+00 6.49802181920000e-07 +7.12000000000000e+00 6.34542569230000e-07 +7.13000000000000e+00 6.19641007180000e-07 +7.14000000000000e+00 6.05089103400000e-07 +7.15000000000000e+00 5.90878661140000e-07 +7.16000000000000e+00 5.77001675610000e-07 +7.17000000000000e+00 5.63450329430000e-07 +7.18000000000000e+00 5.50216988290000e-07 +7.19000000000000e+00 5.37294196640000e-07 +7.20000000000000e+00 5.24674673520000e-07 +7.21000000000000e+00 5.12351307400000e-07 +7.22000000000000e+00 5.00317155330000e-07 +7.23000000000000e+00 4.88565436350000e-07 +7.24000000000000e+00 4.77089528120000e-07 +7.25000000000000e+00 4.65882963400000e-07 +7.26000000000000e+00 4.54939426410000e-07 +7.27000000000000e+00 4.44252749310000e-07 +7.28000000000000e+00 4.33816908710000e-07 +7.29000000000000e+00 4.23626022080000e-07 +7.30000000000000e+00 4.13674344270000e-07 +7.31000000000000e+00 4.03956266340000e-07 +7.32000000000000e+00 3.94466309900000e-07 +7.33000000000000e+00 3.85199124870000e-07 +7.34000000000000e+00 3.76149486520000e-07 +7.35000000000000e+00 3.67312292510000e-07 +7.36000000000000e+00 3.58682560030000e-07 +7.37000000000000e+00 3.50255423010000e-07 +7.38000000000000e+00 3.42026128940000e-07 +7.39000000000000e+00 3.33990037030000e-07 +7.40000000000000e+00 3.26142615960000e-07 +7.41000000000000e+00 3.18479440020000e-07 +7.42000000000000e+00 3.10996187240000e-07 +7.43000000000000e+00 3.03688636880000e-07 +7.44000000000000e+00 2.96552667120000e-07 +7.45000000000000e+00 2.89584252730000e-07 +7.46000000000000e+00 2.82779462800000e-07 +7.47000000000000e+00 2.76134457990000e-07 +7.48000000000000e+00 2.69645489710000e-07 +7.49000000000000e+00 2.63308897430000e-07 +7.50000000000000e+00 2.57121106060000e-07 +7.51000000000000e+00 2.51078624330000e-07 +7.52000000000000e+00 2.45178042760000e-07 +7.53000000000000e+00 2.39416031790000e-07 +7.54000000000000e+00 2.33789339900000e-07 +7.55000000000000e+00 2.28294791800000e-07 +7.56000000000000e+00 2.22929286080000e-07 +7.57000000000000e+00 2.17689794840000e-07 +7.58000000000000e+00 2.12573361230000e-07 +7.59000000000000e+00 2.07577097430000e-07 +7.60000000000000e+00 2.02698183340000e-07 +7.61000000000000e+00 1.97933864960000e-07 +7.62000000000000e+00 1.93281452850000e-07 +7.63000000000000e+00 1.88738320620000e-07 +7.64000000000000e+00 1.84301903460000e-07 +7.65000000000000e+00 1.79969696280000e-07 +7.66000000000000e+00 1.75739253280000e-07 +7.67000000000000e+00 1.71608186190000e-07 +7.68000000000000e+00 1.67574162490000e-07 +7.69000000000000e+00 1.63634904330000e-07 +7.70000000000000e+00 1.59788187270000e-07 +7.71000000000000e+00 1.56031839040000e-07 +7.72000000000000e+00 1.52363738310000e-07 +7.73000000000000e+00 1.48781813480000e-07 +7.74000000000000e+00 1.45284041280000e-07 +7.75000000000000e+00 1.41868446050000e-07 +7.76000000000000e+00 1.38533098980000e-07 +7.77000000000000e+00 1.35276116100000e-07 +7.78000000000000e+00 1.32095657670000e-07 +7.79000000000000e+00 1.28989927090000e-07 +7.80000000000000e+00 1.25957169870000e-07 +7.81000000000000e+00 1.22995672690000e-07 +7.82000000000000e+00 1.20103762420000e-07 +7.83000000000000e+00 1.17279805080000e-07 +7.84000000000000e+00 1.14522204730000e-07 +7.85000000000000e+00 1.11829403720000e-07 +7.86000000000000e+00 1.09199880520000e-07 +7.87000000000000e+00 1.06632149250000e-07 +7.88000000000000e+00 1.04124758940000e-07 +7.89000000000000e+00 1.01676292620000e-07 +7.90000000000000e+00 9.92853665620000e-08 +7.91000000000000e+00 9.69506295150000e-08 +7.92000000000000e+00 9.46707619170000e-08 +7.93000000000000e+00 9.24444748340000e-08 +7.94000000000000e+00 9.02705101340000e-08 +7.95000000000000e+00 8.81476391380000e-08 +7.96000000000000e+00 8.60746618760000e-08 +7.97000000000000e+00 8.40504065310000e-08 +7.98000000000000e+00 8.20737287830000e-08 +7.99000000000000e+00 8.01435111590000e-08 +8.00000000000000e+00 7.82586624070000e-08 +8.01000000000000e+00 7.64181168790000e-08 +8.02000000000000e+00 7.46208338460000e-08 +8.03000000000000e+00 7.28657968750000e-08 +8.04000000000000e+00 7.11520139360000e-08 +8.05000000000000e+00 6.94785159770000e-08 +8.06000000000000e+00 6.78443566930000e-08 +8.07000000000000e+00 6.62486119830000e-08 +8.08000000000000e+00 6.46903794360000e-08 +8.09000000000000e+00 6.31687778150000e-08 +8.10000000000000e+00 6.16829465670000e-08 +8.11000000000000e+00 6.02320453360000e-08 +8.12000000000000e+00 5.88152532810000e-08 +8.13000000000000e+00 5.74317691180000e-08 +8.14000000000000e+00 5.60808104510000e-08 +8.15000000000000e+00 5.47616131200000e-08 +8.16000000000000e+00 5.34734308960000e-08 +8.17000000000000e+00 5.22155350720000e-08 +8.18000000000000e+00 5.09872140410000e-08 +8.19000000000000e+00 4.97877729030000e-08 +8.20000000000000e+00 4.86165330670000e-08 +8.21000000000000e+00 4.74728318740000e-08 +8.22000000000000e+00 4.63560219650000e-08 +8.23000000000000e+00 4.52654716630000e-08 +8.24000000000000e+00 4.42005639580000e-08 +8.25000000000000e+00 4.31606962860000e-08 +8.26000000000000e+00 4.21452802300000e-08 +8.27000000000000e+00 4.11537411880000e-08 +8.28000000000000e+00 4.01855180460000e-08 +8.29000000000000e+00 3.92400628670000e-08 +8.30000000000000e+00 3.83168405750000e-08 +8.31000000000000e+00 3.74153286570000e-08 +8.32000000000000e+00 3.65350166240000e-08 +8.33000000000000e+00 3.56754064840000e-08 +8.34000000000000e+00 3.48360117000000e-08 +8.35000000000000e+00 3.40163571560000e-08 +8.36000000000000e+00 3.32159788960000e-08 +8.37000000000000e+00 3.24344238550000e-08 +8.38000000000000e+00 3.16712496110000e-08 +8.39000000000000e+00 3.09260241270000e-08 +8.40000000000000e+00 3.01983255140000e-08 +8.41000000000000e+00 2.94877417810000e-08 +8.42000000000000e+00 2.87938704210000e-08 +8.43000000000000e+00 2.81163188040000e-08 +8.44000000000000e+00 2.74547033150000e-08 +8.45000000000000e+00 2.68086493500000e-08 +8.46000000000000e+00 2.61777911060000e-08 +8.47000000000000e+00 2.55617713680000e-08 +8.48000000000000e+00 2.49602413110000e-08 +8.49000000000000e+00 2.43728603040000e-08 +8.50000000000000e+00 2.37992957170000e-08 +8.51000000000000e+00 2.32392227300000e-08 +8.52000000000000e+00 2.26923239770000e-08 +8.53000000000000e+00 2.21582899030000e-08 +8.54000000000000e+00 2.16368180700000e-08 +8.55000000000000e+00 2.11276131370000e-08 +8.56000000000000e+00 2.06303867000000e-08 +8.57000000000000e+00 2.01448571290000e-08 +8.58000000000000e+00 1.96707494110000e-08 +8.59000000000000e+00 1.92077949930000e-08 +8.60000000000000e+00 1.87557316300000e-08 +8.61000000000000e+00 1.83143032380000e-08 +8.62000000000000e+00 1.78832596310000e-08 +8.63000000000000e+00 1.74623567020000e-08 +8.64000000000000e+00 1.70513560480000e-08 +8.65000000000000e+00 1.66500248310000e-08 +8.66000000000000e+00 1.62581356810000e-08 +8.67000000000000e+00 1.58754665700000e-08 +8.68000000000000e+00 1.55018006860000e-08 +8.69000000000000e+00 1.51369263130000e-08 +8.70000000000000e+00 1.47806367070000e-08 +8.71000000000000e+00 1.44327299830000e-08 +8.72000000000000e+00 1.40930089440000e-08 +8.73000000000000e+00 1.37612810570000e-08 +8.74000000000000e+00 1.34373584290000e-08 +8.75000000000000e+00 1.31210575030000e-08 +8.76000000000000e+00 1.28121990340000e-08 +8.77000000000000e+00 1.25106079900000e-08 +8.78000000000000e+00 1.22161134520000e-08 +8.79000000000000e+00 1.19285485170000e-08 +8.80000000000000e+00 1.16477502050000e-08 +8.81000000000000e+00 1.13735593630000e-08 +8.82000000000000e+00 1.11058205830000e-08 +8.83000000000000e+00 1.08443819950000e-08 +8.84000000000000e+00 1.05890955190000e-08 +8.85000000000000e+00 1.03398164610000e-08 +8.86000000000000e+00 1.00964035220000e-08 +8.87000000000000e+00 9.85871872290000e-09 +8.88000000000000e+00 9.62662732930000e-09 +8.89000000000000e+00 9.39999777220000e-09 +8.90000000000000e+00 9.17870157480000e-09 +8.91000000000000e+00 8.96261328010000e-09 +8.92000000000000e+00 8.75161037970000e-09 +8.93000000000000e+00 8.54557320940000e-09 +8.94000000000000e+00 8.34438492660000e-09 +8.95000000000000e+00 8.14793153040000e-09 +8.96000000000000e+00 7.95610163850000e-09 +8.97000000000000e+00 7.76878648650000e-09 +8.98000000000000e+00 7.58587986720000e-09 +8.99000000000000e+00 7.40727806940000e-09 +9.00000000000000e+00 7.23287982000000e-09 +9.01000000000000e+00 7.06258622620000e-09 +9.02000000000000e+00 6.89630072010000e-09 +9.03000000000000e+00 6.73392900350000e-09 +9.04000000000000e+00 6.57537894170000e-09 +9.05000000000000e+00 6.42056064590000e-09 +9.06000000000000e+00 6.26938634880000e-09 +9.07000000000000e+00 6.12177031810000e-09 +9.08000000000000e+00 5.97762883720000e-09 +9.09000000000000e+00 5.83688015740000e-09 +9.10000000000000e+00 5.69944445200000e-09 +9.11000000000000e+00 5.56524377080000e-09 +9.12000000000000e+00 5.43420199640000e-09 +9.13000000000000e+00 5.30624480080000e-09 +9.14000000000000e+00 5.18129960340000e-09 +9.15000000000000e+00 5.05929547420000e-09 +9.16000000000000e+00 4.94016325170000e-09 +9.17000000000000e+00 4.82383537420000e-09 +9.18000000000000e+00 4.71024585550000e-09 +9.19000000000000e+00 4.59933026070000e-09 +9.20000000000000e+00 4.49102567020000e-09 +9.21000000000000e+00 4.38527064370000e-09 +9.22000000000000e+00 4.28200518550000e-09 +9.23000000000000e+00 4.18117071050000e-09 +9.24000000000000e+00 4.08271001140000e-09 +9.25000000000000e+00 3.98656722580000e-09 +9.26000000000000e+00 3.89268775600000e-09 +9.27000000000000e+00 3.80101837850000e-09 +9.28000000000000e+00 3.71150709360000e-09 +9.29000000000000e+00 3.62410311520000e-09 +9.30000000000000e+00 3.53875685150000e-09 +9.31000000000000e+00 3.45541987700000e-09 +9.32000000000000e+00 3.37404490460000e-09 +9.33000000000000e+00 3.29458575970000e-09 +9.34000000000000e+00 3.21699735320000e-09 +9.35000000000000e+00 3.14123565640000e-09 +9.36000000000000e+00 3.06725767590000e-09 +9.37000000000000e+00 2.99502139390000e-09 +9.38000000000000e+00 2.92448584050000e-09 +9.39000000000000e+00 2.85561100130000e-09 +9.40000000000000e+00 2.78835779060000e-09 +9.41000000000000e+00 2.72268804190000e-09 +9.42000000000000e+00 2.65856448610000e-09 +9.43000000000000e+00 2.59595073110000e-09 +9.44000000000000e+00 2.53481124030000e-09 +9.45000000000000e+00 2.47511131290000e-09 +9.46000000000000e+00 2.41681706450000e-09 +9.47000000000000e+00 2.35989540730000e-09 +9.48000000000000e+00 2.30431401150000e-09 +9.49000000000000e+00 2.25004132870000e-09 +9.50000000000000e+00 2.19704657490000e-09 +9.51000000000000e+00 2.14529967020000e-09 +9.52000000000000e+00 2.09477124220000e-09 +9.53000000000000e+00 2.04543260950000e-09 +9.54000000000000e+00 1.99725576530000e-09 +9.55000000000000e+00 1.95021336160000e-09 +9.56000000000000e+00 1.90427869340000e-09 +9.57000000000000e+00 1.85942568410000e-09 +9.58000000000000e+00 1.81562887050000e-09 +9.59000000000000e+00 1.77286338390000e-09 +9.60000000000000e+00 1.73110492040000e-09 +9.61000000000000e+00 1.69032980270000e-09 +9.62000000000000e+00 1.65051488260000e-09 +9.63000000000000e+00 1.61163755610000e-09 +9.64000000000000e+00 1.57367575130000e-09 +9.65000000000000e+00 1.53660791530000e-09 +9.66000000000000e+00 1.50041300250000e-09 +9.67000000000000e+00 1.46507046200000e-09 +9.68000000000000e+00 1.43056022650000e-09 +9.69000000000000e+00 1.39686270090000e-09 +9.70000000000000e+00 1.36395875100000e-09 +9.71000000000000e+00 1.33182967480000e-09 +9.72000000000000e+00 1.30045723580000e-09 +9.73000000000000e+00 1.26982363140000e-09 +9.74000000000000e+00 1.23991146730000e-09 +9.75000000000000e+00 1.21070375870000e-09 +9.76000000000000e+00 1.18218392000000e-09 +9.77000000000000e+00 1.15433575610000e-09 +9.78000000000000e+00 1.12714345290000e-09 +9.79000000000000e+00 1.10059156820000e-09 +9.80000000000000e+00 1.07466502320000e-09 +9.81000000000000e+00 1.04934909390000e-09 +9.82000000000000e+00 1.02462940260000e-09 +9.83000000000000e+00 1.00049188790000e-09 +9.84000000000000e+00 9.76922863660000e-10 +9.85000000000000e+00 9.53908945360000e-10 +9.86000000000000e+00 9.31437062960000e-10 +9.87000000000000e+00 9.09494453940000e-10 +9.88000000000000e+00 8.88068656100000e-10 +9.89000000000000e+00 8.67147500440000e-10 +9.90000000000000e+00 8.46719104290000e-10 +9.91000000000000e+00 8.26771864530000e-10 +9.92000000000000e+00 8.07294451080000e-10 +9.93000000000000e+00 7.88275800430000e-10 +9.94000000000000e+00 7.69705105680000e-10 +9.95000000000000e+00 7.51571806330000e-10 +9.96000000000000e+00 7.33865618180000e-10 +9.97000000000000e+00 7.16576484060000e-10 +9.98000000000000e+00 6.99694583480000e-10 +9.99000000000000e+00 6.83210327050000e-10 +1.00000000000000e+01 6.67114351050000e-10 +1.00100000000000e+01 6.51397512070000e-10 +1.00200000000000e+01 6.36050881850000e-10 +1.00300000000000e+01 6.21065742240000e-10 +1.00400000000000e+01 6.06433580210000e-10 +1.00500000000000e+01 5.92146083060000e-10 +1.00600000000000e+01 5.78195129540000e-10 +1.00700000000000e+01 5.64572786570000e-10 +1.00800000000000e+01 5.51271326890000e-10 +1.00900000000000e+01 5.38283194040000e-10 +1.01000000000000e+01 5.25601009390000e-10 +1.01100000000000e+01 5.13217567990000e-10 +1.01200000000000e+01 5.01125834410000e-10 +1.01300000000000e+01 4.89318938800000e-10 +1.01400000000000e+01 4.77790172980000e-10 +1.01500000000000e+01 4.66532986600000e-10 +1.01600000000000e+01 4.55540983480000e-10 +1.01700000000000e+01 4.44807917950000e-10 +1.01800000000000e+01 4.34327688810000e-10 +1.01900000000000e+01 4.24094333410000e-10 +1.02000000000000e+01 4.14102047590000e-10 +1.02100000000000e+01 4.04345153940000e-10 +1.02200000000000e+01 3.94818108700000e-10 +1.02300000000000e+01 3.85515498570000e-10 +1.02400000000000e+01 3.76432037680000e-10 +1.02500000000000e+01 3.67562564530000e-10 +1.02600000000000e+01 3.58902039120000e-10 +1.02700000000000e+01 3.50445540020000e-10 +1.02800000000000e+01 3.42188261670000e-10 +1.02900000000000e+01 3.34125511560000e-10 +1.03000000000000e+01 3.26252707670000e-10 +1.03100000000000e+01 3.18565365550000e-10 +1.03200000000000e+01 3.11059126930000e-10 +1.03300000000000e+01 3.03729726480000e-10 +1.03400000000000e+01 2.96572999150000e-10 +1.03500000000000e+01 2.89584877930000e-10 +1.03600000000000e+01 2.82761391530000e-10 +1.03700000000000e+01 2.76098662140000e-10 +1.03800000000000e+01 2.69592903210000e-10 +1.03900000000000e+01 2.63240417300000e-10 +1.04000000000000e+01 2.57037594000000e-10 +1.04100000000000e+01 2.50980907890000e-10 +1.04200000000000e+01 2.45066916520000e-10 +1.04300000000000e+01 2.39292253200000e-10 +1.04400000000000e+01 2.33653637990000e-10 +1.04500000000000e+01 2.28147869460000e-10 +1.04600000000000e+01 2.22771818470000e-10 +1.04700000000000e+01 2.17522429580000e-10 +1.04800000000000e+01 2.12396719220000e-10 +1.04900000000000e+01 2.07391774100000e-10 +1.05000000000000e+01 2.02504749460000e-10 +1.05100000000000e+01 1.97732867530000e-10 +1.05200000000000e+01 1.93073415910000e-10 +1.05300000000000e+01 1.88523746030000e-10 +1.05400000000000e+01 1.84081271670000e-10 +1.05500000000000e+01 1.79743466710000e-10 +1.05600000000000e+01 1.75507860110000e-10 +1.05700000000000e+01 1.71372050320000e-10 +1.05800000000000e+01 1.67333686560000e-10 +1.05900000000000e+01 1.63390473370000e-10 +1.06000000000000e+01 1.59540169340000e-10 +1.06100000000000e+01 1.55780585830000e-10 +1.06200000000000e+01 1.52109585710000e-10 +1.06300000000000e+01 1.48525082150000e-10 +1.06400000000000e+01 1.45025037450000e-10 +1.06500000000000e+01 1.41607461880000e-10 +1.06600000000000e+01 1.38270412530000e-10 +1.06700000000000e+01 1.35011992230000e-10 +1.06800000000000e+01 1.31830345980000e-10 +1.06900000000000e+01 1.28723664520000e-10 +1.07000000000000e+01 1.25690184800000e-10 +1.07100000000000e+01 1.22728182380000e-10 +1.07200000000000e+01 1.19835973420000e-10 +1.07300000000000e+01 1.17011913710000e-10 +1.07400000000000e+01 1.14254397780000e-10 +1.07500000000000e+01 1.11561857930000e-10 +1.07600000000000e+01 1.08932763360000e-10 +1.07700000000000e+01 1.06365619310000e-10 +1.07800000000000e+01 1.03858966210000e-10 +1.07900000000000e+01 1.01411378860000e-10 +1.08000000000000e+01 9.90214655730000e-11 +1.08100000000000e+01 9.66878646270000e-11 +1.08200000000000e+01 9.44092505250000e-11 +1.08300000000000e+01 9.21843293690000e-11 +1.08400000000000e+01 9.00118362210000e-11 +1.08500000000000e+01 8.78905359250000e-11 +1.08600000000000e+01 8.58192224060000e-11 +1.08700000000000e+01 8.37967179840000e-11 +1.08800000000000e+01 8.18218727010000e-11 +1.08900000000000e+01 7.98935636710000e-11 +1.09000000000000e+01 7.80106944410000e-11 +1.09100000000000e+01 7.61721943690000e-11 +1.09200000000000e+01 7.43770180150000e-11 +1.09300000000000e+01 7.26241445550000e-11 +1.09400000000000e+01 7.09125748050000e-11 +1.09500000000000e+01 6.92413368230000e-11 +1.09600000000000e+01 6.76094814880000e-11 +1.09700000000000e+01 6.60160809440000e-11 +1.09800000000000e+01 6.44602291830000e-11 +1.09900000000000e+01 6.29410415300000e-11 +1.10000000000000e+01 6.14576541380000e-11 +1.10100000000000e+01 6.00092234940000e-11 +1.10200000000000e+01 5.85949259470000e-11 +1.10300000000000e+01 5.72139572330000e-11 +1.10400000000000e+01 5.58655320210000e-11 +1.10500000000000e+01 5.45488834690000e-11 +1.10600000000000e+01 5.32632627890000e-11 +1.10700000000000e+01 5.20079372520000e-11 +1.10800000000000e+01 5.07821933310000e-11 +1.10900000000000e+01 4.95853352450000e-11 +1.11000000000000e+01 4.84166824120000e-11 +1.11100000000000e+01 4.72755702740000e-11 +1.11200000000000e+01 4.61613499220000e-11 +1.11300000000000e+01 4.50733877270000e-11 +1.11400000000000e+01 4.40110649750000e-11 +1.11500000000000e+01 4.29737775180000e-11 +1.11600000000000e+01 4.19609354330000e-11 +1.11700000000000e+01 4.09719626820000e-11 +1.11800000000000e+01 4.00062967910000e-11 +1.11900000000000e+01 3.90633885270000e-11 +1.12000000000000e+01 3.81427009540000e-11 +1.12100000000000e+01 3.72437094810000e-11 +1.12200000000000e+01 3.63659044410000e-11 +1.12300000000000e+01 3.55087866370000e-11 +1.12400000000000e+01 3.46718686270000e-11 +1.12500000000000e+01 3.38546744470000e-11 +1.12600000000000e+01 3.30567393420000e-11 +1.12700000000000e+01 3.22776094960000e-11 +1.12800000000000e+01 3.15168417800000e-11 +1.12900000000000e+01 3.07740034950000e-11 +1.13000000000000e+01 3.00486721320000e-11 +1.13100000000000e+01 2.93404351250000e-11 +1.13200000000000e+01 2.86488896240000e-11 +1.13300000000000e+01 2.79736422640000e-11 +1.13400000000000e+01 2.73143074590000e-11 +1.13500000000000e+01 2.66705114290000e-11 +1.13600000000000e+01 2.60418882900000e-11 +1.13700000000000e+01 2.54280805190000e-11 +1.13800000000000e+01 2.48287390120000e-11 +1.13900000000000e+01 2.42435228870000e-11 +1.14000000000000e+01 2.36720992850000e-11 +1.14100000000000e+01 2.31141431870000e-11 +1.14200000000000e+01 2.25693372250000e-11 +1.14300000000000e+01 2.20373715020000e-11 +1.14400000000000e+01 2.15179434170000e-11 +1.14500000000000e+01 2.10107574940000e-11 +1.14600000000000e+01 2.05155252130000e-11 +1.14700000000000e+01 2.00319645020000e-11 +1.14800000000000e+01 1.95597995990000e-11 +1.14900000000000e+01 1.90987629770000e-11 +1.15000000000000e+01 1.86485924080000e-11 +1.15100000000000e+01 1.82090318400000e-11 +1.15200000000000e+01 1.77798312530000e-11 +1.15300000000000e+01 1.73607465120000e-11 +1.15400000000000e+01 1.69515392320000e-11 +1.15500000000000e+01 1.65519766390000e-11 +1.15600000000000e+01 1.61618314390000e-11 +1.15700000000000e+01 1.57808816920000e-11 +1.15800000000000e+01 1.54089106790000e-11 +1.15900000000000e+01 1.50457067870000e-11 +1.16000000000000e+01 1.46910633840000e-11 +1.16100000000000e+01 1.43447781740000e-11 +1.16200000000000e+01 1.40066541410000e-11 +1.16300000000000e+01 1.36764995060000e-11 +1.16400000000000e+01 1.33541264680000e-11 +1.16500000000000e+01 1.30393516540000e-11 +1.16600000000000e+01 1.27319960060000e-11 +1.16700000000000e+01 1.24318846830000e-11 +1.16800000000000e+01 1.21388469620000e-11 +1.16900000000000e+01 1.18527161380000e-11 +1.17000000000000e+01 1.15733294310000e-11 +1.17100000000000e+01 1.13005278950000e-11 +1.17200000000000e+01 1.10341563230000e-11 +1.17300000000000e+01 1.07740631640000e-11 +1.17400000000000e+01 1.05201004370000e-11 +1.17500000000000e+01 1.02721231680000e-11 +1.17600000000000e+01 1.00299903860000e-11 +1.17700000000000e+01 9.79356472130000e-12 +1.17800000000000e+01 9.56271168160000e-12 +1.17900000000000e+01 9.33729994210000e-12 +1.18000000000000e+01 9.11720127060000e-12 +1.18100000000000e+01 8.90229045450000e-12 +1.18200000000000e+01 8.69244522940000e-12 +1.18300000000000e+01 8.48754620970000e-12 +1.18400000000000e+01 8.28747682010000e-12 +1.18500000000000e+01 8.09212323030000e-12 +1.18600000000000e+01 7.90137428970000e-12 +1.18700000000000e+01 7.71512146460000e-12 +1.18800000000000e+01 7.53325877700000e-12 +1.18900000000000e+01 7.35568243540000e-12 +1.19000000000000e+01 7.18229136730000e-12 +1.19100000000000e+01 7.01298727910000e-12 +1.19200000000000e+01 6.84767385550000e-12 +1.19300000000000e+01 6.68625704970000e-12 +1.19400000000000e+01 6.52864502950000e-12 +1.19500000000000e+01 6.37474812530000e-12 +1.19600000000000e+01 6.22447877900000e-12 +1.19700000000000e+01 6.07775149380000e-12 +1.19800000000000e+01 5.93448278570000e-12 +1.19900000000000e+01 5.79459113640000e-12 +1.20000000000000e+01 5.65799694660000e-12 +1.20100000000000e+01 5.52462249120000e-12 +1.20200000000000e+01 5.39439187510000e-12 +1.20300000000000e+01 5.26723088410000e-12 +1.20400000000000e+01 5.14306686440000e-12 +1.20500000000000e+01 5.02182957680000e-12 +1.20600000000000e+01 4.90345004730000e-12 +1.20700000000000e+01 4.78786092620000e-12 +1.20800000000000e+01 4.67499645020000e-12 +1.20900000000000e+01 4.56479240460000e-12 +1.21000000000000e+01 4.45718608670000e-12 +1.21100000000000e+01 4.35211627000000e-12 +1.21200000000000e+01 4.24952316980000e-12 +1.21300000000000e+01 4.14934840840000e-12 +1.21400000000000e+01 4.05153498300000e-12 +1.21500000000000e+01 3.95602723250000e-12 +1.21600000000000e+01 3.86277080640000e-12 +1.21700000000000e+01 3.77171263390000e-12 +1.21800000000000e+01 3.68280059080000e-12 +1.21900000000000e+01 3.59598430200000e-12 +1.22000000000000e+01 3.51121446160000e-12 +1.22100000000000e+01 3.42844283970000e-12 +1.22200000000000e+01 3.34762234200000e-12 +1.22300000000000e+01 3.26870698350000e-12 +1.22400000000000e+01 3.19165186200000e-12 +1.22500000000000e+01 3.11641313260000e-12 +1.22600000000000e+01 3.04294798240000e-12 +1.22700000000000e+01 2.97121460680000e-12 +1.22800000000000e+01 2.90117218510000e-12 +1.22900000000000e+01 2.83278085760000e-12 +1.23000000000000e+01 2.76600170330000e-12 +1.23100000000000e+01 2.70079671740000e-12 +1.23200000000000e+01 2.63712873910000e-12 +1.23300000000000e+01 2.57496133550000e-12 +1.23400000000000e+01 2.51425938380000e-12 +1.23500000000000e+01 2.45498834620000e-12 +1.23600000000000e+01 2.39711449860000e-12 +1.23700000000000e+01 2.34060491080000e-12 +1.23800000000000e+01 2.28542742840000e-12 +1.23900000000000e+01 2.23155065400000e-12 +1.24000000000000e+01 2.17894392930000e-12 +1.24100000000000e+01 2.12757731800000e-12 +1.24200000000000e+01 2.07742158850000e-12 +1.24300000000000e+01 2.02844819720000e-12 +1.24400000000000e+01 1.98062927260000e-12 +1.24500000000000e+01 1.93393759950000e-12 +1.24600000000000e+01 1.88834660330000e-12 +1.24700000000000e+01 1.84383024620000e-12 +1.24800000000000e+01 1.80036314120000e-12 +1.24900000000000e+01 1.75792069650000e-12 +1.25000000000000e+01 1.71647876240000e-12 +1.25100000000000e+01 1.67601375790000e-12 +1.25200000000000e+01 1.63650265750000e-12 +1.25300000000000e+01 1.59792297780000e-12 +1.25400000000000e+01 1.56025276500000e-12 +1.25500000000000e+01 1.52347058190000e-12 +1.25600000000000e+01 1.48755549600000e-12 +1.25700000000000e+01 1.45248706790000e-12 +1.25800000000000e+01 1.41824533900000e-12 +1.25900000000000e+01 1.38481082070000e-12 +1.26000000000000e+01 1.35216448330000e-12 +1.26100000000000e+01 1.32028774490000e-12 +1.26200000000000e+01 1.28916238650000e-12 +1.26300000000000e+01 1.25877066790000e-12 +1.26400000000000e+01 1.22909539600000e-12 +1.26500000000000e+01 1.20011968480000e-12 +1.26600000000000e+01 1.17182704610000e-12 +1.26700000000000e+01 1.14420138020000e-12 +1.26800000000000e+01 1.11722696620000e-12 +1.26900000000000e+01 1.09088845370000e-12 +1.27000000000000e+01 1.06517085340000e-12 +1.27100000000000e+01 1.04005952910000e-12 +1.27200000000000e+01 1.01554018890000e-12 +1.27300000000000e+01 9.91598877550000e-13 +1.27400000000000e+01 9.68221968250000e-13 +1.27500000000000e+01 9.45396154960000e-13 +1.27600000000000e+01 9.23108444960000e-13 +1.27700000000000e+01 9.01346113040000e-13 +1.27800000000000e+01 8.80096716190000e-13 +1.27900000000000e+01 8.59348256930000e-13 +1.28000000000000e+01 8.39088928530000e-13 +1.28100000000000e+01 8.19307202400000e-13 +1.28200000000000e+01 7.99991821410000e-13 +1.28300000000000e+01 7.81131793550000e-13 +1.28400000000000e+01 7.62716385620000e-13 +1.28500000000000e+01 7.44735117090000e-13 +1.28600000000000e+01 7.27177754160000e-13 +1.28700000000000e+01 7.10034303930000e-13 +1.28800000000000e+01 6.93295008750000e-13 +1.28900000000000e+01 6.76950340620000e-13 +1.29000000000000e+01 6.60990995870000e-13 +1.29100000000000e+01 6.45407889840000e-13 +1.29200000000000e+01 6.30192151780000e-13 +1.29300000000000e+01 6.15335022920000e-13 +1.29400000000000e+01 6.00828141990000e-13 +1.29500000000000e+01 5.86663256950000e-13 +1.29600000000000e+01 5.72832307020000e-13 +1.29700000000000e+01 5.59327421310000e-13 +1.29800000000000e+01 5.46140914230000e-13 +1.29900000000000e+01 5.33265281180000e-13 +1.30000000000000e+01 5.20693194240000e-13 +1.30100000000000e+01 5.08417497990000e-13 +1.30200000000000e+01 4.96431205450000e-13 +1.30300000000000e+01 4.84727494080000e-13 +1.30400000000000e+01 4.73299701970000e-13 +1.30500000000000e+01 4.62141323990000e-13 +1.30600000000000e+01 4.51246008170000e-13 +1.30700000000000e+01 4.40607552060000e-13 +1.30800000000000e+01 4.30219864260000e-13 +1.30900000000000e+01 4.20077026480000e-13 +1.31000000000000e+01 4.10173307120000e-13 +1.31100000000000e+01 4.00503070170000e-13 +1.31200000000000e+01 3.91060812420000e-13 +1.31300000000000e+01 3.81841160230000e-13 +1.31400000000000e+01 3.72838866490000e-13 +1.31500000000000e+01 3.64048807650000e-13 +1.31600000000000e+01 3.55465980740000e-13 +1.31700000000000e+01 3.47085500590000e-13 +1.31800000000000e+01 3.38902596990000e-13 +1.31900000000000e+01 3.30912612030000e-13 +1.32000000000000e+01 3.23110997400000e-13 +1.32100000000000e+01 3.15493311900000e-13 +1.32200000000000e+01 3.08055218830000e-13 +1.32300000000000e+01 3.00792483610000e-13 +1.32400000000000e+01 2.93700927740000e-13 +1.32500000000000e+01 2.86776545730000e-13 +1.32600000000000e+01 2.80015409810000e-13 +1.32700000000000e+01 2.73413672240000e-13 +1.32800000000000e+01 2.66967575910000e-13 +1.32900000000000e+01 2.60673452170000e-13 +1.33000000000000e+01 2.54527718780000e-13 +1.33100000000000e+01 2.48526877800000e-13 +1.33200000000000e+01 2.42667513650000e-13 +1.33300000000000e+01 2.36946291130000e-13 +1.33400000000000e+01 2.31359953550000e-13 +1.33500000000000e+01 2.25905320870000e-13 diff --git a/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi32.inp b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi32.inp new file mode 100644 index 000000000..c7575d2cf --- /dev/null +++ b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi32.inp @@ -0,0 +1,1335 @@ +1.00000000000000e-02 8.65284619640000e-06 +2.00000000000000e-02 6.91783302450000e-05 +3.00000000000000e-02 2.33227084380000e-04 +4.00000000000000e-02 5.52006710290000e-04 +5.00000000000000e-02 1.07606273900000e-03 +6.00000000000000e-02 1.85506255160000e-03 +7.00000000000000e-02 2.93758322330000e-03 +8.00000000000000e-02 4.37090423480000e-03 +9.00000000000000e-02 6.20080596930000e-03 +1.00000000000000e-01 8.47137488490000e-03 +1.10000000000000e-01 1.12248162190000e-02 +1.20000000000000e-01 1.45012750410000e-02 +1.30000000000000e-01 1.83386664370000e-02 +1.40000000000000e-01 2.27725155440000e-02 +1.50000000000000e-01 2.78358081290000e-02 +1.60000000000000e-01 3.35588523390000e-02 +1.70000000000000e-01 3.99691521860000e-02 +1.80000000000000e-01 4.70912933010000e-02 +1.90000000000000e-01 5.49468414010000e-02 +2.00000000000000e-01 6.35542538650000e-02 +2.10000000000000e-01 7.29288047540000e-02 +2.20000000000000e-01 8.30825235390000e-02 +2.30000000000000e-01 9.40241477370000e-02 +2.40000000000000e-01 1.05759089590000e-01 +2.50000000000000e-01 1.18289416850000e-01 +2.60000000000000e-01 1.31613847680000e-01 +2.70000000000000e-01 1.45727759610000e-01 +2.80000000000000e-01 1.60623212380000e-01 +2.90000000000000e-01 1.76288984560000e-01 +3.00000000000000e-01 1.92710623580000e-01 +3.10000000000000e-01 2.09870509000000e-01 +3.20000000000000e-01 2.27747928450000e-01 +3.30000000000000e-01 2.46319166050000e-01 +3.40000000000000e-01 2.65557602610000e-01 +3.50000000000000e-01 2.85433827230000e-01 +3.60000000000000e-01 3.05915759650000e-01 +3.70000000000000e-01 3.26968782710000e-01 +3.80000000000000e-01 3.48555884380000e-01 +3.90000000000000e-01 3.70637808480000e-01 +4.00000000000000e-01 3.93173213530000e-01 +4.10000000000000e-01 4.16118838850000e-01 +4.20000000000000e-01 4.39429677200000e-01 +4.30000000000000e-01 4.63059153140000e-01 +4.40000000000000e-01 4.86959306270000e-01 +4.50000000000000e-01 5.11080978470000e-01 +4.60000000000000e-01 5.35374004520000e-01 +4.70000000000000e-01 5.59787404890000e-01 +4.80000000000000e-01 5.84269580230000e-01 +4.90000000000000e-01 6.08768506450000e-01 +5.00000000000000e-01 6.33231929680000e-01 +5.10000000000000e-01 6.57607560310000e-01 +5.20000000000000e-01 6.81843265150000e-01 +5.30000000000000e-01 7.05887257180000e-01 +5.40000000000000e-01 7.29688281830000e-01 +5.50000000000000e-01 7.53195799260000e-01 +5.60000000000000e-01 7.76360161890000e-01 +5.70000000000000e-01 7.99132786400000e-01 +5.80000000000000e-01 8.21466319660000e-01 +5.90000000000000e-01 8.43314797910000e-01 +6.00000000000000e-01 8.64633798700000e-01 +6.10000000000000e-01 8.85380584910000e-01 +6.20000000000000e-01 9.05514240490000e-01 +6.30000000000000e-01 9.24995797460000e-01 +6.40000000000000e-01 9.43788353640000e-01 +6.50000000000000e-01 9.61857180900000e-01 +6.60000000000000e-01 9.79169823540000e-01 +6.70000000000000e-01 9.95696186550000e-01 +6.80000000000000e-01 1.01140861350000e+00 +6.90000000000000e-01 1.02628195390000e+00 +7.00000000000000e-01 1.04029362010000e+00 +7.10000000000000e-01 1.05342363310000e+00 +7.20000000000000e-01 1.06565465810000e+00 +7.30000000000000e-01 1.07697202870000e+00 +7.40000000000000e-01 1.08736376140000e+00 +7.50000000000000e-01 1.09682055810000e+00 +7.60000000000000e-01 1.10533579960000e+00 +7.70000000000000e-01 1.11290552820000e+00 +7.80000000000000e-01 1.11952842030000e+00 +7.90000000000000e-01 1.12520574920000e+00 +8.00000000000000e-01 1.12994133880000e+00 +8.10000000000000e-01 1.13374150830000e+00 +8.20000000000000e-01 1.13661500740000e+00 +8.30000000000000e-01 1.13857294450000e+00 +8.40000000000000e-01 1.13962870540000e+00 +8.50000000000000e-01 1.13979786660000e+00 +8.60000000000000e-01 1.13909809970000e+00 +8.70000000000000e-01 1.13754907070000e+00 +8.80000000000000e-01 1.13517233310000e+00 +8.90000000000000e-01 1.13199121550000e+00 +9.00000000000000e-01 1.12803070480000e+00 +9.10000000000000e-01 1.12331732440000e+00 +9.20000000000000e-01 1.11787901020000e+00 +9.30000000000000e-01 1.11174498190000e+00 +9.40000000000000e-01 1.10494561350000e+00 +9.50000000000000e-01 1.09751230060000e+00 +9.60000000000000e-01 1.08947732730000e+00 +9.70000000000000e-01 1.08087373240000e+00 +9.80000000000000e-01 1.07173517480000e+00 +9.90000000000000e-01 1.06209580080000e+00 +1.00000000000000e+00 1.05199011070000e+00 +1.01000000000000e+00 1.04145282870000e+00 +1.02000000000000e+00 1.03051877400000e+00 +1.03000000000000e+00 1.01922273470000e+00 +1.04000000000000e+00 1.00759934520000e+00 +1.05000000000000e+00 9.95682966870000e-01 +1.06000000000000e+00 9.83507573340000e-01 +1.07000000000000e+00 9.71106639640000e-01 +1.08000000000000e+00 9.58513036880000e-01 +1.09000000000000e+00 9.45758931910000e-01 +1.10000000000000e+00 9.32875692750000e-01 +1.11000000000000e+00 9.19893799880000e-01 +1.12000000000000e+00 9.06842763850000e-01 +1.13000000000000e+00 8.93751049240000e-01 +1.14000000000000e+00 8.80646005400000e-01 +1.15000000000000e+00 8.67553803950000e-01 +1.16000000000000e+00 8.54499383260000e-01 +1.17000000000000e+00 8.41506400020000e-01 +1.18000000000000e+00 8.28597187890000e-01 +1.19000000000000e+00 8.15792723370000e-01 +1.20000000000000e+00 8.03112598750000e-01 +1.21000000000000e+00 7.90575002130000e-01 +1.22000000000000e+00 7.78196704510000e-01 +1.23000000000000e+00 7.65993053720000e-01 +1.24000000000000e+00 7.53977975100000e-01 +1.25000000000000e+00 7.42163978690000e-01 +1.26000000000000e+00 7.30562172840000e-01 +1.27000000000000e+00 7.19182283840000e-01 +1.28000000000000e+00 7.08032681350000e-01 +1.29000000000000e+00 6.97120409440000e-01 +1.30000000000000e+00 6.86451222750000e-01 +1.31000000000000e+00 6.76029627510000e-01 +1.32000000000000e+00 6.65858927070000e-01 +1.33000000000000e+00 6.55941271540000e-01 +1.34000000000000e+00 6.46277711110000e-01 +1.35000000000000e+00 6.36868252680000e-01 +1.36000000000000e+00 6.27711919380000e-01 +1.37000000000000e+00 6.18806812540000e-01 +1.38000000000000e+00 6.10150175650000e-01 +1.39000000000000e+00 6.01738459960000e-01 +1.40000000000000e+00 5.93567391180000e-01 +1.41000000000000e+00 5.85632036940000e-01 +1.42000000000000e+00 5.77926874550000e-01 +1.43000000000000e+00 5.70445858640000e-01 +1.44000000000000e+00 5.63182488250000e-01 +1.45000000000000e+00 5.56129873060000e-01 +1.46000000000000e+00 5.49280798380000e-01 +1.47000000000000e+00 5.42627788350000e-01 +1.48000000000000e+00 5.36163167340000e-01 +1.49000000000000e+00 5.29879119010000e-01 +1.50000000000000e+00 5.23767742700000e-01 +1.51000000000000e+00 5.17821107180000e-01 +1.52000000000000e+00 5.12031301150000e-01 +1.53000000000000e+00 5.06390480550000e-01 +1.54000000000000e+00 5.00890912420000e-01 +1.55000000000000e+00 4.95525015110000e-01 +1.56000000000000e+00 4.90285394830000e-01 +1.57000000000000e+00 4.85164878340000e-01 +1.58000000000000e+00 4.80156541800000e-01 +1.59000000000000e+00 4.75253735750000e-01 +1.60000000000000e+00 4.70450106220000e-01 +1.61000000000000e+00 4.65739611920000e-01 +1.62000000000000e+00 4.61116537790000e-01 +1.63000000000000e+00 4.56575504750000e-01 +1.64000000000000e+00 4.52111475980000e-01 +1.65000000000000e+00 4.47719759680000e-01 +1.66000000000000e+00 4.43396008750000e-01 +1.67000000000000e+00 4.39136217260000e-01 +1.68000000000000e+00 4.34936714220000e-01 +1.69000000000000e+00 4.30794154590000e-01 +1.70000000000000e+00 4.26705508160000e-01 +1.71000000000000e+00 4.22668046080000e-01 +1.72000000000000e+00 4.18679325730000e-01 +1.73000000000000e+00 4.14737174010000e-01 +1.74000000000000e+00 4.10839669310000e-01 +1.75000000000000e+00 4.06985122580000e-01 +1.76000000000000e+00 4.03172057610000e-01 +1.77000000000000e+00 3.99399191030000e-01 +1.78000000000000e+00 3.95665412060000e-01 +1.79000000000000e+00 3.91969762520000e-01 +1.80000000000000e+00 3.88311417100000e-01 +1.81000000000000e+00 3.84689664490000e-01 +1.82000000000000e+00 3.81103889240000e-01 +1.83000000000000e+00 3.77553554760000e-01 +1.84000000000000e+00 3.74038187720000e-01 +1.85000000000000e+00 3.70557363850000e-01 +1.86000000000000e+00 3.67110695480000e-01 +1.87000000000000e+00 3.63697820620000e-01 +1.88000000000000e+00 3.60318394570000e-01 +1.89000000000000e+00 3.56972082290000e-01 +1.90000000000000e+00 3.53658554490000e-01 +1.91000000000000e+00 3.50377484070000e-01 +1.92000000000000e+00 3.47128545100000e-01 +1.93000000000000e+00 3.43911413240000e-01 +1.94000000000000e+00 3.40725766350000e-01 +1.95000000000000e+00 3.37571284280000e-01 +1.96000000000000e+00 3.34447650420000e-01 +1.97000000000000e+00 3.31354550570000e-01 +1.98000000000000e+00 3.28291672330000e-01 +1.99000000000000e+00 3.25258705550000e-01 +2.00000000000000e+00 3.22255342540000e-01 +2.01000000000000e+00 3.19281278260000e-01 +2.02000000000000e+00 3.16336210180000e-01 +2.03000000000000e+00 3.13419838270000e-01 +2.04000000000000e+00 3.10531865150000e-01 +2.05000000000000e+00 3.07671996030000e-01 +2.06000000000000e+00 3.04839938820000e-01 +2.07000000000000e+00 3.02035404090000e-01 +2.08000000000000e+00 2.99258105140000e-01 +2.09000000000000e+00 2.96507757970000e-01 +2.10000000000000e+00 2.93784081320000e-01 +2.11000000000000e+00 2.91086796710000e-01 +2.12000000000000e+00 2.88415628370000e-01 +2.13000000000000e+00 2.85770303330000e-01 +2.14000000000000e+00 2.83150551360000e-01 +2.15000000000000e+00 2.80556105030000e-01 +2.16000000000000e+00 2.77986699620000e-01 +2.17000000000000e+00 2.75442073230000e-01 +2.18000000000000e+00 2.72921966680000e-01 +2.19000000000000e+00 2.70426123540000e-01 +2.20000000000000e+00 2.67954290130000e-01 +2.21000000000000e+00 2.65506215490000e-01 +2.22000000000000e+00 2.63081651380000e-01 +2.23000000000000e+00 2.60680352260000e-01 +2.24000000000000e+00 2.58302075270000e-01 +2.25000000000000e+00 2.55946580240000e-01 +2.26000000000000e+00 2.53613629630000e-01 +2.27000000000000e+00 2.51302988570000e-01 +2.28000000000000e+00 2.49014424770000e-01 +2.29000000000000e+00 2.46747708550000e-01 +2.30000000000000e+00 2.44502612830000e-01 +2.31000000000000e+00 2.42278913060000e-01 +2.32000000000000e+00 2.40076387230000e-01 +2.33000000000000e+00 2.37894815840000e-01 +2.34000000000000e+00 2.35733981900000e-01 +2.35000000000000e+00 2.33593670860000e-01 +2.36000000000000e+00 2.31473670620000e-01 +2.37000000000000e+00 2.29373771520000e-01 +2.38000000000000e+00 2.27293766260000e-01 +2.39000000000000e+00 2.25233449940000e-01 +2.40000000000000e+00 2.23192619980000e-01 +2.41000000000000e+00 2.21171076160000e-01 +2.42000000000000e+00 2.19168620510000e-01 +2.43000000000000e+00 2.17185057370000e-01 +2.44000000000000e+00 2.15220193300000e-01 +2.45000000000000e+00 2.13273837100000e-01 +2.46000000000000e+00 2.11345799760000e-01 +2.47000000000000e+00 2.09435894430000e-01 +2.48000000000000e+00 2.07543936440000e-01 +2.49000000000000e+00 2.05669743210000e-01 +2.50000000000000e+00 2.03813134260000e-01 +2.51000000000000e+00 2.01973931200000e-01 +2.52000000000000e+00 2.00151957680000e-01 +2.53000000000000e+00 1.98347039370000e-01 +2.54000000000000e+00 1.96559003940000e-01 +2.55000000000000e+00 1.94787681040000e-01 +2.56000000000000e+00 1.93032902260000e-01 +2.57000000000000e+00 1.91294501120000e-01 +2.58000000000000e+00 1.89572313070000e-01 +2.59000000000000e+00 1.87866175400000e-01 +2.60000000000000e+00 1.86175927280000e-01 +2.61000000000000e+00 1.84501409720000e-01 +2.62000000000000e+00 1.82842465510000e-01 +2.63000000000000e+00 1.81198939250000e-01 +2.64000000000000e+00 1.79570677320000e-01 +2.65000000000000e+00 1.77957527820000e-01 +2.66000000000000e+00 1.76359340570000e-01 +2.67000000000000e+00 1.74775967110000e-01 +2.68000000000000e+00 1.73207260640000e-01 +2.69000000000000e+00 1.71653076030000e-01 +2.70000000000000e+00 1.70113269780000e-01 +2.71000000000000e+00 1.68587699990000e-01 +2.72000000000000e+00 1.67076226390000e-01 +2.73000000000000e+00 1.65578710250000e-01 +2.74000000000000e+00 1.64095014410000e-01 +2.75000000000000e+00 1.62625003240000e-01 +2.76000000000000e+00 1.61168542630000e-01 +2.77000000000000e+00 1.59725499960000e-01 +2.78000000000000e+00 1.58295744080000e-01 +2.79000000000000e+00 1.56879145310000e-01 +2.80000000000000e+00 1.55475575390000e-01 +2.81000000000000e+00 1.54084907510000e-01 +2.82000000000000e+00 1.52707016220000e-01 +2.83000000000000e+00 1.51341777490000e-01 +2.84000000000000e+00 1.49989068630000e-01 +2.85000000000000e+00 1.48648768320000e-01 +2.86000000000000e+00 1.47320756540000e-01 +2.87000000000000e+00 1.46004914610000e-01 +2.88000000000000e+00 1.44701125140000e-01 +2.89000000000000e+00 1.43409272010000e-01 +2.90000000000000e+00 1.42129240380000e-01 +2.91000000000000e+00 1.40860916630000e-01 +2.92000000000000e+00 1.39604188400000e-01 +2.93000000000000e+00 1.38358944530000e-01 +2.94000000000000e+00 1.37125075050000e-01 +2.95000000000000e+00 1.35902471200000e-01 +2.96000000000000e+00 1.34691025370000e-01 +2.97000000000000e+00 1.33490631100000e-01 +2.98000000000000e+00 1.32301183070000e-01 +2.99000000000000e+00 1.31122577100000e-01 +3.00000000000000e+00 1.29954710100000e-01 +3.01000000000000e+00 1.28797480090000e-01 +3.02000000000000e+00 1.27650786160000e-01 +3.03000000000000e+00 1.26514528470000e-01 +3.04000000000000e+00 1.25388608240000e-01 +3.05000000000000e+00 1.24272927720000e-01 +3.06000000000000e+00 1.23167390200000e-01 +3.07000000000000e+00 1.22071899970000e-01 +3.08000000000000e+00 1.20986362330000e-01 +3.09000000000000e+00 1.19910683560000e-01 +3.10000000000000e+00 1.18844770930000e-01 +3.11000000000000e+00 1.17788532650000e-01 +3.12000000000000e+00 1.16741877910000e-01 +3.13000000000000e+00 1.15704716810000e-01 +3.14000000000000e+00 1.14676960400000e-01 +3.15000000000000e+00 1.13658520630000e-01 +3.16000000000000e+00 1.12649310360000e-01 +3.17000000000000e+00 1.11649243340000e-01 +3.18000000000000e+00 1.10658234200000e-01 +3.19000000000000e+00 1.09676198460000e-01 +3.20000000000000e+00 1.08703052460000e-01 +3.21000000000000e+00 1.07738713420000e-01 +3.22000000000000e+00 1.06783099400000e-01 +3.23000000000000e+00 1.05836129250000e-01 +3.24000000000000e+00 1.04897722690000e-01 +3.25000000000000e+00 1.03967800200000e-01 +3.26000000000000e+00 1.03046283090000e-01 +3.27000000000000e+00 1.02133093440000e-01 +3.28000000000000e+00 1.01228154110000e-01 +3.29000000000000e+00 1.00331388730000e-01 +3.30000000000000e+00 9.94427216990000e-02 +3.31000000000000e+00 9.85620781480000e-02 +3.32000000000000e+00 9.76893839570000e-02 +3.33000000000000e+00 9.68245657380000e-02 +3.34000000000000e+00 9.59675508240000e-02 +3.35000000000000e+00 9.51182672620000e-02 +3.36000000000000e+00 9.42766438050000e-02 +3.37000000000000e+00 9.34426099030000e-02 +3.38000000000000e+00 9.26160956930000e-02 +3.39000000000000e+00 9.17970319960000e-02 +3.40000000000000e+00 9.09853503010000e-02 +3.41000000000000e+00 9.01809827650000e-02 +3.42000000000000e+00 8.93838621990000e-02 +3.43000000000000e+00 8.85939220660000e-02 +3.44000000000000e+00 8.78110964690000e-02 +3.45000000000000e+00 8.70353201430000e-02 +3.46000000000000e+00 8.62665284520000e-02 +3.47000000000000e+00 8.55046573800000e-02 +3.48000000000000e+00 8.47496435220000e-02 +3.49000000000000e+00 8.40014240780000e-02 +3.50000000000000e+00 8.32599368480000e-02 +3.51000000000000e+00 8.25251202210000e-02 +3.52000000000000e+00 8.17969131750000e-02 +3.53000000000000e+00 8.10752552640000e-02 +3.54000000000000e+00 8.03600866130000e-02 +3.55000000000000e+00 7.96513479140000e-02 +3.56000000000000e+00 7.89489804190000e-02 +3.57000000000000e+00 7.82529259320000e-02 +3.58000000000000e+00 7.75631268040000e-02 +3.59000000000000e+00 7.68795259280000e-02 +3.60000000000000e+00 7.62020667330000e-02 +3.61000000000000e+00 7.55306931740000e-02 +3.62000000000000e+00 7.48653497330000e-02 +3.63000000000000e+00 7.42059814090000e-02 +3.64000000000000e+00 7.35525337130000e-02 +3.65000000000000e+00 7.29049526640000e-02 +3.66000000000000e+00 7.22631847840000e-02 +3.67000000000000e+00 7.16271770870000e-02 +3.68000000000000e+00 7.09968770830000e-02 +3.69000000000000e+00 7.03722327660000e-02 +3.70000000000000e+00 6.97531926110000e-02 +3.71000000000000e+00 6.91397055700000e-02 +3.72000000000000e+00 6.85317210640000e-02 +3.73000000000000e+00 6.79291889840000e-02 +3.74000000000000e+00 6.73320596790000e-02 +3.75000000000000e+00 6.67402839570000e-02 +3.76000000000000e+00 6.61538130780000e-02 +3.77000000000000e+00 6.55725987490000e-02 +3.78000000000000e+00 6.49965931220000e-02 +3.79000000000000e+00 6.44257487850000e-02 +3.80000000000000e+00 6.38600187630000e-02 +3.81000000000000e+00 6.32993565100000e-02 +3.82000000000000e+00 6.27437159070000e-02 +3.83000000000000e+00 6.21930512550000e-02 +3.84000000000000e+00 6.16473172740000e-02 +3.85000000000000e+00 6.11064690970000e-02 +3.86000000000000e+00 6.05704622680000e-02 +3.87000000000000e+00 6.00392527350000e-02 +3.88000000000000e+00 5.95127968470000e-02 +3.89000000000000e+00 5.89910513530000e-02 +3.90000000000000e+00 5.84739733960000e-02 +3.91000000000000e+00 5.79615205080000e-02 +3.92000000000000e+00 5.74536506080000e-02 +3.93000000000000e+00 5.69503219980000e-02 +3.94000000000000e+00 5.64514933610000e-02 +3.95000000000000e+00 5.59571237530000e-02 +3.96000000000000e+00 5.54671726060000e-02 +3.97000000000000e+00 5.49815997160000e-02 +3.98000000000000e+00 5.45003652500000e-02 +3.99000000000000e+00 5.40234297320000e-02 +4.00000000000000e+00 5.35507540490000e-02 +4.01000000000000e+00 5.30822994410000e-02 +4.02000000000000e+00 5.26180275010000e-02 +4.03000000000000e+00 5.21579001700000e-02 +4.04000000000000e+00 5.17018797350000e-02 +4.05000000000000e+00 5.12499288280000e-02 +4.06000000000000e+00 5.08020104180000e-02 +4.07000000000000e+00 5.03580878110000e-02 +4.08000000000000e+00 4.99181246460000e-02 +4.09000000000000e+00 4.94820848940000e-02 +4.10000000000000e+00 4.90499328520000e-02 +4.11000000000000e+00 4.86216331420000e-02 +4.12000000000000e+00 4.81971507080000e-02 +4.13000000000000e+00 4.77764508120000e-02 +4.14000000000000e+00 4.73594990320000e-02 +4.15000000000000e+00 4.69462612590000e-02 +4.16000000000000e+00 4.65367036960000e-02 +4.17000000000000e+00 4.61307928500000e-02 +4.18000000000000e+00 4.57284955370000e-02 +4.19000000000000e+00 4.53297788720000e-02 +4.20000000000000e+00 4.49346102700000e-02 +4.21000000000000e+00 4.45429574440000e-02 +4.22000000000000e+00 4.41547883990000e-02 +4.23000000000000e+00 4.37700714350000e-02 +4.24000000000000e+00 4.33887751370000e-02 +4.25000000000000e+00 4.30108683800000e-02 +4.26000000000000e+00 4.26363203190000e-02 +4.27000000000000e+00 4.22651003950000e-02 +4.28000000000000e+00 4.18971783250000e-02 +4.29000000000000e+00 4.15325241020000e-02 +4.30000000000000e+00 4.11711079960000e-02 +4.31000000000000e+00 4.08129005450000e-02 +4.32000000000000e+00 4.04578725600000e-02 +4.33000000000000e+00 4.01059951170000e-02 +4.34000000000000e+00 3.97572395550000e-02 +4.35000000000000e+00 3.94115774790000e-02 +4.36000000000000e+00 3.90689807500000e-02 +4.37000000000000e+00 3.87294214910000e-02 +4.38000000000000e+00 3.83928720750000e-02 +4.39000000000000e+00 3.80593051340000e-02 +4.40000000000000e+00 3.77286935480000e-02 +4.41000000000000e+00 3.74010104440000e-02 +4.42000000000000e+00 3.70762291990000e-02 +4.43000000000000e+00 3.67543234320000e-02 +4.44000000000000e+00 3.64352670060000e-02 +4.45000000000000e+00 3.61190340230000e-02 +4.46000000000000e+00 3.58055988240000e-02 +4.47000000000000e+00 3.54949359850000e-02 +4.48000000000000e+00 3.51870203150000e-02 +4.49000000000000e+00 3.48818268570000e-02 +4.50000000000000e+00 3.45793308830000e-02 +4.51000000000000e+00 3.42795078910000e-02 +4.52000000000000e+00 3.39823336080000e-02 +4.53000000000000e+00 3.36877839810000e-02 +4.54000000000000e+00 3.33958351820000e-02 +4.55000000000000e+00 3.31064636000000e-02 +4.56000000000000e+00 3.28196458450000e-02 +4.57000000000000e+00 3.25353587390000e-02 +4.58000000000000e+00 3.22535793210000e-02 +4.59000000000000e+00 3.19742848420000e-02 +4.60000000000000e+00 3.16974527610000e-02 +4.61000000000000e+00 3.14230607470000e-02 +4.62000000000000e+00 3.11510866750000e-02 +4.63000000000000e+00 3.08815086260000e-02 +4.64000000000000e+00 3.06143048810000e-02 +4.65000000000000e+00 3.03494539240000e-02 +4.66000000000000e+00 3.00869344390000e-02 +4.67000000000000e+00 2.98267253040000e-02 +4.68000000000000e+00 2.95688055970000e-02 +4.69000000000000e+00 2.93131545870000e-02 +4.70000000000000e+00 2.90597517350000e-02 +4.71000000000000e+00 2.88085766930000e-02 +4.72000000000000e+00 2.85596093040000e-02 +4.73000000000000e+00 2.83128295950000e-02 +4.74000000000000e+00 2.80682177780000e-02 +4.75000000000000e+00 2.78257542520000e-02 +4.76000000000000e+00 2.75854195950000e-02 +4.77000000000000e+00 2.73471945660000e-02 +4.78000000000000e+00 2.71110601030000e-02 +4.79000000000000e+00 2.68769973210000e-02 +4.80000000000000e+00 2.66449875100000e-02 +4.81000000000000e+00 2.64150121360000e-02 +4.82000000000000e+00 2.61870528340000e-02 +4.83000000000000e+00 2.59610914110000e-02 +4.84000000000000e+00 2.57371098450000e-02 +4.85000000000000e+00 2.55150902790000e-02 +4.86000000000000e+00 2.52950150230000e-02 +4.87000000000000e+00 2.50768665520000e-02 +4.88000000000000e+00 2.48606275040000e-02 +4.89000000000000e+00 2.46462806770000e-02 +4.90000000000000e+00 2.44338090320000e-02 +4.91000000000000e+00 2.42231956850000e-02 +4.92000000000000e+00 2.40144239120000e-02 +4.93000000000000e+00 2.38074771430000e-02 +4.94000000000000e+00 2.36023389630000e-02 +4.95000000000000e+00 2.33989931100000e-02 +4.96000000000000e+00 2.31974234720000e-02 +4.97000000000000e+00 2.29976140890000e-02 +4.98000000000000e+00 2.27995491470000e-02 +4.99000000000000e+00 2.26032129820000e-02 +5.00000000000000e+00 2.24085900740000e-02 +5.01000000000000e+00 2.22156650480000e-02 +5.02000000000000e+00 2.20244226720000e-02 +5.03000000000000e+00 2.18348478560000e-02 +5.04000000000000e+00 2.16469256500000e-02 +5.05000000000000e+00 2.14606412440000e-02 +5.06000000000000e+00 2.12759799640000e-02 +5.07000000000000e+00 2.10929272750000e-02 +5.08000000000000e+00 2.09114687750000e-02 +5.09000000000000e+00 2.07315901980000e-02 +5.10000000000000e+00 2.05532774100000e-02 +5.11000000000000e+00 2.03765164070000e-02 +5.12000000000000e+00 2.02012933170000e-02 +5.13000000000000e+00 2.00275943970000e-02 +5.14000000000000e+00 1.98554060300000e-02 +5.15000000000000e+00 1.96847147290000e-02 +5.16000000000000e+00 1.95155071280000e-02 +5.17000000000000e+00 1.93477699880000e-02 +5.18000000000000e+00 1.91814901930000e-02 +5.19000000000000e+00 1.90166547490000e-02 +5.20000000000000e+00 1.88532507800000e-02 +5.21000000000000e+00 1.86912655330000e-02 +5.22000000000000e+00 1.85306863710000e-02 +5.23000000000000e+00 1.83715007760000e-02 +5.24000000000000e+00 1.82136963450000e-02 +5.25000000000000e+00 1.80572607910000e-02 +5.26000000000000e+00 1.79021819400000e-02 +5.27000000000000e+00 1.77484477310000e-02 +5.28000000000000e+00 1.75960462150000e-02 +5.29000000000000e+00 1.74449655540000e-02 +5.30000000000000e+00 1.72951940200000e-02 +5.31000000000000e+00 1.71467199930000e-02 +5.32000000000000e+00 1.69995319600000e-02 +5.33000000000000e+00 1.68536185160000e-02 +5.34000000000000e+00 1.67089683600000e-02 +5.35000000000000e+00 1.65655702960000e-02 +5.36000000000000e+00 1.64234132340000e-02 +5.37000000000000e+00 1.62824861820000e-02 +5.38000000000000e+00 1.61427782520000e-02 +5.39000000000000e+00 1.60042786580000e-02 +5.40000000000000e+00 1.58669767110000e-02 +5.41000000000000e+00 1.57308618210000e-02 +5.42000000000000e+00 1.55959234970000e-02 +5.43000000000000e+00 1.54621513450000e-02 +5.44000000000000e+00 1.53295350640000e-02 +5.45000000000000e+00 1.51980644510000e-02 +5.46000000000000e+00 1.50677293960000e-02 +5.47000000000000e+00 1.49385198800000e-02 +5.48000000000000e+00 1.48104259800000e-02 +5.49000000000000e+00 1.46834378620000e-02 +5.50000000000000e+00 1.45575457820000e-02 +5.51000000000000e+00 1.44327400860000e-02 +5.52000000000000e+00 1.43090112090000e-02 +5.53000000000000e+00 1.41863496750000e-02 +5.54000000000000e+00 1.40647460930000e-02 +5.55000000000000e+00 1.39441911570000e-02 +5.56000000000000e+00 1.38246756510000e-02 +5.57000000000000e+00 1.37061904390000e-02 +5.58000000000000e+00 1.35887264700000e-02 +5.59000000000000e+00 1.34722747770000e-02 +5.60000000000000e+00 1.33568264730000e-02 +5.61000000000000e+00 1.32423727550000e-02 +5.62000000000000e+00 1.31289048970000e-02 +5.63000000000000e+00 1.30164142560000e-02 +5.64000000000000e+00 1.29048922660000e-02 +5.65000000000000e+00 1.27943304390000e-02 +5.66000000000000e+00 1.26847203660000e-02 +5.67000000000000e+00 1.25760537130000e-02 +5.68000000000000e+00 1.24683222230000e-02 +5.69000000000000e+00 1.23615177140000e-02 +5.70000000000000e+00 1.22556320780000e-02 +5.71000000000000e+00 1.21506572810000e-02 +5.72000000000000e+00 1.20465853620000e-02 +5.73000000000000e+00 1.19434084330000e-02 +5.74000000000000e+00 1.18411186770000e-02 +5.75000000000000e+00 1.17397083470000e-02 +5.76000000000000e+00 1.16391697680000e-02 +5.77000000000000e+00 1.15394953340000e-02 +5.78000000000000e+00 1.14406775060000e-02 +5.79000000000000e+00 1.13427088180000e-02 +5.80000000000000e+00 1.12455818660000e-02 +5.81000000000000e+00 1.11492893170000e-02 +5.82000000000000e+00 1.10538239020000e-02 +5.83000000000000e+00 1.09591784180000e-02 +5.84000000000000e+00 1.08653457290000e-02 +5.85000000000000e+00 1.07723187610000e-02 +5.86000000000000e+00 1.06800905050000e-02 +5.87000000000000e+00 1.05886540150000e-02 +5.88000000000000e+00 1.04980024060000e-02 +5.89000000000000e+00 1.04081288590000e-02 +5.90000000000000e+00 1.03190266110000e-02 +5.91000000000000e+00 1.02306889650000e-02 +5.92000000000000e+00 1.01431092800000e-02 +5.93000000000000e+00 1.00562809770000e-02 +5.94000000000000e+00 9.97019753560000e-03 +5.95000000000000e+00 9.88485249370000e-03 +5.96000000000000e+00 9.80023944720000e-03 +5.97000000000000e+00 9.71635204940000e-03 +5.98000000000000e+00 9.63318401030000e-03 +5.99000000000000e+00 9.55072909630000e-03 +6.00000000000000e+00 9.46898112960000e-03 +6.01000000000000e+00 9.38793398760000e-03 +6.02000000000000e+00 9.30758160240000e-03 +6.03000000000000e+00 9.22791796020000e-03 +6.04000000000000e+00 9.14893710100000e-03 +6.05000000000000e+00 9.07063311780000e-03 +6.06000000000000e+00 8.99300015640000e-03 +6.07000000000000e+00 8.91603241460000e-03 +6.08000000000000e+00 8.83972414200000e-03 +6.09000000000000e+00 8.76406963930000e-03 +6.10000000000000e+00 8.68906325800000e-03 +6.11000000000000e+00 8.61469939950000e-03 +6.12000000000000e+00 8.54097251520000e-03 +6.13000000000000e+00 8.46787710580000e-03 +6.14000000000000e+00 8.39540772050000e-03 +6.15000000000000e+00 8.32355895720000e-03 +6.16000000000000e+00 8.25232546140000e-03 +6.17000000000000e+00 8.18170192600000e-03 +6.18000000000000e+00 8.11168309130000e-03 +6.19000000000000e+00 8.04226374360000e-03 +6.20000000000000e+00 7.97343871570000e-03 +6.21000000000000e+00 7.90520288580000e-03 +6.22000000000000e+00 7.83755117760000e-03 +6.23000000000000e+00 7.77047855940000e-03 +6.24000000000000e+00 7.70398004400000e-03 +6.25000000000000e+00 7.63805068820000e-03 +6.26000000000000e+00 7.57268559240000e-03 +6.27000000000000e+00 7.50787990000000e-03 +6.28000000000000e+00 7.44362879730000e-03 +6.29000000000000e+00 7.37992751300000e-03 +6.30000000000000e+00 7.31677131770000e-03 +6.31000000000000e+00 7.25415552350000e-03 +6.32000000000000e+00 7.19207548400000e-03 +6.33000000000000e+00 7.13052659320000e-03 +6.34000000000000e+00 7.06950428580000e-03 +6.35000000000000e+00 7.00900403660000e-03 +6.36000000000000e+00 6.94902135980000e-03 +6.37000000000000e+00 6.88955180910000e-03 +6.38000000000000e+00 6.83059097730000e-03 +6.39000000000000e+00 6.77213449560000e-03 +6.40000000000000e+00 6.71417803340000e-03 +6.41000000000000e+00 6.65671729810000e-03 +6.42000000000000e+00 6.59974803460000e-03 +6.43000000000000e+00 6.54326602510000e-03 +6.44000000000000e+00 6.48726708850000e-03 +6.45000000000000e+00 6.43174708030000e-03 +6.46000000000000e+00 6.37670189200000e-03 +6.47000000000000e+00 6.32212745120000e-03 +6.48000000000000e+00 6.26801972090000e-03 +6.49000000000000e+00 6.21437469920000e-03 +6.50000000000000e+00 6.16118841920000e-03 +6.51000000000000e+00 6.10845694850000e-03 +6.52000000000000e+00 6.05617638900000e-03 +6.53000000000000e+00 6.00434287640000e-03 +6.54000000000000e+00 5.95295258010000e-03 +6.55000000000000e+00 5.90200170280000e-03 +6.56000000000000e+00 5.85148648000000e-03 +6.57000000000000e+00 5.80140318040000e-03 +6.58000000000000e+00 5.75174810450000e-03 +6.59000000000000e+00 5.70251758530000e-03 +6.60000000000000e+00 5.65370798750000e-03 +6.61000000000000e+00 5.60531570750000e-03 +6.62000000000000e+00 5.55733717260000e-03 +6.63000000000000e+00 5.50976884130000e-03 +6.64000000000000e+00 5.46260720280000e-03 +6.65000000000000e+00 5.41584877670000e-03 +6.66000000000000e+00 5.36949011250000e-03 +6.67000000000000e+00 5.32352778990000e-03 +6.68000000000000e+00 5.27795841810000e-03 +6.69000000000000e+00 5.23277863530000e-03 +6.70000000000000e+00 5.18798510930000e-03 +6.71000000000000e+00 5.14357453620000e-03 +6.72000000000000e+00 5.09954364110000e-03 +6.73000000000000e+00 5.05588917690000e-03 +6.74000000000000e+00 5.01260792490000e-03 +6.75000000000000e+00 4.96969669410000e-03 +6.76000000000000e+00 4.92715232100000e-03 +6.77000000000000e+00 4.88497166930000e-03 +6.78000000000000e+00 4.84315162990000e-03 +6.79000000000000e+00 4.80168912040000e-03 +6.80000000000000e+00 4.76058108500000e-03 +6.81000000000000e+00 4.71982449420000e-03 +6.82000000000000e+00 4.67941634460000e-03 +6.83000000000000e+00 4.63935365880000e-03 +6.84000000000000e+00 4.59963348470000e-03 +6.85000000000000e+00 4.56025289590000e-03 +6.86000000000000e+00 4.52120899100000e-03 +6.87000000000000e+00 4.48249889380000e-03 +6.88000000000000e+00 4.44411975240000e-03 +6.89000000000000e+00 4.40606873990000e-03 +6.90000000000000e+00 4.36834305340000e-03 +6.91000000000000e+00 4.33093991410000e-03 +6.92000000000000e+00 4.29385656720000e-03 +6.93000000000000e+00 4.25709028130000e-03 +6.94000000000000e+00 4.22063834880000e-03 +6.95000000000000e+00 4.18449808510000e-03 +6.96000000000000e+00 4.14866682870000e-03 +6.97000000000000e+00 4.11314194090000e-03 +6.98000000000000e+00 4.07792080560000e-03 +6.99000000000000e+00 4.04300082940000e-03 +7.00000000000000e+00 4.00837944070000e-03 +7.01000000000000e+00 3.97405409030000e-03 +7.02000000000000e+00 3.94002225070000e-03 +7.03000000000000e+00 3.90628141610000e-03 +7.04000000000000e+00 3.87282910210000e-03 +7.05000000000000e+00 3.83966284560000e-03 +7.06000000000000e+00 3.80678020470000e-03 +7.07000000000000e+00 3.77417875820000e-03 +7.08000000000000e+00 3.74185610580000e-03 +7.09000000000000e+00 3.70980986770000e-03 +7.10000000000000e+00 3.67803768450000e-03 +7.11000000000000e+00 3.64653721680000e-03 +7.12000000000000e+00 3.61530614540000e-03 +7.13000000000000e+00 3.58434217080000e-03 +7.14000000000000e+00 3.55364301340000e-03 +7.15000000000000e+00 3.52320641290000e-03 +7.16000000000000e+00 3.49303012830000e-03 +7.17000000000000e+00 3.46311193770000e-03 +7.18000000000000e+00 3.43344963850000e-03 +7.19000000000000e+00 3.40404104660000e-03 +7.20000000000000e+00 3.37488399670000e-03 +7.21000000000000e+00 3.34597634200000e-03 +7.22000000000000e+00 3.31731595390000e-03 +7.23000000000000e+00 3.28890072210000e-03 +7.24000000000000e+00 3.26072855440000e-03 +7.25000000000000e+00 3.23279737630000e-03 +7.26000000000000e+00 3.20510513100000e-03 +7.27000000000000e+00 3.17764977950000e-03 +7.28000000000000e+00 3.15042929990000e-03 +7.29000000000000e+00 3.12344168770000e-03 +7.30000000000000e+00 3.09668495550000e-03 +7.31000000000000e+00 3.07015713290000e-03 +7.32000000000000e+00 3.04385626610000e-03 +7.33000000000000e+00 3.01778041820000e-03 +7.34000000000000e+00 2.99192766880000e-03 +7.35000000000000e+00 2.96629611380000e-03 +7.36000000000000e+00 2.94088386520000e-03 +7.37000000000000e+00 2.91568905140000e-03 +7.38000000000000e+00 2.89070981660000e-03 +7.39000000000000e+00 2.86594432070000e-03 +7.40000000000000e+00 2.84139073950000e-03 +7.41000000000000e+00 2.81704726430000e-03 +7.42000000000000e+00 2.79291210180000e-03 +7.43000000000000e+00 2.76898347380000e-03 +7.44000000000000e+00 2.74525961760000e-03 +7.45000000000000e+00 2.72173878510000e-03 +7.46000000000000e+00 2.69841924360000e-03 +7.47000000000000e+00 2.67529927470000e-03 +7.48000000000000e+00 2.65237717500000e-03 +7.49000000000000e+00 2.62965125520000e-03 +7.50000000000000e+00 2.60711984090000e-03 +7.51000000000000e+00 2.58478127150000e-03 +7.52000000000000e+00 2.56263390090000e-03 +7.53000000000000e+00 2.54067609670000e-03 +7.54000000000000e+00 2.51890624060000e-03 +7.55000000000000e+00 2.49732272820000e-03 +7.56000000000000e+00 2.47592396840000e-03 +7.57000000000000e+00 2.45470838400000e-03 +7.58000000000000e+00 2.43367441110000e-03 +7.59000000000000e+00 2.41282049900000e-03 +7.60000000000000e+00 2.39214511040000e-03 +7.61000000000000e+00 2.37164672100000e-03 +7.62000000000000e+00 2.35132381940000e-03 +7.63000000000000e+00 2.33117490720000e-03 +7.64000000000000e+00 2.31119849870000e-03 +7.65000000000000e+00 2.29139312080000e-03 +7.66000000000000e+00 2.27175731310000e-03 +7.67000000000000e+00 2.25228962740000e-03 +7.68000000000000e+00 2.23298862810000e-03 +7.69000000000000e+00 2.21385289160000e-03 +7.70000000000000e+00 2.19488100640000e-03 +7.71000000000000e+00 2.17607157330000e-03 +7.72000000000000e+00 2.15742320470000e-03 +7.73000000000000e+00 2.13893452490000e-03 +7.74000000000000e+00 2.12060417000000e-03 +7.75000000000000e+00 2.10243078770000e-03 +7.76000000000000e+00 2.08441303710000e-03 +7.77000000000000e+00 2.06654958870000e-03 +7.78000000000000e+00 2.04883912460000e-03 +7.79000000000000e+00 2.03128033770000e-03 +7.80000000000000e+00 2.01387193240000e-03 +7.81000000000000e+00 1.99661262380000e-03 +7.82000000000000e+00 1.97950113830000e-03 +7.83000000000000e+00 1.96253621270000e-03 +7.84000000000000e+00 1.94571659500000e-03 +7.85000000000000e+00 1.92904104360000e-03 +7.86000000000000e+00 1.91250832750000e-03 +7.87000000000000e+00 1.89611722630000e-03 +7.88000000000000e+00 1.87986652970000e-03 +7.89000000000000e+00 1.86375503800000e-03 +7.90000000000000e+00 1.84778156160000e-03 +7.91000000000000e+00 1.83194492100000e-03 +7.92000000000000e+00 1.81624394680000e-03 +7.93000000000000e+00 1.80067747950000e-03 +7.94000000000000e+00 1.78524436960000e-03 +7.95000000000000e+00 1.76994347710000e-03 +7.96000000000000e+00 1.75477367210000e-03 +7.97000000000000e+00 1.73973383390000e-03 +7.98000000000000e+00 1.72482285170000e-03 +7.99000000000000e+00 1.71003962400000e-03 +8.00000000000000e+00 1.69538305860000e-03 +8.01000000000000e+00 1.68085207270000e-03 +8.02000000000000e+00 1.66644559270000e-03 +8.03000000000000e+00 1.65216255420000e-03 +8.04000000000000e+00 1.63800190180000e-03 +8.05000000000000e+00 1.62396258910000e-03 +8.06000000000000e+00 1.61004357860000e-03 +8.07000000000000e+00 1.59624384160000e-03 +8.08000000000000e+00 1.58256235820000e-03 +8.09000000000000e+00 1.56899811720000e-03 +8.10000000000000e+00 1.55555011600000e-03 +8.11000000000000e+00 1.54221736060000e-03 +8.12000000000000e+00 1.52899886540000e-03 +8.13000000000000e+00 1.51589365310000e-03 +8.14000000000000e+00 1.50290075480000e-03 +8.15000000000000e+00 1.49001921010000e-03 +8.16000000000000e+00 1.47724806630000e-03 +8.17000000000000e+00 1.46458637920000e-03 +8.18000000000000e+00 1.45203321250000e-03 +8.19000000000000e+00 1.43958763790000e-03 +8.20000000000000e+00 1.42724873500000e-03 +8.21000000000000e+00 1.41501559120000e-03 +8.22000000000000e+00 1.40288730170000e-03 +8.23000000000000e+00 1.39086296950000e-03 +8.24000000000000e+00 1.37894170520000e-03 +8.25000000000000e+00 1.36712262690000e-03 +8.26000000000000e+00 1.35540486020000e-03 +8.27000000000000e+00 1.34378753830000e-03 +8.28000000000000e+00 1.33226980170000e-03 +8.29000000000000e+00 1.32085079820000e-03 +8.30000000000000e+00 1.30952968290000e-03 +8.31000000000000e+00 1.29830561810000e-03 +8.32000000000000e+00 1.28717777320000e-03 +8.33000000000000e+00 1.27614532470000e-03 +8.34000000000000e+00 1.26520745620000e-03 +8.35000000000000e+00 1.25436335820000e-03 +8.36000000000000e+00 1.24361222800000e-03 +8.37000000000000e+00 1.23295326990000e-03 +8.38000000000000e+00 1.22238569490000e-03 +8.39000000000000e+00 1.21190872080000e-03 +8.40000000000000e+00 1.20152157200000e-03 +8.41000000000000e+00 1.19122347950000e-03 +8.42000000000000e+00 1.18101368090000e-03 +8.43000000000000e+00 1.17089142030000e-03 +8.44000000000000e+00 1.16085594820000e-03 +8.45000000000000e+00 1.15090652170000e-03 +8.46000000000000e+00 1.14104240380000e-03 +8.47000000000000e+00 1.13126286420000e-03 +8.48000000000000e+00 1.12156717870000e-03 +8.49000000000000e+00 1.11195462930000e-03 +8.50000000000000e+00 1.10242450390000e-03 +8.51000000000000e+00 1.09297609690000e-03 +8.52000000000000e+00 1.08360870830000e-03 +8.53000000000000e+00 1.07432164430000e-03 +8.54000000000000e+00 1.06511421710000e-03 +8.55000000000000e+00 1.05598574440000e-03 +8.56000000000000e+00 1.04693555020000e-03 +8.57000000000000e+00 1.03796296390000e-03 +8.58000000000000e+00 1.02906732080000e-03 +8.59000000000000e+00 1.02024796180000e-03 +8.60000000000000e+00 1.01150423360000e-03 +8.61000000000000e+00 1.00283548810000e-03 +8.62000000000000e+00 9.94241083130000e-04 +8.63000000000000e+00 9.85720381780000e-04 +8.64000000000000e+00 9.77272752640000e-04 +8.65000000000000e+00 9.68897569700000e-04 +8.66000000000000e+00 9.60594212270000e-04 +8.67000000000000e+00 9.52362064970000e-04 +8.68000000000000e+00 9.44200517680000e-04 +8.69000000000000e+00 9.36108965470000e-04 +8.70000000000000e+00 9.28086808600000e-04 +8.71000000000000e+00 9.20133452450000e-04 +8.72000000000000e+00 9.12248307450000e-04 +8.73000000000000e+00 9.04430789100000e-04 +8.74000000000000e+00 8.96680317870000e-04 +8.75000000000000e+00 8.88996319190000e-04 +8.76000000000000e+00 8.81378223410000e-04 +8.77000000000000e+00 8.73825465710000e-04 +8.78000000000000e+00 8.66337486140000e-04 +8.79000000000000e+00 8.58913729500000e-04 +8.80000000000000e+00 8.51553645350000e-04 +8.81000000000000e+00 8.44256687940000e-04 +8.82000000000000e+00 8.37022316200000e-04 +8.83000000000000e+00 8.29849993670000e-04 +8.84000000000000e+00 8.22739188480000e-04 +8.85000000000000e+00 8.15689373320000e-04 +8.86000000000000e+00 8.08700025360000e-04 +8.87000000000000e+00 8.01770626240000e-04 +8.88000000000000e+00 7.94900662070000e-04 +8.89000000000000e+00 7.88089623300000e-04 +8.90000000000000e+00 7.81337004770000e-04 +8.91000000000000e+00 7.74642305630000e-04 +8.92000000000000e+00 7.68005029300000e-04 +8.93000000000000e+00 7.61424683460000e-04 +8.94000000000000e+00 7.54900780010000e-04 +8.95000000000000e+00 7.48432834980000e-04 +8.96000000000000e+00 7.42020368590000e-04 +8.97000000000000e+00 7.35662905130000e-04 +8.98000000000000e+00 7.29359972980000e-04 +8.99000000000000e+00 7.23111104520000e-04 +9.00000000000000e+00 7.16915836160000e-04 +9.01000000000000e+00 7.10773708280000e-04 +9.02000000000000e+00 7.04684265150000e-04 +9.03000000000000e+00 6.98647054980000e-04 +9.04000000000000e+00 6.92661629830000e-04 +9.05000000000000e+00 6.86727545590000e-04 +9.06000000000000e+00 6.80844361950000e-04 +9.07000000000000e+00 6.75011642360000e-04 +9.08000000000000e+00 6.69228954030000e-04 +9.09000000000000e+00 6.63495867840000e-04 +9.10000000000000e+00 6.57811958360000e-04 +9.11000000000000e+00 6.52176803810000e-04 +9.12000000000000e+00 6.46589985990000e-04 +9.13000000000000e+00 6.41051090310000e-04 +9.14000000000000e+00 6.35559705710000e-04 +9.15000000000000e+00 6.30115424640000e-04 +9.16000000000000e+00 6.24717843070000e-04 +9.17000000000000e+00 6.19366560400000e-04 +9.18000000000000e+00 6.14061179470000e-04 +9.19000000000000e+00 6.08801306510000e-04 +9.20000000000000e+00 6.03586551140000e-04 +9.21000000000000e+00 5.98416526300000e-04 +9.22000000000000e+00 5.93290848250000e-04 +9.23000000000000e+00 5.88209136560000e-04 +9.24000000000000e+00 5.83171014010000e-04 +9.25000000000000e+00 5.78176106660000e-04 +9.26000000000000e+00 5.73224043720000e-04 +9.27000000000000e+00 5.68314457630000e-04 +9.28000000000000e+00 5.63446983930000e-04 +9.29000000000000e+00 5.58621261330000e-04 +9.30000000000000e+00 5.53836931590000e-04 +9.31000000000000e+00 5.49093639560000e-04 +9.32000000000000e+00 5.44391033120000e-04 +9.33000000000000e+00 5.39728763180000e-04 +9.34000000000000e+00 5.35106483630000e-04 +9.35000000000000e+00 5.30523851340000e-04 +9.36000000000000e+00 5.25980526080000e-04 +9.37000000000000e+00 5.21476170610000e-04 +9.38000000000000e+00 5.17010450500000e-04 +9.39000000000000e+00 5.12583034210000e-04 +9.40000000000000e+00 5.08193593030000e-04 +9.41000000000000e+00 5.03841801100000e-04 +9.42000000000000e+00 4.99527335310000e-04 +9.43000000000000e+00 4.95249875360000e-04 +9.44000000000000e+00 4.91009103660000e-04 +9.45000000000000e+00 4.86804705370000e-04 +9.46000000000000e+00 4.82636368320000e-04 +9.47000000000000e+00 4.78503783050000e-04 +9.48000000000000e+00 4.74406642670000e-04 +9.49000000000000e+00 4.70344642980000e-04 +9.50000000000000e+00 4.66317482470000e-04 +9.51000000000000e+00 4.62324862150000e-04 +9.52000000000000e+00 4.58366485570000e-04 +9.53000000000000e+00 4.54442058860000e-04 +9.54000000000000e+00 4.50551290640000e-04 +9.55000000000000e+00 4.46693892050000e-04 +9.56000000000000e+00 4.42869576670000e-04 +9.57000000000000e+00 4.39078060570000e-04 +9.58000000000000e+00 4.35319062230000e-04 +9.59000000000000e+00 4.31592302590000e-04 +9.60000000000000e+00 4.27897505090000e-04 +9.61000000000000e+00 4.24234395190000e-04 +9.62000000000000e+00 4.20602700900000e-04 +9.63000000000000e+00 4.17002152530000e-04 +9.64000000000000e+00 4.13432482740000e-04 +9.65000000000000e+00 4.09893426460000e-04 +9.66000000000000e+00 4.06384720890000e-04 +9.67000000000000e+00 4.02906105490000e-04 +9.68000000000000e+00 3.99457321960000e-04 +9.69000000000000e+00 3.96038114210000e-04 +9.70000000000000e+00 3.92648228350000e-04 +9.71000000000000e+00 3.89287412520000e-04 +9.72000000000000e+00 3.85955417230000e-04 +9.73000000000000e+00 3.82651995210000e-04 +9.74000000000000e+00 3.79376901180000e-04 +9.75000000000000e+00 3.76129891990000e-04 +9.76000000000000e+00 3.72910726580000e-04 +9.77000000000000e+00 3.69719165950000e-04 +9.78000000000000e+00 3.66554973160000e-04 +9.79000000000000e+00 3.63417913290000e-04 +9.80000000000000e+00 3.60307753440000e-04 +9.81000000000000e+00 3.57224262730000e-04 +9.82000000000000e+00 3.54167212240000e-04 +9.83000000000000e+00 3.51136375210000e-04 +9.84000000000000e+00 3.48131526430000e-04 +9.85000000000000e+00 3.45152442820000e-04 +9.86000000000000e+00 3.42198903200000e-04 +9.87000000000000e+00 3.39270688300000e-04 +9.88000000000000e+00 3.36367580710000e-04 +9.89000000000000e+00 3.33489364920000e-04 +9.90000000000000e+00 3.30635827240000e-04 +9.91000000000000e+00 3.27806755820000e-04 +9.92000000000000e+00 3.25001940630000e-04 +9.93000000000000e+00 3.22221173450000e-04 +9.94000000000000e+00 3.19464247820000e-04 +9.95000000000000e+00 3.16730959000000e-04 +9.96000000000000e+00 3.14021104180000e-04 +9.97000000000000e+00 3.11334482210000e-04 +9.98000000000000e+00 3.08670893650000e-04 +9.99000000000000e+00 3.06030140790000e-04 +1.00000000000000e+01 3.03412027600000e-04 +1.00100000000000e+01 3.00816359740000e-04 +1.00200000000000e+01 2.98242944540000e-04 +1.00300000000000e+01 2.95691591000000e-04 +1.00400000000000e+01 2.93162109720000e-04 +1.00500000000000e+01 2.90654312970000e-04 +1.00600000000000e+01 2.88168014620000e-04 +1.00700000000000e+01 2.85703030120000e-04 +1.00800000000000e+01 2.83259176510000e-04 +1.00900000000000e+01 2.80836272390000e-04 +1.01000000000000e+01 2.78434137940000e-04 +1.01100000000000e+01 2.76052594860000e-04 +1.01200000000000e+01 2.73691466390000e-04 +1.01300000000000e+01 2.71350577290000e-04 +1.01400000000000e+01 2.69029753830000e-04 +1.01500000000000e+01 2.66728823740000e-04 +1.01600000000000e+01 2.64447616270000e-04 +1.01700000000000e+01 2.62185962110000e-04 +1.01800000000000e+01 2.59943693400000e-04 +1.01900000000000e+01 2.57720643760000e-04 +1.02000000000000e+01 2.55516648170000e-04 +1.02100000000000e+01 2.53331543060000e-04 +1.02200000000000e+01 2.51165166260000e-04 +1.02300000000000e+01 2.49017356980000e-04 +1.02400000000000e+01 2.46887955850000e-04 +1.02500000000000e+01 2.44776804810000e-04 +1.02600000000000e+01 2.42683747210000e-04 +1.02700000000000e+01 2.40608627710000e-04 +1.02800000000000e+01 2.38551292310000e-04 +1.02900000000000e+01 2.36511588350000e-04 +1.03000000000000e+01 2.34489364450000e-04 +1.03100000000000e+01 2.32484470530000e-04 +1.03200000000000e+01 2.30496757850000e-04 +1.03300000000000e+01 2.28526078900000e-04 +1.03400000000000e+01 2.26572287470000e-04 +1.03500000000000e+01 2.24635238590000e-04 +1.03600000000000e+01 2.22714788530000e-04 +1.03700000000000e+01 2.20810794790000e-04 +1.03800000000000e+01 2.18923116110000e-04 +1.03900000000000e+01 2.17051612440000e-04 +1.04000000000000e+01 2.15196144930000e-04 +1.04100000000000e+01 2.13356575910000e-04 +1.04200000000000e+01 2.11532768920000e-04 +1.04300000000000e+01 2.09724588650000e-04 +1.04400000000000e+01 2.07931900960000e-04 +1.04500000000000e+01 2.06154572860000e-04 +1.04600000000000e+01 2.04392472500000e-04 +1.04700000000000e+01 2.02645469180000e-04 +1.04800000000000e+01 2.00913433310000e-04 +1.04900000000000e+01 1.99196236410000e-04 +1.05000000000000e+01 1.97493751100000e-04 +1.05100000000000e+01 1.95805851110000e-04 +1.05200000000000e+01 1.94132411240000e-04 +1.05300000000000e+01 1.92473307380000e-04 +1.05400000000000e+01 1.90828416480000e-04 +1.05500000000000e+01 1.89197616540000e-04 +1.05600000000000e+01 1.87580786620000e-04 +1.05700000000000e+01 1.85977806810000e-04 +1.05800000000000e+01 1.84388558230000e-04 +1.05900000000000e+01 1.82812923030000e-04 +1.06000000000000e+01 1.81250784360000e-04 +1.06100000000000e+01 1.79702026390000e-04 +1.06200000000000e+01 1.78166534270000e-04 +1.06300000000000e+01 1.76644194140000e-04 +1.06400000000000e+01 1.75134893130000e-04 +1.06500000000000e+01 1.73638519330000e-04 +1.06600000000000e+01 1.72154961790000e-04 +1.06700000000000e+01 1.70684110510000e-04 +1.06800000000000e+01 1.69225856450000e-04 +1.06900000000000e+01 1.67780091490000e-04 +1.07000000000000e+01 1.66346708460000e-04 +1.07100000000000e+01 1.64925601080000e-04 +1.07200000000000e+01 1.63516664020000e-04 +1.07300000000000e+01 1.62119792820000e-04 +1.07400000000000e+01 1.60734883950000e-04 +1.07500000000000e+01 1.59361834730000e-04 +1.07600000000000e+01 1.58000543410000e-04 +1.07700000000000e+01 1.56650909070000e-04 +1.07800000000000e+01 1.55312831700000e-04 +1.07900000000000e+01 1.53986212100000e-04 +1.08000000000000e+01 1.52670951970000e-04 +1.08100000000000e+01 1.51366953810000e-04 +1.08200000000000e+01 1.50074121010000e-04 +1.08300000000000e+01 1.48792357730000e-04 +1.08400000000000e+01 1.47521569020000e-04 +1.08500000000000e+01 1.46261660680000e-04 +1.08600000000000e+01 1.45012539360000e-04 +1.08700000000000e+01 1.43774112510000e-04 +1.08800000000000e+01 1.42546288360000e-04 +1.08900000000000e+01 1.41328975940000e-04 +1.09000000000000e+01 1.40122085050000e-04 +1.09100000000000e+01 1.38925526290000e-04 +1.09200000000000e+01 1.37739210990000e-04 +1.09300000000000e+01 1.36563051270000e-04 +1.09400000000000e+01 1.35396960000000e-04 +1.09500000000000e+01 1.34240850800000e-04 +1.09600000000000e+01 1.33094638020000e-04 +1.09700000000000e+01 1.31958236760000e-04 +1.09800000000000e+01 1.30831562850000e-04 +1.09900000000000e+01 1.29714532830000e-04 +1.10000000000000e+01 1.28607063960000e-04 +1.10100000000000e+01 1.27509074230000e-04 +1.10200000000000e+01 1.26420482310000e-04 +1.10300000000000e+01 1.25341207580000e-04 +1.10400000000000e+01 1.24271170120000e-04 +1.10500000000000e+01 1.23210290680000e-04 +1.10600000000000e+01 1.22158490700000e-04 +1.10700000000000e+01 1.21115692300000e-04 +1.10800000000000e+01 1.20081818250000e-04 +1.10900000000000e+01 1.19056792020000e-04 +1.11000000000000e+01 1.18040537700000e-04 +1.11100000000000e+01 1.17032980050000e-04 +1.11200000000000e+01 1.16034044470000e-04 +1.11300000000000e+01 1.15043657010000e-04 +1.11400000000000e+01 1.14061744350000e-04 +1.11500000000000e+01 1.13088233800000e-04 +1.11600000000000e+01 1.12123053300000e-04 +1.11700000000000e+01 1.11166131390000e-04 +1.11800000000000e+01 1.10217397250000e-04 +1.11900000000000e+01 1.09276780650000e-04 +1.12000000000000e+01 1.08344211970000e-04 +1.12100000000000e+01 1.07419622190000e-04 +1.12200000000000e+01 1.06502942880000e-04 +1.12300000000000e+01 1.05594106200000e-04 +1.12400000000000e+01 1.04693044890000e-04 +1.12500000000000e+01 1.03799692270000e-04 +1.12600000000000e+01 1.02913982240000e-04 +1.12700000000000e+01 1.02035849250000e-04 +1.12800000000000e+01 1.01165228330000e-04 +1.12900000000000e+01 1.00302055060000e-04 +1.13000000000000e+01 9.94462655700000e-05 +1.13100000000000e+01 9.85977965520000e-05 +1.13200000000000e+01 9.77565852310000e-05 +1.13300000000000e+01 9.69225693750000e-05 +1.13400000000000e+01 9.60956872830000e-05 +1.13500000000000e+01 9.52758777900000e-05 +1.13600000000000e+01 9.44630802530000e-05 +1.13700000000000e+01 9.36572345500000e-05 +1.13800000000000e+01 9.28582810770000e-05 +1.13900000000000e+01 9.20661607410000e-05 +1.14000000000000e+01 9.12808149570000e-05 +1.14100000000000e+01 9.05021856420000e-05 +1.14200000000000e+01 8.97302152140000e-05 +1.14300000000000e+01 8.89648465840000e-05 +1.14400000000000e+01 8.82060231560000e-05 +1.14500000000000e+01 8.74536888160000e-05 +1.14600000000000e+01 8.67077879350000e-05 +1.14700000000000e+01 8.59682653620000e-05 +1.14800000000000e+01 8.52350664170000e-05 +1.14900000000000e+01 8.45081368940000e-05 +1.15000000000000e+01 8.37874230490000e-05 +1.15100000000000e+01 8.30728716030000e-05 +1.15200000000000e+01 8.23644297310000e-05 +1.15300000000000e+01 8.16620450640000e-05 +1.15400000000000e+01 8.09656656830000e-05 +1.15500000000000e+01 8.02752401140000e-05 +1.15600000000000e+01 7.95907173260000e-05 +1.15700000000000e+01 7.89120467240000e-05 +1.15800000000000e+01 7.82391781510000e-05 +1.15900000000000e+01 7.75720618790000e-05 +1.16000000000000e+01 7.69106486070000e-05 +1.16100000000000e+01 7.62548894570000e-05 +1.16200000000000e+01 7.56047359710000e-05 +1.16300000000000e+01 7.49601401100000e-05 +1.16400000000000e+01 7.43210542440000e-05 +1.16500000000000e+01 7.36874311540000e-05 +1.16600000000000e+01 7.30592240270000e-05 +1.16700000000000e+01 7.24363864500000e-05 +1.16800000000000e+01 7.18188724100000e-05 +1.16900000000000e+01 7.12066362890000e-05 +1.17000000000000e+01 7.05996328610000e-05 +1.17100000000000e+01 6.99978172880000e-05 +1.17200000000000e+01 6.94011451160000e-05 +1.17300000000000e+01 6.88095722750000e-05 +1.17400000000000e+01 6.82230550730000e-05 +1.17500000000000e+01 6.76415501910000e-05 +1.17600000000000e+01 6.70650146830000e-05 +1.17700000000000e+01 6.64934059740000e-05 +1.17800000000000e+01 6.59266818540000e-05 +1.17900000000000e+01 6.53648004720000e-05 +1.18000000000000e+01 6.48077203420000e-05 +1.18100000000000e+01 6.42554003280000e-05 +1.18200000000000e+01 6.37077996530000e-05 +1.18300000000000e+01 6.31648778870000e-05 +1.18400000000000e+01 6.26265949460000e-05 +1.18500000000000e+01 6.20929110940000e-05 +1.18600000000000e+01 6.15637869330000e-05 +1.18700000000000e+01 6.10391834040000e-05 +1.18800000000000e+01 6.05190617840000e-05 +1.18900000000000e+01 6.00033836820000e-05 +1.19000000000000e+01 5.94921110360000e-05 +1.19100000000000e+01 5.89852061130000e-05 +1.19200000000000e+01 5.84826315030000e-05 +1.19300000000000e+01 5.79843501160000e-05 +1.19400000000000e+01 5.74903251810000e-05 +1.19500000000000e+01 5.70005202430000e-05 +1.19600000000000e+01 5.65148991610000e-05 +1.19700000000000e+01 5.60334261020000e-05 +1.19800000000000e+01 5.55560655420000e-05 +1.19900000000000e+01 5.50827822620000e-05 +1.20000000000000e+01 5.46135413450000e-05 +1.20100000000000e+01 5.41483081740000e-05 +1.20200000000000e+01 5.36870484290000e-05 +1.20300000000000e+01 5.32297280840000e-05 +1.20400000000000e+01 5.27763134050000e-05 +1.20500000000000e+01 5.23267709500000e-05 +1.20600000000000e+01 5.18810675610000e-05 +1.20700000000000e+01 5.14391703670000e-05 +1.20800000000000e+01 5.10010467770000e-05 +1.20900000000000e+01 5.05666644830000e-05 +1.21000000000000e+01 5.01359914500000e-05 +1.21100000000000e+01 4.97089959220000e-05 +1.21200000000000e+01 4.92856464130000e-05 +1.21300000000000e+01 4.88659117070000e-05 +1.21400000000000e+01 4.84497608580000e-05 +1.21500000000000e+01 4.80371631840000e-05 +1.21600000000000e+01 4.76280882660000e-05 +1.21700000000000e+01 4.72225059490000e-05 +1.21800000000000e+01 4.68203863310000e-05 +1.21900000000000e+01 4.64216997730000e-05 +1.22000000000000e+01 4.60264168870000e-05 +1.22100000000000e+01 4.56345085380000e-05 +1.22200000000000e+01 4.52459458410000e-05 +1.22300000000000e+01 4.48607001590000e-05 +1.22400000000000e+01 4.44787431000000e-05 +1.22500000000000e+01 4.41000465160000e-05 +1.22600000000000e+01 4.37245825010000e-05 +1.22700000000000e+01 4.33523233880000e-05 +1.22800000000000e+01 4.29832417470000e-05 +1.22900000000000e+01 4.26173103850000e-05 +1.23000000000000e+01 4.22545023400000e-05 +1.23100000000000e+01 4.18947908830000e-05 +1.23200000000000e+01 4.15381495140000e-05 +1.23300000000000e+01 4.11845519590000e-05 +1.23400000000000e+01 4.08339721720000e-05 +1.23500000000000e+01 4.04863843290000e-05 +1.23600000000000e+01 4.01417628270000e-05 +1.23700000000000e+01 3.98000822840000e-05 +1.23800000000000e+01 3.94613175350000e-05 +1.23900000000000e+01 3.91254436310000e-05 +1.24000000000000e+01 3.87924358370000e-05 +1.24100000000000e+01 3.84622696310000e-05 +1.24200000000000e+01 3.81349206990000e-05 +1.24300000000000e+01 3.78103649380000e-05 +1.24400000000000e+01 3.74885784510000e-05 +1.24500000000000e+01 3.71695375450000e-05 +1.24600000000000e+01 3.68532187320000e-05 +1.24700000000000e+01 3.65395987240000e-05 +1.24800000000000e+01 3.62286544330000e-05 +1.24900000000000e+01 3.59203629690000e-05 +1.25000000000000e+01 3.56147016410000e-05 +1.25100000000000e+01 3.53116479480000e-05 +1.25200000000000e+01 3.50111795860000e-05 +1.25300000000000e+01 3.47132744390000e-05 +1.25400000000000e+01 3.44179105840000e-05 +1.25500000000000e+01 3.41250662830000e-05 +1.25600000000000e+01 3.38347199860000e-05 +1.25700000000000e+01 3.35468503280000e-05 +1.25800000000000e+01 3.32614361270000e-05 +1.25900000000000e+01 3.29784563810000e-05 +1.26000000000000e+01 3.26978902700000e-05 +1.26100000000000e+01 3.24197171530000e-05 +1.26200000000000e+01 3.21439165640000e-05 +1.26300000000000e+01 3.18704682120000e-05 +1.26400000000000e+01 3.15993519840000e-05 +1.26500000000000e+01 3.13305479370000e-05 +1.26600000000000e+01 3.10640362970000e-05 +1.26700000000000e+01 3.07997974630000e-05 +1.26800000000000e+01 3.05378120010000e-05 +1.26900000000000e+01 3.02780606420000e-05 +1.27000000000000e+01 3.00205242850000e-05 +1.27100000000000e+01 2.97651839890000e-05 +1.27200000000000e+01 2.95120209790000e-05 +1.27300000000000e+01 2.92610166390000e-05 +1.27400000000000e+01 2.90121525140000e-05 +1.27500000000000e+01 2.87654103050000e-05 +1.27600000000000e+01 2.85207718710000e-05 +1.27700000000000e+01 2.82782192280000e-05 +1.27800000000000e+01 2.80377345430000e-05 +1.27900000000000e+01 2.77993001390000e-05 +1.28000000000000e+01 2.75628984900000e-05 +1.28100000000000e+01 2.73285122170000e-05 +1.28200000000000e+01 2.70961240950000e-05 +1.28300000000000e+01 2.68657170440000e-05 +1.28400000000000e+01 2.66372741280000e-05 +1.28500000000000e+01 2.64107785620000e-05 +1.28600000000000e+01 2.61862136980000e-05 +1.28700000000000e+01 2.59635630370000e-05 +1.28800000000000e+01 2.57428102170000e-05 +1.28900000000000e+01 2.55239390190000e-05 +1.29000000000000e+01 2.53069333600000e-05 +1.29100000000000e+01 2.50917772980000e-05 +1.29200000000000e+01 2.48784550260000e-05 +1.29300000000000e+01 2.46669508710000e-05 +1.29400000000000e+01 2.44572492980000e-05 +1.29500000000000e+01 2.42493349020000e-05 +1.29600000000000e+01 2.40431924120000e-05 +1.29700000000000e+01 2.38388066870000e-05 +1.29800000000000e+01 2.36361627150000e-05 +1.29900000000000e+01 2.34352456140000e-05 +1.30000000000000e+01 2.32360406280000e-05 +1.30100000000000e+01 2.30385331300000e-05 +1.30200000000000e+01 2.28427086140000e-05 +1.30300000000000e+01 2.26485527030000e-05 +1.30400000000000e+01 2.24560511400000e-05 +1.30500000000000e+01 2.22651897920000e-05 +1.30600000000000e+01 2.20759546450000e-05 +1.30700000000000e+01 2.18883318080000e-05 +1.30800000000000e+01 2.17023075050000e-05 +1.30900000000000e+01 2.15178680810000e-05 +1.31000000000000e+01 2.13349999980000e-05 +1.31100000000000e+01 2.11536898330000e-05 +1.31200000000000e+01 2.09739242790000e-05 +1.31300000000000e+01 2.07956901410000e-05 +1.31400000000000e+01 2.06189743390000e-05 +1.31500000000000e+01 2.04437639040000e-05 +1.31600000000000e+01 2.02700459780000e-05 +1.31700000000000e+01 2.00978078140000e-05 +1.31800000000000e+01 1.99270367740000e-05 +1.31900000000000e+01 1.97577203270000e-05 +1.32000000000000e+01 1.95898460510000e-05 +1.32100000000000e+01 1.94234016290000e-05 +1.32200000000000e+01 1.92583748510000e-05 +1.32300000000000e+01 1.90947536090000e-05 +1.32400000000000e+01 1.89325259000000e-05 +1.32500000000000e+01 1.87716798250000e-05 +1.32600000000000e+01 1.86122035870000e-05 +1.32700000000000e+01 1.84540854870000e-05 +1.32800000000000e+01 1.82973139300000e-05 +1.32900000000000e+01 1.81418774180000e-05 +1.33000000000000e+01 1.79877645510000e-05 +1.33100000000000e+01 1.78349640290000e-05 +1.33200000000000e+01 1.76834646460000e-05 +1.33300000000000e+01 1.75332552930000e-05 +1.33400000000000e+01 1.73843249580000e-05 +1.33500000000000e+01 1.72366627200000e-05 diff --git a/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi40.inp b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi40.inp new file mode 100644 index 000000000..58ff7c7c8 --- /dev/null +++ b/data/electronicStructure/pseudoPotential/z29/singleAtomData/psi40.inp @@ -0,0 +1,1335 @@ +1.00000000000000e-02 8.96893613300000e-03 +2.00000000000000e-02 1.79258905250000e-02 +3.00000000000000e-02 2.68588995820000e-02 +4.00000000000000e-02 3.57560359920000e-02 +5.00000000000000e-02 4.46054267570000e-02 +6.00000000000000e-02 5.33952711080000e-02 +7.00000000000000e-02 6.21138582540000e-02 +8.00000000000000e-02 7.07495849350000e-02 +9.00000000000000e-02 7.92909727300000e-02 +1.00000000000000e-01 8.77266850860000e-02 +1.10000000000000e-01 9.60455440350000e-02 +1.20000000000000e-01 1.04236546560000e-01 +1.30000000000000e-01 1.12288880550000e-01 +1.40000000000000e-01 1.20191940420000e-01 +1.50000000000000e-01 1.27935342120000e-01 +1.60000000000000e-01 1.35508937870000e-01 +1.70000000000000e-01 1.42902830180000e-01 +1.80000000000000e-01 1.50107385490000e-01 +1.90000000000000e-01 1.57113247160000e-01 +2.00000000000000e-01 1.63911347930000e-01 +2.10000000000000e-01 1.70492921700000e-01 +2.20000000000000e-01 1.76849514760000e-01 +2.30000000000000e-01 1.82972996340000e-01 +2.40000000000000e-01 1.88855568500000e-01 +2.50000000000000e-01 1.94489775360000e-01 +2.60000000000000e-01 1.99868511630000e-01 +2.70000000000000e-01 2.04985030460000e-01 +2.80000000000000e-01 2.09832950600000e-01 +2.90000000000000e-01 2.14406262810000e-01 +3.00000000000000e-01 2.18699335610000e-01 +3.10000000000000e-01 2.22706920290000e-01 +3.20000000000000e-01 2.26424155220000e-01 +3.30000000000000e-01 2.29846569430000e-01 +3.40000000000000e-01 2.32970085520000e-01 +3.50000000000000e-01 2.35791021850000e-01 +3.60000000000000e-01 2.38306094050000e-01 +3.70000000000000e-01 2.40512415790000e-01 +3.80000000000000e-01 2.42407498960000e-01 +3.90000000000000e-01 2.43989253140000e-01 +4.00000000000000e-01 2.45255984420000e-01 +4.10000000000000e-01 2.46206393590000e-01 +4.20000000000000e-01 2.46839573720000e-01 +4.30000000000000e-01 2.47155007110000e-01 +4.40000000000000e-01 2.47152561650000e-01 +4.50000000000000e-01 2.46832486670000e-01 +4.60000000000000e-01 2.46195408140000e-01 +4.70000000000000e-01 2.45242323410000e-01 +4.80000000000000e-01 2.43974595410000e-01 +4.90000000000000e-01 2.42393946340000e-01 +5.00000000000000e-01 2.40502450930000e-01 +5.10000000000000e-01 2.38302529190000e-01 +5.20000000000000e-01 2.35796938750000e-01 +5.30000000000000e-01 2.32988766840000e-01 +5.40000000000000e-01 2.29881421770000e-01 +5.50000000000000e-01 2.26478624140000e-01 +5.60000000000000e-01 2.22784397660000e-01 +5.70000000000000e-01 2.18803059620000e-01 +5.80000000000000e-01 2.14539211100000e-01 +5.90000000000000e-01 2.09997726880000e-01 +6.00000000000000e-01 2.05183745050000e-01 +6.10000000000000e-01 2.00102656420000e-01 +6.20000000000000e-01 1.94760093670000e-01 +6.30000000000000e-01 1.89161920340000e-01 +6.40000000000000e-01 1.83314219560000e-01 +6.50000000000000e-01 1.77223282710000e-01 +6.60000000000000e-01 1.70895597850000e-01 +6.70000000000000e-01 1.64337838060000e-01 +6.80000000000000e-01 1.57556849670000e-01 +6.90000000000000e-01 1.50559640400000e-01 +7.00000000000000e-01 1.43353367390000e-01 +7.10000000000000e-01 1.35945325270000e-01 +7.20000000000000e-01 1.28342934060000e-01 +7.30000000000000e-01 1.20553727150000e-01 +7.40000000000000e-01 1.12585339260000e-01 +7.50000000000000e-01 1.04445494380000e-01 +7.60000000000000e-01 9.61419937530000e-02 +7.70000000000000e-01 8.76827039650000e-02 +7.80000000000000e-01 7.90755449980000e-02 +7.90000000000000e-01 7.03284784480000e-02 +8.00000000000000e-01 6.14494958030000e-02 +8.10000000000000e-01 5.24466068470000e-02 +8.20000000000000e-01 4.33278281910000e-02 +8.30000000000000e-01 3.41011719550000e-02 +8.40000000000000e-01 2.47746346060000e-02 +8.50000000000000e-01 1.53561859900000e-02 +8.60000000000000e-01 5.85375853840000e-03 +8.70000000000000e-01 -3.72476329300000e-03 +8.80000000000000e-01 -1.33715533740000e-02 +8.90000000000000e-01 -2.30788540030000e-02 +9.00000000000000e-01 -3.28389857450000e-02 +9.10000000000000e-01 -4.26443570120000e-02 +9.20000000000000e-01 -5.24874733430000e-02 +9.30000000000000e-01 -6.23609463900000e-02 +9.40000000000000e-01 -7.22575025810000e-02 +9.50000000000000e-01 -8.21699914630000e-02 +9.60000000000000e-01 -9.20913936920000e-02 +9.70000000000000e-01 -1.02014828670000e-01 +9.80000000000000e-01 -1.11933561840000e-01 +9.90000000000000e-01 -1.21841011520000e-01 +1.00000000000000e+00 -1.31730755460000e-01 +1.01000000000000e+00 -1.41596536930000e-01 +1.02000000000000e+00 -1.51432270370000e-01 +1.03000000000000e+00 -1.61232046700000e-01 +1.04000000000000e+00 -1.70990138140000e-01 +1.05000000000000e+00 -1.80701002620000e-01 +1.06000000000000e+00 -1.90359287740000e-01 +1.07000000000000e+00 -1.99959834300000e-01 +1.08000000000000e+00 -2.09497679380000e-01 +1.09000000000000e+00 -2.18968058900000e-01 +1.10000000000000e+00 -2.28366409880000e-01 +1.11000000000000e+00 -2.37688372070000e-01 +1.12000000000000e+00 -2.46929789240000e-01 +1.13000000000000e+00 -2.56086710000000e-01 +1.14000000000000e+00 -2.65155388140000e-01 +1.15000000000000e+00 -2.74132282550000e-01 +1.16000000000000e+00 -2.83014056720000e-01 +1.17000000000000e+00 -2.91797577780000e-01 +1.18000000000000e+00 -3.00479915140000e-01 +1.19000000000000e+00 -3.09058338700000e-01 +1.20000000000000e+00 -3.17530316710000e-01 +1.21000000000000e+00 -3.25893513150000e-01 +1.22000000000000e+00 -3.34145784870000e-01 +1.23000000000000e+00 -3.42285178260000e-01 +1.24000000000000e+00 -3.50309925600000e-01 +1.25000000000000e+00 -3.58218441170000e-01 +1.26000000000000e+00 -3.66009316920000e-01 +1.27000000000000e+00 -3.73681317960000e-01 +1.28000000000000e+00 -3.81233377770000e-01 +1.29000000000000e+00 -3.88664593090000e-01 +1.30000000000000e+00 -3.95974218660000e-01 +1.31000000000000e+00 -4.03161661740000e-01 +1.32000000000000e+00 -4.10226476440000e-01 +1.33000000000000e+00 -4.17168357910000e-01 +1.34000000000000e+00 -4.23987136350000e-01 +1.35000000000000e+00 -4.30682770970000e-01 +1.36000000000000e+00 -4.37255343820000e-01 +1.37000000000000e+00 -4.43705053600000e-01 +1.38000000000000e+00 -4.50032209360000e-01 +1.39000000000000e+00 -4.56237224240000e-01 +1.40000000000000e+00 -4.62320609200000e-01 +1.41000000000000e+00 -4.68282966780000e-01 +1.42000000000000e+00 -4.74124984870000e-01 +1.43000000000000e+00 -4.79847430640000e-01 +1.44000000000000e+00 -4.85451144430000e-01 +1.45000000000000e+00 -4.90937033850000e-01 +1.46000000000000e+00 -4.96306067990000e-01 +1.47000000000000e+00 -5.01559271730000e-01 +1.48000000000000e+00 -5.06697720240000e-01 +1.49000000000000e+00 -5.11722533660000e-01 +1.50000000000000e+00 -5.16634871940000e-01 +1.51000000000000e+00 -5.21435929910000e-01 +1.52000000000000e+00 -5.26126932550000e-01 +1.53000000000000e+00 -5.30709130450000e-01 +1.54000000000000e+00 -5.35183795560000e-01 +1.55000000000000e+00 -5.39552217080000e-01 +1.56000000000000e+00 -5.43815697720000e-01 +1.57000000000000e+00 -5.47975550090000e-01 +1.58000000000000e+00 -5.52033093350000e-01 +1.59000000000000e+00 -5.55989650190000e-01 +1.60000000000000e+00 -5.59846543940000e-01 +1.61000000000000e+00 -5.63605096020000e-01 +1.62000000000000e+00 -5.67266623580000e-01 +1.63000000000000e+00 -5.70832437360000e-01 +1.64000000000000e+00 -5.74303839850000e-01 +1.65000000000000e+00 -5.77682123590000e-01 +1.66000000000000e+00 -5.80968569760000e-01 +1.67000000000000e+00 -5.84164446890000e-01 +1.68000000000000e+00 -5.87271009910000e-01 +1.69000000000000e+00 -5.90289499180000e-01 +1.70000000000000e+00 -5.93221139930000e-01 +1.71000000000000e+00 -5.96067141640000e-01 +1.72000000000000e+00 -5.98828697780000e-01 +1.73000000000000e+00 -6.01506985490000e-01 +1.74000000000000e+00 -6.04103165580000e-01 +1.75000000000000e+00 -6.06618382490000e-01 +1.76000000000000e+00 -6.09053764420000e-01 +1.77000000000000e+00 -6.11410423560000e-01 +1.78000000000000e+00 -6.13689456390000e-01 +1.79000000000000e+00 -6.15891944000000e-01 +1.80000000000000e+00 -6.18018952500000e-01 +1.81000000000000e+00 -6.20071533470000e-01 +1.82000000000000e+00 -6.22050724460000e-01 +1.83000000000000e+00 -6.23957549430000e-01 +1.84000000000000e+00 -6.25793019280000e-01 +1.85000000000000e+00 -6.27558132350000e-01 +1.86000000000000e+00 -6.29253874930000e-01 +1.87000000000000e+00 -6.30881221690000e-01 +1.88000000000000e+00 -6.32441136190000e-01 +1.89000000000000e+00 -6.33934571280000e-01 +1.90000000000000e+00 -6.35362469510000e-01 +1.91000000000000e+00 -6.36725763510000e-01 +1.92000000000000e+00 -6.38025376280000e-01 +1.93000000000000e+00 -6.39262221540000e-01 +1.94000000000000e+00 -6.40437203880000e-01 +1.95000000000000e+00 -6.41551218770000e-01 +1.96000000000000e+00 -6.42605152610000e-01 +1.97000000000000e+00 -6.43599882680000e-01 +1.98000000000000e+00 -6.44536276960000e-01 +1.99000000000000e+00 -6.45415194270000e-01 +2.00000000000000e+00 -6.46237484450000e-01 +2.01000000000000e+00 -6.47003988410000e-01 +2.02000000000000e+00 -6.47715538100000e-01 +2.03000000000000e+00 -6.48372956500000e-01 +2.04000000000000e+00 -6.48977057680000e-01 +2.05000000000000e+00 -6.49528646920000e-01 +2.06000000000000e+00 -6.50028520730000e-01 +2.07000000000000e+00 -6.50477466880000e-01 +2.08000000000000e+00 -6.50876264510000e-01 +2.09000000000000e+00 -6.51225684130000e-01 +2.10000000000000e+00 -6.51526487730000e-01 +2.11000000000000e+00 -6.51779428830000e-01 +2.12000000000000e+00 -6.51985252520000e-01 +2.13000000000000e+00 -6.52144695570000e-01 +2.14000000000000e+00 -6.52258486450000e-01 +2.15000000000000e+00 -6.52327345440000e-01 +2.16000000000000e+00 -6.52351984670000e-01 +2.17000000000000e+00 -6.52333108190000e-01 +2.18000000000000e+00 -6.52271412040000e-01 +2.19000000000000e+00 -6.52167584350000e-01 +2.20000000000000e+00 -6.52022305350000e-01 +2.21000000000000e+00 -6.51836247500000e-01 +2.22000000000000e+00 -6.51610075500000e-01 +2.23000000000000e+00 -6.51344446430000e-01 +2.24000000000000e+00 -6.51040009740000e-01 +2.25000000000000e+00 -6.50697407390000e-01 +2.26000000000000e+00 -6.50317273880000e-01 +2.27000000000000e+00 -6.49900236320000e-01 +2.28000000000000e+00 -6.49446914500000e-01 +2.29000000000000e+00 -6.48957920990000e-01 +2.30000000000000e+00 -6.48433861150000e-01 +2.31000000000000e+00 -6.47875333250000e-01 +2.32000000000000e+00 -6.47282928520000e-01 +2.33000000000000e+00 -6.46657231190000e-01 +2.34000000000000e+00 -6.45998818610000e-01 +2.35000000000000e+00 -6.45308261270000e-01 +2.36000000000000e+00 -6.44586122870000e-01 +2.37000000000000e+00 -6.43832960430000e-01 +2.38000000000000e+00 -6.43049324310000e-01 +2.39000000000000e+00 -6.42235758270000e-01 +2.40000000000000e+00 -6.41392799570000e-01 +2.41000000000000e+00 -6.40520979010000e-01 +2.42000000000000e+00 -6.39620821020000e-01 +2.43000000000000e+00 -6.38692843660000e-01 +2.44000000000000e+00 -6.37737558760000e-01 +2.45000000000000e+00 -6.36755471930000e-01 +2.46000000000000e+00 -6.35747082650000e-01 +2.47000000000000e+00 -6.34712884300000e-01 +2.48000000000000e+00 -6.33653364270000e-01 +2.49000000000000e+00 -6.32569003970000e-01 +2.50000000000000e+00 -6.31460278910000e-01 +2.51000000000000e+00 -6.30327658760000e-01 +2.52000000000000e+00 -6.29171607430000e-01 +2.53000000000000e+00 -6.27992583080000e-01 +2.54000000000000e+00 -6.26791038220000e-01 +2.55000000000000e+00 -6.25567419750000e-01 +2.56000000000000e+00 -6.24322169020000e-01 +2.57000000000000e+00 -6.23055721890000e-01 +2.58000000000000e+00 -6.21768508780000e-01 +2.59000000000000e+00 -6.20460954730000e-01 +2.60000000000000e+00 -6.19133479460000e-01 +2.61000000000000e+00 -6.17786497410000e-01 +2.62000000000000e+00 -6.16420417800000e-01 +2.63000000000000e+00 -6.15035644720000e-01 +2.64000000000000e+00 -6.13632577100000e-01 +2.65000000000000e+00 -6.12211608860000e-01 +2.66000000000000e+00 -6.10773128890000e-01 +2.67000000000000e+00 -6.09317521140000e-01 +2.68000000000000e+00 -6.07845164650000e-01 +2.69000000000000e+00 -6.06356433640000e-01 +2.70000000000000e+00 -6.04851697480000e-01 +2.71000000000000e+00 -6.03331320850000e-01 +2.72000000000000e+00 -6.01795663700000e-01 +2.73000000000000e+00 -6.00245081330000e-01 +2.74000000000000e+00 -5.98679924460000e-01 +2.75000000000000e+00 -5.97100539230000e-01 +2.76000000000000e+00 -5.95507267310000e-01 +2.77000000000000e+00 -5.93900445880000e-01 +2.78000000000000e+00 -5.92280407750000e-01 +2.79000000000000e+00 -5.90647481330000e-01 +2.80000000000000e+00 -5.89001990720000e-01 +2.81000000000000e+00 -5.87344255780000e-01 +2.82000000000000e+00 -5.85674592100000e-01 +2.83000000000000e+00 -5.83993311120000e-01 +2.84000000000000e+00 -5.82300720120000e-01 +2.85000000000000e+00 -5.80597122310000e-01 +2.86000000000000e+00 -5.78882816840000e-01 +2.87000000000000e+00 -5.77158098830000e-01 +2.88000000000000e+00 -5.75423259460000e-01 +2.89000000000000e+00 -5.73678585990000e-01 +2.90000000000000e+00 -5.71924361780000e-01 +2.91000000000000e+00 -5.70160866350000e-01 +2.92000000000000e+00 -5.68388375420000e-01 +2.93000000000000e+00 -5.66607160970000e-01 +2.94000000000000e+00 -5.64817491230000e-01 +2.95000000000000e+00 -5.63019630750000e-01 +2.96000000000000e+00 -5.61213840460000e-01 +2.97000000000000e+00 -5.59400377670000e-01 +2.98000000000000e+00 -5.57579496120000e-01 +2.99000000000000e+00 -5.55751446010000e-01 +3.00000000000000e+00 -5.53916474080000e-01 +3.01000000000000e+00 -5.52074823580000e-01 +3.02000000000000e+00 -5.50226734360000e-01 +3.03000000000000e+00 -5.48372442880000e-01 +3.04000000000000e+00 -5.46512182250000e-01 +3.05000000000000e+00 -5.44646182270000e-01 +3.06000000000000e+00 -5.42774669450000e-01 +3.07000000000000e+00 -5.40897867070000e-01 +3.08000000000000e+00 -5.39015995200000e-01 +3.09000000000000e+00 -5.37129270710000e-01 +3.10000000000000e+00 -5.35237907360000e-01 +3.11000000000000e+00 -5.33342115760000e-01 +3.12000000000000e+00 -5.31442103480000e-01 +3.13000000000000e+00 -5.29538075010000e-01 +3.14000000000000e+00 -5.27630231850000e-01 +3.15000000000000e+00 -5.25718772510000e-01 +3.16000000000000e+00 -5.23803892530000e-01 +3.17000000000000e+00 -5.21885784550000e-01 +3.18000000000000e+00 -5.19964638320000e-01 +3.19000000000000e+00 -5.18040640700000e-01 +3.20000000000000e+00 -5.16113975760000e-01 +3.21000000000000e+00 -5.14184824730000e-01 +3.22000000000000e+00 -5.12253366090000e-01 +3.23000000000000e+00 -5.10319775580000e-01 +3.24000000000000e+00 -5.08384226210000e-01 +3.25000000000000e+00 -5.06446888310000e-01 +3.26000000000000e+00 -5.04507929540000e-01 +3.27000000000000e+00 -5.02567514960000e-01 +3.28000000000000e+00 -5.00625807000000e-01 +3.29000000000000e+00 -4.98682965520000e-01 +3.30000000000000e+00 -4.96739147830000e-01 +3.31000000000000e+00 -4.94794508740000e-01 +3.32000000000000e+00 -4.92849200520000e-01 +3.33000000000000e+00 -4.90903373020000e-01 +3.34000000000000e+00 -4.88957173620000e-01 +3.35000000000000e+00 -4.87010747280000e-01 +3.36000000000000e+00 -4.85064236580000e-01 +3.37000000000000e+00 -4.83117781730000e-01 +3.38000000000000e+00 -4.81171520610000e-01 +3.39000000000000e+00 -4.79225588760000e-01 +3.40000000000000e+00 -4.77280119470000e-01 +3.41000000000000e+00 -4.75335243720000e-01 +3.42000000000000e+00 -4.73391090270000e-01 +3.43000000000000e+00 -4.71447785670000e-01 +3.44000000000000e+00 -4.69505454260000e-01 +3.45000000000000e+00 -4.67564218210000e-01 +3.46000000000000e+00 -4.65624197570000e-01 +3.47000000000000e+00 -4.63685510240000e-01 +3.48000000000000e+00 -4.61748272040000e-01 +3.49000000000000e+00 -4.59812596700000e-01 +3.50000000000000e+00 -4.57878595910000e-01 +3.51000000000000e+00 -4.55946379320000e-01 +3.52000000000000e+00 -4.54016054580000e-01 +3.53000000000000e+00 -4.52087727350000e-01 +3.54000000000000e+00 -4.50161501340000e-01 +3.55000000000000e+00 -4.48237478310000e-01 +3.56000000000000e+00 -4.46315758110000e-01 +3.57000000000000e+00 -4.44396438680000e-01 +3.58000000000000e+00 -4.42479616110000e-01 +3.59000000000000e+00 -4.40565384610000e-01 +3.60000000000000e+00 -4.38653836580000e-01 +3.61000000000000e+00 -4.36745062620000e-01 +3.62000000000000e+00 -4.34839151510000e-01 +3.63000000000000e+00 -4.32936190280000e-01 +3.64000000000000e+00 -4.31036264230000e-01 +3.65000000000000e+00 -4.29139456920000e-01 +3.66000000000000e+00 -4.27245850190000e-01 +3.67000000000000e+00 -4.25355524240000e-01 +3.68000000000000e+00 -4.23468557550000e-01 +3.69000000000000e+00 -4.21585027020000e-01 +3.70000000000000e+00 -4.19705007870000e-01 +3.71000000000000e+00 -4.17828573760000e-01 +3.72000000000000e+00 -4.15955796740000e-01 +3.73000000000000e+00 -4.14086747320000e-01 +3.74000000000000e+00 -4.12221494460000e-01 +3.75000000000000e+00 -4.10360105570000e-01 +3.76000000000000e+00 -4.08502646600000e-01 +3.77000000000000e+00 -4.06649181980000e-01 +3.78000000000000e+00 -4.04799774710000e-01 +3.79000000000000e+00 -4.02954486300000e-01 +3.80000000000000e+00 -4.01113376860000e-01 +3.81000000000000e+00 -3.99276505100000e-01 +3.82000000000000e+00 -3.97443928320000e-01 +3.83000000000000e+00 -3.95615702450000e-01 +3.84000000000000e+00 -3.93791882070000e-01 +3.85000000000000e+00 -3.91972520450000e-01 +3.86000000000000e+00 -3.90157669490000e-01 +3.87000000000000e+00 -3.88347379850000e-01 +3.88000000000000e+00 -3.86541700870000e-01 +3.89000000000000e+00 -3.84740680630000e-01 +3.90000000000000e+00 -3.82944366000000e-01 +3.91000000000000e+00 -3.81152802570000e-01 +3.92000000000000e+00 -3.79366034760000e-01 +3.93000000000000e+00 -3.77584105780000e-01 +3.94000000000000e+00 -3.75807057660000e-01 +3.95000000000000e+00 -3.74034931290000e-01 +3.96000000000000e+00 -3.72267766400000e-01 +3.97000000000000e+00 -3.70505601600000e-01 +3.98000000000000e+00 -3.68748474380000e-01 +3.99000000000000e+00 -3.66996421170000e-01 +4.00000000000000e+00 -3.65249477280000e-01 +4.01000000000000e+00 -3.63507677000000e-01 +4.02000000000000e+00 -3.61771053540000e-01 +4.03000000000000e+00 -3.60039639110000e-01 +4.04000000000000e+00 -3.58313464900000e-01 +4.05000000000000e+00 -3.56592561090000e-01 +4.06000000000000e+00 -3.54876956900000e-01 +4.07000000000000e+00 -3.53166680560000e-01 +4.08000000000000e+00 -3.51461759360000e-01 +4.09000000000000e+00 -3.49762219660000e-01 +4.10000000000000e+00 -3.48068086900000e-01 +4.11000000000000e+00 -3.46379385590000e-01 +4.12000000000000e+00 -3.44696139380000e-01 +4.13000000000000e+00 -3.43018371030000e-01 +4.14000000000000e+00 -3.41346102420000e-01 +4.15000000000000e+00 -3.39679354610000e-01 +4.16000000000000e+00 -3.38018147800000e-01 +4.17000000000000e+00 -3.36362501390000e-01 +4.18000000000000e+00 -3.34712433960000e-01 +4.19000000000000e+00 -3.33067963300000e-01 +4.20000000000000e+00 -3.31429106420000e-01 +4.21000000000000e+00 -3.29795879560000e-01 +4.22000000000000e+00 -3.28168298210000e-01 +4.23000000000000e+00 -3.26546377110000e-01 +4.24000000000000e+00 -3.24930130290000e-01 +4.25000000000000e+00 -3.23319571060000e-01 +4.26000000000000e+00 -3.21714712010000e-01 +4.27000000000000e+00 -3.20115565060000e-01 +4.28000000000000e+00 -3.18522141450000e-01 +4.29000000000000e+00 -3.16934451740000e-01 +4.30000000000000e+00 -3.15352505850000e-01 +4.31000000000000e+00 -3.13776313050000e-01 +4.32000000000000e+00 -3.12205881990000e-01 +4.33000000000000e+00 -3.10641220690000e-01 +4.34000000000000e+00 -3.09082336580000e-01 +4.35000000000000e+00 -3.07529236480000e-01 +4.36000000000000e+00 -3.05981926620000e-01 +4.37000000000000e+00 -3.04440412670000e-01 +4.38000000000000e+00 -3.02904699740000e-01 +4.39000000000000e+00 -3.01374792370000e-01 +4.40000000000000e+00 -2.99850694590000e-01 +4.41000000000000e+00 -2.98332409850000e-01 +4.42000000000000e+00 -2.96819941130000e-01 +4.43000000000000e+00 -2.95313290880000e-01 +4.44000000000000e+00 -2.93812461040000e-01 +4.45000000000000e+00 -2.92317453060000e-01 +4.46000000000000e+00 -2.90828267940000e-01 +4.47000000000000e+00 -2.89344906180000e-01 +4.48000000000000e+00 -2.87867367810000e-01 +4.49000000000000e+00 -2.86395652450000e-01 +4.50000000000000e+00 -2.84929759230000e-01 +4.51000000000000e+00 -2.83469686870000e-01 +4.52000000000000e+00 -2.82015433680000e-01 +4.53000000000000e+00 -2.80566997520000e-01 +4.54000000000000e+00 -2.79124375870000e-01 +4.55000000000000e+00 -2.77687565800000e-01 +4.56000000000000e+00 -2.76256564000000e-01 +4.57000000000000e+00 -2.74831366760000e-01 +4.58000000000000e+00 -2.73411970000000e-01 +4.59000000000000e+00 -2.71998369310000e-01 +4.60000000000000e+00 -2.70590559870000e-01 +4.61000000000000e+00 -2.69188536540000e-01 +4.62000000000000e+00 -2.67792293850000e-01 +4.63000000000000e+00 -2.66401825960000e-01 +4.64000000000000e+00 -2.65017126740000e-01 +4.65000000000000e+00 -2.63638189710000e-01 +4.66000000000000e+00 -2.62265008110000e-01 +4.67000000000000e+00 -2.60897574840000e-01 +4.68000000000000e+00 -2.59535882520000e-01 +4.69000000000000e+00 -2.58179923500000e-01 +4.70000000000000e+00 -2.56829689800000e-01 +4.71000000000000e+00 -2.55485173210000e-01 +4.72000000000000e+00 -2.54146365210000e-01 +4.73000000000000e+00 -2.52813257040000e-01 +4.74000000000000e+00 -2.51485839670000e-01 +4.75000000000000e+00 -2.50164103830000e-01 +4.76000000000000e+00 -2.48848039990000e-01 +4.77000000000000e+00 -2.47537638400000e-01 +4.78000000000000e+00 -2.46232889050000e-01 +4.79000000000000e+00 -2.44933781720000e-01 +4.80000000000000e+00 -2.43640305970000e-01 +4.81000000000000e+00 -2.42352451130000e-01 +4.82000000000000e+00 -2.41070206340000e-01 +4.83000000000000e+00 -2.39793560510000e-01 +4.84000000000000e+00 -2.38522502360000e-01 +4.85000000000000e+00 -2.37257020430000e-01 +4.86000000000000e+00 -2.35997103050000e-01 +4.87000000000000e+00 -2.34742738370000e-01 +4.88000000000000e+00 -2.33493914370000e-01 +4.89000000000000e+00 -2.32250618840000e-01 +4.90000000000000e+00 -2.31012839410000e-01 +4.91000000000000e+00 -2.29780563540000e-01 +4.92000000000000e+00 -2.28553778540000e-01 +4.93000000000000e+00 -2.27332471560000e-01 +4.94000000000000e+00 -2.26116629570000e-01 +4.95000000000000e+00 -2.24906239450000e-01 +4.96000000000000e+00 -2.23701287870000e-01 +4.97000000000000e+00 -2.22501761420000e-01 +4.98000000000000e+00 -2.21307646510000e-01 +4.99000000000000e+00 -2.20118929460000e-01 +5.00000000000000e+00 -2.18935596420000e-01 +5.01000000000000e+00 -2.17757633450000e-01 +5.02000000000000e+00 -2.16585026480000e-01 +5.03000000000000e+00 -2.15417761320000e-01 +5.04000000000000e+00 -2.14255823680000e-01 +5.05000000000000e+00 -2.13099199140000e-01 +5.06000000000000e+00 -2.11947873190000e-01 +5.07000000000000e+00 -2.10801831230000e-01 +5.08000000000000e+00 -2.09661058540000e-01 +5.09000000000000e+00 -2.08525540320000e-01 +5.10000000000000e+00 -2.07395261670000e-01 +5.11000000000000e+00 -2.06270207600000e-01 +5.12000000000000e+00 -2.05150363050000e-01 +5.13000000000000e+00 -2.04035712850000e-01 +5.14000000000000e+00 -2.02926241790000e-01 +5.15000000000000e+00 -2.01821934540000e-01 +5.16000000000000e+00 -2.00722775730000e-01 +5.17000000000000e+00 -1.99628749900000e-01 +5.18000000000000e+00 -1.98539841530000e-01 +5.19000000000000e+00 -1.97456035040000e-01 +5.20000000000000e+00 -1.96377314780000e-01 +5.21000000000000e+00 -1.95303665030000e-01 +5.22000000000000e+00 -1.94235070030000e-01 +5.23000000000000e+00 -1.93171513950000e-01 +5.24000000000000e+00 -1.92112980930000e-01 +5.25000000000000e+00 -1.91059455030000e-01 +5.26000000000000e+00 -1.90010920270000e-01 +5.27000000000000e+00 -1.88967360640000e-01 +5.28000000000000e+00 -1.87928760070000e-01 +5.29000000000000e+00 -1.86895102460000e-01 +5.30000000000000e+00 -1.85866371660000e-01 +5.31000000000000e+00 -1.84842551480000e-01 +5.32000000000000e+00 -1.83823625700000e-01 +5.33000000000000e+00 -1.82809578080000e-01 +5.34000000000000e+00 -1.81800392320000e-01 +5.35000000000000e+00 -1.80796052100000e-01 +5.36000000000000e+00 -1.79796541100000e-01 +5.37000000000000e+00 -1.78801842920000e-01 +5.38000000000000e+00 -1.77811941190000e-01 +5.39000000000000e+00 -1.76826819480000e-01 +5.40000000000000e+00 -1.75846461360000e-01 +5.41000000000000e+00 -1.74870850360000e-01 +5.42000000000000e+00 -1.73899970000000e-01 +5.43000000000000e+00 -1.72933803800000e-01 +5.44000000000000e+00 -1.71972335240000e-01 +5.45000000000000e+00 -1.71015547810000e-01 +5.46000000000000e+00 -1.70063424960000e-01 +5.47000000000000e+00 -1.69115950160000e-01 +5.48000000000000e+00 -1.68173106840000e-01 +5.49000000000000e+00 -1.67234878450000e-01 +5.50000000000000e+00 -1.66301248410000e-01 +5.51000000000000e+00 -1.65372200150000e-01 +5.52000000000000e+00 -1.64447717090000e-01 +5.53000000000000e+00 -1.63527782640000e-01 +5.54000000000000e+00 -1.62612380230000e-01 +5.55000000000000e+00 -1.61701493260000e-01 +5.56000000000000e+00 -1.60795105160000e-01 +5.57000000000000e+00 -1.59893199330000e-01 +5.58000000000000e+00 -1.58995759200000e-01 +5.59000000000000e+00 -1.58102768190000e-01 +5.60000000000000e+00 -1.57214209720000e-01 +5.61000000000000e+00 -1.56330067240000e-01 +5.62000000000000e+00 -1.55450324170000e-01 +5.63000000000000e+00 -1.54574963960000e-01 +5.64000000000000e+00 -1.53703970070000e-01 +5.65000000000000e+00 -1.52837325970000e-01 +5.66000000000000e+00 -1.51975015120000e-01 +5.67000000000000e+00 -1.51117021020000e-01 +5.68000000000000e+00 -1.50263327160000e-01 +5.69000000000000e+00 -1.49413917040000e-01 +5.70000000000000e+00 -1.48568774200000e-01 +5.71000000000000e+00 -1.47727882170000e-01 +5.72000000000000e+00 -1.46891224510000e-01 +5.73000000000000e+00 -1.46058784780000e-01 +5.74000000000000e+00 -1.45230546560000e-01 +5.75000000000000e+00 -1.44406493460000e-01 +5.76000000000000e+00 -1.43586609090000e-01 +5.77000000000000e+00 -1.42770877100000e-01 +5.78000000000000e+00 -1.41959281150000e-01 +5.79000000000000e+00 -1.41151804900000e-01 +5.80000000000000e+00 -1.40348432060000e-01 +5.81000000000000e+00 -1.39549146340000e-01 +5.82000000000000e+00 -1.38753931480000e-01 +5.83000000000000e+00 -1.37962771250000e-01 +5.84000000000000e+00 -1.37175649420000e-01 +5.85000000000000e+00 -1.36392549810000e-01 +5.86000000000000e+00 -1.35613456240000e-01 +5.87000000000000e+00 -1.34838352580000e-01 +5.88000000000000e+00 -1.34067222700000e-01 +5.89000000000000e+00 -1.33300050500000e-01 +5.90000000000000e+00 -1.32536819920000e-01 +5.91000000000000e+00 -1.31777514900000e-01 +5.92000000000000e+00 -1.31022119450000e-01 +5.93000000000000e+00 -1.30270617560000e-01 +5.94000000000000e+00 -1.29522993270000e-01 +5.95000000000000e+00 -1.28779230650000e-01 +5.96000000000000e+00 -1.28039313790000e-01 +5.97000000000000e+00 -1.27303226820000e-01 +5.98000000000000e+00 -1.26570953880000e-01 +5.99000000000000e+00 -1.25842479150000e-01 +6.00000000000000e+00 -1.25117786850000e-01 +6.01000000000000e+00 -1.24396861220000e-01 +6.02000000000000e+00 -1.23679686520000e-01 +6.03000000000000e+00 -1.22966247060000e-01 +6.04000000000000e+00 -1.22256527170000e-01 +6.05000000000000e+00 -1.21550511210000e-01 +6.06000000000000e+00 -1.20848183590000e-01 +6.07000000000000e+00 -1.20149528720000e-01 +6.08000000000000e+00 -1.19454531070000e-01 +6.09000000000000e+00 -1.18763175130000e-01 +6.10000000000000e+00 -1.18075445430000e-01 +6.11000000000000e+00 -1.17391326530000e-01 +6.12000000000000e+00 -1.16710803020000e-01 +6.13000000000000e+00 -1.16033859520000e-01 +6.14000000000000e+00 -1.15360480690000e-01 +6.15000000000000e+00 -1.14690651240000e-01 +6.16000000000000e+00 -1.14024355880000e-01 +6.17000000000000e+00 -1.13361579380000e-01 +6.18000000000000e+00 -1.12702306550000e-01 +6.19000000000000e+00 -1.12046522210000e-01 +6.20000000000000e+00 -1.11394211240000e-01 +6.21000000000000e+00 -1.10745358530000e-01 +6.22000000000000e+00 -1.10099949040000e-01 +6.23000000000000e+00 -1.09457967730000e-01 +6.24000000000000e+00 -1.08819399610000e-01 +6.25000000000000e+00 -1.08184229750000e-01 +6.26000000000000e+00 -1.07552443220000e-01 +6.27000000000000e+00 -1.06924025150000e-01 +6.28000000000000e+00 -1.06298960700000e-01 +6.29000000000000e+00 -1.05677235060000e-01 +6.30000000000000e+00 -1.05058833460000e-01 +6.31000000000000e+00 -1.04443741190000e-01 +6.32000000000000e+00 -1.03831943550000e-01 +6.33000000000000e+00 -1.03223425880000e-01 +6.34000000000000e+00 -1.02618173570000e-01 +6.35000000000000e+00 -1.02016172050000e-01 +6.36000000000000e+00 -1.01417406780000e-01 +6.37000000000000e+00 -1.00821863250000e-01 +6.38000000000000e+00 -1.00229527010000e-01 +6.39000000000000e+00 -9.96403836280000e-02 +6.40000000000000e+00 -9.90544187270000e-02 +6.41000000000000e+00 -9.84716179590000e-02 +6.42000000000000e+00 -9.78919670190000e-02 +6.43000000000000e+00 -9.73154516410000e-02 +6.44000000000000e+00 -9.67420575960000e-02 +6.45000000000000e+00 -9.61717706970000e-02 +6.46000000000000e+00 -9.56045767970000e-02 +6.47000000000000e+00 -9.50404617850000e-02 +6.48000000000000e+00 -9.44794115940000e-02 +6.49000000000000e+00 -9.39214121950000e-02 +6.50000000000000e+00 -9.33664495980000e-02 +6.51000000000000e+00 -9.28145098550000e-02 +6.52000000000000e+00 -9.22655790580000e-02 +6.53000000000000e+00 -9.17196433380000e-02 +6.54000000000000e+00 -9.11766888660000e-02 +6.55000000000000e+00 -9.06367018570000e-02 +6.56000000000000e+00 -9.00996685620000e-02 +6.57000000000000e+00 -8.95655752760000e-02 +6.58000000000000e+00 -8.90344083330000e-02 +6.59000000000000e+00 -8.85061541090000e-02 +6.60000000000000e+00 -8.79807990190000e-02 +6.61000000000000e+00 -8.74583295210000e-02 +6.62000000000000e+00 -8.69387321120000e-02 +6.63000000000000e+00 -8.64219933340000e-02 +6.64000000000000e+00 -8.59080997650000e-02 +6.65000000000000e+00 -8.53970380280000e-02 +6.66000000000000e+00 -8.48887947850000e-02 +6.67000000000000e+00 -8.43833567420000e-02 +6.68000000000000e+00 -8.38807106430000e-02 +6.69000000000000e+00 -8.33808432770000e-02 +6.70000000000000e+00 -8.28837414730000e-02 +6.71000000000000e+00 -8.23893921000000e-02 +6.72000000000000e+00 -8.18977820720000e-02 +6.73000000000000e+00 -8.14088983410000e-02 +6.74000000000000e+00 -8.09227279050000e-02 +6.75000000000000e+00 -8.04392577990000e-02 +6.76000000000000e+00 -7.99584751050000e-02 +6.77000000000000e+00 -7.94803669410000e-02 +6.78000000000000e+00 -7.90049204730000e-02 +6.79000000000000e+00 -7.85321229060000e-02 +6.80000000000000e+00 -7.80619614850000e-02 +6.81000000000000e+00 -7.75944235010000e-02 +6.82000000000000e+00 -7.71294962850000e-02 +6.83000000000000e+00 -7.66671672100000e-02 +6.84000000000000e+00 -7.62074236930000e-02 +6.85000000000000e+00 -7.57502531900000e-02 +6.86000000000000e+00 -7.52956432010000e-02 +6.87000000000000e+00 -7.48435812700000e-02 +6.88000000000000e+00 -7.43940549800000e-02 +6.89000000000000e+00 -7.39470519580000e-02 +6.90000000000000e+00 -7.35025598740000e-02 +6.91000000000000e+00 -7.30605664380000e-02 +6.92000000000000e+00 -7.26210594040000e-02 +6.93000000000000e+00 -7.21840265690000e-02 +6.94000000000000e+00 -7.17494557710000e-02 +6.95000000000000e+00 -7.13173348900000e-02 +6.96000000000000e+00 -7.08876518510000e-02 +6.97000000000000e+00 -7.04603946180000e-02 +6.98000000000000e+00 -7.00355511990000e-02 +6.99000000000000e+00 -6.96131096460000e-02 +7.00000000000000e+00 -6.91930580510000e-02 +7.01000000000000e+00 -6.87753845500000e-02 +7.02000000000000e+00 -6.83600773190000e-02 +7.03000000000000e+00 -6.79471245800000e-02 +7.04000000000000e+00 -6.75365145950000e-02 +7.05000000000000e+00 -6.71282356690000e-02 +7.06000000000000e+00 -6.67222761500000e-02 +7.07000000000000e+00 -6.63186244270000e-02 +7.08000000000000e+00 -6.59172689330000e-02 +7.09000000000000e+00 -6.55181981430000e-02 +7.10000000000000e+00 -6.51214005730000e-02 +7.11000000000000e+00 -6.47268647840000e-02 +7.12000000000000e+00 -6.43345793770000e-02 +7.13000000000000e+00 -6.39445329970000e-02 +7.14000000000000e+00 -6.35567143290000e-02 +7.15000000000000e+00 -6.31711121040000e-02 +7.16000000000000e+00 -6.27877150930000e-02 +7.17000000000000e+00 -6.24065121080000e-02 +7.18000000000000e+00 -6.20274920060000e-02 +7.19000000000000e+00 -6.16506436860000e-02 +7.20000000000000e+00 -6.12759560860000e-02 +7.21000000000000e+00 -6.09034181910000e-02 +7.22000000000000e+00 -6.05330190240000e-02 +7.23000000000000e+00 -6.01647476530000e-02 +7.24000000000000e+00 -5.97985931860000e-02 +7.25000000000000e+00 -5.94345447750000e-02 +7.26000000000000e+00 -5.90725916130000e-02 +7.27000000000000e+00 -5.87127229360000e-02 +7.28000000000000e+00 -5.83549280190000e-02 +7.29000000000000e+00 -5.79991961830000e-02 +7.30000000000000e+00 -5.76455167890000e-02 +7.31000000000000e+00 -5.72938792400000e-02 +7.32000000000000e+00 -5.69442729810000e-02 +7.33000000000000e+00 -5.65966874970000e-02 +7.34000000000000e+00 -5.62511123190000e-02 +7.35000000000000e+00 -5.59075370160000e-02 +7.36000000000000e+00 -5.55659512000000e-02 +7.37000000000000e+00 -5.52263445250000e-02 +7.38000000000000e+00 -5.48887066860000e-02 +7.39000000000000e+00 -5.45530274190000e-02 +7.40000000000000e+00 -5.42192965030000e-02 +7.41000000000000e+00 -5.38875037580000e-02 +7.42000000000000e+00 -5.35576390440000e-02 +7.43000000000000e+00 -5.32296922650000e-02 +7.44000000000000e+00 -5.29036533640000e-02 +7.45000000000000e+00 -5.25795123250000e-02 +7.46000000000000e+00 -5.22572591770000e-02 +7.47000000000000e+00 -5.19368839850000e-02 +7.48000000000000e+00 -5.16183768580000e-02 +7.49000000000000e+00 -5.13017279460000e-02 +7.50000000000000e+00 -5.09869274400000e-02 +7.51000000000000e+00 -5.06739655710000e-02 +7.52000000000000e+00 -5.03628326100000e-02 +7.53000000000000e+00 -5.00535188720000e-02 +7.54000000000000e+00 -4.97460147100000e-02 +7.55000000000000e+00 -4.94403105180000e-02 +7.56000000000000e+00 -4.91363967320000e-02 +7.57000000000000e+00 -4.88342638270000e-02 +7.58000000000000e+00 -4.85339023200000e-02 +7.59000000000000e+00 -4.82353027660000e-02 +7.60000000000000e+00 -4.79384557630000e-02 +7.61000000000000e+00 -4.76433519470000e-02 +7.62000000000000e+00 -4.73499819970000e-02 +7.63000000000000e+00 -4.70583366290000e-02 +7.64000000000000e+00 -4.67684066010000e-02 +7.65000000000000e+00 -4.64801827100000e-02 +7.66000000000000e+00 -4.61936557940000e-02 +7.67000000000000e+00 -4.59088167300000e-02 +7.68000000000000e+00 -4.56256564340000e-02 +7.69000000000000e+00 -4.53441658640000e-02 +7.70000000000000e+00 -4.50643360160000e-02 +7.71000000000000e+00 -4.47861579250000e-02 +7.72000000000000e+00 -4.45096226660000e-02 +7.73000000000000e+00 -4.42347213540000e-02 +7.74000000000000e+00 -4.39614451430000e-02 +7.75000000000000e+00 -4.36897852260000e-02 +7.76000000000000e+00 -4.34197328350000e-02 +7.77000000000000e+00 -4.31512792410000e-02 +7.78000000000000e+00 -4.28844157530000e-02 +7.79000000000000e+00 -4.26191337220000e-02 +7.80000000000000e+00 -4.23554245350000e-02 +7.81000000000000e+00 -4.20932796180000e-02 +7.82000000000000e+00 -4.18326904360000e-02 +7.83000000000000e+00 -4.15736484930000e-02 +7.84000000000000e+00 -4.13161453310000e-02 +7.85000000000000e+00 -4.10601725300000e-02 +7.86000000000000e+00 -4.08057217080000e-02 +7.87000000000000e+00 -4.05527845230000e-02 +7.88000000000000e+00 -4.03013526680000e-02 +7.89000000000000e+00 -4.00514178780000e-02 +7.90000000000000e+00 -3.98029719220000e-02 +7.91000000000000e+00 -3.95560066090000e-02 +7.92000000000000e+00 -3.93105137850000e-02 +7.93000000000000e+00 -3.90664853330000e-02 +7.94000000000000e+00 -3.88239131760000e-02 +7.95000000000000e+00 -3.85827892710000e-02 +7.96000000000000e+00 -3.83431056140000e-02 +7.97000000000000e+00 -3.81048542390000e-02 +7.98000000000000e+00 -3.78680272160000e-02 +7.99000000000000e+00 -3.76326166510000e-02 +8.00000000000000e+00 -3.73986146910000e-02 +8.01000000000000e+00 -3.71660135140000e-02 +8.02000000000000e+00 -3.69348053400000e-02 +8.03000000000000e+00 -3.67049824220000e-02 +8.04000000000000e+00 -3.64765370510000e-02 +8.05000000000000e+00 -3.62494615550000e-02 +8.06000000000000e+00 -3.60237482970000e-02 +8.07000000000000e+00 -3.57993896770000e-02 +8.08000000000000e+00 -3.55763781310000e-02 +8.09000000000000e+00 -3.53547061310000e-02 +8.10000000000000e+00 -3.51343661850000e-02 +8.11000000000000e+00 -3.49153508360000e-02 +8.12000000000000e+00 -3.46976526640000e-02 +8.13000000000000e+00 -3.44812642840000e-02 +8.14000000000000e+00 -3.42661783450000e-02 +8.15000000000000e+00 -3.40523875350000e-02 +8.16000000000000e+00 -3.38398845740000e-02 +8.17000000000000e+00 -3.36286622180000e-02 +8.18000000000000e+00 -3.34187132580000e-02 +8.19000000000000e+00 -3.32100305210000e-02 +8.20000000000000e+00 -3.30026068680000e-02 +8.21000000000000e+00 -3.27964351950000e-02 +8.22000000000000e+00 -3.25915084320000e-02 +8.23000000000000e+00 -3.23878195440000e-02 +8.24000000000000e+00 -3.21853615310000e-02 +8.25000000000000e+00 -3.19841274260000e-02 +8.26000000000000e+00 -3.17841102960000e-02 +8.27000000000000e+00 -3.15853032450000e-02 +8.28000000000000e+00 -3.13876994080000e-02 +8.29000000000000e+00 -3.11912919550000e-02 +8.30000000000000e+00 -3.09960740880000e-02 +8.31000000000000e+00 -3.08020390460000e-02 +8.32000000000000e+00 -3.06091800990000e-02 +8.33000000000000e+00 -3.04174905520000e-02 +8.34000000000000e+00 -3.02269637410000e-02 +8.35000000000000e+00 -3.00375930370000e-02 +8.36000000000000e+00 -2.98493718440000e-02 +8.37000000000000e+00 -2.96622935980000e-02 +8.38000000000000e+00 -2.94763517690000e-02 +8.39000000000000e+00 -2.92915398600000e-02 +8.40000000000000e+00 -2.91078514040000e-02 +8.41000000000000e+00 -2.89252799700000e-02 +8.42000000000000e+00 -2.87438191570000e-02 +8.43000000000000e+00 -2.85634625970000e-02 +8.44000000000000e+00 -2.83842039550000e-02 +8.45000000000000e+00 -2.82060369260000e-02 +8.46000000000000e+00 -2.80289552390000e-02 +8.47000000000000e+00 -2.78529526530000e-02 +8.48000000000000e+00 -2.76780229610000e-02 +8.49000000000000e+00 -2.75041599860000e-02 +8.50000000000000e+00 -2.73313575830000e-02 +8.51000000000000e+00 -2.71596096380000e-02 +8.52000000000000e+00 -2.69889100680000e-02 +8.53000000000000e+00 -2.68192528220000e-02 +8.54000000000000e+00 -2.66506318800000e-02 +8.55000000000000e+00 -2.64830412510000e-02 +8.56000000000000e+00 -2.63164749780000e-02 +8.57000000000000e+00 -2.61509271320000e-02 +8.58000000000000e+00 -2.59863918160000e-02 +8.59000000000000e+00 -2.58228631630000e-02 +8.60000000000000e+00 -2.56603353360000e-02 +8.61000000000000e+00 -2.54988025290000e-02 +8.62000000000000e+00 -2.53382589650000e-02 +8.63000000000000e+00 -2.51786988980000e-02 +8.64000000000000e+00 -2.50201166110000e-02 +8.65000000000000e+00 -2.48625064180000e-02 +8.66000000000000e+00 -2.47058626610000e-02 +8.67000000000000e+00 -2.45501797140000e-02 +8.68000000000000e+00 -2.43954519770000e-02 +8.69000000000000e+00 -2.42416738810000e-02 +8.70000000000000e+00 -2.40888398880000e-02 +8.71000000000000e+00 -2.39369444860000e-02 +8.72000000000000e+00 -2.37859821940000e-02 +8.73000000000000e+00 -2.36359475580000e-02 +8.74000000000000e+00 -2.34868351550000e-02 +8.75000000000000e+00 -2.33386395880000e-02 +8.76000000000000e+00 -2.31913554920000e-02 +8.77000000000000e+00 -2.30449775260000e-02 +8.78000000000000e+00 -2.28995003810000e-02 +8.79000000000000e+00 -2.27549187730000e-02 +8.80000000000000e+00 -2.26112274500000e-02 +8.81000000000000e+00 -2.24684211840000e-02 +8.82000000000000e+00 -2.23264947760000e-02 +8.83000000000000e+00 -2.21854430560000e-02 +8.84000000000000e+00 -2.20452608790000e-02 +8.85000000000000e+00 -2.19059431310000e-02 +8.86000000000000e+00 -2.17674847230000e-02 +8.87000000000000e+00 -2.16298805920000e-02 +8.88000000000000e+00 -2.14931257060000e-02 +8.89000000000000e+00 -2.13572150550000e-02 +8.90000000000000e+00 -2.12221436600000e-02 +8.91000000000000e+00 -2.10879065680000e-02 +8.92000000000000e+00 -2.09544988500000e-02 +8.93000000000000e+00 -2.08219156070000e-02 +8.94000000000000e+00 -2.06901519640000e-02 +8.95000000000000e+00 -2.05592030740000e-02 +8.96000000000000e+00 -2.04290641150000e-02 +8.97000000000000e+00 -2.02997302910000e-02 +8.98000000000000e+00 -2.01711968320000e-02 +8.99000000000000e+00 -2.00434589950000e-02 +9.00000000000000e+00 -1.99165120630000e-02 +9.01000000000000e+00 -1.97903513420000e-02 +9.02000000000000e+00 -1.96649721650000e-02 +9.03000000000000e+00 -1.95403698920000e-02 +9.04000000000000e+00 -1.94165399060000e-02 +9.05000000000000e+00 -1.92934776150000e-02 +9.06000000000000e+00 -1.91711784550000e-02 +9.07000000000000e+00 -1.90496378840000e-02 +9.08000000000000e+00 -1.89288513850000e-02 +9.09000000000000e+00 -1.88088144690000e-02 +9.10000000000000e+00 -1.86895226670000e-02 +9.11000000000000e+00 -1.85709715370000e-02 +9.12000000000000e+00 -1.84531566620000e-02 +9.13000000000000e+00 -1.83360736480000e-02 +9.14000000000000e+00 -1.82197181260000e-02 +9.15000000000000e+00 -1.81040857500000e-02 +9.16000000000000e+00 -1.79891721980000e-02 +9.17000000000000e+00 -1.78749731750000e-02 +9.18000000000000e+00 -1.77614844040000e-02 +9.19000000000000e+00 -1.76487016370000e-02 +9.20000000000000e+00 -1.75366206470000e-02 +9.21000000000000e+00 -1.74252372310000e-02 +9.22000000000000e+00 -1.73145472080000e-02 +9.23000000000000e+00 -1.72045464220000e-02 +9.24000000000000e+00 -1.70952307400000e-02 +9.25000000000000e+00 -1.69865960510000e-02 +9.26000000000000e+00 -1.68786382660000e-02 +9.27000000000000e+00 -1.67713533210000e-02 +9.28000000000000e+00 -1.66647371750000e-02 +9.29000000000000e+00 -1.65587858060000e-02 +9.30000000000000e+00 -1.64534952180000e-02 +9.31000000000000e+00 -1.63488614370000e-02 +9.32000000000000e+00 -1.62448805080000e-02 +9.33000000000000e+00 -1.61415485030000e-02 +9.34000000000000e+00 -1.60388615110000e-02 +9.35000000000000e+00 -1.59368156470000e-02 +9.36000000000000e+00 -1.58354070460000e-02 +9.37000000000000e+00 -1.57346318660000e-02 +9.38000000000000e+00 -1.56344862840000e-02 +9.39000000000000e+00 -1.55349665010000e-02 +9.40000000000000e+00 -1.54360687370000e-02 +9.41000000000000e+00 -1.53377892350000e-02 +9.42000000000000e+00 -1.52401242590000e-02 +9.43000000000000e+00 -1.51430700950000e-02 +9.44000000000000e+00 -1.50466230480000e-02 +9.45000000000000e+00 -1.49507794440000e-02 +9.46000000000000e+00 -1.48555356330000e-02 +9.47000000000000e+00 -1.47608879820000e-02 +9.48000000000000e+00 -1.46668328780000e-02 +9.49000000000000e+00 -1.45733667310000e-02 +9.50000000000000e+00 -1.44804859730000e-02 +9.51000000000000e+00 -1.43881870550000e-02 +9.52000000000000e+00 -1.42964664480000e-02 +9.53000000000000e+00 -1.42053206420000e-02 +9.54000000000000e+00 -1.41147461480000e-02 +9.55000000000000e+00 -1.40247394970000e-02 +9.56000000000000e+00 -1.39352972390000e-02 +9.57000000000000e+00 -1.38464159450000e-02 +9.58000000000000e+00 -1.37580922040000e-02 +9.59000000000000e+00 -1.36703226250000e-02 +9.60000000000000e+00 -1.35831038440000e-02 +9.61000000000000e+00 -1.34964325000000e-02 +9.62000000000000e+00 -1.34103052600000e-02 +9.63000000000000e+00 -1.33247188090000e-02 +9.64000000000000e+00 -1.32396698520000e-02 +9.65000000000000e+00 -1.31551551120000e-02 +9.66000000000000e+00 -1.30711713310000e-02 +9.67000000000000e+00 -1.29877152700000e-02 +9.68000000000000e+00 -1.29047837090000e-02 +9.69000000000000e+00 -1.28223734450000e-02 +9.70000000000000e+00 -1.27404812950000e-02 +9.71000000000000e+00 -1.26591040900000e-02 +9.72000000000000e+00 -1.25782386840000e-02 +9.73000000000000e+00 -1.24978819540000e-02 +9.74000000000000e+00 -1.24180307900000e-02 +9.75000000000000e+00 -1.23386821010000e-02 +9.76000000000000e+00 -1.22598328130000e-02 +9.77000000000000e+00 -1.21814798700000e-02 +9.78000000000000e+00 -1.21036202350000e-02 +9.79000000000000e+00 -1.20262508880000e-02 +9.80000000000000e+00 -1.19493688260000e-02 +9.81000000000000e+00 -1.18729710630000e-02 +9.82000000000000e+00 -1.17970546330000e-02 +9.83000000000000e+00 -1.17216165900000e-02 +9.84000000000000e+00 -1.16466539950000e-02 +9.85000000000000e+00 -1.15721639300000e-02 +9.86000000000000e+00 -1.14981434960000e-02 +9.87000000000000e+00 -1.14245898090000e-02 +9.88000000000000e+00 -1.13515000040000e-02 +9.89000000000000e+00 -1.12788712310000e-02 +9.90000000000000e+00 -1.12067006560000e-02 +9.91000000000000e+00 -1.11349854630000e-02 +9.92000000000000e+00 -1.10637228540000e-02 +9.93000000000000e+00 -1.09929100430000e-02 +9.94000000000000e+00 -1.09225442630000e-02 +9.95000000000000e+00 -1.08526227610000e-02 +9.96000000000000e+00 -1.07831428050000e-02 +9.97000000000000e+00 -1.07141016770000e-02 +9.98000000000000e+00 -1.06454966750000e-02 +9.99000000000000e+00 -1.05773251110000e-02 +1.00000000000000e+01 -1.05095843150000e-02 +1.00100000000000e+01 -1.04422716320000e-02 +1.00200000000000e+01 -1.03753844220000e-02 +1.00300000000000e+01 -1.03089200610000e-02 +1.00400000000000e+01 -1.02428759410000e-02 +1.00500000000000e+01 -1.01772494690000e-02 +1.00600000000000e+01 -1.01120380670000e-02 +1.00700000000000e+01 -1.00472391720000e-02 +1.00800000000000e+01 -9.98285023740000e-03 +1.00900000000000e+01 -9.91886872920000e-03 +1.01000000000000e+01 -9.85529213000000e-03 +1.01100000000000e+01 -9.79211793680000e-03 +1.01200000000000e+01 -9.72934366170000e-03 +1.01300000000000e+01 -9.66696683110000e-03 +1.01400000000000e+01 -9.60498498620000e-03 +1.01500000000000e+01 -9.54339568270000e-03 +1.01600000000000e+01 -9.48219649070000e-03 +1.01700000000000e+01 -9.42138499470000e-03 +1.01800000000000e+01 -9.36095879360000e-03 +1.01900000000000e+01 -9.30091550120000e-03 +1.02000000000000e+01 -9.24125274340000e-03 +1.02100000000000e+01 -9.18196816130000e-03 +1.02200000000000e+01 -9.12305940990000e-03 +1.02300000000000e+01 -9.06452415800000e-03 +1.02400000000000e+01 -9.00636008840000e-03 +1.02500000000000e+01 -8.94856489760000e-03 +1.02600000000000e+01 -8.89113629580000e-03 +1.02700000000000e+01 -8.83407200680000e-03 +1.02800000000000e+01 -8.77736976800000e-03 +1.02900000000000e+01 -8.72102733010000e-03 +1.03000000000000e+01 -8.66504245750000e-03 +1.03100000000000e+01 -8.60941292640000e-03 +1.03200000000000e+01 -8.55413652890000e-03 +1.03300000000000e+01 -8.49921106920000e-03 +1.03400000000000e+01 -8.44463436460000e-03 +1.03500000000000e+01 -8.39040424530000e-03 +1.03600000000000e+01 -8.33651855460000e-03 +1.03700000000000e+01 -8.28297514860000e-03 +1.03800000000000e+01 -8.22977189650000e-03 +1.03900000000000e+01 -8.17690668000000e-03 +1.04000000000000e+01 -8.12437739360000e-03 +1.04100000000000e+01 -8.07218194450000e-03 +1.04200000000000e+01 -8.02031825220000e-03 +1.04300000000000e+01 -7.96878424920000e-03 +1.04400000000000e+01 -7.91757787990000e-03 +1.04500000000000e+01 -7.86669710130000e-03 +1.04600000000000e+01 -7.81613988260000e-03 +1.04700000000000e+01 -7.76590420530000e-03 +1.04800000000000e+01 -7.71598806300000e-03 +1.04900000000000e+01 -7.66638946140000e-03 +1.05000000000000e+01 -7.61710641810000e-03 +1.05100000000000e+01 -7.56813696280000e-03 +1.05200000000000e+01 -7.51947913700000e-03 +1.05300000000000e+01 -7.47113099400000e-03 +1.05400000000000e+01 -7.42309059890000e-03 +1.05500000000000e+01 -7.37535602850000e-03 +1.05600000000000e+01 -7.32792537130000e-03 +1.05700000000000e+01 -7.28079672690000e-03 +1.05800000000000e+01 -7.23396820670000e-03 +1.05900000000000e+01 -7.18743793360000e-03 +1.06000000000000e+01 -7.14120404170000e-03 +1.06100000000000e+01 -7.09526467630000e-03 +1.06200000000000e+01 -7.04961799420000e-03 +1.06300000000000e+01 -7.00426216310000e-03 +1.06400000000000e+01 -6.95919536200000e-03 +1.06500000000000e+01 -6.91441578070000e-03 +1.06600000000000e+01 -6.86992162020000e-03 +1.06700000000000e+01 -6.82571109220000e-03 +1.06800000000000e+01 -6.78178241950000e-03 +1.06900000000000e+01 -6.73813383550000e-03 +1.07000000000000e+01 -6.69476358430000e-03 +1.07100000000000e+01 -6.65166992080000e-03 +1.07200000000000e+01 -6.60885111050000e-03 +1.07300000000000e+01 -6.56630542920000e-03 +1.07400000000000e+01 -6.52403116340000e-03 +1.07500000000000e+01 -6.48202661010000e-03 +1.07600000000000e+01 -6.44029007640000e-03 +1.07700000000000e+01 -6.39881987990000e-03 +1.07800000000000e+01 -6.35761434840000e-03 +1.07900000000000e+01 -6.31667181990000e-03 +1.08000000000000e+01 -6.27599064230000e-03 +1.08100000000000e+01 -6.23556917400000e-03 +1.08200000000000e+01 -6.19540578310000e-03 +1.08300000000000e+01 -6.15549884760000e-03 +1.08400000000000e+01 -6.11584675570000e-03 +1.08500000000000e+01 -6.07644790510000e-03 +1.08600000000000e+01 -6.03730070360000e-03 +1.08700000000000e+01 -5.99840356840000e-03 +1.08800000000000e+01 -5.95975492670000e-03 +1.08900000000000e+01 -5.92135321510000e-03 +1.09000000000000e+01 -5.88319687970000e-03 +1.09100000000000e+01 -5.84528437640000e-03 +1.09200000000000e+01 -5.80761417020000e-03 +1.09300000000000e+01 -5.77018473570000e-03 +1.09400000000000e+01 -5.73299455690000e-03 +1.09500000000000e+01 -5.69604212680000e-03 +1.09600000000000e+01 -5.65932594790000e-03 +1.09700000000000e+01 -5.62284453180000e-03 +1.09800000000000e+01 -5.58659639920000e-03 +1.09900000000000e+01 -5.55058007990000e-03 +1.10000000000000e+01 -5.51479411260000e-03 +1.10100000000000e+01 -5.47923704520000e-03 +1.10200000000000e+01 -5.44390743430000e-03 +1.10300000000000e+01 -5.40880384550000e-03 +1.10400000000000e+01 -5.37392485310000e-03 +1.10500000000000e+01 -5.33926904030000e-03 +1.10600000000000e+01 -5.30483499880000e-03 +1.10700000000000e+01 -5.27062132910000e-03 +1.10800000000000e+01 -5.23662664040000e-03 +1.10900000000000e+01 -5.20284955020000e-03 +1.11000000000000e+01 -5.16928868470000e-03 +1.11100000000000e+01 -5.13594267850000e-03 +1.11200000000000e+01 -5.10281017470000e-03 +1.11300000000000e+01 -5.06988982450000e-03 +1.11400000000000e+01 -5.03718028760000e-03 +1.11500000000000e+01 -5.00468023210000e-03 +1.11600000000000e+01 -4.97238833390000e-03 +1.11700000000000e+01 -4.94030327750000e-03 +1.11800000000000e+01 -4.90842375530000e-03 +1.11900000000000e+01 -4.87674846770000e-03 +1.12000000000000e+01 -4.84527612330000e-03 +1.12100000000000e+01 -4.81400543850000e-03 +1.12200000000000e+01 -4.78293513780000e-03 +1.12300000000000e+01 -4.75206395350000e-03 +1.12400000000000e+01 -4.72139062550000e-03 +1.12500000000000e+01 -4.69091390200000e-03 +1.12600000000000e+01 -4.66063253850000e-03 +1.12700000000000e+01 -4.63054529830000e-03 +1.12800000000000e+01 -4.60065095250000e-03 +1.12900000000000e+01 -4.57094827950000e-03 +1.13000000000000e+01 -4.54143606570000e-03 +1.13100000000000e+01 -4.51211310470000e-03 +1.13200000000000e+01 -4.48297819750000e-03 +1.13300000000000e+01 -4.45403015280000e-03 +1.13400000000000e+01 -4.42526778640000e-03 +1.13500000000000e+01 -4.39668992180000e-03 +1.13600000000000e+01 -4.36829538930000e-03 +1.13700000000000e+01 -4.34008302700000e-03 +1.13800000000000e+01 -4.31205167970000e-03 +1.13900000000000e+01 -4.28420019970000e-03 +1.14000000000000e+01 -4.25652744640000e-03 +1.14100000000000e+01 -4.22903228600000e-03 +1.14200000000000e+01 -4.20171359210000e-03 +1.14300000000000e+01 -4.17457024500000e-03 +1.14400000000000e+01 -4.14760113230000e-03 +1.14500000000000e+01 -4.12080514800000e-03 +1.14600000000000e+01 -4.09418119350000e-03 +1.14700000000000e+01 -4.06772817670000e-03 +1.14800000000000e+01 -4.04144501240000e-03 +1.14900000000000e+01 -4.01533062210000e-03 +1.15000000000000e+01 -3.98938393410000e-03 +1.15100000000000e+01 -3.96360388330000e-03 +1.15200000000000e+01 -3.93798941120000e-03 +1.15300000000000e+01 -3.91253946600000e-03 +1.15400000000000e+01 -3.88725300230000e-03 +1.15500000000000e+01 -3.86212898130000e-03 +1.15600000000000e+01 -3.83716637080000e-03 +1.15700000000000e+01 -3.81236414470000e-03 +1.15800000000000e+01 -3.78772128350000e-03 +1.15900000000000e+01 -3.76323677420000e-03 +1.16000000000000e+01 -3.73890960980000e-03 +1.16100000000000e+01 -3.71473878980000e-03 +1.16200000000000e+01 -3.69072331990000e-03 +1.16300000000000e+01 -3.66686221190000e-03 +1.16400000000000e+01 -3.64315448400000e-03 +1.16500000000000e+01 -3.61959916020000e-03 +1.16600000000000e+01 -3.59619527080000e-03 +1.16700000000000e+01 -3.57294185220000e-03 +1.16800000000000e+01 -3.54983794680000e-03 +1.16900000000000e+01 -3.52688260270000e-03 +1.17000000000000e+01 -3.50407487440000e-03 +1.17100000000000e+01 -3.48141382200000e-03 +1.17200000000000e+01 -3.45889851150000e-03 +1.17300000000000e+01 -3.43652801490000e-03 +1.17400000000000e+01 -3.41430140990000e-03 +1.17500000000000e+01 -3.39221777990000e-03 +1.17600000000000e+01 -3.37027621410000e-03 +1.17700000000000e+01 -3.34847580750000e-03 +1.17800000000000e+01 -3.32681566070000e-03 +1.17900000000000e+01 -3.30529487970000e-03 +1.18000000000000e+01 -3.28391257650000e-03 +1.18100000000000e+01 -3.26266786840000e-03 +1.18200000000000e+01 -3.24155987830000e-03 +1.18300000000000e+01 -3.22058773460000e-03 +1.18400000000000e+01 -3.19975057110000e-03 +1.18500000000000e+01 -3.17904752720000e-03 +1.18600000000000e+01 -3.15847774740000e-03 +1.18700000000000e+01 -3.13804038190000e-03 +1.18800000000000e+01 -3.11773458600000e-03 +1.18900000000000e+01 -3.09755952040000e-03 +1.19000000000000e+01 -3.07751435100000e-03 +1.19100000000000e+01 -3.05759824900000e-03 +1.19200000000000e+01 -3.03781039080000e-03 +1.19300000000000e+01 -3.01814995790000e-03 +1.19400000000000e+01 -2.99861613700000e-03 +1.19500000000000e+01 -2.97920811990000e-03 +1.19600000000000e+01 -2.95992510340000e-03 +1.19700000000000e+01 -2.94076628960000e-03 +1.19800000000000e+01 -2.92173088530000e-03 +1.19900000000000e+01 -2.90281810240000e-03 +1.20000000000000e+01 -2.88402715780000e-03 +1.20100000000000e+01 -2.86535727330000e-03 +1.20200000000000e+01 -2.84680767560000e-03 +1.20300000000000e+01 -2.82837759620000e-03 +1.20400000000000e+01 -2.81006627150000e-03 +1.20500000000000e+01 -2.79187294280000e-03 +1.20600000000000e+01 -2.77379685600000e-03 +1.20700000000000e+01 -2.75583726170000e-03 +1.20800000000000e+01 -2.73799341550000e-03 +1.20900000000000e+01 -2.72026457740000e-03 +1.21000000000000e+01 -2.70265001230000e-03 +1.21100000000000e+01 -2.68514898950000e-03 +1.21200000000000e+01 -2.66776078300000e-03 +1.21300000000000e+01 -2.65048467150000e-03 +1.21400000000000e+01 -2.63331993800000e-03 +1.21500000000000e+01 -2.61626587030000e-03 +1.21600000000000e+01 -2.59932176040000e-03 +1.21700000000000e+01 -2.58248690500000e-03 +1.21800000000000e+01 -2.56576060510000e-03 +1.21900000000000e+01 -2.54914216610000e-03 +1.22000000000000e+01 -2.53263089800000e-03 +1.22100000000000e+01 -2.51622611480000e-03 +1.22200000000000e+01 -2.49992713500000e-03 +1.22300000000000e+01 -2.48373328160000e-03 +1.22400000000000e+01 -2.46764388160000e-03 +1.22500000000000e+01 -2.45165826630000e-03 +1.22600000000000e+01 -2.43577577130000e-03 +1.22700000000000e+01 -2.41999573640000e-03 +1.22800000000000e+01 -2.40431750540000e-03 +1.22900000000000e+01 -2.38874042640000e-03 +1.23000000000000e+01 -2.37326385170000e-03 +1.23100000000000e+01 -2.35788713760000e-03 +1.23200000000000e+01 -2.34260964420000e-03 +1.23300000000000e+01 -2.32743073620000e-03 +1.23400000000000e+01 -2.31234978190000e-03 +1.23500000000000e+01 -2.29736615360000e-03 +1.23600000000000e+01 -2.28247922780000e-03 +1.23700000000000e+01 -2.26768838490000e-03 +1.23800000000000e+01 -2.25299300890000e-03 +1.23900000000000e+01 -2.23839248820000e-03 +1.24000000000000e+01 -2.22388621460000e-03 +1.24100000000000e+01 -2.20947358410000e-03 +1.24200000000000e+01 -2.19515399640000e-03 +1.24300000000000e+01 -2.18092685480000e-03 +1.24400000000000e+01 -2.16679156680000e-03 +1.24500000000000e+01 -2.15274754320000e-03 +1.24600000000000e+01 -2.13879419890000e-03 +1.24700000000000e+01 -2.12493095230000e-03 +1.24800000000000e+01 -2.11115722560000e-03 +1.24900000000000e+01 -2.09747244440000e-03 +1.25000000000000e+01 -2.08387603840000e-03 +1.25100000000000e+01 -2.07036744040000e-03 +1.25200000000000e+01 -2.05694608730000e-03 +1.25300000000000e+01 -2.04361141910000e-03 +1.25400000000000e+01 -2.03036287980000e-03 +1.25500000000000e+01 -2.01719991640000e-03 +1.25600000000000e+01 -2.00412198000000e-03 +1.25700000000000e+01 -1.99112852470000e-03 +1.25800000000000e+01 -1.97821900830000e-03 +1.25900000000000e+01 -1.96539289200000e-03 +1.26000000000000e+01 -1.95264964040000e-03 +1.26100000000000e+01 -1.93998872150000e-03 +1.26200000000000e+01 -1.92740960670000e-03 +1.26300000000000e+01 -1.91491177080000e-03 +1.26400000000000e+01 -1.90249469170000e-03 +1.26500000000000e+01 -1.89015785100000e-03 +1.26600000000000e+01 -1.87790073320000e-03 +1.26700000000000e+01 -1.86572282630000e-03 +1.26800000000000e+01 -1.85362362160000e-03 +1.26900000000000e+01 -1.84160261350000e-03 +1.27000000000000e+01 -1.82965929970000e-03 +1.27100000000000e+01 -1.81779318090000e-03 +1.27200000000000e+01 -1.80600376120000e-03 +1.27300000000000e+01 -1.79429054780000e-03 +1.27400000000000e+01 -1.78265305100000e-03 +1.27500000000000e+01 -1.77109078420000e-03 +1.27600000000000e+01 -1.75960326390000e-03 +1.27700000000000e+01 -1.74819000970000e-03 +1.27800000000000e+01 -1.73685054430000e-03 +1.27900000000000e+01 -1.72558439330000e-03 +1.28000000000000e+01 -1.71439108540000e-03 +1.28100000000000e+01 -1.70327015230000e-03 +1.28200000000000e+01 -1.69222112870000e-03 +1.28300000000000e+01 -1.68124355230000e-03 +1.28400000000000e+01 -1.67033696360000e-03 +1.28500000000000e+01 -1.65950090610000e-03 +1.28600000000000e+01 -1.64873492630000e-03 +1.28700000000000e+01 -1.63803857340000e-03 +1.28800000000000e+01 -1.62741139960000e-03 +1.28900000000000e+01 -1.61685295990000e-03 +1.29000000000000e+01 -1.60636281220000e-03 +1.29100000000000e+01 -1.59594051720000e-03 +1.29200000000000e+01 -1.58558563840000e-03 +1.29300000000000e+01 -1.57529774190000e-03 +1.29400000000000e+01 -1.56507639680000e-03 +1.29500000000000e+01 -1.55492117490000e-03 +1.29600000000000e+01 -1.54483165060000e-03 +1.29700000000000e+01 -1.53480740130000e-03 +1.29800000000000e+01 -1.52484800670000e-03 +1.29900000000000e+01 -1.51495304950000e-03 +1.30000000000000e+01 -1.50512211480000e-03 +1.30100000000000e+01 -1.49535479070000e-03 +1.30200000000000e+01 -1.48565066760000e-03 +1.30300000000000e+01 -1.47600933860000e-03 +1.30400000000000e+01 -1.46643039940000e-03 +1.30500000000000e+01 -1.45691344840000e-03 +1.30600000000000e+01 -1.44745808650000e-03 +1.30700000000000e+01 -1.43806391700000e-03 +1.30800000000000e+01 -1.42873054580000e-03 +1.30900000000000e+01 -1.41945758150000e-03 +1.31000000000000e+01 -1.41024463500000e-03 +1.31100000000000e+01 -1.40109131980000e-03 +1.31200000000000e+01 -1.39199725170000e-03 +1.31300000000000e+01 -1.38296204910000e-03 +1.31400000000000e+01 -1.37398533280000e-03 +1.31500000000000e+01 -1.36506672610000e-03 +1.31600000000000e+01 -1.35620585450000e-03 +1.31700000000000e+01 -1.34740234620000e-03 +1.31800000000000e+01 -1.33865583140000e-03 +1.31900000000000e+01 -1.32996594290000e-03 +1.32000000000000e+01 -1.32133231590000e-03 +1.32100000000000e+01 -1.31275458780000e-03 +1.32200000000000e+01 -1.30423239830000e-03 +1.32300000000000e+01 -1.29576538960000e-03 +1.32400000000000e+01 -1.28735320580000e-03 +1.32500000000000e+01 -1.27899549370000e-03 +1.32600000000000e+01 -1.27069190210000e-03 +1.32700000000000e+01 -1.26244208220000e-03 +1.32800000000000e+01 -1.25424568730000e-03 +1.32900000000000e+01 -1.24610237290000e-03 +1.33000000000000e+01 -1.23801179700000e-03 +1.33100000000000e+01 -1.22997361930000e-03 +1.33200000000000e+01 -1.22198750200000e-03 +1.33300000000000e+01 -1.21405310950000e-03 +1.33400000000000e+01 -1.20617010830000e-03 +1.33500000000000e+01 -1.19833816670000e-03 From b108526a465ddb57016f80922c9cdd78951a6554 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Mon, 10 Sep 2018 16:18:58 -0400 Subject: [PATCH 35/59] Changed mesh movement to align with the communicate_locally_moved_vertices function in dealii. ctests passed. --- include/dft.h | 4 +- include/meshMovement.h | 8 +-- include/triangulationManager.h | 8 +-- src/dft/dft.cc | 2 +- src/dft/initUnmovedTriangulation.cc | 6 +- src/dft/moveMeshToAtoms.cc | 2 +- .../meshMovement/meshMovement.cc | 61 ++++++++----------- .../meshMovementAffineTransform.cc | 16 ++--- .../meshMovement/meshMovementGaussian.cc | 23 +++---- .../triangulationManager.cc | 16 ++--- .../nitrogenMolecule_02.mpirun=10.output | 32 +++++----- 11 files changed, 80 insertions(+), 98 deletions(-) diff --git a/include/dft.h b/include/dft.h index ace105f32..6a2a58c11 100644 --- a/include/dft.h +++ b/include/dft.h @@ -276,7 +276,7 @@ namespace dftfe { /** *@brief moves the triangulation vertices using Gaussians such that the all atoms are on triangulation vertices */ - void moveMeshToAtoms(const Triangulation<3,3> & triangulationMove); + void moveMeshToAtoms(Triangulation<3,3> & triangulationMove); /** * Initializes the guess of electron-density and single-atom wavefunctions on the mesh, @@ -286,7 +286,7 @@ namespace dftfe { * In periodic problems, periodic faces are mapped here. Further finite-element nodes * to be pinned for solving the Poisson problem electro-static potential is set here */ - void initUnmovedTriangulation(const parallel::distributed::Triangulation<3> & triangulation); + void initUnmovedTriangulation(parallel::distributed::Triangulation<3> & triangulation); void initBoundaryConditions(); void initElectronicFields(const unsigned int usePreviousGroundStateFields=0); void initPseudoPotentialAll(); diff --git a/include/meshMovement.h b/include/meshMovement.h index 34a8a2c77..6fb62bb2f 100644 --- a/include/meshMovement.h +++ b/include/meshMovement.h @@ -46,7 +46,7 @@ namespace dftfe { * @param[in] domainBoundingVectors domain vectors of the domain corresponding to * the triangulation object. */ - void init(const Triangulation<3,3> & triangulation, + void init(Triangulation<3,3> & triangulation, const std::vector > & domainBoundingVectors); /** @brief Re-initializes the required data-structures for a given triangulation @@ -88,15 +88,15 @@ namespace dftfe { double controllingParameter)=0; virtual void computeIncrement()=0; - /// Parallel distributed vector of displacements of the triangulation vertices - dealii::parallel::distributed::Vector d_incrementalDisplacementParallel; + /// vector of displacements of the triangulation vertices + Vector d_incrementalDisplacement; - Vector d_incrementalDisplacementSerial; bool d_isParallelMesh; //dealii based FE data structres FESystem FEMoveMesh; DoFHandler d_dofHandlerMoveMesh; + parallel::distributed::Triangulation<3> * triaPtr; IndexSet d_locally_owned_dofs; IndexSet d_locally_relevant_dofs; ConstraintMatrix d_constraintsMoveMesh; diff --git a/include/triangulationManager.h b/include/triangulationManager.h index 135fb9a35..3216b91c7 100644 --- a/include/triangulationManager.h +++ b/include/triangulationManager.h @@ -110,7 +110,7 @@ namespace dftfe { * @brief returns constant reference to serial unmoved triangulation * */ - const parallel::distributed::Triangulation<3> & getSerialMeshUnmoved() const; + parallel::distributed::Triangulation<3> & getSerialMeshUnmoved(); /** * @brief returns reference to parallel moved triangulation @@ -122,14 +122,14 @@ namespace dftfe { * @brief returns constant reference to parallel unmoved triangulation * */ - const parallel::distributed::Triangulation<3> & getParallelMeshUnmoved() const; + parallel::distributed::Triangulation<3> & getParallelMeshUnmoved(); /** * @brief returns constant reference to parallel unmoved previous triangulation * (triangulation used in the last ground state solve during structure optimization). * */ - const parallel::distributed::Triangulation<3> & getParallelMeshUnmovedPrevious() const; + parallel::distributed::Triangulation<3> & getParallelMeshUnmovedPrevious(); /** * @brief returns constant reference to serial unmoved previous triangulation @@ -137,7 +137,7 @@ namespace dftfe { * structure optimization). * */ - const parallel::distributed::Triangulation<3> & getSerialMeshUnmovedPrevious() const; + parallel::distributed::Triangulation<3> & getSerialMeshUnmovedPrevious(); /** * @brief resets the vertices of parallel mesh moved to umoved. This is required before diff --git a/src/dft/dft.cc b/src/dft/dft.cc index 407805b03..945c8f7ed 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -522,7 +522,7 @@ namespace dftfe { // //get access to triangulation objects from meshGenerator class // - const parallel::distributed::Triangulation<3> & triangulationPar = d_mesh.getParallelMeshMoved(); + parallel::distributed::Triangulation<3> & triangulationPar = d_mesh.getParallelMeshMoved(); // //initialize dofHandlers and hanging-node constraints and periodic constraints on the unmoved Mesh diff --git a/src/dft/initUnmovedTriangulation.cc b/src/dft/initUnmovedTriangulation.cc index ec34bd824..dd5b2bc27 100644 --- a/src/dft/initUnmovedTriangulation.cc +++ b/src/dft/initUnmovedTriangulation.cc @@ -28,7 +28,7 @@ template -void dftClass::initUnmovedTriangulation(const parallel::distributed::Triangulation<3> & triangulation) +void dftClass::initUnmovedTriangulation(parallel::distributed::Triangulation<3> & triangulation) { computing_timer.enter_section("unmoved setup"); @@ -142,9 +142,9 @@ void dftClass::initUnmovedTriangulation(const parallel::distributed::Tr std::vector periodicDirectionVector; const std::array periodic = {dftParameters::periodicX, dftParameters::periodicY, dftParameters::periodicZ}; - for(unsigned int d= 0; d < 3; ++d) + for(unsigned int d= 0; d < 3; ++d) { - if(periodic[d]==1) + if(periodic[d]==1) { periodicDirectionVector.push_back(d); } diff --git a/src/dft/moveMeshToAtoms.cc b/src/dft/moveMeshToAtoms.cc index 954a20831..1a47ce2f8 100644 --- a/src/dft/moveMeshToAtoms.cc +++ b/src/dft/moveMeshToAtoms.cc @@ -17,7 +17,7 @@ // template -void dftClass::moveMeshToAtoms(const Triangulation<3,3> & triangulationMove) +void dftClass::moveMeshToAtoms(Triangulation<3,3> & triangulationMove) { meshMovementGaussianClass gaussianMove(mpi_communicator); diff --git a/src/triangulation/meshMovement/meshMovement.cc b/src/triangulation/meshMovement/meshMovement.cc index 1d701dea1..3a56a3a72 100644 --- a/src/triangulation/meshMovement/meshMovement.cc +++ b/src/triangulation/meshMovement/meshMovement.cc @@ -77,7 +77,7 @@ meshMovementClass::meshMovementClass(const MPI_Comm &mpi_comm_replica): } -void meshMovementClass::init(const Triangulation<3,3> & triangulation, const std::vector > & domainBoundingVectors) +void meshMovementClass::init(Triangulation<3,3> & triangulation, const std::vector > & domainBoundingVectors) { d_domainBoundingVectors=domainBoundingVectors; if (triangulation.locally_owned_subdomain()==numbers::invalid_subdomain_id) @@ -89,7 +89,11 @@ void meshMovementClass::init(const Triangulation<3,3> & triangulation, const std d_dofHandlerMoveMesh.clear(); if (d_isParallelMesh) - d_dofHandlerMoveMesh.initialize(dynamic_cast & >(triangulation),FEMoveMesh); + { + triaPtr=&(dynamic_cast & >(triangulation)); + d_dofHandlerMoveMesh.initialize(*triaPtr,FEMoveMesh); + + } else d_dofHandlerMoveMesh.initialize(triangulation,FEMoveMesh); d_dofHandlerMoveMesh.distribute_dofs(FEMoveMesh); @@ -126,9 +130,9 @@ void meshMovementClass::init(const Triangulation<3,3> & triangulation, const std const std::array periodic = {dftParameters::periodicX, dftParameters::periodicY, dftParameters::periodicZ}; std::vector periodicDirectionVector; - for (unsigned int d= 0; d < 3; ++d) + for (unsigned int d= 0; d < 3; ++d) { - if (periodic[d]==1) + if (periodic[d]==1) { periodicDirectionVector.push_back(d); } @@ -151,39 +155,16 @@ void meshMovementClass::initMoved(const std::vector > & doma void meshMovementClass::initIncrementField() { - //dftPtr->matrix_free_data.initialize_dof_vector(d_incrementalDisplacement,d_forceDofHandlerIndex); - IndexSet ghost_indices=d_locally_relevant_dofs; - ghost_indices.subtract_set(d_locally_owned_dofs); - if(!d_isParallelMesh) - { - d_incrementalDisplacementSerial.reinit(d_locally_owned_dofs.size()); - d_incrementalDisplacementSerial=0; - } - else - { - d_incrementalDisplacementParallel=dealii::parallel::distributed::Vector(d_locally_owned_dofs, - ghost_indices, - mpi_communicator); - d_incrementalDisplacementParallel=0; - } + d_incrementalDisplacement.reinit(d_locally_relevant_dofs.size()); + d_incrementalDisplacement=0; + } void meshMovementClass::finalizeIncrementField() { - if (d_isParallelMesh) - { - //d_incrementalDisplacement.compress(VectorOperation::insert);//inserts current value at owned node and sets ghosts to zero - //d_incrementalDisplacementParallel.update_ghost_values(); - d_constraintsMoveMesh.distribute(d_incrementalDisplacementParallel);//distribute to constrained degrees of freedom (periodic and hanging nodes) - d_incrementalDisplacementParallel.update_ghost_values(); - } - else - { - d_incrementalDisplacementSerial.update_ghost_values(); - d_constraintsMoveMesh.distribute(d_incrementalDisplacementSerial); - } + d_constraintsMoveMesh.distribute(d_incrementalDisplacement); } void meshMovementClass::updateTriangulationVertices() @@ -193,25 +174,28 @@ void meshMovementClass::updateTriangulationVertices() pcout << "Start moving triangulation..." << std::endl; std::vector vertex_moved(d_dofHandlerMoveMesh.get_triangulation().n_vertices(), false); + const std::vector locally_owned_vertices = + dealii::GridTools::get_locally_owned_vertices(d_dofHandlerMoveMesh.get_triangulation()); // Next move vertices on locally owned cells DoFHandler<3>::active_cell_iterator cell = d_dofHandlerMoveMesh.begin_active(); DoFHandler<3>::active_cell_iterator endc = d_dofHandlerMoveMesh.end(); for (; cell!=endc; ++cell) { - if (!cell->is_artificial()) + if (cell->is_locally_owned()) { for (unsigned int vertex_no=0; vertex_no::vertices_per_cell;++vertex_no) { const unsigned global_vertex_no = cell->vertex_index(vertex_no); - if (vertex_moved[global_vertex_no]) + if (vertex_moved[global_vertex_no] + || !locally_owned_vertices[global_vertex_no]) continue; Point vertexDisplacement; - for (unsigned int d=0; dvertex_dof_index(vertex_no,d); - vertexDisplacement[d]=d_isParallelMesh?d_incrementalDisplacementParallel[globalDofIndex]: - d_incrementalDisplacementSerial[globalDofIndex]; + vertexDisplacement[d]=d_incrementalDisplacement[globalDofIndex]; } cell->vertex(vertex_no) += vertexDisplacement; @@ -219,6 +203,9 @@ void meshMovementClass::updateTriangulationVertices() } } } + if (d_isParallelMesh) + triaPtr->communicate_locally_moved_vertices(locally_owned_vertices); + d_dofHandlerMoveMesh.distribute_dofs(FEMoveMesh); if (dftParameters::verbosity>=4) pcout << "...End moving triangulation" << std::endl; @@ -251,6 +238,7 @@ std::pair meshMovementClass::movedMeshCheck() offsetVectors[i][j] = unitVectorsXYZ[i][j] - d_domainBoundingVectors[i][j]; } } + /* if (dftParameters::verbosity>=4) pcout << "Sanity check for periodic matched faces on moved triangulation..." << std::endl; for(unsigned int i=0; i< d_periodicity_vector.size(); ++i) @@ -271,6 +259,7 @@ std::pair meshMovementClass::movedMeshCheck() if (dftParameters::verbosity>=4) pcout << "...Sanity check passed" << std::endl; + */ //print out mesh metrics typename Triangulation<3,3>::active_cell_iterator cell, endc; double minElemLength=1e+6; diff --git a/src/triangulation/meshMovement/meshMovementAffineTransform.cc b/src/triangulation/meshMovement/meshMovementAffineTransform.cc index fe2b1f863..131801823 100644 --- a/src/triangulation/meshMovement/meshMovementAffineTransform.cc +++ b/src/triangulation/meshMovement/meshMovementAffineTransform.cc @@ -61,9 +61,10 @@ void meshMovementAffineTransform::computeIncrement() DoFHandler<3>::active_cell_iterator cell = d_dofHandlerMoveMesh.begin_active(), endc = d_dofHandlerMoveMesh.end(); - for (; cell!=endc; ++cell) { - if (!cell->is_artificial()){ - for (unsigned int i=0; iis_artificial()) + for (unsigned int i=0; ivertex_index(i); if (vertex_touched[global_vertex_no]) @@ -76,15 +77,10 @@ void meshMovementAffineTransform::computeIncrement() { const unsigned int globalDofIndex=cell->vertex_dof_index(i,idim); - if (d_isParallelMesh) - d_incrementalDisplacementParallel[globalDofIndex]=increment[idim]; - else - d_incrementalDisplacementSerial[globalDofIndex]=increment[idim]; - } + d_incrementalDisplacement[globalDofIndex]=increment[idim]; + } } - } - } } } diff --git a/src/triangulation/meshMovement/meshMovementGaussian.cc b/src/triangulation/meshMovement/meshMovementGaussian.cc index 6b184d66e..268dc295d 100644 --- a/src/triangulation/meshMovement/meshMovementGaussian.cc +++ b/src/triangulation/meshMovement/meshMovementGaussian.cc @@ -63,9 +63,10 @@ void meshMovementGaussianClass::computeIncrement() DoFHandler<3>::active_cell_iterator cell = d_dofHandlerMoveMesh.begin_active(), endc = d_dofHandlerMoveMesh.end(); - for (; cell!=endc; ++cell) { - if (!cell->is_artificial()){ - for (unsigned int i=0; iis_artificial()) + for (unsigned int i=0; ivertex_index(i); if (vertex_touched[global_vertex_no]) @@ -74,9 +75,11 @@ void meshMovementGaussianClass::computeIncrement() Point nodalCoor = cell->vertex(i); int overlappedControlPointId=-1; - for (unsigned int jControl=0;jControl vertex_dof_index(i,idim); if(!d_constraintsMoveMesh.is_constrained(globalDofIndex)) - { - if (d_isParallelMesh) - d_incrementalDisplacementParallel[globalDofIndex]+=gaussianWeight*d_controlPointDisplacements[iControl][idim]; - else - d_incrementalDisplacementSerial[globalDofIndex]+=gaussianWeight*d_controlPointDisplacements[iControl][idim]; - } + d_incrementalDisplacement[globalDofIndex] + +=gaussianWeight*d_controlPointDisplacements[iControl][idim]; } } } - } - } } } diff --git a/src/triangulation/triangulationManager/triangulationManager.cc b/src/triangulation/triangulationManager/triangulationManager.cc index 19f51e41c..7b964b3d8 100644 --- a/src/triangulation/triangulationManager/triangulationManager.cc +++ b/src/triangulation/triangulationManager/triangulationManager.cc @@ -156,8 +156,8 @@ void triangulationManager::generateCoarseMeshesForRestart // //get unmoved serial mesh // -const parallel::distributed::Triangulation<3> & -triangulationManager::getSerialMeshUnmoved() const +parallel::distributed::Triangulation<3> & +triangulationManager::getSerialMeshUnmoved() { return d_serialTriangulationUnmoved; } @@ -174,8 +174,8 @@ triangulationManager::getParallelMeshMoved() // //get unmoved parallel mesh // -const parallel::distributed::Triangulation<3> & -triangulationManager::getParallelMeshUnmoved() const +parallel::distributed::Triangulation<3> & +triangulationManager::getParallelMeshUnmoved() { return d_parallelTriangulationUnmoved; } @@ -183,8 +183,8 @@ triangulationManager::getParallelMeshUnmoved() const // //get unmoved parallel mesh // -const parallel::distributed::Triangulation<3> & -triangulationManager::getParallelMeshUnmovedPrevious() const +parallel::distributed::Triangulation<3> & +triangulationManager::getParallelMeshUnmovedPrevious() { return d_parallelTriangulationUnmovedPrevious; } @@ -192,8 +192,8 @@ triangulationManager::getParallelMeshUnmovedPrevious() const // //get unmoved serial mesh // -const parallel::distributed::Triangulation<3> & -triangulationManager::getSerialMeshUnmovedPrevious() const +parallel::distributed::Triangulation<3> & +triangulationManager::getSerialMeshUnmovedPrevious() { return d_serialTriangulationUnmovedPrevious; } diff --git a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output index f34a9410e..914d635fd 100644 --- a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output +++ b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.mpirun=10.output @@ -33,12 +33,12 @@ SCF iterations converged to the specified tolerance after: 12 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.79765856 + Total energy: -19.79765523 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.292465,0.000000,0.000000 -AtomId 1: 0.292453,0.000011,0.000012 +AtomId 0: 0.292464,0.000001,0.000000 +AtomId 1: 0.292450,0.000015,0.000014 -------------------------------------------------------------------------------------------- -----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- v1 : 80.000000 0.000000 0.000000 @@ -72,12 +72,12 @@ SCF iterations converged to the specified tolerance after: 12 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.89600598 + Total energy: -19.89600555 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.126044,0.000000,0.000000 -AtomId 1: 0.126052,0.000000,0.000000 +AtomId 0: 0.126047,0.000000,0.000000 +AtomId 1: 0.126055,0.000000,0.000000 -------------------------------------------------------------------------------------------- -----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- v1 : 80.000000 0.000000 0.000000 @@ -85,7 +85,7 @@ v2 : 0.000000 80.000000 0.000000 v3 : 0.000000 0.000000 80.000000 ----------------------------------------------------------------------------------------- -----Fractional coordinates of atoms------ -AtomId 0: 0.488247 0.000000 0.000000 +AtomId 0: 0.488248 0.000000 0.000000 AtomId 1: 0.511753 0.000000 0.000000 ----------------------------------------------------------------------------------------- Number Image Charges 14 @@ -109,12 +109,12 @@ SCF iterations converged to the specified tolerance after: 13 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.83956439 + Total energy: -19.83955968 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.401557,0.000000,0.000000 -AtomId 1: 0.401557,0.000000,0.000000 +AtomId 0: 0.401591,0.000000,0.000000 +AtomId 1: 0.401590,0.000000,0.000000 -------------------------------------------------------------------------------------------- -----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- v1 : 80.000000 0.000000 0.000000 @@ -146,12 +146,12 @@ SCF iterations converged to the specified tolerance after: 12 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.90260843 + Total energy: -19.90260829 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.044737,0.000000,0.000000 -AtomId 1: 0.044724,0.000000,0.000000 +AtomId 0: 0.044741,0.000000,0.000000 +AtomId 1: 0.044727,0.000000,0.000000 -------------------------------------------------------------------------------------------- -----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- v1 : 80.000000 0.000000 0.000000 @@ -179,10 +179,10 @@ SCF iterations converged to the specified tolerance after: 11 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.90333353 + Total energy: -19.90333351 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- -AtomId 0: 0.013419,0.000000,0.000000 -AtomId 1: 0.013420,0.000000,0.000000 +AtomId 0: 0.013421,0.000000,0.000000 +AtomId 1: 0.013422,0.000000,0.000000 -------------------------------------------------------------------------------------------- From b0a65a0e9938935d57b364b951e9dd9392c7d17d Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Wed, 12 Sep 2018 14:05:00 -0400 Subject: [PATCH 36/59] Fixed #195 Use higher order quadrature rule for Pseudopotential projectors. ctests passed. added few more ctests. --- include/constants.h | 9 +- include/dftParameters.h | 1 + include/force.h | 12 +- src/dft/initBoundaryConditions.cc | 1 + src/dft/initPseudo-OV.cc | 8 +- .../FnlGammaAtomsElementalContribution.cc | 144 +++++--- ...AtomsElementalContributionSpinPolarized.cc | 135 +++++--- ...onfigurationalForceEEshelbyFPSPFnlLinFE.cc | 275 ++++++++++++---- ...lForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc | 311 ++++++++++++++---- .../gaussianGeneratorConfForceOpt.cc | 16 +- .../computeStressEEshelbyEPSPEnlEk.cc | 125 +++++-- ...uteStressSpinPolarizedEEshelbyEPSPEnlEk.cc | 139 ++++++-- src/force/force.cc | 7 +- src/force/initPseudoOVForce.cc | 6 +- .../complex/cubicAlPrim_01.prm.in | 1 + .../complex/cubicAlPrim_01_b.mpirun=4.output | 48 +++ .../complex/cubicAlPrim_01_b.prm.in | 87 +++++ .../pseudopotential/complex/fccAl_01.prm.in | 1 + .../pseudopotential/complex/fccAl_02.prm.in | 1 + .../complex/graphene_01.prm.in | 1 + .../complex/hcpMgPrim_01.prm.in | 1 + .../complex/hcpMgPrim_01_b.mpirun=5.output | 50 +++ .../complex/hcpMgPrim_01_b.prm.in | 87 +++++ .../complex/hcpMgPrim_01_c.prm.in | 1 + .../complex/hcpMgPrim_01_d.prm.in | 1 + .../complex/hcpMgPrim_02.prm.in | 1 + .../complex/hcpMgPrim_02_b.prm.in | 1 + .../complex/hcpMgPrim_02_c.prm.in | 1 + .../complex/hcpMgPrim_03.prm.in | 1 + .../complex/hcpMgPrim_04.prm.in | 1 + .../complex/hcpMgPrim_04_b.prm.in | 1 + .../complex/hcpMgPrim_04_c.prm.in | 1 + .../complex/hcpMgPrim_05.prm.in | 1 + .../complex/hcpMgPrim_06.prm.in | 1 + .../complex/hcpMgPrim_06_b.prm.in | 1 + .../complex/hcpMgPrim_07.prm.in | 1 + .../complex/nitrogenMolecule_02.prm.in | 2 +- .../real/aluminumSingleAtom_01.prm.in | 2 +- .../real/aluminumSingleAtom_01_b.prm.in | 2 +- .../pseudopotential/real/hcpMgPrim_01.prm.in | 2 +- .../real/hcpMgPrim_01_b.prm.in | 2 +- .../real/hcpMgPrim_01_c.prm.in | 2 +- .../real/hcpMgPrim_01_d.prm.in | 2 +- .../real/hcpMgPrim_01_e.prm.in | 2 +- .../real/hcpMgPrim_01_f.prm.in | 2 +- .../real/hcpMgPrim_01_g.prm.in | 2 +- .../real/hcpMgPrim_01_h.mpirun=5.output | 42 +++ .../real/hcpMgPrim_01_h.prm.in | 81 +++++ .../pseudopotential/real/hcpMgPrim_02.prm.in | 2 +- .../real/hcpMgPrim_02_b.prm.in | 2 +- .../real/hcpMgPrim_02_c.prm.in | 2 +- .../pseudopotential/real/hcpMgPrim_03.prm.in | 1 + .../real/hcpMgPrim_03_b.prm.in | 1 + .../real/hcpMgPrim_03_c.prm.in | 1 + .../real/hcpMgPrim_03_d.prm.in | 1 + .../real/hcpMgPrim_03_e.mpirun=5.output | 41 +++ .../real/hcpMgPrim_03_e.prm.in | 84 +++++ .../real/nitrogenMolecule_01.prm.in | 2 +- .../real/nitrogenMolecule_02.prm.in | 2 +- utils/dftParameters.cc | 6 + 60 files changed, 1450 insertions(+), 317 deletions(-) create mode 100644 tests/dft/pseudopotential/complex/cubicAlPrim_01_b.mpirun=4.output create mode 100644 tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in create mode 100644 tests/dft/pseudopotential/complex/hcpMgPrim_01_b.mpirun=5.output create mode 100644 tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_h.mpirun=5.output create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_03_e.mpirun=5.output create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in diff --git a/include/constants.h b/include/constants.h index 895bb811a..648eed789 100644 --- a/include/constants.h +++ b/include/constants.h @@ -23,14 +23,19 @@ namespace dftfe { // //Add prefic C_ to all constants // - + /// Boltzmann constant const double C_kb =3.166811429e-06; - + /// problem space dimensions const int C_DIM=3; /// 1d quadrature rule order template constexpr unsigned int C_num1DQuad(){return FEOrder+1;} + + + /// 1d quadrature rule order for non-local part of pseudopotential + template constexpr unsigned int C_num1DQuadPSP() + {return FEOrder+4 > 8 ? 8 : FEOrder+4;} } #endif diff --git a/include/dftParameters.h b/include/dftParameters.h index d18a39a48..410d170b7 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -77,6 +77,7 @@ namespace dftfe { extern bool triMatPGSOpt; extern bool reuseWfcGeoOpt; extern double mpiAllReduceMessageBlockSizeMB; + extern bool useHigherQuadNLP; /** * Declare parameters. diff --git a/include/force.h b/include/force.h index 8b6971a02..6d21cc535 100644 --- a/include/force.h +++ b/include/force.h @@ -181,6 +181,7 @@ namespace dftfe { void FnlGammaAtomsElementalContributionPeriodic (std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > > > & pspnlGammaAtomsQuads, const std::vector > > > & projectorKetTimesPsiTimesV, @@ -189,6 +190,7 @@ namespace dftfe { void FnlGammaAtomsElementalContributionPeriodicSpinPolarized (std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > > > & pspnlGammaAtomsQuads, const std::vector > > > & projectorKetTimesPsiSpin0TimesV, @@ -200,6 +202,7 @@ namespace dftfe { void FnlGammaAtomsElementalContributionNonPeriodicSpinPolarized (std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > pspnlGammaAtomQuads, const std::vector > & projectorKetTimesPsiSpin0TimesV, @@ -210,6 +213,7 @@ namespace dftfe { void FnlGammaAtomsElementalContributionNonPeriodic (std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > pspnlGammaAtomQuads, const std::vector > & projectorKetTimesPsiTimesV, @@ -337,14 +341,6 @@ namespace dftfe { /// Storage for configurational force on all global atoms. std::vector d_globalAtomsGaussianForces; -#ifdef USE_COMPLEX - /* Part of the configurational force which is summed over k points. - * It is a temporary data structure required for force evaluation (d_globalAtomsGaussianForces) - * when parallization over k points is on. - */ - std::vector d_globalAtomsGaussianForcesKPoints; -#endif - /// Storage for configurational stress tensor Tensor<2,C_DIM,double> d_stress; diff --git a/src/dft/initBoundaryConditions.cc b/src/dft/initBoundaryConditions.cc index 8bc81f487..863604278 100644 --- a/src/dft/initBoundaryConditions.cc +++ b/src/dft/initBoundaryConditions.cc @@ -155,6 +155,7 @@ void dftClass::initBoundaryConditions(){ std::vector > quadratureVector; quadratureVector.push_back(QGauss<1>(C_num1DQuad())); quadratureVector.push_back(QGaussLobatto<1>(FEOrder+1)); + quadratureVector.push_back(QGauss<1>(C_num1DQuadPSP())); // // diff --git a/src/dft/initPseudo-OV.cc b/src/dft/initPseudo-OV.cc index 2bdeebe13..eb1cbf267 100644 --- a/src/dft/initPseudo-OV.cc +++ b/src/dft/initPseudo-OV.cc @@ -40,10 +40,14 @@ void dftClass::computeElementalOVProjectorKets() //get FE data structures // QGauss<3> quadrature(C_num1DQuad()); + QGauss<3> quadratureHigh(C_num1DQuadPSP()); + //FEValues<3> fe_values(FE, quadrature, update_values | update_gradients | update_JxW_values); - FEValues<3> fe_values(FE, quadrature, update_values | update_JxW_values| update_quadrature_points); + FEValues<3> fe_values(FE, dftParameters::useHigherQuadNLP?quadratureHigh:quadrature, + update_values | update_JxW_values| update_quadrature_points); const unsigned int numberNodesPerElement = FE.dofs_per_cell; - const unsigned int numberQuadraturePoints = quadrature.size(); + const unsigned int numberQuadraturePoints = dftParameters::useHigherQuadNLP?quadratureHigh.size() + :quadrature.size(); // diff --git a/src/force/configurationalForceCompute/FnlGammaAtomsElementalContribution.cc b/src/force/configurationalForceCompute/FnlGammaAtomsElementalContribution.cc index d210b8f5c..e52e1ef28 100644 --- a/src/force/configurationalForceCompute/FnlGammaAtomsElementalContribution.cc +++ b/src/force/configurationalForceCompute/FnlGammaAtomsElementalContribution.cc @@ -20,6 +20,7 @@ template void forceClass::FnlGammaAtomsElementalContributionPeriodic(std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > > > & pspnlGammaAtomsQuads, const std::vector > > > & projectorKetTimesPsiTimesV, @@ -30,7 +31,9 @@ void forceClass::FnlGammaAtomsElementalContributionPeriodic(std::mapnumEigenValues; const unsigned int numKPoints=dftPtr->d_kPointWeights.size(); const unsigned int numSubCells= dftPtr->matrix_free_data.n_components_filled(cell); - const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPoints=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points + :forceEval.n_q_points; DoFHandler::active_cell_iterator subCellPtr; const unsigned int numNonLocalAtomsCurrentProcess= dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); @@ -49,36 +52,60 @@ void forceClass::FnlGammaAtomsElementalContributionPeriodic(std::map > > > > > temp1(1); - temp1[0]=pspnlGammaAtomsQuads[q][iAtom]; - - const Tensor<1,C_DIM,VectorizedArray > - F=-eshelbyTensor::getFnlPeriodic(temp1, - temp2, - psiQuads.begin()+q*numEigenVectors*numKPoints, - dftPtr->d_kPointWeights, - dftPtr->eigenValues, - dftPtr->fermiEnergy, - dftParameters::TVal); - - forceEval.submit_value(F,q); + if (dftParameters::useHigherQuadNLP) + { + for (unsigned int q=0; q > > > > > temp1(1); + temp1[0]=pspnlGammaAtomsQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > + F=-eshelbyTensor::getFnlPeriodic(temp1, + temp2, + psiQuads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + + forceEvalNLP.submit_value(F,q); + } + } + else + { + for (unsigned int q=0; q > > > > > temp1(1); + temp1[0]=pspnlGammaAtomsQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > + F=-eshelbyTensor::getFnlPeriodic(temp1, + temp2, + psiQuads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + + forceEval.submit_value(F,q); + } } + const Tensor<1,C_DIM,VectorizedArray > forceContributionFnlGammaiAtomCells - =forceEval.integrate_value(); + =dftParameters::useHigherQuadNLP? + forceEvalNLP.integrate_value() + :forceEval.integrate_value(); if (forceContributionFnlGammaAtoms.find(globalChargeIdNonLocalAtom)==forceContributionFnlGammaAtoms.end()) forceContributionFnlGammaAtoms[globalChargeIdNonLocalAtom]=std::vector(C_DIM,0.0); + for (unsigned int iSubCell=0; iSubCell::FnlGammaAtomsElementalContributionPeriodic(std::map void forceClass::FnlGammaAtomsElementalContributionNonPeriodic(std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > pspnlGammaAtomQuads, const std::vector > & projectorKetTimesPsiTimesV, @@ -96,7 +124,9 @@ void forceClass::FnlGammaAtomsElementalContributionNonPeriodic(std::map const unsigned int numberGlobalAtoms = dftPtr->atomLocations.size(); const unsigned int numEigenVectors=dftPtr->numEigenValues; const unsigned int numSubCells= dftPtr->matrix_free_data.n_components_filled(cell); - const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPoints=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points + :forceEval.n_q_points; DoFHandler::active_cell_iterator subCellPtr; const unsigned int numNonLocalAtomsCurrentProcess= dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); @@ -110,35 +140,60 @@ void forceClass::FnlGammaAtomsElementalContributionNonPeriodic(std::map const int globalChargeIdNonLocalAtom = dftPtr->d_nonLocalAtomGlobalChargeIds[nonLocalAtomId]; std::vector > temp2(1); temp2[0]=projectorKetTimesPsiTimesV[iAtom]; - for (unsigned int q=0; q > > > temp1(1); - temp1[0]=pspnlGammaAtomQuads[q][iAtom]; - const Tensor<1,C_DIM,VectorizedArray > F= - -eshelbyTensor::getFnlNonPeriodic(temp1, - temp2, - psiQuads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); - - forceEval.submit_value(F,q); + if (dftParameters::useHigherQuadNLP) + { + for (unsigned int q=0; q > > > temp1(1); + temp1[0]=pspnlGammaAtomQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > F= + -eshelbyTensor::getFnlNonPeriodic(temp1, + temp2, + psiQuads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + + + forceEvalNLP.submit_value(F,q); + } + } + else + { + for (unsigned int q=0; q > > > temp1(1); + temp1[0]=pspnlGammaAtomQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > F= + -eshelbyTensor::getFnlNonPeriodic(temp1, + temp2, + psiQuads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + + + forceEval.submit_value(F,q); + } } + const Tensor<1,C_DIM,VectorizedArray > forceContributionFnlGammaiAtomCells - =forceEval.integrate_value(); + =dftParameters::useHigherQuadNLP? + forceEvalNLP.integrate_value() + :forceEval.integrate_value(); if (forceContributionFnlGammaAtoms.find(globalChargeIdNonLocalAtom)==forceContributionFnlGammaAtoms.end()) forceContributionFnlGammaAtoms[globalChargeIdNonLocalAtom]=std::vector(C_DIM,0.0); + for (unsigned int iSubCell=0; iSubCell::FnlGammaAtomsElementalContributionNonPeriodic(std::map template void forceClass::distributeForceContributionFnlGammaAtoms(const std::map > & forceContributionFnlGammaAtoms) { - for (unsigned int iAtom=0;iAtom atomLocations.size(); iAtom++){ + for (unsigned int iAtom=0;iAtom atomLocations.size(); iAtom++) + { bool doesAtomIdExistOnLocallyOwnedNode=false; - if (d_atomsForceDofs.find(std::pair(iAtom,0))!=d_atomsForceDofs.end()){ + if (d_atomsForceDofs.find(std::pair(iAtom,0))!=d_atomsForceDofs.end()) doesAtomIdExistOnLocallyOwnedNode=true; - } std::vector forceContributionFnlGammaiAtomGlobal(C_DIM); std::vector forceContributionFnlGammaiAtomLocal(C_DIM,0.0); @@ -167,7 +222,8 @@ void forceClass::distributeForceContributionFnlGammaAtoms(const std::ma MPI_SUM, mpi_communicator); - if (doesAtomIdExistOnLocallyOwnedNode){ + if (doesAtomIdExistOnLocallyOwnedNode) + { std::vector forceLocalDofIndices(C_DIM); for (unsigned int idim=0; idim(iAtom,idim)]; diff --git a/src/force/configurationalForceCompute/FnlGammaAtomsElementalContributionSpinPolarized.cc b/src/force/configurationalForceCompute/FnlGammaAtomsElementalContributionSpinPolarized.cc index 356f3ce63..492c2fccb 100644 --- a/src/force/configurationalForceCompute/FnlGammaAtomsElementalContributionSpinPolarized.cc +++ b/src/force/configurationalForceCompute/FnlGammaAtomsElementalContributionSpinPolarized.cc @@ -22,6 +22,7 @@ template void forceClass::FnlGammaAtomsElementalContributionPeriodicSpinPolarized (std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > > > & pspnlGammaAtomsQuads, const std::vector > > > & projectorKetTimesPsiSpin0TimesV, @@ -34,7 +35,9 @@ void forceClass::FnlGammaAtomsElementalContributionPeriodicSpinPolarize const unsigned int numEigenVectors=dftPtr->numEigenValues; const unsigned int numKPoints=dftPtr->d_kPointWeights.size(); const unsigned int numSubCells= dftPtr->matrix_free_data.n_components_filled(cell); - const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPoints=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points + :forceEval.n_q_points; DoFHandler::active_cell_iterator subCellPtr; const unsigned int numNonLocalAtomsCurrentProcess= dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); @@ -55,36 +58,56 @@ void forceClass::FnlGammaAtomsElementalContributionPeriodicSpinPolarize temp2Spin1[ikPoint].resize(1); temp2Spin1[ikPoint][0]=projectorKetTimesPsiSpin1TimesV[ikPoint][iAtom]; } - for (unsigned int q=0; q > > > > > temp1(1); - temp1[0]=pspnlGammaAtomsQuads[q][iAtom]; - - const Tensor<1,C_DIM,VectorizedArray > - F=-eshelbyTensorSP::getFnlPeriodic(temp1, - temp2Spin0, - temp2Spin1, - psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, - psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, - dftPtr->d_kPointWeights, - dftPtr->eigenValues, - dftPtr->fermiEnergy, - dftParameters::TVal); - forceEval.submit_value(F,q); - } + + if (dftParameters::useHigherQuadNLP) + for (unsigned int q=0; q > > > > > temp1(1); + temp1[0]=pspnlGammaAtomsQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > + F=-eshelbyTensorSP::getFnlPeriodic(temp1, + temp2Spin0, + temp2Spin1, + psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, + psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEvalNLP.submit_value(F,q); + } + else + for (unsigned int q=0; q > > > > > temp1(1); + temp1[0]=pspnlGammaAtomsQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > + F=-eshelbyTensorSP::getFnlPeriodic(temp1, + temp2Spin0, + temp2Spin1, + psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, + psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEval.submit_value(F,q); + } + const Tensor<1,C_DIM,VectorizedArray > forceContributionFnlGammaiAtomCells - =forceEval.integrate_value(); + =dftParameters::useHigherQuadNLP? + forceEvalNLP.integrate_value() + :forceEval.integrate_value(); if (forceContributionFnlGammaAtoms.find(globalChargeIdNonLocalAtom)==forceContributionFnlGammaAtoms.end()) forceContributionFnlGammaAtoms[globalChargeIdNonLocalAtom]=std::vector(C_DIM,0.0); + for (unsigned int iSubCell=0; iSubCell void forceClass::FnlGammaAtomsElementalContributionNonPeriodicSpinPolarized (std::map > & forceContributionFnlGammaAtoms, FEEvaluation(),C_DIM> & forceEval, + FEEvaluation(),C_DIM> & forceEvalNLP, const unsigned int cell, const std::vector > > > > pspnlGammaAtomQuads, const std::vector > & projectorKetTimesPsiSpin0TimesV, @@ -105,7 +129,9 @@ void forceClass::FnlGammaAtomsElementalContributionNonPeriodicSpinPolar const unsigned int numberGlobalAtoms = dftPtr->atomLocations.size(); const unsigned int numEigenVectors=dftPtr->numEigenValues; const unsigned int numSubCells= dftPtr->matrix_free_data.n_components_filled(cell); - const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPoints=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points + :forceEval.n_q_points; DoFHandler::active_cell_iterator subCellPtr; const unsigned int numNonLocalAtomsCurrentProcess= dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); @@ -121,35 +147,54 @@ void forceClass::FnlGammaAtomsElementalContributionNonPeriodicSpinPolar temp2Spin0[0]=projectorKetTimesPsiSpin0TimesV[iAtom]; std::vector > temp2Spin1(1); temp2Spin1[0]=projectorKetTimesPsiSpin1TimesV[iAtom]; - for (unsigned int q=0; q > > > temp1(1); - temp1[0]=pspnlGammaAtomQuads[q][iAtom]; - - const Tensor<1,C_DIM,VectorizedArray > F= - -eshelbyTensorSP::getFnlNonPeriodic(temp1, - temp2Spin0, - temp2Spin1, - psiSpin0Quads.begin()+q*numEigenVectors, - psiSpin1Quads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); - forceEval.submit_value(F,q); - } + + if (dftParameters::useHigherQuadNLP) + for (unsigned int q=0; q > > > temp1(1); + temp1[0]=pspnlGammaAtomQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > F= + -eshelbyTensorSP::getFnlNonPeriodic(temp1, + temp2Spin0, + temp2Spin1, + psiSpin0Quads.begin()+q*numEigenVectors, + psiSpin1Quads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEvalNLP.submit_value(F,q); + } + else + for (unsigned int q=0; q > > > temp1(1); + temp1[0]=pspnlGammaAtomQuads[q][iAtom]; + + const Tensor<1,C_DIM,VectorizedArray > F= + -eshelbyTensorSP::getFnlNonPeriodic(temp1, + temp2Spin0, + temp2Spin1, + psiSpin0Quads.begin()+q*numEigenVectors, + psiSpin1Quads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEval.submit_value(F,q); + } + const Tensor<1,C_DIM,VectorizedArray > forceContributionFnlGammaiAtomCells - =forceEval.integrate_value(); + =dftParameters::useHigherQuadNLP? + forceEvalNLP.integrate_value() + :forceEval.integrate_value(); if (forceContributionFnlGammaAtoms.find(globalChargeIdNonLocalAtom)==forceContributionFnlGammaAtoms.end()) forceContributionFnlGammaAtoms[globalChargeIdNonLocalAtom]=std::vector(C_DIM,0.0); + for (unsigned int iSubCell=0; iSubCell::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( const unsigned int numVectorizedArrayElements=VectorizedArray::n_array_elements; const MatrixFree<3,double> & matrix_free_data=dftPtr->matrix_free_data; - FEEvaluation(),C_DIM> forceEval(matrix_free_data,d_forceDofHandlerIndex, 0); + FEEvaluation(),C_DIM> forceEval(matrix_free_data, + d_forceDofHandlerIndex, + 0); + FEEvaluation(),C_DIM> forceEvalNLP(matrix_free_data, + d_forceDofHandlerIndex, + 2); #ifdef USE_COMPLEX - FEEvaluation(),C_DIM> forceEvalKPoints(matrix_free_data,d_forceDofHandlerIndex, 0); + FEEvaluation(),C_DIM> forceEvalKPoints(matrix_free_data, + d_forceDofHandlerIndex, + 0); + FEEvaluation(),C_DIM> forceEvalKPointsNLP(matrix_free_data, + d_forceDofHandlerIndex, + 2); #endif #ifdef USE_COMPLEX - FEEvaluation(),2> psiEval(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); + FEEvaluation(),2> psiEval(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + + FEEvaluation(),2> psiEvalNLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); #else - FEEvaluation(),1> psiEval(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); + FEEvaluation(),1> psiEval(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + + FEEvaluation(),1> psiEvalNLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); #endif - FEEvaluation(),1> phiTotEval(matrix_free_data,dftPtr->phiTotDofHandlerIndex, 0); - FEEvaluation(),1> phiTotInEval(matrix_free_data,dftPtr->phiTotDofHandlerIndex, 0); - FEEvaluation(),1> phiExtEval(matrix_free_data, dftPtr->phiExtDofHandlerIndex, 0); + FEEvaluation(),1> phiTotEval(matrix_free_data, + dftPtr->phiTotDofHandlerIndex, + 0); + FEEvaluation(),1> phiTotInEval(matrix_free_data, + dftPtr->phiTotDofHandlerIndex, + 0); + FEEvaluation(),1> phiExtEval(matrix_free_data, + dftPtr->phiExtDofHandlerIndex, + 0); QGauss quadrature(C_num1DQuad()); FEValues feVselfValues (dftPtr->FE, quadrature, update_gradients | update_quadrature_points); const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPointsNLP=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points:numQuadPoints; const unsigned int numEigenVectors=dftPtr->numEigenValues; const unsigned int numKPoints=dftPtr->d_kPointWeights.size(); DoFHandler::active_cell_iterator subCellPtr; @@ -158,8 +188,19 @@ void forceClass::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( #ifdef USE_COMPLEX forceEvalKPoints.reinit(cell); #endif + psiEval.reinit(cell); + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { + forceEvalNLP.reinit(cell); +#ifdef USE_COMPLEX + forceEvalKPointsNLP.reinit(cell); +#endif + + psiEvalNLP.reinit(cell); + } + phiTotEval.reinit(cell); phiTotEval.read_dof_values_plain(dftPtr->d_phiTotRhoOut);//read without taking constraints into account phiTotEval.evaluate(true,true); @@ -202,13 +243,13 @@ void forceClass::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( #endif if(isPseudopotential) { - ZetaDeltaVQuads.resize(numQuadPoints); - gradZetaDeltaVQuads.resize(numQuadPoints); + ZetaDeltaVQuads.resize(numQuadPointsNLP); + gradZetaDeltaVQuads.resize(numQuadPointsNLP); #ifdef USE_COMPLEX - pspnlGammaAtomsQuads.resize(numQuadPoints); + pspnlGammaAtomsQuads.resize(numQuadPointsNLP); #endif - for (unsigned int q=0; q::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( ; } +#ifdef USE_COMPLEX + std::vector > > psiQuadsNLP; +#else + std::vector< VectorizedArray > psiQuadsNLP; +#endif + + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { +#ifdef USE_COMPLEX + psiQuadsNLP.resize(numQuadPointsNLP*numEigenVectors*numKPoints,zeroTensor1); +#else + psiQuadsNLP.resize(numQuadPointsNLP*numEigenVectors,make_vectorized_array(0.0)); +#endif + for (unsigned int ikPoint=0; ikPoint::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( gradPseudoVLocQuads[q][2][iSubCell]=d_gradPseudoVLoc[subCellId][C_DIM*q+2]; } - for (unsigned int q=0; q::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( #ifdef USE_COMPLEX for (unsigned int ikPoint=0; ikPoint::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( rhoQuads); #ifdef USE_COMPLEX - FnlGammaAtomsElementalContributionPeriodic(forceContributionFnlGammaAtoms, - forceEval, - cell, - pspnlGammaAtomsQuads, - projectorKetTimesPsiTimesV, - psiQuads); + FnlGammaAtomsElementalContributionPeriodic + (forceContributionFnlGammaAtoms, + forceEval, + forceEvalNLP, + cell, + pspnlGammaAtomsQuads, + projectorKetTimesPsiTimesV, + dftParameters::useHigherQuadNLP?psiQuadsNLP:psiQuads); + #else - FnlGammaAtomsElementalContributionNonPeriodic(forceContributionFnlGammaAtoms, - forceEval, - cell, - gradZetaDeltaVQuads, - projectorKetTimesPsiTimesV[0], - psiQuads); + FnlGammaAtomsElementalContributionNonPeriodic + (forceContributionFnlGammaAtoms, + forceEval, + forceEvalNLP, + cell, + gradZetaDeltaVQuads, + projectorKetTimesPsiTimesV[0], + dftParameters::useHigherQuadNLP?psiQuadsNLP:psiQuads); #endif + }//is pseudopotential check for (unsigned int q=0; q::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( F+=eshelbyTensor::getFPSPLocal(rhoQuads[q], gradPseudoVLocQuads[q], gradPhiExt_q); - + if (!dftParameters::useHigherQuadNLP) + { #ifdef USE_COMPLEX - Tensor<1,C_DIM,VectorizedArray > FKPoints; - FKPoints+=eshelbyTensor::getFnlPeriodic(gradZetaDeltaVQuads[q], - projectorKetTimesPsiTimesV, - psiQuads.begin()+q*numEigenVectors*numKPoints, - dftPtr->d_kPointWeights, - dftPtr->eigenValues, - dftPtr->fermiEnergy, - dftParameters::TVal); - - - EKPoints+=eshelbyTensor::getEnlEshelbyTensorPeriodic(ZetaDeltaVQuads[q], - projectorKetTimesPsiTimesV, - psiQuads.begin()+q*numEigenVectors*numKPoints, - dftPtr->d_kPointWeights, - dftPtr->eigenValues, - dftPtr->fermiEnergy, - dftParameters::TVal); - forceEvalKPoints.submit_value(FKPoints,q); + Tensor<1,C_DIM,VectorizedArray > FKPoints + =eshelbyTensor::getFnlPeriodic(gradZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV, + psiQuads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + + EKPoints+=eshelbyTensor::getEnlEshelbyTensorPeriodic(ZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV, + psiQuads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEvalKPoints.submit_value(FKPoints,q); #else - F+=eshelbyTensor::getFnlNonPeriodic(gradZetaDeltaVQuads[q], - projectorKetTimesPsiTimesV[0], - psiQuads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); - - E+=eshelbyTensor::getEnlEshelbyTensorNonPeriodic(ZetaDeltaVQuads[q], - projectorKetTimesPsiTimesV[0], - psiQuads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); + F+=eshelbyTensor::getFnlNonPeriodic(gradZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV[0], + psiQuads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + + E+=eshelbyTensor::getEnlEshelbyTensorNonPeriodic(ZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV[0], + psiQuads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); #endif + } } @@ -533,12 +611,71 @@ void forceClass::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( forceEvalKPoints.submit_gradient(EKPoints,q); #endif }//quad point loop + + if (isPseudopotential && dftParameters::useHigherQuadNLP) + for (unsigned int q=0; q > FKPoints + =eshelbyTensor::getFnlPeriodic(gradZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV, + psiQuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + Tensor<2,C_DIM,VectorizedArray > EKPoints + =eshelbyTensor::getEnlEshelbyTensorPeriodic(ZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV, + psiQuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEvalKPointsNLP.submit_value(FKPoints,q); + forceEvalKPointsNLP.submit_gradient(EKPoints,q); +#else + Tensor<1,C_DIM,VectorizedArray > F + =eshelbyTensor::getFnlNonPeriodic(gradZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV[0], + psiQuadsNLP.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + + Tensor<2,C_DIM,VectorizedArray > E + =eshelbyTensor::getEnlEshelbyTensorNonPeriodic(ZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV[0], + psiQuadsNLP.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + + forceEvalNLP.submit_value(F,q); + forceEvalNLP.submit_gradient(E,q); +#endif + }//nonlocal psp quad points loop + if(isPseudopotential) { forceEval.integrate(true,true); #ifdef USE_COMPLEX - forceEvalKPoints.integrate(true,true); + if (dftParameters::useHigherQuadNLP) + forceEvalKPoints.integrate(false,true); + else + forceEvalKPoints.integrate(true,true); +#endif + + if (dftParameters::useHigherQuadNLP) + { + +#ifdef USE_COMPLEX + forceEvalKPointsNLP.integrate(true,true); +#else + forceEvalNLP.integrate(true,true); #endif + } } else { @@ -547,10 +684,20 @@ void forceClass::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( forceEvalKPoints.integrate(false,true); #endif } + forceEval.distribute_local_to_global(d_configForceVectorLinFE);//also takes care of constraints #ifdef USE_COMPLEX forceEvalKPoints.distribute_local_to_global(d_configForceVectorLinFEKPoints); #endif + + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { +#ifdef USE_COMPLEX + forceEvalKPointsNLP.distribute_local_to_global(d_configForceVectorLinFEKPoints); +#else + forceEvalNLP.distribute_local_to_global(d_configForceVectorLinFE); +#endif + } } // add global FPSPLocal contribution due to Gamma(Rj) to the configurational force vector diff --git a/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc b/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc index 775e8f47b..73bb25979 100644 --- a/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc +++ b/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc @@ -51,17 +51,47 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor const unsigned int numVectorizedArrayElements=VectorizedArray::n_array_elements; const MatrixFree<3,double> & matrix_free_data=dftPtr->matrix_free_data; - FEEvaluation(),C_DIM> forceEval(matrix_free_data,d_forceDofHandlerIndex, 0); + FEEvaluation(),C_DIM> forceEval(matrix_free_data, + d_forceDofHandlerIndex, + 0); + FEEvaluation(),C_DIM> forceEvalNLP(matrix_free_data, + d_forceDofHandlerIndex, + 2); #ifdef USE_COMPLEX - FEEvaluation(),C_DIM> forceEvalKPoints(matrix_free_data,d_forceDofHandlerIndex, 0); + FEEvaluation(),C_DIM> forceEvalKPoints(matrix_free_data, + d_forceDofHandlerIndex, + 0); + FEEvaluation(),C_DIM> forceEvalKPointsNLP(matrix_free_data, + d_forceDofHandlerIndex, + 2); #endif #ifdef USE_COMPLEX - FEEvaluation(),2> psiEvalSpin0(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); - FEEvaluation(),2> psiEvalSpin1(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); + FEEvaluation(),2> psiEvalSpin0(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + FEEvaluation(),2> psiEvalSpin1(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + FEEvaluation(),2> psiEvalSpin0NLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); + FEEvaluation(),2> psiEvalSpin1NLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); #else - FEEvaluation(),1> psiEvalSpin0(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); - FEEvaluation(),1> psiEvalSpin1(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); + FEEvaluation(),1> psiEvalSpin0(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + FEEvaluation(),1> psiEvalSpin1(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + FEEvaluation(),1> psiEvalSpin0NLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); + FEEvaluation(),1> psiEvalSpin1NLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); #endif FEEvaluation(),1> phiTotEval(matrix_free_data,dftPtr->phiTotDofHandlerIndex, 0); @@ -71,6 +101,8 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor FEValues feVselfValues (dftPtr->FE, quadrature, update_gradients | update_quadrature_points); const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPointsNLP=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points:numQuadPoints; const unsigned int numEigenVectors=dftPtr->numEigenValues; const unsigned int numKPoints=dftPtr->d_kPointWeights.size(); DoFHandler::active_cell_iterator subCellPtr; @@ -138,6 +170,17 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor psiEvalSpin0.reinit(cell); psiEvalSpin1.reinit(cell); + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { + forceEvalNLP.reinit(cell); +#ifdef USE_COMPLEX + forceEvalKPointsNLP.reinit(cell); +#endif + + psiEvalSpin0NLP.reinit(cell); + psiEvalSpin1NLP.reinit(cell); + } + phiTotEval.reinit(cell); phiTotEval.read_dof_values_plain(dftPtr->d_phiTotRhoOut);//read without taking constraints into account phiTotEval.evaluate(true,true); @@ -187,13 +230,13 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor #endif if(isPseudopotential) { - ZetaDeltaVQuads.resize(numQuadPoints); - gradZetaDeltaVQuads.resize(numQuadPoints); + ZetaDeltaVQuads.resize(numQuadPointsNLP); + gradZetaDeltaVQuads.resize(numQuadPointsNLP); #ifdef USE_COMPLEX - pspnlGammaAtomsQuads.resize(numQuadPoints); + pspnlGammaAtomsQuads.resize(numQuadPointsNLP); #endif - for (unsigned int q=0; q::computeConfigurationalForceSpinPolarizedEEshelbyTensor } } +#ifdef USE_COMPLEX + std::vector > > psiSpin0QuadsNLP; + std::vector > > psiSpin1QuadsNLP; +#else + std::vector< VectorizedArray > psiSpin0QuadsNLP; + std::vector< VectorizedArray > psiSpin1QuadsNLP; +#endif + + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { +#ifdef USE_COMPLEX + psiSpin0QuadsNLP.resize(numQuadPointsNLP*numEigenVectors*numKPoints,zeroTensor1); + psiSpin1QuadsNLP.resize(numQuadPointsNLP*numEigenVectors*numKPoints,zeroTensor1); +#else + psiSpin0QuadsNLP.resize(numQuadPointsNLP*numEigenVectors,make_vectorized_array(0.0)); + psiSpin1QuadsNLP.resize(numQuadPointsNLP*numEigenVectors,make_vectorized_array(0.0)); +#endif + for (unsigned int ikPoint=0; ikPoint::computeConfigurationalForceSpinPolarizedEEshelbyTensor gradPseudoVLocQuads[q][2][iSubCell]=d_gradPseudoVLoc[subCellId][C_DIM*q+2]; } - for (unsigned int q=0; q::computeConfigurationalForceSpinPolarizedEEshelbyTensor #ifdef USE_COMPLEX for (unsigned int ikPoint=0; ikPoint::computeConfigurationalForceSpinPolarizedEEshelbyTensor #ifdef USE_COMPLEX FnlGammaAtomsElementalContributionPeriodicSpinPolarized(forceContributionFnlGammaAtoms, - forceEval, - cell, - pspnlGammaAtomsQuads, - projectorKetTimesPsiSpin0TimesV, - projectorKetTimesPsiSpin1TimesV, - psiSpin0Quads, - psiSpin1Quads); + forceEval, + forceEvalNLP, + cell, + pspnlGammaAtomsQuads, + projectorKetTimesPsiSpin0TimesV, + projectorKetTimesPsiSpin1TimesV, + dftParameters::useHigherQuadNLP? + psiSpin0QuadsNLP: + psiSpin0Quads, + dftParameters::useHigherQuadNLP? + psiSpin1QuadsNLP: + psiSpin1Quads); #else FnlGammaAtomsElementalContributionNonPeriodicSpinPolarized (forceContributionFnlGammaAtoms, forceEval, + forceEvalNLP, cell, gradZetaDeltaVQuads, projectorKetTimesPsiSpin0TimesV[0], projectorKetTimesPsiSpin1TimesV[0], - psiSpin0Quads, + dftParameters::useHigherQuadNLP? + psiSpin0QuadsNLP: + psiSpin0Quads, + dftParameters::useHigherQuadNLP? + psiSpin1QuadsNLP: psiSpin1Quads); #endif }//is pseudopotential check @@ -538,51 +630,55 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor gradPseudoVLocQuads[q], gradPhiExt_q); + if (!dftParameters::useHigherQuadNLP) + { #ifdef USE_COMPLEX - Tensor<1,C_DIM,VectorizedArray > FKPoints; - FKPoints+=eshelbyTensorSP::getFnlPeriodic - (gradZetaDeltaVQuads[q], - projectorKetTimesPsiSpin0TimesV, - projectorKetTimesPsiSpin1TimesV, - psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, - psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, - dftPtr->d_kPointWeights, - dftPtr->eigenValues, - dftPtr->fermiEnergy, - dftParameters::TVal); - - - EKPoints+=eshelbyTensorSP::getEnlEshelbyTensorPeriodic - (ZetaDeltaVQuads[q], - projectorKetTimesPsiSpin0TimesV, - projectorKetTimesPsiSpin1TimesV, - psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, - psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, - dftPtr->d_kPointWeights, - dftPtr->eigenValues, - dftPtr->fermiEnergy, - dftParameters::TVal); - forceEvalKPoints.submit_value(FKPoints,q); + Tensor<1,C_DIM,VectorizedArray > FKPoints + =eshelbyTensorSP::getFnlPeriodic + (gradZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV, + projectorKetTimesPsiSpin1TimesV, + psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, + psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + + EKPoints+=eshelbyTensorSP::getEnlEshelbyTensorPeriodic + (ZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV, + projectorKetTimesPsiSpin1TimesV, + psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, + psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEvalKPoints.submit_value(FKPoints,q); #else - F+=eshelbyTensorSP::getFnlNonPeriodic - (gradZetaDeltaVQuads[q], - projectorKetTimesPsiSpin0TimesV[0], - projectorKetTimesPsiSpin1TimesV[0], - psiSpin0Quads.begin()+q*numEigenVectors, - psiSpin1Quads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); - - E+=eshelbyTensorSP::getEnlEshelbyTensorNonPeriodic(ZetaDeltaVQuads[q], - projectorKetTimesPsiSpin0TimesV[0], - projectorKetTimesPsiSpin1TimesV[0], - psiSpin0Quads.begin()+q*numEigenVectors, - psiSpin1Quads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); + F+=eshelbyTensorSP::getFnlNonPeriodic + (gradZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV[0], + projectorKetTimesPsiSpin1TimesV[0], + psiSpin0Quads.begin()+q*numEigenVectors, + psiSpin1Quads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + + E+=eshelbyTensorSP::getEnlEshelbyTensorNonPeriodic(ZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV[0], + projectorKetTimesPsiSpin1TimesV[0], + psiSpin0Quads.begin()+q*numEigenVectors, + psiSpin1Quads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); #endif + } + } @@ -608,12 +704,78 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor forceEvalKPoints.submit_gradient(EKPoints,q); #endif }//quad point loop + + if (isPseudopotential && dftParameters::useHigherQuadNLP) + for (unsigned int q=0; q > FKPoints + =eshelbyTensorSP::getFnlPeriodic + (gradZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV, + projectorKetTimesPsiSpin1TimesV, + psiSpin0QuadsNLP.begin()+q*numEigenVectors*numKPoints, + psiSpin1QuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + Tensor<2,C_DIM,VectorizedArray > EKPoints + =eshelbyTensorSP::getEnlEshelbyTensorPeriodic + (ZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV, + projectorKetTimesPsiSpin1TimesV, + psiSpin0QuadsNLP.begin()+q*numEigenVectors*numKPoints, + psiSpin1QuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEvalKPointsNLP.submit_value(FKPoints,q); + forceEvalKPointsNLP.submit_gradient(EKPoints,q); +#else + Tensor<1,C_DIM,VectorizedArray > F + =eshelbyTensorSP::getFnlNonPeriodic + (gradZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV[0], + projectorKetTimesPsiSpin1TimesV[0], + psiSpin0QuadsNLP.begin()+q*numEigenVectors, + psiSpin1QuadsNLP.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + Tensor<2,C_DIM,VectorizedArray > E + =eshelbyTensorSP::getEnlEshelbyTensorNonPeriodic(ZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV[0], + projectorKetTimesPsiSpin1TimesV[0], + psiSpin0QuadsNLP.begin()+q*numEigenVectors, + psiSpin1QuadsNLP.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); + forceEvalNLP.submit_value(F,q); + forceEvalNLP.submit_gradient(E,q); +#endif + }//nonlocal psp quad points loop + if(isPseudopotential) { forceEval.integrate(true,true); #ifdef USE_COMPLEX - forceEvalKPoints.integrate(true,true); + if (dftParameters::useHigherQuadNLP) + forceEvalKPoints.integrate(false,true); + else + forceEvalKPoints.integrate(true,true); +#endif + if (dftParameters::useHigherQuadNLP) + { +#ifdef USE_COMPLEX + forceEvalKPointsNLP.integrate(true,true); +#else + forceEvalNLP.integrate(true,true); #endif + } } else { @@ -622,10 +784,19 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor forceEvalKPoints.integrate(false,true); #endif } + forceEval.distribute_local_to_global(d_configForceVectorLinFE);//also takes care of constraints #ifdef USE_COMPLEX forceEvalKPoints.distribute_local_to_global(d_configForceVectorLinFEKPoints); #endif + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { +#ifdef USE_COMPLEX + forceEvalKPointsNLP.distribute_local_to_global(d_configForceVectorLinFEKPoints); +#else + forceEvalNLP.distribute_local_to_global(d_configForceVectorLinFE); +#endif + } } // add global FPSPLocal contribution due to Gamma(Rj) to the configurational force vector diff --git a/src/force/configurationalForceCompute/gaussianGeneratorConfForceOpt.cc b/src/force/configurationalForceCompute/gaussianGeneratorConfForceOpt.cc index 766425be0..881c3d28a 100644 --- a/src/force/configurationalForceCompute/gaussianGeneratorConfForceOpt.cc +++ b/src/force/configurationalForceCompute/gaussianGeneratorConfForceOpt.cc @@ -365,10 +365,10 @@ void forceClass::computeAtomsForcesGaussianGenerator(bool allowGaussian std::vector globalAtomsGaussianForcesLocalPart(numberGlobalAtoms*C_DIM,0); d_globalAtomsGaussianForces.clear(); d_globalAtomsGaussianForces.resize(numberGlobalAtoms*C_DIM,0.0); + #ifdef USE_COMPLEX std::vector globalAtomsGaussianForcesKPointsLocalPart(numberGlobalAtoms*C_DIM,0); - d_globalAtomsGaussianForcesKPoints.clear(); - d_globalAtomsGaussianForcesKPoints.resize(numberGlobalAtoms*C_DIM,0.0); + std::vector globalAtomsGaussianForcesKPoints(numberGlobalAtoms*C_DIM,0.0); #endif std::vector vertex_touched(d_dofHandlerForce.get_triangulation().n_vertices(), false); @@ -437,9 +437,11 @@ void forceClass::computeAtomsForcesGaussianGenerator(bool allowGaussian const unsigned int globalDofIndex=cell->vertex_dof_index(i,idim); if (!d_constraintsNoneForce.is_constrained(globalDofIndex) && d_locally_owned_dofsForce.is_element(globalDofIndex)) { - globalAtomsGaussianForcesLocalPart[C_DIM*atomId+idim]+=gaussianWeight*d_configForceVectorLinFE[globalDofIndex]; + globalAtomsGaussianForcesLocalPart[C_DIM*atomId+idim]+= + gaussianWeight*(d_configForceVectorLinFE[globalDofIndex]); #ifdef USE_COMPLEX - globalAtomsGaussianForcesKPointsLocalPart[C_DIM*atomId+idim]+=gaussianWeight*d_configForceVectorLinFEKPoints[globalDofIndex]; + globalAtomsGaussianForcesKPointsLocalPart[C_DIM*atomId+idim]+= + gaussianWeight*(d_configForceVectorLinFEKPoints[globalDofIndex]); #endif } }//idim loop @@ -459,7 +461,7 @@ void forceClass::computeAtomsForcesGaussianGenerator(bool allowGaussian #ifdef USE_COMPLEX //Sum all processor contributions and distribute to all processors MPI_Allreduce(&(globalAtomsGaussianForcesKPointsLocalPart[0]), - &(d_globalAtomsGaussianForcesKPoints[0]), + &(globalAtomsGaussianForcesKPoints[0]), numberGlobalAtoms*C_DIM, MPI_DOUBLE, MPI_SUM, @@ -469,8 +471,8 @@ void forceClass::computeAtomsForcesGaussianGenerator(bool allowGaussian { for (unsigned int idim=0; idim < C_DIM ; idim++) { - d_globalAtomsGaussianForcesKPoints[iAtom*C_DIM+idim]= Utilities::MPI::sum(d_globalAtomsGaussianForcesKPoints[iAtom*C_DIM+idim], dftPtr->interpoolcomm); - d_globalAtomsGaussianForces[iAtom*C_DIM+idim]+=d_globalAtomsGaussianForcesKPoints[iAtom*C_DIM+idim]; + globalAtomsGaussianForcesKPoints[iAtom*C_DIM+idim]= Utilities::MPI::sum(globalAtomsGaussianForcesKPoints[iAtom*C_DIM+idim], dftPtr->interpoolcomm); + d_globalAtomsGaussianForces[iAtom*C_DIM+idim]+=globalAtomsGaussianForcesKPoints[iAtom*C_DIM+idim]; } } #endif diff --git a/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc b/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc index 34d630b16..78e75d865 100644 --- a/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc +++ b/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc @@ -51,15 +51,35 @@ void forceClass::computeStressEEshelbyEPSPEnlEk() const unsigned int numVectorizedArrayElements=VectorizedArray::n_array_elements; const MatrixFree<3,double> & matrix_free_data=dftPtr->matrix_free_data; - FEEvaluation(),C_DIM> forceEval(matrix_free_data,d_forceDofHandlerIndex, 0); - FEEvaluation(),1> phiTotEval(matrix_free_data,dftPtr->phiTotDofHandlerIndex, 0); - FEEvaluation(),2> psiEval(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); - FEEvaluation(),1> phiTotInEval(matrix_free_data,dftPtr->phiTotDofHandlerIndex, 0); - FEEvaluation(),1> phiExtEval(matrix_free_data, dftPtr->phiExtDofHandlerIndex, 0); + FEEvaluation(),C_DIM> forceEval(matrix_free_data, + d_forceDofHandlerIndex, + 0); + FEEvaluation(),C_DIM> forceEvalNLP(matrix_free_data, + d_forceDofHandlerIndex, + 2); + + FEEvaluation(),2> psiEval(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + FEEvaluation(),2> psiEvalNLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); + + FEEvaluation(),1> phiTotEval(matrix_free_data, + dftPtr->phiTotDofHandlerIndex, + 0); + FEEvaluation(),1> phiTotInEval(matrix_free_data, + dftPtr->phiTotDofHandlerIndex, + 0); + FEEvaluation(),1> phiExtEval(matrix_free_data, + dftPtr->phiExtDofHandlerIndex, + 0); QGauss quadrature(C_num1DQuad()); FEValues feVselfValues (dftPtr->FE, quadrature, update_gradients | update_quadrature_points); const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPointsNLP=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points:numQuadPoints; const unsigned int numEigenVectors=dftPtr->numEigenValues; const unsigned int numKPoints=dftPtr->d_kPointWeights.size(); @@ -111,6 +131,13 @@ void forceClass::computeStressEEshelbyEPSPEnlEk() forceEval.reinit(cell); psiEval.reinit(cell); + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { + forceEvalNLP.reinit(cell); + psiEvalNLP.reinit(cell); + } + + phiTotEval.reinit(cell); phiTotEval.read_dof_values_plain(dftPtr->d_phiTotRhoOut);//read without taking constraints into account phiTotEval.evaluate(true,true); @@ -143,9 +170,9 @@ void forceClass::computeStressEEshelbyEPSPEnlEk() std::vector > > > > > >gradZetalmDeltaVlDyadicDistImageAtomsQuads; if(isPseudopotential) { - ZetaDeltaVQuads.resize(numQuadPoints); - gradZetalmDeltaVlDyadicDistImageAtomsQuads.resize(numQuadPoints); - for (unsigned int q=0; q::computeStressEEshelbyEPSPEnlEk() for (unsigned int iSubCell=0; iSubCellinterpoolcomm); -; + gradRhoQuads[q][idim][iSubCell]= + Utilities::MPI::sum(gradRhoQuads[q][idim][iSubCell],dftPtr->interpoolcomm); + + std::vector > > psiQuadsNLP; + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { + psiQuadsNLP.resize(numQuadPointsNLP*numEigenVectors*numKPoints,zeroTensor1); + for (unsigned int ikPoint=0; ikPoint::computeStressEEshelbyEPSPEnlEk() gradPseudoVLocQuads[q][2][iSubCell]=d_gradPseudoVLoc[subCellId][C_DIM*q+2]; } - for (unsigned int q=0; q::computeStressEEshelbyEPSPEnlEk() { for (unsigned int ikPoint=0; ikPoint::computeStressEEshelbyEPSPEnlEk() rhoQuads); }//is pseudopotential check + Tensor<2,C_DIM,VectorizedArray > EQuadSum=zeroTensor4; + Tensor<2,C_DIM,VectorizedArray > EKPointsQuadSum=zeroTensor4; for (unsigned int q=0; q phiTot_q =phiTotEval.get_value(q); @@ -353,7 +400,7 @@ void forceClass::computeStressEEshelbyEPSPEnlEk() dftPtr->fermiEnergy, dftParameters::TVal); - if(isPseudopotential) + if(isPseudopotential && !dftParameters::useHigherQuadNLP) { EKPoints+=eshelbyTensor::getEnlEshelbyTensorPeriodic(ZetaDeltaVQuads[q], projectorKetTimesPsiTimesV, @@ -373,20 +420,42 @@ void forceClass::computeStressEEshelbyEPSPEnlEk() }//is pseudopotential check - E=E*forceEval.JxW(q); - EKPoints=EKPoints*forceEval.JxW(q); - for (unsigned int iSubCell=0; iSubCell > EKPoints + =eshelbyTensor::getEnlEshelbyTensorPeriodic(ZetaDeltaVQuads[q], + projectorKetTimesPsiTimesV, + psiQuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + EKPoints+=eshelbyTensor::getEnlStress(gradZetalmDeltaVlDyadicDistImageAtomsQuads[q], + projectorKetTimesPsiTimesV, + psiQuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + + EKPointsQuadSum+=EKPoints*forceEvalNLP.JxW(q); + + } + + for (unsigned int iSubCell=0; iSubCell::computeStressSpinPolarizedEEshelbyEPSPEnlEk() const unsigned int numVectorizedArrayElements=VectorizedArray::n_array_elements; const MatrixFree<3,double> & matrix_free_data=dftPtr->matrix_free_data; - FEEvaluation(),C_DIM> forceEval(matrix_free_data,d_forceDofHandlerIndex, 0); - FEEvaluation(),2> psiEvalSpin0(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); - FEEvaluation(),2> psiEvalSpin1(matrix_free_data,dftPtr->eigenDofHandlerIndex , 0); - FEEvaluation(),1> phiTotEval(matrix_free_data,dftPtr->phiTotDofHandlerIndex, 0); - FEEvaluation(),1> phiTotInEval(matrix_free_data,dftPtr->phiTotDofHandlerIndex, 0); - FEEvaluation(),1> phiExtEval(matrix_free_data, dftPtr->phiExtDofHandlerIndex, 0); + FEEvaluation(),C_DIM> forceEval(matrix_free_data, + d_forceDofHandlerIndex, + 0); + FEEvaluation(),C_DIM> forceEvalNLP(matrix_free_data, + d_forceDofHandlerIndex, + 2); + + FEEvaluation(),2> psiEvalSpin0(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + FEEvaluation(),2> psiEvalSpin1(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 0); + FEEvaluation(),2> psiEvalSpin0NLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); + FEEvaluation(),2> psiEvalSpin1NLP(matrix_free_data, + dftPtr->eigenDofHandlerIndex, + 2); + + FEEvaluation(),1> phiTotEval(matrix_free_data, + dftPtr->phiTotDofHandlerIndex, + 0); + FEEvaluation(),1> phiTotInEval(matrix_free_data, + dftPtr->phiTotDofHandlerIndex, + 0); + FEEvaluation(),1> phiExtEval(matrix_free_data, + dftPtr->phiExtDofHandlerIndex, + 0); QGauss quadrature(C_num1DQuad()); FEValues feVselfValues (dftPtr->FE, quadrature, update_gradients | update_quadrature_points); const unsigned int numQuadPoints=forceEval.n_q_points; + const unsigned int numQuadPointsNLP=dftParameters::useHigherQuadNLP? + forceEvalNLP.n_q_points:numQuadPoints; const unsigned int numEigenVectors=dftPtr->numEigenValues; const unsigned int numKPoints=dftPtr->d_kPointWeights.size(); @@ -128,6 +153,13 @@ void forceClass::computeStressSpinPolarizedEEshelbyEPSPEnlEk() psiEvalSpin0.reinit(cell); psiEvalSpin1.reinit(cell); + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { + forceEvalNLP.reinit(cell); + psiEvalSpin0NLP.reinit(cell); + psiEvalSpin1NLP.reinit(cell); + } + phiTotEval.reinit(cell); phiTotEval.read_dof_values_plain(dftPtr->d_phiTotRhoOut);//read without taking constraints into account phiTotEval.evaluate(true,true); @@ -167,9 +199,9 @@ void forceClass::computeStressSpinPolarizedEEshelbyEPSPEnlEk() std::vector > > > > > >gradZetalmDeltaVlDyadicDistImageAtomsQuads; if(isPseudopotential) { - ZetaDeltaVQuads.resize(numQuadPoints); - gradZetalmDeltaVlDyadicDistImageAtomsQuads.resize(numQuadPoints); - for (unsigned int q=0; q::computeStressSpinPolarizedEEshelbyEPSPEnlEk() gradRhoSpin1Quads[q][idim][iSubCell]=Utilities::MPI::sum(gradRhoSpin1Quads[q][idim][iSubCell],dftPtr->interpoolcomm); } + std::vector > > psiSpin0QuadsNLP; + std::vector > > psiSpin1QuadsNLP; + if (isPseudopotential && dftParameters::useHigherQuadNLP) + { + psiSpin0QuadsNLP.resize(numQuadPointsNLP*numEigenVectors*numKPoints,zeroTensor1); + psiSpin1QuadsNLP.resize(numQuadPointsNLP*numEigenVectors*numKPoints,zeroTensor1); + for (unsigned int ikPoint=0; ikPoint::computeStressSpinPolarizedEEshelbyEPSPEnlEk() gradPseudoVLocQuads[q][2][iSubCell]=d_gradPseudoVLoc[subCellId][C_DIM*q+2]; } - for (unsigned int q=0; q::computeStressSpinPolarizedEEshelbyEPSPEnlEk() { for (unsigned int ikPoint=0; ikPoint::computeStressSpinPolarizedEEshelbyEPSPEnlEk() rhoQuads); }//is pseudopotential check + Tensor<2,C_DIM,VectorizedArray > EQuadSum=zeroTensor4; + Tensor<2,C_DIM,VectorizedArray > EKPointsQuadSum=zeroTensor4; for (unsigned int q=0; q phiTot_q =phiTotEval.get_value(q); @@ -423,7 +481,7 @@ void forceClass::computeStressSpinPolarizedEEshelbyEPSPEnlEk() dftPtr->fermiEnergy, dftParameters::TVal); - if(isPseudopotential) + if(isPseudopotential && !dftParameters::useHigherQuadNLP) { EKPoints+=eshelbyTensorSP::getEnlEshelbyTensorPeriodic (ZetaDeltaVQuads[q], @@ -448,20 +506,47 @@ void forceClass::computeStressSpinPolarizedEEshelbyEPSPEnlEk() }//is pseudopotential check - E=E*forceEval.JxW(q); - EKPoints=EKPoints*forceEval.JxW(q); - for (unsigned int iSubCell=0; iSubCell > EKPoints + =eshelbyTensorSP::getEnlEshelbyTensorPeriodic + (ZetaDeltaVQuads[q], + projectorKetTimesPsiSpin0TimesV, + projectorKetTimesPsiSpin1TimesV, + psiSpin0QuadsNLP.begin()+q*numEigenVectors*numKPoints, + psiSpin1QuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + EKPoints+=eshelbyTensorSP::getEnlStress(gradZetalmDeltaVlDyadicDistImageAtomsQuads[q], + projectorKetTimesPsiSpin0TimesV, + projectorKetTimesPsiSpin1TimesV, + psiSpin0QuadsNLP.begin()+q*numEigenVectors*numKPoints, + psiSpin1QuadsNLP.begin()+q*numEigenVectors*numKPoints, + dftPtr->d_kPointWeights, + dftPtr->eigenValues, + dftPtr->fermiEnergy, + dftParameters::TVal); + + + EKPointsQuadSum+=EKPoints*forceEvalNLP.JxW(q); + } + + for (unsigned int iSubCell=0; iSubCell::initUnmoved(const Triangulation<3,3> & triangulation) std::vector periodicDirectionVector; - for(unsigned int d= 0; d < 3; ++d) + for(unsigned int d= 0; d < 3; ++d) { - if(periodic[d]==1) + if(periodic[d]==1) { periodicDirectionVector.push_back(d); } @@ -176,7 +176,7 @@ void forceClass::configForceLinFEInit() { dftPtr->matrix_free_data.initialize_dof_vector(d_configForceVectorLinFE,d_forceDofHandlerIndex); - d_configForceVectorLinFE=0;//also zeros out the ghost vectors + d_configForceVectorLinFE=0; #ifdef USE_COMPLEX dftPtr->matrix_free_data.initialize_dof_vector(d_configForceVectorLinFEKPoints,d_forceDofHandlerIndex); d_configForceVectorLinFEKPoints=0; @@ -190,6 +190,7 @@ void forceClass::configForceLinFEFinalize() //d_configForceVectorLinFE.update_ghost_values(); d_constraintsNoneForce.distribute(d_configForceVectorLinFE);//distribute to constrained degrees of freedom (for example periodic) d_configForceVectorLinFE.update_ghost_values(); + #ifdef USE_COMPLEX d_configForceVectorLinFEKPoints.compress(VectorOperation::add);//copies the ghost element cache to the owning element //d_configForceVectorLinFEKPoints.update_ghost_values(); diff --git a/src/force/initPseudoOVForce.cc b/src/force/initPseudoOVForce.cc index 756ab07ec..b20f31fc0 100644 --- a/src/force/initPseudoOVForce.cc +++ b/src/force/initPseudoOVForce.cc @@ -34,9 +34,11 @@ void forceClass::computeElementalNonLocalPseudoOVDataForce() //get FE data structures // QGauss<3> quadrature(C_num1DQuad()); - FEValues<3> fe_values(dftPtr->FE, quadrature, update_quadrature_points); + QGauss<3> quadratureHigh(C_num1DQuadPSP()); + FEValues<3> fe_values(dftPtr->FE, dftParameters::useHigherQuadNLP?quadratureHigh:quadrature, update_quadrature_points); const unsigned int numberNodesPerElement = dftPtr->FE.dofs_per_cell; - const unsigned int numberQuadraturePoints = quadrature.size(); + const unsigned int numberQuadraturePoints = dftParameters::useHigherQuadNLP?quadratureHigh.size() + :quadrature.size(); const unsigned int numKPoints=dftPtr->d_kPointWeights.size(); // diff --git a/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in b/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in index d573d1a77..28a5a90c3 100644 --- a/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in +++ b/tests/dft/pseudopotential/complex/cubicAlPrim_01.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.mpirun=4.output b/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.mpirun=4.output new file mode 100644 index 000000000..1d70dec16 --- /dev/null +++ b/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.mpirun=4.output @@ -0,0 +1,48 @@ +number of atoms: 1 +number of atoms types: 1 +Z:13 +============================================================================================================================= +number of electrons: 3 +number of eigen values: 20 +============================================================================================================================= +Total number of k-points 2 +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 7.599999999999999645e+00 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 7.599999999999999645e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 7.599999999999999645e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 5.000000000000000000e-01 5.000000000000000000e-01 5.000000000000000000e-01 +----------------------------------------------------------------------------------------- +Number Image Charges 918 + +Finite element mesh information +------------------------------------------------- +number of elements: 736 +number of degrees of freedom: 7377 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 15 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -35.85604372 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000000,0.000001,0.000003 +-------------------------------------------------------------------------------------------- + +Absolute value of cell stress (Hartree/Bohr^3) +------------------------------------------------------------------------ +0.000131 0.000000 0.000000 +0.000000 0.000131 0.000001 +0.000000 0.000001 0.000125 +------------------------------------------------------------------------ diff --git a/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in b/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in new file mode 100644 index 000000000..a8c2c4db6 --- /dev/null +++ b/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in @@ -0,0 +1,87 @@ +set VERBOSITY= 0 +set REPRODUCIBLE OUTPUT=true + +subsection Geometry + set NATOMS=1 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/cubicAl_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/cubicAl_domainBoundingVectors.inp + + subsection Optimization + set ION FORCE=true + set CELL STRESS=true + end + +end + + +subsection Boundary conditions + set SELF POTENTIAL RADIUS = 1.6 + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true +end + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 2 + + subsection Auto mesh generation parameters + set BASE MESH SIZE = 1.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AROUND ATOM = 0.5 + set MESH SIZE AT ATOM = 0.5 + end + +end + + +subsection Brillouin zone k point sampling options + + subsection Monkhorst-Pack (MP) grid generation + set SAMPLING POINTS 1 = 1 + set SAMPLING POINTS 2 = 1 + set SAMPLING POINTS 3 = 2 + set SAMPLING SHIFT 1 = 0 + set SAMPLING SHIFT 2 = 0 + set SAMPLING SHIFT 3 = 1 + end + + set USE GROUP SYMMETRY =false + set USE TIME REVERSAL SYMMETRY =false +end + + + +subsection DFT functional parameters + set PSEUDOPOTENTIAL CALCULATION =true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoAlONCV.inp + set EXCHANGE CORRELATION TYPE = 4 + set PSEUDO TESTS FLAG = true + set SPIN POLARIZATION=1 + set START MAGNETIZATION=0.4 +end + + +subsection SCF parameters + set MAXIMUM ITERATIONS = 100 + set TOLERANCE = 1e-6 + set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set ANDERSON SCHEME MIXING HISTORY = 70 + set TEMPERATURE = 500 + set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = true + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 + set LOWER BOUND WANTED SPECTRUM = -10.0 + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-3 + set ORTHOGONALIZATION TYPE=GS + end +end + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end diff --git a/tests/dft/pseudopotential/complex/fccAl_01.prm.in b/tests/dft/pseudopotential/complex/fccAl_01.prm.in index 636fd2f81..c90253df9 100644 --- a/tests/dft/pseudopotential/complex/fccAl_01.prm.in +++ b/tests/dft/pseudopotential/complex/fccAl_01.prm.in @@ -63,6 +63,7 @@ subsection SCF parameters set TEMPERATURE = 500 set TOLERANCE = 1e-7 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set CHEBYSHEV FILTER TOLERANCE=1e-3 diff --git a/tests/dft/pseudopotential/complex/fccAl_02.prm.in b/tests/dft/pseudopotential/complex/fccAl_02.prm.in index 38d7ed4c6..862fc820d 100644 --- a/tests/dft/pseudopotential/complex/fccAl_02.prm.in +++ b/tests/dft/pseudopotential/complex/fccAl_02.prm.in @@ -71,6 +71,7 @@ subsection SCF parameters set TEMPERATURE = 500 set TOLERANCE = 1e-6 set STARTING WFC=RANDOM + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set CHEBYSHEV FILTER TOLERANCE=1e-3 diff --git a/tests/dft/pseudopotential/complex/graphene_01.prm.in b/tests/dft/pseudopotential/complex/graphene_01.prm.in index 2bdbe9b14..edb1f189e 100644 --- a/tests/dft/pseudopotential/complex/graphene_01.prm.in +++ b/tests/dft/pseudopotential/complex/graphene_01.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in index 6fcfb6a1c..28dc03a65 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.mpirun=5.output b/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.mpirun=5.output new file mode 100644 index 000000000..0721cbc46 --- /dev/null +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.mpirun=5.output @@ -0,0 +1,50 @@ +number of atoms: 2 +number of atoms types: 1 +Z:12 +============================================================================================================================= +number of electrons: 20 +number of eigen values: 20 +============================================================================================================================= +Total number of k-points 2 +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 5.882191053999999752e+00 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : -2.941095526999999876e+00 5.094126882677563195e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 9.585777736000000715e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 6.666666666666666297e-01 3.333333333333333148e-01 5.000000000000000000e-01 +----------------------------------------------------------------------------------------- +Number Image Charges 2661 + +Finite element mesh information +------------------------------------------------- +number of elements: 976 +number of degrees of freedom: 10699 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -108.71526648 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000044,0.000026,0.003540 +AtomId 1: 0.005209,0.003007,0.003541 +-------------------------------------------------------------------------------------------- + +Absolute value of cell stress (Hartree/Bohr^3) +------------------------------------------------------------------------ +0.002554 0.000974 0.000000 +0.000974 0.001429 0.000000 +0.000000 0.000000 0.000536 +------------------------------------------------------------------------ diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in new file mode 100644 index 000000000..5966974cc --- /dev/null +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in @@ -0,0 +1,87 @@ +set VERBOSITY= 0 +set REPRODUCIBLE OUTPUT=true + +subsection Geometry + set NATOMS=2 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/hcpMgPrim_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/hcpMgPrim_domainBoundingVectors.inp + + subsection Optimization + set ION FORCE=true + set CELL STRESS=true + end + +end + + +subsection Boundary conditions + set SELF POTENTIAL RADIUS = 1.6 + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true +end + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 2 + + subsection Auto mesh generation parameters + set BASE MESH SIZE = 1.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AROUND ATOM = 0.5 + set MESH SIZE AT ATOM = 0.5 + end + +end + + +subsection Brillouin zone k point sampling options + + subsection Monkhorst-Pack (MP) grid generation + set SAMPLING POINTS 1 = 1 + set SAMPLING POINTS 2 = 1 + set SAMPLING POINTS 3 = 2 + set SAMPLING SHIFT 1 = 0 + set SAMPLING SHIFT 2 = 0 + set SAMPLING SHIFT 3 = 1 + end + + set USE GROUP SYMMETRY =false + set USE TIME REVERSAL SYMMETRY = true +end + + + +subsection DFT functional parameters + set PSEUDOPOTENTIAL CALCULATION =true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoMgONCV.inp + set PSEUDO TESTS FLAG = true + set EXCHANGE CORRELATION TYPE = 4 + set SPIN POLARIZATION=0 + set START MAGNETIZATION=0.0 +end + + +subsection SCF parameters + set MAXIMUM ITERATIONS = 100 + set TOLERANCE = 1e-7 + set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set ANDERSON SCHEME MIXING HISTORY = 70 + set TEMPERATURE = 500 + set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = true + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 + set LOWER BOUND WANTED SPECTRUM = -10.0 + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-3 + set ORTHOGONALIZATION TYPE=GS + end +end + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in index 5ea58476e..e39d61309 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01_c.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in index f9a89448e..0722ebb61 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01_d.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set SPECTRUM SPLIT CORE EIGENSTATES=6 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in index 5d5376aac..76405fb3b 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_02.prm.in @@ -74,6 +74,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in index 7a29e7190..e6d6b1e9f 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_02_b.prm.in @@ -75,6 +75,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 23 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in index 0b82947ae..d936b1b73 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in @@ -76,6 +76,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 23 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in index b22ae9dfe..ea6073c53 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_03.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in index 0681e7b28..7637d6dfc 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_04.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in index 94ffc6daa..f3740f110 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_04_b.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in index efff1ef23..8655cb0f5 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_04_c.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set SPECTRUM SPLIT CORE EIGENSTATES=6 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in index 2c7300dca..e55f5e521 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_05.prm.in @@ -68,6 +68,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in index 461a44b5e..4e0f4999f 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_06.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in index de7685b4c..2b561314a 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_06_b.prm.in @@ -70,6 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in index 6d6c99fb0..5795a526a 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_07.prm.in @@ -74,6 +74,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in index 746f8bdbf..dc34248bd 100644 --- a/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in +++ b/tests/dft/pseudopotential/complex/nitrogenMolecule_02.prm.in @@ -44,7 +44,7 @@ subsection SCF parameters set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 1e-5 - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 set ORTHOGONALIZATION TYPE=PGS diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in b/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in index 4a0685ae4..5c0e5f57f 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_01.prm.in @@ -50,7 +50,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in b/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in index 995b6c7e1..d8994b20e 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_01_b.prm.in @@ -50,7 +50,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in index 67d060483..0c3401e4a 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01.prm.in @@ -65,7 +65,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC = ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in index b1644bcf2..2dd0039af 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_b.prm.in @@ -65,7 +65,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in index d42121f40..e60d08df8 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_c.prm.in @@ -69,7 +69,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 27 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in index 58c812f7c..b6bdf24ea 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_d.prm.in @@ -69,7 +69,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 27 set SPECTRUM SPLIT CORE EIGENSTATES=7 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in index 5f35db14c..cc436d661 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_e.prm.in @@ -69,7 +69,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 27 set SPECTRUM SPLIT CORE EIGENSTATES=7 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in index 8af45446a..704e08103 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in @@ -69,7 +69,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 27 set SPECTRUM SPLIT CORE EIGENSTATES=7 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in index 945f0cb78..57a01988f 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in @@ -70,7 +70,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 27 set SPECTRUM SPLIT CORE EIGENSTATES=7 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_h.mpirun=5.output b/tests/dft/pseudopotential/real/hcpMgPrim_01_h.mpirun=5.output new file mode 100644 index 000000000..b736f3b10 --- /dev/null +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_h.mpirun=5.output @@ -0,0 +1,42 @@ +number of atoms: 2 +number of atoms types: 1 +Z:12 +============================================================================================================================= +number of electrons: 20 +number of eigen values: 20 +============================================================================================================================= +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 5.882191053999999752e+00 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : -2.941095526999999876e+00 5.094126882677563195e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 9.585777736000000715e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 6.666666666666666297e-01 3.333333333333333148e-01 5.000000000000000000e-01 +----------------------------------------------------------------------------------------- +Number Image Charges 2661 + +Finite element mesh information +------------------------------------------------- +number of elements: 976 +number of degrees of freedom: 10699 +------------------------------------------------- + +Setting initial guess for wavefunctions.... + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -108.57498649 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000048,0.000027,0.005601 +AtomId 1: 0.005188,0.002995,0.005599 +-------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in new file mode 100644 index 000000000..b8b5172cd --- /dev/null +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in @@ -0,0 +1,81 @@ +set VERBOSITY= 0 +set REPRODUCIBLE OUTPUT=true + +subsection Geometry + set NATOMS=2 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/hcpMgPrim_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/hcpMgPrim_domainBoundingVectors.inp + + subsection Optimization + set ION FORCE=true + set CELL STRESS=false + end + +end + + +subsection Boundary conditions + set SELF POTENTIAL RADIUS = 1.6 + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true +end + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 2 + + subsection Auto mesh generation parameters + set BASE MESH SIZE = 1.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AROUND ATOM = 0.5 + set MESH SIZE AT ATOM = 0.5 + end + +end + + +subsection Brillouin zone k point sampling options + + subsection Monkhorst-Pack (MP) grid generation + set SAMPLING POINTS 1 = 1 + set SAMPLING POINTS 2 = 1 + set SAMPLING POINTS 3 = 1 + set SAMPLING SHIFT 1 = 0 + set SAMPLING SHIFT 2 = 0 + set SAMPLING SHIFT 3 = 0 + end +end + + + +subsection DFT functional parameters + set PSEUDOPOTENTIAL CALCULATION =true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoMgONCV.inp + set PSEUDO TESTS FLAG = true + set EXCHANGE CORRELATION TYPE = 4 +end + + +subsection SCF parameters + set MAXIMUM ITERATIONS = 100 + set TOLERANCE = 1e-6 + set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set ANDERSON SCHEME MIXING HISTORY = 70 + set TEMPERATURE = 500 + set STARTING WFC = ATOMIC + set HIGHER QUAD NLP = true + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 + set LOWER BOUND WANTED SPECTRUM = -10.0 + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-3 + end +end + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in index a7fcfa084..1f29326fe 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_02.prm.in @@ -65,7 +65,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in index db446f311..f2728486e 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_02_b.prm.in @@ -65,7 +65,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in index 8600b7672..04f28343c 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_02_c.prm.in @@ -65,7 +65,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in index 37f525e96..df08a26d3 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03.prm.in @@ -65,6 +65,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in index 2d98e7571..f675c6769 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_b.prm.in @@ -65,6 +65,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in index fb2e62c68..58bd1017b 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_c.prm.in @@ -68,6 +68,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 23 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in index 095046700..0e62aebe1 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_d.prm.in @@ -68,6 +68,7 @@ subsection SCF parameters set ANDERSON SCHEME MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 23 set LOWER BOUND WANTED SPECTRUM = -10.0 diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_e.mpirun=5.output b/tests/dft/pseudopotential/real/hcpMgPrim_03_e.mpirun=5.output new file mode 100644 index 000000000..5b5bd0f96 --- /dev/null +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_e.mpirun=5.output @@ -0,0 +1,41 @@ +number of atoms: 2 +number of atoms types: 1 +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 5.882191053999999752e+00 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : -2.941095526999999876e+00 5.094126882677563195e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 9.585777736000000715e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 6.666666666666666297e-01 3.333333333333333148e-01 5.000000000000000000e-01 +----------------------------------------------------------------------------------------- +Number Image Charges 2661 + +Finite element mesh information +------------------------------------------------- +number of elements: 976 +number of degrees of freedom: 32917 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 20 +number of eigen values: 40 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -108.89374054 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.000005,0.000003,0.000023 +AtomId 1: 0.000102,0.000059,0.000031 +-------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in new file mode 100644 index 000000000..33f195a79 --- /dev/null +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in @@ -0,0 +1,84 @@ +set VERBOSITY= 0 +set REPRODUCIBLE OUTPUT=true + +subsection Geometry + set NATOMS=2 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/hcpMgPrim_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/hcpMgPrim_domainBoundingVectors.inp + + subsection Optimization + set ION FORCE=true + set CELL STRESS=false + end + +end + + +subsection Boundary conditions + set SELF POTENTIAL RADIUS = 1.6 + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true +end + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 3 + + subsection Auto mesh generation parameters + set BASE MESH SIZE = 1.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AROUND ATOM = 0.5 + set MESH SIZE AT ATOM = 0.5 + end + +end + + +subsection Brillouin zone k point sampling options + + subsection Monkhorst-Pack (MP) grid generation + set SAMPLING POINTS 1 = 1 + set SAMPLING POINTS 2 = 1 + set SAMPLING POINTS 3 = 1 + set SAMPLING SHIFT 1 = 0 + set SAMPLING SHIFT 2 = 0 + set SAMPLING SHIFT 3 = 0 + end +end + + + +subsection DFT functional parameters + set PSEUDOPOTENTIAL CALCULATION =true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoMgONCV.inp + set PSEUDO TESTS FLAG = true + set EXCHANGE CORRELATION TYPE = 4 + set SPIN POLARIZATION=1 + set START MAGNETIZATION=0.2 +end + + +subsection SCF parameters + set MAXIMUM ITERATIONS = 100 + set TOLERANCE = 1e-6 + set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set ANDERSON SCHEME MIXING HISTORY = 70 + set TEMPERATURE = 500 + set STARTING WFC=RANDOM + set HIGHER QUAD NLP = true + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 40 + set LOWER BOUND WANTED SPECTRUM = -10.0 + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-3 + set ORTHOGONALIZATION TYPE=LW + set ENABLE SWITCH TO GS=true + end +end + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in index f925ad190..8cdf5879e 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_01.prm.in @@ -43,7 +43,7 @@ subsection SCF parameters set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 5e-6 - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 set ORTHOGONALIZATION TYPE=LW diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in index b414bd539..c4634c616 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_02.prm.in @@ -44,7 +44,7 @@ subsection SCF parameters set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 1e-5 - + set HIGHER QUAD NLP = false subsection Eigen-solver parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 set ORTHOGONALIZATION TYPE=PGS diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 3a1b0fd3d..42ee3f0c1 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -67,6 +67,7 @@ namespace dftParameters bool triMatPGSOpt=true; bool reuseWfcGeoOpt=true; extern double mpiAllReduceMessageBlockSizeMB=2.0; + bool useHigherQuadNLP=true; void declare_parameters(ParameterHandler &prm) { @@ -343,6 +344,10 @@ namespace dftParameters Patterns::Bool(), "[Advanced] Boolean parameter specifying whether to compute the total energy at the end of every SCF. Setting it to false can lead to some computational time savings."); + prm.declare_entry("HIGHER QUAD NLP", "true", + Patterns::Bool(), + "[Advanced] Boolean parameter specifying whether to use a higher order quadrature rule for the calculations involving the non-local part of the pseudopotential. Default setting is true. Could be safely set to false if you are using a very refined mesh."); + prm.enter_subsection ("Eigen-solver parameters"); { @@ -526,6 +531,7 @@ namespace dftParameters dftParameters::mixingParameter = prm.get_double("ANDERSON SCHEME MIXING PARAMETER"); dftParameters::startingWFCType = prm.get("STARTING WFC"); dftParameters::computeEnergyEverySCF = prm.get_bool("COMPUTE ENERGY EACH ITER"); + dftParameters::useHigherQuadNLP = prm.get_bool("HIGHER QUAD NLP"); prm.enter_subsection ("Eigen-solver parameters"); From 1f37d208ec0f587a0c35769c8f912d02ff302ead Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Wed, 12 Sep 2018 21:59:17 -0400 Subject: [PATCH 37/59] Fixes #198 Implement mixed precision arithmetic for subspace rotation step in PGS. Added relevant ctests. ctests passed. --- include/dftParameters.h | 1 + include/headers.h | 64 ++++ include/linearAlgebraOperations.h | 1 + include/linearAlgebraOperationsInternal.h | 22 ++ src/linAlg/linearAlgebraOperationsInternal.cc | 293 ++++++++++++++++-- src/linAlg/pseudoGS.cc | 35 ++- ...evOrthogonalizedSubspaceIterationSolver.cc | 20 +- .../real/nitrogenMolecule_03.mpirun=10.output | 34 ++ .../real/nitrogenMolecule_03.prm.in | 49 +++ .../nitrogenMolecule_03_b.mpirun=10.output | 34 ++ .../real/nitrogenMolecule_03_b.prm.in | 56 ++++ utils/dftParameters.cc | 6 + 12 files changed, 555 insertions(+), 60 deletions(-) create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03.mpirun=10.output create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in diff --git a/include/dftParameters.h b/include/dftParameters.h index 410d170b7..501e25f5a 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -78,6 +78,7 @@ namespace dftfe { extern bool reuseWfcGeoOpt; extern double mpiAllReduceMessageBlockSizeMB; extern bool useHigherQuadNLP; + extern bool useMixedPrecisionPGS; /** * Declare parameters. diff --git a/include/headers.h b/include/headers.h index 21ab3b97b..6bd3eb03a 100644 --- a/include/headers.h +++ b/include/headers.h @@ -85,9 +85,73 @@ namespace dftfe { #ifdef USE_COMPLEX typedef std::complex number; + typedef std::complex numberLowPrec; #else typedef double number; + typedef float numberLowPrec; #endif + + inline MPI_Datatype + mpi_type_id(const int *) + { + return MPI_INT; + } + + inline MPI_Datatype + mpi_type_id(const long int *) + { + return MPI_LONG; + } + + inline MPI_Datatype + mpi_type_id(const unsigned int *) + { + return MPI_UNSIGNED; + } + + inline MPI_Datatype + mpi_type_id(const unsigned long int *) + { + return MPI_UNSIGNED_LONG; + } + + inline MPI_Datatype + mpi_type_id(const unsigned long long int *) + { + return MPI_UNSIGNED_LONG_LONG; + } + + + inline MPI_Datatype + mpi_type_id(const float *) + { + return MPI_FLOAT; + } + + + inline MPI_Datatype + mpi_type_id(const double *) + { + return MPI_DOUBLE; + } + + inline MPI_Datatype + mpi_type_id(const long double *) + { + return MPI_LONG_DOUBLE; + } + + inline MPI_Datatype + mpi_type_id(const std::complex *) + { + return MPI_COMPLEX; + } + + inline MPI_Datatype + mpi_type_id(const std::complex *) + { + return MPI_DOUBLE_COMPLEX; + } } diff --git a/include/linearAlgebraOperations.h b/include/linearAlgebraOperations.h index 2bdf0c60c..fb0aaa4fd 100644 --- a/include/linearAlgebraOperations.h +++ b/include/linearAlgebraOperations.h @@ -34,6 +34,7 @@ namespace dftfe void zdscal_(const unsigned int *n, const double *alpha, std::complex *x, const unsigned int *inc); void daxpy_(const unsigned int *n, const double *alpha, double *x, const unsigned int *incx, double *y, const unsigned int *incy); void dgemm_(const char* transA, const char* transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const double *alpha, const double *A, const unsigned int *lda, const double *B, const unsigned int *ldb, const double *beta, double *C, const unsigned int *ldc); + void sgemm_(const char* transA, const char* transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const float *alpha, const float *A, const unsigned int *lda, const float *B, const unsigned int *ldb, const float *beta, float *C, const unsigned int *ldc); #ifdef WITH_MKL void dgemm_batch_(const char* transa_array,const char* transb_array,const unsigned int* m_array,const unsigned int* n_array,const unsigned int* k_array,const double* alpha_array,double** a_array,const unsigned int * lda_array,const double ** b_array,const unsigned int * ldb_array,const double * beta_array,double** c_array,const unsigned int * ldc_array,const unsigned int* group_count,const unsigned int* group_size); #endif diff --git a/include/linearAlgebraOperationsInternal.h b/include/linearAlgebraOperationsInternal.h index 8db403a5b..1ece9f6a9 100644 --- a/include/linearAlgebraOperationsInternal.h +++ b/include/linearAlgebraOperationsInternal.h @@ -108,6 +108,28 @@ namespace dftfe const dealii::ScaLAPACKMatrix & rotationMatPar, const bool rotationMatTranspose=false, const bool isRotationMatLowerTria=false); + + + /** @brief Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray + * stored in the column major format (N x M). Q is rotationMatPar. + * + * The subspace rotation inside this function is done in a blocked approach + * which avoids creation of full serial rotation matrix memory, and also avoids creation + * of another full subspaceVectorsArray memory. + * + */ + void subspaceRotationPGSMixedPrec + (dataTypes::number* subspaceVectorsArray, + const unsigned int subspaceVectorsArrayLocalSize, + const unsigned int N, + const unsigned int numberCoreVectors, + dataTypes::number* nonCoreVectorsArray, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + const dealii::ScaLAPACKMatrix & rotationMatPar, + const bool rotationMatTranspose=false); + #endif } } diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index c7d4fd282..d28fa83cf 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -237,21 +237,12 @@ namespace dftfe // Sum local XTrunc^{T}*XcBlock across domain decomposition processors -#ifdef USE_COMPLEX MPI_Allreduce(MPI_IN_PLACE, &overlapMatrixBlock[0], D*B, - MPI_C_DOUBLE_COMPLEX, + dataTypes::mpi_type_id(&overlapMatrixBlock[0]), MPI_SUM, mpiComm); -#else - MPI_Allreduce(MPI_IN_PLACE, - &overlapMatrixBlock[0], - D*B, - MPI_DOUBLE, - MPI_SUM, - mpiComm); -#endif //Copying only the lower triangular part to the ScaLAPACK overlap matrix if (processGrid->is_process_active()) @@ -345,14 +336,14 @@ namespace dftfe * the Sum_{vector_blocks} QBvecTrunc*XBdofTrunc^{T} result * for each {dof_block}. */ - const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, + const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, bandGroupLowHighPlusOneIndices[1]); - const unsigned int dofsBlockSize=std::min(maxNumLocalDofs, + const unsigned int dofsBlockSize=std::min(maxNumLocalDofs, dftParameters::subspaceRotDofsBlockSize); - std::vector rotationMatBlock(vectorsBlockSize*N,0.0); - std::vector rotatedVectorsMatBlock(N*dofsBlockSize,0.0); - std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); + std::vector rotationMatBlock(vectorsBlockSize*N,0.0); + std::vector rotatedVectorsMatBlock(N*dofsBlockSize,0.0); + std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); if (dftParameters::verbosity>=4) @@ -429,21 +420,12 @@ namespace dftfe } -#ifdef USE_COMPLEX MPI_Allreduce(MPI_IN_PLACE, &rotationMatBlock[0], vectorsBlockSize*D, - MPI_C_DOUBLE_COMPLEX, + dataTypes::mpi_type_id(&rotationMatBlock[0]), MPI_SUM, mpiComm); -#else - MPI_Allreduce(MPI_IN_PLACE, - &rotationMatBlock[0], - vectorsBlockSize*D, - MPI_DOUBLE, - MPI_SUM, - mpiComm); -#endif if (BDof!=0) { @@ -493,8 +475,255 @@ namespace dftfe *(nonCoreVectorsArray+iNode*numberNonCoreVectors +iWave) =*(subspaceVectorsArray+iNode*N+numberCoreVectors+iWave); - //8 bytes for double - const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/8; + const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/sizeof(T); + + for (unsigned int i=0; i & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + const dealii::ScaLAPACKMatrix & rotationMatPar, + const bool rotationMatTranspose) + { +#ifdef USE_COMPLEX + AssertThrow(false,dftUtils::ExcNotImplementedYet()); +#else + const unsigned int numLocalDofs = subspaceVectorsArrayLocalSize/N; + + const unsigned int maxNumLocalDofs=dealii::Utilities::MPI::max(numLocalDofs, + mpiComm); + + //band group parallelization data structures + const unsigned int numberBandGroups= + dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); + const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); + std::vector bandGroupLowHighPlusOneIndices; + dftUtils::createBandParallelizationIndices(interBandGroupComm, + N, + bandGroupLowHighPlusOneIndices); + + std::map globalToLocalColumnIdMap; + std::map globalToLocalRowIdMap; + internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, + rotationMatPar, + globalToLocalRowIdMap, + globalToLocalColumnIdMap); + + + /* + * Q*X^{T} is done in a blocked approach for memory optimization: + * Sum_{dof_blocks} Sum_{vector_blocks} QBvec*XBdof^{T}. + * The result of each QBvec*XBdof^{T} + * has a much smaller memory compared to Q*X^{T}. + * X^{T} (denoted by subspaceVectorsArray in the code with column major format storage) + * is a matrix with size (N x MLoc). + * N is denoted by numberWaveFunctions in the code. + * MLoc, which is number of local dofs is denoted by numLocalDofs in the code. + * QBvec is a matrix of size (BVec x N). BVec is the vectors block size. + * XBdof is a matrix of size (N x BDof). BDof is the block size of dofs. + * A further optimization is done to reduce floating point operations when + * Q is a lower triangular matrix in the subspace rotation step of PGS: + * Then it suffices to compute only the multiplication of lower + * triangular part of Q with X^{T}. To exploit this, we do + * Sum_{dof_blocks} Sum_{vector_blocks} QBvecTrunc*XBdofTrunc^{T}. + * where QBvecTrunc is a (BVec x D) sub matrix of QBvec with the column indices + * ranging from O to D-1, where D=jvec(lowest global index of QBvec) + BVec. + * XBdofTrunc is a (D x BDof) sub matrix of XBdof with the row indices + * ranging from 0 to D-1. + * X^{T} is directly updated from + * the Sum_{vector_blocks} QBvecTrunc*XBdofTrunc^{T} result + * for each {dof_block}. + */ + const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, + bandGroupLowHighPlusOneIndices[1]); + const unsigned int dofsBlockSize=std::min(maxNumLocalDofs, + dftParameters::subspaceRotDofsBlockSize); + + std::vector rotationMatBlock(vectorsBlockSize*N,0.0); + std::vector rotatedVectorsMatBlockTemp(vectorsBlockSize*dofsBlockSize,0.0); + + std::vector subspaceVectorsArraySinglePrec(subspaceVectorsArray, + subspaceVectorsArray+ + subspaceVectorsArrayLocalSize); + + if (dftParameters::verbosity>=4) + dftUtils::printCurrentMemoryUsage(mpiComm, + "Inside Blocked susbpace rotation"); + + for (unsigned int idof = 0; idof < maxNumLocalDofs; idof += dofsBlockSize) + { + // Correct block dimensions if block "goes off edge of" the matrix + unsigned int BDof=0; + if (numLocalDofs>=idof) + BDof = std::min(dofsBlockSize, numLocalDofs-idof); + + for (unsigned int jvec = 0; jvec < N; jvec += vectorsBlockSize) + { + // Correct block dimensions if block "goes off edge of" the matrix + const unsigned int BVec = std::min(vectorsBlockSize, N-jvec); + + const unsigned int D=jvec+BVec; + + // If one plus the ending index of a block lies within a band parallelization group + // do computations for that block within the band group, otherwise skip that + // block. This is only activated if NPBAND>1 + if ((jvec+BVec)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && + (jvec+BVec)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) + { + const char transA = 'N',transB = 'N'; + const dataTypes::numberLowPrec scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; + + std::fill(rotationMatBlock.begin(),rotationMatBlock.end(),0.); + + //Extract QBVec from parallel ScaLAPACK matrix Q + if (rotationMatTranspose) + { + if (processGrid->is_process_active()) + for (unsigned int i = 0; i ::iterator it= + globalToLocalColumnIdMap.find(j+jvec); + if(it!=globalToLocalColumnIdMap.end()) + rotationMatBlock[i*BVec+j]= + rotationMatPar.local_el(localRowId, + it->second); + + if (i==(j+jvec)) + rotationMatBlock[i*BVec+j]-=(dataTypes::numberLowPrec)1.0; + } + } + } + else + { + if (processGrid->is_process_active()) + for (unsigned int i = 0; i ::iterator it= + globalToLocalRowIdMap.find(j+jvec); + if (it!=globalToLocalRowIdMap.end()) + rotationMatBlock[i*BVec+j]= + rotationMatPar.local_el(it->second, + localColumnId); + if (i==(j+jvec)) + rotationMatBlock[i*BVec+j]-=(dataTypes::numberLowPrec)1.0; + } + } + } + + + MPI_Allreduce(MPI_IN_PLACE, + &rotationMatBlock[0], + vectorsBlockSize*D, + dataTypes::mpi_type_id(&rotationMatBlock[0]), + MPI_SUM, + mpiComm); + + if (BDof!=0) + { + + sgemm_(&transA, + &transB, + &BVec, + &BDof, + &D, + &scalarCoeffAlpha, + &rotationMatBlock[0], + &BVec, + &subspaceVectorsArraySinglePrec[0]+idof*N, + &N, + &scalarCoeffBeta, + &rotatedVectorsMatBlockTemp[0], + &BVec); + + for (unsigned int i = 0; i 1) + { + if (numberCoreVectors!=0) + { + + const unsigned int numberNonCoreVectors=N-numberCoreVectors; + for(unsigned int iNode = 0; iNode < numLocalDofs; ++iNode) + for(unsigned int iWave = 0; iWave < numberNonCoreVectors; ++iWave) + *(nonCoreVectorsArray+iNode*numberNonCoreVectors +iWave) + =*(subspaceVectorsArray+iNode*N+numberCoreVectors+iWave); + + const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6 + /sizeof(dataTypes::number); for (unsigned int i=0; i & processGrid, diff --git a/src/linAlg/pseudoGS.cc b/src/linAlg/pseudoGS.cc index 4eddc4635..99d6e043a 100644 --- a/src/linAlg/pseudoGS.cc +++ b/src/linAlg/pseudoGS.cc @@ -136,17 +136,30 @@ namespace dftfe //X=X*L^{-1}^{T} implemented as X^{T}=L^{-1}*X^{T} with X^{T} stored in the column major format computing_timer.enter_section("Subspace rotation PGS"); - internal::subspaceRotation(&X[0], - X.size(), - numberVectors, - numberCoreVectors, - &tempNonCoreVectorsArray[0], - processGrid, - interBandGroupComm, - mpiComm, - LMatPar, - overlapMatPropertyPostCholesky==dealii::LAPACKSupport::Property::upper_triangular?true:false, - dftParameters::triMatPGSOpt?true:false); + + if (!dftParameters::useMixedPrecisionPGS) + internal::subspaceRotation(&X[0], + X.size(), + numberVectors, + numberCoreVectors, + &tempNonCoreVectorsArray[0], + processGrid, + interBandGroupComm, + mpiComm, + LMatPar, + overlapMatPropertyPostCholesky==dealii::LAPACKSupport::Property::upper_triangular?true:false, + dftParameters::triMatPGSOpt?true:false); + else + internal::subspaceRotationPGSMixedPrec(&X[0], + X.size(), + numberVectors, + numberCoreVectors, + &tempNonCoreVectorsArray[0], + processGrid, + interBandGroupComm, + mpiComm, + LMatPar, + overlapMatPropertyPostCholesky==dealii::LAPACKSupport::Property::upper_triangular?true:false); computing_timer.exit_section("Subspace rotation PGS"); diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index d05b2a8ae..230186161 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -253,31 +253,17 @@ namespace dftfe{ if (numberBandGroups>1) { computing_timer.enter_section("MPI All Reduce wavefunctions across all band groups"); -#ifdef USE_COMPLEX - //16 bytes for std::complex - const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/16; -#else - //8 bytes for double - const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/8; -#endif + + const unsigned int blockSize=dftParameters::mpiAllReduceMessageBlockSizeMB*1e+6/sizeof(dataTypes::number); for (unsigned int i=0; i Date: Wed, 12 Sep 2018 22:32:55 -0400 Subject: [PATCH 38/59] Minor change in parameter description. --- utils/dftParameters.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 88108c540..afa2cb50c 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -407,7 +407,7 @@ namespace dftParameters prm.declare_entry("USE MIXED PREC PGS", "false", Patterns::Bool(), - "[Advanced] Use mixed precision arithmetic in susbpace rotation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Default setting is false."); + "[Advanced] Use mixed precision arithmetic in susbpace rotation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false."); } prm.leave_subsection (); } From 7f4af2edb77c08f1a3228f00b60043658504b72d Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Thu, 13 Sep 2018 18:24:08 -0400 Subject: [PATCH 39/59] Fixed bug in mixed precision subspace rot PGS, added ctest corresponding to that bug. ctests passed. --- src/dft/energyCalculator.cc | 5 +- src/linAlg/linearAlgebraOperationsInternal.cc | 21 ++++--- .../real/nitrogenMolecule_03.mpirun=10.output | 4 +- .../real/nitrogenMolecule_03.prm.in | 2 +- .../nitrogenMolecule_03_b.mpirun=10.output | 2 +- .../real/nitrogenMolecule_03_b.prm.in | 2 +- .../nitrogenMolecule_03_c.mpirun=10.output | 34 +++++++++++ .../real/nitrogenMolecule_03_c.prm.in | 58 +++++++++++++++++++ 8 files changed, 115 insertions(+), 13 deletions(-) create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03_c.mpirun=10.output create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in diff --git a/src/dft/energyCalculator.cc b/src/dft/energyCalculator.cc index c4d034c5d..89fa79a32 100644 --- a/src/dft/energyCalculator.cc +++ b/src/dft/energyCalculator.cc @@ -51,7 +51,10 @@ namespace dftfe pcout <::iterator it= globalToLocalColumnIdMap.find(j+jvec); if(it!=globalToLocalColumnIdMap.end()) + { rotationMatBlock[i*BVec+j]= rotationMatPar.local_el(localRowId, it->second); - if (i==(j+jvec)) - rotationMatBlock[i*BVec+j]-=(dataTypes::numberLowPrec)1.0; - } + } + } + + if (i>=jvec && i<(jvec+BVec)) + if (globalToLocalColumnIdMap.find(i)!=globalToLocalColumnIdMap.end()) + rotationMatBlock[i*BVec+i-jvec]-=(dataTypes::numberLowPrec)1.0; } } else @@ -658,12 +661,16 @@ namespace dftfe std::map::iterator it= globalToLocalRowIdMap.find(j+jvec); if (it!=globalToLocalRowIdMap.end()) + { rotationMatBlock[i*BVec+j]= rotationMatPar.local_el(it->second, localColumnId); - if (i==(j+jvec)) - rotationMatBlock[i*BVec+j]-=(dataTypes::numberLowPrec)1.0; + } } + + if (i>=jvec && i<(jvec+BVec)) + if (globalToLocalRowIdMap.find(i)!=globalToLocalRowIdMap.end()) + rotationMatBlock[i*BVec+i-jvec]-=(dataTypes::numberLowPrec)1.0; } } diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03.mpirun=10.output b/tests/dft/pseudopotential/real/nitrogenMolecule_03.mpirun=10.output index 600ad126d..25608355f 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03.mpirun=10.output +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03.mpirun=10.output @@ -27,8 +27,8 @@ Reading initial guess for electron-density..... Pseudopotential initalization.... Starting SCF iterations.... -SCF iterations converged to the specified tolerance after: 12 iterations. +SCF iterations converged to the specified tolerance after: 13 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.83455710 + Total energy: -19.834557 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in index bf9585232..1e88dcf27 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in @@ -43,7 +43,7 @@ subsection SCF parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 set ORTHOGONALIZATION TYPE=PGS set CHEBYSHEV POLYNOMIAL DEGREE = 30 - set CHEBYSHEV FILTER TOLERANCE=5e-3 + set CHEBYSHEV FILTER TOLERANCE=2e-3 set USE MIXED PREC PGS=true end end diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output index c15b2796c..98f3257f8 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output @@ -31,4 +31,4 @@ SCF iterations converged to the specified tolerance after: 12 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.83455721 + Total energy: -19.834557 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in index 8631d3f77..d3c010da5 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in @@ -48,7 +48,7 @@ subsection SCF parameters set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 set ORTHOGONALIZATION TYPE=PGS set CHEBYSHEV POLYNOMIAL DEGREE = 30 - set CHEBYSHEV FILTER TOLERANCE=5e-3 + set CHEBYSHEV FILTER TOLERANCE=2e-3 set USE MIXED PREC PGS=true set WFC BLOCK SIZE=3 set SUBSPACE ROT DOFS BLOCK SIZE=500 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.mpirun=10.output b/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.mpirun=10.output new file mode 100644 index 000000000..25608355f --- /dev/null +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.mpirun=10.output @@ -0,0 +1,34 @@ +number of atoms: 2 +number of atoms types: 1 +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 8.000000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 8.000000000000000000e+01 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 8.000000000000000000e+01 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.199999999999999956e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 1.199999999999999956e+00 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 960 +number of degrees of freedom: 31257 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.834557 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in new file mode 100644 index 000000000..52824099b --- /dev/null +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in @@ -0,0 +1,58 @@ +set VERBOSITY = 0 +set REPRODUCIBLE OUTPUT = true + +subsection Geometry + set NATOMS=2 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/nitrogenMolecule_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/nitrogenMolecule_domainVectors.inp +end + +subsection Boundary conditions + set PERIODIC1 = false + set PERIODIC2 = false + set PERIODIC3 = false + set SELF POTENTIAL RADIUS = 4.0 +end + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER=3 + subsection Auto mesh generation parameters + set MESH SIZE AROUND ATOM = 0.7 + set BASE MESH SIZE = 10.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AT ATOM = 0.7 + end +end + +subsection DFT functional parameters + set EXCHANGE CORRELATION TYPE = 4 + set PSEUDOPOTENTIAL CALCULATION = true + set PSEUDO TESTS FLAG = true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoNGGA.inp +end + +subsection Parallelization + set NPBAND=2 +end + + +subsection SCF parameters + set ANDERSON SCHEME MIXING HISTORY = 70 + set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MAXIMUM ITERATIONS = 40 + set TEMPERATURE = 500 + set TOLERANCE = 5e-6 + set HIGHER QUAD NLP = true + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 + set ORTHOGONALIZATION TYPE=PGS + set CHEBYSHEV POLYNOMIAL DEGREE = 30 + set CHEBYSHEV FILTER TOLERANCE=2e-3 + set USE MIXED PREC PGS=true + set WFC BLOCK SIZE=3 + set SUBSPACE ROT DOFS BLOCK SIZE=500 + set SCALAPACKPROCS=2 + set SPECTRUM SPLIT CORE EIGENSTATES=3 + end +end From 0163888a0d74e98e815acb870e231c242f942665 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Thu, 13 Sep 2018 19:21:14 -0400 Subject: [PATCH 40/59] Refactored eshelby tensor functions- step towards two field optimization. ctests passed. --- include/eshelbyTensor.h | 61 ++++++------ include/eshelbyTensorSpinPolarized.h | 38 +++----- ...onfigurationalForceEEshelbyFPSPFnlLinFE.cc | 35 +++---- ...lForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc | 46 ++++----- .../computeStressEEshelbyEPSPEnlEk.cc | 14 ++- ...uteStressSpinPolarizedEEshelbyEPSPEnlEk.cc | 19 ++-- src/force/eshelbyTensor/eshelbyTensor.cc | 97 +++++++++++-------- .../eshelbyTensorSpinPolarized.cc | 43 +++----- 8 files changed, 172 insertions(+), 181 deletions(-) diff --git a/include/eshelbyTensor.h b/include/eshelbyTensor.h index 28d01e329..e5dba3248 100644 --- a/include/eshelbyTensor.h +++ b/include/eshelbyTensor.h @@ -65,41 +65,40 @@ namespace dftfe { /// Eshelby tensor corresponding to nuclear self energy Tensor<2,C_DIM,double > getVselfBallEshelbyTensor(const Tensor<1,C_DIM,double > & gradVself); - /// Local part of the Eshelby tensor for periodic case (only considers terms which are not summed over k points) - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicNoKPoints - (const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, - const Tensor<1,C_DIM,VectorizedArray > & gradRho, - const VectorizedArray & exc, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRho, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt); ///Local part of the Eshelby tensor for periodic case (only considers terms which are summed over k points) - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicKPoints - (std::vector > >::const_iterator psiBegin, - std::vector > > >::const_iterator gradPsiBegin, - const std::vector & kPointCoordinates, - const std::vector & kPointWeights, - const std::vector > & eigenValues_, - const double fermiEnergy_, - const double tVal); + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorPeriodicKPoints + (std::vector > >::const_iterator psiBegin, + std::vector > > >::const_iterator gradPsiBegin, + const std::vector & kPointCoordinates, + const std::vector & kPointWeights, + const std::vector > & eigenValues_, + const double fermiEnergy_, + const double tVal); /// Local part of the Eshelby tensor for non-periodic case - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorNonPeriodic(const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, - const Tensor<1,C_DIM,VectorizedArray > & gradRho, - const VectorizedArray & exc, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRho, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt, - std::vector >::const_iterator psiBegin, - std::vector > >::const_iterator gradPsiBegin, - const std::vector & eigenValues_, - const double fermiEnergy_, - const double tVal); + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorNonPeriodic + (std::vector >::const_iterator psiBegin, + std::vector > >::const_iterator gradPsiBegin, + const std::vector & eigenValues_, + const double fermiEnergy_, + const double tVal); + + /// All-electron electrostatic part of the Eshelby tensor + Tensor<2,C_DIM,VectorizedArray > getEElectroEshelbyTensor + (const VectorizedArray & phiTot, + const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, + const VectorizedArray & rho, + const VectorizedArray & pseudoVLoc, + const VectorizedArray & phiExt); + + /// exchange-correlation and psp part of the ELoc Eshelby tensor + Tensor<2,C_DIM,VectorizedArray > getELocXcPspEshelbyTensor + (const VectorizedArray & rho, + const Tensor<1,C_DIM,VectorizedArray > & gradRho, + const VectorizedArray & exc, + const Tensor<1,C_DIM,VectorizedArray > & derExcGradRho, + const VectorizedArray & pseudoVLoc); /// Local pseudotential force contribution Tensor<1,C_DIM,VectorizedArray > getFPSPLocal(const VectorizedArray rho, diff --git a/include/eshelbyTensorSpinPolarized.h b/include/eshelbyTensorSpinPolarized.h index fbbe91e96..14d0a3e2b 100644 --- a/include/eshelbyTensorSpinPolarized.h +++ b/include/eshelbyTensorSpinPolarized.h @@ -52,20 +52,8 @@ namespace dftfe { */ namespace eshelbyTensorSP { - ///Local part of the Eshelby tensor for periodic case (only considers terms which are not summed over k points) - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicNoKPoints - (const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, - const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin0, - const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin1, - const VectorizedArray & exc, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin0, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin1, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt); ///Local part of the Eshelby tensor for periodic case (only considers terms which are summed over k points) - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicKPoints + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorPeriodicKPoints (std::vector > >::const_iterator psiSpin0Begin, std::vector > >::const_iterator psiSpin1Begin, std::vector > > >::const_iterator gradPsiSpin0Begin, @@ -77,18 +65,8 @@ namespace dftfe { const double tVal); ///Local part of the Eshelby tensor for non-periodic case - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorNonPeriodic - (const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, - const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin0, - const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin1, - const VectorizedArray & exc, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin0, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin1, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt, - std::vector >::const_iterator psiSpin0Begin, + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorNonPeriodic + (std::vector >::const_iterator psiSpin0Begin, std::vector >::const_iterator psiSpin1Begin, std::vector > >::const_iterator gradPsiSpin0Begin, std::vector > >::const_iterator gradPsiSpin1Begin, @@ -96,6 +74,16 @@ namespace dftfe { const double fermiEnergy_, const double tVal); + /// exchange-correlation and psp part of the ELoc Eshelby tensor + Tensor<2,C_DIM,VectorizedArray > getELocXcPspEshelbyTensor + (const VectorizedArray & rho, + const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin0, + const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin1, + const VectorizedArray & exc, + const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin0, + const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin1, + const VectorizedArray & pseudoVLoc); + ///Local pseudotential force contribution Tensor<1,C_DIM,VectorizedArray > getFPSPLocal(const VectorizedArray rho, const Tensor<1,C_DIM,VectorizedArray > & gradPseudoVLoc, diff --git a/src/force/configurationalForceCompute/configurationalForceEEshelbyFPSPFnlLinFE.cc b/src/force/configurationalForceCompute/configurationalForceEEshelbyFPSPFnlLinFE.cc index 6a5f1dd49..31f6f0a94 100644 --- a/src/force/configurationalForceCompute/configurationalForceEEshelbyFPSPFnlLinFE.cc +++ b/src/force/configurationalForceCompute/configurationalForceEEshelbyFPSPFnlLinFE.cc @@ -515,18 +515,22 @@ void forceClass::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( VectorizedArray phiTot_q =phiTotEval.get_value(q); Tensor<1,C_DIM,VectorizedArray > gradPhiTot_q =phiTotEval.get_gradient(q); VectorizedArray phiExt_q =phiExtEval.get_value(q)*phiExtFactor; -#ifdef USE_COMPLEX - Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensor::getELocEshelbyTensorPeriodicNoKPoints + + Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensor::getEElectroEshelbyTensor (phiTot_q, gradPhiTot_q, rhoQuads[q], - gradRhoQuads[q], - excQuads[q], - derExchCorrEnergyWithGradRhoOutQuads[q], pseudoVLocQuads[q], phiExt_q); - Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensor::getELocEshelbyTensorPeriodicKPoints + E+=eshelbyTensor::getELocXcPspEshelbyTensor + (rhoQuads[q], + gradRhoQuads[q], + excQuads[q], + derExchCorrEnergyWithGradRhoOutQuads[q], + pseudoVLocQuads[q]); +#ifdef USE_COMPLEX + Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensor::getELocWfcEshelbyTensorPeriodicKPoints (psiQuads.begin()+q*numEigenVectors*numKPoints, gradPsiQuads.begin()+q*numEigenVectors*numKPoints, dftPtr->d_kPointCoordinates, @@ -535,19 +539,12 @@ void forceClass::computeConfigurationalForceEEshelbyTensorFPSPFnlLinFE( dftPtr->fermiEnergy, dftParameters::TVal); #else - Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensor::getELocEshelbyTensorNonPeriodic(phiTot_q, - gradPhiTot_q, - rhoQuads[q], - gradRhoQuads[q], - excQuads[q], - derExchCorrEnergyWithGradRhoOutQuads[q], - pseudoVLocQuads[q], - phiExt_q, - psiQuads.begin()+q*numEigenVectors, - gradPsiQuads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); + E+=eshelbyTensor::getELocWfcEshelbyTensorNonPeriodic + (psiQuads.begin()+q*numEigenVectors, + gradPsiQuads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); #endif Tensor<1,C_DIM,VectorizedArray > F=zeroTensor3; if(isPseudopotential) diff --git a/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc b/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc index 73bb25979..ab5d41384 100644 --- a/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc +++ b/src/force/configurationalForceCompute/configurationalForceSpinPolarizedEEshelbyFPSPFnlLinFE.cc @@ -579,20 +579,24 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor VectorizedArray phiTot_q =phiTotEval.get_value(q); Tensor<1,C_DIM,VectorizedArray > gradPhiTot_q =phiTotEval.get_gradient(q); VectorizedArray phiExt_q =phiExtEval.get_value(q)*phiExtFactor; -#ifdef USE_COMPLEX - Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensorSP::getELocEshelbyTensorPeriodicNoKPoints + + Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensor::getEElectroEshelbyTensor (phiTot_q, gradPhiTot_q, rhoQuads[q], - gradRhoSpin0Quads[q], - gradRhoSpin1Quads[q], - excQuads[q], - derExchCorrEnergyWithGradRhoOutSpin0Quads[q], - derExchCorrEnergyWithGradRhoOutSpin1Quads[q], pseudoVLocQuads[q], phiExt_q); - Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensorSP::getELocEshelbyTensorPeriodicKPoints + E+=eshelbyTensorSP::getELocXcPspEshelbyTensor + (rhoQuads[q], + gradRhoSpin0Quads[q], + gradRhoSpin1Quads[q], + excQuads[q], + derExchCorrEnergyWithGradRhoOutSpin0Quads[q], + derExchCorrEnergyWithGradRhoOutSpin1Quads[q], + pseudoVLocQuads[q]); +#ifdef USE_COMPLEX + Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensorSP::getELocWfcEshelbyTensorPeriodicKPoints (psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, gradPsiSpin0Quads.begin()+q*numEigenVectors*numKPoints, @@ -603,24 +607,14 @@ void forceClass::computeConfigurationalForceSpinPolarizedEEshelbyTensor dftPtr->fermiEnergy, dftParameters::TVal); #else - Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensorSP::getELocEshelbyTensorNonPeriodic - (phiTot_q, - gradPhiTot_q, - rhoQuads[q], - gradRhoSpin0Quads[q], - gradRhoSpin1Quads[q], - excQuads[q], - derExchCorrEnergyWithGradRhoOutSpin0Quads[q], - derExchCorrEnergyWithGradRhoOutSpin1Quads[q], - pseudoVLocQuads[q], - phiExt_q, - psiSpin0Quads.begin()+q*numEigenVectors, - psiSpin1Quads.begin()+q*numEigenVectors, - gradPsiSpin0Quads.begin()+q*numEigenVectors, - gradPsiSpin1Quads.begin()+q*numEigenVectors, - (dftPtr->eigenValues)[0], - dftPtr->fermiEnergy, - dftParameters::TVal); + E+=eshelbyTensorSP::getELocWfcEshelbyTensorNonPeriodic + (psiSpin0Quads.begin()+q*numEigenVectors, + psiSpin1Quads.begin()+q*numEigenVectors, + gradPsiSpin0Quads.begin()+q*numEigenVectors, + gradPsiSpin1Quads.begin()+q*numEigenVectors, + (dftPtr->eigenValues)[0], + dftPtr->fermiEnergy, + dftParameters::TVal); #endif Tensor<1,C_DIM,VectorizedArray > F=zeroTensor3; if(isPseudopotential) diff --git a/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc b/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc index 78e75d865..65def6343 100644 --- a/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc +++ b/src/force/configurationalStressCompute/computeStressEEshelbyEPSPEnlEk.cc @@ -372,17 +372,21 @@ void forceClass::computeStressEEshelbyEPSPEnlEk() VectorizedArray phiTot_q =phiTotEval.get_value(q); Tensor<1,C_DIM,VectorizedArray > gradPhiTot_q =phiTotEval.get_gradient(q); VectorizedArray phiExt_q =phiExtEval.get_value(q)*phiExtFactor; - Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensor::getELocEshelbyTensorPeriodicNoKPoints + Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensor::getEElectroEshelbyTensor (phiTot_q, gradPhiTot_q, rhoQuads[q], - gradRhoQuads[q], - excQuads[q], - derExchCorrEnergyWithGradRhoOutQuads[q], pseudoVLocQuads[q], phiExt_q); - Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensor::getELocEshelbyTensorPeriodicKPoints + E+=eshelbyTensor::getELocXcPspEshelbyTensor + (rhoQuads[q], + gradRhoQuads[q], + excQuads[q], + derExchCorrEnergyWithGradRhoOutQuads[q], + pseudoVLocQuads[q]); + + Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensor::getELocWfcEshelbyTensorPeriodicKPoints (psiQuads.begin()+q*numEigenVectors*numKPoints, gradPsiQuads.begin()+q*numEigenVectors*numKPoints, dftPtr->d_kPointCoordinates, diff --git a/src/force/configurationalStressCompute/computeStressSpinPolarizedEEshelbyEPSPEnlEk.cc b/src/force/configurationalStressCompute/computeStressSpinPolarizedEEshelbyEPSPEnlEk.cc index 7002ff509..d0baaab52 100644 --- a/src/force/configurationalStressCompute/computeStressSpinPolarizedEEshelbyEPSPEnlEk.cc +++ b/src/force/configurationalStressCompute/computeStressSpinPolarizedEEshelbyEPSPEnlEk.cc @@ -447,19 +447,24 @@ void forceClass::computeStressSpinPolarizedEEshelbyEPSPEnlEk() VectorizedArray phiTot_q =phiTotEval.get_value(q); Tensor<1,C_DIM,VectorizedArray > gradPhiTot_q =phiTotEval.get_gradient(q); VectorizedArray phiExt_q =phiExtEval.get_value(q)*phiExtFactor; - Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensorSP::getELocEshelbyTensorPeriodicNoKPoints + + Tensor<2,C_DIM,VectorizedArray > E=eshelbyTensor::getEElectroEshelbyTensor (phiTot_q, gradPhiTot_q, rhoQuads[q], - gradRhoSpin0Quads[q], - gradRhoSpin1Quads[q], - excQuads[q], - derExchCorrEnergyWithGradRhoOutSpin0Quads[q], - derExchCorrEnergyWithGradRhoOutSpin1Quads[q], pseudoVLocQuads[q], phiExt_q); - Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensorSP::getELocEshelbyTensorPeriodicKPoints + E+=eshelbyTensorSP::getELocXcPspEshelbyTensor + (rhoQuads[q], + gradRhoSpin0Quads[q], + gradRhoSpin1Quads[q], + excQuads[q], + derExchCorrEnergyWithGradRhoOutSpin0Quads[q], + derExchCorrEnergyWithGradRhoOutSpin1Quads[q], + pseudoVLocQuads[q]); + + Tensor<2,C_DIM,VectorizedArray > EKPoints=eshelbyTensorSP::getELocWfcEshelbyTensorPeriodicKPoints (psiSpin0Quads.begin()+q*numEigenVectors*numKPoints, psiSpin1Quads.begin()+q*numEigenVectors*numKPoints, gradPsiSpin0Quads.begin()+q*numEigenVectors*numKPoints, diff --git a/src/force/eshelbyTensor/eshelbyTensor.cc b/src/force/eshelbyTensor/eshelbyTensor.cc index 2966aef10..a2b6eb7f3 100644 --- a/src/force/eshelbyTensor/eshelbyTensor.cc +++ b/src/force/eshelbyTensor/eshelbyTensor.cc @@ -66,32 +66,14 @@ namespace eshelbyTensor return eshelbyTensor; } - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicNoKPoints - (const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, - const Tensor<1,C_DIM,VectorizedArray > & gradRho, - const VectorizedArray & exc, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRho, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt) - { - Tensor<2,C_DIM,VectorizedArray > eshelbyTensor= make_vectorized_array(1.0/(4.0*M_PI))*outer_product(gradPhiTot,gradPhiTot)-outer_product(derExcGradRho,gradRho); - VectorizedArray identityTensorFactor=make_vectorized_array(-1.0/(8.0*M_PI))*scalar_product(gradPhiTot,gradPhiTot)+rho*phiTot+exc*rho + (pseudoVLoc-phiExt)*rho; - eshelbyTensor[0][0]+=identityTensorFactor; - eshelbyTensor[1][1]+=identityTensorFactor; - eshelbyTensor[2][2]+=identityTensorFactor; - return eshelbyTensor; - } - - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicKPoints - (std::vector > >::const_iterator psiBegin, - std::vector > > >::const_iterator gradPsiBegin, - const std::vector & kPointCoordinates, - const std::vector & kPointWeights, - const std::vector > & eigenValues_, - const double fermiEnergy_, - const double tVal) + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorPeriodicKPoints + (std::vector > >::const_iterator psiBegin, + std::vector > > >::const_iterator gradPsiBegin, + const std::vector & kPointCoordinates, + const std::vector & kPointWeights, + const std::vector > & eigenValues_, + const double fermiEnergy_, + const double tVal) { Tensor<2,C_DIM,VectorizedArray > eshelbyTensor; for (unsigned int idim=0; idim > getELocEshelbyTensorNonPeriodic(const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, - const Tensor<1,C_DIM,VectorizedArray > & gradRho, - const VectorizedArray & exc, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRho, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt, - std::vector >::const_iterator psiBegin, - std::vector > >::const_iterator gradPsiBegin, - const std::vector & eigenValues_, - const double fermiEnergy_, - const double tVal) + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorNonPeriodic + (std::vector >::const_iterator psiBegin, + std::vector > >::const_iterator gradPsiBegin, + const std::vector & eigenValues_, + const double fermiEnergy_, + const double tVal) { - Tensor<2,C_DIM,VectorizedArray > eshelbyTensor= make_vectorized_array(1.0/(4.0*M_PI))*outer_product(gradPhiTot,gradPhiTot)-outer_product(derExcGradRho,gradRho); - VectorizedArray identityTensorFactor=make_vectorized_array(-1.0/(8.0*M_PI))*scalar_product(gradPhiTot,gradPhiTot)+rho*phiTot+exc*rho + (pseudoVLoc-phiExt)*rho; + Tensor<2,C_DIM,VectorizedArray > eshelbyTensor; + for (unsigned int idim=0; idim identityTensorFactor=make_vectorized_array(0.0); std::vector >::const_iterator it1=psiBegin; std::vector > >::const_iterator it2=gradPsiBegin; @@ -174,6 +153,42 @@ namespace eshelbyTensor } + Tensor<2,C_DIM,VectorizedArray > getEElectroEshelbyTensor + (const VectorizedArray & phiTot, + const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, + const VectorizedArray & rho, + const VectorizedArray & pseudoVLoc, + const VectorizedArray & phiExt) + { + + Tensor<2,C_DIM,VectorizedArray > eshelbyTensor= + make_vectorized_array(1.0/(4.0*M_PI))*outer_product(gradPhiTot,gradPhiTot); + VectorizedArray identityTensorFactor=make_vectorized_array(-1.0/(8.0*M_PI))*scalar_product(gradPhiTot,gradPhiTot)+rho*phiTot -phiExt*rho; + + eshelbyTensor[0][0]+=identityTensorFactor; + eshelbyTensor[1][1]+=identityTensorFactor; + eshelbyTensor[2][2]+=identityTensorFactor; + return eshelbyTensor; + } + + Tensor<2,C_DIM,VectorizedArray > getELocXcPspEshelbyTensor + (const VectorizedArray & rho, + const Tensor<1,C_DIM,VectorizedArray > & gradRho, + const VectorizedArray & exc, + const Tensor<1,C_DIM,VectorizedArray > & derExcGradRho, + const VectorizedArray & pseudoVLoc) + { + + Tensor<2,C_DIM,VectorizedArray > eshelbyTensor=-outer_product(derExcGradRho,gradRho); + VectorizedArray identityTensorFactor=exc*rho + pseudoVLoc*rho; + + + eshelbyTensor[0][0]+=identityTensorFactor; + eshelbyTensor[1][1]+=identityTensorFactor; + eshelbyTensor[2][2]+=identityTensorFactor; + return eshelbyTensor; + } + Tensor<2,C_DIM,VectorizedArray > getEnlEshelbyTensorNonPeriodic(const std::vector > > & ZetaDeltaV, const std::vector > & projectorKetTimesPsiTimesV, std::vector >::const_iterator psiBegin, diff --git a/src/force/eshelbyTensor/eshelbyTensorSpinPolarized.cc b/src/force/eshelbyTensor/eshelbyTensorSpinPolarized.cc index 1f2e6664b..077f457a0 100644 --- a/src/force/eshelbyTensor/eshelbyTensorSpinPolarized.cc +++ b/src/force/eshelbyTensor/eshelbyTensorSpinPolarized.cc @@ -23,27 +23,25 @@ namespace dftfe { namespace eshelbyTensorSP { - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicNoKPoints - (const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, + Tensor<2,C_DIM,VectorizedArray > getELocXcPspEshelbyTensor + (const VectorizedArray & rho, const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin0, const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin1, const VectorizedArray & exc, const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin0, const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin1, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt) + const VectorizedArray & pseudoVLoc) { - Tensor<2,C_DIM,VectorizedArray > eshelbyTensor= make_vectorized_array(1.0/(4.0*M_PI))*outer_product(gradPhiTot,gradPhiTot)-outer_product(derExcGradRhoSpin0,gradRhoSpin0)-outer_product(derExcGradRhoSpin1,gradRhoSpin1); - VectorizedArray identityTensorFactor=make_vectorized_array(-1.0/(8.0*M_PI))*scalar_product(gradPhiTot,gradPhiTot)+rho*phiTot+exc*rho + (pseudoVLoc-phiExt)*rho; + Tensor<2,C_DIM,VectorizedArray > eshelbyTensor= -outer_product(derExcGradRhoSpin0,gradRhoSpin0) + -outer_product(derExcGradRhoSpin1,gradRhoSpin1); + VectorizedArray identityTensorFactor=exc*rho + pseudoVLoc*rho; eshelbyTensor[0][0]+=identityTensorFactor; eshelbyTensor[1][1]+=identityTensorFactor; eshelbyTensor[2][2]+=identityTensorFactor; return eshelbyTensor; } - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorPeriodicKPoints + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorPeriodicKPoints (std::vector > >::const_iterator psiSpin0Begin, std::vector > >::const_iterator psiSpin1Begin, std::vector > > >::const_iterator gradPsiSpin0Begin, @@ -58,12 +56,9 @@ namespace eshelbyTensorSP Tensor<2,C_DIM,VectorizedArray > eshelbyTensor; for (unsigned int idim=0; idim identityTensorFactor=make_vectorized_array(0.0); std::vector > >::const_iterator it1Spin0=psiSpin0Begin; @@ -117,18 +112,8 @@ namespace eshelbyTensorSP return eshelbyTensor; } - Tensor<2,C_DIM,VectorizedArray > getELocEshelbyTensorNonPeriodic - (const VectorizedArray & phiTot, - const Tensor<1,C_DIM,VectorizedArray > & gradPhiTot, - const VectorizedArray & rho, - const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin0, - const Tensor<1,C_DIM,VectorizedArray > & gradRhoSpin1, - const VectorizedArray & exc, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin0, - const Tensor<1,C_DIM,VectorizedArray > & derExcGradRhoSpin1, - const VectorizedArray & pseudoVLoc, - const VectorizedArray & phiExt, - std::vector >::const_iterator psiSpin0Begin, + Tensor<2,C_DIM,VectorizedArray > getELocWfcEshelbyTensorNonPeriodic + (std::vector >::const_iterator psiSpin0Begin, std::vector >::const_iterator psiSpin1Begin, std::vector > >::const_iterator gradPsiSpin0Begin, std::vector > >::const_iterator gradPsiSpin1Begin, @@ -137,8 +122,12 @@ namespace eshelbyTensorSP const double tVal) { - Tensor<2,C_DIM,VectorizedArray > eshelbyTensor= make_vectorized_array(1.0/(4.0*M_PI))*outer_product(gradPhiTot,gradPhiTot)-outer_product(derExcGradRhoSpin0,gradRhoSpin0)-outer_product(derExcGradRhoSpin1,gradRhoSpin1); - VectorizedArray identityTensorFactor=make_vectorized_array(-1.0/(8.0*M_PI))*scalar_product(gradPhiTot,gradPhiTot)+rho*phiTot+exc*rho + (pseudoVLoc-phiExt)*rho; + Tensor<2,C_DIM,VectorizedArray > eshelbyTensor; + for (unsigned int idim=0; idim identityTensorFactor=make_vectorized_array(0.0); std::vector >::const_iterator it1Spin0=psiSpin0Begin; std::vector > >::const_iterator it2Spin0=gradPsiSpin0Begin; From e93cb3fb93e1df4c71d3201156cac721fdd93a07 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Fri, 14 Sep 2018 02:27:44 -0400 Subject: [PATCH 41/59] Implemented adaptive chebyshev filtering states. Tested successfully on a small system. Doing more tests. ctests passed. --- include/dftParameters.h | 1 + ...evOrthogonalizedSubspaceIterationSolver.cc | 11 ++- .../real/hcpMgPrim_01_i.mpirun=8.output | 42 +++++++++ .../real/hcpMgPrim_01_i.prm.in | 91 +++++++++++++++++++ utils/dftParameters.cc | 6 ++ 5 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_i.mpirun=8.output create mode 100644 tests/dft/pseudopotential/real/hcpMgPrim_01_i.prm.in diff --git a/include/dftParameters.h b/include/dftParameters.h index 501e25f5a..5ddf344c6 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -79,6 +79,7 @@ namespace dftfe { extern double mpiAllReduceMessageBlockSizeMB; extern bool useHigherQuadNLP; extern bool useMixedPrecisionPGS; + extern unsigned int numAdaptiveFilterStates; /** * Declare parameters. diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index 230186161..7e37d7424 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -215,7 +215,16 @@ namespace dftfe{ //call Chebyshev filtering function only for the current block to be filtered //and does in-place filtering computing_timer.enter_section("Chebyshev filtering opt"); - linearAlgebraOperations::chebyshevFilter(operatorMatrix, + if (jvec+BVec Date: Sun, 16 Sep 2018 12:30:49 -0400 Subject: [PATCH 42/59] changes in clearRhoData() to clean up Broyden datastructure after each groundstate. More ctests added for ionic and cell relaxations while using Broyden mixing in SCF. --- src/dft/initRho.cc | 4 ++++ tests/dft/pseudopotential/real/aluminumSingleAtom_02.output | 2 +- tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/dft/initRho.cc b/src/dft/initRho.cc index 1be8b4332..76ab89f2a 100644 --- a/src/dft/initRho.cc +++ b/src/dft/initRho.cc @@ -32,6 +32,10 @@ void dftClass::clearRhoData() rhoOutValsSpinPolarized.clear(); gradRhoInValsSpinPolarized.clear(); gradRhoOutValsSpinPolarized.clear(); + dFBroyden.clear(); + graddFBroyden.clear() ; + uBroyden.clear(); + gradUBroyden.clear() ; } template diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output index b9e26b443..6c7626d79 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02.output @@ -31,7 +31,7 @@ SCF iterations converged to the specified tolerance after: 9 iterations. Energy computations (Hartree) ------------------- - Total energy: -35.96431251 + Total energy: -35.96469222 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output index 297853275..deb00e3c2 100644 --- a/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output +++ b/tests/dft/pseudopotential/real/aluminumSingleAtom_02_b.output @@ -31,7 +31,7 @@ SCF iterations converged to the specified tolerance after: 11 iterations. Energy computations (Hartree) ------------------- - Total energy: -36.01068519 + Total energy: -36.01107261 Absolute values of ion forces (Hartree/Bohr) -------------------------------------------------------------------------------------------- From 8eaadfa645b2ef3e77c3336e45542ee846f0393a Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Sun, 16 Sep 2018 12:33:36 -0400 Subject: [PATCH 43/59] ctests passed --- .../complex/fccAl_02_b.mpirun=16.output | 79 ++++++++ .../pseudopotential/complex/fccAl_02_b.prm.in | 81 ++++++++ .../nitrogenMolecule_02_b.mpirun=10.output | 182 ++++++++++++++++++ .../real/nitrogenMolecule_02_b.prm.in | 55 ++++++ 4 files changed, 397 insertions(+) create mode 100644 tests/dft/pseudopotential/complex/fccAl_02_b.mpirun=16.output create mode 100644 tests/dft/pseudopotential/complex/fccAl_02_b.prm.in create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_02_b.mpirun=10.output create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in diff --git a/tests/dft/pseudopotential/complex/fccAl_02_b.mpirun=16.output b/tests/dft/pseudopotential/complex/fccAl_02_b.mpirun=16.output new file mode 100644 index 000000000..57557f4f7 --- /dev/null +++ b/tests/dft/pseudopotential/complex/fccAl_02_b.mpirun=16.output @@ -0,0 +1,79 @@ +number of atoms: 4 +number of atoms types: 1 +Total number of k-points 8 +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 7.599999999999999645e+00 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 7.599999999999999645e+00 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 7.599999999999999645e+00 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 0.000000000000000000e+00 5.000000000000000000e-01 5.000000000000000000e-01 +AtomId 2: 5.000000000000000000e-01 0.000000000000000000e+00 5.000000000000000000e-01 +AtomId 3: 5.000000000000000000e-01 5.000000000000000000e-01 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- +Number Image Charges 3664 + +Finite element mesh information +------------------------------------------------- +number of elements: 1408 +number of degrees of freedom: 15849 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 12 +number of eigen values: 20 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 11 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -8.36530748 + +Absolute value of cell stress (Hartree/Bohr^3) +------------------------------------------------------------------------ +0.000011 0.000000 0.000000 +0.000000 0.000011 0.000000 +0.000000 0.000000 0.000011 +------------------------------------------------------------------------ +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 7.596205 0.000000 0.000000 +v2 : 0.000000 7.596205 0.000000 +v3 : 0.000000 0.000000 7.596205 +----------------------------------------------------------------------------------------- +-----Fractional coordinates of atoms------ +AtomId 0: 0.000000 0.000000 0.000000 +AtomId 1: 0.000000 0.500000 0.500000 +AtomId 2: 0.500000 0.000000 0.500000 +AtomId 3: 0.500000 0.500000 0.000000 +----------------------------------------------------------------------------------------- +Number Image Charges 3664 + +Finite element mesh information +------------------------------------------------- +number of elements: 1408 +number of degrees of freedom: 15849 +------------------------------------------------- + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 11 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -8.36532516 + +Absolute value of cell stress (Hartree/Bohr^3) +------------------------------------------------------------------------ +0.000008 0.000000 0.000000 +0.000000 0.000008 0.000000 +0.000000 0.000000 0.000008 +------------------------------------------------------------------------ diff --git a/tests/dft/pseudopotential/complex/fccAl_02_b.prm.in b/tests/dft/pseudopotential/complex/fccAl_02_b.prm.in new file mode 100644 index 000000000..3d0b872fc --- /dev/null +++ b/tests/dft/pseudopotential/complex/fccAl_02_b.prm.in @@ -0,0 +1,81 @@ +set VERBOSITY = 0 +set REPRODUCIBLE OUTPUT=true + +subsection Boundary conditions + set PERIODIC1 = true + set PERIODIC2 = true + set PERIODIC3 = true + set SELF POTENTIAL RADIUS = 0 +end + + +subsection Brillouin zone k point sampling options + set USE TIME REVERSAL SYMMETRY = true + subsection Monkhorst-Pack (MP) grid generation + set SAMPLING POINTS 1 = 2 + set SAMPLING POINTS 2 = 2 + set SAMPLING POINTS 3 = 2 + set SAMPLING SHIFT 1 = 1 + set SAMPLING SHIFT 2 = 1 + set SAMPLING SHIFT 3 = 1 + end +end + +subsection Parallelization + set NPKPT=4 +end + +subsection DFT functional parameters + set EXCHANGE CORRELATION TYPE = 1 + set PSEUDOPOTENTIAL CALCULATION = true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoAlKB.inp + set PSEUDO TESTS FLAG = true +end + + + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER = 2 + subsection Auto mesh generation parameters + set ATOM BALL RADIUS = 2.0 + set BASE MESH SIZE = 4.0 + set MESH SIZE AT ATOM = 0.6 + set MESH SIZE AROUND ATOM = 0.6 + end + +end + +subsection Geometry + set NATOMS=4 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/fccAl_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/fccAl_domainBoundingVectors.inp + subsection Optimization + set STRESS TOL = 1e-5 + set CELL OPT = true + set CELL CONSTRAINT TYPE = 1 + end +end + + +subsection Poisson problem parameters + set MAXIMUM ITERATIONS = 10000 + set TOLERANCE = 1e-12 +end + + +subsection SCF parameters + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.2 + set MIXING SCHEME = BROYDEN + set MAXIMUM ITERATIONS = 50 + set TEMPERATURE = 500 + set TOLERANCE = 1e-6 + set STARTING WFC=RANDOM + set HIGHER QUAD NLP = false + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 20 + set CHEBYSHEV FILTER TOLERANCE=1e-3 + set ORTHOGONALIZATION TYPE=LW + end +end diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.mpirun=10.output b/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.mpirun=10.output new file mode 100644 index 000000000..d23d685d6 --- /dev/null +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.mpirun=10.output @@ -0,0 +1,182 @@ +number of atoms: 2 +number of atoms types: 1 +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 8.000000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 8.000000000000000000e+01 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 8.000000000000000000e+01 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.300000000000000044e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 1.300000000000000044e+00 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2792 +number of degrees of freedom: 88305 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 16 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.79765864 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.292445,0.000000,0.000000 +AtomId 1: 0.292445,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.095288 0.000000 0.000000 +AtomId 1: 1.095288 0.000000 0.000000 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2736 +number of degrees of freedom: 86793 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 18 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.89600352 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.126065,0.000000,0.000000 +AtomId 1: 0.126065,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -0.940180 0.000000 0.000000 +AtomId 1: 0.940180 0.000000 0.000000 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2624 +number of degrees of freedom: 83069 +------------------------------------------------- + +Reading initial guess for PSI.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 14 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.83953900 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.401760,0.000000,0.000000 +AtomId 1: 0.401760,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.058242 0.000000 0.000000 +AtomId 1: 1.058242 0.000000 0.000000 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2736 +number of degrees of freedom: 86793 +------------------------------------------------- + +Reading initial guess for PSI.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 13 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.90260753 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.044727,0.000000,0.000000 +AtomId 1: 0.044727,0.000000,0.000000 +-------------------------------------------------------------------------------------------- +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 80.000000 0.000000 0.000000 +v2 : 0.000000 80.000000 0.000000 +v3 : 0.000000 0.000000 80.000000 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.046415 0.000000 0.000000 +AtomId 1: 1.046415 0.000000 0.000000 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 2736 +number of degrees of freedom: 86793 +------------------------------------------------- + +Interpolating previous groundstate PSI into the new finite element mesh.... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 11 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.90333319 + +Absolute values of ion forces (Hartree/Bohr) +-------------------------------------------------------------------------------------------- +AtomId 0: 0.013450,0.000000,0.000000 +AtomId 1: 0.013450,0.000000,0.000000 +-------------------------------------------------------------------------------------------- diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in new file mode 100644 index 000000000..03ba7440e --- /dev/null +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in @@ -0,0 +1,55 @@ +set VERBOSITY = 0 +set REPRODUCIBLE OUTPUT = true + +subsection Geometry + set NATOMS=2 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/nitrogenMolecule_coordinates2.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/nitrogenMolecule_domainVectors.inp + subsection Optimization + set ION OPT=true + set FORCE TOL=4e-2 + set ION RELAX FLAGS FILE =@SOURCE_DIR@/nitrogenMolecule_relaxationFlags.inp + set REUSE WFC=true + end +end + +subsection Boundary conditions + set PERIODIC1 = false + set PERIODIC2 = false + set PERIODIC3 = false + set SELF POTENTIAL RADIUS = 4.0 +end + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER=3 + subsection Auto mesh generation parameters + set MESH SIZE AROUND ATOM = 0.5 + set BASE MESH SIZE = 13.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AT ATOM = 0.5 + end +end + +subsection DFT functional parameters + set EXCHANGE CORRELATION TYPE = 4 + set PSEUDOPOTENTIAL CALCULATION = true + set PSEUDO TESTS FLAG = true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoNGGA.inp +end + +subsection SCF parameters + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.2 + set MIXING SCHEME = BROYDEN + set MAXIMUM ITERATIONS = 40 + set TEMPERATURE = 500 + set TOLERANCE = 1e-5 + set HIGHER QUAD NLP = false + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 + set ORTHOGONALIZATION TYPE=PGS + set CHEBYSHEV POLYNOMIAL DEGREE = 40 + set CHEBYSHEV FILTER TOLERANCE=1e-2 + end +end From 339542b05b76a1e39036e4fa71eab3c3db8df132 Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Sun, 16 Sep 2018 13:57:36 -0400 Subject: [PATCH 44/59] input parameter file changes on recent ctests --- tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in | 4 ++-- tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in | 4 ++-- tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in | 4 ++-- tests/dft/pseudopotential/real/hcpMgPrim_01_i.prm.in | 4 ++-- tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in | 4 ++-- tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in | 4 ++-- tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in | 4 ++-- tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in index 704e08103..0373992f6 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_f.prm.in @@ -65,8 +65,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC set HIGHER QUAD NLP = false diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in index 57a01988f..2b939b470 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_g.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC set HIGHER QUAD NLP = false diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in index b8b5172cd..e184253b7 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_h.prm.in @@ -61,8 +61,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC = ATOMIC set HIGHER QUAD NLP = true diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_01_i.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_01_i.prm.in index 37702ba3c..991f56477 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_01_i.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_01_i.prm.in @@ -65,8 +65,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC= ATOMIC set HIGHER QUAD NLP = false diff --git a/tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in b/tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in index 33f195a79..0ba41b07b 100644 --- a/tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in +++ b/tests/dft/pseudopotential/real/hcpMgPrim_03_e.prm.in @@ -63,8 +63,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=RANDOM set HIGHER QUAD NLP = true diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in index 1e88dcf27..2d987157a 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03.prm.in @@ -33,8 +33,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 5e-6 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in index d3c010da5..32ddad40a 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.prm.in @@ -38,8 +38,8 @@ end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 5e-6 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in index 52824099b..bef3d6392 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_c.prm.in @@ -38,8 +38,8 @@ end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 5e-6 From 7cb2c3ed6514de0a949fb61c8f176576a5a75f74 Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Sun, 16 Sep 2018 14:40:42 -0400 Subject: [PATCH 45/59] few more ctest file input changed. ctests passed --- tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in | 4 ++-- tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in | 4 ++-- tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in b/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in index a8c2c4db6..bdedcf15d 100644 --- a/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in +++ b/tests/dft/pseudopotential/complex/cubicAlPrim_01_b.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-6 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC set HIGHER QUAD NLP = true diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in index 5966974cc..dc87ca409 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_01_b.prm.in @@ -66,8 +66,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC set HIGHER QUAD NLP = true diff --git a/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in b/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in index d936b1b73..fcbada626 100644 --- a/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in +++ b/tests/dft/pseudopotential/complex/hcpMgPrim_02_c.prm.in @@ -72,8 +72,8 @@ end subsection SCF parameters set MAXIMUM ITERATIONS = 100 set TOLERANCE = 1e-7 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 - set ANDERSON SCHEME MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 set TEMPERATURE = 500 set STARTING WFC=ATOMIC set HIGHER QUAD NLP = false From 829b260d25991d4bfd09c3711f16791e5dcb129b Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Sun, 16 Sep 2018 18:11:39 -0400 Subject: [PATCH 46/59] one ctest input changed --- tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in index 03ba7440e..0ff407b06 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_02_b.prm.in @@ -41,7 +41,7 @@ end subsection SCF parameters set MIXING HISTORY = 70 set MIXING PARAMETER = 0.2 - set MIXING SCHEME = BROYDEN + set MIXING METHOD = BROYDEN set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 1e-5 From 68396a1d6c8243935b2f1b8b0d788b1b0169baea Mon Sep 17 00:00:00 2001 From: Krishnendu Ghosh Date: Sun, 16 Sep 2018 20:57:22 -0400 Subject: [PATCH 47/59] one more ctest input parameter changed. --- tests/dft/pseudopotential/complex/fccAl_02_b.prm.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/dft/pseudopotential/complex/fccAl_02_b.prm.in b/tests/dft/pseudopotential/complex/fccAl_02_b.prm.in index 3d0b872fc..19eb2a9f4 100644 --- a/tests/dft/pseudopotential/complex/fccAl_02_b.prm.in +++ b/tests/dft/pseudopotential/complex/fccAl_02_b.prm.in @@ -67,7 +67,7 @@ end subsection SCF parameters set MIXING HISTORY = 70 set MIXING PARAMETER = 0.2 - set MIXING SCHEME = BROYDEN + set MIXING METHOD = BROYDEN set MAXIMUM ITERATIONS = 50 set TEMPERATURE = 500 set TOLERANCE = 1e-6 From b16ccd9cab82673111c1cf1d76c8ce2fc8c68226 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Mon, 17 Sep 2018 00:09:50 -0400 Subject: [PATCH 48/59] Modified demo examples corresponding to Broyden related changes. --- demo/ex1/parameterFile_a.prm | 4 ++-- demo/ex1/parameterFile_b.prm | 4 ++-- demo/ex2/parameterFile_a.prm | 4 ++-- demo/ex2/parameterFile_b.prm | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/demo/ex1/parameterFile_a.prm b/demo/ex1/parameterFile_a.prm index 7a3e15041..1dd754e83 100644 --- a/demo/ex1/parameterFile_a.prm +++ b/demo/ex1/parameterFile_a.prm @@ -28,8 +28,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 1e-5 diff --git a/demo/ex1/parameterFile_b.prm b/demo/ex1/parameterFile_b.prm index 84238f4ca..31991421e 100644 --- a/demo/ex1/parameterFile_b.prm +++ b/demo/ex1/parameterFile_b.prm @@ -30,8 +30,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 40 set TEMPERATURE = 500 set TOLERANCE = 1e-5 diff --git a/demo/ex2/parameterFile_a.prm b/demo/ex2/parameterFile_a.prm index c4b9cfe81..3865f920f 100644 --- a/demo/ex2/parameterFile_a.prm +++ b/demo/ex2/parameterFile_a.prm @@ -46,8 +46,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 50 set TEMPERATURE = 500 set TOLERANCE = 1e-5 diff --git a/demo/ex2/parameterFile_b.prm b/demo/ex2/parameterFile_b.prm index 269d07d8d..eb1242a2a 100644 --- a/demo/ex2/parameterFile_b.prm +++ b/demo/ex2/parameterFile_b.prm @@ -48,8 +48,8 @@ subsection DFT functional parameters end subsection SCF parameters - set ANDERSON SCHEME MIXING HISTORY = 70 - set ANDERSON SCHEME MIXING PARAMETER = 0.5 + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 set MAXIMUM ITERATIONS = 50 set TEMPERATURE = 500 set TOLERANCE = 1e-5 From 3c06ee7c4eac553958e38a26cc569aceb93a0b8a Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Mon, 17 Sep 2018 04:41:03 -0400 Subject: [PATCH 49/59] Implemented mixed precision in overlap matrix computation in PGS. --- include/linearAlgebraOperationsInternal.h | 19 ++ src/linAlg/linearAlgebraOperationsInternal.cc | 172 ++++++++++++++++++ src/linAlg/pseudoGS.cc | 23 ++- utils/dftParameters.cc | 2 +- 4 files changed, 208 insertions(+), 8 deletions(-) diff --git a/include/linearAlgebraOperationsInternal.h b/include/linearAlgebraOperationsInternal.h index 1ece9f6a9..785ab9772 100644 --- a/include/linearAlgebraOperationsInternal.h +++ b/include/linearAlgebraOperationsInternal.h @@ -88,6 +88,25 @@ namespace dftfe const MPI_Comm &mpiComm, dealii::ScaLAPACKMatrix & overlapMatPar); + + /** @brief Computes Sc=X^{T}*Xc and stores in a parallel ScaLAPACK matrix. + * X^{T} is the subspaceVectorsArray stored in the column major format (N x M). + * Sc is the overlapMatPar. + * + * The overlap matrix computation and filling is done in a blocked approach + * which avoids creation of full serial overlap matrix memory, and also avoids creation + * of another full X memory. + * + */ + void fillParallelOverlapMatrixMixedPrec + (const dataTypes::number* X, + const unsigned int XLocalSize, + const unsigned int numberVectors, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + dealii::ScaLAPACKMatrix & overlapMatPar); + /** @brief Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray * stored in the column major format (N x M). Q is rotationMatPar. * diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index 441d8b64e..6dcf3822c 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -130,6 +130,178 @@ namespace dftfe #endif } + void fillParallelOverlapMatrixMixedPrec(const dataTypes::number* subspaceVectorsArray, + const unsigned int subspaceVectorsArrayLocalSize, + const unsigned int N, + const std::shared_ptr< const dealii::Utilities::MPI::ProcessGrid> & processGrid, + const MPI_Comm &interBandGroupComm, + const MPI_Comm &mpiComm, + dealii::ScaLAPACKMatrix & overlapMatPar) + { + +#ifdef USE_COMPLEX + AssertThrow(false,dftUtils::ExcNotImplementedYet()); +#else + const unsigned int numLocalDofs = subspaceVectorsArrayLocalSize/N; + + //band group parallelization data structures + const unsigned int numberBandGroups= + dealii::Utilities::MPI::n_mpi_processes(interBandGroupComm); + const unsigned int bandGroupTaskId = dealii::Utilities::MPI::this_mpi_process(interBandGroupComm); + std::vector bandGroupLowHighPlusOneIndices; + dftUtils::createBandParallelizationIndices(interBandGroupComm, + N, + bandGroupLowHighPlusOneIndices); + + //get global to local index maps for Scalapack matrix + std::map globalToLocalColumnIdMap; + std::map globalToLocalRowIdMap; + internal::createGlobalToLocalIdMapsScaLAPACKMat(processGrid, + overlapMatPar, + globalToLocalRowIdMap, + globalToLocalColumnIdMap); + + + /* + * Sc=X^{T}*Xc is done in a blocked approach for memory optimization: + * Sum_{blocks} X^{T}*XcBlock. The result of each X^{T}*XBlock + * has a much smaller memory compared to X^{T}*Xc. + * X^{T} is a matrix with size number of wavefunctions times + * number of local degrees of freedom (N x MLoc). + * MLoc is denoted by numLocalDofs. + * Xc denotes complex conjugate of X. + * XcBlock is a matrix with size (MLoc x B). B is the block size. + * A further optimization is done to reduce floating point operations: + * As X^{T}*Xc is a Hermitian matrix, it suffices to compute only the lower + * triangular part. To exploit this, we do + * X^{T}*Xc=Sum_{blocks} XTrunc^{T}*XcBlock + * where XTrunc^{T} is a (D x MLoc) sub matrix of X^{T} with the row indices + * ranging fromt the lowest global index of XcBlock (denoted by ivec in the code) + * to N. D=N-ivec. + * The parallel ScaLapack overlap matrix is directly filled from + * the XTrunc^{T}*XcBlock result + */ + const unsigned int vectorsBlockSize=std::min(dftParameters::wfcBlockSize, + bandGroupLowHighPlusOneIndices[1]); + + std::vector overlapMatrixBlock(N*vectorsBlockSize,0.0); + std::vector blockVectorsMatrix(numLocalDofs*vectorsBlockSize,0.0); + std::vector blockVectorsMatrixLowPrec(numLocalDofs*vectorsBlockSize,0.0); + std::vector overlapMatrixBlockLowPrec(N*vectorsBlockSize,0.0); + + std::vector subspaceVectorsArrayLowPrec(subspaceVectorsArray, + subspaceVectorsArray+ + subspaceVectorsArrayLocalSize); + for (unsigned int ivec = 0; ivec < N; ivec += vectorsBlockSize) + { + // Correct block dimensions if block "goes off edge of" the matrix + const unsigned int B = std::min(vectorsBlockSize, N-ivec); + + // If one plus the ending index of a block lies within a band parallelization group + // do computations for that block within the band group, otherwise skip that + // block. This is only activated if NPBAND>1 + if ((ivec+B)<=bandGroupLowHighPlusOneIndices[2*bandGroupTaskId+1] && + (ivec+B)>bandGroupLowHighPlusOneIndices[2*bandGroupTaskId]) + { + const char transA = 'N',transB = 'N'; + const dataTypes::number scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; + const dataTypes::numberLowPrec scalarCoeffAlphaLowPrec = 1.0,scalarCoeffBetaLowPrec = 0.0; + + std::fill(overlapMatrixBlock.begin(),overlapMatrixBlock.end(),0.); + std::fill(overlapMatrixBlockLowPrec.begin(),overlapMatrixBlockLowPrec.end(),0.); + + // Extract XcBlock from X^{T}. + for (unsigned int i = 0; i is_process_active()) + for(unsigned int i = 0; i ::iterator it= + globalToLocalRowIdMap.find(j); + if(it!=globalToLocalRowIdMap.end()) + overlapMatPar.local_el(it->second, + localColumnId) + =overlapMatrixBlock[i*D+j-ivec]; + } + } + }//band parallelization + }//block loop + + + //accumulate contribution from all band parallelization groups + linearAlgebraOperations::internal::sumAcrossInterCommScaLAPACKMat + (processGrid, + overlapMatPar, + interBandGroupComm); + +#endif + } + template void fillParallelOverlapMatrix(const T* subspaceVectorsArray, const unsigned int subspaceVectorsArrayLocalSize, diff --git a/src/linAlg/pseudoGS.cc b/src/linAlg/pseudoGS.cc index 99d6e043a..93e4b62c3 100644 --- a/src/linAlg/pseudoGS.cc +++ b/src/linAlg/pseudoGS.cc @@ -57,13 +57,22 @@ namespace dftfe //S=X*X^{T}. Implemented as S=X^{T}*X with X^{T} stored in the column major format computing_timer.enter_section("Fill overlap matrix for PGS"); - internal::fillParallelOverlapMatrix(&X[0], - X.size(), - numberVectors, - processGrid, - interBandGroupComm, - mpiComm, - overlapMatPar); + if (!dftParameters::useMixedPrecisionPGS) + internal::fillParallelOverlapMatrix(&X[0], + X.size(), + numberVectors, + processGrid, + interBandGroupComm, + mpiComm, + overlapMatPar); + else + internal::fillParallelOverlapMatrixMixedPrec(&X[0], + X.size(), + numberVectors, + processGrid, + interBandGroupComm, + mpiComm, + overlapMatPar); computing_timer.exit_section("Fill overlap matrix for PGS"); //S=L*L^{T} diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index 34b65331e..2959518a9 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -417,7 +417,7 @@ namespace dftParameters prm.declare_entry("USE MIXED PREC PGS", "false", Patterns::Bool(), - "[Advanced] Use mixed precision arithmetic in susbpace rotation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false."); + "[Advanced] Use mixed precision arithmetic in overlap matrix computation and susbpace rotation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false."); prm.declare_entry("ADAPTIVE FILTER STATES", "0", Patterns::Integer(0), From d9bbbfd20dd9977c67f46b8fc66ac431f4891660 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Mon, 17 Sep 2018 06:20:43 -0400 Subject: [PATCH 50/59] Modified mixed precision overlap computation to be independent of block size. ctests passed. --- include/dftParameters.h | 3 ++- src/dft/energyCalculator.cc | 2 +- src/linAlg/linearAlgebraOperationsInternal.cc | 11 ++++++----- src/linAlg/pseudoGS.cc | 4 ++-- .../real/nitrogenMolecule_03.prm.in | 3 ++- .../real/nitrogenMolecule_03_b.mpirun=10.output | 2 +- .../real/nitrogenMolecule_03_b.prm.in | 3 ++- .../real/nitrogenMolecule_03_c.prm.in | 3 ++- utils/dftParameters.cc | 16 +++++++++++----- 9 files changed, 29 insertions(+), 18 deletions(-) diff --git a/include/dftParameters.h b/include/dftParameters.h index 0e054df5b..2e2e1fa79 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -79,7 +79,8 @@ namespace dftfe { extern bool reuseWfcGeoOpt; extern double mpiAllReduceMessageBlockSizeMB; extern bool useHigherQuadNLP; - extern bool useMixedPrecisionPGS; + extern bool useMixedPrecPGS_SR; + extern bool useMixedPrecPGS_O; extern unsigned int numAdaptiveFilterStates; /** diff --git a/src/dft/energyCalculator.cc b/src/dft/energyCalculator.cc index 0fb6eae86..8cad3bf77 100644 --- a/src/dft/energyCalculator.cc +++ b/src/dft/energyCalculator.cc @@ -51,7 +51,7 @@ namespace dftfe pcout < Date: Mon, 17 Sep 2018 09:10:30 -0400 Subject: [PATCH 51/59] Brought back the block size, which is the more correct route. ctests passed. --- src/linAlg/linearAlgebraOperationsInternal.cc | 2 +- .../pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/linAlg/linearAlgebraOperationsInternal.cc b/src/linAlg/linearAlgebraOperationsInternal.cc index b638d5edd..940cd504c 100644 --- a/src/linAlg/linearAlgebraOperationsInternal.cc +++ b/src/linAlg/linearAlgebraOperationsInternal.cc @@ -229,7 +229,7 @@ namespace dftfe #endif } - const unsigned int diagBlockSize=1; + const unsigned int diagBlockSize=B; const unsigned int D=N-ivec; dgemm_(&transA, diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output index c5bc9a1cb..98f3257f8 100644 --- a/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_b.mpirun=10.output @@ -31,4 +31,4 @@ SCF iterations converged to the specified tolerance after: 12 iterations. Energy computations (Hartree) ------------------- - Total energy: -19.834556 + Total energy: -19.834557 From ef73940a671f3f9e951731a9d66637759dfa6fbd Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Tue, 18 Sep 2018 20:40:23 -0400 Subject: [PATCH 52/59] Changed CMakeLists exectuable to dftfe. Appropriate changes in the manual also made. ctests passed. --- CMakeLists.txt | 4 ++-- doc/manual/installation.tex | 8 ++++---- doc/manual/rundftfe.tex | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d3dd9d7ba..18154b2f2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,8 @@ ## # Set the name of the project and target: -SET(TARGET "main") -SET(TARGETLIB "dftfe") +SET(TARGET "dftfe") +SET(TARGETLIB "dftFE") INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include diff --git a/doc/manual/installation.tex b/doc/manual/installation.tex index 1aed639c0..36e724bc6 100644 --- a/doc/manual/installation.tex +++ b/doc/manual/installation.tex @@ -249,8 +249,8 @@ \subsection{Obtaining and Compiling \dftfe{}} \end{verbatim} If compilation is successful, a \verb|/build| directory will be created with the following executables: \begin{verbatim} -/build/release/real/main -/build/release/complex/main +/build/release/real/dftfe +/build/release/complex/dftfe \end{verbatim} \item @@ -260,7 +260,7 @@ \subsection{Obtaining and Compiling \dftfe{}} \end{verbatim} which will create the following debug mode executables: \begin{verbatim} -/build/debug/real/main -/build/debug/complex/main +/build/debug/real/dftfe +/build/debug/complex/dftfe \end{verbatim} \end{enumerate} diff --git a/doc/manual/rundftfe.tex b/doc/manual/rundftfe.tex index 06d6b57a9..e2b35fc55 100644 --- a/doc/manual/rundftfe.tex +++ b/doc/manual/rundftfe.tex @@ -1,10 +1,10 @@ -After compiling \dftfe{} as described in Section~\ref{sec:installation}, we have now two executables --- \verb|/build/release/real/main| and \verb|/build/release/complex/main|. The \verb|/build/release/real/main| executable, which uses real data-structures is sufficient for fully non-periodic problems. The executable can also be used for periodic and semi-periodic problems involving a Gamma point calculation. On the other hand the \verb|/build/release/complex/main| executable, which uses complex data-structures is required for periodic and semi-periodic problems with multiple k point sampling for Brillouin zone integration. These executables are to be used as follows-- for a serial run use +After compiling \dftfe{} as described in Section~\ref{sec:installation}, we have now two executables --- \verb|/build/release/real/dftfe| and \verb|/build/release/complex/dftfe|. The \verb|/build/release/real/dftfe| executable, which uses real data-structures is sufficient for fully non-periodic problems. The executable can also be used for periodic and semi-periodic problems involving a Gamma point calculation. On the other hand the \verb|/build/release/complex/dftfe| executable, which uses complex data-structures is required for periodic and semi-periodic problems with multiple k point sampling for Brillouin zone integration. These executables are to be used as follows-- for a serial run use \begin{verbatim} - ./main parameterFile.prm + ./dftfe parameterFile.prm \end{verbatim} or, for a parallel run use \begin{verbatim} - mpirun -n N ./main parameterFile.prm + mpirun -n N ./dftfe parameterFile.prm \end{verbatim} to run with N processors. \subsection{Structuring the input file} @@ -166,9 +166,9 @@ \subsubsection{Example 1}\label{sec:example1} end end \end{verbatim} -and now run the problem using the \verb|/build/release/real/main| executable +and now run the problem using the \verb|/build/release/real/dftfe| executable \begin{verbatim} - mpirun -n 16 ../../build/release/real/main parameterFile_a.prm > outputMesh1 & + mpirun -n 16 ../../build/release/real/dftfe parameterFile_a.prm > outputMesh1 & \end{verbatim} From the ``outputMesh1'' file, you can obtain information on the number of degrees of freedom in the auto-generated finite-element mesh and the ground-state energy and forces. From 1db7fc78c601ac03717f55024c4903d22a4b5601 Mon Sep 17 00:00:00 2001 From: Denis Davydov Date: Wed, 19 Sep 2018 11:04:44 +0200 Subject: [PATCH 53/59] add debug/release build type and install target --- CMakeLists.txt | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 18154b2f2..a3fce8e42 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -256,6 +256,26 @@ ELSE() MESSAGE(FATAL_ERROR "-- Provide path to prefix of SPGLIB: -DSPGLIB_DIR=/path/to/prefix") ENDIF (DEFINED SPGLIB_DIR) + +# +# Custom "debug" and "release" make targets: +# +ADD_CUSTOM_TARGET(debug +COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR} +COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all +COMMENT "Switch CMAKE_BUILD_TYPE to Debug" +) + +ADD_CUSTOM_TARGET(release +COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR} +COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all +COMMENT "Switch CMAKE_BUILD_TYPE to Release" +) + + +# +# FIXME: that will not play well with installation +# ADD_DEFINITIONS(-DDFT_PATH="${CMAKE_CURRENT_SOURCE_DIR}") # Enable testing and descent into tests/ subdirectory: @@ -274,3 +294,19 @@ ELSE() ADD_SUBDIRECTORY(tests/dft/pseudopotential/real) ADD_SUBDIRECTORY(tests/dft/allElectron/real) ENDIF() + + +# +# installation target. +# use with -DCMAKE_INSTALL_PREFIX=/path/to/ +# +SET(TARGETLIBEXPORT "femdftTargets") +# 1. Install defined library target +install (TARGETS ${TARGETLIB} EXPORT ${TARGETLIBEXPORT} + LIBRARY DESTINATION lib) +# 2. Install the binary +install (TARGETS ${TARGET} + RUNTIME DESTINATION bin) +# 3. Install content of include dir +install (DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/" + DESTINATION include) From 1d93542716e0c18227096d63d18b346a29b258a5 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Wed, 19 Sep 2018 17:54:12 -0400 Subject: [PATCH 54/59] Implemented option to use mixed precision in chebyshev filtering. Added relevant ctest. ctests passed. --- ...hevOrthogonalizedSubspaceIterationSolver.h | 5 +- include/dft.h | 11 +- include/dftParameters.h | 2 + include/kohnShamDFTOperator.h | 14 ++ include/linearAlgebraOperations.h | 9 +- include/operator.h | 1 + src/dft/dft.cc | 20 +- src/dft/initPseudo-OV.cc | 65 +++++- src/dft/kohnShamEigenSolve.cc | 6 +- ...ocalHamiltonianTimesXMemoryOptBatchGEMM.cc | 216 ++++++++++++++++++ .../hamiltonianMatrixCalculator.cc | 14 +- src/dftOperator/kohnShamDFTOperator.cc | 35 ++- .../matrixVectorProductImplementations.cc | 109 +++++++++ src/linAlg/linearAlgebraOperationsOpt.cc | 30 ++- src/linAlg/pseudoGS.cc | 6 +- ...evOrthogonalizedSubspaceIterationSolver.cc | 12 +- .../nitrogenMolecule_03_d.mpirun=10.output | 34 +++ .../real/nitrogenMolecule_03_d.prm.in | 59 +++++ utils/dftParameters.cc | 12 + utils/vectorTools/vectorUtilities.cc | 3 + 20 files changed, 632 insertions(+), 31 deletions(-) create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03_d.mpirun=10.output create mode 100644 tests/dft/pseudopotential/real/nitrogenMolecule_03_d.prm.in diff --git a/include/chebyshevOrthogonalizedSubspaceIterationSolver.h b/include/chebyshevOrthogonalizedSubspaceIterationSolver.h index 69b217843..6d663f889 100644 --- a/include/chebyshevOrthogonalizedSubspaceIterationSolver.h +++ b/include/chebyshevOrthogonalizedSubspaceIterationSolver.h @@ -28,7 +28,7 @@ namespace dftfe{ /** * @brief Concrete class implementing Chebyshev filtered orthogonalized subspace * iteration solver. - * @author Phani Motamarri + * @author Phani Motamarri */ class chebyshevOrthogonalizedSubspaceIterationSolver : public eigenSolverClass { @@ -59,7 +59,8 @@ namespace dftfe{ const unsigned int totalNumberWaveFunctions, std::vector & eigenValues, std::vector & residuals, - const MPI_Comm &interBandGroupComm); + const MPI_Comm &interBandGroupComm, + const bool useMixedPrec); /** * @brief Solve a generalized eigen problem. diff --git a/include/dft.h b/include/dft.h index 00950ebfb..55ae376fb 100644 --- a/include/dft.h +++ b/include/dft.h @@ -676,20 +676,28 @@ namespace dftfe { std::map, unsigned int> d_projectorIdsNumberingMapCurrentProcess; #ifdef USE_COMPLEX std::vector > > > > d_nonLocalProjectorElementMatrices,d_nonLocalProjectorElementMatricesConjugate,d_nonLocalProjectorElementMatricesTranspose; + + std::vector > > > > d_nonLocalProjectorElementMatricesLowPrec,d_nonLocalProjectorElementMatricesConjugateLowPrec,d_nonLocalProjectorElementMatricesTransposeLowPrec; + std::vector > > d_projectorKetTimesVectorPar; /// parallel vector used in nonLocalHamiltionian times wavefunction vector computation /// pre-initialization of the parallel layout is more efficient than creating the parallel /// layout for every nonLocalHamiltionan times wavefunction computation dealii::parallel::distributed::Vector > d_projectorKetTimesVectorParFlattened; + dealii::parallel::distributed::Vector > d_projectorKetTimesVectorParFlattenedLowPrec; #else std::vector > > > d_nonLocalProjectorElementMatrices,d_nonLocalProjectorElementMatricesConjugate,d_nonLocalProjectorElementMatricesTranspose; + + std::vector > > > d_nonLocalProjectorElementMatricesLowPrec,d_nonLocalProjectorElementMatricesConjugateLowPrec,d_nonLocalProjectorElementMatricesTransposeLowPrec; + std::vector > d_projectorKetTimesVectorPar; /// parallel vector used in nonLocalHamiltionian times wavefunction vector computation /// pre-initialization of the parallel layout is more efficient than creating the parallel /// layout for every nonLocalHamiltionan times wavefunction computation dealii::parallel::distributed::Vector d_projectorKetTimesVectorParFlattened; + dealii::parallel::distributed::Vector d_projectorKetTimesVectorParFlattenedLowPrec; #endif // @@ -761,7 +769,8 @@ namespace dftfe { kohnShamDFTOperatorClass & kohnShamDFTEigenOperator, chebyshevOrthogonalizedSubspaceIterationSolver & subspaceIterationSolver, std::vector & residualNormWaveFunctions, - const bool isSpectrumSplit); + const bool isSpectrumSplit, + const bool useMixedPrec); void computeResidualNorm(const std::vector & eigenValuesTemp, kohnShamDFTOperatorClass & kohnShamDFTEigenOperator, diff --git a/include/dftParameters.h b/include/dftParameters.h index 2e2e1fa79..850e422b3 100644 --- a/include/dftParameters.h +++ b/include/dftParameters.h @@ -82,6 +82,8 @@ namespace dftfe { extern bool useMixedPrecPGS_SR; extern bool useMixedPrecPGS_O; extern unsigned int numAdaptiveFilterStates; + extern bool useMixedPrecCheby; + extern double mixedPrecStoppingTol; /** * Declare parameters. diff --git a/include/kohnShamDFTOperator.h b/include/kohnShamDFTOperator.h index 866a32a9c..b42c9c44b 100644 --- a/include/kohnShamDFTOperator.h +++ b/include/kohnShamDFTOperator.h @@ -78,6 +78,7 @@ namespace dftfe{ const unsigned int numberComponents, const bool scaleFlag, const double scalar, + const bool useSinglePrec, dealii::parallel::distributed::Vector & dst); @@ -273,6 +274,7 @@ namespace dftfe{ * of complex data type */ std::vector > d_cellHamiltonianMatrix; + std::vector > d_cellHamiltonianMatrixLowPrec; /** * @brief implementation of matrix-vector product using cell-level stiffness matrices. @@ -303,6 +305,12 @@ namespace dftfe{ const unsigned int numberWaveFunctions, dealii::parallel::distributed::Vector & dst) const; + + void computeLocalHamiltonianTimesXBatchGEMMSinglePrec + (const dealii::parallel::distributed::Vector & src, + const unsigned int numberWaveFunctions, + dealii::parallel::distributed::Vector & dst) const; + #endif /** * @brief implementation of non-local Hamiltonian matrix-vector product @@ -332,6 +340,12 @@ namespace dftfe{ void computeNonLocalHamiltonianTimesXBatchGEMM(const dealii::parallel::distributed::Vector & src, const unsigned int numberWaveFunctions, dealii::parallel::distributed::Vector & dst) const; + + + void computeNonLocalHamiltonianTimesXBatchGEMMSinglePrec + (const dealii::parallel::distributed::Vector & src, + const unsigned int numberWaveFunctions, + dealii::parallel::distributed::Vector & dst) const; #endif ///pointer to dft class diff --git a/include/linearAlgebraOperations.h b/include/linearAlgebraOperations.h index fb0aaa4fd..803ae52c0 100644 --- a/include/linearAlgebraOperations.h +++ b/include/linearAlgebraOperations.h @@ -30,6 +30,7 @@ namespace dftfe void dgemv_(char* TRANS, const int* M, const int* N, double* alpha, double* A, const int* LDA, double* X, const int* INCX, double* beta, double* C, const int* INCY); void dgesv_( int* n, int* nrhs, double* a, int* lda, int* ipiv, double* b, int* ldb, int* info ); void dscal_(const unsigned int *n, const double *alpha, double *x, const unsigned int *inc); + void sscal_(const unsigned int *n, const float *alpha, float *x, const unsigned int *inc); void zscal_(const unsigned int *n, std::complex *alpha, std::complex *x, const unsigned int *inc); void zdscal_(const unsigned int *n, const double *alpha, std::complex *x, const unsigned int *inc); void daxpy_(const unsigned int *n, const double *alpha, double *x, const unsigned int *incx, double *y, const unsigned int *incy); @@ -37,14 +38,18 @@ namespace dftfe void sgemm_(const char* transA, const char* transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const float *alpha, const float *A, const unsigned int *lda, const float *B, const unsigned int *ldb, const float *beta, float *C, const unsigned int *ldc); #ifdef WITH_MKL void dgemm_batch_(const char* transa_array,const char* transb_array,const unsigned int* m_array,const unsigned int* n_array,const unsigned int* k_array,const double* alpha_array,double** a_array,const unsigned int * lda_array,const double ** b_array,const unsigned int * ldb_array,const double * beta_array,double** c_array,const unsigned int * ldc_array,const unsigned int* group_count,const unsigned int* group_size); + void sgemm_batch_(const char* transa_array,const char* transb_array,const unsigned int* m_array,const unsigned int* n_array,const unsigned int* k_array,const float* alpha_array,float** a_array,const unsigned int * lda_array,const float ** b_array,const unsigned int * ldb_array,const float * beta_array,float** c_array,const unsigned int * ldc_array,const unsigned int* group_count,const unsigned int* group_size); #endif void dsyevd_(const char* jobz, const char* uplo, const unsigned int* n, double* A, const unsigned int *lda, double* w, double* work, const unsigned int* lwork, int* iwork, const unsigned int* liwork, int* info); void dsyevr_(const char *jobz, const char *range, const char *uplo,const unsigned int *n, double *A,const unsigned int *lda,const double *vl, const double *vu, const unsigned int *il, const unsigned int *iu, const double *abstol, const unsigned int *m, double *w, double *Z, const unsigned int * ldz, unsigned int * isuppz, double *work, const int *lwork, int * iwork, const int *liwork, int *info); void dsyrk_(const char *uplo, const char *trans, const unsigned int *n, const unsigned int *k, const double *alpha, const double *A, const unsigned int *lda, const double *beta, double *C, const unsigned int * ldc); void dcopy_(const unsigned int *n,const double *x,const unsigned int *incx,double *y,const unsigned int *incy); + void scopy_(const unsigned int *n,const float *x,const unsigned int *incx,float *y,const unsigned int *incy); void zgemm_(const char* transA, const char* transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const std::complex *alpha, const std::complex *A, const unsigned int *lda, const std::complex *B, const unsigned int *ldb, const std::complex *beta, std::complex *C, const unsigned int *ldc); + void cgemm_(const char* transA, const char* transB, const unsigned int *m, const unsigned int *n, const unsigned int *k, const std::complex *alpha, const std::complex *A, const unsigned int *lda, const std::complex *B, const unsigned int *ldb, const std::complex *beta, std::complex *C, const unsigned int *ldc); #ifdef WITH_MKL void zgemm_batch_(const char* transa_array,const char* transb_array,const unsigned int* m_array,const unsigned int* n_array,const unsigned int* k_array,const std::complex* alpha_array,std::complex** a_array,const unsigned int * lda_array,const std::complex ** b_array,const unsigned int * ldb_array,const std::complex * beta_array,std::complex** c_array,const unsigned int * ldc_array,const unsigned int* group_count,const unsigned int* group_size); + void cgemm_batch_(const char* transa_array,const char* transb_array,const unsigned int* m_array,const unsigned int* n_array,const unsigned int* k_array,const std::complex* alpha_array,std::complex** a_array,const unsigned int * lda_array,const std::complex ** b_array,const unsigned int * ldb_array,const std::complex * beta_array,std::complex** c_array,const unsigned int * ldc_array,const unsigned int* group_count,const unsigned int* group_size); #endif void zheevd_(const char *jobz, const char *uplo, const unsigned int *n,std::complex *A,const unsigned int *lda,double *w,std::complex *work, const unsigned int *lwork,double *rwork, const unsigned int *lrwork, int *iwork,const unsigned int *liwork, int *info); void zheevr_(const char *jobz, const char *range, const char *uplo,const unsigned int *n,std::complex *A,const unsigned int *lda,const double *vl, const double *vu, const unsigned int *il, const unsigned int *iu, const double *abstol, const unsigned int *m, double *w, std::complex *Z, const unsigned int * ldz, unsigned int * isuppz, std::complex *work, const int *lwork, double *rwork, const int *lrwork, int * iwork, const int *liwork, int *info); @@ -131,7 +136,8 @@ namespace dftfe const unsigned int m, const double a, const double b, - const double a0); + const double a0, + const bool useMixedPrec); @@ -197,6 +203,7 @@ namespace dftfe const MPI_Comm &interBandGroupComm, const unsigned int numberCoreVectors, const MPI_Comm &mpiComm, + const bool useMixedPrec, std::vector & nonCoreVectorsArray); /** @brief Compute Rayleigh-Ritz projection diff --git a/include/operator.h b/include/operator.h index 7469b5d65..03b41e011 100644 --- a/include/operator.h +++ b/include/operator.h @@ -106,6 +106,7 @@ namespace dftfe{ const unsigned int numberComponents, const bool scaleFlag, const double scalar, + const bool useSinglePrec, dealii::parallel::distributed::Vector & Y) = 0; diff --git a/src/dft/dft.cc b/src/dft/dft.cc index a6c012f20..f6c802e7d 100644 --- a/src/dft/dft.cc +++ b/src/dft/dft.cc @@ -314,7 +314,7 @@ namespace dftfe { pcout <<" Setting the number of Kohn-Sham wave functions to be set to "<(numElectrons)/2.0); @@ -739,7 +739,7 @@ namespace dftfe { double norm = 1.0; //CAUTION: Choosing a looser tolerance might lead to failed tests const double adaptiveChebysevFilterPassesTol = dftParameters::chebyshevTolerance; - + const double mixedPrecStoppingNorm=dftParameters::mixedPrecStoppingTol; pcout<::computeElementalOVProjectorKets() d_nonLocalProjectorElementMatrices.clear(); d_nonLocalProjectorElementMatricesConjugate.clear(); d_nonLocalProjectorElementMatricesTranspose.clear(); + + d_nonLocalProjectorElementMatricesLowPrec.clear(); + d_nonLocalProjectorElementMatricesConjugateLowPrec.clear(); + d_nonLocalProjectorElementMatricesTransposeLowPrec.clear(); + d_nonLocalProjectorElementMatrices.resize(numberNonLocalAtoms); d_nonLocalProjectorElementMatricesConjugate.resize(numberNonLocalAtoms); d_nonLocalProjectorElementMatricesTranspose.resize(numberNonLocalAtoms); + + d_nonLocalProjectorElementMatricesLowPrec.resize(numberNonLocalAtoms); + d_nonLocalProjectorElementMatricesConjugateLowPrec.resize(numberNonLocalAtoms); + d_nonLocalProjectorElementMatricesTransposeLowPrec.resize(numberNonLocalAtoms); int cumulativeWaveSplineId = 0; int waveFunctionId; // @@ -104,6 +113,10 @@ void dftClass::computeElementalOVProjectorKets() d_nonLocalProjectorElementMatricesConjugate[iAtom].resize(numberElementsInAtomCompactSupport); d_nonLocalProjectorElementMatricesTranspose[iAtom].resize(numberElementsInAtomCompactSupport); + d_nonLocalProjectorElementMatricesLowPrec[iAtom].resize(numberElementsInAtomCompactSupport); + d_nonLocalProjectorElementMatricesConjugateLowPrec[iAtom].resize(numberElementsInAtomCompactSupport); + d_nonLocalProjectorElementMatricesTransposeLowPrec[iAtom].resize(numberElementsInAtomCompactSupport); + for(int iElemComp = 0; iElemComp < numberElementsInAtomCompactSupport; ++iElemComp) { @@ -120,11 +133,24 @@ void dftClass::computeElementalOVProjectorKets() d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp].resize(maxkPoints, std::vector > (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); + + d_nonLocalProjectorElementMatricesLowPrec[iAtom][iElemComp].resize(maxkPoints, + std::vector > (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); + d_nonLocalProjectorElementMatricesConjugateLowPrec[iAtom][iElemComp].resize(maxkPoints, + std::vector > (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); + d_nonLocalProjectorElementMatricesTransposeLowPrec[iAtom][iElemComp].resize(maxkPoints, + std::vector > (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); + #else d_nonLocalProjectorElementMatrices[iAtom][iElemComp].resize(maxkPoints, std::vector (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp].resize(maxkPoints, std::vector (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); + + d_nonLocalProjectorElementMatricesLowPrec[iAtom][iElemComp].resize(maxkPoints, + std::vector (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); + d_nonLocalProjectorElementMatricesTransposeLowPrec[iAtom][iElemComp].resize(maxkPoints, + std::vector (numberNodesPerElement*numberPseudoWaveFunctions,0.0)); #endif int iPsp = -1; @@ -259,7 +285,22 @@ void dftClass::computeElementalOVProjectorKets() tempImag += nonLocalProjectorBasisImag[maxkPoints*iQuadPoint+kPoint]*fe_values.shape_value(iNode,iQuadPoint)*fe_values.JxW(iQuadPoint); #else d_nonLocalProjectorElementMatrices[iAtom][iElemComp][kPoint][numberNodesPerElement*iPseudoWave + iNode] += nonLocalProjectorBasisReal[maxkPoints*iQuadPoint+kPoint]*fe_values.shape_value(iNode,iQuadPoint)*fe_values.JxW(iQuadPoint); - d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp][kPoint][numberPseudoWaveFunctions*iNode+iPseudoWave] += nonLocalProjectorBasisReal[maxkPoints*iQuadPoint+kPoint]*fe_values.shape_value(iNode,iQuadPoint)*fe_values.JxW(iQuadPoint); + + d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp][kPoint] + [numberPseudoWaveFunctions*iNode+iPseudoWave] + += nonLocalProjectorBasisReal[maxkPoints*iQuadPoint+kPoint]*fe_values.shape_value(iNode,iQuadPoint)*fe_values.JxW(iQuadPoint); + + d_nonLocalProjectorElementMatricesLowPrec[iAtom][iElemComp][kPoint] + [numberNodesPerElement*iPseudoWave + iNode] + += (dataTypes::numberLowPrec) + nonLocalProjectorBasisReal[maxkPoints*iQuadPoint+kPoint] + *fe_values.shape_value(iNode,iQuadPoint)*fe_values.JxW(iQuadPoint); + + d_nonLocalProjectorElementMatricesTransposeLowPrec[iAtom][iElemComp][kPoint] + [numberPseudoWaveFunctions*iNode+iPseudoWave] + += (dataTypes::numberLowPrec) + nonLocalProjectorBasisReal[maxkPoints*iQuadPoint+kPoint] + *fe_values.shape_value(iNode,iQuadPoint)*fe_values.JxW(iQuadPoint); #endif } #ifdef USE_COMPLEX @@ -269,8 +310,26 @@ void dftClass::computeElementalOVProjectorKets() d_nonLocalProjectorElementMatricesConjugate[iAtom][iElemComp][kPoint][numberNodesPerElement*iPseudoWave + iNode].real(tempReal); d_nonLocalProjectorElementMatricesConjugate[iAtom][iElemComp][kPoint][numberNodesPerElement*iPseudoWave + iNode].imag(-tempImag); - d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp][kPoint][numberPseudoWaveFunctions*iNode+iPseudoWave].real(tempReal); - d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp][kPoint][numberPseudoWaveFunctions*iNode+iPseudoWave].imag(tempImag); + d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp][kPoint] + [numberPseudoWaveFunctions*iNode+iPseudoWave].real(tempReal); + d_nonLocalProjectorElementMatricesTranspose[iAtom][iElemComp][kPoint] + [numberPseudoWaveFunctions*iNode+iPseudoWave].imag(tempImag); + + + d_nonLocalProjectorElementMatricesLowPrec[iAtom][iElemComp][kPoint] + [numberNodesPerElement*iPseudoWave + iNode].real((float)tempReal); + d_nonLocalProjectorElementMatricesLowPrec[iAtom][iElemComp][kPoint] + [numberNodesPerElement*iPseudoWave + iNode].imag((float)tempImag); + + d_nonLocalProjectorElementMatricesConjugateLowPrec[iAtom][iElemComp][kPoint] + [numberNodesPerElement*iPseudoWave + iNode].real((float)tempReal); + d_nonLocalProjectorElementMatricesConjugateLowPrec[iAtom][iElemComp][kPoint] + [numberNodesPerElement*iPseudoWave + iNode].imag((float)-tempImag); + + d_nonLocalProjectorElementMatricesTransposeLowPrec[iAtom][iElemComp][kPoint] + [numberPseudoWaveFunctions*iNode+iPseudoWave].real((float)tempReal); + d_nonLocalProjectorElementMatricesTransposeLowPrec[iAtom][iElemComp][kPoint] + [numberPseudoWaveFunctions*iNode+iPseudoWave].imag((float)tempImag); #endif } diff --git a/src/dft/kohnShamEigenSolve.cc b/src/dft/kohnShamEigenSolve.cc index 1d55131c2..a99ec2aea 100644 --- a/src/dft/kohnShamEigenSolve.cc +++ b/src/dft/kohnShamEigenSolve.cc @@ -81,7 +81,8 @@ void dftClass::kohnShamEigenSpaceCompute(const unsigned int spinType, kohnShamDFTOperatorClass & kohnShamDFTEigenOperator, chebyshevOrthogonalizedSubspaceIterationSolver & subspaceIterationSolver, std::vector & residualNormWaveFunctions, - const bool isSpectrumSplit) + const bool isSpectrumSplit, + const bool useMixedPrec) { computing_timer.enter_section("Chebyshev solve"); @@ -114,7 +115,8 @@ void dftClass::kohnShamEigenSpaceCompute(const unsigned int spinType, numEigenValues, eigenValuesTemp, residualNormWaveFunctions, - interBandGroupComm); + interBandGroupComm, + useMixedPrec); // //scale the eigenVectors with M^{-1/2} to represent the wavefunctions in the usual FE basis diff --git a/src/dftOperator/computeNonLocalHamiltonianTimesXMemoryOptBatchGEMM.cc b/src/dftOperator/computeNonLocalHamiltonianTimesXMemoryOptBatchGEMM.cc index 866fd7a22..bbe9ac6c8 100644 --- a/src/dftOperator/computeNonLocalHamiltonianTimesXMemoryOptBatchGEMM.cc +++ b/src/dftOperator/computeNonLocalHamiltonianTimesXMemoryOptBatchGEMM.cc @@ -217,6 +217,15 @@ void kohnShamDFTOperatorClass::computeNonLocalHamiltonianTimesXBatchGEM }//non local atomid loop } + +template +void kohnShamDFTOperatorClass::computeNonLocalHamiltonianTimesXBatchGEMMSinglePrec + (const dealii::parallel::distributed::Vector> & src, + const unsigned int numberWaveFunctions, + dealii::parallel::distributed::Vector> & dst) const +{ + AssertThrow(false,dftUtils::ExcNotImplementedYet()); +} #else template void kohnShamDFTOperatorClass::computeNonLocalHamiltonianTimesXBatchGEMM(const dealii::parallel::distributed::Vector & src, @@ -412,6 +421,213 @@ void kohnShamDFTOperatorClass::computeNonLocalHamiltonianTimesXBatchGEM }//non local atomid loop +} + +template +void kohnShamDFTOperatorClass::computeNonLocalHamiltonianTimesXBatchGEMMSinglePrec + (const dealii::parallel::distributed::Vector & src, + const unsigned int numberWaveFunctions, + dealii::parallel::distributed::Vector & dst) const +{ + + + std::map > projectorKetTimesVector; + + // + //allocate memory for matrix-vector product + // + for(unsigned int iAtom = 0; iAtom < dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); ++iAtom) + { + const unsigned int atomId=dftPtr->d_nonLocalAtomIdsInCurrentProcess[iAtom]; + const int numberSingleAtomPseudoWaveFunctions = dftPtr->d_numberPseudoAtomicWaveFunctions[atomId]; + projectorKetTimesVector[atomId].resize(numberWaveFunctions*numberSingleAtomPseudoWaveFunctions,0.0); + } + + + // + //blas required settings + // + const char transA = 'N'; + const char transB = 'N'; + const dataTypes::numberLowPrec alpha = 1.0; + const dataTypes::numberLowPrec beta = 1.0; + const unsigned int inc = 1; + std::vector temp(numberWaveFunctions); + std::vector cellWaveFunctionMatrix(d_numberNodesPerElement*numberWaveFunctions,0.0); + typename DoFHandler<3>::active_cell_iterator cell = dftPtr->dofHandler.begin_active(), endc = dftPtr->dofHandler.end(); + int iElem = -1; + for(; cell!=endc; ++cell) + if(cell->is_locally_owned()) + { + iElem++; + if (dftPtr->d_nonLocalAtomIdsInElement[iElem].size()>0) + for(unsigned int iNode = 0; iNode < d_numberNodesPerElement; ++iNode) + { + dealii::types::global_dof_index localNodeId = d_flattenedArrayCellLocalProcIndexIdMap[iElem][iNode]; + dcopy_(&numberWaveFunctions, + src.begin()+localNodeId, + &inc, + &temp[0], + &inc); + for (unsigned int iwave=0; iwave< numberWaveFunctions;++iwave) + cellWaveFunctionMatrix[numberWaveFunctions*iNode+iwave] + =(dataTypes::numberLowPrec)temp[iwave]; + } + + for(unsigned int iAtom = 0; iAtom < dftPtr->d_nonLocalAtomIdsInElement[iElem].size();++iAtom) + { + const unsigned int atomId = dftPtr->d_nonLocalAtomIdsInElement[iElem][iAtom]; + const unsigned int numberPseudoWaveFunctions = dftPtr->d_numberPseudoAtomicWaveFunctions[atomId]; + const int nonZeroElementMatrixId = dftPtr->d_sparsityPattern[atomId][iElem]; + + sgemm_(&transA, + &transB, + &numberWaveFunctions, + &numberPseudoWaveFunctions, + &d_numberNodesPerElement, + &alpha, + &cellWaveFunctionMatrix[0], + &numberWaveFunctions, + &dftPtr->d_nonLocalProjectorElementMatricesLowPrec[atomId][nonZeroElementMatrixId][d_kPointIndex][0], + &d_numberNodesPerElement, + &beta, + &projectorKetTimesVector[atomId][0], + &numberWaveFunctions); + } + } + + + + dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec=0.0; + + for(unsigned int iAtom = 0; iAtom < dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); ++iAtom) + { + const unsigned int atomId=dftPtr->d_nonLocalAtomIdsInCurrentProcess[iAtom]; + const unsigned int numberPseudoWaveFunctions = dftPtr->d_numberPseudoAtomicWaveFunctions[atomId]; + + for(unsigned int iPseudoAtomicWave = 0; iPseudoAtomicWave < numberPseudoWaveFunctions; ++iPseudoAtomicWave) + { + const unsigned int id=dftPtr->d_projectorIdsNumberingMapCurrentProcess[std::make_pair(atomId,iPseudoAtomicWave)]; + + scopy_(&numberWaveFunctions, + &projectorKetTimesVector[atomId][numberWaveFunctions*iPseudoAtomicWave], + &inc, + &dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec[id*numberWaveFunctions], + &inc); + + } + } + + dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec.compress(VectorOperation::add); + dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec.update_ghost_values(); + + // + //compute V*C^{T}*X + // + for(unsigned int iAtom = 0; iAtom < dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); ++iAtom) + { + const unsigned int atomId=dftPtr->d_nonLocalAtomIdsInCurrentProcess[iAtom]; + const unsigned int numberPseudoWaveFunctions = dftPtr->d_numberPseudoAtomicWaveFunctions[atomId]; + for(unsigned int iPseudoAtomicWave = 0; iPseudoAtomicWave < numberPseudoWaveFunctions; ++iPseudoAtomicWave) + { + dataTypes::numberLowPrec nonlocalConstantV + =(dataTypes::numberLowPrec)dftPtr->d_nonLocalPseudoPotentialConstants[atomId][iPseudoAtomicWave]; + + const unsigned int id=dftPtr->d_projectorIdsNumberingMapCurrentProcess[std::make_pair(atomId,iPseudoAtomicWave)]; + + sscal_(&numberWaveFunctions, + &nonlocalConstantV, + &dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec[id*numberWaveFunctions], + &inc); + + scopy_(&numberWaveFunctions, + &dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec[id*numberWaveFunctions], + &inc, + &projectorKetTimesVector[atomId][numberWaveFunctions*iPseudoAtomicWave], + &inc); + + } + + } + + + //blas required settings + const char transA1 = 'N'; + const char transB1 = 'N'; + const dataTypes::numberLowPrec alpha1 = 1.0; + const dataTypes::number alpha1HighPrec=1.0; + const dataTypes::numberLowPrec beta1 = 0.0; + const unsigned int inc1 = 1; + + // + //compute C*V*C^{T}*x + // + for(unsigned int iAtom = 0; iAtom < dftPtr->d_nonLocalAtomIdsInCurrentProcess.size(); ++iAtom) + { + const unsigned int atomId = dftPtr->d_nonLocalAtomIdsInCurrentProcess[iAtom]; + const unsigned int numberPseudoWaveFunctions = dftPtr->d_numberPseudoAtomicWaveFunctions[atomId]; + + const unsigned int groupCount=1; + const unsigned int groupSize=dftPtr->d_elementIteratorsInAtomCompactSupport[atomId].size(); + dataTypes::numberLowPrec ** cellProjectorKetTimesVectorMatrixBatch = new dataTypes::numberLowPrec*[groupSize]; + dataTypes::numberLowPrec ** cellNonLocalHamTimesWaveMatrixBatch = new dataTypes::numberLowPrec*[groupSize]; + const dataTypes::numberLowPrec ** cellNonLocalProjectorKetBatch = new dataTypes::numberLowPrec*[groupSize]; + for(unsigned int i = 0; i < groupSize; i++) + cellNonLocalHamTimesWaveMatrixBatch[i] = new dataTypes::numberLowPrec[d_numberNodesPerElement*numberWaveFunctions]; + + for(unsigned int iElemComp = 0; iElemComp < dftPtr->d_elementIteratorsInAtomCompactSupport[atomId].size(); ++iElemComp) + { + cellProjectorKetTimesVectorMatrixBatch[iElemComp] + =&projectorKetTimesVector[atomId][0]; + cellNonLocalProjectorKetBatch[iElemComp] + =&dftPtr->d_nonLocalProjectorElementMatricesTransposeLowPrec[atomId][iElemComp][d_kPointIndex][0]; + } + + sgemm_batch_(&transA1, + &transB1, + &numberWaveFunctions, + &d_numberNodesPerElement, + &numberPseudoWaveFunctions, + &alpha1, + cellProjectorKetTimesVectorMatrixBatch, + &numberWaveFunctions, + cellNonLocalProjectorKetBatch, + &numberPseudoWaveFunctions, + &beta1, + cellNonLocalHamTimesWaveMatrixBatch, + &numberWaveFunctions, + &groupCount, + &groupSize); + + for(unsigned int iElemComp = 0; iElemComp < dftPtr->d_elementIteratorsInAtomCompactSupport[atomId].size(); ++iElemComp) + { + const unsigned int elementId = dftPtr->d_elementIdsInAtomCompactSupport[atomId][iElemComp]; + for(unsigned int iNode = 0; iNode < d_numberNodesPerElement; ++iNode) + { + + for (unsigned int iwave=0; iwave< numberWaveFunctions;++iwave) + temp[iwave]=(dataTypes::number) + cellNonLocalHamTimesWaveMatrixBatch[iElemComp][numberWaveFunctions*iNode+iwave]; + + dealii::types::global_dof_index localNodeId = d_flattenedArrayCellLocalProcIndexIdMap[elementId][iNode]; + daxpy_(&numberWaveFunctions, + &alpha1HighPrec, + &temp[0], + &inc1, + dst.begin()+localNodeId, + &inc1); + } + } + + for(unsigned int i = 0; i < groupSize; i++) + delete [] cellNonLocalHamTimesWaveMatrixBatch[i]; + + delete [] cellNonLocalHamTimesWaveMatrixBatch; + delete [] cellNonLocalProjectorKetBatch; + delete [] cellProjectorKetTimesVectorMatrixBatch; + + }//non local atomid loop + } #endif #endif diff --git a/src/dftOperator/hamiltonianMatrixCalculator.cc b/src/dftOperator/hamiltonianMatrixCalculator.cc index 505975122..9a4eaaa1a 100644 --- a/src/dftOperator/hamiltonianMatrixCalculator.cc +++ b/src/dftOperator/hamiltonianMatrixCalculator.cc @@ -34,6 +34,8 @@ void kohnShamDFTOperatorClass::computeHamiltonianMatrix(unsigned int kP d_cellHamiltonianMatrix.clear(); d_cellHamiltonianMatrix.resize(totalLocallyOwnedCells); + d_cellHamiltonianMatrixLowPrec.clear(); + d_cellHamiltonianMatrixLowPrec.resize(totalLocallyOwnedCells); // //Get some FE related Data // @@ -161,6 +163,8 @@ void kohnShamDFTOperatorClass::computeHamiltonianMatrix(unsigned int kP #else d_cellHamiltonianMatrix[iElem].resize(numberDofsPerElement*numberDofsPerElement+(numberDofsPerElement*numberDofsPerElement)%8,0.0); #endif + d_cellHamiltonianMatrixLowPrec[iElem].resize(numberDofsPerElement*numberDofsPerElement,0.0); + for(unsigned int iNode = 0; iNode < numberDofsPerElement; ++iNode) { for(unsigned int jNode = 0; jNode < numberDofsPerElement; ++jNode) @@ -168,8 +172,16 @@ void kohnShamDFTOperatorClass::computeHamiltonianMatrix(unsigned int kP #ifdef USE_COMPLEX d_cellHamiltonianMatrix[iElem][numberDofsPerElement*iNode + jNode].real(elementHamiltonianMatrix[numberDofsPerElement*iNode + jNode][iSubCell]); d_cellHamiltonianMatrix[iElem][numberDofsPerElement*iNode + jNode].imag(elementHamiltonianMatrixImag[numberDofsPerElement*iNode + jNode][iSubCell]); + + d_cellHamiltonianMatrixLowPrec[iElem][numberDofsPerElement*iNode + jNode].real((float)elementHamiltonianMatrix[numberDofsPerElement*iNode + jNode][iSubCell]); + d_cellHamiltonianMatrixLowPrec[iElem][numberDofsPerElement*iNode + jNode].imag((float)elementHamiltonianMatrixImag[numberDofsPerElement*iNode + jNode][iSubCell]); + #else - d_cellHamiltonianMatrix[iElem][numberDofsPerElement*iNode + jNode] = elementHamiltonianMatrix[numberDofsPerElement*iNode + jNode][iSubCell]; + d_cellHamiltonianMatrix[iElem][numberDofsPerElement*iNode + jNode] + = elementHamiltonianMatrix[numberDofsPerElement*iNode + jNode][iSubCell]; + + d_cellHamiltonianMatrixLowPrec[iElem][numberDofsPerElement*iNode + jNode] + = (dataTypes::numberLowPrec)elementHamiltonianMatrix[numberDofsPerElement*iNode + jNode][iSubCell]; #endif } diff --git a/src/dftOperator/kohnShamDFTOperator.cc b/src/dftOperator/kohnShamDFTOperator.cc index ad83b938e..5807eb577 100644 --- a/src/dftOperator/kohnShamDFTOperator.cc +++ b/src/dftOperator/kohnShamDFTOperator.cc @@ -107,10 +107,16 @@ namespace dftfe { flattenedArray); if(dftParameters::isPseudopotential) + { vectorTools::createDealiiVector(dftPtr->d_projectorKetTimesVectorPar[0].get_partitioner(), numberWaveFunctions, dftPtr->d_projectorKetTimesVectorParFlattened); + vectorTools::createDealiiVector(dftPtr->d_projectorKetTimesVectorPar[0].get_partitioner(), + numberWaveFunctions, + dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec); + } + vectorTools::computeCellLocalIndexSetMap(flattenedArray.get_partitioner(), @@ -129,9 +135,15 @@ void kohnShamDFTOperatorClass::reinit(const unsigned int numberWaveFunc { if(dftParameters::isPseudopotential) + { vectorTools::createDealiiVector(dftPtr->d_projectorKetTimesVectorPar[0].get_partitioner(), numberWaveFunctions, dftPtr->d_projectorKetTimesVectorParFlattened); + vectorTools::createDealiiVector + (dftPtr->d_projectorKetTimesVectorPar[0].get_partitioner(), + numberWaveFunctions, + dftPtr->d_projectorKetTimesVectorParFlattenedLowPrec); + } } @@ -388,6 +400,7 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map > & dst) @@ -516,6 +529,7 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map & dst) @@ -563,9 +577,16 @@ void kohnShamDFTOperatorClass::computeVEff(const std::map::computeVEff(const std::map::computeVEff(const std::map::computeVEff(const std::map::computeVEff(const std::map::computeLocalHamiltonianTimesXBatchGEMM ( delete [] cellHamMatrixTimesWaveMatrixBatch; delete [] cellHamMatrixBatch; } + +template +void kohnShamDFTOperatorClass::computeLocalHamiltonianTimesXBatchGEMMSinglePrec + (const dealii::parallel::distributed::Vector & src, + const unsigned int numberWaveFunctions, + dealii::parallel::distributed::Vector & dst) const +{ + AssertThrow(false,dftUtils::ExcNotImplementedYet()); +} #endif #else template @@ -540,5 +549,105 @@ void kohnShamDFTOperatorClass::computeLocalHamiltonianTimesXBatchGEMM ( delete [] cellHamMatrixTimesWaveMatrixBatch; delete [] cellHamMatrixBatch; } + +template +void kohnShamDFTOperatorClass::computeLocalHamiltonianTimesXBatchGEMMSinglePrec + (const dealii::parallel::distributed::Vector & src, + const unsigned int numberWaveFunctions, + dealii::parallel::distributed::Vector & dst) const +{ + + // + //element level matrix-vector multiplications + // + const char transA = 'N',transB = 'N'; + const dataTypes::number scalarCoeffAlpha = 1.0,scalarCoeffBeta = 0.0; + const dataTypes::numberLowPrec scalarCoeffAlphaLowPrec = 1.0,scalarCoeffBetaLowPrec = 0.0; + const unsigned int inc = 1; + + const unsigned int groupCount=1; + const unsigned int groupSize=VectorizedArray::n_array_elements; + + dataTypes::numberLowPrec ** cellWaveFunctionMatrixBatch = new dataTypes::numberLowPrec*[groupSize]; + dataTypes::numberLowPrec ** cellHamMatrixTimesWaveMatrixBatch = new dataTypes::numberLowPrec*[groupSize]; + const dataTypes::numberLowPrec ** cellHamMatrixBatch = new dataTypes::numberLowPrec*[groupSize]; + for(unsigned int i = 0; i < groupSize; i++) + { + cellWaveFunctionMatrixBatch[i] = new dataTypes::numberLowPrec[d_numberNodesPerElement*numberWaveFunctions]; + cellHamMatrixTimesWaveMatrixBatch[i] = new dataTypes::numberLowPrec[d_numberNodesPerElement*numberWaveFunctions]; + } + + unsigned int iElem= 0; + std::vector temp(numberWaveFunctions); + for(unsigned int iMacroCell = 0; iMacroCell < d_numberMacroCells; ++iMacroCell) + { + + for(unsigned int isubcell = 0; isubcell < d_macroCellSubCellMap[iMacroCell]; isubcell++) + { + for(unsigned int iNode = 0; iNode < d_numberNodesPerElement; ++iNode) + { + + dealii::types::global_dof_index localNodeId = d_flattenedArrayMacroCellLocalProcIndexIdMap[iElem+isubcell][iNode]; + dcopy_(&numberWaveFunctions, + src.begin()+localNodeId, + &inc, + &temp[0], + &inc); + + for (unsigned int iwave=0; iwave< numberWaveFunctions;++iwave) + cellWaveFunctionMatrixBatch[isubcell][numberWaveFunctions*iNode+iwave] + =(dataTypes::numberLowPrec)temp[iwave]; + } + + cellHamMatrixBatch[isubcell] =&d_cellHamiltonianMatrixLowPrec[iElem+isubcell][0]; + } + + sgemm_batch_(&transA, + &transB, + &numberWaveFunctions, + &d_numberNodesPerElement, + &d_numberNodesPerElement, + &scalarCoeffAlphaLowPrec, + cellWaveFunctionMatrixBatch, + &numberWaveFunctions, + cellHamMatrixBatch, + &d_numberNodesPerElement, + &scalarCoeffBetaLowPrec, + cellHamMatrixTimesWaveMatrixBatch, + &numberWaveFunctions, + &groupCount, + &d_macroCellSubCellMap[iMacroCell]); + + for(unsigned int isubcell = 0; isubcell < d_macroCellSubCellMap[iMacroCell]; isubcell++) + for(unsigned int iNode = 0; iNode < d_numberNodesPerElement; ++iNode) + { + + for (unsigned int iwave=0; iwave< numberWaveFunctions;++iwave) + temp[iwave]=(dataTypes::number) + cellHamMatrixTimesWaveMatrixBatch[isubcell][numberWaveFunctions*iNode+iwave]; + + dealii::types::global_dof_index localNodeId + = d_flattenedArrayMacroCellLocalProcIndexIdMap[iElem+isubcell][iNode]; + daxpy_(&numberWaveFunctions, + &scalarCoeffAlpha, + &temp[0], + &inc, + dst.begin()+localNodeId, + &inc); + } + + + iElem+=d_macroCellSubCellMap[iMacroCell]; + }//macrocell loop + + for(unsigned int i = 0; i < groupSize; i++) + { + delete [] cellWaveFunctionMatrixBatch[i]; + delete [] cellHamMatrixTimesWaveMatrixBatch[i]; + } + delete [] cellWaveFunctionMatrixBatch; + delete [] cellHamMatrixTimesWaveMatrixBatch; + delete [] cellHamMatrixBatch; +} #endif #endif diff --git a/src/linAlg/linearAlgebraOperationsOpt.cc b/src/linAlg/linearAlgebraOperationsOpt.cc index fb76256bb..8b56fc286 100644 --- a/src/linAlg/linearAlgebraOperationsOpt.cc +++ b/src/linAlg/linearAlgebraOperationsOpt.cc @@ -266,7 +266,8 @@ namespace dftfe{ const unsigned int m, const double a, const double b, - const double a0) + const double a0, + const bool useMixedPrec) { double e, c, sigma, sigma1, sigma2, gamma; e = (b-a)/2.0; c = (b+a)/2.0; @@ -292,10 +293,12 @@ namespace dftfe{ // bool scaleFlag = false; double scalar = 1.0; + operatorMatrix.HX(XArray, numberWaveFunctions, scaleFlag, scalar, + false, YArray); @@ -326,11 +329,21 @@ namespace dftfe{ //call HX // bool scaleFlag = true; - operatorMatrix.HX(YArray, - numberWaveFunctions, - scaleFlag, - alpha1, - XArray); + + if (degree<0.9*m && useMixedPrec) + operatorMatrix.HX(YArray, + numberWaveFunctions, + scaleFlag, + alpha1, + true, + XArray); + else + operatorMatrix.HX(YArray, + numberWaveFunctions, + scaleFlag, + alpha1, + false, + XArray); // //XArray = YArray @@ -659,6 +672,7 @@ namespace dftfe{ B, scaleFlag, scalar, + false, HXBlock); //compute residual norms: @@ -1060,7 +1074,8 @@ namespace dftfe{ const unsigned int, const double , const double , - const double ); + const double, + const bool useMixedPrec); template void gramSchmidtOrthogonalization(std::vector &, @@ -1072,6 +1087,7 @@ namespace dftfe{ const MPI_Comm &, const unsigned int numberCoreVectors, const MPI_Comm &mpiComm, + const bool useMixedPrec, std::vector & tempNonCoreVectorsArray); template void rayleighRitz(operatorDFTClass & operatorMatrix, diff --git a/src/linAlg/pseudoGS.cc b/src/linAlg/pseudoGS.cc index 3c64797a9..72cea3b3b 100644 --- a/src/linAlg/pseudoGS.cc +++ b/src/linAlg/pseudoGS.cc @@ -33,6 +33,7 @@ namespace dftfe const MPI_Comm &interBandGroupComm, const unsigned int numberCoreVectors, const MPI_Comm & mpiComm, + const bool useMixedPrec, std::vector & tempNonCoreVectorsArray) { @@ -57,7 +58,7 @@ namespace dftfe //S=X*X^{T}. Implemented as S=X^{T}*X with X^{T} stored in the column major format computing_timer.enter_section("Fill overlap matrix for PGS"); - if (!dftParameters::useMixedPrecPGS_O) + if (!(dftParameters::useMixedPrecPGS_O && useMixedPrec)) internal::fillParallelOverlapMatrix(&X[0], X.size(), numberVectors, @@ -146,7 +147,7 @@ namespace dftfe //X=X*L^{-1}^{T} implemented as X^{T}=L^{-1}*X^{T} with X^{T} stored in the column major format computing_timer.enter_section("Subspace rotation PGS"); - if (!dftParameters::useMixedPrecPGS_SR) + if (!(dftParameters::useMixedPrecPGS_SR && useMixedPrec)) internal::subspaceRotation(&X[0], X.size(), numberVectors, @@ -181,6 +182,7 @@ namespace dftfe const MPI_Comm &interBandGroupComm, const unsigned int numberCoreVectors, const MPI_Comm & mpiComm, + const bool useMixedPrec, std::vector & tempNonCoreVectorsArray) { const unsigned int localVectorSize = X.size()/numberVectors; diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index 7e37d7424..66bdb1973 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -114,7 +114,8 @@ namespace dftfe{ const unsigned int totalNumberWaveFunctions, std::vector & eigenValues, std::vector & residualNorms, - const MPI_Comm &interBandGroupComm) + const MPI_Comm &interBandGroupComm, + const bool useMixedPrec) { @@ -222,7 +223,9 @@ namespace dftfe{ chebyshevOrder/2, d_lowerBoundUnWantedSpectrum, upperBoundUnwantedSpectrum, - d_lowerBoundWantedSpectrum); + d_lowerBoundWantedSpectrum, + dftParameters::useMixedPrecCheby && useMixedPrec? + true:false); else linearAlgebraOperations::chebyshevFilter(operatorMatrix, eigenVectorsFlattenedArrayBlock, @@ -230,7 +233,9 @@ namespace dftfe{ chebyshevOrder, d_lowerBoundUnWantedSpectrum, upperBoundUnwantedSpectrum, - d_lowerBoundWantedSpectrum); + d_lowerBoundWantedSpectrum, + dftParameters::useMixedPrecCheby && useMixedPrec? + true:false); computing_timer.exit_section("Chebyshev filtering opt"); if (dftParameters::verbosity>=4) @@ -321,6 +326,7 @@ namespace dftfe{ interBandGroupComm, totalNumberWaveFunctions-eigenValues.size(), operatorMatrix.getMPICommunicator(), + useMixedPrec, eigenVectorsFlattenedRR); if (flag==1) diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_d.mpirun=10.output b/tests/dft/pseudopotential/real/nitrogenMolecule_03_d.mpirun=10.output new file mode 100644 index 000000000..98f3257f8 --- /dev/null +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_d.mpirun=10.output @@ -0,0 +1,34 @@ +number of atoms: 2 +number of atoms types: 1 +-----------Simulation Domain bounding vectors (lattice vectors in fully periodic case)------------- +v1 : 8.000000000000000000e+01 0.000000000000000000e+00 0.000000000000000000e+00 +v2 : 0.000000000000000000e+00 8.000000000000000000e+01 0.000000000000000000e+00 +v3 : 0.000000000000000000e+00 0.000000000000000000e+00 8.000000000000000000e+01 +----------------------------------------------------------------------------------------- +------------Cartesian coordinates of atoms (origin at center of domain)------------------ +AtomId 0: -1.199999999999999956e+00 0.000000000000000000e+00 0.000000000000000000e+00 +AtomId 1: 1.199999999999999956e+00 0.000000000000000000e+00 0.000000000000000000e+00 +----------------------------------------------------------------------------------------- + +Finite element mesh information +------------------------------------------------- +number of elements: 960 +number of degrees of freedom: 31257 +------------------------------------------------- + +Setting initial guess for wavefunctions.... +============================================================================================================================= +number of electrons: 10 +number of eigen values: 12 +============================================================================================================================= + +Reading initial guess for electron-density..... + +Pseudopotential initalization.... + +Starting SCF iterations.... +SCF iterations converged to the specified tolerance after: 12 iterations. + +Energy computations (Hartree) +------------------- + Total energy: -19.834557 diff --git a/tests/dft/pseudopotential/real/nitrogenMolecule_03_d.prm.in b/tests/dft/pseudopotential/real/nitrogenMolecule_03_d.prm.in new file mode 100644 index 000000000..5ceac33e3 --- /dev/null +++ b/tests/dft/pseudopotential/real/nitrogenMolecule_03_d.prm.in @@ -0,0 +1,59 @@ +set VERBOSITY = 0 +set REPRODUCIBLE OUTPUT = true + +subsection Geometry + set NATOMS=2 + set NATOM TYPES=1 + set ATOMIC COORDINATES FILE = @SOURCE_DIR@/nitrogenMolecule_coordinates.inp + set DOMAIN VECTORS FILE = @SOURCE_DIR@/nitrogenMolecule_domainVectors.inp +end + +subsection Boundary conditions + set PERIODIC1 = false + set PERIODIC2 = false + set PERIODIC3 = false + set SELF POTENTIAL RADIUS = 4.0 +end + +subsection Finite element mesh parameters + set POLYNOMIAL ORDER=3 + subsection Auto mesh generation parameters + set MESH SIZE AROUND ATOM = 0.7 + set BASE MESH SIZE = 10.0 + set ATOM BALL RADIUS = 2.0 + set MESH SIZE AT ATOM = 0.7 + end +end + +subsection DFT functional parameters + set EXCHANGE CORRELATION TYPE = 4 + set PSEUDOPOTENTIAL CALCULATION = true + set PSEUDO TESTS FLAG = true + set PSEUDOPOTENTIAL FILE NAMES LIST = @SOURCE_DIR@/pseudoNGGA.inp +end + +subsection Parallelization + set NPBAND=2 +end + + +subsection SCF parameters + set MIXING HISTORY = 70 + set MIXING PARAMETER = 0.5 + set MAXIMUM ITERATIONS = 40 + set TEMPERATURE = 500 + set TOLERANCE = 5e-6 + set HIGHER QUAD NLP = true + subsection Eigen-solver parameters + set NUMBER OF KOHN-SHAM WAVEFUNCTIONS = 12 + set ORTHOGONALIZATION TYPE=PGS + set CHEBYSHEV POLYNOMIAL DEGREE = 30 + set CHEBYSHEV FILTER TOLERANCE=2e-3 + set USE MIXED PREC PGS SR=true + set USE MIXED PREC PGS O=true + set USE MIXED PREC CHEBY=true + set MIXED PREC STOPPING TOL=1e-4 + set WFC BLOCK SIZE=3 + set SUBSPACE ROT DOFS BLOCK SIZE=500 + end +end diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index ddcd86f07..ca7540fbc 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -71,7 +71,9 @@ namespace dftParameters bool useHigherQuadNLP=true; bool useMixedPrecPGS_SR=false; bool useMixedPrecPGS_O=false; + bool useMixedPrecCheby=false; unsigned int numAdaptiveFilterStates=0; + double mixedPrecStoppingTol=1e-4; void declare_parameters(ParameterHandler &prm) { @@ -424,6 +426,14 @@ namespace dftParameters Patterns::Bool(), "[Advanced] Use mixed precision arithmetic in overlap matrix computation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false."); + prm.declare_entry("USE MIXED PREC CHEBY", "false", + Patterns::Bool(), + "[Advanced] Use mixed precision arithmetic in Chebyshev filtering. Currently this optimization is only enabled for the real executable and batch gemm. Default setting is false."); + + prm.declare_entry("MIXED PREC STOPPING TOL", "1e-4", + Patterns::Double(0), + "[Advanced] Scf tolerance below which mixed precision cannot be used. Default value is 1e-4."); + prm.declare_entry("ADAPTIVE FILTER STATES", "0", Patterns::Integer(0), "[Advanced] Number of lowest Kohn-Sham eigenstates which are filtered with half the Chebyshev polynomial degree specified by CHEBYSHEV POLYNOMIAL DEGREE. This value is usually chosen to be the sum of the number of core eigenstates for each atom type multiplied by number of atoms of that type. This setting is recommended for medium-large systems (greater than 2000 electrons). Default value is 0 i.e., all states are filtered with the same Chebyshev polynomial degree."); @@ -577,6 +587,8 @@ namespace dftParameters dftParameters::scalapackParalProcs= prm.get_integer("SCALAPACKPROCS"); dftParameters::useMixedPrecPGS_SR= prm.get_bool("USE MIXED PREC PGS SR"); dftParameters::useMixedPrecPGS_O= prm.get_bool("USE MIXED PREC PGS O"); + dftParameters::useMixedPrecCheby= prm.get_bool("USE MIXED PREC CHEBY"); + dftParameters::mixedPrecStoppingTol= prm.get_double("MIXED PREC STOPPING TOL"); dftParameters::numAdaptiveFilterStates= prm.get_integer("ADAPTIVE FILTER STATES"); } prm.leave_subsection (); diff --git a/utils/vectorTools/vectorUtilities.cc b/utils/vectorTools/vectorUtilities.cc index 02b358404..731990167 100644 --- a/utils/vectorTools/vectorUtilities.cc +++ b/utils/vectorTools/vectorUtilities.cc @@ -474,6 +474,9 @@ namespace dftfe const unsigned int , dealii::parallel::distributed::Vector &); + template void createDealiiVector(const std::shared_ptr &, + const unsigned int , + dealii::parallel::distributed::Vector &); }//end of namespace From d5e886bdfe660f970ebe198cec4936df0d61ac91 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Fri, 21 Sep 2018 19:32:23 -0400 Subject: [PATCH 55/59] Modified algoirhm for adapative chebyshev filtering states. --- .../chebyshevOrthogonalizedSubspaceIterationSolver.cc | 7 ++++++- utils/dftParameters.cc | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index 7e37d7424..b8eb97579 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -216,13 +216,18 @@ namespace dftfe{ //and does in-place filtering computing_timer.enter_section("Chebyshev filtering opt"); if (jvec+BVec Date: Fri, 21 Sep 2018 19:52:23 -0400 Subject: [PATCH 56/59] Fixed compilation issue due to previous merge. --- .../chebyshevOrthogonalizedSubspaceIterationSolver.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc index 21c43bab1..419989e0d 100755 --- a/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc +++ b/src/solvers/eigenSolvers/chebyshevOrthogonalizedSubspaceIterationSolver.cc @@ -229,7 +229,8 @@ namespace dftfe{ upperBoundUnwantedSpectrum, d_lowerBoundWantedSpectrum, dftParameters::useMixedPrecCheby && useMixedPrec? - true:false); + true:false); + } else linearAlgebraOperations::chebyshevFilter(operatorMatrix, eigenVectorsFlattenedArrayBlock, From 587a90d5f38e31d18a66780cec1814cb00177fb6 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Tue, 25 Sep 2018 22:04:08 -0400 Subject: [PATCH 57/59] Updated welcome message and version. --- Doxyfile | 2 +- utils/dftParameters.cc | 11 ++++++----- version | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Doxyfile b/Doxyfile index 1b83f4324..fcb5995ef 100644 --- a/Doxyfile +++ b/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = "DFT-FE" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "0.5.2" +PROJECT_NUMBER = "0.6.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/utils/dftParameters.cc b/utils/dftParameters.cc index e8134c4eb..d3896c5fd 100644 --- a/utils/dftParameters.cc +++ b/utils/dftParameters.cc @@ -420,7 +420,7 @@ namespace dftParameters prm.declare_entry("USE MIXED PREC PGS SR", "false", Patterns::Bool(), - "[Advanced] Use mixed precision arithmetic in susbpace rotation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false."); + "[Advanced] Use mixed precision arithmetic in subspace rotation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false."); prm.declare_entry("USE MIXED PREC PGS O", "false", Patterns::Bool(), @@ -615,10 +615,11 @@ namespace dftParameters { std::cout << "==========================================================================================================" << std::endl ; std::cout << "==========================================================================================================" << std::endl ; - std::cout << " Welcome to the Open Source program DFT-FE v0.5 " << std::endl ; - std::cout << "This is a C++ code for materials modeling from first principles using Kohn-Sham density functional theory " << std::endl ; - std::cout << "It is based on adaptive finite-element based methodologies. " << std::endl ; - std::cout << "For details and citing please refer to our website: https://sites.google.com/umich.edu/dftfe" << std::endl ; + std::cout << " Welcome to the Open Source program DFT-FE v0.6.0 " << std::endl ; + std::cout << "This is a C++ code for materials modeling from first principles using Kohn-Sham density functional theory." << std::endl ; + std::cout << "This is a real-space code for periodic, semi-periodic and non-periodic pseudopotential" << std::endl ; + std::cout << "and all-electron calculations, and is based on adaptive finite-element discretization." << std::endl ; + std::cout << "For further details, and citing, please refer to our website: https://sites.google.com/umich.edu/dftfe" << std::endl ; std::cout << "==========================================================================================================" << std::endl ; std::cout << " DFT-FE Principal developers and Mentors (alphabetically) : " << std::endl ; std::cout << " " << std::endl ; diff --git a/version b/version index 9df29be5c..e26d1601b 100644 --- a/version +++ b/version @@ -1 +1 @@ -0.5.2 +0.6.0 From 5f9a8d95b245ec6cc338e15eac397b00941b0069 Mon Sep 17 00:00:00 2001 From: Sambit Das Date: Tue, 25 Sep 2018 21:36:03 -0500 Subject: [PATCH 58/59] Updated manual parameters and release version. --- doc/manual/manual.tex | 2 +- doc/manual/parameters.tex | 188 +++++++++++++++++++++++++++++++++----- 2 files changed, 167 insertions(+), 23 deletions(-) diff --git a/doc/manual/manual.tex b/doc/manual/manual.tex index bcdb04c06..a8ff1c5d7 100644 --- a/doc/manual/manual.tex +++ b/doc/manual/manual.tex @@ -136,7 +136,7 @@ \hfill{\Huge \fontfamily{\sfdefault}\selectfont User Manual \\ \raggedleft \huge \fontfamily{\sfdefault}\selectfont Version % keep the following line as is so that we can replace this using a script: -0.5 %VERSION-INFO% +0.6 %VERSION-INFO% \\\large(generated \today)\\ \vspace{1.5em} {\Large Sambit Das\,\\Vikram Gavini\,\\Phani Motamarri\\} diff --git a/doc/manual/parameters.tex b/doc/manual/parameters.tex index ad38b3a2f..a836d4772 100644 --- a/doc/manual/parameters.tex +++ b/doc/manual/parameters.tex @@ -789,6 +789,22 @@ \subsection{Parameters in section \tt Parallelization} \label{parameters:Parallelization} \begin{itemize} +\item {\it Parameter name:} {\tt MPI ALLREDUCE BLOCK SIZE} +\phantomsection\label{parameters:Parallelization/MPI ALLREDUCE BLOCK SIZE} +\label{parameters:Parallelization/MPI_20ALLREDUCE_20BLOCK_20SIZE} + + +\index[prmindex]{MPI ALLREDUCE BLOCK SIZE} +\index[prmindexfull]{Parallelization!MPI ALLREDUCE BLOCK SIZE} + + +{\it Default:} 100.0 + + +{\it Description:} [Advanced] Block message size in MB used to break a single MPI\_Allreduce call on wavefunction vectors data into multiple MPI\_Allreduce calls. This is useful on certain architectures which take advantage of High Bandwidth Memory to improve efficiency of MPI operations. This variable is relevant only if NPBAND>1. Default value is 100.0 MB. + + +{\it Possible values:} A floating point number $v$ such that $0 \leq v \leq \text{MAX\_DOUBLE}$ \item {\it Parameter name:} {\tt NPBAND} \phantomsection\label{parameters:Parallelization/NPBAND} @@ -863,51 +879,51 @@ \subsection{Parameters in section \tt SCF parameters} \label{parameters:SCF_20parameters} \begin{itemize} -\item {\it Parameter name:} {\tt ANDERSON SCHEME MIXING HISTORY} -\phantomsection\label{parameters:SCF parameters/ANDERSON SCHEME MIXING HISTORY} -\label{parameters:SCF_20parameters/ANDERSON_20SCHEME_20MIXING_20HISTORY} +\item {\it Parameter name:} {\tt COMPUTE ENERGY EACH ITER} +\phantomsection\label{parameters:SCF parameters/COMPUTE ENERGY EACH ITER} +\label{parameters:SCF_20parameters/COMPUTE_20ENERGY_20EACH_20ITER} -\index[prmindex]{ANDERSON SCHEME MIXING HISTORY} -\index[prmindexfull]{SCF parameters!ANDERSON SCHEME MIXING HISTORY} +\index[prmindex]{COMPUTE ENERGY EACH ITER} +\index[prmindexfull]{SCF parameters!COMPUTE ENERGY EACH ITER} -{\it Default:} 10 +{\it Default:} true -{\it Description:} [Standard] Number of SCF iteration history to be considered for mixing the electron-density using Anderson mixing scheme. For metallic systems, a mixing history larger than the default value provides better scf convergence. +{\it Description:} [Advanced] Boolean parameter specifying whether to compute the total energy at the end of every SCF. Setting it to false can lead to some computational time savings. -{\it Possible values:} An integer $n$ such that $1\leq n \leq 1000$ -\item {\it Parameter name:} {\tt ANDERSON SCHEME MIXING PARAMETER} -\phantomsection\label{parameters:SCF parameters/ANDERSON SCHEME MIXING PARAMETER} -\label{parameters:SCF_20parameters/ANDERSON_20SCHEME_20MIXING_20PARAMETER} +{\it Possible values:} A boolean value (true or false) +\item {\it Parameter name:} {\tt CONSTRAINT MAGNETIZATION} +\phantomsection\label{parameters:SCF parameters/CONSTRAINT MAGNETIZATION} +\label{parameters:SCF_20parameters/CONSTRAINT_20MAGNETIZATION} -\index[prmindex]{ANDERSON SCHEME MIXING PARAMETER} -\index[prmindexfull]{SCF parameters!ANDERSON SCHEME MIXING PARAMETER} +\index[prmindex]{CONSTRAINT MAGNETIZATION} +\index[prmindexfull]{SCF parameters!CONSTRAINT MAGNETIZATION} -{\it Default:} 0.5 +{\it Default:} false -{\it Description:} [Standard] Mixing parameter to be used in Anderson scheme. +{\it Description:} [Standard] Boolean parameter specifying whether to keep the starting magnetization fixed through the SCF iterations. Default is FALSE -{\it Possible values:} A floating point number $v$ such that $0 \leq v \leq 1$ -\item {\it Parameter name:} {\tt COMPUTE ENERGY EACH ITER} -\phantomsection\label{parameters:SCF parameters/COMPUTE ENERGY EACH ITER} -\label{parameters:SCF_20parameters/COMPUTE_20ENERGY_20EACH_20ITER} +{\it Possible values:} A boolean value (true or false) +\item {\it Parameter name:} {\tt HIGHER QUAD NLP} +\phantomsection\label{parameters:SCF parameters/HIGHER QUAD NLP} +\label{parameters:SCF_20parameters/HIGHER_20QUAD_20NLP} -\index[prmindex]{COMPUTE ENERGY EACH ITER} -\index[prmindexfull]{SCF parameters!COMPUTE ENERGY EACH ITER} +\index[prmindex]{HIGHER QUAD NLP} +\index[prmindexfull]{SCF parameters!HIGHER QUAD NLP} {\it Default:} true -{\it Description:} [Advanced] Boolean parameter specifying whether to compute the total energy at the end of every SCF. Setting it to false can lead to some computational time savings. +{\it Description:} [Advanced] Boolean parameter specifying whether to use a higher order quadrature rule for the calculations involving the non-local part of the pseudopotential. Default setting is true. Could be safely set to false if you are using a very refined mesh. {\it Possible values:} A boolean value (true or false) @@ -927,6 +943,54 @@ \subsection{Parameters in section \tt SCF parameters} {\it Possible values:} An integer $n$ such that $1\leq n \leq 1000$ +\item {\it Parameter name:} {\tt MIXING HISTORY} +\phantomsection\label{parameters:SCF parameters/MIXING HISTORY} +\label{parameters:SCF_20parameters/MIXING_20HISTORY} + + +\index[prmindex]{MIXING HISTORY} +\index[prmindexfull]{SCF parameters!MIXING HISTORY} + + +{\it Default:} 10 + + +{\it Description:} [Standard] Number of SCF iteration history to be considered for density mixing schemes. For metallic systems, a mixing history larger than the default value provides better scf convergence. + + +{\it Possible values:} An integer $n$ such that $1\leq n \leq 1000$ +\item {\it Parameter name:} {\tt MIXING METHOD} +\phantomsection\label{parameters:SCF parameters/MIXING METHOD} +\label{parameters:SCF_20parameters/MIXING_20METHOD} + + +\index[prmindex]{MIXING METHOD} +\index[prmindexfull]{SCF parameters!MIXING METHOD} + + +{\it Default:} ANDERSON + + +{\it Description:} [Standard] Method for density mixing. ANDERSON is the default option. + + +{\it Possible values:} Any one of BROYDEN, ANDERSON +\item {\it Parameter name:} {\tt MIXING PARAMETER} +\phantomsection\label{parameters:SCF parameters/MIXING PARAMETER} +\label{parameters:SCF_20parameters/MIXING_20PARAMETER} + + +\index[prmindex]{MIXING PARAMETER} +\index[prmindexfull]{SCF parameters!MIXING PARAMETER} + + +{\it Default:} 0.5 + + +{\it Description:} [Standard] Mixing parameter to be used in density mixing schemes. + + +{\it Possible values:} A floating point number $v$ such that $0 \leq v \leq 1$ \item {\it Parameter name:} {\tt STARTING WFC} \phantomsection\label{parameters:SCF parameters/STARTING WFC} \label{parameters:SCF_20parameters/STARTING_20WFC} @@ -983,6 +1047,22 @@ \subsection{Parameters in section \tt SCF parameters/Eigen-solver parameters} \label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters} \begin{itemize} +\item {\it Parameter name:} {\tt ADAPTIVE FILTER STATES} +\phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/ADAPTIVE FILTER STATES} +\label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/ADAPTIVE_20FILTER_20STATES} + + +\index[prmindex]{ADAPTIVE FILTER STATES} +\index[prmindexfull]{SCF parameters!Eigen-solver parameters!ADAPTIVE FILTER STATES} + + +{\it Default:} 0 + + +{\it Description:} [Advanced] Number of lowest Kohn-Sham eigenstates which are filtered with Chebyshev polynomial degree linearly varying from 50 percent (starting from the lowest) to 80 percent of the value specified by CHEBYSHEV POLYNOMIAL DEGREE. This imposes a step function filtering polynomial order on the ADAPTIVE FILTER STATES as filtering is done with blocks of size WFC BLOCK SIZE. This setting is recommended for large systems (greater than 5000 electrons). Default value is 0 i.e., all states are filtered with the same Chebyshev polynomial degree. + + +{\it Possible values:} An integer $n$ such that $0\leq n \leq 2147483647$ \item {\it Parameter name:} {\tt BATCH GEMM} \phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/BATCH GEMM} \label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/BATCH_20GEMM} @@ -1095,6 +1175,22 @@ \subsection{Parameters in section \tt SCF parameters/Eigen-solver parameters} {\it Possible values:} A floating point number $v$ such that $-\text{MAX\_DOUBLE} \leq v \leq \text{MAX\_DOUBLE}$ +\item {\it Parameter name:} {\tt MIXED PREC STOPPING TOL} +\phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/MIXED PREC STOPPING TOL} +\label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/MIXED_20PREC_20STOPPING_20TOL} + + +\index[prmindex]{MIXED PREC STOPPING TOL} +\index[prmindexfull]{SCF parameters!Eigen-solver parameters!MIXED PREC STOPPING TOL} + + +{\it Default:} 1e-4 + + +{\it Description:} [Advanced] Scf tolerance below which mixed precision cannot be used. Default value is 1e-4. + + +{\it Possible values:} A floating point number $v$ such that $0 \leq v \leq \text{MAX\_DOUBLE}$ \item {\it Parameter name:} {\tt NUMBER OF KOHN-SHAM WAVEFUNCTIONS} \phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/NUMBER OF KOHN_2dSHAM WAVEFUNCTIONS} \label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/NUMBER_20OF_20KOHN_2dSHAM_20WAVEFUNCTIONS} @@ -1175,6 +1271,54 @@ \subsection{Parameters in section \tt SCF parameters/Eigen-solver parameters} {\it Possible values:} An integer $n$ such that $1\leq n \leq 2147483647$ +\item {\it Parameter name:} {\tt USE MIXED PREC CHEBY} +\phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/USE MIXED PREC CHEBY} +\label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/USE_20MIXED_20PREC_20CHEBY} + + +\index[prmindex]{USE MIXED PREC CHEBY} +\index[prmindexfull]{SCF parameters!Eigen-solver parameters!USE MIXED PREC CHEBY} + + +{\it Default:} false + + +{\it Description:} [Advanced] Use mixed precision arithmetic in Chebyshev filtering. Currently this optimization is only enabled for the real executable and batch gemm. Default setting is false. + + +{\it Possible values:} A boolean value (true or false) +\item {\it Parameter name:} {\tt USE MIXED PREC PGS O} +\phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/USE MIXED PREC PGS O} +\label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/USE_20MIXED_20PREC_20PGS_20O} + + +\index[prmindex]{USE MIXED PREC PGS O} +\index[prmindexfull]{SCF parameters!Eigen-solver parameters!USE MIXED PREC PGS O} + + +{\it Default:} false + + +{\it Description:} [Advanced] Use mixed precision arithmetic in overlap matrix computation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false. + + +{\it Possible values:} A boolean value (true or false) +\item {\it Parameter name:} {\tt USE MIXED PREC PGS SR} +\phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/USE MIXED PREC PGS SR} +\label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/USE_20MIXED_20PREC_20PGS_20SR} + + +\index[prmindex]{USE MIXED PREC PGS SR} +\index[prmindexfull]{SCF parameters!Eigen-solver parameters!USE MIXED PREC PGS SR} + + +{\it Default:} false + + +{\it Description:} [Advanced] Use mixed precision arithmetic in subspace rotation step of PGS orthogonalization, if ORTHOGONALIZATION TYPE is set to PGS. Currently this optimization is only enabled for the real executable. Default setting is false. + + +{\it Possible values:} A boolean value (true or false) \item {\it Parameter name:} {\tt WFC BLOCK SIZE} \phantomsection\label{parameters:SCF parameters/Eigen_2dsolver parameters/WFC BLOCK SIZE} \label{parameters:SCF_20parameters/Eigen_2dsolver_20parameters/WFC_20BLOCK_20SIZE} From ccc3a50f6860a5671b71b4311876ad7f939516c5 Mon Sep 17 00:00:00 2001 From: Phani Motamarri Date: Thu, 27 Sep 2018 17:56:50 -0400 Subject: [PATCH 59/59] Modified CMakeLists to rename the target lib as dftfem. Previously it was dftFE which had a case conflict with TARGET name dftfe. This worked with intel compiler but compilation fails for gcc compilation --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a3fce8e42..cd8bb0551 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ # Set the name of the project and target: SET(TARGET "dftfe") -SET(TARGETLIB "dftFE") +SET(TARGETLIB "dftfem") INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include