From be47750308c63c4c2e7d752ed8836f9981328be0 Mon Sep 17 00:00:00 2001 From: caic99 Date: Fri, 5 Aug 2022 17:36:42 +0800 Subject: [PATCH 01/63] Feature: output math lib info On -DINFO defined in cmake, the program will output parameters to std::cerr stream of zgemm and zhegvx. --- CMakeLists.txt | 7 ++ source/module_base/CMakeLists.txt | 3 +- source/module_base/blas_connector.h | 130 +++++++++++++------- source/module_base/gather_math_lib_info.cpp | 70 +++++++++++ source/module_base/lapack_connector.h | 71 +++++++---- source/module_base/test/CMakeLists.txt | 8 +- source/module_hsolver/diago_david.cpp | 37 +++--- 7 files changed, 238 insertions(+), 88 deletions(-) create mode 100644 source/module_base/gather_math_lib_info.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index de85d43a7f..c42a1d2f27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ option(USE_OPENMP " Enable OpenMP in abacus." ON) option(ENABLE_ASAN "Enable AddressSanitizer" OFF) option(BUILD_TESTING "Build ABACUS unit tests" OFF) option(GENERATE_TEST_REPORTS "Enable test report generation" OFF) +option(INFO "Enable gathering of math library information" OFF) set(ABACUS_BIN_NAME abacus) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/modules) @@ -261,6 +262,12 @@ add_compile_definitions( TEST_EXX_RADIAL=1 ) +if(INFO) + message(STATUS "Will gather math lib info.") + add_compile_definitions(GATHER_INFO) + # modifications on blas_connector and lapack_connector +endif() + IF (BUILD_TESTING) set(CMAKE_CXX_STANDARD 14) # Required in orbital include(CTest) diff --git a/source/module_base/CMakeLists.txt b/source/module_base/CMakeLists.txt index e3c4a40121..1019e68acd 100644 --- a/source/module_base/CMakeLists.txt +++ b/source/module_base/CMakeLists.txt @@ -7,6 +7,7 @@ add_library( export.cpp integral.cpp inverse_matrix.cpp + gather_math_lib_info.cpp global_file.cpp global_function.cpp global_function_ddotreal.cpp @@ -16,7 +17,7 @@ add_library( math_polyint.cpp math_sphbes.cpp math_ylmreal.cpp - math_bspline.cpp + math_bspline.cpp math_chebyshev.cpp mathzone.cpp mathzone_add1.cpp diff --git a/source/module_base/blas_connector.h b/source/module_base/blas_connector.h index e0dfd77a50..e2b548bccc 100644 --- a/source/module_base/blas_connector.h +++ b/source/module_base/blas_connector.h @@ -18,13 +18,13 @@ extern "C" void daxpy_(const int *N, const double *alpha, const double *X, const int *incX, double *Y, const int *incY); void caxpy_(const int *N, const std::complex *alpha, const std::complex *X, const int *incX, std::complex *Y, const int *incY); void zaxpy_(const int *N, const std::complex *alpha, const std::complex *X, const int *incX, std::complex *Y, const int *incY); - + void dcopy_(long const *n, const double *a, int const *incx, double *b, int const *incy); - void zcopy_(long const *n, const std::complex *a, int const *incx, std::complex *b, int const *incy); + void zcopy_(long const *n, const std::complex *a, int const *incx, std::complex *b, int const *incy); //reason for passing results as argument instead of returning it: //see https://www.numbercrunch.de/blog/2014/07/lost-in-translation/ - void zdotc_(std::complex *result, const int *n, const std::complex *zx, + void zdotc_(std::complex *result, const int *n, const std::complex *zx, const int *incx, const std::complex *zy, const int *incy); // Peize Lin add ?dot 2017-10-27, to compute d=x*y float sdot_(const int *N, const float *X, const int *incX, const float *Y, const int *incY); @@ -36,36 +36,36 @@ extern "C" double dznrm2_( const int *n, const std::complex *X, const int *incX ); // level 2: matrix-std::vector operations, O(n^2) data and O(n^2) work. - void dgemv_(const char *transa, const int *m, const int *n, const double *alpha, const double *a, + void dgemv_(const char *transa, const int *m, const int *n, const double *alpha, const double *a, const int *lda, const double *x, const int *incx, const double *beta, double *y, const int *incy); - + void zgemv_(const char *trans, const int *m, const int *n, const std::complex *alpha, const std::complex *a, const int *lda, const std::complex *x, const int *incx, const std::complex *beta, std::complex *y, const int *incy); - void dsymv_(const char *uplo, const int *n, - const double *alpha, const double *a, const int *lda, - const double *x, const int *incx, - const double *beta, double *y, const int *incy); + void dsymv_(const char *uplo, const int *n, + const double *alpha, const double *a, const int *lda, + const double *x, const int *incx, + const double *beta, double *y, const int *incy); // A := alpha x * y.T + A void dger_(int *m, int *n, double *alpha, double *x, int *incx, double *y, int *incy, double *a, int *lda); void zgerc_(int *m, int *n, std::complex *alpha,std::complex *x, int *incx, std::complex *y, int *incy,std::complex *a, int *lda); // level 3: matrix-matrix operations, O(n^2) data and O(n^3) work. - + // Peize Lin add ?gemm 2017-10-27, to compute C = a * A.? * B.? + b * C // A is general void sgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, - const float *alpha, const float *a, const int *lda, const float *b, const int *ldb, + const float *alpha, const float *a, const int *lda, const float *b, const int *ldb, const float *beta, float *c, const int *ldc); void dgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, - const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, + const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, const double *beta, double *c, const int *ldc); void zgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, - const std::complex *alpha, const std::complex *a, const int *lda, const std::complex *b, const int *ldb, + const std::complex *alpha, const std::complex *a, const int *lda, const std::complex *b, const int *ldb, const std::complex *beta, std::complex *c, const int *ldc); - + //a is symmetric void dsymm_(const char *side, const char *uplo, const int *m, const int *n, const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, @@ -91,50 +91,50 @@ class BlasConnector // Peize Lin add 2016-08-04 // y=a*x+y - static inline + static inline void axpy( const int n, const float alpha, const float *X, const int incX, float *Y, const int incY) { saxpy_(&n, &alpha, X, &incX, Y, &incY); - } - static inline + } + static inline void axpy( const int n, const double alpha, const double *X, const int incX, double *Y, const int incY) { daxpy_(&n, &alpha, X, &incX, Y, &incY); - } - static inline + } + static inline void axpy( const int n, const std::complex alpha, const std::complex *X, const int incX, std::complex *Y, const int incY) { caxpy_(&n, &alpha, X, &incX, Y, &incY); - } - static inline + } + static inline void axpy( const int n, const std::complex alpha, const std::complex *X, const int incX, std::complex *Y, const int incY) { zaxpy_(&n, &alpha, X, &incX, Y, &incY); - } - + } + // Peize Lin add 2016-08-04 // x=a*x - static inline + static inline void scal( const int n, const float alpha, float *X, const int incX) { sscal_(&n, &alpha, X, &incX); - } - static inline + } + static inline void scal( const int n, const double alpha, double *X, const int incX) { dscal_(&n, &alpha, X, &incX); - } - static inline + } + static inline void scal( const int n, const std::complex alpha, std::complex *X, const int incX) { cscal_(&n, &alpha, X, &incX); - } - static inline + } + static inline void scal( const int n, const std::complex alpha, std::complex *X, const int incX) { zscal_(&n, &alpha, X, &incX); - } - + } + // Peize Lin add 2017-10-27 // d=x*y static inline @@ -149,32 +149,32 @@ class BlasConnector } // Peize Lin add 2017-10-27, fix bug trans 2019-01-17 - // C = a * A.? * B.? + b * C + // C = a * A.? * B.? + b * C static inline void gemm(const char transa, const char transb, const int m, const int n, const int k, - const float alpha, const float *a, const int lda, const float *b, const int ldb, + const float alpha, const float *a, const int lda, const float *b, const int ldb, const float beta, float *c, const int ldc) { sgemm_(&transb, &transa, &n, &m, &k, - &alpha, b, &ldb, a, &lda, + &alpha, b, &ldb, a, &lda, &beta, c, &ldc); } static inline void gemm(const char transa, const char transb, const int m, const int n, const int k, - const double alpha, const double *a, const int lda, const double *b, const int ldb, + const double alpha, const double *a, const int lda, const double *b, const int ldb, const double beta, double *c, const int ldc) { dgemm_(&transb, &transa, &n, &m, &k, - &alpha, b, &ldb, a, &lda, + &alpha, b, &ldb, a, &lda, &beta, c, &ldc); } static inline void gemm(const char transa, const char transb, const int m, const int n, const int k, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, + const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, const std::complex beta, std::complex *c, const int ldc) { zgemm_(&transb, &transa, &n, &m, &k, - &alpha, b, &ldb, a, &lda, + &alpha, b, &ldb, a, &lda, &beta, c, &ldc); } @@ -196,7 +196,7 @@ class BlasConnector return dznrm2_( &n, X, &incX ); } - // copies a into b + // copies a into b static inline void copy(const long n, const double *a, const int incx, double *b, const int incy) { @@ -206,8 +206,52 @@ class BlasConnector void copy(const long n, const std::complex *a, const int incx, std::complex *b, const int incy) { zcopy_(&n, a, &incx, b, &incy); - } - + } }; -#endif +// If GATHER_INFO is defined, the original function is replaced with a "i" suffix, +// preventing changes on the original code. +// The real function call is at gather_math_lib_info.cpp +#ifdef GATHER_INFO + +#define zgemm_ zgemm_i +void zgemm_i(const char *transa, + const char *transb, + const int *m, + const int *n, + const int *k, + const std::complex *alpha, + const std::complex *a, + const int *lda, + const std::complex *b, + const int *ldb, + const std::complex *beta, + std::complex *c, + const int *ldc); + +#define zaxpy_ zaxpy_i +void zaxpy_i(const int *N, + const std::complex *alpha, + const std::complex *X, + const int *incX, + std::complex *Y, + const int *incY); + +/* +#define zgemv_ zgemv_i + +void zgemv_i(const char *trans, + const int *m, + const int *n, + const std::complex *alpha, + const std::complex *a, + const int *lda, + const std::complex *x, + const int *incx, + const std::complex *beta, + std::complex *y, + const int *incy); +*/ + +#endif // GATHER_INFO +#endif // BLAS_CONNECTOR_H diff --git a/source/module_base/gather_math_lib_info.cpp b/source/module_base/gather_math_lib_info.cpp new file mode 100644 index 0000000000..5faf17afe0 --- /dev/null +++ b/source/module_base/gather_math_lib_info.cpp @@ -0,0 +1,70 @@ +// This file defines the math lib wrapper for output information before executing computations. +#undef GATHER_INFO +#include "module_base/blas_connector.h" +#include "module_base/lapack_connector.h" + +#include + +void zgemm_i(const char *transa, + const char *transb, + const int *m, + const int *n, + const int *k, + const std::complex *alpha, + const std::complex *a, + const int *lda, + const std::complex *b, + const int *ldb, + const std::complex *beta, + std::complex *c, + const int *ldc) +{ + std::cerr << std::defaultfloat << "zgemm " << *transa << " " << *transb << " " << *m << " " << *n << " " << *k + << " " << *alpha << " " << *lda << " " << *ldb << " " << *beta << " " << *ldc << std::endl; + zgemm_(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); +} + +void zaxpy_i(const int *N, + const std::complex *alpha, + const std::complex *X, + const int *incX, + std::complex *Y, + const int *incY) +{ + // std::cout << "zaxpy " << *N << std::endl; + // alpha is a coefficient + // incX, incY is always 1 + zaxpy_(N, alpha, X, incX, Y, incY); +} + +void zhegvx_i(const int *itype, + const char *jobz, + const char *range, + const char *uplo, + const int *n, + std::complex *a, + const int *lda, + std::complex *b, + const int *ldb, + const double *vl, + const double *vu, + const int *il, + const int *iu, + const double *abstol, + const int *m, + double *w, + std::complex *z, + const int *ldz, + std::complex *work, + const int *lwork, + double *rwork, + int *iwork, + int *ifail, + int *info) +{ + std::cerr << std::defaultfloat << "zhegvx " << *itype << " " << *jobz << " " << *range << " " << *uplo << " " << *n + << " " << *lda << " " << *ldb << " " << *vl << " " << *vu << " " << *il << " " << *iu << " " << *abstol + << " " << *m << " " << *lwork << " " << *info << std::endl; + zhegvx_(itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, + iwork, ifail, info); +} diff --git a/source/module_base/lapack_connector.h b/source/module_base/lapack_connector.h index 90efd5b87e..15c35488bf 100644 --- a/source/module_base/lapack_connector.h +++ b/source/module_base/lapack_connector.h @@ -42,7 +42,7 @@ extern "C" void dsygvx_(const int* itype, const char* jobz, const char* range, const char* uplo, const int* n, double* A, const int* lda, double* B, const int* ldb, const double* vl, const double* vu, const int* il, const int* iu, - const double* abstol, int* m, double* w, double* Z, const int* ldz, + const double* abstol, int* m, double* w, double* Z, const int* ldz, double* work, int* lwork, int*iwork, int* ifail, int* info); // solve the eigenproblem Ax=ex, where A is Symmetric and real double void dsyev_(const char* jobz,const char* uplo,const int* n,double *a, @@ -70,8 +70,8 @@ extern "C" // if trans=='N': C = alpha * A * A.H + beta * C // if trans=='C': C = alpha * A.H * A + beta * C - void zherk_(const char *uplo, const char *trans, const int *n, const int *k, - const double *alpha, const std::complex *A, const int *lda, + void zherk_(const char *uplo, const char *trans, const int *n, const int *k, + const double *alpha, const std::complex *A, const int *lda, const double *beta, std::complex *C, const int *ldc); // computes all eigenvalues of a symmetric tridiagonal matrix @@ -110,6 +110,34 @@ extern "C" } +#ifdef GATHER_INFO +#define zhegvx_ zhegvx_i +void zhegvx_i(const int* itype, + const char* jobz, + const char* range, + const char* uplo, + const int* n, + std::complex* a, + const int* lda, + std::complex* b, + const int* ldb, + const double* vl, + const double* vu, + const int* il, + const int* iu, + const double* abstol, + const int* m, + double* w, + std::complex* z, + const int* ldz, + std::complex* work, + const int* lwork, + double* rwork, + int* iwork, + int* ifail, + int* info); +#endif // GATHER_INFO + // Class LapackConnector provide the connector to fortran lapack routine. // The entire function in this class are static and inline function. // Usage example: LapackConnector::functionname(parameter list). @@ -143,8 +171,8 @@ class LapackConnector } } } - - // Peize Lin add 2015-12-27 + + // Peize Lin add 2015-12-27 static inline char change_uplo(const char &uplo) { @@ -153,9 +181,9 @@ class LapackConnector case 'U': return 'L'; case 'L': return 'U'; default: throw std::invalid_argument("uplo must be 'U' or 'L'"); - } + } } - + // Peize Lin add 2019-04-14 static inline char change_trans_NC(const char &trans) @@ -167,7 +195,7 @@ class LapackConnector default: throw std::invalid_argument("trans must be 'N' or 'C'"); } } - + public: static inline @@ -224,7 +252,7 @@ class LapackConnector delete[] bux; delete[] zux; - } + } // calculate the eigenvalues and eigenfunctions of a real symmetric matrix. static inline @@ -252,7 +280,7 @@ class LapackConnector b(j,i)=bux[i*lda+j]; } } - + // free the memory. delete[] aux; delete[] bux; @@ -264,16 +292,16 @@ class LapackConnector { assert(a.nr==a.nc); const char uplo_changed = change_uplo(uplo); - + double work_tmp; constexpr int minus_one = -1; dsyev_(&jobz, &uplo_changed, &a.nr, a.c, &a.nr, w, &work_tmp, &minus_one, &info); // get best lwork - + const int lwork = work_tmp; std::vector work(std::max(1,lwork)); - dsyev_(&jobz, &uplo_changed, &a.nr, a.c, &a.nr, w, ModuleBase::GlobalFunc::VECTOR_TO_PTR(work), &lwork, &info); + dsyev_(&jobz, &uplo_changed, &a.nr, a.c, &a.nr, w, ModuleBase::GlobalFunc::VECTOR_TO_PTR(work), &lwork, &info); } - + // wrap function of fortran lapack routine zheev. static inline void zheev( const char jobz, @@ -321,28 +349,27 @@ class LapackConnector { const char uplo_changed = change_uplo(uplo); dpotrf_( &uplo_changed, &n, a.c, &lda, info ); - } - + } + // Peize Lin add 2016-07-09 static inline void dpotri( char uplo, const int n, ModuleBase::matrix &a, const int lda, int *info ) { const char uplo_changed = change_uplo(uplo); - dpotri_( &uplo_changed, &n, a.c, &lda, info); - } - + dpotri_( &uplo_changed, &n, a.c, &lda, info); + } + // Peize Lin add 2019-04-14 // if trans=='N': C = a * A * A.H + b * C // if trans=='C': C = a * A.H * A + b * C static inline - void zherk(const char uplo, const char trans, const int n, const int k, - const double alpha, const std::complex *A, const int lda, + void zherk(const char uplo, const char trans, const int n, const int k, + const double alpha, const std::complex *A, const int lda, const double beta, std::complex *C, const int ldc) { const char uplo_changed = change_uplo(uplo); const char trans_changed = change_trans_NC(trans); zherk_(&uplo_changed, &trans_changed, &n, &k, &alpha, A, &lda, &beta, C, &ldc); } - }; #endif // LAPACKCONNECTOR_HPP diff --git a/source/module_base/test/CMakeLists.txt b/source/module_base/test/CMakeLists.txt index 494d9bf600..15ed0aecd8 100644 --- a/source/module_base/test/CMakeLists.txt +++ b/source/module_base/test/CMakeLists.txt @@ -2,7 +2,7 @@ remove_definitions(-D__MPI) AddTest( TARGET base_blas_connector LIBS ${math_libs} - SOURCES blas_connector_test.cpp + SOURCES blas_connector_test.cpp ../gather_math_lib_info.cpp ) AddTest( TARGET base_timer @@ -26,7 +26,7 @@ ADDTest( ) AddTest( TARGET base_vector3 - SOURCES vector3_test.cpp + SOURCES vector3_test.cpp ) AddTest( TARGET base_matrix3 @@ -53,7 +53,7 @@ AddTest( AddTest( TARGET base_complexmatrix LIBS ${math_libs} - SOURCES complexmatrix_test.cpp ../complexmatrix.cpp ../matrix.cpp + SOURCES complexmatrix_test.cpp ../complexmatrix.cpp ../matrix.cpp ) AddTest( TARGET base_integral @@ -66,7 +66,7 @@ AddTest( AddTest( TARGET base_ylmreal LIBS ${math_libs} - SOURCES math_ylmreal_test.cpp ../math_ylmreal.cpp ../ylm.cpp ../realarray.cpp ../timer.cpp ../matrix.cpp ../vector3.h + SOURCES math_ylmreal_test.cpp ../math_ylmreal.cpp ../ylm.cpp ../realarray.cpp ../timer.cpp ../matrix.cpp ../vector3.h ) AddTest( TARGET base_math_sphbes diff --git a/source/module_hsolver/diago_david.cpp b/source/module_hsolver/diago_david.cpp index be59f37dde..c2a53b3299 100644 --- a/source/module_hsolver/diago_david.cpp +++ b/source/module_hsolver/diago_david.cpp @@ -2,6 +2,7 @@ #include "diago_iter_assist.h" #include "module_base/constants.h" +#include "module_base/blas_connector.h" #include "module_base/lapack_connector.h" #include "module_base/timer.h" #include "src_parallel/parallel_reduce.h" @@ -80,13 +81,13 @@ void DiagoDavid::diag_mock(hamilt::Hamilt* phm_in, psi::Psi //phm_in->sPsi(psi_m.data(), spsi.data(), (size_t)dim); this->SchmitOrth( - dim, - nband, - m, - basis, + dim, + nband, + m, + basis, sp, - &lagrange_matrix(m, 0), - pre_matrix_mm_m[m], + &lagrange_matrix(m, 0), + pre_matrix_mm_m[m], pre_matrix_mv_m[m] ); phm_in->sPsi(&basis(m, 0), &sp(m, 0), (size_t)dim); @@ -343,7 +344,7 @@ void DiagoDavid::cal_grad(hamilt::Hamilt* phm_in, { phm_in->sPsi(&basis(nbase + m, 0), &sp(nbase + m, 0), (size_t)npw); } - //first nbase bands psi* dot notconv bands spsi to prepare lagrange_matrix + //first nbase bands psi* dot notconv bands spsi to prepare lagrange_matrix trans = 'C'; transb = 'N'; //calculate the square matrix for future lagranges @@ -367,13 +368,13 @@ void DiagoDavid::cal_grad(hamilt::Hamilt* phm_in, spsi = &sp(nbase + m, 0); this->SchmitOrth( - npw, - nbase + notconv, - nbase + m, - basis, - sp, + npw, + nbase + notconv, + nbase + m, + basis, + sp, &lagrange_matrix(m, 0), - pre_matrix_mm_m[m], + pre_matrix_mm_m[m], pre_matrix_mv_m[m] ); phm_in->sPsi(ppsi, spsi, (size_t)npw); @@ -598,7 +599,7 @@ void DiagoDavid::refresh(const int &npw, &ModuleBase::ZERO, // belta &basis(nband, 0), // C &basis.get_nbasis()); // LDC: if(N) max(1, m) - + /*for (int m = 0; m < nband; m++) { for (int j = 0; j < nbase; j++) @@ -835,10 +836,10 @@ void DiagoDavid::planSchmitOrth( for(int i=divide_times-1; i>=0; i--) { divide_points[i*2] = divide_points[i] - matrix_size; - divide_points[i*2+1] = divide_points[i*2] + last_matrix_size; + divide_points[i*2+1] = divide_points[i*2] + last_matrix_size; pre_matrix_mm_m[ divide_points[i*2] ] = matrix_size; pre_matrix_mm_m[ divide_points[i*2+1]] = matrix_size; - if(res_nband == matrix_size) + if(res_nband == matrix_size) { pre_matrix_mv_m[divide_points[i*2]] = 1; pre_matrix_mv_m[divide_points[i*2+1]] = 1; @@ -847,7 +848,7 @@ void DiagoDavid::planSchmitOrth( { pre_matrix_mv_m[divide_points[i*2]] = 2; pre_matrix_mv_m[divide_points[i*2+1]] = 2; - } + } } divide_times *= 2; } @@ -885,4 +886,4 @@ void DiagoDavid::diag(hamilt::Hamilt *phm_in, psi::Psi> &ps return; } -} // namespace hsolver \ No newline at end of file +} // namespace hsolver From c7bd18cc8e08e6ecd44c2a6e65b842f844dd49bb Mon Sep 17 00:00:00 2001 From: caic99 Date: Sat, 6 Aug 2022 19:10:29 +0800 Subject: [PATCH 02/63] Feature: output math lib info into a file --- source/module_base/gather_math_lib_info.cpp | 11 ++++++----- source/module_base/global_file.cpp | 18 ++++++++++++------ source/module_base/global_variable.cpp | 3 ++- source/module_base/global_variable.h | 1 + 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/source/module_base/gather_math_lib_info.cpp b/source/module_base/gather_math_lib_info.cpp index 5faf17afe0..c1fcecbcc1 100644 --- a/source/module_base/gather_math_lib_info.cpp +++ b/source/module_base/gather_math_lib_info.cpp @@ -1,4 +1,5 @@ // This file defines the math lib wrapper for output information before executing computations. +#include #undef GATHER_INFO #include "module_base/blas_connector.h" #include "module_base/lapack_connector.h" @@ -19,8 +20,8 @@ void zgemm_i(const char *transa, std::complex *c, const int *ldc) { - std::cerr << std::defaultfloat << "zgemm " << *transa << " " << *transb << " " << *m << " " << *n << " " << *k - << " " << *alpha << " " << *lda << " " << *ldb << " " << *beta << " " << *ldc << std::endl; + GlobalV::ofs_info << std::defaultfloat << "zgemm " << *transa << " " << *transb << " " << *m << " " << *n << " " + << *k << " " << *alpha << " " << *lda << " " << *ldb << " " << *beta << " " << *ldc << std::endl; zgemm_(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); } @@ -62,9 +63,9 @@ void zhegvx_i(const int *itype, int *ifail, int *info) { - std::cerr << std::defaultfloat << "zhegvx " << *itype << " " << *jobz << " " << *range << " " << *uplo << " " << *n - << " " << *lda << " " << *ldb << " " << *vl << " " << *vu << " " << *il << " " << *iu << " " << *abstol - << " " << *m << " " << *lwork << " " << *info << std::endl; + GlobalV::ofs_info << std::defaultfloat << "zhegvx " << *itype << " " << *jobz << " " << *range << " " << *uplo + << " " << *n << " " << *lda << " " << *ldb << " " << *vl << " " << *vu << " " << *il << " " << *iu + << " " << *abstol << " " << *m << " " << *lwork << " " << *info << std::endl; zhegvx_(itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info); } diff --git a/source/module_base/global_file.cpp b/source/module_base/global_file.cpp index eaa64c603f..9515fdc8a5 100644 --- a/source/module_base/global_file.cpp +++ b/source/module_base/global_file.cpp @@ -64,7 +64,7 @@ void ModuleBase::Global_File::make_dir_out( } else { - std::cout << " PROC " << rank << " CAN NOT MAKE THE DIR !!! " << std::endl; + std::cout << " PROC " << rank << " CAN NOT MAKE THE DIR !!! " << std::endl; make_dir = 0; } } @@ -79,7 +79,7 @@ void ModuleBase::Global_File::make_dir_out( if(make_dir==0) { std::cout << " CAN NOT MAKE THE OUT DIR......." << std::endl; - ModuleBase::QUIT(); + ModuleBase::QUIT(); } MPI_Barrier(MPI_COMM_WORLD); #endif @@ -101,7 +101,7 @@ void ModuleBase::Global_File::make_dir_out( } else { - std::cout << " PROC " << rank << " CAN NOT MAKE THE STRU DIR !!! " << std::endl; + std::cout << " PROC " << rank << " CAN NOT MAKE THE STRU DIR !!! " << std::endl; make_dir_stru = 0; } } @@ -116,7 +116,7 @@ void ModuleBase::Global_File::make_dir_out( if(make_dir_stru==0) { std::cout << " CAN NOT MAKE THE STRU DIR......." << std::endl; - ModuleBase::QUIT(); + ModuleBase::QUIT(); } MPI_Barrier(MPI_COMM_WORLD); #endif @@ -141,7 +141,10 @@ void ModuleBase::Global_File::make_dir_out( if(rank==0) { - open_log(GlobalV::ofs_warning, "warning", calculation, restart); + open_log(GlobalV::ofs_warning, "warning", calculation, restart); +#ifdef GATHER_INFO + open_log(GlobalV::ofs_info, "math_info", calculation, restart); +#endif } return; } @@ -220,7 +223,10 @@ void ModuleBase::Global_File::close_all_log(const int rank, const bool out_alllo if (rank==0) { - close_log(GlobalV::ofs_warning,"warning.log"); + close_log(GlobalV::ofs_warning, "warning.log"); +#ifdef GATHER_INFO + close_log(GlobalV::ofs_info, "math_info"); +#endif } return; } diff --git a/source/module_base/global_variable.cpp b/source/module_base/global_variable.cpp index a0f2966762..f99504bb85 100644 --- a/source/module_base/global_variable.cpp +++ b/source/module_base/global_variable.cpp @@ -128,7 +128,7 @@ std::string global_wannier_card; std::string global_pseudo_dir = ""; std::string global_orbital_dir = ""; // liuyu add 2021-08-14 -std::string global_pseudo_type = "auto"; +std::string global_pseudo_type = "auto"; std::string global_epm_pseudo_card; std::string global_out_dir; std::string global_readin_dir; // zhengdy modified @@ -136,6 +136,7 @@ std::string global_stru_dir; std::ofstream ofs_running; std::ofstream ofs_warning; +std::ofstream ofs_info; // output math lib info //---------------------------------------------------------- // EXPLAIN : test level for each class diff --git a/source/module_base/global_variable.h b/source/module_base/global_variable.h index 9d459f5b9a..27b554ac26 100644 --- a/source/module_base/global_variable.h +++ b/source/module_base/global_variable.h @@ -159,6 +159,7 @@ extern std::string global_stru_dir; // liuyu add 2022-05-24 for MD STRU extern std::ofstream ofs_running; extern std::ofstream ofs_warning; +extern std::ofstream ofs_info; //========================================================== // EXPLAIN : test level for each class From 805e79e5648e6f12130360f883d9f340d2439d85 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 15 Aug 2022 15:02:13 +0800 Subject: [PATCH 03/63] refactor : removed unnecessary cell layer --- source/Makefile.Objects | 2 -- source/run_lcao.cpp | 9 ++++----- source/run_pw.cpp | 8 ++++---- source/src_ions/CMakeLists.txt | 1 - source/src_ions/Cell_PW.cpp | 18 ------------------ source/src_ions/Cell_PW.h | 19 ------------------- source/src_lcao/CMakeLists.txt | 1 - source/src_lcao/LOOP_cell.cpp | 22 ---------------------- source/src_lcao/LOOP_cell.h | 19 ------------------- source/src_lcao/run_md_lcao.cpp | 9 --------- source/src_lcao/run_md_lcao.h | 1 - source/src_pw/Makefile.Objects | 1 - source/src_pw/run_md_pw.cpp | 18 +++--------------- source/src_pw/run_md_pw.h | 1 - 14 files changed, 11 insertions(+), 118 deletions(-) delete mode 100644 source/src_ions/Cell_PW.cpp delete mode 100644 source/src_ions/Cell_PW.h delete mode 100644 source/src_lcao/LOOP_cell.cpp delete mode 100644 source/src_lcao/LOOP_cell.h diff --git a/source/Makefile.Objects b/source/Makefile.Objects index e20bdad230..66fe12bb78 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -138,7 +138,6 @@ ORB_gen_tables.o\ local_orbital_wfc.o\ local_orbital_charge.o\ ELEC_evolve.o\ -LOOP_cell.o\ LOOP_ions.o\ run_md_lcao.o\ DM_gamma.o\ @@ -339,7 +338,6 @@ write_dm.o\ write_wfc_realspace.o\ magnetism.o\ optical.o\ -Cell_PW.o\ run_md_pw.o\ ions.o \ ions_move_methods.o\ diff --git a/source/run_lcao.cpp b/source/run_lcao.cpp index 165b200a9d..d9ad46359b 100644 --- a/source/run_lcao.cpp +++ b/source/run_lcao.cpp @@ -5,7 +5,7 @@ #include "src_io/cal_test.h" #include "src_io/winput.h" #include "module_neighbor/sltk_atom_arrange.h" -#include "src_lcao/LOOP_cell.h" +#include "src_lcao/LOOP_ions.h" #include "src_io/print_info.h" #include "src_lcao/run_md_lcao.h" @@ -73,13 +73,12 @@ void Run_lcao::lcao_line(ModuleESolver::ESolver* p_esolver) if (GlobalV::CALCULATION == "md") { Run_MD_LCAO run_md_lcao; - run_md_lcao.opt_cell(p_esolver); + run_md_lcao.opt_ions(p_esolver); } else // cell relaxations { - LOOP_cell lc; - //keep wfc_gamma or wfc_k remaining - lc.opt_cell(p_esolver); + LOOP_ions ions; + ions.opt_ions(p_esolver); } //---------------------------MD/Relax------------------ diff --git a/source/run_pw.cpp b/source/run_pw.cpp index 95557a3933..96a9cd668e 100644 --- a/source/run_pw.cpp +++ b/source/run_pw.cpp @@ -6,7 +6,7 @@ #include "src_io/numerical_basis.h" #include "src_io/numerical_descriptor.h" #include "src_io/print_info.h" -#include "src_ions/Cell_PW.h" +#include "src_ions/ions.h" #include "src_pw/run_md_pw.h" Run_pw::Run_pw(){} @@ -44,12 +44,12 @@ void Run_pw::plane_wave_line(ModuleESolver::ESolver *p_esolver) if(GlobalV::CALCULATION == "md" || GlobalV::CALCULATION == "sto-md") { Run_MD_PW run_md_pw; - run_md_pw.md_cells_pw(p_esolver); + run_md_pw.md_ions_pw(p_esolver); } else { - Cell_PW cpws; - cpws.opt_cells_pw(p_esolver); + Ions ions; + ions.opt_ions_pw(p_esolver); } // cout<<"cpws SUCCESS"< -#include "module_base/matrix.h" -#include "module_base/complexmatrix.h" -#include "module_esolver/esolver.h" - -class LOOP_cell -{ - public: - - LOOP_cell(); - ~LOOP_cell(); - - void opt_cell(ModuleESolver::ESolver *p_esolver); - -}; - -#endif diff --git a/source/src_lcao/run_md_lcao.cpp b/source/src_lcao/run_md_lcao.cpp index e5db61f098..56b9e58572 100644 --- a/source/src_lcao/run_md_lcao.cpp +++ b/source/src_lcao/run_md_lcao.cpp @@ -30,15 +30,6 @@ Run_MD_LCAO::~Run_MD_LCAO() { } -void Run_MD_LCAO::opt_cell(ModuleESolver::ESolver* p_esolver) -{ - ModuleBase::TITLE("Run_MD_LCAO", "opt_cell"); - - opt_ions(p_esolver); - - return; -} - void Run_MD_LCAO::opt_ions(ModuleESolver::ESolver* p_esolver) { ModuleBase::TITLE("Run_MD_LCAO", "opt_ions"); diff --git a/source/src_lcao/run_md_lcao.h b/source/src_lcao/run_md_lcao.h index ce550e501c..5cfe9bb39b 100644 --- a/source/src_lcao/run_md_lcao.h +++ b/source/src_lcao/run_md_lcao.h @@ -14,7 +14,6 @@ class Run_MD_LCAO Run_MD_LCAO(); ~Run_MD_LCAO(); - void opt_cell(ModuleESolver::ESolver *p_esolver); void opt_ions(ModuleESolver::ESolver *p_esolver); void md_force_virial(ModuleESolver::ESolver *p_esolver, const int &istep, diff --git a/source/src_pw/Makefile.Objects b/source/src_pw/Makefile.Objects index 8f2cd4f07b..3f0ba70178 100644 --- a/source/src_pw/Makefile.Objects +++ b/source/src_pw/Makefile.Objects @@ -57,7 +57,6 @@ ions_move_cg.o\ ions_move_sd.o\ ions_move_basic.o\ bfgs_basic.o\ -Cell_PW.o\ run_md_pw.o\ lattice_change_methods.o \ lattice_change_cg.o \ diff --git a/source/src_pw/run_md_pw.cpp b/source/src_pw/run_md_pw.cpp index 9b4380afaf..f1699504c8 100644 --- a/source/src_pw/run_md_pw.cpp +++ b/source/src_pw/run_md_pw.cpp @@ -148,26 +148,14 @@ void Run_MD_PW::md_ions_pw(ModuleESolver::ESolver *p_esolver) GlobalC::pot.write_elecstat_pot(ssp.str(), ssp_ave.str(),GlobalC::rhopw); //output 'Hartree + local pseudopot' } - delete verlet; - ModuleBase::timer::tick("Run_MD_PW", "md_ions_pw"); - return; -} - -void Run_MD_PW::md_cells_pw(ModuleESolver::ESolver *p_esolver) -{ - ModuleBase::TITLE("Run_MD_PW", "md_cells_pw"); - ModuleBase::timer::tick("Run_MD_PW", "md_cells_pw"); - - // ion optimization begins - // electron density optimization is included in ion optimization - this->md_ions_pw(p_esolver); - GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; GlobalV::ofs_running << std::setprecision(16); GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; - ModuleBase::timer::tick("Run_MD_PW", "md_cells_pw"); + delete verlet; + ModuleBase::timer::tick("Run_MD_PW", "md_ions_pw"); + return; } void Run_MD_PW::md_force_virial( diff --git a/source/src_pw/run_md_pw.h b/source/src_pw/run_md_pw.h index 047ba9a070..7d2fef9b76 100644 --- a/source/src_pw/run_md_pw.h +++ b/source/src_pw/run_md_pw.h @@ -12,7 +12,6 @@ class Run_MD_PW ~Run_MD_PW(); void md_ions_pw(ModuleESolver::ESolver *p_esolver); - void md_cells_pw(ModuleESolver::ESolver *p_esolver); void md_force_virial( ModuleESolver::ESolver *p_esolver, const int &istep, From 6412588017dd3d2ba5437080a7f5bbfec2c6b168 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 15 Aug 2022 16:10:37 +0800 Subject: [PATCH 04/63] refactor : unify init_esolver in driver.cpp --- source/driver.cpp | 16 +++------ source/module_esolver/esolver.cpp | 56 ++++++++++++++++++++++++++----- source/module_esolver/esolver.h | 3 +- 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/source/driver.cpp b/source/driver.cpp index dd75a7014b..49691977d0 100644 --- a/source/driver.cpp +++ b/source/driver.cpp @@ -93,27 +93,19 @@ void Driver::atomic_world(void) // lcao_in_pw: LCAO expaned by plane wave basis set // lcao: linear combination of atomic orbitals //-------------------------------------------------- - string use_ensol; + + //Initialzie Esolver ModuleESolver::ESolver *p_esolver = nullptr; + ModuleESolver::init_esolver(p_esolver); + if (GlobalV::BASIS_TYPE == "pw" || GlobalV::BASIS_TYPE == "lcao_in_pw") { - if (GlobalV::CALCULATION.substr(0, 3) == "sto") - use_ensol = "sdft_pw"; - else - use_ensol = "ksdft_pw"; - // We set it temporarily - // Finally, we have ksdft_pw, ksdft_lcao, sdft_pw, ofdft, lj, eam, etc. - ModuleESolver::init_esolver(p_esolver, use_ensol); Run_pw::plane_wave_line(p_esolver); ModuleESolver::clean_esolver(p_esolver); } #ifdef __LCAO else if (GlobalV::BASIS_TYPE == "lcao") { - use_ensol = "ksdft_lcao"; - if (INPUT.tddft == 1) - use_ensol = "ksdft_lcao_tddft"; - ModuleESolver::init_esolver(p_esolver, use_ensol); Run_lcao::lcao_line(p_esolver); ModuleESolver::clean_esolver(p_esolver); } diff --git a/source/module_esolver/esolver.cpp b/source/module_esolver/esolver.cpp index 2c309e893a..7d2776b875 100644 --- a/source/module_esolver/esolver.cpp +++ b/source/module_esolver/esolver.cpp @@ -6,6 +6,7 @@ #include "esolver_of.h" #include "esolver_lj.h" #include "esolver_dp.h" +#include "module_md/MD_parameters.h" namespace ModuleESolver { @@ -14,35 +15,74 @@ namespace ModuleESolver std::cout << classname << std::endl; } + string determine_type() + { + string esolver_type; + if (GlobalV::BASIS_TYPE == "pw") + { + if (GlobalV::CALCULATION.substr(0, 3) == "sto") + esolver_type = "sdft_pw"; + else + esolver_type = "ksdft_pw"; + } +#ifdef __LCAO + else if (GlobalV::BASIS_TYPE == "lcao_in_pw") + { + if (GlobalV::CALCULATION.substr(0, 3) == "sto") + esolver_type = "sdft_pw"; + else + esolver_type = "ksdft_pw"; + } + else if (GlobalV::BASIS_TYPE == "lcao") + { + esolver_type = "ksdft_lcao"; + if (INPUT.tddft == 1) + esolver_type = "ksdft_lcao_tddft"; + } +#endif + if(INPUT.mdp.md_ensolver == "LJ") + { + esolver_type = "lj_pot"; + } + if(INPUT.mdp.md_ensolver == "DP") + { + esolver_type = "dp_pot"; + } + return esolver_type; + } //Some API to operate E_Solver - void init_esolver(ESolver*& p_esolver, const string use_esol) + void init_esolver(ESolver*& p_esolver) { - if (use_esol == "ksdft_pw") + //determine type of esolver based on INPUT information + string esolver_type = determine_type(); + + //initialize the corresponding Esolver child class + if (esolver_type == "ksdft_pw") { p_esolver = new ESolver_KS_PW(); } - else if (use_esol == "ksdft_lcao") + else if (esolver_type == "ksdft_lcao") { p_esolver = new ESolver_KS_LCAO(); } - else if (use_esol == "ksdft_lcao_tddft") + else if (esolver_type == "ksdft_lcao_tddft") { p_esolver = new ESolver_KS_LCAO_TDDFT(); } - else if (use_esol == "sdft_pw") + else if (esolver_type == "sdft_pw") { p_esolver = new ESolver_SDFT_PW(); } - // else if(use_esol == "ofdft") + // else if(esolver_type == "ofdft") // { // p_esolver = new OFDFT(); // } - else if (use_esol == "lj_pot") + else if (esolver_type == "lj_pot") { p_esolver = new ESolver_LJ(); } - else if (use_esol == "dp_pot") + else if (esolver_type == "dp_pot") { p_esolver = new ESolver_DP(); } diff --git a/source/module_esolver/esolver.h b/source/module_esolver/esolver.h index 28b206f1a1..073e6582f1 100644 --- a/source/module_esolver/esolver.h +++ b/source/module_esolver/esolver.h @@ -68,7 +68,8 @@ namespace ModuleESolver psi::Psi* psid = nullptr; }; - void init_esolver(ESolver*& p_esolver, const string use_esol); + string determine_type(); + void init_esolver(ESolver*& p_esolver); void clean_esolver(ESolver*& pesolver); } From 148b289bbfddb26424188899d4c98fb2a070abfd Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 15 Aug 2022 19:28:41 +0800 Subject: [PATCH 05/63] refactor : remove unused exx loop in ions.cpp (the loop has been moved to esolver by @dyzheng) --- source/module_esolver/esolver_ks.cpp | 52 +++++++++++------------ source/module_esolver/esolver_ks_lcao.cpp | 2 + source/src_ions/ions.cpp | 43 +------------------ 3 files changed, 30 insertions(+), 67 deletions(-) diff --git a/source/module_esolver/esolver_ks.cpp b/source/module_esolver/esolver_ks.cpp index 77942c68cc..15e0150c7f 100644 --- a/source/module_esolver/esolver_ks.cpp +++ b/source/module_esolver/esolver_ks.cpp @@ -197,37 +197,37 @@ namespace ModuleESolver //they do not occupy all processors, for example wavefunctions uses 20 processors while density uses 10. if(GlobalV::MY_STOGROUP == 0) { - // double drho = this->estate.caldr2(); - // EState should be used after it is constructed. - drho = GlobalC::CHR.get_drho(); - double hsolver_error = 0.0; - if (firstscf) - { - firstscf = false; - hsolver_error = this->phsol->cal_hsolerror(); - // The error of HSolver is larger than drho, so a more precise HSolver should be excuconv_elected. - if (hsolver_error > drho) + // double drho = this->estate.caldr2(); + // EState should be used after it is constructed. + drho = GlobalC::CHR.get_drho(); + double hsolver_error = 0.0; + if (firstscf) { - diag_ethr = this->phsol->reset_diagethr(GlobalV::ofs_running, hsolver_error, drho); - this->hamilt2density(istep, iter, diag_ethr); - drho = GlobalC::CHR.get_drho(); + firstscf = false; hsolver_error = this->phsol->cal_hsolerror(); + // The error of HSolver is larger than drho, so a more precise HSolver should be excuconv_elected. + if (hsolver_error > drho) + { + diag_ethr = this->phsol->reset_diagethr(GlobalV::ofs_running, hsolver_error, drho); + this->hamilt2density(istep, iter, diag_ethr); + drho = GlobalC::CHR.get_drho(); + hsolver_error = this->phsol->cal_hsolerror(); + } } - } - this->conv_elec = (drho < this->scf_thr); + this->conv_elec = (drho < this->scf_thr); - // If drho < hsolver_error in the first iter or drho < scf_thr, we do not change rho. - if (drho < hsolver_error || this->conv_elec) - { - if (drho < hsolver_error) GlobalV::ofs_warning << " drho < hsolver_error, keep charge density unchanged." << std::endl; - } - else - { - //charge mixing - //conv_elec = this->estate.mix_rho(); - GlobalC::CHR.mix_rho(iter); - } + // If drho < hsolver_error in the first iter or drho < scf_thr, we do not change rho. + if (drho < hsolver_error || this->conv_elec) + { + if (drho < hsolver_error) GlobalV::ofs_warning << " drho < hsolver_error, keep charge density unchanged." << std::endl; + } + else + { + //charge mixing + //conv_elec = this->estate.mix_rho(); + GlobalC::CHR.mix_rho(iter); + } } #ifdef __MPI MPI_Bcast(&drho, 1, MPI_DOUBLE , 0, PARAPW_WORLD); diff --git a/source/module_esolver/esolver_ks_lcao.cpp b/source/module_esolver/esolver_ks_lcao.cpp index 5ef2f2128e..6097889b4f 100644 --- a/source/module_esolver/esolver_ks_lcao.cpp +++ b/source/module_esolver/esolver_ks_lcao.cpp @@ -971,6 +971,7 @@ bool ESolver_KS_LCAO::do_after_converge(int& iter) //update exx and redo scf XC_Functional::set_xc_type(GlobalC::ucell.atoms[0].xc_func); iter = 0; + std::cout << " Entering 2nd SCF, where EXX is updated" << std::endl; this->two_level_step++; return false; } @@ -988,6 +989,7 @@ bool ESolver_KS_LCAO::do_after_converge(int& iter) GlobalC::exx_lcao.cal_exx_elec(this->LOC, this->LOWF.wfc_k_grid); iter = 0; + std::cout << " Updating EXX and rerun SCF" << std::endl; this->two_level_step++; return false; } diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 40067a42e6..f57c00bb49 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -81,51 +81,12 @@ void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) int eiter=0; if (GlobalV::CALCULATION=="scf" || GlobalV::CALCULATION=="md" || GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax" || GlobalV::CALCULATION.substr(0,3)=="sto") // pengfei 2014-10-13 { -#ifdef __LCAO -#ifdef __MPI - if( Exx_Global::Hybrid_Type::No==GlobalC::exx_global.info.hybrid_type ) - { -#endif -#endif - p_esolver->Run(istep-1,GlobalC::ucell); - eiter = p_esolver->getniter(); -#ifdef __LCAO -#ifdef __MPI - } - else if( Exx_Global::Hybrid_Type::Generate_Matrix == GlobalC::exx_global.info.hybrid_type ) - { - throw std::invalid_argument(ModuleBase::GlobalFunc::TO_STRING(__FILE__)+ModuleBase::GlobalFunc::TO_STRING(__LINE__)); - } - else // Peize Lin add 2019-03-09 - { - if( GlobalC::exx_global.info.separate_loop ) - { - for( size_t hybrid_step=0; hybrid_step!=GlobalC::exx_global.info.hybrid_step; ++hybrid_step ) - { - p_esolver->Run(istep-1,GlobalC::ucell); - eiter += p_esolver->getniter(); - if( elec.iter==1 || hybrid_step==GlobalC::exx_global.info.hybrid_step-1 ) // exx converge - break; - XC_Functional::set_xc_type(GlobalC::ucell.atoms[0].xc_func); - GlobalC::exx_lip.cal_exx(); - } - } - else - { - p_esolver->Run(istep-1,GlobalC::ucell); - eiter += p_esolver->getniter(); - XC_Functional::set_xc_type(GlobalC::ucell.atoms[0].xc_func); - p_esolver->Run(istep-1,GlobalC::ucell); - eiter += p_esolver->getniter(); - } - } -#endif //__MPI -#endif //__LCAO + p_esolver->Run(istep-1,GlobalC::ucell); + eiter = p_esolver->getniter(); } else if(GlobalV::CALCULATION=="nscf") { p_esolver->nscf(); - //elec.non_self_consistent(istep-1); eiter = p_esolver->getniter(); } From 570b52b0754f168ae4f711b4c28fe079a94d7b41 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 15 Aug 2022 19:30:05 +0800 Subject: [PATCH 06/63] refactor : unify pw_line and lcao_line into single interface driver_run --- source/CMakeLists.txt | 3 +- source/driver.cpp | 21 +----- source/driver.h | 2 + source/{run_lcao.cpp => driver_run.cpp} | 89 +++++++++++++++++-------- source/run_lcao.h | 27 -------- source/run_pw.cpp | 68 ------------------- source/run_pw.h | 26 -------- source/src_lcao/test/gamma_rho_mock.h | 2 +- source/src_pw/global.h | 1 - 9 files changed, 66 insertions(+), 173 deletions(-) rename source/{run_lcao.cpp => driver_run.cpp} (53%) delete mode 100644 source/run_lcao.h delete mode 100644 source/run_pw.cpp delete mode 100644 source/run_pw.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index eab3ebda66..8cd202fbdf 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -26,9 +26,8 @@ add_library( driver OBJECT driver.cpp + driver_run.cpp input.cpp input_conv.cpp input_update.cpp - run_lcao.cpp - run_pw.cpp ) diff --git a/source/driver.cpp b/source/driver.cpp index 49691977d0..d8ab677819 100644 --- a/source/driver.cpp +++ b/source/driver.cpp @@ -2,10 +2,8 @@ #include "input.h" #include "input_conv.h" -#include "run_pw.h" #include "src_pw/global.h" #ifdef __LCAO -#include "run_lcao.h" #include "src_lcao/global_fp.h" #endif #include "module_base/memory.h" @@ -94,25 +92,10 @@ void Driver::atomic_world(void) // lcao: linear combination of atomic orbitals //-------------------------------------------------- - //Initialzie Esolver - ModuleESolver::ESolver *p_esolver = nullptr; - ModuleESolver::init_esolver(p_esolver); - - if (GlobalV::BASIS_TYPE == "pw" || GlobalV::BASIS_TYPE == "lcao_in_pw") - { - Run_pw::plane_wave_line(p_esolver); - ModuleESolver::clean_esolver(p_esolver); - } -#ifdef __LCAO - else if (GlobalV::BASIS_TYPE == "lcao") - { - Run_lcao::lcao_line(p_esolver); - ModuleESolver::clean_esolver(p_esolver); - } -#endif + // where the actual stuff is done + this->driver_run(); ModuleBase::timer::finish(GlobalV::ofs_running); - ModuleBase::Memory::print_all(GlobalV::ofs_running); return; diff --git a/source/driver.h b/source/driver.h index d3e7625972..c49996d83e 100644 --- a/source/driver.h +++ b/source/driver.h @@ -18,6 +18,8 @@ class Driver // do stuff, have fun! void atomic_world(); + // interface to the actual calculations + void driver_run(); }; diff --git a/source/run_lcao.cpp b/source/driver_run.cpp similarity index 53% rename from source/run_lcao.cpp rename to source/driver_run.cpp index d9ad46359b..7cf683258b 100644 --- a/source/run_lcao.cpp +++ b/source/driver_run.cpp @@ -1,4 +1,4 @@ -#include "run_lcao.h" +#include "driver.h" #include "src_pw/global.h" #include "input.h" #include "src_io/optical.h" @@ -8,26 +8,42 @@ #include "src_lcao/LOOP_ions.h" #include "src_io/print_info.h" #include "src_lcao/run_md_lcao.h" +#include "src_pw/run_md_pw.h" -Run_lcao::Run_lcao() {} -Run_lcao::~Run_lcao() {} - - -void Run_lcao::lcao_line(ModuleESolver::ESolver* p_esolver) +void Driver::driver_run() { - ModuleBase::TITLE("Run_lcao", "lcao_line"); - ModuleBase::timer::tick("Run_lcao", "lcao_line"); + ModuleBase::TITLE("Driver", "driver_line"); + ModuleBase::timer::tick("Driver", "driver_line"); //-----------------------init Cell-------------------------- // Setup the unitcell. // improvement: a) separating the first reading of the atom_card and subsequent // cell relaxation. b) put GlobalV::NLOCAL and GlobalV::NBANDS as input parameters + + // 1. Initialzie Esolver + ModuleESolver::ESolver *p_esolver = nullptr; + ModuleESolver::init_esolver(p_esolver); + + // 2. Setup cell and atom information #ifdef __LCAO GlobalC::ucell.setup_cell(GlobalC::ORB, GlobalV::global_pseudo_dir, GlobalV::stru_file, GlobalV::ofs_running); #else + if(GlobalV::BASIS_TYPE == "lcao_in_pw" || GlobalV::BASIS_TYPE == "lcao") + { + ModuleBase::WARNING_QUIT("driver","to use LCAO basis, compile with __LCAO"); + } GlobalC::ucell.setup_cell(GlobalV::global_pseudo_dir, GlobalV::stru_file, GlobalV::ofs_running); #endif - if (INPUT.test_just_neighbor) + + // mohan add 2010-10-10, just to test the symmetry of a variety + // of systems. + if(GlobalV::CALCULATION == "test") + { + Cal_Test::test_memory(); + ModuleBase::QUIT(); + } + + if (INPUT.test_just_neighbor && GlobalV::BASIS_TYPE=="lcao") { //test_search_neighbor(); GlobalV::SEARCH_RADIUS = atom_arrange::set_sr_NL( @@ -47,41 +63,56 @@ void Run_lcao::lcao_line(ModuleESolver::ESolver* p_esolver) INPUT.test_just_neighbor); } - - // the symmetry of a variety of systems. - if (GlobalV::CALCULATION == "test") - { - Cal_Test::test_memory(); - ModuleBase::QUIT(); - } - //-----------------------init Cell-------------------------- - - //------------------------------------------------------------ //---------------------Init ESolver------------------------- p_esolver->Init(INPUT, GlobalC::ucell); - if(GlobalV::CALCULATION=="get_S") + if(GlobalV::BASIS_TYPE=="lcao" && GlobalV::CALCULATION=="get_S") { p_esolver->Run(0, GlobalC::ucell); - ModuleBase::timer::tick("Run_lcao", "lcao_line"); + ModuleBase::timer::tick("Driver_run", "driver_line"); return; } //------------------------------------------------------------ - //---------------------------MD/Relax------------------ - if (GlobalV::CALCULATION == "md") + if(GlobalV::BASIS_TYPE=="lcao") { - Run_MD_LCAO run_md_lcao; - run_md_lcao.opt_ions(p_esolver); + if (GlobalV::CALCULATION == "md") + { + Run_MD_LCAO run_md_lcao; + run_md_lcao.opt_ions(p_esolver); + } + else // cell relaxations + { + LOOP_ions ions; + ions.opt_ions(p_esolver); + } } - else // cell relaxations + else { - LOOP_ions ions; - ions.opt_ions(p_esolver); + if(GlobalV::CALCULATION == "md" || GlobalV::CALCULATION == "sto-md") + { + Run_MD_PW run_md_pw; + run_md_pw.md_ions_pw(p_esolver); + } + else + { + Ions ions; + ions.opt_ions_pw(p_esolver); + } + + if(Optical::opt_epsilon2) + { + Optical opt; + opt.cal_epsilon2(GlobalV::NBANDS); + } + + p_esolver->postprocess(); } //---------------------------MD/Relax------------------ - ModuleBase::timer::tick("Run_lcao", "lcao_line"); + ModuleESolver::clean_esolver(p_esolver); + + ModuleBase::timer::tick("Driver", "driver_line"); return; } diff --git a/source/run_lcao.h b/source/run_lcao.h deleted file mode 100644 index 2a9d980544..0000000000 --- a/source/run_lcao.h +++ /dev/null @@ -1,27 +0,0 @@ -//========================================================== -// AUTHOR : mohan -// DATE : 2021-01-20 -//========================================================== -#ifndef RUN_LCAO_H -#define RUN_LCAO_H - -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_orbital/ORB_control.h" -#include "input.h" -#include "module_esolver/esolver.h" - -class Run_lcao -{ - -public: - - Run_lcao(); - ~Run_lcao(); - - // perform Linear Combination of Atomic Orbitals (LCAO) calculations - static void lcao_line(ModuleESolver::ESolver* p_esolver); - -}; - -#endif diff --git a/source/run_pw.cpp b/source/run_pw.cpp deleted file mode 100644 index 96a9cd668e..0000000000 --- a/source/run_pw.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include "run_pw.h" -#include "src_pw/global.h" -#include "src_io/cal_test.h" -#include "src_io/winput.h" -#include "src_io/optical.h" -#include "src_io/numerical_basis.h" -#include "src_io/numerical_descriptor.h" -#include "src_io/print_info.h" -#include "src_ions/ions.h" -#include "src_pw/run_md_pw.h" - -Run_pw::Run_pw(){} -Run_pw::~Run_pw(){} - -void Run_pw::plane_wave_line(ModuleESolver::ESolver *p_esolver) -{ - ModuleBase::TITLE("Run_pw","plane_wave_line"); - ModuleBase::timer::tick("Run_pw","plane_wave_line"); - - // Setup the unitcell. - // improvement: a) separating the first reading of the atom_card and subsequent - // cell relaxation. b) put GlobalV::NLOCAL and GlobalV::NBANDS as input parameters -#ifdef __LCAO - GlobalC::ucell.setup_cell( GlobalC::ORB, GlobalV::global_pseudo_dir, GlobalV::stru_file, GlobalV::ofs_running); -#else - GlobalC::ucell.setup_cell( GlobalV::global_pseudo_dir, GlobalV::stru_file, GlobalV::ofs_running); -#endif - - // mohan add 2010-10-10, just to test the symmetry of a variety - // of systems. - if(GlobalV::CALCULATION == "test") - { - Cal_Test::test_memory(); - ModuleBase::QUIT(); - } - - //------------------------------------------------------------ - //---------------------Init ESolver------------------------- - //------------------------------------------------------------ - p_esolver->Init(INPUT, GlobalC::ucell); - - - - if(GlobalV::CALCULATION == "md" || GlobalV::CALCULATION == "sto-md") - { - Run_MD_PW run_md_pw; - run_md_pw.md_ions_pw(p_esolver); - } - else - { - Ions ions; - ions.opt_ions_pw(p_esolver); - } - - // cout<<"cpws SUCCESS"<postprocess(); - - ModuleBase::timer::tick("Run_pw","plane_wave_line"); - return; -} diff --git a/source/run_pw.h b/source/run_pw.h deleted file mode 100644 index cdacaeb166..0000000000 --- a/source/run_pw.h +++ /dev/null @@ -1,26 +0,0 @@ -//========================================================== -// AUTHOR : mohan -// DATE : 2021-02-01 -//========================================================== -#ifndef RUN_PW_H -#define RUN_PW_H - -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "input.h" -#include "module_esolver/esolver.h" - -class Run_pw -{ - - public: - - Run_pw(); - ~Run_pw(); - - // perform plane wave basis calculations - static void plane_wave_line(ModuleESolver::ESolver *p_esolver); - -}; - -#endif diff --git a/source/src_lcao/test/gamma_rho_mock.h b/source/src_lcao/test/gamma_rho_mock.h index dd95556360..20e3f72177 100644 --- a/source/src_lcao/test/gamma_rho_mock.h +++ b/source/src_lcao/test/gamma_rho_mock.h @@ -40,7 +40,7 @@ #include "module_orbital/ORB_table_beta.h" #include "module_orbital/ORB_table_phi.h" #include "module_orbital/parallel_orbitals.h" -#include "run_lcao.h" +#include "driver.h" #include "src_io/wf_local.h" #include "module_gint/gint_gamma.h" #include "module_gint/gint_tools.h" diff --git a/source/src_pw/global.h b/source/src_pw/global.h index 819c8de95d..59e4af0c4c 100644 --- a/source/src_pw/global.h +++ b/source/src_pw/global.h @@ -3,7 +3,6 @@ #include "../module_base/global_function.h" #include "../module_base/global_variable.h" -#include "../run_pw.h" #include "../src_io/restart.h" #include "../src_ions/ions.h" #include "../src_lcao/exx_lip.h" From d35a496aeb8c6b5f4c644124152b5578f4ba7e7f Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 15 Aug 2022 20:06:48 +0800 Subject: [PATCH 07/63] refactor : replace test_just_neighbour keyword by adding value "test_neighbour" to calculation --- docs/input-main.md | 10 +++------- source/driver_run.cpp | 6 +++--- source/input.cpp | 15 ++++----------- source/input.h | 5 ----- source/module_esolver/esolver_lj.cpp | 3 +-- source/module_md/MD_func.cpp | 3 +-- 6 files changed, 12 insertions(+), 30 deletions(-) diff --git a/docs/input-main.md b/docs/input-main.md index d8766d3e18..604739013e 100644 --- a/docs/input-main.md +++ b/docs/input-main.md @@ -68,7 +68,7 @@ - [Variables useful for debugging](#variables-useful-for-debugging) - [nurse](#nurse) | [t_in_h](#t_in_h) | [vl_in_h](#vl_in_h) | [vnl_in_h](#vnl_in_h) | [test_force](#test_force) | [test_stress](#test_stress) | [colour](#colour) | [test_just_neighbor](#test_just_neighbor) + [nurse](#nurse) | [t_in_h](#t_in_h) | [vl_in_h](#vl_in_h) | [vnl_in_h](#vnl_in_h) | [test_force](#test_force) | [test_stress](#test_stress) | [colour](#colour) - [DeePKS](#deepks) @@ -148,6 +148,8 @@ This part of variables are used to control general system parameters. - *md*: molecular dynamics - *sto-scf*: do self-consistent electronic structure calculation with [stochastic DFT](#electronic-structure-sdft) - *sto-md*: molecular dynamics with [stochastic DFT](#electronic-structure-sdft) + - *test_memory* : checks memory required for the calculation. The number is not quite reliable, please use with care + - *test_neighbour* : only performs neighbouring atom search > Note: *istate* and *ienvelope* only work for LCAO basis set and are not working right now. - **Default**: scf @@ -1584,12 +1586,6 @@ This part of variables are used to control berry phase and wannier90 interfacae - **Description**: If set to 1, output to terminal will have some color. - **Default**: 0 -#### test_just_neighbor - -- **Type**: Boolean -- **Description**: If set to 1, then only perform the neighboring atoms search. -- **Default**: 0 - ### Electronic conductivities Frequency-dependent electronic conductivities can be calculated with Kubo-Greenwood formula[Phys. Rev. B 83, 235120 (2011)]. diff --git a/source/driver_run.cpp b/source/driver_run.cpp index 7cf683258b..d7d7ee28b0 100644 --- a/source/driver_run.cpp +++ b/source/driver_run.cpp @@ -37,13 +37,13 @@ void Driver::driver_run() // mohan add 2010-10-10, just to test the symmetry of a variety // of systems. - if(GlobalV::CALCULATION == "test") + if(GlobalV::CALCULATION == "test_memory") { Cal_Test::test_memory(); ModuleBase::QUIT(); } - if (INPUT.test_just_neighbor && GlobalV::BASIS_TYPE=="lcao") + if (GlobalV::CALCULATION == "test_neighbour" && GlobalV::BASIS_TYPE=="lcao") { //test_search_neighbor(); GlobalV::SEARCH_RADIUS = atom_arrange::set_sr_NL( @@ -60,7 +60,7 @@ void Driver::driver_run() GlobalC::ucell, GlobalV::SEARCH_RADIUS, GlobalV::test_atom_input, - INPUT.test_just_neighbor); + 1); } //------------------------------------------------------------ diff --git a/source/input.cpp b/source/input.cpp index 6661d6e14d..05f7f82178 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -403,11 +403,6 @@ void Input::Default(void) restart_save = false; restart_load = false; - //========================================================== - // test only - //========================================================== - test_just_neighbor = false; - //========================================================== // DFT+U Xin Qu added on 2020-10-29 //========================================================== @@ -1501,10 +1496,6 @@ bool Input::Read(const std::string &fn) { read_value(ifs, cell_factor); } - else if (strcmp("test_just_neighbor", word) == 0) - { - read_value(ifs, test_just_neighbor); - } //-------------- //---------------------------------------------------------------------------------- // Xin Qu added on 2020-10-29 for DFT+U @@ -2202,7 +2193,6 @@ void Input::Bcast() Parallel_Common::bcast_int(td_vexttype); Parallel_Common::bcast_int(td_vextout); Parallel_Common::bcast_int(td_dipoleout); - Parallel_Common::bcast_bool(test_just_neighbor); Parallel_Common::bcast_int(GlobalV::ocp); Parallel_Common::bcast_string(GlobalV::ocp_set); Parallel_Common::bcast_int(out_mul); // qifeng add 2019/9/10 @@ -2498,10 +2488,13 @@ void Input::Check(void) if (!this->relax_nmax) this->relax_nmax = 50; } - else if (calculation == "test") + else if (calculation == "test_memory") { this->relax_nmax = 1; } + else if(calculation == "test_neighbour") + { + } else { ModuleBase::WARNING_QUIT("Input", "check 'calculation' !"); diff --git a/source/input.h b/source/input.h index 82cf9a8d6b..891a71eb80 100644 --- a/source/input.h +++ b/source/input.h @@ -418,11 +418,6 @@ class Input double comp_center; int comp_dim; - //========================================================== - // variables for test only - //========================================================== - bool test_just_neighbor; - private: //========================================================== // MEMBER FUNCTIONS : diff --git a/source/module_esolver/esolver_lj.cpp b/source/module_esolver/esolver_lj.cpp index 1cd20fce8d..f5714347ec 100644 --- a/source/module_esolver/esolver_lj.cpp +++ b/source/module_esolver/esolver_lj.cpp @@ -22,8 +22,7 @@ namespace ModuleESolver grid_neigh, ucell, GlobalV::SEARCH_RADIUS, - GlobalV::test_atom_input, - inp.test_just_neighbor); + GlobalV::test_atom_input); } void ESolver_LJ::Run(const int istep, UnitCell_pseudo& ucell) diff --git a/source/module_md/MD_func.cpp b/source/module_md/MD_func.cpp index c8bc9bdc0b..568c9f3206 100644 --- a/source/module_md/MD_func.cpp +++ b/source/module_md/MD_func.cpp @@ -263,8 +263,7 @@ void MD_func::force_virial( grid_neigh, unit_in, GlobalV::SEARCH_RADIUS, - GlobalV::test_atom_input, - INPUT.test_just_neighbor); + GlobalV::test_atom_input); potential = LJ_potential::Lennard_Jones( unit_in, From 04aa1aa0cee50105879d88ab511ba0f67aa5232a Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 16 Aug 2022 14:56:57 +0800 Subject: [PATCH 08/63] refactor : rearranged some codes in the various esolver::init --- source/input_conv.cpp | 4 + source/module_esolver/esolver.cpp | 2 + source/module_esolver/esolver_ks.cpp | 19 ---- source/module_esolver/esolver_ks.h | 2 +- source/module_esolver/esolver_ks_lcao.cpp | 32 +++--- .../module_esolver/esolver_ks_lcao_elec.cpp | 29 +++++ .../module_esolver/esolver_ks_lcao_tddft.cpp | 106 +----------------- source/module_esolver/esolver_ks_pw.cpp | 34 +++--- source/module_neighbor/sltk_atom_arrange.cpp | 1 - source/src_ions/variable_cell.cpp | 7 +- .../501_NO_neighboring_GaAs512/INPUT | 5 +- 11 files changed, 74 insertions(+), 167 deletions(-) diff --git a/source/input_conv.cpp b/source/input_conv.cpp index 6c5210e84a..d597bdbf5f 100644 --- a/source/input_conv.cpp +++ b/source/input_conv.cpp @@ -453,6 +453,10 @@ void Input_Conv::Convert(void) { elecstate::ElecStateLCAO::need_psi_grid = false; } + if(INPUT.calculation == "test_neighbour" && GlobalV::NPROC>1) + { + ModuleBase::WARNING_QUIT("Input_conv", "test_neighbour must be done with 1 processor"); + } #endif GlobalC::en.dos_emin_ev = INPUT.dos_emin_ev; diff --git a/source/module_esolver/esolver.cpp b/source/module_esolver/esolver.cpp index 7d2776b875..97ca96c6b8 100644 --- a/source/module_esolver/esolver.cpp +++ b/source/module_esolver/esolver.cpp @@ -48,6 +48,8 @@ namespace ModuleESolver { esolver_type = "dp_pot"; } + + GlobalV::ofs_running << " The esolver type has been set to : " << esolver_type << std::endl; return esolver_type; } diff --git a/source/module_esolver/esolver_ks.cpp b/source/module_esolver/esolver_ks.cpp index 15e0150c7f..cdfd59ed51 100644 --- a/source/module_esolver/esolver_ks.cpp +++ b/source/module_esolver/esolver_ks.cpp @@ -82,25 +82,6 @@ namespace ModuleESolver // mohan add 2021-01-30 Print_Info::setup_parameters(ucell, GlobalC::kv); - //new plane wave basis -#ifdef __MPI - this->pw_wfc->initmpi(GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, POOL_WORLD); -#endif - this->pw_wfc->initgrids(ucell.lat0, ucell.latvec, GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz); - this->pw_wfc->initparameters(false, inp.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); -#ifdef __MPI - if(INPUT.pw_seed > 0) MPI_Allreduce(MPI_IN_PLACE, &this->pw_wfc->ggecut, 1, MPI_DOUBLE, MPI_MAX , MPI_COMM_WORLD); - //qianrui add 2021-8-13 to make different kpar parameters can get the same results -#endif - this->pw_wfc->setuptransform(); - for(int ik = 0 ; ik < GlobalC::kv.nks; ++ik) GlobalC::kv.ngk[ik] = this->pw_wfc->npwk[ik]; - this->pw_wfc->collect_local_pw(); - print_wfcfft(inp, GlobalV::ofs_running); - - // initialize the real-space uniform grid for FFT and parallel - // distribution of plane waves - GlobalC::Pgrid.init(GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz, GlobalC::rhopw->nplane, - GlobalC::rhopw->nrxx, GlobalC::bigpw->nbz, GlobalC::bigpw->bz); // mohan add 2010-07-22, update 2011-05-04 // Calculate Structure factor GlobalC::sf.setup_structure_factor(&GlobalC::ucell, GlobalC::rhopw); diff --git a/source/module_esolver/esolver_ks.h b/source/module_esolver/esolver_ks.h index 9ec81d6135..c1ac1cbadb 100644 --- a/source/module_esolver/esolver_ks.h +++ b/source/module_esolver/esolver_ks.h @@ -72,7 +72,7 @@ namespace ModuleESolver protected: std::string basisname; //PW or LCAO - private: + protected: void print_wfcfft(Input& inp, ofstream &ofs); }; diff --git a/source/module_esolver/esolver_ks_lcao.cpp b/source/module_esolver/esolver_ks_lcao.cpp index 6097889b4f..9dfe0e1908 100644 --- a/source/module_esolver/esolver_ks_lcao.cpp +++ b/source/module_esolver/esolver_ks_lcao.cpp @@ -63,20 +63,11 @@ void ESolver_KS_LCAO::Init(Input& inp, UnitCell_pseudo& ucell) else { ESolver_KS::Init(inp, ucell); -#ifdef __MPI - if (GlobalV::CALCULATION == "nscf") - { - switch (GlobalC::exx_global.info.hybrid_type) - { - case Exx_Global::Hybrid_Type::HF: - case Exx_Global::Hybrid_Type::PBE0: - case Exx_Global::Hybrid_Type::SCAN0: - case Exx_Global::Hybrid_Type::HSE: - XC_Functional::set_xc_type(ucell.atoms[0].xc_func); - break; - } - } -#endif + + // initialize the real-space uniform grid for FFT and parallel + // distribution of plane waves + GlobalC::Pgrid.init(GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz, GlobalC::rhopw->nplane, + GlobalC::rhopw->nrxx, GlobalC::bigpw->nbz, GlobalC::bigpw->bz); // mohan add 2010-07-22, update 2011-05-04 #ifdef __DEEPKS // wenfei 2021-12-19 @@ -133,6 +124,19 @@ void ESolver_KS_LCAO::Init(Input& inp, UnitCell_pseudo& ucell) //------------------init Hamilt_lcao---------------------- #ifdef __MPI + if (GlobalV::CALCULATION == "nscf") + { + switch (GlobalC::exx_global.info.hybrid_type) + { + case Exx_Global::Hybrid_Type::HF: + case Exx_Global::Hybrid_Type::PBE0: + case Exx_Global::Hybrid_Type::SCAN0: + case Exx_Global::Hybrid_Type::HSE: + XC_Functional::set_xc_type(ucell.atoms[0].xc_func); + break; + } + } + // PLEASE simplify the Exx_Global interface // mohan add 2021-03-25 // Peize Lin 2016-12-03 diff --git a/source/module_esolver/esolver_ks_lcao_elec.cpp b/source/module_esolver/esolver_ks_lcao_elec.cpp index d9ef3d2a65..5416103bde 100644 --- a/source/module_esolver/esolver_ks_lcao_elec.cpp +++ b/source/module_esolver/esolver_ks_lcao_elec.cpp @@ -23,6 +23,7 @@ #include "../module_deepks/LCAO_deepks.h" #endif #include "../src_pw/H_Ewald_pw.h" +#include "src_io/cal_test.h" namespace ModuleESolver { @@ -284,6 +285,34 @@ namespace ModuleESolver this->get_S(); return; } + + if(GlobalV::CALCULATION == "test_memory") + { + Cal_Test::test_memory(); + return; + } + + if(GlobalV::CALCULATION == "test_neighbour") + { + //test_search_neighbor(); + GlobalV::SEARCH_RADIUS = atom_arrange::set_sr_NL( + GlobalV::ofs_running, + GlobalV::OUT_LEVEL, + GlobalC::ORB.get_rcutmax_Phi(), + GlobalC::ucell.infoNL.get_rcutmax_Beta(), + GlobalV::GAMMA_ONLY_LOCAL); + + atom_arrange::search( + GlobalV::SEARCH_PBC, + GlobalV::ofs_running, + GlobalC::GridD, + GlobalC::ucell, + GlobalV::SEARCH_RADIUS, + GlobalV::test_atom_input, + 1); + return; + } + this->beforesolver(istep); // self consistent calculations for electronic ground state if (GlobalV::CALCULATION == "nscf") diff --git a/source/module_esolver/esolver_ks_lcao_tddft.cpp b/source/module_esolver/esolver_ks_lcao_tddft.cpp index 3f2950cae6..62d0f43ff5 100644 --- a/source/module_esolver/esolver_ks_lcao_tddft.cpp +++ b/source/module_esolver/esolver_ks_lcao_tddft.cpp @@ -42,111 +42,7 @@ ESolver_KS_LCAO_TDDFT::~ESolver_KS_LCAO_TDDFT() void ESolver_KS_LCAO_TDDFT::Init(Input& inp, UnitCell_pseudo& ucell) { - ESolver_KS::Init(inp, ucell); - - // Initialize the local wave functions. - // npwx, eigenvalues, and weights - // npwx may change according to cell change - // this function belongs to cell LOOP - GlobalC::wf.allocate_ekb_wg(GlobalC::kv.nks); - - // Initialize the FFT. - // this function belongs to cell LOOP - - // output is GlobalC::ppcell.vloc 3D local pseudopotentials - // without structure factors - // this function belongs to cell LOOP - GlobalC::ppcell.init_vloc(GlobalC::ppcell.vloc, GlobalC::rhopw); - - // Initialize the sum of all local potentials. - // if ion_step==0, read in/initialize the potentials - // this function belongs to ions LOOP - int ion_step = 0; - GlobalC::pot.init_pot(ion_step, GlobalC::sf.strucFac); - ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT POTENTIAL"); - - //------------------init Basis_lcao---------------------- - // Init Basis should be put outside of Ensolver. - // * reading the localized orbitals/projectors - // * construct the interpolation tables. - this->Init_Basis_lcao(this->orb_con, inp, ucell); - //------------------init Basis_lcao---------------------- - - //------------------init Hamilt_lcao---------------------- - // * allocate H and S matrices according to computational resources - // * set the 'trace' between local H/S and global H/S - this->LM.divide_HS_in_frag(GlobalV::GAMMA_ONLY_LOCAL, orb_con.ParaV); - //------------------init Hamilt_lcao---------------------- - - // pass Hamilt-pointer to Operator - this->UHM.genH.LM = this->UHM.LM = &this->LM; - // pass basis-pointer to EState and Psi - this->LOC.ParaV = this->LOWF.ParaV = this->LM.ParaV; - - // init Psi, HSolver, ElecState, Hamilt - if (this->phsol != nullptr) - { - if (this->phsol->classname != "HSolverLCAO") - { - delete this->phsol; - this->phsol = nullptr; - } - } - else - { - this->phsol = new hsolver::HSolverLCAO(this->LOWF.ParaV); - this->phsol->method = GlobalV::KS_SOLVER; - } - if (this->pelec_td != nullptr) - { - if (this->pelec_td->classname != "ElecStateLCAO") - { - delete this->pelec_td; - this->pelec_td = nullptr; - } - } - else - { - this->pelec_td = new elecstate::ElecStateLCAO_TDDFT((Charge*)(&(GlobalC::CHR)), - &(GlobalC::kv), - GlobalC::kv.nks, - GlobalV::NBANDS, - &(this->LOC), - &(this->UHM), - &(this->LOWF)); - } - if (this->phami != nullptr) - { - if (this->phami->classname != "HamiltLCAO") - { - delete this->phami; - this->phami = nullptr; - } - } - else - { - // two cases for hamilt class - // Gamma_only case - if (GlobalV::GAMMA_ONLY_LOCAL) - { - this->phami = new hamilt::HamiltLCAO(&(this->UHM.GG), - &(this->UHM.genH), - &(this->LM), - &(this->UHM), - &(this->LOWF), - &(this->LOC)); - } - // multi_k case - else - { - this->phami = new hamilt::HamiltLCAO>(&(this->UHM.GK), - &(this->UHM.genH), - &(this->LM), - &(this->UHM), - &(this->LOWF), - &(this->LOC)); - } - } + ESolver_KS_LCAO::Init(inp, ucell); } void ESolver_KS_LCAO_TDDFT::eachiterinit(const int istep, const int iter) diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index cd02da527d..ccf72533d1 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -69,6 +69,21 @@ namespace ModuleESolver void ESolver_KS_PW::Init_GlobalC(Input& inp, UnitCell_pseudo& cell) { + //new plane wave basis +#ifdef __MPI + this->pw_wfc->initmpi(GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, POOL_WORLD); +#endif + this->pw_wfc->initgrids(cell.lat0, cell.latvec, GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz); + this->pw_wfc->initparameters(false, inp.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); +#ifdef __MPI + if(INPUT.pw_seed > 0) MPI_Allreduce(MPI_IN_PLACE, &this->pw_wfc->ggecut, 1, MPI_DOUBLE, MPI_MAX , MPI_COMM_WORLD); + //qianrui add 2021-8-13 to make different kpar parameters can get the same results +#endif + this->pw_wfc->setuptransform(); + for(int ik = 0 ; ik < GlobalC::kv.nks; ++ik) GlobalC::kv.ngk[ik] = this->pw_wfc->npwk[ik]; + this->pw_wfc->collect_local_pw(); + ESolver_KS::print_wfcfft(inp, GlobalV::ofs_running); + this->psi = GlobalC::wf.allocate(GlobalC::kv.nks); // cout<nrxx<psi); } -#ifdef __LCAO -#ifdef __MPI - switch (GlobalC::exx_global.info.hybrid_type) // Peize Lin add 2019-03-09 - { - case Exx_Global::Hybrid_Type::HF: - case Exx_Global::Hybrid_Type::PBE0: - case Exx_Global::Hybrid_Type::SCAN0: - case Exx_Global::Hybrid_Type::HSE: - GlobalC::exx_lip.init(&GlobalC::kv, &GlobalC::wf, GlobalC::wfcpw, GlobalC::rhopw, &GlobalC::ucell); - break; - case Exx_Global::Hybrid_Type::No: - break; - case Exx_Global::Hybrid_Type::Generate_Matrix: - default: - throw std::invalid_argument(ModuleBase::GlobalFunc::TO_STRING(__FILE__) + ModuleBase::GlobalFunc::TO_STRING(__LINE__)); - } -#endif -#endif - ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT BASIS"); } diff --git a/source/module_neighbor/sltk_atom_arrange.cpp b/source/module_neighbor/sltk_atom_arrange.cpp index 8d6ae36f53..7be247c237 100644 --- a/source/module_neighbor/sltk_atom_arrange.cpp +++ b/source/module_neighbor/sltk_atom_arrange.cpp @@ -158,7 +158,6 @@ void atom_arrange::search( } } ofs_in << "search neighboring atoms done." << std::endl; - exit(0);//just test neighboring searching! } ModuleBase::timer::tick("atom_arrange","search"); diff --git a/source/src_ions/variable_cell.cpp b/source/src_ions/variable_cell.cpp index 8466b862b3..cf9724d921 100644 --- a/source/src_ions/variable_cell.cpp +++ b/source/src_ions/variable_cell.cpp @@ -29,14 +29,13 @@ void Variable_Cell::init_after_vc(ModuleESolver::ESolver *p_esolver) GlobalC::rhopw->initgrids(GlobalC::ucell.lat0, GlobalC::ucell.latvec, GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz); GlobalC::rhopw->collect_local_pw(); GlobalC::rhopw->collect_uniqgg(); - GlobalC::wfcpw->initgrids(GlobalC::ucell.lat0, GlobalC::ucell.latvec, GlobalC::wfcpw->nx, GlobalC::wfcpw->ny, GlobalC::wfcpw->nz); - GlobalC::wfcpw->initparameters(false, INPUT.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); - GlobalC::wfcpw->collect_local_pw(); - GlobalC::sf.setup_structure_factor(&GlobalC::ucell,GlobalC::rhopw); if(GlobalV::BASIS_TYPE=="pw") { + GlobalC::wfcpw->initgrids(GlobalC::ucell.lat0, GlobalC::ucell.latvec, GlobalC::wfcpw->nx, GlobalC::wfcpw->ny, GlobalC::wfcpw->nz); + GlobalC::wfcpw->initparameters(false, INPUT.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); + GlobalC::wfcpw->collect_local_pw(); GlobalC::wf.init_after_vc(GlobalC::kv.nks, p_esolver->psi); GlobalC::wf.init_at_1(); } diff --git a/tests/integrate/501_NO_neighboring_GaAs512/INPUT b/tests/integrate/501_NO_neighboring_GaAs512/INPUT index 40c9baad2f..79321556fb 100644 --- a/tests/integrate/501_NO_neighboring_GaAs512/INPUT +++ b/tests/integrate/501_NO_neighboring_GaAs512/INPUT @@ -7,7 +7,7 @@ ntype 2 pseudo_type upf201 gamma_only 0 -calculation scf +calculation test_neighbour symmetry 0 #test_force 1 @@ -25,13 +25,10 @@ scf_nmax 100 #Parameters (LCAO) basis_type lcao -ks_solver genelpa chg_extrap second-order out_dm 0 -pw_diag_thr 0.00001 mixing_type pulay mixing_beta 0.4 mixing_ndim 5 -test_just_neighbor 1 From 29e2756258148a4ee824a8d064b7a7191828531f Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 16 Aug 2022 15:07:58 +0800 Subject: [PATCH 09/63] fix : forgot to add driver_run.cpp in previous commit --- source/driver_run.cpp | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/source/driver_run.cpp b/source/driver_run.cpp index d7d7ee28b0..f248753c40 100644 --- a/source/driver_run.cpp +++ b/source/driver_run.cpp @@ -2,7 +2,6 @@ #include "src_pw/global.h" #include "input.h" #include "src_io/optical.h" -#include "src_io/cal_test.h" #include "src_io/winput.h" #include "module_neighbor/sltk_atom_arrange.h" #include "src_lcao/LOOP_ions.h" @@ -20,7 +19,7 @@ void Driver::driver_run() // improvement: a) separating the first reading of the atom_card and subsequent // cell relaxation. b) put GlobalV::NLOCAL and GlobalV::NBANDS as input parameters - // 1. Initialzie Esolver + // 1. Initialzie type of Esolver ModuleESolver::ESolver *p_esolver = nullptr; ModuleESolver::init_esolver(p_esolver); @@ -35,37 +34,17 @@ void Driver::driver_run() GlobalC::ucell.setup_cell(GlobalV::global_pseudo_dir, GlobalV::stru_file, GlobalV::ofs_running); #endif - // mohan add 2010-10-10, just to test the symmetry of a variety - // of systems. - if(GlobalV::CALCULATION == "test_memory") + // 3. For these two types of calculations + // nothing else need to be initialized + if(GlobalV::CALCULATION == "test_neighbour" || GlobalV::CALCULATION == "test_memory") { - Cal_Test::test_memory(); + p_esolver->Run(0, GlobalC::ucell); ModuleBase::QUIT(); } - if (GlobalV::CALCULATION == "test_neighbour" && GlobalV::BASIS_TYPE=="lcao") - { - //test_search_neighbor(); - GlobalV::SEARCH_RADIUS = atom_arrange::set_sr_NL( - GlobalV::ofs_running, - GlobalV::OUT_LEVEL, - GlobalC::ORB.get_rcutmax_Phi(), - GlobalC::ucell.infoNL.get_rcutmax_Beta(), - GlobalV::GAMMA_ONLY_LOCAL); - - atom_arrange::search( - GlobalV::SEARCH_PBC, - GlobalV::ofs_running, - GlobalC::GridD, - GlobalC::ucell, - GlobalV::SEARCH_RADIUS, - GlobalV::test_atom_input, - 1); - } - - //------------------------------------------------------------ - //---------------------Init ESolver------------------------- + // 4. Initialize Esolver p_esolver->Init(INPUT, GlobalC::ucell); + if(GlobalV::BASIS_TYPE=="lcao" && GlobalV::CALCULATION=="get_S") { p_esolver->Run(0, GlobalC::ucell); @@ -74,6 +53,7 @@ void Driver::driver_run() } //------------------------------------------------------------ + // This part onward needs to be refactored. //---------------------------MD/Relax------------------ if(GlobalV::BASIS_TYPE=="lcao") { From 6604150503e521532344d75011415adaa4d8f259 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 16 Aug 2022 15:27:21 +0800 Subject: [PATCH 10/63] fix : move pgird.init back to esolver_ks::init --- source/module_esolver/esolver_ks.cpp | 5 +++++ source/module_esolver/esolver_ks_lcao.cpp | 5 ----- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/module_esolver/esolver_ks.cpp b/source/module_esolver/esolver_ks.cpp index cdfd59ed51..fc206df2a4 100644 --- a/source/module_esolver/esolver_ks.cpp +++ b/source/module_esolver/esolver_ks.cpp @@ -82,6 +82,11 @@ namespace ModuleESolver // mohan add 2021-01-30 Print_Info::setup_parameters(ucell, GlobalC::kv); + // initialize the real-space uniform grid for FFT and parallel + // distribution of plane waves + GlobalC::Pgrid.init(GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz, GlobalC::rhopw->nplane, + GlobalC::rhopw->nrxx, GlobalC::bigpw->nbz, GlobalC::bigpw->bz); // mohan add 2010-07-22, update 2011-05-04 + // Calculate Structure factor GlobalC::sf.setup_structure_factor(&GlobalC::ucell, GlobalC::rhopw); diff --git a/source/module_esolver/esolver_ks_lcao.cpp b/source/module_esolver/esolver_ks_lcao.cpp index 9dfe0e1908..b7a2bb8d04 100644 --- a/source/module_esolver/esolver_ks_lcao.cpp +++ b/source/module_esolver/esolver_ks_lcao.cpp @@ -64,11 +64,6 @@ void ESolver_KS_LCAO::Init(Input& inp, UnitCell_pseudo& ucell) { ESolver_KS::Init(inp, ucell); - // initialize the real-space uniform grid for FFT and parallel - // distribution of plane waves - GlobalC::Pgrid.init(GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz, GlobalC::rhopw->nplane, - GlobalC::rhopw->nrxx, GlobalC::bigpw->nbz, GlobalC::bigpw->bz); // mohan add 2010-07-22, update 2011-05-04 - #ifdef __DEEPKS // wenfei 2021-12-19 // if we are performing DeePKS calculations, we need to load a model From 61e712585b852956264cadea767d7f689a0b2f22 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 16 Aug 2022 15:46:11 +0800 Subject: [PATCH 11/63] fix : revert Init in esolver_ks_lcao_tddft --- .../module_esolver/esolver_ks_lcao_tddft.cpp | 106 +++++++++++++++++- 1 file changed, 105 insertions(+), 1 deletion(-) diff --git a/source/module_esolver/esolver_ks_lcao_tddft.cpp b/source/module_esolver/esolver_ks_lcao_tddft.cpp index 62d0f43ff5..3f2950cae6 100644 --- a/source/module_esolver/esolver_ks_lcao_tddft.cpp +++ b/source/module_esolver/esolver_ks_lcao_tddft.cpp @@ -42,7 +42,111 @@ ESolver_KS_LCAO_TDDFT::~ESolver_KS_LCAO_TDDFT() void ESolver_KS_LCAO_TDDFT::Init(Input& inp, UnitCell_pseudo& ucell) { - ESolver_KS_LCAO::Init(inp, ucell); + ESolver_KS::Init(inp, ucell); + + // Initialize the local wave functions. + // npwx, eigenvalues, and weights + // npwx may change according to cell change + // this function belongs to cell LOOP + GlobalC::wf.allocate_ekb_wg(GlobalC::kv.nks); + + // Initialize the FFT. + // this function belongs to cell LOOP + + // output is GlobalC::ppcell.vloc 3D local pseudopotentials + // without structure factors + // this function belongs to cell LOOP + GlobalC::ppcell.init_vloc(GlobalC::ppcell.vloc, GlobalC::rhopw); + + // Initialize the sum of all local potentials. + // if ion_step==0, read in/initialize the potentials + // this function belongs to ions LOOP + int ion_step = 0; + GlobalC::pot.init_pot(ion_step, GlobalC::sf.strucFac); + ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT POTENTIAL"); + + //------------------init Basis_lcao---------------------- + // Init Basis should be put outside of Ensolver. + // * reading the localized orbitals/projectors + // * construct the interpolation tables. + this->Init_Basis_lcao(this->orb_con, inp, ucell); + //------------------init Basis_lcao---------------------- + + //------------------init Hamilt_lcao---------------------- + // * allocate H and S matrices according to computational resources + // * set the 'trace' between local H/S and global H/S + this->LM.divide_HS_in_frag(GlobalV::GAMMA_ONLY_LOCAL, orb_con.ParaV); + //------------------init Hamilt_lcao---------------------- + + // pass Hamilt-pointer to Operator + this->UHM.genH.LM = this->UHM.LM = &this->LM; + // pass basis-pointer to EState and Psi + this->LOC.ParaV = this->LOWF.ParaV = this->LM.ParaV; + + // init Psi, HSolver, ElecState, Hamilt + if (this->phsol != nullptr) + { + if (this->phsol->classname != "HSolverLCAO") + { + delete this->phsol; + this->phsol = nullptr; + } + } + else + { + this->phsol = new hsolver::HSolverLCAO(this->LOWF.ParaV); + this->phsol->method = GlobalV::KS_SOLVER; + } + if (this->pelec_td != nullptr) + { + if (this->pelec_td->classname != "ElecStateLCAO") + { + delete this->pelec_td; + this->pelec_td = nullptr; + } + } + else + { + this->pelec_td = new elecstate::ElecStateLCAO_TDDFT((Charge*)(&(GlobalC::CHR)), + &(GlobalC::kv), + GlobalC::kv.nks, + GlobalV::NBANDS, + &(this->LOC), + &(this->UHM), + &(this->LOWF)); + } + if (this->phami != nullptr) + { + if (this->phami->classname != "HamiltLCAO") + { + delete this->phami; + this->phami = nullptr; + } + } + else + { + // two cases for hamilt class + // Gamma_only case + if (GlobalV::GAMMA_ONLY_LOCAL) + { + this->phami = new hamilt::HamiltLCAO(&(this->UHM.GG), + &(this->UHM.genH), + &(this->LM), + &(this->UHM), + &(this->LOWF), + &(this->LOC)); + } + // multi_k case + else + { + this->phami = new hamilt::HamiltLCAO>(&(this->UHM.GK), + &(this->UHM.genH), + &(this->LM), + &(this->UHM), + &(this->LOWF), + &(this->LOC)); + } + } } void ESolver_KS_LCAO_TDDFT::eachiterinit(const int istep, const int iter) From f16067474cea45762aa5f543155a15fe40f9e588 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 11:07:11 +0800 Subject: [PATCH 12/63] refactor : move vdW inside Esolver --- source/module_esolver/esolver_ks_lcao.cpp | 15 ++-- .../module_esolver/esolver_ks_lcao_elec.cpp | 29 +++++++ source/module_esolver/esolver_ks_pw.cpp | 27 ++++++ source/src_ions/ions.cpp | 27 ------ source/src_lcao/LOOP_ions.cpp | 86 ++----------------- 5 files changed, 70 insertions(+), 114 deletions(-) diff --git a/source/module_esolver/esolver_ks_lcao.cpp b/source/module_esolver/esolver_ks_lcao.cpp index b7a2bb8d04..8d465c1f69 100644 --- a/source/module_esolver/esolver_ks_lcao.cpp +++ b/source/module_esolver/esolver_ks_lcao.cpp @@ -686,14 +686,15 @@ void ESolver_KS_LCAO::afterscf() ssp << GlobalV::global_out_dir << "SPIN" << is + 1 << "_POT"; GlobalC::pot.write_potential(is, 0, ssp.str(), GlobalC::pot.vr_eff, precision); } + } - // LiuXh modify 20200701 - /* - //fuxiang add 2017-03-15 - std::stringstream sse; - sse << GlobalV::global_out_dir << "SPIN" << is + 1 << "_DIPOLE_ELEC"; - GlobalC::CHR.write_rho_dipole(GlobalC::CHR.rho_save, is, 0, sse.str()); - */ + if (GlobalC::pot.out_pot == 2) + { + std::stringstream ssp; + std::stringstream ssp_ave; + ssp << GlobalV::global_out_dir << "ElecStaticPot"; + ssp_ave << GlobalV::global_out_dir << "ElecStaticPot_AVE"; + GlobalC::pot.write_elecstat_pot(ssp.str(), ssp_ave.str(), GlobalC::rhopw); //output 'Hartree + local pseudopot' } if (this->conv_elec) diff --git a/source/module_esolver/esolver_ks_lcao_elec.cpp b/source/module_esolver/esolver_ks_lcao_elec.cpp index 5416103bde..8a1d6cb08c 100644 --- a/source/module_esolver/esolver_ks_lcao_elec.cpp +++ b/source/module_esolver/esolver_ks_lcao_elec.cpp @@ -232,6 +232,35 @@ namespace ModuleESolver { ModuleBase::TITLE("ESolver_KS_LCAO", "beforescf"); ModuleBase::timer::tick("ESolver_KS_LCAO", "beforescf"); + + //---------------------------------------------------------- + // about vdw, jiyy add vdwd3 and linpz add vdwd2 + //---------------------------------------------------------- + if (INPUT.vdw_method == "d2") + { + // setup vdwd2 parameters + GlobalC::vdwd2_para.initial_parameters(INPUT); + GlobalC::vdwd2_para.initset(GlobalC::ucell); + } + if (INPUT.vdw_method == "d3_0" || INPUT.vdw_method == "d3_bj") + { + GlobalC::vdwd3_para.initial_parameters(INPUT); + } + // Peize Lin add 2014.04.04, update 2021.03.09 + if (GlobalC::vdwd2_para.flag_vdwd2) + { + Vdwd2 vdwd2(GlobalC::ucell, GlobalC::vdwd2_para); + vdwd2.cal_energy(); + GlobalC::en.evdw = vdwd2.get_energy(); + } + // jiyy add 2019-05-18, update 2021.05.02 + else if (GlobalC::vdwd3_para.flag_vdwd3) + { + Vdwd3 vdwd3(GlobalC::ucell, GlobalC::vdwd3_para); + vdwd3.cal_energy(); + GlobalC::en.evdw = vdwd3.get_energy(); + } + this->beforesolver(istep); //Peize Lin add 2016-12-03 #ifdef __MPI diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index ccf72533d1..733fbc1859 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -175,6 +175,33 @@ namespace ModuleESolver this->phami = new hamilt::HamiltPW(); } + + //---------------------------------------------------------- + // about vdw, jiyy add vdwd3 and linpz add vdwd2 + //---------------------------------------------------------- + if(INPUT.vdw_method=="d2") + { + // setup vdwd2 parameters + GlobalC::vdwd2_para.initial_parameters(INPUT); + GlobalC::vdwd2_para.initset(GlobalC::ucell); + } + if(INPUT.vdw_method=="d3_0" || INPUT.vdw_method=="d3_bj") + { + GlobalC::vdwd3_para.initial_parameters(INPUT); + } + if(GlobalC::vdwd2_para.flag_vdwd2) //Peize Lin add 2014-04-03, update 2021-03-09 + { + Vdwd2 vdwd2(GlobalC::ucell,GlobalC::vdwd2_para); + vdwd2.cal_energy(); + GlobalC::en.evdw = vdwd2.get_energy(); + } + if(GlobalC::vdwd3_para.flag_vdwd3) //jiyy add 2019-05-18, update 2021-05-02 + { + Vdwd3 vdwd3(GlobalC::ucell,GlobalC::vdwd3_para); + vdwd3.cal_energy(); + GlobalC::en.evdw = vdwd3.get_energy(); + } + //calculate ewald energy H_Ewald_pw::compute_ewald(GlobalC::ucell, GlobalC::rhopw); //Symmetry_rho should be moved to Init() diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index f57c00bb49..85437fc0df 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -50,33 +50,6 @@ void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) Print_Info::print_screen(stress_step, force_step, istep); } - //---------------------------------------------------------- - // about vdw, jiyy add vdwd3 and linpz add vdwd2 - //---------------------------------------------------------- - if(INPUT.vdw_method=="d2") - { - // setup vdwd2 parameters - GlobalC::vdwd2_para.initial_parameters(INPUT); - GlobalC::vdwd2_para.initset(GlobalC::ucell); - } - if(INPUT.vdw_method=="d3_0" || INPUT.vdw_method=="d3_bj") - { - GlobalC::vdwd3_para.initial_parameters(INPUT); - } - if(GlobalC::vdwd2_para.flag_vdwd2) //Peize Lin add 2014-04-03, update 2021-03-09 - { - Vdwd2 vdwd2(GlobalC::ucell,GlobalC::vdwd2_para); - vdwd2.cal_energy(); - GlobalC::en.evdw = vdwd2.get_energy(); - } - if(GlobalC::vdwd3_para.flag_vdwd3) //jiyy add 2019-05-18, update 2021-05-02 - { - Vdwd3 vdwd3(GlobalC::ucell,GlobalC::vdwd3_para); - vdwd3.cal_energy(); - GlobalC::en.evdw = vdwd3.get_energy(); - } - - // mohan added eiter to count for the electron iteration number, 2021-01-28 int eiter=0; if (GlobalV::CALCULATION=="scf" || GlobalV::CALCULATION=="md" || GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax" || GlobalV::CALCULATION.substr(0,3)=="sto") // pengfei 2014-10-13 diff --git a/source/src_lcao/LOOP_ions.cpp b/source/src_lcao/LOOP_ions.cpp index ea039fcdda..2c37d0a738 100644 --- a/source/src_lcao/LOOP_ions.cpp +++ b/source/src_lcao/LOOP_ions.cpp @@ -44,20 +44,18 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) } // Geometry optimization algorithm setup. - if (GlobalV::CAL_FORCE) + if (GlobalV::CALCULATION=="relax") { //Ions_Move_Methods IMM.allocate(); - //Charge_Extrapolation - // CE.allocate_ions(); } - - // pengfei Li 2018-05-14 - if (GlobalV::CAL_STRESS) + if (GlobalV::CALCULATION=="cell-relax") { + //Ions_Move_Methods + IMM.allocate(); // allocate arrays related to changes of lattice vectors LCM.allocate(); - } + } this->istep = 1; int force_step = 1; @@ -73,34 +71,6 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) Print_Info::print_screen(stress_step, force_step, istep); } - //---------------------------------------------------------- - // about vdw, jiyy add vdwd3 and linpz add vdwd2 - //---------------------------------------------------------- - if (INPUT.vdw_method == "d2") - { - // setup vdwd2 parameters - GlobalC::vdwd2_para.initial_parameters(INPUT); - GlobalC::vdwd2_para.initset(GlobalC::ucell); - } - if (INPUT.vdw_method == "d3_0" || INPUT.vdw_method == "d3_bj") - { - GlobalC::vdwd3_para.initial_parameters(INPUT); - } - // Peize Lin add 2014.04.04, update 2021.03.09 - if (GlobalC::vdwd2_para.flag_vdwd2) - { - Vdwd2 vdwd2(GlobalC::ucell, GlobalC::vdwd2_para); - vdwd2.cal_energy(); - GlobalC::en.evdw = vdwd2.get_energy(); - } - // jiyy add 2019-05-18, update 2021.05.02 - else if (GlobalC::vdwd3_para.flag_vdwd3) - { - Vdwd3 vdwd3(GlobalC::ucell, GlobalC::vdwd3_para); - vdwd3.cal_energy(); - GlobalC::en.evdw = vdwd3.get_energy(); - } - // solve electronic structures in terms of LCAO p_esolver->Run(this->istep - 1, GlobalC::ucell); @@ -112,19 +82,6 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) CE.update_all_pos(GlobalC::ucell); } - // PLEASE design a proper interface to output potentials, - // not only electrostatic potential but also others - // mohan add 2021-03-25 - // we need to have a proper - if (GlobalC::pot.out_pot == 2) - { - std::stringstream ssp; - std::stringstream ssp_ave; - ssp << GlobalV::global_out_dir << "ElecStaticPot"; - ssp_ave << GlobalV::global_out_dir << "ElecStaticPot_AVE"; - GlobalC::pot.write_elecstat_pot(ssp.str(), ssp_ave.str(), GlobalC::rhopw); //output 'Hartree + local pseudopot' - } - time_t fstart = time(NULL); if (GlobalV::CALCULATION == "scf" || GlobalV::CALCULATION == "relax" || GlobalV::CALCULATION == "cell-relax") { @@ -135,7 +92,7 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) // PLEASE move the details of CE to other places // mohan add 2021-03-25 //xiaohui add 2014-07-07, for second-order extrapolation - if (GlobalV::CAL_FORCE) + if (GlobalV::CALCULATION == "relax" || GlobalV::CALCULATION == "cell-relax") { CE.save_pos_next(GlobalC::ucell); } @@ -163,14 +120,6 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) std::cout << std::endl; } - //#ifdef __MPI - // MPI_Barrier(MPI_COMM_WORLD); - // for (int i=0;i0. - //xiaohui modify 2014-08-09 - //CE.extrapolate_charge(); - -/*xiaohui modify 2014-08-09 - if(GlobalC::pot.chg_extrap==4) - { - // done after grid technique. - } - else - { - GlobalC::pot.init_pot( istep ); - } -xiaohui modify 2014-08-09*/ } // static bool converged_force = false; From cafb414029007062b11aad6149cc4a87a57e949a Mon Sep 17 00:00:00 2001 From: caic99 Date: Wed, 17 Aug 2022 15:59:39 +0800 Subject: [PATCH 13/63] feature: output math lib logs on all ranks. --- source/module_base/gather_math_lib_info.cpp | 7 +++++++ source/module_base/global_file.cpp | 11 +++++++---- source/module_base/test/CMakeLists.txt | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/source/module_base/gather_math_lib_info.cpp b/source/module_base/gather_math_lib_info.cpp index c1fcecbcc1..b340e992e9 100644 --- a/source/module_base/gather_math_lib_info.cpp +++ b/source/module_base/gather_math_lib_info.cpp @@ -1,4 +1,11 @@ // This file defines the math lib wrapper for output information before executing computations. + +/* +When INFO is defined in cmake configure, a macro of GATHER_INFO will be defined. +This macro will be used to output information before executing computations. +Results will output to OUT/math_info.log, see ModuleBase::Global_File::make_dir_out . +*/ + #include #undef GATHER_INFO #include "module_base/blas_connector.h" diff --git a/source/module_base/global_file.cpp b/source/module_base/global_file.cpp index 9515fdc8a5..13de3e7193 100644 --- a/source/module_base/global_file.cpp +++ b/source/module_base/global_file.cpp @@ -142,10 +142,12 @@ void ModuleBase::Global_File::make_dir_out( if(rank==0) { open_log(GlobalV::ofs_warning, "warning", calculation, restart); + } + #ifdef GATHER_INFO - open_log(GlobalV::ofs_info, "math_info", calculation, restart); + open_log(GlobalV::ofs_info, "math_info_" + std::to_string(rank), calculation, restart); #endif - } + return; } @@ -224,10 +226,11 @@ void ModuleBase::Global_File::close_all_log(const int rank, const bool out_alllo if (rank==0) { close_log(GlobalV::ofs_warning, "warning.log"); + } + #ifdef GATHER_INFO - close_log(GlobalV::ofs_info, "math_info"); + close_log(GlobalV::ofs_info, "math_info"); #endif - } return; } } diff --git a/source/module_base/test/CMakeLists.txt b/source/module_base/test/CMakeLists.txt index 15ed0aecd8..189109c5ba 100644 --- a/source/module_base/test/CMakeLists.txt +++ b/source/module_base/test/CMakeLists.txt @@ -2,7 +2,7 @@ remove_definitions(-D__MPI) AddTest( TARGET base_blas_connector LIBS ${math_libs} - SOURCES blas_connector_test.cpp ../gather_math_lib_info.cpp + SOURCES blas_connector_test.cpp ) AddTest( TARGET base_timer From 34ab6a6fb90a392ebff7e36b9fef458d58deeb90 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 17:55:02 +0800 Subject: [PATCH 14/63] refactor : move outputting energy/potential to Esolver::postprocess --- source/driver_run.cpp | 10 +-- source/module_esolver/esolver_ks_lcao.cpp | 6 ++ .../module_esolver/esolver_ks_lcao_elec.cpp | 2 +- source/module_esolver/esolver_ks_pw.cpp | 17 ++++- source/module_esolver/esolver_sdft_pw.cpp | 7 +- source/src_ions/ions.cpp | 19 ----- source/src_lcao/LOOP_ions.cpp | 11 --- source/src_lcao/run_md_lcao.cpp | 5 -- source/src_pw/run_md_pw.cpp | 5 -- tests/integrate/CASES | 76 ------------------- 10 files changed, 28 insertions(+), 130 deletions(-) diff --git a/source/driver_run.cpp b/source/driver_run.cpp index f248753c40..19c5928121 100644 --- a/source/driver_run.cpp +++ b/source/driver_run.cpp @@ -45,14 +45,7 @@ void Driver::driver_run() // 4. Initialize Esolver p_esolver->Init(INPUT, GlobalC::ucell); - if(GlobalV::BASIS_TYPE=="lcao" && GlobalV::CALCULATION=="get_S") - { - p_esolver->Run(0, GlobalC::ucell); - ModuleBase::timer::tick("Driver_run", "driver_line"); - return; - } //------------------------------------------------------------ - // This part onward needs to be refactored. //---------------------------MD/Relax------------------ if(GlobalV::BASIS_TYPE=="lcao") @@ -86,11 +79,10 @@ void Driver::driver_run() Optical opt; opt.cal_epsilon2(GlobalV::NBANDS); } - - p_esolver->postprocess(); } //---------------------------MD/Relax------------------ + p_esolver->postprocess(); ModuleESolver::clean_esolver(p_esolver); ModuleBase::timer::tick("Driver", "driver_line"); diff --git a/source/module_esolver/esolver_ks_lcao.cpp b/source/module_esolver/esolver_ks_lcao.cpp index 8d465c1f69..a9081b67b8 100644 --- a/source/module_esolver/esolver_ks_lcao.cpp +++ b/source/module_esolver/esolver_ks_lcao.cpp @@ -272,6 +272,12 @@ void ESolver_KS_LCAO::cal_Stress(ModuleBase::matrix& stress) void ESolver_KS_LCAO::postprocess() { + + GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; + GlobalV::ofs_running << std::setprecision(16); + GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; + GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; + GlobalC::en.perform_dos(this->psid, this->psi, this->UHM); } diff --git a/source/module_esolver/esolver_ks_lcao_elec.cpp b/source/module_esolver/esolver_ks_lcao_elec.cpp index 8a1d6cb08c..604712655a 100644 --- a/source/module_esolver/esolver_ks_lcao_elec.cpp +++ b/source/module_esolver/esolver_ks_lcao_elec.cpp @@ -312,7 +312,7 @@ namespace ModuleESolver if(GlobalV::CALCULATION == "get_S") { this->get_S(); - return; + ModuleBase::QUIT(); } if(GlobalV::CALCULATION == "test_memory") diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 733fbc1859..1d31eef436 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -429,8 +429,6 @@ namespace ModuleESolver } if (this->conv_elec) { - //GlobalV::ofs_running << " convergence is achieved" << std::endl; - //GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; GlobalV::ofs_running << "\n charge density convergence is achieved" << std::endl; GlobalV::ofs_running << " final etot is " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; } @@ -439,6 +437,15 @@ namespace ModuleESolver GlobalV::ofs_running << " convergence has NOT been achieved!" << std::endl; } + if(GlobalC::pot.out_pot == 2) + { + std::stringstream ssp; + std::stringstream ssp_ave; + ssp << GlobalV::global_out_dir << "ElecStaticPot"; + ssp_ave << GlobalV::global_out_dir << "ElecStaticPot_AVE"; + GlobalC::pot.write_elecstat_pot(ssp.str(), ssp_ave.str(), GlobalC::rhopw); //output 'Hartree + local pseudopot' + } + if (GlobalV::OUT_LEVEL != "m") { this->print_eigenvalue(GlobalV::ofs_running); @@ -569,6 +576,12 @@ namespace ModuleESolver void ESolver_KS_PW::postprocess() { + + GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; + GlobalV::ofs_running << std::setprecision(16); + GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; + GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; + //print occupation in istate.info GlobalC::en.print_occ(); // compute density of states diff --git a/source/module_esolver/esolver_sdft_pw.cpp b/source/module_esolver/esolver_sdft_pw.cpp index 00f442ce88..6ea84eb532 100644 --- a/source/module_esolver/esolver_sdft_pw.cpp +++ b/source/module_esolver/esolver_sdft_pw.cpp @@ -87,8 +87,6 @@ void ESolver_SDFT_PW::afterscf() } if(this->conv_elec) { - //GlobalV::ofs_running << " convergence is achieved" << std::endl; - //GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; GlobalV::ofs_running << "\n charge density convergence is achieved" << std::endl; GlobalV::ofs_running << " final etot is " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; } @@ -142,6 +140,11 @@ void ESolver_SDFT_PW::cal_Stress(ModuleBase::matrix &stress) } void ESolver_SDFT_PW::postprocess() { + + GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; + GlobalV::ofs_running << std::setprecision(16); + GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; + GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; GlobalC::en.print_occ(); ((hsolver::HSolverPW_SDFT*)phsol)->stoiter.cleanchiallorder();//release lots of memories diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 85437fc0df..11dedabbd2 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -63,19 +63,9 @@ void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) eiter = p_esolver->getniter(); } - if(GlobalC::pot.out_pot == 2) - { - std::stringstream ssp; - std::stringstream ssp_ave; - ssp << GlobalV::global_out_dir << "ElecStaticPot"; - ssp_ave << GlobalV::global_out_dir << "ElecStaticPot_AVE"; - GlobalC::pot.write_elecstat_pot(ssp.str(), ssp_ave.str(), GlobalC::rhopw); //output 'Hartree + local pseudopot' - } - time_t eend = time(NULL); time_t fstart = time(NULL); - if (GlobalV::CALCULATION=="scf" || GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax" || GlobalV::CALCULATION.substr(0,3)=="sto") { stop = this->after_scf(p_esolver, istep, force_step, stress_step); // pengfei Li 2018-05-14 @@ -106,15 +96,6 @@ void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) } - if(GlobalV::CALCULATION=="scf" || GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax" || GlobalV::CALCULATION.substr(0,3)=="sto") - { - GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; - GlobalV::ofs_running << std::setprecision(16); - GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; - GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; - } - - if(GlobalV::OUT_LEVEL=="i") { std::cout << " ION DYNAMICS FINISHED :)" << std::endl; diff --git a/source/src_lcao/LOOP_ions.cpp b/source/src_lcao/LOOP_ions.cpp index 2c37d0a738..5b39667721 100644 --- a/source/src_lcao/LOOP_ions.cpp +++ b/source/src_lcao/LOOP_ions.cpp @@ -123,17 +123,6 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) ++istep; } - if (GlobalV::CALCULATION == "scf" || GlobalV::CALCULATION == "relax" || GlobalV::CALCULATION == "cell-relax") - { - GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; - GlobalV::ofs_running << std::setprecision(16); - GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; - GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; - - } - - p_esolver->postprocess(); - ModuleBase::timer::tick("LOOP_ions", "opt_ions"); return; } diff --git a/source/src_lcao/run_md_lcao.cpp b/source/src_lcao/run_md_lcao.cpp index 56b9e58572..09e5b45a42 100644 --- a/source/src_lcao/run_md_lcao.cpp +++ b/source/src_lcao/run_md_lcao.cpp @@ -156,11 +156,6 @@ void Run_MD_LCAO::opt_ions(ModuleESolver::ESolver* p_esolver) GlobalC::pot.write_elecstat_pot(ssp.str(), ssp_ave.str(), GlobalC::rhopw); // output 'Hartree + local pseudopot' } - GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; - GlobalV::ofs_running << std::setprecision(16); - GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; - GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; - // mohan update 2021-02-10 delete verlet; ModuleBase::timer::tick("Run_MD_LCAO","opt_ions"); diff --git a/source/src_pw/run_md_pw.cpp b/source/src_pw/run_md_pw.cpp index f1699504c8..13158a94de 100644 --- a/source/src_pw/run_md_pw.cpp +++ b/source/src_pw/run_md_pw.cpp @@ -148,11 +148,6 @@ void Run_MD_PW::md_ions_pw(ModuleESolver::ESolver *p_esolver) GlobalC::pot.write_elecstat_pot(ssp.str(), ssp_ave.str(),GlobalC::rhopw); //output 'Hartree + local pseudopot' } - GlobalV::ofs_running << "\n\n --------------------------------------------" << std::endl; - GlobalV::ofs_running << std::setprecision(16); - GlobalV::ofs_running << " !FINAL_ETOT_IS " << GlobalC::en.etot * ModuleBase::Ry_to_eV << " eV" << std::endl; - GlobalV::ofs_running << " --------------------------------------------\n\n" << std::endl; - delete verlet; ModuleBase::timer::tick("Run_MD_PW", "md_ions_pw"); return; diff --git a/tests/integrate/CASES b/tests/integrate/CASES index 6b833e243c..3285034274 100644 --- a/tests/integrate/CASES +++ b/tests/integrate/CASES @@ -1,79 +1,3 @@ -101_PW_15_f_pseudopots -101_PW_15_pseudopots -101_PW_blps_pseudopots -101_PW_OU_pseudopots -101_PW_upf100_Al_pseudopots -101_PW_upf201_Al_pseudopots -101_PW_upf201_pseudopots -101_PW_VW_pseudopots -102_PW_DA_davidson -103_PW_15_CS_CF -103_PW_15_CS_CF_bspline -103_PW_CF_CS_S1_smallg -103_PW_15_CF_CS_S1_smallg -103_PW_CF_CS_S2_smallg -103_PW_15_CF_CS_S2_smallg -103_PW_OU_CS_CF -104_PW_AF_magnetic -104_PW_FM_magnetic -104_PW_NC_magnetic -105_PW_FD_smearing -105_PW_FX_smearing -105_PW_GA_smearing -105_PW_M2_smearing -105_PW_MP_smearing -105_PW_MV_smearing -106_PW_BD_chargemixing -106_PW_KK_chargemixing -106_PW_PK_chargemixing -106_PW_PL_chargemixing -106_PW_PU_chargemixing -107_PW_OB_outputbands -107_PW_OD_outputdos -107_PW_OBOD_MemSaver -107_PW_outWfcR -107_PW_outWfcPw -108_PW_RE -108_PW_RE_MB -108_PW_RE_MG -109_PW_CR -109_PW_CR_fix_a -109_PW_CR_fix_ab -109_PW_CR_fix_abc -109_PW_CR_fix_ac -109_PW_CR_fix_b -109_PW_CR_fix_bc -109_PW_CR_fix_c -109_PW_CR_fix_volume -109_PW_CR_moveatoms -110_PW_SY -110_PW_SY_symmetry -111_PW_elec_add -111_PW_elec_minus -111_PW_S2_elec_add -111_PW_S2_elec_minus -112_PW_dipole -112_PW_efield -114_PW_BD_15 -115_PW_sol_H2 -115_PW_sol_H2O -116_PW_scan_Si2 -120_PW_KP_MD_ADS -120_PW_KP_MD_FIRE -120_PW_KP_MD_LGV -120_PW_KP_MD_MSST -120_PW_KP_MD_NHC -120_PW_KP_MD_NVE -121_PW_KPAR -121_PW_kspacing -127_PW_15_PK_AF -133_PW_DJ_PK -135_PW_15_PK -140_PW_15_SO -140_PW_15_SO_average -150_PW_15_CR_VDW3 -170_PW_MD_1O -170_PW_MD_2O 180_PW_SDFT_10S_M 180_PW_SDFT_10S_P 181_PW_SDFT_5D10S From b292d98ff78d54129309754e78aac46f72ebffb8 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 18:11:20 +0800 Subject: [PATCH 15/63] refactor : unify ions.cpp and loop_ions.cpp a little bit --- source/src_ions/ions.cpp | 24 +++++++------ source/src_lcao/LOOP_ions.cpp | 65 +++++++++++++++++------------------ 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 11dedabbd2..09d4c1f443 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -24,17 +24,19 @@ void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) <istep = 1; int force_step = 1; // pengfei Li 2018-05-14 diff --git a/source/src_lcao/LOOP_ions.cpp b/source/src_lcao/LOOP_ions.cpp index 5b39667721..b249047cde 100644 --- a/source/src_lcao/LOOP_ions.cpp +++ b/source/src_lcao/LOOP_ions.cpp @@ -31,17 +31,20 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) ModuleBase::TITLE("LOOP_ions", "opt_ions"); ModuleBase::timer::tick("LOOP_ions", "opt_ions"); - if (GlobalV::OUT_LEVEL == "i") - { - std::cout << std::setprecision(12); - std::cout << " " << std::setw(7) << "ISTEP" - << std::setw(5) << "NE" - << std::setw(18) << "ETOT(eV)" - << std::setw(10) << "dE(meV)" - << std::setw(10) << "F(eV/A)" - << std::setw(10) << "T(MIN)" - << std::endl; - } + if(GlobalV::OUT_LEVEL=="i") + { + std::cout << std::setprecision(12); + std::cout<< " " << std::setw(7)<< "ISTEP" + <getniter() - << std::setw(18) << std::setprecision(6) << GlobalC::en.etot * ModuleBase::Ry_to_eV; - - std::cout << std::setprecision(2) << std::setiosflags(ios::scientific) - << std::setw(10) << IMM.get_ediff() * ModuleBase::Ry_to_eV * 1000 - << std::setw(10) << IMM.get_largest_grad() * ModuleBase::Ry_to_eV / ModuleBase::BOHR_TO_A; - //<< std::setw(12) << IMM.get_trust_radius(); - - std::cout << std::resetiosflags(ios::scientific) - // << std::setw(8) << IMM.get_update_iter() - << std::setprecision(2) << std::setw(10) << etime_min + ftime_min; - std::cout << std::endl; - } + if(GlobalV::OUT_LEVEL=="i") + { + double etime_min = difftime(eend, estart)/60.0; + double ftime_min = difftime(fend, fstart)/60.0; + std::stringstream ss; + ss << GlobalV::RELAX_METHOD << istep; + + std::cout << " " << std::setw(7) << ss.str() + << std::setw(5) << eiter + << std::setw(15) << std::setprecision(6) << GlobalC::en.etot * ModuleBase::Ry_to_eV + << std::setw(15) << IMM.get_ediff() * ModuleBase::Ry_to_eV + << std::setprecision(3) + << std::setw(15) << IMM.get_largest_grad() * ModuleBase::Ry_to_eV / 0.529177 + << std::setw(15) << IMM.get_trust_radius() + << std::setw(8) << IMM.get_update_iter() + << std::setprecision(2) << std::setw(11) << etime_min + << std::setw(11) << ftime_min << std::endl; + } ++istep; } From a95a9d29f024cb879b829166a353dfb8fc43bd6e Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 20:08:21 +0800 Subject: [PATCH 16/63] fix : revert change to CASES --- tests/integrate/CASES | 76 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/tests/integrate/CASES b/tests/integrate/CASES index 3285034274..6b833e243c 100644 --- a/tests/integrate/CASES +++ b/tests/integrate/CASES @@ -1,3 +1,79 @@ +101_PW_15_f_pseudopots +101_PW_15_pseudopots +101_PW_blps_pseudopots +101_PW_OU_pseudopots +101_PW_upf100_Al_pseudopots +101_PW_upf201_Al_pseudopots +101_PW_upf201_pseudopots +101_PW_VW_pseudopots +102_PW_DA_davidson +103_PW_15_CS_CF +103_PW_15_CS_CF_bspline +103_PW_CF_CS_S1_smallg +103_PW_15_CF_CS_S1_smallg +103_PW_CF_CS_S2_smallg +103_PW_15_CF_CS_S2_smallg +103_PW_OU_CS_CF +104_PW_AF_magnetic +104_PW_FM_magnetic +104_PW_NC_magnetic +105_PW_FD_smearing +105_PW_FX_smearing +105_PW_GA_smearing +105_PW_M2_smearing +105_PW_MP_smearing +105_PW_MV_smearing +106_PW_BD_chargemixing +106_PW_KK_chargemixing +106_PW_PK_chargemixing +106_PW_PL_chargemixing +106_PW_PU_chargemixing +107_PW_OB_outputbands +107_PW_OD_outputdos +107_PW_OBOD_MemSaver +107_PW_outWfcR +107_PW_outWfcPw +108_PW_RE +108_PW_RE_MB +108_PW_RE_MG +109_PW_CR +109_PW_CR_fix_a +109_PW_CR_fix_ab +109_PW_CR_fix_abc +109_PW_CR_fix_ac +109_PW_CR_fix_b +109_PW_CR_fix_bc +109_PW_CR_fix_c +109_PW_CR_fix_volume +109_PW_CR_moveatoms +110_PW_SY +110_PW_SY_symmetry +111_PW_elec_add +111_PW_elec_minus +111_PW_S2_elec_add +111_PW_S2_elec_minus +112_PW_dipole +112_PW_efield +114_PW_BD_15 +115_PW_sol_H2 +115_PW_sol_H2O +116_PW_scan_Si2 +120_PW_KP_MD_ADS +120_PW_KP_MD_FIRE +120_PW_KP_MD_LGV +120_PW_KP_MD_MSST +120_PW_KP_MD_NHC +120_PW_KP_MD_NVE +121_PW_KPAR +121_PW_kspacing +127_PW_15_PK_AF +133_PW_DJ_PK +135_PW_15_PK +140_PW_15_SO +140_PW_15_SO_average +150_PW_15_CR_VDW3 +170_PW_MD_1O +170_PW_MD_2O 180_PW_SDFT_10S_M 180_PW_SDFT_10S_P 181_PW_SDFT_5D10S From bd56c9e6fae0b546193089c9aef7fc7708d28468 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 20:10:07 +0800 Subject: [PATCH 17/63] fix : bug in loop_ions.cpp --- source/src_lcao/LOOP_ions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/src_lcao/LOOP_ions.cpp b/source/src_lcao/LOOP_ions.cpp index b249047cde..7623f080b6 100644 --- a/source/src_lcao/LOOP_ions.cpp +++ b/source/src_lcao/LOOP_ions.cpp @@ -108,7 +108,7 @@ void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) ss << GlobalV::RELAX_METHOD << istep; std::cout << " " << std::setw(7) << ss.str() - << std::setw(5) << eiter + << std::setw(5) << p_esolver->getniter() << std::setw(15) << std::setprecision(6) << GlobalC::en.etot * ModuleBase::Ry_to_eV << std::setw(15) << IMM.get_ediff() * ModuleBase::Ry_to_eV << std::setprecision(3) From 407df18a035e37cfb62963279e7bc98c3eadede4 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 20:10:42 +0800 Subject: [PATCH 18/63] refactor : tidy up ions.cpp --- source/module_esolver/esolver_ks_pw.cpp | 10 ++++++ source/src_ions/ions.cpp | 46 ++++--------------------- source/src_ions/ions.h | 2 -- source/src_ions/variable_cell.cpp | 2 -- source/src_ions/variable_cell.h | 1 - 5 files changed, 16 insertions(+), 45 deletions(-) diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 1d31eef436..1def59f5bb 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -572,6 +572,16 @@ namespace ModuleESolver { Stress_PW ss; ss.cal_stress(stress, this->psi); + + //external stress + double unit_transform = 0.0; + unit_transform = ModuleBase::RYDBERG_SI / pow(ModuleBase::BOHR_RADIUS_SI,3) * 1.0e-8; + double external_stress[3] = {GlobalV::PRESS1,GlobalV::PRESS2,GlobalV::PRESS3}; + for(int i=0;i<3;i++) + { + stress(i,i) -= external_stress[i]/unit_transform; + } + GlobalV::PRESSURE = (stress(0,0)+stress(1,1)+stress(2,2))/3; } void ESolver_KS_PW::postprocess() diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 09d4c1f443..630ac0103d 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -52,18 +52,8 @@ void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) Print_Info::print_screen(stress_step, force_step, istep); } - // mohan added eiter to count for the electron iteration number, 2021-01-28 - int eiter=0; - if (GlobalV::CALCULATION=="scf" || GlobalV::CALCULATION=="md" || GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax" || GlobalV::CALCULATION.substr(0,3)=="sto") // pengfei 2014-10-13 - { - p_esolver->Run(istep-1,GlobalC::ucell); - eiter = p_esolver->getniter(); - } - else if(GlobalV::CALCULATION=="nscf") - { - p_esolver->nscf(); - eiter = p_esolver->getniter(); - } + // mohan added eiter to count for the electron iteration number, 2021-01-28 + p_esolver->Run(istep-1,GlobalC::ucell); time_t eend = time(NULL); time_t fstart = time(NULL); @@ -83,7 +73,7 @@ void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) ss << GlobalV::RELAX_METHOD << istep; std::cout << " " << std::setw(7) << ss.str() - << std::setw(5) << eiter + << std::setw(5) << p_esolver->getniter() << std::setw(15) << std::setprecision(6) << GlobalC::en.etot * ModuleBase::Ry_to_eV << std::setw(15) << IMM.get_ediff() * ModuleBase::Ry_to_eV << std::setprecision(3) @@ -114,13 +104,13 @@ bool Ions::after_scf(ModuleESolver::ESolver *p_esolver, const int &istep, int &f ModuleBase::matrix force; if(GlobalV::CAL_FORCE) { - this->gather_force_pw(p_esolver, force); + p_esolver->cal_Force(force); } //calculate and gather all parts of stress ModuleBase::matrix stress; if(GlobalV::CAL_STRESS) { - this->gather_stress_pw(p_esolver, stress); + p_esolver->cal_Stress(stress); } //stop in last step if(istep==GlobalV::RELAX_NMAX) @@ -155,31 +145,6 @@ bool Ions::after_scf(ModuleESolver::ESolver *p_esolver, const int &istep, int &f return 1; } -void Ions::gather_force_pw(ModuleESolver::ESolver *p_esolver, ModuleBase::matrix &force) -{ - ModuleBase::TITLE("Ions","gather_force_pw"); - // Forces fcs; - // fcs.init(force); - p_esolver->cal_Force(force); -} - -void Ions::gather_stress_pw(ModuleESolver::ESolver *p_esolver, ModuleBase::matrix& stress) -{ - ModuleBase::TITLE("Ions","gather_stress_pw"); - //basic stress - // Stress_PW ss; - // ss.cal_stress(stress); - p_esolver->cal_Stress(stress); - //external stress - double unit_transform = 0.0; - unit_transform = ModuleBase::RYDBERG_SI / pow(ModuleBase::BOHR_RADIUS_SI,3) * 1.0e-8; - double external_stress[3] = {GlobalV::PRESS1,GlobalV::PRESS2,GlobalV::PRESS3}; - for(int i=0;i<3;i++) - { - stress(i,i) -= external_stress[i]/unit_transform; - } - GlobalV::PRESSURE = (stress(0,0)+stress(1,1)+stress(2,2))/3; -} bool Ions::if_do_relax() { @@ -257,6 +222,7 @@ void Ions::reset_after_relax(const int& istep) GlobalV::ofs_running << " Setup the new wave functions?" << std::endl; //GlobalC::wf.wfcinit(); } + void Ions::reset_after_cellrelax(int& f_step, int& s_step, ModuleESolver::ESolver *p_esolver) { ModuleBase::TITLE("Ions","reset_after_cellrelax"); diff --git a/source/src_ions/ions.h b/source/src_ions/ions.h index 4dcec29320..848d5ef53c 100644 --- a/source/src_ions/ions.h +++ b/source/src_ions/ions.h @@ -39,8 +39,6 @@ class Ions //seperate force_stress function first bool after_scf(ModuleESolver::ESolver *p_esolver,const int &istep, int &force_step, int &stress_step); - void gather_force_pw(ModuleESolver::ESolver *p_esolver, ModuleBase::matrix &force); - void gather_stress_pw(ModuleESolver::ESolver *p_esolver, ModuleBase::matrix& stress); bool if_do_relax(); bool if_do_cellrelax(); bool do_relax(const int& istep, int& jstep, const ModuleBase::matrix& ionic_force, const double& total_energy); diff --git a/source/src_ions/variable_cell.cpp b/source/src_ions/variable_cell.cpp index cf9724d921..6860bd63dd 100644 --- a/source/src_ions/variable_cell.cpp +++ b/source/src_ions/variable_cell.cpp @@ -18,8 +18,6 @@ void Variable_Cell::init_after_vc(ModuleESolver::ESolver *p_esolver) ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "SYMMETRY"); } - - GlobalC::kv.set_after_vc(GlobalC::symm, GlobalV::global_kpoint_card, GlobalV::NSPIN, GlobalC::ucell.G, GlobalC::ucell.latvec); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT K-POINTS"); diff --git a/source/src_ions/variable_cell.h b/source/src_ions/variable_cell.h index 8297728002..6fc5185e90 100644 --- a/source/src_ions/variable_cell.h +++ b/source/src_ions/variable_cell.h @@ -18,7 +18,6 @@ class Variable_Cell Variable_Cell(); ~Variable_Cell(); - static void init_after_vc(ModuleESolver::ESolver *p_esolver); //LiuXh add 20180515 }; From 10d45236c46bab02c242e817d3dfb9eeb942723c Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 20:47:50 +0800 Subject: [PATCH 19/63] fix : add 'othercalculation' in esolver_ks_pw --- source/module_esolver/esolver_ks.cpp | 1 - source/module_esolver/esolver_ks.h | 2 +- .../module_esolver/esolver_ks_lcao_elec.cpp | 1 - source/module_esolver/esolver_ks_pw.cpp | 24 +++++++++++++++++++ source/module_esolver/esolver_ks_pw.h | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/source/module_esolver/esolver_ks.cpp b/source/module_esolver/esolver_ks.cpp index fc206df2a4..3e9aeb7158 100644 --- a/source/module_esolver/esolver_ks.cpp +++ b/source/module_esolver/esolver_ks.cpp @@ -146,7 +146,6 @@ namespace ModuleESolver ModuleBase::GlobalFunc::DONE(ofs, "INIT PLANEWAVE"); } - void ESolver_KS::Run(const int istep, UnitCell_pseudo& ucell) { if (!(GlobalV::CALCULATION == "scf" || GlobalV::CALCULATION == "md" diff --git a/source/module_esolver/esolver_ks.h b/source/module_esolver/esolver_ks.h index c1ac1cbadb..efd9559e13 100644 --- a/source/module_esolver/esolver_ks.h +++ b/source/module_esolver/esolver_ks.h @@ -7,6 +7,7 @@ #include "module_hamilt/hamilt.h" #include "module_elecstate/elecstate.h" #include "module_pw/pw_basis_k.h" +#include "src_io/cal_test.h" // #include "estates.h" // #include "h2e.h" namespace ModuleESolver @@ -51,7 +52,6 @@ namespace ModuleESolver // choose strategy when charge density convergence achieved virtual bool do_after_converge(int& iter){return true;} - //TOOLS: protected: // Print the headline on the screen: diff --git a/source/module_esolver/esolver_ks_lcao_elec.cpp b/source/module_esolver/esolver_ks_lcao_elec.cpp index 604712655a..e88ef32cbd 100644 --- a/source/module_esolver/esolver_ks_lcao_elec.cpp +++ b/source/module_esolver/esolver_ks_lcao_elec.cpp @@ -23,7 +23,6 @@ #include "../module_deepks/LCAO_deepks.h" #endif #include "../src_pw/H_Ewald_pw.h" -#include "src_io/cal_test.h" namespace ModuleESolver { diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 1def59f5bb..1f4467bdd5 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -212,6 +212,30 @@ namespace ModuleESolver } } + void ESolver_KS_PW::othercalculation(const int istep) + { + ModuleBase::TITLE("ESolver_KS_PW", "othercalculation"); + ModuleBase::timer::tick("ESolver_KS_PW", "othercalculation"); + if(GlobalV::CALCULATION == "test_memory") + { + Cal_Test::test_memory(); + return; + } + + // self consistent calculations for electronic ground state + if (GlobalV::CALCULATION == "nscf") + { + this->nscf(); + } + else + { + ModuleBase::WARNING_QUIT("ESolver_KS_LCAO::othercalculation", "CALCULATION type not supported"); + } + + ModuleBase::timer::tick("ESolver_KS_PW", "othercalculation"); + return; + } + void ESolver_KS_PW::eachiterinit(const int istep, const int iter) { // mohan add 2010-07-16 diff --git a/source/module_esolver/esolver_ks_pw.h b/source/module_esolver/esolver_ks_pw.h index b96846f8cb..43173a7eb0 100644 --- a/source/module_esolver/esolver_ks_pw.h +++ b/source/module_esolver/esolver_ks_pw.h @@ -33,6 +33,7 @@ namespace ModuleESolver virtual void updatepot(const int istep, const int iter) override; virtual void eachiterfinish(const int iter) override; virtual void afterscf() override; + virtual void othercalculation(const int istep)override; //temporary, this will be removed in the future; //Init Global class From a56cc3931f7247907096f683cf86f6b493c22767 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Aug 2022 23:20:23 +0800 Subject: [PATCH 20/63] refactor : add some comments to codes --- source/module_gint/gint.h | 6 +----- source/module_gint/gint_fvl.cpp | 3 +++ source/module_gint/gint_tau.cpp | 4 ++-- source/module_gint/gint_tools.h | 4 ++-- source/module_gint/gint_vl.cpp | 7 ++++++- source/module_xc/xc_functional.h | 4 ++-- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/source/module_gint/gint.h b/source/module_gint/gint.h index 3cedc9c868..c3bc1c8487 100644 --- a/source/module_gint/gint.h +++ b/source/module_gint/gint.h @@ -135,7 +135,7 @@ class Gint //------------------------------------------------------ // in gint_k_rho.cpp //------------------------------------------------------ - // calculate the charge density via grid integrals + // calculate the charge density & kinetic energy density (tau) via grid integrals void gint_kernel_rho( const int na_grid, const int grid_index, @@ -152,10 +152,6 @@ class Gint double** psir_DMR, double* rho); - //------------------------------------------------------ - // in gint_k_rho.cpp - //------------------------------------------------------ - // calculate the charge density via grid integrals void gint_kernel_tau( const int na_grid, const int grid_index, diff --git a/source/module_gint/gint_fvl.cpp b/source/module_gint/gint_fvl.cpp index 3fd82643fa..bd701721fb 100644 --- a/source/module_gint/gint_fvl.cpp +++ b/source/module_gint/gint_fvl.cpp @@ -119,6 +119,9 @@ void Gint::gint_kernel_force_meta( Gint_Tools::Array_Pool ddpsir_ylm_zz(GlobalC::bigpw->bxyz, LD_pool); /* + //this part is for doing finite difference check + //since analytical evaluation of ddpsir is still not working correctly + //this part is saved here in case used in the future ModuleBase::GlobalFunc::ZEROS(dpsir_ylm_x.ptr_1D, GlobalC::bigpw->bxyz*LD_pool); ModuleBase::GlobalFunc::ZEROS(dpsir_ylm_y.ptr_1D, GlobalC::bigpw->bxyz*LD_pool); ModuleBase::GlobalFunc::ZEROS(dpsir_ylm_z.ptr_1D, GlobalC::bigpw->bxyz*LD_pool); diff --git a/source/module_gint/gint_tau.cpp b/source/module_gint/gint_tau.cpp index 04c725b30e..69fef1190f 100644 --- a/source/module_gint/gint_tau.cpp +++ b/source/module_gint/gint_tau.cpp @@ -48,6 +48,7 @@ void Gint::gint_kernel_tau( ModuleBase::GlobalFunc::ZEROS(dpsiy_DM.ptr_1D, GlobalC::bigpw->bxyz*LD_pool); ModuleBase::GlobalFunc::ZEROS(dpsiz_DM.ptr_1D, GlobalC::bigpw->bxyz*LD_pool); + //calculating g_i,mu(r) = sum_nu rho_mu,nu d/dx_i psi_nu(r), x_i=x,y,z if(GlobalV::GAMMA_ONLY_LOCAL) { Gint_Tools::mult_psi_DM( @@ -74,7 +75,6 @@ void Gint::gint_kernel_tau( } else { - //calculating g_mu(r) = sum_nu rho_mu,nu psi_nu(r) Gint_Tools::mult_psi_DMR( grid_index, na_grid, block_index, block_size, @@ -98,7 +98,7 @@ void Gint::gint_kernel_tau( inout->DM_R[is], 1); } - //do sum_mu g_mu(r)psi_mu(r) to get electron density on grid + //do sum_i,mu g_i,mu(r) * d/dx_i psi_mu(r) to get kinetic energy density on grid if(inout->job==Gint_Tools::job_type::tau) { this->cal_meshball_tau( diff --git a/source/module_gint/gint_tools.h b/source/module_gint/gint_tools.h index a8598c3866..c396bfc5e9 100644 --- a/source/module_gint/gint_tools.h +++ b/source/module_gint/gint_tools.h @@ -242,7 +242,7 @@ namespace Gint_Tools const double*const vldr3, // vldr3[GlobalC::bigpw->bxyz] const double*const*const psir_ylm); // psir_ylm[GlobalC::bigpw->bxyz][LD_pool] - // sum_mu,nu rho_mu,nu psi_nu, for gamma point + // sum_nu rho_mu,nu psi_nu, for gamma point void mult_psi_DM( const int na_grid, // how many atoms on this (i,j,k) grid const int LD_pool, @@ -255,7 +255,7 @@ namespace Gint_Tools const double*const*const DM, const int job); - // sum_mu,nu,R rho_mu,nu(R) psi_nu, for multi-k + // sum_nu,R rho_mu,nu(R) psi_nu, for multi-k void mult_psi_DMR( const int &grid_index, const int &na_grid, diff --git a/source/module_gint/gint_vl.cpp b/source/module_gint/gint_vl.cpp index 51e76cecab..8009af6dcf 100644 --- a/source/module_gint/gint_vl.cpp +++ b/source/module_gint/gint_vl.cpp @@ -42,6 +42,8 @@ void Gint::gint_kernel_vlocal( const Gint_Tools::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3( na_grid, LD_pool, block_index, cal_flag, vldr3, psir_ylm.ptr_2D); + //integrate (psi_mu*v(r)*dv) * psi_nu on grid + //and accumulates to the corresponding element in Hamiltonian if(GlobalV::GAMMA_ONLY_LOCAL) { this->cal_meshball_vlocal_gamma( @@ -103,7 +105,6 @@ void Gint::gint_kernel_vlocal_meta( na_grid, LD_pool, block_index, cal_flag, vldr3, psir_ylm.ptr_2D); //calculating df_mu(r) = vofk(r) * dpsi_mu(r) * dv - const Gint_Tools::Array_Pool dpsix_vlbr3 = Gint_Tools::get_psir_vlbr3( na_grid, LD_pool, block_index, cal_flag, vkdr3, dpsir_ylm_x.ptr_2D); const Gint_Tools::Array_Pool dpsiy_vlbr3 = Gint_Tools::get_psir_vlbr3( @@ -113,9 +114,13 @@ void Gint::gint_kernel_vlocal_meta( if(GlobalV::GAMMA_ONLY_LOCAL) { + //integrate (psi_mu*v(r)*dv) * psi_nu on grid + //and accumulates to the corresponding element in Hamiltonian this->cal_meshball_vlocal_gamma( na_grid, LD_pool, block_iw, block_size, block_index, cal_flag, psir_ylm.ptr_2D, psir_vlbr3.ptr_2D, pvpR_in); + //integrate (d/dx_i psi_mu*vk(r)*dv) * (d/dx_i psi_nu) on grid (x_i=x,y,z) + //and accumulates to the corresponding element in Hamiltonian this->cal_meshball_vlocal_gamma( na_grid, LD_pool, block_iw, block_size, block_index, cal_flag, dpsir_ylm_x.ptr_2D, dpsix_vlbr3.ptr_2D, pvpR_in); diff --git a/source/module_xc/xc_functional.h b/source/module_xc/xc_functional.h index 517849eb86..a9b9af3add 100644 --- a/source/module_xc/xc_functional.h +++ b/source/module_xc/xc_functional.h @@ -72,7 +72,7 @@ class XC_Functional // This file contains subroutines for setting the functional // it includes 4 subroutines: // 1. get_func_type : which returns the type of functional (func_type): -// 0 = none; 1 = lda; 2 = gga; 3 = mgga; 4 = hybrid +// 0 = none; 1 = lda; 2 = gga; 3 = mgga; 4 = hybrid lda/gga; 5 = hybrid mgga // 2. set_xc_type : sets the value of: // func_id, which is the LIBXC id of functional // func_type, which is as specified in get_func_type @@ -92,7 +92,7 @@ class XC_Functional private: static std::vector func_id; // libxc id of functional - static int func_type; //0:none, 1:lda, 2:gga, 3:mgga, 4:hybrid + static int func_type; //0:none, 1:lda, 2:gga, 3:mgga, 4:hybrid lda/gga, 5:hybrid mgga static bool use_libxc; //exx_hybrid_alpha for mixing exx in hybrid functional: From 827ea44dd206f0db70f6792ef7fbaf7ca838ea93 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 18 Aug 2022 11:53:10 +0800 Subject: [PATCH 21/63] refactor : merge ions.cpp and loop_ions.cpp --- source/Makefile.Objects | 1 - source/driver.cpp | 1 - source/driver_run.cpp | 55 ++- .../module_esolver/esolver_ks_lcao_elec.cpp | 2 +- source/module_gint/grid_technique.cpp | 2 +- source/src_io/istate_charge.cpp | 10 +- source/src_io/optical.h | 3 + source/src_io/write_HS_R.cpp | 12 +- source/src_ions/ions.cpp | 6 +- source/src_ions/ions.h | 2 +- source/src_lcao/CMakeLists.txt | 1 - source/src_lcao/FORCE_STRESS.h | 2 +- source/src_lcao/LOOP_ions.cpp | 314 ------------------ source/src_lcao/LOOP_ions.h | 45 --- source/src_lcao/dftu.cpp | 1 - source/src_lcao/dftu_relax.cpp | 1 - source/src_lcao/dftu_yukawa.cpp | 1 - 17 files changed, 39 insertions(+), 420 deletions(-) delete mode 100644 source/src_lcao/LOOP_ions.cpp delete mode 100644 source/src_lcao/LOOP_ions.h diff --git a/source/Makefile.Objects b/source/Makefile.Objects index 66fe12bb78..ce1510afbe 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -138,7 +138,6 @@ ORB_gen_tables.o\ local_orbital_wfc.o\ local_orbital_charge.o\ ELEC_evolve.o\ -LOOP_ions.o\ run_md_lcao.o\ DM_gamma.o\ DM_k.o\ diff --git a/source/driver.cpp b/source/driver.cpp index d8ab677819..5af699ad23 100644 --- a/source/driver.cpp +++ b/source/driver.cpp @@ -39,7 +39,6 @@ void Driver::init() Print_Info::print_time(time_start, time_finish); // (4) close all of the running logs - INPUT.close_log(); return; diff --git a/source/driver_run.cpp b/source/driver_run.cpp index 19c5928121..e4d522580d 100644 --- a/source/driver_run.cpp +++ b/source/driver_run.cpp @@ -1,24 +1,25 @@ #include "driver.h" #include "src_pw/global.h" #include "input.h" -#include "src_io/optical.h" #include "src_io/winput.h" #include "module_neighbor/sltk_atom_arrange.h" -#include "src_lcao/LOOP_ions.h" #include "src_io/print_info.h" #include "src_lcao/run_md_lcao.h" #include "src_pw/run_md_pw.h" +// This is the driver function which defines the workflow of ABACUS calculations +// It relies on the class Esolver, which is a class that organizes workflows of single point calculations. +// For calculations involving change of configuration (lattice parameter & ionic motion), +// this driver calls Esolver::Run and the configuration-changing subroutine +// in a alternating manner. +// Information is passed between the two subroutines by class UnitCell_Pseudo +// Esolver::Run takes in a configuration and provides force and stress, +// the configuration-changing subroutine takes force and stress and updates the configuration void Driver::driver_run() { ModuleBase::TITLE("Driver", "driver_line"); ModuleBase::timer::tick("Driver", "driver_line"); - //-----------------------init Cell-------------------------- - // Setup the unitcell. - // improvement: a) separating the first reading of the atom_card and subsequent - // cell relaxation. b) put GlobalV::NLOCAL and GlobalV::NBANDS as input parameters - // 1. Initialzie type of Esolver ModuleESolver::ESolver *p_esolver = nullptr; ModuleESolver::init_esolver(p_esolver); @@ -48,40 +49,24 @@ void Driver::driver_run() //------------------------------------------------------------ // This part onward needs to be refactored. //---------------------------MD/Relax------------------ - if(GlobalV::BASIS_TYPE=="lcao") + if(GlobalV::CALCULATION == "md" && GlobalV::BASIS_TYPE=="lcao") { - if (GlobalV::CALCULATION == "md") - { - Run_MD_LCAO run_md_lcao; - run_md_lcao.opt_ions(p_esolver); - } - else // cell relaxations - { - LOOP_ions ions; - ions.opt_ions(p_esolver); - } + Run_MD_LCAO run_md_lcao; + run_md_lcao.opt_ions(p_esolver); } - else + else if(GlobalV::CALCULATION == "md" || GlobalV::CALCULATION == "sto-md") { - if(GlobalV::CALCULATION == "md" || GlobalV::CALCULATION == "sto-md") - { - Run_MD_PW run_md_pw; - run_md_pw.md_ions_pw(p_esolver); - } - else - { - Ions ions; - ions.opt_ions_pw(p_esolver); - } - - if(Optical::opt_epsilon2) - { - Optical opt; - opt.cal_epsilon2(GlobalV::NBANDS); - } + Run_MD_PW run_md_pw; + run_md_pw.md_ions_pw(p_esolver); + } + else // cell relaxations + { + Ions ions; + ions.opt_ions(p_esolver); } //---------------------------MD/Relax------------------ + // 6. clean up esolver p_esolver->postprocess(); ModuleESolver::clean_esolver(p_esolver); diff --git a/source/module_esolver/esolver_ks_lcao_elec.cpp b/source/module_esolver/esolver_ks_lcao_elec.cpp index e88ef32cbd..f5d329ff73 100644 --- a/source/module_esolver/esolver_ks_lcao_elec.cpp +++ b/source/module_esolver/esolver_ks_lcao_elec.cpp @@ -426,7 +426,7 @@ namespace ModuleESolver #endif // mohan add 2021-02-09 - // in LOOP_ions, istep starts from 1, + // in ions, istep starts from 1, // then when the istep is a variable of scf or nscf, // istep becomes istep-1, this should be fixed in future int istep = 0; diff --git a/source/module_gint/grid_technique.cpp b/source/module_gint/grid_technique.cpp index 58c2337c48..2febd9dfcb 100644 --- a/source/module_gint/grid_technique.cpp +++ b/source/module_gint/grid_technique.cpp @@ -57,7 +57,7 @@ Grid_Technique::~Grid_Technique() } -// This function is called in LOOP_ions.cpp +// This function is called in esolver_ks_lcao_elec.cpp // after the orbital information has been read, // this function control the routinue to generate // grid technique parameters. diff --git a/source/src_io/istate_charge.cpp b/source/src_io/istate_charge.cpp index 246b682127..ba61394d54 100644 --- a/source/src_io/istate_charge.cpp +++ b/source/src_io/istate_charge.cpp @@ -117,24 +117,20 @@ void IState_Charge::begin(Gint_Gamma &gg) if(bands_picked[ib]) { std::cout << " Perform band decomposed charge density for band " << ib+1 << std::endl; - // (1) - // This has been done once in LOOP_ions. - // but here we need to done for each band. - //this->loc->allocate_gamma(GridT); - // (2) calculate the density matrix for a partuclar + // (1) calculate the density matrix for a partuclar // band, whenever it is occupied or not. #ifdef __MPI this->idmatrix(ib); #endif - // (3) zero out of charge density array. + // (2) zero out of charge density array. for(int is=0; isnrxx ); } - // (4) calculate charge density for a particular + // (3) calculate charge density for a particular // band. Gint_inout inout(this->loc->DM, (Charge*)(&GlobalC::CHR), Gint_Tools::job_type::rho); gg.cal_gint(&inout); diff --git a/source/src_io/optical.h b/source/src_io/optical.h index 0bdd6bcf07..a74ac04d92 100644 --- a/source/src_io/optical.h +++ b/source/src_io/optical.h @@ -1,6 +1,9 @@ #ifndef OPTICAL_H #define OPTICAL_H +//This seems to be calculating epsilon for optical excitations +//But is not currently in use + class Optical { public: diff --git a/source/src_io/write_HS_R.cpp b/source/src_io/write_HS_R.cpp index 3642af9040..56d3400576 100644 --- a/source/src_io/write_HS_R.cpp +++ b/source/src_io/write_HS_R.cpp @@ -16,8 +16,8 @@ void ESolver_KS_LCAO::output_HS_R( const bool &binary, const double &sparse_threshold) { - ModuleBase::TITLE("LOOP_ions","output_HS_R"); - ModuleBase::timer::tick("LOOP_ions","output_HS_R"); + ModuleBase::TITLE("ESolver_KS_LCAO","output_HS_R"); + ModuleBase::timer::tick("ESolver_KS_LCAO","output_HS_R"); // add by jingan for out r_R matrix 2019.8.14 if(INPUT.out_mat_r) @@ -72,21 +72,21 @@ void ESolver_KS_LCAO::output_HS_R( this->UHM.GK.destroy_pvpR(); } //LiuXh 20181011 - ModuleBase::timer::tick("LOOP_ions","output_HS_R"); + ModuleBase::timer::tick("ESolver_KS_LCAO","output_HS_R"); return; } void ESolver_KS_LCAO::output_SR(const std::string &SR_filename, const bool &binary, const double &sparse_threshold) { - ModuleBase::TITLE("LOOP_ions","output_SR"); - ModuleBase::timer::tick("LOOP_ions","output_SR"); + ModuleBase::TITLE("ESolver_KS_LCAO","output_SR"); + ModuleBase::timer::tick("ESolver_KS_LCAO","output_SR"); this->UHM.calculate_SR_sparse(sparse_threshold); HS_Matrix::save_SR_sparse(*this->UHM.LM, sparse_threshold, binary, SR_filename); this->UHM.destroy_all_HSR_sparse(); - ModuleBase::timer::tick("LOOP_ions","output_SR"); + ModuleBase::timer::tick("ESolver_KS_LCAO","output_SR"); return; } } \ No newline at end of file diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 630ac0103d..9017956c90 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -4,10 +4,10 @@ #include "variable_cell.h" // mohan add 2021-02-01 #include "src_io/write_wfc_realspace.h" -void Ions::opt_ions_pw(ModuleESolver::ESolver *p_esolver) +void Ions::opt_ions(ModuleESolver::ESolver *p_esolver) { - ModuleBase::TITLE("Ions","opt_ions_pw"); - ModuleBase::timer::tick("Ions","opt_ions_pw"); + ModuleBase::TITLE("Ions","opt_ions"); + ModuleBase::timer::tick("Ions","opt_ions"); if(GlobalV::OUT_LEVEL=="i") { diff --git a/source/src_ions/ions.h b/source/src_ions/ions.h index 848d5ef53c..3801817843 100644 --- a/source/src_ions/ions.h +++ b/source/src_ions/ions.h @@ -18,7 +18,7 @@ class Ions Ions(){}; ~Ions(){}; - void opt_ions_pw(ModuleESolver::ESolver *p_esolver); + void opt_ions(ModuleESolver::ESolver *p_esolver); private: diff --git a/source/src_lcao/CMakeLists.txt b/source/src_lcao/CMakeLists.txt index 6bfbdaa616..63b8d53b7f 100644 --- a/source/src_lcao/CMakeLists.txt +++ b/source/src_lcao/CMakeLists.txt @@ -15,7 +15,6 @@ list(APPEND objects LCAO_hamilt.cpp LCAO_matrix.cpp LCAO_nnr.cpp - LOOP_ions.cpp build_st_pw.cpp center2_orb-orb11.cpp center2_orb-orb21.cpp diff --git a/source/src_lcao/FORCE_STRESS.h b/source/src_lcao/FORCE_STRESS.h index 1efa0d355a..2ce6974aea 100644 --- a/source/src_lcao/FORCE_STRESS.h +++ b/source/src_lcao/FORCE_STRESS.h @@ -18,7 +18,7 @@ class Force_Stress_LCAO friend class Run_MD_LCAO; friend void Input_Conv::Convert(); friend class Update_input; - friend class LOOP_ions; + friend class ions; friend class MD_func; public : diff --git a/source/src_lcao/LOOP_ions.cpp b/source/src_lcao/LOOP_ions.cpp deleted file mode 100644 index 7623f080b6..0000000000 --- a/source/src_lcao/LOOP_ions.cpp +++ /dev/null @@ -1,314 +0,0 @@ -#include "LOOP_ions.h" -#include "../src_pw/global.h" -#include "../module_orbital/parallel_orbitals.h" -#include "../src_pdiag/pdiag_double.h" -#include "../module_base/global_function.h" -#include "../src_io/write_HS.h" -#include "../src_io/print_info.h" -#include "../src_io/cal_r_overlap_R.h" -#include "../src_ions/variable_cell.h" // mohan add 2021-02-01 -#include "../src_ri/exx_abfs.h" -#include "../src_ri/exx_opt_orb.h" -#include "../module_neighbor/sltk_atom_arrange.h" -#include "../src_pw/vdwd2.h" -#include "../src_pw/vdwd3.h" -#include "../src_pw/vdwd2_parameters.h" -#include "../src_pw/vdwd3_parameters.h" -#include "dmft.h" -#include "src_lcao/LCAO_matrix.h" -#ifdef __DEEPKS -#include "../module_deepks/LCAO_deepks.h" //caoyu add 2021-07-26 -#endif - -LOOP_ions::LOOP_ions() -{} - -LOOP_ions::~LOOP_ions() -{} - -void LOOP_ions::opt_ions(ModuleESolver::ESolver* p_esolver) -{ - ModuleBase::TITLE("LOOP_ions", "opt_ions"); - ModuleBase::timer::tick("LOOP_ions", "opt_ions"); - - if(GlobalV::OUT_LEVEL=="i") - { - std::cout << std::setprecision(12); - std::cout<< " " << std::setw(7)<< "ISTEP" - <istep = 1; - int force_step = 1; - int stress_step = 1; - bool stop = false; - while (istep <= GlobalV::RELAX_NMAX && !stop) - { - time_t estart = time(NULL); - - // xiaohui add "m" option, 2015-09-16 - if (GlobalV::OUT_LEVEL == "ie" || GlobalV::OUT_LEVEL == "m") - { - Print_Info::print_screen(stress_step, force_step, istep); - } - - // solve electronic structures in terms of LCAO - p_esolver->Run(this->istep - 1, GlobalC::ucell); - - time_t eend = time(NULL); - - //for second-order extrapolation - if (GlobalV::CALCULATION == "relax" || GlobalV::CALCULATION == "cell-relax") - { - CE.update_all_pos(GlobalC::ucell); - } - - time_t fstart = time(NULL); - if (GlobalV::CALCULATION == "scf" || GlobalV::CALCULATION == "relax" || GlobalV::CALCULATION == "cell-relax") - { - stop = this->force_stress(istep, force_step, stress_step, p_esolver); - } - time_t fend = time(NULL); - - // PLEASE move the details of CE to other places - // mohan add 2021-03-25 - //xiaohui add 2014-07-07, for second-order extrapolation - if (GlobalV::CALCULATION == "relax" || GlobalV::CALCULATION == "cell-relax") - { - CE.save_pos_next(GlobalC::ucell); - } - - if(GlobalV::OUT_LEVEL=="i") - { - double etime_min = difftime(eend, estart)/60.0; - double ftime_min = difftime(fend, fstart)/60.0; - std::stringstream ss; - ss << GlobalV::RELAX_METHOD << istep; - - std::cout << " " << std::setw(7) << ss.str() - << std::setw(5) << p_esolver->getniter() - << std::setw(15) << std::setprecision(6) << GlobalC::en.etot * ModuleBase::Ry_to_eV - << std::setw(15) << IMM.get_ediff() * ModuleBase::Ry_to_eV - << std::setprecision(3) - << std::setw(15) << IMM.get_largest_grad() * ModuleBase::Ry_to_eV / 0.529177 - << std::setw(15) << IMM.get_trust_radius() - << std::setw(8) << IMM.get_update_iter() - << std::setprecision(2) << std::setw(11) << etime_min - << std::setw(11) << ftime_min << std::endl; - } - - ++istep; - } - - ModuleBase::timer::tick("LOOP_ions", "opt_ions"); - return; -} - - -bool LOOP_ions::force_stress( - const int& istep, - int& force_step, - int& stress_step, - ModuleESolver::ESolver* p_esolver) -{ - ModuleBase::TITLE("LOOP_ions", "force_stress"); - - if (!GlobalV::CAL_FORCE && !GlobalV::CAL_STRESS) - { - return 1; - } - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - - // set force matrix - ModuleBase::matrix fcs; - // set stress matrix - ModuleBase::matrix scs; - - p_esolver->cal_Force(fcs); - p_esolver->cal_Stress(scs); - - //-------------------------------------------------- - // only forces are needed, no stresses are needed - //-------------------------------------------------- - if (GlobalV::CAL_FORCE && !GlobalV::CAL_STRESS) - { - -#ifdef __MPI - atom_arrange::delete_vector( - GlobalV::ofs_running, - GlobalV::SEARCH_PBC, - GlobalC::GridD, - GlobalC::ucell, - GlobalV::SEARCH_RADIUS, - GlobalV::test_atom_input); -#endif - - if (GlobalV::CALCULATION == "relax") - { - IMM.cal_movement(istep, istep, fcs, GlobalC::en.etot); - - if (IMM.get_converged() || (istep == GlobalV::RELAX_NMAX)) - { - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 1; // 1 means converged - } - else // ions are not converged - { - CE.update_istep(istep); - CE.extrapolate_charge(); - - if (GlobalC::pot.chg_extrap == "dm") - { - } - else - { - GlobalC::pot.init_pot(istep, GlobalC::sf.strucFac); - } - } - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 0; - } - else - { - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 1; - } - - } - - // static bool converged_force = false; - static bool converged_stress = false; - - if (!GlobalV::CAL_FORCE && GlobalV::CAL_STRESS) - { - -#ifdef __MPI - atom_arrange::delete_vector( - GlobalV::ofs_running, - GlobalV::SEARCH_PBC, - GlobalC::GridD, - GlobalC::ucell, - GlobalV::SEARCH_RADIUS, - GlobalV::test_atom_input); -#endif - if (GlobalV::CALCULATION == "cell-relax") - { - LCM.cal_lattice_change(stress_step, scs, GlobalC::en.etot); - converged_stress = LCM.get_converged(); - if (converged_stress) - { - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 1; - } - else - { - Variable_Cell::init_after_vc(p_esolver); - GlobalC::pot.init_pot(stress_step, GlobalC::sf.strucFac); - - ++stress_step; - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 0; - } - } - else - { - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 1; - } - } - - if (GlobalV::CAL_FORCE && GlobalV::CAL_STRESS) - { - atom_arrange::delete_vector( - GlobalV::ofs_running, - GlobalV::SEARCH_PBC, - GlobalC::GridD, - GlobalC::ucell, - GlobalV::SEARCH_RADIUS, - GlobalV::test_atom_input); - - if (GlobalV::CALCULATION == "relax" || GlobalV::CALCULATION == "cell-relax") - { - IMM.cal_movement(istep, force_step, fcs, GlobalC::en.etot); - - if (IMM.get_converged()) - { - force_step = 1; - - - if (GlobalV::CALCULATION == "cell-relax") - { - LCM.cal_lattice_change(stress_step, scs, GlobalC::en.etot); - converged_stress = LCM.get_converged(); - if (converged_stress) - { - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 1; - } - else - { - Variable_Cell::init_after_vc(p_esolver); - GlobalC::pot.init_pot(stress_step, GlobalC::sf.strucFac); - - ++stress_step; - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 0; - } - } - else - { - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 1; - } - - } - else - { - CE.update_istep(force_step); - CE.extrapolate_charge(); - - if (GlobalC::pot.chg_extrap == "dm") - { - } - else - { - GlobalC::pot.init_pot(istep, GlobalC::sf.strucFac); - } - ++force_step; - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 0; - } - } - else - { - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 1; - } - } - ModuleBase::timer::tick("LOOP_ions", "force_stress"); - return 0; -} - - diff --git a/source/src_lcao/LOOP_ions.h b/source/src_lcao/LOOP_ions.h deleted file mode 100644 index edf8259f0d..0000000000 --- a/source/src_lcao/LOOP_ions.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef LOOP_IONS_H -#define LOOP_IONS_H - -#include "../src_ions/ions_move_methods.h" -#include "../src_pw/charge_extra.h" -#include "../src_ions/lattice_change_methods.h" -#include "src_lcao/local_orbital_wfc.h" -#include "module_orbital/ORB_control.h" -#include "src_lcao/LCAO_hamilt.h" -#include "module_esolver/esolver.h" - -#include - -class LOOP_ions -{ - -public: - - LOOP_ions(); - ~LOOP_ions(); - - void opt_ions(ModuleESolver::ESolver* p_esolver); //output for dos - -private: - - Ions_Move_Methods IMM; - - Lattice_Change_Methods LCM; - - // PLEASE move 'force_stress()' function to other places, such as FORCE_STRESS.cpp or - // you might think to create a new file, it is because 'force_stress' do not - // belong to 'LOOP_ions', 'GlobalC::pot.init_pot' also do not belong to force_stress() - // the renew of structure factors, etc. should be ran in other places - // the 'IMM' and 'LCM' objects should be passed to force_stress() via parameters list - // mohan note 2021-03-23 - bool force_stress(const int& istep, int& force_step, int& stress_step, ModuleESolver::ESolver* p_esolver); - - int istep; - - // electron charge density extropolation method - Charge_Extra CE; - -}; - -#endif diff --git a/source/src_lcao/dftu.cpp b/source/src_lcao/dftu.cpp index e78f4c001c..89c98a8af2 100644 --- a/source/src_lcao/dftu.cpp +++ b/source/src_lcao/dftu.cpp @@ -19,7 +19,6 @@ #include "global_fp.h" #include "../module_base/global_function.h" #include "../module_base/inverse_matrix.h" -#include "LOOP_ions.h" #include "LCAO_matrix.h" #include "../src_pw/magnetism.h" #include "../module_orbital/ORB_gen_tables.h" diff --git a/source/src_lcao/dftu_relax.cpp b/source/src_lcao/dftu_relax.cpp index 0dedf18cf0..644a1caf04 100644 --- a/source/src_lcao/dftu_relax.cpp +++ b/source/src_lcao/dftu_relax.cpp @@ -17,7 +17,6 @@ #include "global_fp.h" #include "../module_base/global_function.h" #include "../module_base/inverse_matrix.h" -#include "LOOP_ions.h" #include "LCAO_matrix.h" #include "../src_pw/magnetism.h" #include "../module_orbital/ORB_gen_tables.h" diff --git a/source/src_lcao/dftu_yukawa.cpp b/source/src_lcao/dftu_yukawa.cpp index c6ec3256ba..8200dc55f1 100644 --- a/source/src_lcao/dftu_yukawa.cpp +++ b/source/src_lcao/dftu_yukawa.cpp @@ -17,7 +17,6 @@ #include "../src_pw/global.h" #include "global_fp.h" #include "../module_base/global_function.h" -#include "LOOP_ions.h" #include "LCAO_matrix.h" namespace ModuleDFTU{ From e9788b533a02e306e4233283a308ac426e09bbd4 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 18 Aug 2022 19:53:32 +0800 Subject: [PATCH 22/63] refactor : use atomic extrapolation for relaxation --- source/input_conv.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/input_conv.cpp b/source/input_conv.cpp index d597bdbf5f..c7ff77fda3 100644 --- a/source/input_conv.cpp +++ b/source/input_conv.cpp @@ -89,6 +89,12 @@ void Input_Conv::Convert(void) Force_Stress_LCAO::force_invalid_threshold_ev = INPUT.force_thr_ev2; #endif + if((INPUT.calculation=="relax" || INPUT.calculation=="cell-relax") && INPUT.chg_extrap!="atomic") + { + std::cout << " For relaxation, charge extrapolation is set to atomic." << std::endl; + INPUT.chg_extrap="atomic"; + } + BFGS_Basic::relax_bfgs_w1 = INPUT.relax_bfgs_w1; BFGS_Basic::relax_bfgs_w2 = INPUT.relax_bfgs_w2; From e69c9a86429ecbf118cddbf6104c52ace4b560d6 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Thu, 18 Aug 2022 21:27:49 +0800 Subject: [PATCH 23/63] Feature: add new method for SDFT which needs small nche_sto --- docs/input-main.md | 2 +- source/module_base/math_chebyshev_def.h | 14 +- source/module_esolver/esolver_ks_pw_tool.cpp | 2 +- .../module_esolver/esolver_sdft_pw_tool.cpp | 20 +- source/module_hsolver/hsolver_pw_sdft.cpp | 2 +- source/src_pw/sto_func.cpp | 17 ++ source/src_pw/sto_func.h | 1 + source/src_pw/sto_hchi.cpp | 25 +- source/src_pw/sto_hchi.h | 11 +- source/src_pw/sto_iter.cpp | 240 ++++++++++++------ source/src_pw/sto_iter.h | 5 +- tests/integrate/185_PW_SDFT_10S_METHD2/INPUT | 2 +- tests/integrate/185_PW_SDFT_10S_METHD2/KPT | 2 +- .../185_PW_SDFT_10S_METHD2/result.ref | 10 +- 14 files changed, 236 insertions(+), 117 deletions(-) diff --git a/docs/input-main.md b/docs/input-main.md index a6de2f4e30..54d23eb45a 100644 --- a/docs/input-main.md +++ b/docs/input-main.md @@ -591,7 +591,7 @@ This part of variables are used to control the parameters of stochastic DFT (SDF - **Description**: - Different method to do SDFT. - 1: SDFT calculates $T_n(\hat{h})\ket{\chi}$ twice, where $T_n(x)$ is the n-th order Chebyshev polynomial and $\hat{h}=\frac{\hat{H}-\bar{E}}{\Delta E}$ owning eigen-value $\in(-1,1)$. This method cost less memory but slow. - - 2: SDFT calculates $T_n(\hat{h})\ket{\chi}$ once but need much more memory. This method is fast but when memory is not enough, only method 1 can be used. + - 2: SDFT calculates $T_n(\hat{h})\ket{\chi}$ once but need much more memory. This method is much faster. Besides, it calculate $N_e$ with $\bra{\chi}\sqrt{\hat f}\sqrt{\hat f}\ket{\chi}$, which needs smaller [nche_sto](#nche_sto). However, when memory is not enough, only method 1 can be used. - other: use 1 - **Default**: 1 diff --git a/source/module_base/math_chebyshev_def.h b/source/module_base/math_chebyshev_def.h index 4df7d783eb..fd01a10f71 100644 --- a/source/module_base/math_chebyshev_def.h +++ b/source/module_base/math_chebyshev_def.h @@ -349,15 +349,19 @@ void Chebyshev::calpolyvec_complex(T *ptr, { assert(N>=0 && LDA >= N); - int ndmxt; - if(m == 1) ndmxt = N * m; - else ndmxt = LDA * m; + const int ndmxt = LDA * m; std::complex *arraynp1 = polywaveout + 2 * ndmxt; std::complex *arrayn = polywaveout + ndmxt; std::complex *arrayn_1 = polywaveout; - - ModuleBase::GlobalFunc::DCOPY(wavein, arrayn_1, ndmxt); + + std::complex *tmpin = wavein, *tmpout = arrayn_1; + for(int i = 0 ; i < m ; ++i) + { + ModuleBase::GlobalFunc::DCOPY(tmpin, tmpout, N); + tmpin += LDA; + tmpout += LDA; + } //1-st order (ptr->*funA)(arrayn_1, arrayn, m); diff --git a/source/module_esolver/esolver_ks_pw_tool.cpp b/source/module_esolver/esolver_ks_pw_tool.cpp index 1e5fc79150..5d8790072c 100644 --- a/source/module_esolver/esolver_ks_pw_tool.cpp +++ b/source/module_esolver/esolver_ks_pw_tool.cpp @@ -158,7 +158,7 @@ void ESolver_KS_PW::calcondw(const int nt,const double dt,const double fwhmin,co double * cw11 = new double [nw]; double * cw12 = new double [nw]; double * cw22 = new double [nw]; - double * kappa = new double [(int)ceil(wcut/dw_in)]; + double * kappa = new double [nw]; ModuleBase::GlobalFunc::ZEROS(cw11,nw); ModuleBase::GlobalFunc::ZEROS(cw12,nw); ModuleBase::GlobalFunc::ZEROS(cw22,nw); diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index 493be88140..d53c6a1870 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -56,7 +56,7 @@ void ESolver_SDFT_PW::check_che(const int nche_in) while(1) { bool converge; - converge= chetest.checkconverge(&stohchi, &Stochastic_hchi::hchi_reciprocal, + converge= chetest.checkconverge(&stohchi, &Stochastic_hchi::hchi_norm, pchi, npw, stohchi.Emax, stohchi.Emin, 5.0); if(!converge) @@ -263,10 +263,10 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w ModuleBase::GlobalFunc::COPYARRAY(hj1sfpsi_out, j2sfpsi.get_pointer(), ndim*totbands_per*npwx); /* - // stohchi.hchi_reciprocal(psi0.get_pointer(), hpsi0.get_pointer(), totbands_per); - // stohchi.hchi_reciprocal(sfpsi0.get_pointer(), hsfpsi0.get_pointer(), totbands_per); - // stohchi.hchi_reciprocal(j1psi.get_pointer(), j2psi.get_pointer(), ndim*totbands_per); - // stohchi.hchi_reciprocal(j1sfpsi.get_pointer(), j2sfpsi.get_pointer(), ndim*totbands_per); + // stohchi.hchi_norm(psi0.get_pointer(), hpsi0.get_pointer(), totbands_per); + // stohchi.hchi_norm(sfpsi0.get_pointer(), hsfpsi0.get_pointer(), totbands_per); + // stohchi.hchi_norm(j1psi.get_pointer(), j2psi.get_pointer(), ndim*totbands_per); + // stohchi.hchi_norm(j1sfpsi.get_pointer(), j2sfpsi.get_pointer(), ndim*totbands_per); // double Ebar = (stohchi.Emin + stohchi.Emax)/2; // double DeltaE = (stohchi.Emax - stohchi.Emin)/2; // for(int ib = 0 ; ib < totbands_per ; ++ib) @@ -307,8 +307,8 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w //(1-f) che.calcoef_real(&stoiter.stofunc,&Sto_Func::n_fd); - che.calfinalvec_real(&stohchi, &Stochastic_hchi::hchi_reciprocal, j1sfpsi.get_pointer(), j1sfpsi.get_pointer(), npw, npwx, totbands_per*ndim); - che.calfinalvec_real(&stohchi, &Stochastic_hchi::hchi_reciprocal, j2sfpsi.get_pointer(), j2sfpsi.get_pointer(), npw, npwx, totbands_per*ndim); + che.calfinalvec_real(&stohchi, &Stochastic_hchi::hchi_norm, j1sfpsi.get_pointer(), j1sfpsi.get_pointer(), npw, npwx, totbands_per*ndim); + che.calfinalvec_real(&stohchi, &Stochastic_hchi::hchi_norm, j2sfpsi.get_pointer(), j2sfpsi.get_pointer(), npw, npwx, totbands_per*ndim); psi::Psi> *p_j1psi = &j1psi; psi::Psi> *p_j2psi = &j2psi; @@ -361,9 +361,9 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w } //exp(iHdt)|chi> - chet.calfinalvec_complex(&stohchi, &Stochastic_hchi::hchi_reciprocal, &exppsi(ksbandper,0), &exppsi(ksbandper,0), npw, npwx, nchip); + chet.calfinalvec_complex(&stohchi, &Stochastic_hchi::hchi_norm, &exppsi(ksbandper,0), &exppsi(ksbandper,0), npw, npwx, nchip); //exp(-iHdt)|shchi> - chet2.calfinalvec_complex(&stohchi, &Stochastic_hchi::hchi_reciprocal, &expsfpsi(ksbandper,0), &expsfpsi(ksbandper,0), npw, npwx, nchip); + chet2.calfinalvec_complex(&stohchi, &Stochastic_hchi::hchi_norm, &expsfpsi(ksbandper,0), &expsfpsi(ksbandper,0), npw, npwx, nchip); psi::Psi> *p_exppsi = &exppsi; #ifdef __MPI psi::Psi> exppsi_tot; @@ -480,7 +480,7 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d pchi = stowf.chiortho[ik].c; else pchi = stowf.chi0[ik].c; - che.tracepolyA(&stohchi, &Stochastic_hchi::hchi_reciprocal, pchi, npw, npwx, nchip); + che.tracepolyA(&stohchi, &Stochastic_hchi::hchi_norm, pchi, npw, npwx, nchip); for(int i = 0 ; i < nche_dos ; ++i) { spolyv[i] += che.polytrace[i] * GlobalC::kv.wk[ik] / 2 ; diff --git a/source/module_hsolver/hsolver_pw_sdft.cpp b/source/module_hsolver/hsolver_pw_sdft.cpp index fa54151872..47f3fea54b 100644 --- a/source/module_hsolver/hsolver_pw_sdft.cpp +++ b/source/module_hsolver/hsolver_pw_sdft.cpp @@ -100,7 +100,7 @@ namespace hsolver } } // calculate stochastic rho - stoiter.sum_stoband(stowf,pes); + stoiter.sum_stoband(stowf,pes,pHamilt); //(6) calculate the delta_harris energy diff --git a/source/src_pw/sto_func.cpp b/source/src_pw/sto_func.cpp index e36ccef788..8b4f44fac3 100644 --- a/source/src_pw/sto_func.cpp +++ b/source/src_pw/sto_func.cpp @@ -97,6 +97,23 @@ REAL Sto_Func:: nfdlnfd(REAL rawe) } } +template +REAL Sto_Func:: n_root_fdlnfd(REAL rawe) +{ + REAL Ebar = (Emin + Emax)/2; + REAL DeltaE = (Emax - Emin)/2; + REAL ne_mu = (rawe * DeltaE + Ebar - mu) / this->tem ; + if(ne_mu > 36) + return 0; + else if(ne_mu < -36) + return 0; + else + { + REAL f = 1 / (1 + exp(ne_mu)); + return sqrt(-f * log(f) - (1-f) * log(1-f)); + } +} + template REAL Sto_Func::n_fd(REAL rawe) { diff --git a/source/src_pw/sto_func.h b/source/src_pw/sto_func.h index b3c9baf299..f0ecc25b4c 100644 --- a/source/src_pw/sto_func.h +++ b/source/src_pw/sto_func.h @@ -19,6 +19,7 @@ class Sto_Func REAL nxfd(REAL e); REAL fdlnfd(REAL e); REAL nfdlnfd(REAL e); + REAL n_root_fdlnfd(REAL e); REAL n_fd(REAL e); public: diff --git a/source/src_pw/sto_hchi.cpp b/source/src_pw/sto_hchi.cpp index 1b7f712f1e..4c33f8ca92 100644 --- a/source/src_pw/sto_hchi.cpp +++ b/source/src_pw/sto_hchi.cpp @@ -21,9 +21,9 @@ void Stochastic_hchi:: init() } -void Stochastic_hchi:: hchi_reciprocal(complex *chig, complex *hchig, const int m) +void Stochastic_hchi:: hchi(complex *chig, complex *hchig, const int m) { - ModuleBase::timer::tick("Stochastic_hchi","hchi_reciprocal"); + //--------------------------------------------------- @@ -150,10 +150,19 @@ void Stochastic_hchi:: hchi_reciprocal(complex *chig, complex *h } ModuleBase::timer::tick("Stochastic_hchi","vnl"); + return; +} +void Stochastic_hchi:: hchi_norm(complex *chig, complex *hchig, const int m) +{ + ModuleBase::timer::tick("Stochastic_hchi","hchi_norm"); + this->hchi(chig,hchig,m); - double Ebar = (Emin + Emax)/2; - double DeltaE = (Emax - Emin)/2; + const int ik = this->current_ik; + const int npwx = GlobalC::wf.npwx; + const int npw = GlobalC::kv.ngk[ik]; + const double Ebar = (Emin + Emax)/2; + const double DeltaE = (Emax - Emin)/2; for(int ib = 0 ; ib < m ; ++ib) { for(int ig = 0; ig < npw; ++ig) @@ -161,9 +170,5 @@ void Stochastic_hchi:: hchi_reciprocal(complex *chig, complex *h hchig[ib*npwx+ig] = (hchig[ib*npwx+ig] - Ebar * chig[ib*npwx+ig]) / DeltaE; } } - - ModuleBase::timer::tick("Stochastic_hchi","hchi_reciprocal"); - - - return; -} + ModuleBase::timer::tick("Stochastic_hchi","hchi_norm"); +} \ No newline at end of file diff --git a/source/src_pw/sto_hchi.h b/source/src_pw/sto_hchi.h index d816465230..d11fa89ca3 100644 --- a/source/src_pw/sto_hchi.h +++ b/source/src_pw/sto_hchi.h @@ -27,17 +27,16 @@ class Stochastic_hchi double Emin; double Emax; - void hchi_real( - complex *wfin, - complex *wfout, - const int m = 1); //wfin & wfout are wavefunctions in real space - void orthogonal_to_psi_reciprocal( complex* wfin, complex *wfout, const int& ikk); //wfin & wfout are wavefunctions in reciprocal space + void hchi( + complex *wfin, + complex *wfout, + const int m = 1); //wfin & wfout are wavefunctions in reciprocal space - void hchi_reciprocal( + void hchi_norm( complex *wfin, complex *wfout, const int m = 1); //wfin & wfout are wavefunctions in reciprocal space diff --git a/source/src_pw/sto_iter.cpp b/source/src_pw/sto_iter.cpp index a21f1dbc4b..f3d104880c 100644 --- a/source/src_pw/sto_iter.cpp +++ b/source/src_pw/sto_iter.cpp @@ -7,6 +7,18 @@ #include "../module_base/timer.h" #include "../src_parallel/parallel_reduce.h" #include "../module_base/blas_connector.h" +double vTMv(const double *v, const double * M, const int n) +{ + char normal = 'N'; + double one = 1; + int inc = 1; + double zero = 0; + double *y = new double [n]; + dgemv_(&normal,&n,&n,&one,M,&n,v,&inc,&zero,y,&inc); + double result = BlasConnector::dot(n,y,1,v,1); + delete[] y; + return result; +} Stochastic_Iter::Stochastic_Iter() { @@ -30,11 +42,13 @@ void Stochastic_Iter::init(const int dim, int* nchip_in, const int method_in, St stohchi.init(); delete [] spolyv; const int norder = p_che->norder; - spolyv = new double [norder]; + this->method = method_in; + if(method == 1 || method ==2) spolyv = new double [norder]; + else spolyv = new double [norder*norder]; stofunc.Emin = INPUT.emin_sto; stofunc.Emax = INPUT.emax_sto; - this->method = method_in; - if(this->method == 2) + + if(this->method == 2 || this->method == 3) { double tot = 0; for(int ik = 0 ; ik < GlobalC::kv.nks; ++ik) @@ -45,13 +59,13 @@ void Stochastic_Iter::init(const int dim, int* nchip_in, const int method_in, St MPI_Allreduce(MPI_IN_PLACE, &tot, 1, MPI_DOUBLE, MPI_SUM, POOL_WORLD); #endif tot /= double(1073741824); //convert B to GB - assert(tot < 64); + if(tot > 64) cout<<" WARNING: POOL 0 uses memories of over "<chiallorder = new ModuleBase::ComplexMatrix[stowf.nks]; for (int ik =0 ; ik < GlobalC::kv.nks; ++ik) { const int nchip = stowf.chi0[ik].nr; const int npwx = stowf.chi0[ik].nc; - chiallorder[ik].create(nchip * npwx, norder,false); + chiallorder[ik].create(nchip * npwx, norder,true); } } } @@ -126,7 +140,7 @@ void Stochastic_Iter::checkemm(const int& ik, const int istep, const int iter, S { bool converge; converge = p_che->checkconverge( - &stohchi, &Stochastic_hchi::hchi_reciprocal, + &stohchi, &Stochastic_hchi::hchi_norm, pchi, GlobalC::kv.ngk[ik], stohchi.Emax, stohchi.Emin, @@ -162,6 +176,44 @@ void Stochastic_Iter::checkemm(const int& ik, const int istep, const int iter, S } } +void Stochastic_Iter::check_precision(const double ref, const double thr, const string info) +{ + //============================== + //precision check + //============================== + double error = 0; + if(this->method == 1 || this->method == 2) + { + error = p_che->coef_real[p_che->norder-1] * spolyv[p_che->norder-1]; + } + else + { + const int norder = p_che->norder; + double last_coef = p_che->coef_real[norder-1]; + double last_spolyv = spolyv[norder*norder - 1]; + error += last_coef *(BlasConnector::dot(norder,p_che->coef_real,1,spolyv+norder*(norder-1),1) + + BlasConnector::dot(norder,p_che->coef_real,1,spolyv+norder-1,norder)-last_coef*last_spolyv); + } + +#ifdef __MPI + MPI_Allreduce(MPI_IN_PLACE, &error, 1, MPI_DOUBLE, MPI_SUM , MPI_COMM_WORLD); +#endif + GlobalV::ofs_running< thr) + { + stringstream ss; + ss<>fractxt; + ss.clear(); + ss<>tartxt; + string warningtxt = "( "+info+" Chebyshev error = "+fractxt+" > threshold = "+tartxt+" ) Please add more expansion terms for Chebychev expansion."; + ModuleBase::WARNING("Stochastic_Chebychev", warningtxt); + } + //=============================== +} + void Stochastic_Iter::itermu(const int iter, elecstate::ElecState* pes) { ModuleBase::TITLE("Stochastic_Iter","itermu"); @@ -176,7 +228,7 @@ void Stochastic_Iter::itermu(const int iter, elecstate::ElecState* pes) else { dmu = 0.1; - th_ne = GlobalV::SCF_THR * 1e-2 * GlobalC::CHR.nelec; + th_ne = 1e-2 * GlobalV::SCF_THR * GlobalC::CHR.nelec; } this->stofunc.mu = mu0 - dmu; double ne1 = calne(pes); @@ -191,7 +243,6 @@ void Stochastic_Iter::itermu(const int iter, elecstate::ElecState* pes) while(ne1 > targetne) { - ne2 = ne1; mu2 = mu1; mu1 -= dmu; this->stofunc.mu = mu1; @@ -201,7 +252,6 @@ void Stochastic_Iter::itermu(const int iter, elecstate::ElecState* pes) } while(ne2 < targetne) { - ne1 = ne2; mu1 = mu2; mu2 += dmu; this->stofunc.mu = mu2; @@ -217,12 +267,10 @@ void Stochastic_Iter::itermu(const int iter, elecstate::ElecState* pes) ne3 = calne(pes); if(ne3 < targetne) { - ne1 = ne3; mu1 = mu3; } else if(ne3 > targetne) { - ne2 = ne3; mu2 = mu3; } Dne = abs(targetne - ne3); @@ -236,30 +284,9 @@ void Stochastic_Iter::itermu(const int iter, elecstate::ElecState* pes) "Cannot converge feimi energy. Please retry with different random number"); } } - GlobalV::ofs_running<<"Converge fermi energy = "<stofunc.mu<<" Ry in "<coef_real[p_che->norder-1] * spolyv[p_che->norder-1]; - MPI_Allreduce(MPI_IN_PLACE, &tmpre, 1, MPI_DOUBLE, MPI_SUM , MPI_COMM_WORLD); - GlobalV::ofs_running<<"Chebyshev Precision: "< GlobalV::SCF_THR * 1e2 ) - { - stringstream ss; - ss<>fractxt; - ss.clear(); - ss<>tartxt; - ss.clear(); - ss<>itertxt; - string warningtxt = "Iter "+itertxt+": (Chebyshev error = "+fractxt+" > threshold = "+tartxt+" ) Please add more expansion terms for Chebychev expansion."; - ModuleBase::WARNING("Stochastic_Chebychev", warningtxt); - } - - pes->ef = this->stofunc.mu = mu0 = mu3; + GlobalV::ofs_running<<"Converge fermi energy = "<check_precision(targetne,GlobalV::SCF_THR,"Ne"); //Set wf.wg if(GlobalV::NBANDS > 0) @@ -283,35 +310,46 @@ void Stochastic_Iter::calPn(const int& ik, Stochastic_WF& stowf) ModuleBase::timer::tick("Stochastic_Iter","calPn"); const int norder = p_che->norder; - if(ik==0) ModuleBase::GlobalFunc::ZEROS(spolyv, norder); + const int nchip_ik = nchip[ik]; + if(ik==0) + { + if(this->method == 1 || this->method == 2) + ModuleBase::GlobalFunc::ZEROS(spolyv, norder); + else + ModuleBase::GlobalFunc::ZEROS(spolyv, norder*norder); + } std::complex * pchi; if(GlobalV::NBANDS > 0) pchi = stowf.chiortho[ik].c; else pchi = stowf.chi0[ik].c; - if(this->method == 2) + if(this->method == 1) { - p_che->calpolyvec_complex(&stohchi, &Stochastic_hchi::hchi_reciprocal, pchi, this->chiallorder[ik].c, GlobalC::kv.ngk[ik], GlobalC::wf.npwx, nchip[ik]); - double* vec_all= (double *) this->chiallorder[ik].c; - double* vec= (double *) pchi; - char transa = 'T'; - double one = 1; - int inc = 1; - // double zero = 0; - int LDA = GlobalC::wf.npwx * nchip[ik] * 2; - int M = GlobalC::kv.ngk[ik] * nchip[ik] * 2; - int N = norder; - dgemv_(&transa, &M, &N, &one, vec_all, &LDA, vec, &inc, &one, spolyv, &inc); + p_che->tracepolyA(&stohchi, &Stochastic_hchi::hchi_norm, pchi, GlobalC::kv.ngk[ik], GlobalC::wf.npwx, nchip_ik); for(int i = 0 ; i < norder ; ++i) { - spolyv[i] *= GlobalC::kv.wk[ik]; - } + spolyv[i] += p_che->polytrace[i] * GlobalC::kv.wk[ik]; + } } else { - p_che->tracepolyA(&stohchi, &Stochastic_hchi::hchi_reciprocal, pchi, GlobalC::kv.ngk[ik], GlobalC::wf.npwx, nchip[ik]); - for(int i = 0 ; i < norder ; ++i) + p_che->calpolyvec_complex(&stohchi, &Stochastic_hchi::hchi_norm, pchi, this->chiallorder[ik].c, GlobalC::kv.ngk[ik], GlobalC::wf.npwx, nchip_ik); + double* vec_all= (double *) this->chiallorder[ik].c; + char trans = 'T'; + double one = 1; + int LDA = GlobalC::wf.npwx * nchip_ik * 2; + int M = GlobalC::wf.npwx * nchip_ik * 2; //Do not use kv.ngk[ik] + int N = norder; + double kweight = GlobalC::kv.wk[ik]; + if(this->method == 2) { - spolyv[i] += p_che->polytrace[i] * GlobalC::kv.wk[ik]; + int inc = 1; + double* vec= (double *) pchi; + dgemv_(&trans, &M, &N, &kweight, vec_all, &LDA, vec, &inc, &one, spolyv, &inc); + } + else if(this->method == 3) + { + char normal = 'N'; + dgemm_(&trans,&normal, &N,&N,&M,&kweight,vec_all,&LDA,vec_all,&LDA,&one,spolyv,&N); } } ModuleBase::timer::tick("Stochastic_Iter","calPn"); @@ -322,12 +360,21 @@ void Stochastic_Iter::calPn(const int& ik, Stochastic_WF& stowf) double Stochastic_Iter::calne(elecstate::ElecState* pes) { ModuleBase::timer::tick("Stochastic_Iter","calne"); - - p_che->calcoef_real(&stofunc,&Sto_Func::nfd); - const int norder = p_che->norder; double totne = 0; KS_ne = 0; - double sto_ne = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); + const int norder = p_che->norder; + double sto_ne; + if(this->method == 1 || this->method == 2) + { + //Note: spolyv contains kv.wk[ik] + p_che->calcoef_real(&stofunc,&Sto_Func::nfd); + sto_ne = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); + } + else + { + p_che->calcoef_real(&stofunc,&Sto_Func::nroot_fd); + sto_ne = vTMv(p_che->coef_real,spolyv,norder); + } if(GlobalV::NBANDS > 0) { for(int ikk = 0; ikk < GlobalC::kv.nks; ++ikk) @@ -363,7 +410,7 @@ void Stochastic_Iter::calHsqrtchi(Stochastic_WF& stowf) } } -void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pes) +void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pes,hamilt::Hamilt* pHamilt) { ModuleBase::TITLE("Stochastic_Iter","sum_stoband"); ModuleBase::timer::tick("Stochastic_Iter","sum_stoband"); @@ -372,8 +419,17 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe const int norder = p_che->norder; //---------------cal demet----------------------- - p_che->calcoef_real(&stofunc,&Sto_Func::nfdlnfd); - double stodemet = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); + double stodemet; + if(this->method == 1 || this->method == 2) + { + p_che->calcoef_real(&stofunc,&Sto_Func::nfdlnfd); + stodemet = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); + } + else + { + p_che->calcoef_real(&stofunc,&Sto_Func::n_root_fdlnfd); + stodemet = -vTMv(p_che->coef_real,spolyv,norder); + } if(GlobalV::NBANDS > 0) { @@ -390,11 +446,48 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe pes->demet /= GlobalV::NPROC_IN_POOL; #ifdef __MPI MPI_Allreduce(MPI_IN_PLACE, &pes->demet, 1, MPI_DOUBLE, MPI_SUM , STO_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &stodemet,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); #endif - //--------------------cal eband------------------------ - p_che->calcoef_real(&stofunc,&Sto_Func::nxfd); - double sto_eband = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); + pes->demet += stodemet; + this->check_precision(pes->demet, 1e-4, "TS"); + pes->demet *= Occupy::gaussian_parameter; + //--------------------cal eband------------------------ + double sto_eband = 0; + if(this->method == 1 || this->method == 2) + { + p_che->calcoef_real(&stofunc,&Sto_Func::nxfd); + sto_eband = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); + } + else if(this->method == 3) + { + for(int ik = 0; ik < GlobalC::kv.nks; ++ik) + { + const int nchip_ik = nchip[ik]; + if(GlobalC::kv.nks > 1) + { + pHamilt->updateHk(ik); + } + stohchi.current_ik = ik; + const int npw = GlobalC::kv.ngk[ik]; + const double kweight = GlobalC::kv.wk[ik]; + std::complex *hshchi = new std::complex [nchip_ik * npwx]; + std::complex* tmpin = stowf.shchi[ik].c; + std::complex *tmpout = hshchi; + stohchi.hchi(tmpin,tmpout,nchip_ik); + for(int ichi = 0; ichi < nchip_ik ; ++ichi) + { + sto_eband += kweight * ModuleBase::GlobalFunc::ddot_real(npw,tmpin,tmpout,false); + tmpin+=npwx; + tmpout+=npwx; + } + delete[] hshchi; + } + } +#ifdef __MPI + MPI_Allreduce(MPI_IN_PLACE, &sto_eband,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); +#endif + pes->eband += sto_eband; //---------------------cal rho------------------------- double *sto_rho = new double [nrxx]; //int npwall = npwx * nchip; @@ -418,8 +511,9 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe for(int ik = 0; ik < GlobalC::kv.nks; ++ik) { + const int nchip_ik = nchip[ik]; std::complex *tmpout = stowf.shchi[ik].c; - for(int ichi = 0; ichi < nchip[ik] ; ++ichi) + for(int ichi = 0; ichi < nchip_ik ; ++ichi) { GlobalC::wfcpw->recip2real(tmpout, porter, ik); for(int ir = 0 ; ir < nrxx ; ++ir) @@ -443,21 +537,17 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE,&stodemet,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); - MPI_Allreduce(MPI_IN_PLACE,&sto_eband,1,MPI_DOUBLE,MPI_SUM,MPI_COMM_WORLD); MPI_Allreduce(MPI_IN_PLACE,&sto_ne,1,MPI_DOUBLE,MPI_SUM,POOL_WORLD); MPI_Allreduce(MPI_IN_PLACE,&sto_ne,1,MPI_DOUBLE,MPI_SUM,PARAPW_WORLD); MPI_Allreduce(MPI_IN_PLACE,sto_rho,nrxx,MPI_DOUBLE,MPI_SUM,PARAPW_WORLD); #endif - pes->eband += sto_eband; - pes->demet += stodemet; - pes->demet *= Occupy::gaussian_parameter; - - GlobalV::ofs_running<<"Renormalize rho from ne = "<* p_che = nullptr; Stochastic_hchi stohchi; diff --git a/tests/integrate/185_PW_SDFT_10S_METHD2/INPUT b/tests/integrate/185_PW_SDFT_10S_METHD2/INPUT index 4640995a26..f69d26efe1 100644 --- a/tests/integrate/185_PW_SDFT_10S_METHD2/INPUT +++ b/tests/integrate/185_PW_SDFT_10S_METHD2/INPUT @@ -12,7 +12,7 @@ nbands_sto 10 nche_sto 120 seed_sto 20000 -kpar 1 +bndpar 2 cal_force 1 cal_stress 1 diff --git a/tests/integrate/185_PW_SDFT_10S_METHD2/KPT b/tests/integrate/185_PW_SDFT_10S_METHD2/KPT index c289c0158a..e769af7638 100644 --- a/tests/integrate/185_PW_SDFT_10S_METHD2/KPT +++ b/tests/integrate/185_PW_SDFT_10S_METHD2/KPT @@ -1,4 +1,4 @@ K_POINTS 0 Gamma -1 1 1 0 0 0 +2 1 1 0 0 0 diff --git a/tests/integrate/185_PW_SDFT_10S_METHD2/result.ref b/tests/integrate/185_PW_SDFT_10S_METHD2/result.ref index 5f5fffef09..dd4588b102 100644 --- a/tests/integrate/185_PW_SDFT_10S_METHD2/result.ref +++ b/tests/integrate/185_PW_SDFT_10S_METHD2/result.ref @@ -1,5 +1,5 @@ -etotref -325.9369010598460932 -etotperatomref -162.9684505299 -totalforceref 5.962426 -totalstressref 2116.954952 -totaltimeref +0.57312 +etotref -323.8395527709268436 +etotperatomref -161.9197763855 +totalforceref 8.695216 +totalstressref 2001.303703 +totaltimeref +0.78645 From 3aaf22e0834fff4d8f90ad4f7abc2cb6fdc71812 Mon Sep 17 00:00:00 2001 From: sunml99 Date: Thu, 18 Aug 2022 21:28:57 +0800 Subject: [PATCH 24/63] add force correction of implicit solvation model --- source/module_surchem/CMakeLists.txt | 1 + source/module_surchem/force.cpp | 176 ++++++++++++++++++++++ source/module_surchem/surchem.h | 4 +- source/src_lcao/FORCE_STRESS.cpp | 18 +++ source/src_pw/forces.cpp | 18 +++ tests/integrate/115_PW_sol_H2O/INPUT | 1 + tests/integrate/115_PW_sol_H2O/result.ref | 9 +- tests/integrate/215_NO_sol_H2O/INPUT | 1 + tests/integrate/215_NO_sol_H2O/result.ref | 9 +- 9 files changed, 228 insertions(+), 9 deletions(-) create mode 100644 source/module_surchem/force.cpp diff --git a/source/module_surchem/CMakeLists.txt b/source/module_surchem/CMakeLists.txt index 7fffa0fd44..84b420cde4 100644 --- a/source/module_surchem/CMakeLists.txt +++ b/source/module_surchem/CMakeLists.txt @@ -11,4 +11,5 @@ add_library( corrected_energy.cpp minimize_cg.cpp efield.cpp + force.cpp ) \ No newline at end of file diff --git a/source/module_surchem/force.cpp b/source/module_surchem/force.cpp new file mode 100644 index 0000000000..486d2df347 --- /dev/null +++ b/source/module_surchem/force.cpp @@ -0,0 +1,176 @@ +#include "surchem.h" +#include "../module_base/timer.h" + +void force_cor_one(const UnitCell &cell, ModulePW::PW_Basis* rho_basis , ModuleBase::matrix& forcesol) +{ + + + //delta phi multiply by the derivative of nuclear charge density with respect to the positions + std::complex *N = new std::complex[rho_basis->npw]; + std::complex *vloc_at = new std::complex[rho_basis->npw]; + std::complex *delta_phi_g = new complex[rho_basis->npw]; + //ModuleBase::GlobalFunc::ZEROS(delta_phi_g, rho_basis->npw); + + GlobalC::UFFT.ToReciSpace(GlobalC::solvent_model.delta_phi, delta_phi_g,rho_basis); + double Ael=0;double Ael1 = 0; + //ModuleBase::GlobalFunc::ZEROS(vg, ngmc); + int iat = 0; + + for (int it = 0;it < cell.ntype;it++) + { + for (int ia = 0;ia < cell.atoms[it].na ; ia++) + { + for (int ig = 0; ig < rho_basis->npw; ig++) + { + complex phase = exp( ModuleBase::NEG_IMAG_UNIT *ModuleBase::TWO_PI * ( rho_basis->gcar[ig] * cell.atoms[it].tau[ia])); + //vloc for each atom + vloc_at[ig] = GlobalC::ppcell.vloc(it, rho_basis->ig2igg[ig]) * phase; + if(rho_basis->ig_gge0 == ig) + { + N[ig] = GlobalC::ucell.atoms[it].zv / GlobalC::ucell.omega; + } + else + { + const double fac = ModuleBase::e2 * ModuleBase::FOUR_PI / + (cell.tpiba2 * rho_basis->gg[ig]); + + N[ig] = -vloc_at[ig] / fac; + } + + //force for each atom + forcesol(iat, 0) += rho_basis->gcar[ig][0] * imag(conj(delta_phi_g[ig]) * N[ig]); + forcesol(iat, 1) += rho_basis->gcar[ig][1] * imag(conj(delta_phi_g[ig]) * N[ig]); + forcesol(iat, 2) += rho_basis->gcar[ig][2] * imag(conj(delta_phi_g[ig]) * N[ig]); + } + + forcesol(iat, 0) *= (GlobalC::ucell.tpiba * GlobalC::ucell.omega); + forcesol(iat, 1) *= (GlobalC::ucell.tpiba * GlobalC::ucell.omega); + forcesol(iat, 2) *= (GlobalC::ucell.tpiba * GlobalC::ucell.omega); + //unit Ry/Bohr + forcesol(iat, 0) *= 2 ; + forcesol(iat, 1) *= 2 ; + forcesol(iat, 2) *= 2 ; + + cout<<"Force1"< *n_pseudo = new complex[rho_basis->npw]; + ModuleBase::GlobalFunc::ZEROS(n_pseudo,rho_basis->npw); + + //GlobalC::solvent_model.gauss_charge(cell, pwb, n_pseudo); + + double *Vcav_sum = new double[rho_basis->nrxx]; + ModuleBase::GlobalFunc::ZEROS(Vcav_sum, rho_basis->nrxx); + std::complex *Vcav_g = new complex[rho_basis->npw]; + std::complex *Vel_g = new complex[rho_basis->npw]; + ModuleBase::GlobalFunc::ZEROS(Vcav_g, rho_basis->npw); + ModuleBase::GlobalFunc::ZEROS(Vel_g, rho_basis->npw); + for(int is=0; isnrxx; ir++) + { + Vcav_sum[ir] += GlobalC::solvent_model.Vcav(is, ir); + } + } + + GlobalC::UFFT.ToReciSpace(Vcav_sum, Vcav_g, rho_basis); + GlobalC::UFFT.ToReciSpace(GlobalC::solvent_model.epspot, Vel_g, rho_basis); + + int iat = 0; + double Ael1 = 0; + for (int it = 0;it < cell.ntype;it++) + { + double RCS = GlobalC::solvent_model.GetAtom.atom_RCS[cell.atoms[it].psd]; + double sigma_rc_k = RCS / 2.5; + for (int ia = 0;ia < cell.atoms[it].na;ia++) + { + //cell.atoms[0].tau[0].z = 3.302; + //cout<npw); + for (int ig = 0; ig < rho_basis->npw; ig++) + { + // G^2 + double gg = rho_basis->gg[ig]; + gg = gg * cell.tpiba2; + complex phase = exp( ModuleBase::NEG_IMAG_UNIT *ModuleBase::TWO_PI * ( rho_basis->gcar[ig] * cell.atoms[it].tau[ia])); + + n_pseudo[ig].real((GlobalC::solvent_model.GetAtom.atom_Z[cell.atoms[it].psd] - cell.atoms[it].zv) * phase.real() + * exp(-0.5 * gg * (sigma_rc_k * sigma_rc_k))); + n_pseudo[ig].imag((GlobalC::solvent_model.GetAtom.atom_Z[cell.atoms[it].psd] - cell.atoms[it].zv) * phase.imag() + * exp(-0.5 * gg * (sigma_rc_k * sigma_rc_k))); + } + + for (int ig = 0; ig < rho_basis->npw; ig++) + { + n_pseudo[ig] /= cell.omega; + } + for (int ig = 0; ig < rho_basis->npw; ig++) + { + forcesol(iat, 0) -= rho_basis->gcar[ig][0] * imag(conj(Vcav_g[ig]+Vel_g[ig]) * n_pseudo[ig]); + forcesol(iat, 1) -= rho_basis->gcar[ig][1] * imag(conj(Vcav_g[ig]+Vel_g[ig]) * n_pseudo[ig]); + forcesol(iat, 2) -= rho_basis->gcar[ig][2] * imag(conj(Vcav_g[ig]+Vel_g[ig]) * n_pseudo[ig]); + } + + forcesol(iat, 0) *= (GlobalC::ucell.tpiba * GlobalC::ucell.omega); + forcesol(iat, 1) *= (GlobalC::ucell.tpiba * GlobalC::ucell.omega); + forcesol(iat, 2) *= (GlobalC::ucell.tpiba * GlobalC::ucell.omega); + //eV/Ang + forcesol(iat, 0) *= 2 ; + forcesol(iat, 1) *= 2 ; + forcesol(iat, 2) *= 2 ; + + cout<<"Force2"<print_force("EFIELD FORCE",fefield,1,ry); } + if(GlobalV::imp_sol) + { + f_pw.print("IMP_SOL FORCE", fsol,0); + //this->print_force("IMP_SOL FORCE",fsol,1,ry); + } if(GlobalC::vdwd2_para.flag_vdwd2||GlobalC::vdwd3_para.flag_vdwd3) { f_pw.print("VDW FORCE", force_vdw,0); diff --git a/source/src_pw/forces.cpp b/source/src_pw/forces.cpp index 65192897bb..3a38806b18 100644 --- a/source/src_pw/forces.cpp +++ b/source/src_pw/forces.cpp @@ -9,6 +9,7 @@ #include "../src_parallel/parallel_reduce.h" #include "../module_base/timer.h" #include "../module_surchem/efield.h" +#include "../module_surchem/surchem.h" double Forces::output_acc = 1.0e-8; // (Ryd/angstrom). @@ -81,6 +82,17 @@ void Forces::init(ModuleBase::matrix& force, const psi::Psi } } + ModuleBase::matrix forcesol; + if (GlobalV::imp_sol) + { + forcesol.create(GlobalC::ucell.nat, 3); + GlobalC::solvent_model.cal_force_sol(GlobalC::ucell, GlobalC::rhopw, forcesol); + if(GlobalV::TEST_FORCE) + { + Forces::print("IMP_SOL FORCE (Ry/Bohr)", forcesol); + } + } + //impose total force = 0 int iat = 0; for (int ipol = 0; ipol < 3; ipol++) @@ -109,6 +121,11 @@ void Forces::init(ModuleBase::matrix& force, const psi::Psi force(iat,ipol) = force(iat, ipol) + force_e(iat, ipol); } + if(GlobalV::imp_sol) + { + force(iat,ipol) = force(iat, ipol) + forcesol(iat, ipol); + } + sum += force(iat, ipol); iat++; @@ -213,6 +230,7 @@ void Forces::init(ModuleBase::matrix& force, const psi::Psi Forces::print("ION FORCE (eV/Angstrom)", forceion,0); Forces::print("SCC FORCE (eV/Angstrom)", forcescc,0); if(GlobalV::EFIELD_FLAG) Forces::print("EFIELD FORCE (eV/Angstrom)", force_e,0); + if(GlobalV::imp_sol) Forces::print("IMP_SOL FORCE (eV/Angstrom)", forcesol,0); } Forces::print(" TOTAL-FORCE (eV/Angstrom)", force,0); diff --git a/tests/integrate/115_PW_sol_H2O/INPUT b/tests/integrate/115_PW_sol_H2O/INPUT index 27965a4fc9..bfde82119a 100644 --- a/tests/integrate/115_PW_sol_H2O/INPUT +++ b/tests/integrate/115_PW_sol_H2O/INPUT @@ -6,6 +6,7 @@ ntype 2 nbands 20 calculation scf basis_type pw +cal_force 1 #Parameters (Accuracy) ecutwfc 20 diff --git a/tests/integrate/115_PW_sol_H2O/result.ref b/tests/integrate/115_PW_sol_H2O/result.ref index bfb309dd09..ee7466b218 100644 --- a/tests/integrate/115_PW_sol_H2O/result.ref +++ b/tests/integrate/115_PW_sol_H2O/result.ref @@ -1,5 +1,6 @@ -etotref -443.1237068197200 +etotref -443.1237068197164604 etotperatomref -147.7079022732 -esolelref -1.02249508527 -esolcavref +0.0325034001929 -totaltimeref 10.112 +totalforceref 16.865518 +esolelref -1.02249508526 +esolcavref +0.0325034001928 +totaltimeref 44.58741 diff --git a/tests/integrate/215_NO_sol_H2O/INPUT b/tests/integrate/215_NO_sol_H2O/INPUT index 04e6d72a2d..69f3abb73d 100644 --- a/tests/integrate/215_NO_sol_H2O/INPUT +++ b/tests/integrate/215_NO_sol_H2O/INPUT @@ -7,6 +7,7 @@ ntype 2 nbands 20 calculation scf basis_type pw +cal_force 1 #Parameters (Accuracy) ecutwfc 20 diff --git a/tests/integrate/215_NO_sol_H2O/result.ref b/tests/integrate/215_NO_sol_H2O/result.ref index f0485e42a3..bf90f1d7fb 100644 --- a/tests/integrate/215_NO_sol_H2O/result.ref +++ b/tests/integrate/215_NO_sol_H2O/result.ref @@ -1,5 +1,6 @@ -etotref -443.1237068197200 +etotref -443.1237068197164604 etotperatomref -147.7079022732 -esolelref -1.02249508527 -esolcavref +0.0325034001929 -totaltimeref 10.042 +totalforceref 16.865518 +esolelref -1.02249508526 +esolcavref +0.0325034001928 +totaltimeref 43.79188 From 96435949bf09ee0fcc0aeaaf34be1a5122bafcd2 Mon Sep 17 00:00:00 2001 From: sunml99 Date: Thu, 18 Aug 2022 21:42:10 +0800 Subject: [PATCH 25/63] add some comments --- source/module_surchem/force.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/module_surchem/force.cpp b/source/module_surchem/force.cpp index 486d2df347..d3b97cea41 100644 --- a/source/module_surchem/force.cpp +++ b/source/module_surchem/force.cpp @@ -51,7 +51,7 @@ void force_cor_one(const UnitCell &cell, ModulePW::PW_Basis* rho_basis , ModuleB forcesol(iat, 1) *= 2 ; forcesol(iat, 2) *= 2 ; - cout<<"Force1"< Date: Thu, 18 Aug 2022 23:23:18 +0800 Subject: [PATCH 26/63] change default method_sto; replace 2 with 3 --- docs/input-main.md | 4 +-- source/input.cpp | 6 +++- source/src_pw/sto_iter.cpp | 35 +++++++------------ .../integrate/185_PW_SDFT_5D10S_METHD2/INPUT | 3 +- tests/integrate/185_PW_SDFT_5D10S_METHD2/KPT | 2 +- .../185_PW_SDFT_5D10S_METHD2/result.ref | 10 +++--- tests/integrate/186_PW_SDOS_10D10S/INPUT | 1 + tests/integrate/186_PW_SDOS_MALL/INPUT | 1 + tests/integrate/186_PW_SKG_10D10S/INPUT | 1 + tests/integrate/186_PW_SKG_ALL/INPUT | 1 + 10 files changed, 32 insertions(+), 32 deletions(-) diff --git a/docs/input-main.md b/docs/input-main.md index ef7e1c9149..87143b025f 100644 --- a/docs/input-main.md +++ b/docs/input-main.md @@ -598,8 +598,8 @@ This part of variables are used to control the parameters of stochastic DFT (SDF - Different method to do SDFT. - 1: SDFT calculates $T_n(\hat{h})\ket{\chi}$ twice, where $T_n(x)$ is the n-th order Chebyshev polynomial and $\hat{h}=\frac{\hat{H}-\bar{E}}{\Delta E}$ owning eigen-value $\in(-1,1)$. This method cost less memory but slow. - 2: SDFT calculates $T_n(\hat{h})\ket{\chi}$ once but need much more memory. This method is much faster. Besides, it calculate $N_e$ with $\bra{\chi}\sqrt{\hat f}\sqrt{\hat f}\ket{\chi}$, which needs smaller [nche_sto](#nche_sto). However, when memory is not enough, only method 1 can be used. - - other: use 1 -- **Default**: 1 + - other: use 2 +- **Default**: 2 #### nbands_sto diff --git a/source/input.cpp b/source/input.cpp index 6661d6e14d..659a657c82 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -144,7 +144,7 @@ void Input::Default(void) bndpar = 1; kpar = 1; initsto_freq = 1000; - method_sto = 1; + method_sto = 2; cal_cond = false; dos_nche = 100; cond_nche = 20; @@ -1940,6 +1940,10 @@ void Input::Default_2(void) // jiyy add 2019-08-04 } if(calculation.substr(0,3) != "sto") bndpar = 1; if(bndpar > GlobalV::NPROC) bndpar = GlobalV::NPROC; + if(method_sto != 1 || method_sto != 2) + { + method_sto = 2; + } } #ifdef __MPI void Input::Bcast() diff --git a/source/src_pw/sto_iter.cpp b/source/src_pw/sto_iter.cpp index b70650604c..2aa3e83a62 100644 --- a/source/src_pw/sto_iter.cpp +++ b/source/src_pw/sto_iter.cpp @@ -27,7 +27,7 @@ Stochastic_Iter::Stochastic_Iter() { change = false; mu0 = 0; - method = 1; + method = 2; } Stochastic_Iter::~Stochastic_Iter() @@ -46,12 +46,12 @@ void Stochastic_Iter::init(const int dim, int* nchip_in, const int method_in, St delete[] spolyv; const int norder = p_che->norder; this->method = method_in; - if(method == 1 || method ==2) spolyv = new double [norder]; + if(method == 1) spolyv = new double [norder]; else spolyv = new double [norder*norder]; stofunc.Emin = INPUT.emin_sto; stofunc.Emax = INPUT.emax_sto; - if(this->method == 2 || this->method == 3) + if(this->method == 2) { double tot = 0; for (int ik = 0; ik < GlobalC::kv.nks; ++ik) @@ -184,7 +184,7 @@ void Stochastic_Iter::check_precision(const double ref, const double thr, const //precision check //============================== double error = 0; - if(this->method == 1 || this->method == 2) + if(this->method == 1) { error = p_che->coef_real[p_che->norder-1] * spolyv[p_che->norder-1]; } @@ -316,7 +316,7 @@ void Stochastic_Iter::calPn(const int& ik, Stochastic_WF& stowf) const int nchip_ik = nchip[ik]; if(ik==0) { - if(this->method == 1 || this->method == 2) + if(this->method == 1) ModuleBase::GlobalFunc::ZEROS(spolyv, norder); else ModuleBase::GlobalFunc::ZEROS(spolyv, norder*norder); @@ -338,22 +338,13 @@ void Stochastic_Iter::calPn(const int& ik, Stochastic_WF& stowf) p_che->calpolyvec_complex(&stohchi, &Stochastic_hchi::hchi_norm, pchi, this->chiallorder[ik].c, GlobalC::kv.ngk[ik], GlobalC::wf.npwx, nchip_ik); double* vec_all= (double *) this->chiallorder[ik].c; char trans = 'T'; + char normal = 'N'; double one = 1; int LDA = GlobalC::wf.npwx * nchip_ik * 2; int M = GlobalC::wf.npwx * nchip_ik * 2; //Do not use kv.ngk[ik] int N = norder; double kweight = GlobalC::kv.wk[ik]; - if(this->method == 2) - { - int inc = 1; - double* vec= (double *) pchi; - dgemv_(&trans, &M, &N, &kweight, vec_all, &LDA, vec, &inc, &one, spolyv, &inc); - } - else if(this->method == 3) - { - char normal = 'N'; - dgemm_(&trans,&normal, &N,&N,&M,&kweight,vec_all,&LDA,vec_all,&LDA,&one,spolyv,&N); - } + dgemm_(&trans,&normal, &N,&N,&M,&kweight,vec_all,&LDA,vec_all,&LDA,&one,spolyv,&N); } ModuleBase::timer::tick("Stochastic_Iter", "calPn"); return; @@ -366,7 +357,7 @@ double Stochastic_Iter::calne(elecstate::ElecState* pes) KS_ne = 0; const int norder = p_che->norder; double sto_ne; - if(this->method == 1 || this->method == 2) + if(this->method == 1) { //Note: spolyv contains kv.wk[ik] p_che->calcoef_real(&stofunc,&Sto_Func::nfd); @@ -422,7 +413,7 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe //---------------cal demet----------------------- double stodemet; - if(this->method == 1 || this->method == 2) + if(this->method == 1) { p_che->calcoef_real(&stofunc,&Sto_Func::nfdlnfd); stodemet = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); @@ -456,12 +447,12 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe //--------------------cal eband------------------------ double sto_eband = 0; - if(this->method == 1 || this->method == 2) + if(this->method == 1) { p_che->calcoef_real(&stofunc,&Sto_Func::nxfd); sto_eband = BlasConnector::dot(norder,p_che->coef_real,1,spolyv,1); } - else if(this->method == 3) + else { for(int ik = 0; ik < GlobalC::kv.nks; ++ik) { @@ -584,7 +575,7 @@ void Stochastic_Iter::calTnchi_ik(const int& ik, Stochastic_WF& stowf) pchi = stowf.chiortho[ik].c; else pchi = stowf.chi0[ik].c; - if(this->method==2 || this->method == 3) + if(this->method==2) { char transa = 'N'; std::complex one = 1; @@ -609,7 +600,7 @@ void Stochastic_Iter::calTnchi_ik(const int& ik, Stochastic_WF& stowf) void Stochastic_Iter::cleanchiallorder() { - if(this->method == 2 || this->method == 3) + if(this->method == 2) { delete[] chiallorder; chiallorder = nullptr; diff --git a/tests/integrate/185_PW_SDFT_5D10S_METHD2/INPUT b/tests/integrate/185_PW_SDFT_5D10S_METHD2/INPUT index 74f9228260..796643114f 100644 --- a/tests/integrate/185_PW_SDFT_5D10S_METHD2/INPUT +++ b/tests/integrate/185_PW_SDFT_5D10S_METHD2/INPUT @@ -12,7 +12,8 @@ nbands_sto 10 nche_sto 120 seed_sto 20000 -kpar 1 +kpar 2 +bndpar 2 cal_force 1 cal_stress 1 diff --git a/tests/integrate/185_PW_SDFT_5D10S_METHD2/KPT b/tests/integrate/185_PW_SDFT_5D10S_METHD2/KPT index c289c0158a..4fd38968a0 100644 --- a/tests/integrate/185_PW_SDFT_5D10S_METHD2/KPT +++ b/tests/integrate/185_PW_SDFT_5D10S_METHD2/KPT @@ -1,4 +1,4 @@ K_POINTS 0 Gamma -1 1 1 0 0 0 +2 2 1 0 0 0 diff --git a/tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref b/tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref index dad57f1876..ceaf6acada 100644 --- a/tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref +++ b/tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref @@ -1,5 +1,5 @@ -etotref -321.3205422051494793 -etotperatomref -160.6602711026 -totalforceref 4.120026 -totalstressref 2048.414311 -totaltimeref +0.33989 +etotref -324.2147557509094895 +etotperatomref -162.1073778755 +totalforceref 4.067434 +totalstressref 1839.372263 +totaltimeref +2.42942 diff --git a/tests/integrate/186_PW_SDOS_10D10S/INPUT b/tests/integrate/186_PW_SDOS_10D10S/INPUT index 097b60d214..6f4707b826 100644 --- a/tests/integrate/186_PW_SDOS_10D10S/INPUT +++ b/tests/integrate/186_PW_SDOS_10D10S/INPUT @@ -2,6 +2,7 @@ INPUT_PARAMETERS #Parameters (1.General) suffix autotest calculation sto-scf +method_sto 2 ntype 1 nbands 10 nbands_sto 10 diff --git a/tests/integrate/186_PW_SDOS_MALL/INPUT b/tests/integrate/186_PW_SDOS_MALL/INPUT index 73aedfef25..e4164233e2 100644 --- a/tests/integrate/186_PW_SDOS_MALL/INPUT +++ b/tests/integrate/186_PW_SDOS_MALL/INPUT @@ -2,6 +2,7 @@ INPUT_PARAMETERS #Parameters (1.General) suffix autotest calculation sto-scf +method_sto 1 ntype 1 nbands 10 nbands_sto 0 diff --git a/tests/integrate/186_PW_SKG_10D10S/INPUT b/tests/integrate/186_PW_SKG_10D10S/INPUT index 287cc88a14..8bfc714e17 100644 --- a/tests/integrate/186_PW_SKG_10D10S/INPUT +++ b/tests/integrate/186_PW_SKG_10D10S/INPUT @@ -2,6 +2,7 @@ INPUT_PARAMETERS #Parameters (1.General) suffix autotest calculation sto-scf +method_sto 2 ntype 1 nbands 10 nbands_sto 10 diff --git a/tests/integrate/186_PW_SKG_ALL/INPUT b/tests/integrate/186_PW_SKG_ALL/INPUT index 923dce8f59..4ce0c7ddb2 100644 --- a/tests/integrate/186_PW_SKG_ALL/INPUT +++ b/tests/integrate/186_PW_SKG_ALL/INPUT @@ -2,6 +2,7 @@ INPUT_PARAMETERS #Parameters (1.General) suffix autotest calculation sto-scf +method_sto 1 ntype 1 nbands 0 nbands_sto 0 From cecbcdd5a42a9e44c892d66eb5ed41b37695e78d Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Thu, 18 Aug 2022 23:36:00 +0800 Subject: [PATCH 27/63] fix wrong default for method_sto --- source/input.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/input.cpp b/source/input.cpp index 659a657c82..28a332027d 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -1940,7 +1940,7 @@ void Input::Default_2(void) // jiyy add 2019-08-04 } if(calculation.substr(0,3) != "sto") bndpar = 1; if(bndpar > GlobalV::NPROC) bndpar = GlobalV::NPROC; - if(method_sto != 1 || method_sto != 2) + if(method_sto != 1 && method_sto != 2) { method_sto = 2; } From 88f51bb1f9e9c75453fde1e72116dff1d04e0ffd Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 18 Aug 2022 23:40:02 +0800 Subject: [PATCH 28/63] refactor : prepare to move charge extrapolation into esolver --- source/module_cell/atom_spec.h | 3 ++- source/module_cell/unitcell.h | 9 ++++++++- source/src_ions/ions.cpp | 9 +++++++-- source/src_pw/charge_extra.cpp | 18 ++++++++++++++++-- source/src_pw/charge_extra.h | 2 +- 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/source/module_cell/atom_spec.h b/source/module_cell/atom_spec.h index 2406f3aac9..402d7fa4b3 100644 --- a/source/module_cell/atom_spec.h +++ b/source/module_cell/atom_spec.h @@ -34,14 +34,15 @@ class Atom: public Atom_pseudo ModuleBase::Vector3 *tau_original;// Cartesian coordinates of each atom in this type, but without periodic adjustment. ModuleBase::Vector3 *taud;// Direct coordinates of each atom in this type. ModuleBase::Vector3 *vel;// velocities of each atom in this type. + ModuleBase::Vector3 *force; // force acting on each atom in this type. double* mag; double* angle1;//spin angle, added by zhengdy-soc double* angle2; ModuleBase::Vector3 *m_loc_; - void print_Atom(std::ofstream &ofs); + void update_force(ModuleBase::matrix &fcs); #ifdef __MPI void bcast_atom(void); void bcast_atom2(void); diff --git a/source/module_cell/unitcell.h b/source/module_cell/unitcell.h index e8ffc535c8..63ab3de228 100644 --- a/source/module_cell/unitcell.h +++ b/source/module_cell/unitcell.h @@ -74,6 +74,12 @@ class UnitCell ModuleBase::Matrix3 GGT0; ModuleBase::Matrix3 invGGT0; + //I'm doing a bad thing here! Will change later + bool ionic_position_updated = false; //whether the ionic position has been updated + +private: + ModuleBase::Matrix3 stress; //calculate stress on the cell + public: UnitCell(); ~UnitCell(); @@ -93,7 +99,8 @@ class UnitCell void save_cartesian_position_original(ModuleBase::Vector3* pos)const; bool judge_big_cell(void)const; - + void update_stress(ModuleBase::matrix &scs); //updates stress + void update_force(ModuleBase::matrix &fcs); //updates force in Atom double *atom_mass; std::string *atom_label; diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 9017956c90..3cee8a1de8 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -100,6 +100,10 @@ void Ions::opt_ions(ModuleESolver::ESolver *p_esolver) bool Ions::after_scf(ModuleESolver::ESolver *p_esolver, const int &istep, int &force_step, int &stress_step) { ModuleBase::TITLE("Ions","after_scf"); + + // should not do it this way, will change later + GlobalC::ucell.ionic_position_updated = false; + //calculate and gather all parts of total ionic forces ModuleBase::matrix force; if(GlobalV::CAL_FORCE) @@ -127,6 +131,7 @@ bool Ions::after_scf(ModuleESolver::ESolver *p_esolver, const int &istep, int &f if(!converged) { this->reset_after_relax(istep); + GlobalC::ucell.ionic_position_updated = true; return converged; } else if(GlobalV::CALCULATION!="cell-relax") @@ -191,8 +196,6 @@ bool Ions::if_do_cellrelax() bool Ions::do_relax(const int& istep, int& jstep, const ModuleBase::matrix& ionic_force, const double& total_energy) { ModuleBase::TITLE("Ions","do_relax"); - CE.update_istep(jstep); - CE.update_all_pos(GlobalC::ucell); IMM.cal_movement(istep, jstep, ionic_force, total_energy); ++jstep; return IMM.get_converged(); @@ -211,6 +214,8 @@ void Ions::reset_after_relax(const int& istep) GlobalV::ofs_running << " Setup the extrapolated charge." << std::endl; // charge extrapolation if istep>0. + CE.update_istep(istep); + CE.update_all_pos(GlobalC::ucell); CE.extrapolate_charge(); CE.save_pos_next(GlobalC::ucell); diff --git a/source/src_pw/charge_extra.cpp b/source/src_pw/charge_extra.cpp index b75121a6ce..d9618bdce9 100644 --- a/source/src_pw/charge_extra.cpp +++ b/source/src_pw/charge_extra.cpp @@ -497,7 +497,16 @@ void Charge_Extra::save_pos_next(const UnitCell_pseudo& ucell) void Charge_Extra::update_istep(const int &step) { - this->istep = step; + //This is because md and relaxation are not unified yet + //will update later + if(GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax") + { + this->istep++; + } + else + { + this->istep = step; + } return; } @@ -507,7 +516,12 @@ void Charge_Extra::update_all_pos(const UnitCell_pseudo& ucell) { this->pos_old2[i] = this->pos_old1[i]; this->pos_old1[i] = this->pos_now[i]; + if(GlobalV::CALCULATION=="relax"||GlobalV::CALCULATION=="cell-relax") + { + this->pos_now[i] = this->pos_next[i]; + } } - ucell.save_cartesian_position_original(this->pos_now); + if(GlobalV::CALCULATION=="md"||GlobalV::CALCULATION=="sto-md") + ucell.save_cartesian_position_original(this->pos_now); return; } diff --git a/source/src_pw/charge_extra.h b/source/src_pw/charge_extra.h index 83c7e19808..2284096a69 100644 --- a/source/src_pw/charge_extra.h +++ b/source/src_pw/charge_extra.h @@ -22,7 +22,7 @@ class Charge_Extra void update_all_pos(const UnitCell_pseudo& ucell); private: - int istep; + int istep = 0; int natom; int pot_order; int rho_extr; From c8c33f1497cdbab113d767d69dc79e2193f3ce45 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Fri, 19 Aug 2022 00:30:34 +0800 Subject: [PATCH 29/63] refactor : add some comment --- source/src_lcao/FORCE_k.cpp | 8 ++------ source/src_lcao/LCAO_gen_fixedH.cpp | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/source/src_lcao/FORCE_k.cpp b/source/src_lcao/FORCE_k.cpp index 28bb75c98b..3f13dc4192 100644 --- a/source/src_lcao/FORCE_k.cpp +++ b/source/src_lcao/FORCE_k.cpp @@ -820,8 +820,8 @@ void Force_LCAO_k::cal_fvnl_dbeta_k_new(double** dm2d, ModuleBase::timer::tick("Force_LCAO_k", "cal_fvnl_dbeta_k_new"); const Parallel_Orbitals* pv = this->ParaV; - // Step 1 : generate - // type of atom; distance; atomic basis; projectors + // Data structure for storing , for a detailed description + // check out the same data structure in build_Nonlocal_mu_new std::vector>>>> nlm_tot; nlm_tot.resize(GlobalC::ucell.nat); @@ -871,10 +871,6 @@ void Force_LCAO_k::cal_fvnl_dbeta_k_new(double** dm2d, continue; const int iw1_0 = iw1 / GlobalV::NPOL; std::vector> nlm; - // 2D, but first dimension is only 1 here - // for force, the right hand side is the gradient - // and the first dimension is then 3 - // inner loop : all projectors (L0,M0) GlobalC::UOT.snap_psibeta_half(GlobalC::ORB, GlobalC::ucell.infoNL, nlm, diff --git a/source/src_lcao/LCAO_gen_fixedH.cpp b/source/src_lcao/LCAO_gen_fixedH.cpp index 021a4ea6be..eb0522a0b1 100644 --- a/source/src_lcao/LCAO_gen_fixedH.cpp +++ b/source/src_lcao/LCAO_gen_fixedH.cpp @@ -463,7 +463,16 @@ void LCAO_gen_fixedH::build_Nonlocal_mu_new(double* NLloc, const bool &calc_deri //Step 1 : generate - //type of atom; distance; atomic basis; projectors + + //This is the data structure for storing + //It is a 4 layer data structure + //The outmost layer is std::vector with size being number of atoms in unit cell + //The second layer is a map, the key being a combination of 4 number (iat, dRx, dRy, dRz) + //which identifies a unique adjacent atom of the first atom + //The third layer is an unordered map, with key being the index of atomic basis |psi> + //The inner layer is a vector, each element representing a projector |beta> + //It then either stores the number (nlm_tot) + //or a vector of 4, storing additionally (nlm_tot1) x_i=x,y,z std::vector>>> nlm_tot; std::vector>>>> nlm_tot1; @@ -530,9 +539,9 @@ void LCAO_gen_fixedH::build_Nonlocal_mu_new(double* NLloc, const bool &calc_deri if(iw1_local < 0 && iw2_local < 0)continue; const int iw1_0 = iw1/GlobalV::NPOL; std::vector> nlm; - //2D, but first dimension is only 1 here - //for force, the right hand side is the gradient - //and the first dimension is then 3 + //nlm is a vector of vectors, but size of outer vector is only 1 here + //If we are calculating force, we need also to store the gradient + //and size of outer vector is then 4 //inner loop : all projectors (L0,M0) GlobalC::UOT.snap_psibeta_half( GlobalC::ORB, From 673d00860a5664fe0abf3b43035b47b19894d1c7 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Fri, 19 Aug 2022 11:31:07 +0800 Subject: [PATCH 30/63] fix memory leak --- source/module_cell/atom_spec.cpp | 1 + source/module_cell/read_atoms.cpp | 1 + source/module_esolver/esolver_sdft_pw.cpp | 2 +- source/src_pw/sto_iter.cpp | 15 ++++++++------- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/source/module_cell/atom_spec.cpp b/source/module_cell/atom_spec.cpp index c542dbf86f..2349dc9ea7 100644 --- a/source/module_cell/atom_spec.cpp +++ b/source/module_cell/atom_spec.cpp @@ -142,6 +142,7 @@ void Atom::bcast_atom(void) { assert(na!=0); delete[] tau; + delete[] tau_original; delete[] taud; delete[] vel; delete[] mag; diff --git a/source/module_cell/read_atoms.cpp b/source/module_cell/read_atoms.cpp index 51db012807..a21140f18a 100644 --- a/source/module_cell/read_atoms.cpp +++ b/source/module_cell/read_atoms.cpp @@ -567,6 +567,7 @@ bool UnitCell_pseudo::read_atom_positions(std::ifstream &ifpos, std::ofstream &o if (na > 0) { delete[] atoms[it].tau; + delete[] atoms[it].tau_original; delete[] atoms[it].taud; delete[] atoms[it].vel; delete[] atoms[it].mbl; diff --git a/source/module_esolver/esolver_sdft_pw.cpp b/source/module_esolver/esolver_sdft_pw.cpp index 00f442ce88..747f2bd6fb 100644 --- a/source/module_esolver/esolver_sdft_pw.cpp +++ b/source/module_esolver/esolver_sdft_pw.cpp @@ -144,7 +144,6 @@ void ESolver_SDFT_PW::postprocess() { GlobalC::en.print_occ(); - ((hsolver::HSolverPW_SDFT*)phsol)->stoiter.cleanchiallorder();//release lots of memories if(this->maxniter == 0) { int iter = 1; @@ -153,6 +152,7 @@ void ESolver_SDFT_PW::postprocess() hsolver::DiagoIterAssist::PW_DIAG_THR = std::max(std::min(1e-5, 0.1 * GlobalV::SCF_THR / std::max(1.0, GlobalC::CHR.nelec)),1e-12); hsolver::DiagoIterAssist::need_subspace = false; this->phsol->solve(this->phami, this->psi[0], this->pelec,this->stowf,istep, iter, GlobalV::KS_SOLVER, true); + ((hsolver::HSolverPW_SDFT*)phsol)->stoiter.cleanchiallorder();//release lots of memories } int nche_test = 0; if(INPUT.cal_cond) nche_test = std::max(nche_test, INPUT.cond_nche); diff --git a/source/src_pw/sto_iter.cpp b/source/src_pw/sto_iter.cpp index 2aa3e83a62..8a5ab054d1 100644 --- a/source/src_pw/sto_iter.cpp +++ b/source/src_pw/sto_iter.cpp @@ -11,10 +11,10 @@ double vTMv(const double *v, const double * M, const int n) { - char normal = 'N'; - double one = 1; - int inc = 1; - double zero = 0; + const char normal = 'N'; + const double one = 1; + const int inc = 1; + const double zero = 0; double *y = new double [n]; dgemv_(&normal,&n,&n,&one,M,&n,v,&inc,&zero,y,&inc); double result = BlasConnector::dot(n,y,1,v,1); @@ -200,11 +200,12 @@ void Stochastic_Iter::check_precision(const double ref, const double thr, const #ifdef __MPI MPI_Allreduce(MPI_IN_PLACE, &error, 1, MPI_DOUBLE, MPI_SUM , MPI_COMM_WORLD); #endif - GlobalV::ofs_running< thr) + double relative_error = abs(error/ref); + GlobalV::ofs_running< thr) { stringstream ss; - ss<>fractxt; ss.clear(); From a7ea946727fc1b1392c9a4e5fa92e9006df4a7c9 Mon Sep 17 00:00:00 2001 From: caic99 Date: Thu, 18 Aug 2022 15:59:28 +0800 Subject: [PATCH 31/63] feature: build libxc in the absence of local install --- CMakeLists.txt | 16 ++++++++++++---- docs/install.md | 4 ++-- source/module_deepks/test/CMakeLists.txt | 2 +- source/module_xc/CMakeLists.txt | 12 ++++-------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index de85d43a7f..7cae58f23a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -217,7 +217,7 @@ if(ENABLE_DEEPKS) HINTS ${libnpy_INCLUDE_DIR} ) if(NOT libnpy_SOURCE_DIR) - include(FetchContent) + include(FetchContent) FetchContent_Declare( libnpy GIT_REPOSITORY https://github.com/llohse/libnpy.git @@ -237,14 +237,22 @@ if(DEFINED Libxc_DIR) set(ENABLE_LIBXC ON) endif() if(ENABLE_LIBXC) - find_package(Libxc) + find_package(Libxc HINTS ${Libxc_DIR}/share/cmake/Libxc) if(${Libxc_FOUND}) message("Using Libxc.") add_compile_definitions(USE_LIBXC) target_link_libraries(${ABACUS_BIN_NAME} Libxc::xc) include_directories(${Libxc_INCLUDE_DIRS}) else() - message(WARNING "Will not use Libxc.") + include(FetchContent) + FetchContent_Declare( + Libxc + GIT_REPOSITORY https://gitlab.com/libxc/libxc.git + GIT_TAG "5.2.3" + GIT_SHALLOW TRUE + GIT_PROGRESS TRUE + ) + FetchContent_MakeAvailable(Libxc) endif() endif() @@ -319,7 +327,7 @@ target_link_libraries(${ABACUS_BIN_NAME} pw ri driver - xc + xc_ hsolver elecstate hamilt diff --git a/docs/install.md b/docs/install.md index 1123f6e150..229ca2f1f4 100644 --- a/docs/install.md +++ b/docs/install.md @@ -95,13 +95,13 @@ cmake -B build -DFFTW3_ROOT=/opt/fftw3 If environment variable `MKLROOT` exists, `cmake` will take MKL as a preference, i.e. not using `LAPACK` and `ScaLAPACK`. To disable MKL, unset environment variable `MKLROOT`, or pass `-DMKLROOT=OFF` to `cmake`. -You can also choose to build with which components. +You can also choose to build with which components, e.g.: ```bash cmake -B build -DUSE_LIBXC=1 -DUSE_CUDA=1 ``` -If Libxc is not installed in standard path (i.e. installed with a custom prefix path), you may add the installation prefix of `FindLibxc.cmake` to `CMAKE_MODULE_PATH` environment variable, or set `Libxc_DIR` to the directory containing the file. +If Libxc is not installed in standard path (i.e. installed with a custom prefix path), you can set `Libxc_DIR` to the corresponding directory. ```bash cmake -B build -DLibxc_DIR=~/libxc diff --git a/source/module_deepks/test/CMakeLists.txt b/source/module_deepks/test/CMakeLists.txt index 76ca8a8a13..d9b8947f29 100644 --- a/source/module_deepks/test/CMakeLists.txt +++ b/source/module_deepks/test/CMakeLists.txt @@ -6,7 +6,7 @@ add_executable( get_target_property(ABACUS_LINK_LIBRARIES ${ABACUS_BIN_NAME} LINK_LIBRARIES) target_link_libraries( test_deepks - base cell symmetry md surchem xc + base cell symmetry md surchem xc_ neighbor orb io ions gint lcao parallel mrrr pdiag pw ri driver esolver hsolver psi elecstate hamilt planewave pthread deepks diff --git a/source/module_xc/CMakeLists.txt b/source/module_xc/CMakeLists.txt index e74c40c001..8a0f7abea5 100644 --- a/source/module_xc/CMakeLists.txt +++ b/source/module_xc/CMakeLists.txt @@ -1,4 +1,6 @@ -list(APPEND objects +add_library( + xc_ + OBJECT xc_functional.cpp xc_functional_vxc.cpp xc_functional_gradcorr.cpp @@ -10,14 +12,8 @@ list(APPEND objects xc_funct_exch_gga.cpp xc_funct_corr_gga.cpp xc_funct_hcth.cpp - ) - -add_library( - xc - OBJECT - ${objects} ) IF (BUILD_TESTING) add_subdirectory(test) -endif() \ No newline at end of file +endif() From 65407e4f32890d6fe8b165233b9894a4335225c3 Mon Sep 17 00:00:00 2001 From: Chun Cai Date: Fri, 19 Aug 2022 15:56:18 +0800 Subject: [PATCH 32/63] docs: fix dead links in deepks installation --- docs/install.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/install.md b/docs/install.md index 1123f6e150..d7c4f25191 100644 --- a/docs/install.md +++ b/docs/install.md @@ -241,9 +241,9 @@ This part of installation is based on [Installation](#installation). If DeePKS f ### Extra prerequisites -- C++ compiler, supporting **C++14**. For example, Intel C++ compiler 18 -- [LibTorch](https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.9.0%2Bcpu.zip) for cpu, with c++11 ABI; -- [Libnpy](https://github.com.cnpmjs.org/llohse/libnpy/); +- C++ compiler, supporting **C++14** +- [LibTorch](https://pytorch.org/) with cxx11 ABI supporting CPU +- [Libnpy](https://github.com/llohse/libnpy/) ### Extra settings for building From 27f2be8b06348572ba962e27fc9f0a5008fef163 Mon Sep 17 00:00:00 2001 From: Chun Cai Date: Fri, 19 Aug 2022 20:41:40 +0800 Subject: [PATCH 33/63] docs: update ambiguous phrases --- docs/install.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/install.md b/docs/install.md index 1123f6e150..8ea0a2b984 100644 --- a/docs/install.md +++ b/docs/install.md @@ -34,7 +34,7 @@ To compile ABACUS, please make sure that the following prerequisites are present - C++ compiler, supporting C++11. You can use [Intel® C++ compiler](https://software.intel.com/enus/c-compilers) or [GCC](https://gcc.gnu.org/). - MPI compiler. The recommended version are [Intel MPI](https://software.intel.com/enus/mpi-library) or [MPICH](https://www.mpich.org/). -- Fortran compiler for building `BLAS`, `LAPACK`, `ScaLAPACK` or `ELPA`. You can use[Intel® Fortran Compiler](https://www.intel.com/content/www/us/en/developer/tools/oneapi/fortran-compiler.html) [GFortran](https://gcc.gnu.org/fortran/). +- Fortran compiler if you are building `BLAS`, `LAPACK`, `ScaLAPACK`, and `ELPA` from source file. You can use[Intel® Fortran Compiler](https://www.intel.com/content/www/us/en/developer/tools/oneapi/fortran-compiler.html) [GFortran](https://gcc.gnu.org/fortran/). - [BLAS](http://www.netlib.org/blas/). You can use [OpenBLAS](https://www.openblas.net/). - [LAPACK](http://www.netlib.org/lapack/). - [ScaLAPACK](http://www.netlib.org/scalapack/). @@ -50,7 +50,7 @@ sudo apt update && sudo apt install -y libopenblas-dev liblapack-dev libscalapac > Installing ELPA by apt only matches requirements on Ubuntu 22.04. For earlier linux distributions, you may install elpa from source. -Alternatively, you can choose [Intel® oneAPI toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/commercial-base-hpc.html) (former Parallel Studio) as toolchain. The [Intel® oneAPI Base Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/all-toolkits.html#base-kit) contains Intel® oneAPI Math Kernel Library (aka `MKL`), including `BLAS`, `LAPACK`, `ScaLAPACK` and `FFTW3`, - this means that no Fortran compiler required anymore. The [Intel® oneAPI HPC Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/all-toolkits.html#hpc-kit) contains Intel® MPI Library, and C++ compiler(including MPI compiler). Please noted that building `elpa` with a different MPI library may cause conflict between MPI libraries. Don't forget to [set environment variables](https://software.intel.com/content/www/us/en/develop/documentation/get-started-with-intel-oneapi-render-linux/top/configure-your-system.html) before you start! `cmake` will use Intel MKL if the environment variable `MKLROOT` is set. +Alternatively, you can choose [Intel® oneAPI toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/commercial-base-hpc.html) (former Parallel Studio) as toolchain. The [Intel® oneAPI Base Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/all-toolkits.html#base-kit) contains Intel® oneAPI Math Kernel Library (aka `MKL`), including `BLAS`, `LAPACK`, `ScaLAPACK` and `FFTW3`. The [Intel® oneAPI HPC Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/all-toolkits.html#hpc-kit) contains Intel® MPI Library, and C++ compiler(including MPI compiler). Please noted that building `elpa` with a different MPI library may cause conflict between MPI libraries. Don't forget to [set environment variables](https://software.intel.com/content/www/us/en/develop/documentation/get-started-with-intel-oneapi-render-linux/top/configure-your-system.html) before you start! `cmake` will use Intel MKL if the environment variable `MKLROOT` is set. > Please refer to our [guide](https://github.com/deepmodeling/abacus-develop/wiki/Building-and-Running-ABACUS) on requirements. From e92f03f28df281143ead9e66d10b716bd6f8e847 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Fri, 19 Aug 2022 20:47:17 +0800 Subject: [PATCH 34/63] change renormalization of density in SDFT --- .../module_esolver/esolver_sdft_pw_tool.cpp | 17 +++++++++++++- source/src_pw/sto_iter.cpp | 22 ++++++++++--------- tests/integrate/181_PW_SDFT_5D10S/result.ref | 10 ++++----- .../integrate/183_PW_MD_SDFT_5D10S/result.ref | 10 ++++----- .../184_PW_BNDKPAR_SDFT_MALL/result.ref | 10 ++++----- .../184_PW_BNDPAR_SDFT_5D10S/result.ref | 10 ++++----- .../185_PW_SDFT_5D10S_METHD2/result.ref | 10 ++++----- 7 files changed, 53 insertions(+), 36 deletions(-) diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index d53c6a1870..d6439e744a 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -456,7 +456,9 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const double emin, const double emax, const double de) { - cout<<"Calculating Dos...."< che(nche_dos); const int nk = GlobalC::kv.nks; Stochastic_Iter& stoiter = ((hsolver::HSolverPW_SDFT*)phsol)->stoiter; @@ -465,8 +467,10 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d double * spolyv = new double [nche_dos]; ModuleBase::GlobalFunc::ZEROS(spolyv, nche_dos); + cout<<"1. TracepolyA:"< 1) { this->phami->updateHk(ik); @@ -486,6 +490,7 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d spolyv[i] += che.polytrace[i] * GlobalC::kv.wk[ik] / 2 ; } } + string dosfile = GlobalV::global_out_dir+"DOS1_smearing.dat"; ofstream ofsdos(dosfile.c_str()); int ndos = int((emax-emin) / de)+1; @@ -495,6 +500,9 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d double sum = 0; double error = 0; ofsdos<>tartxt; - string warningtxt = "( "+info+" Chebyshev error = "+fractxt+" > threshold = "+tartxt+" ) Please add more expansion terms for Chebychev expansion."; + string warningtxt = "( "+info+" Chebyshev error = "+fractxt+" > threshold = "+tartxt+" ) Maybe you should increase the parameter \"nche_sto\" for more accuracy."; ModuleBase::WARNING("Stochastic_Chebychev", warningtxt); } //=============================== @@ -232,6 +232,7 @@ void Stochastic_Iter::itermu(const int iter, elecstate::ElecState* pes) { dmu = 0.1; th_ne = 1e-2 * GlobalV::SCF_THR * GlobalC::CHR.nelec; + th_ne = std::min(th_ne, 1e-5); } this->stofunc.mu = mu0 - dmu; double ne1 = calne(pes); @@ -484,7 +485,6 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe pes->eband += sto_eband; //---------------------cal rho------------------------- double *sto_rho = new double [nrxx]; - //int npwall = npwx * nchip; double dr3 = GlobalC::ucell.omega / GlobalC::wfcpw->nxyz; double tmprho, tmpne; @@ -519,6 +519,7 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe } delete[] porter; #ifdef __MPI + //temporary, rho_mpi should be rewrite as a tool function! Now it only treats pes->charge->rho pes->charge->rho_mpi(); #endif for (int ir = 0; ir < nrxx; ++ir) @@ -534,17 +535,15 @@ void Stochastic_Iter::sum_stoband(Stochastic_WF& stowf, elecstate::ElecState* pe MPI_Allreduce(MPI_IN_PLACE,&sto_ne,1,MPI_DOUBLE,MPI_SUM,PARAPW_WORLD); MPI_Allreduce(MPI_IN_PLACE,sto_rho,nrxx,MPI_DOUBLE,MPI_SUM,PARAPW_WORLD); #endif - - double factor; - if(abs(sto_ne) > 1e-15) + double factor = targetne/(KS_ne+sto_ne); + if(abs(factor-1) > 1e-10) { - factor = (targetne - KS_ne) / sto_ne; GlobalV::ofs_running<<"Renormalize rho from ne = "< Date: Fri, 19 Aug 2022 21:03:00 +0800 Subject: [PATCH 35/63] docs: update gcc requirements --- docs/install.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/install.md b/docs/install.md index 1123f6e150..29e03267ed 100644 --- a/docs/install.md +++ b/docs/install.md @@ -42,6 +42,8 @@ To compile ABACUS, please make sure that the following prerequisites are present - [ELPA](https://elpa.mpcdf.mpg.de/) >= 2017. - [CEREAL](https://uscilab.github.io/cereal/). +> GCC version 5.1 or later is required: Intel compilers also use GCC headers and libraries[(ref)]( https://www.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compatibility-and-portability/gcc-compatibility-and-interoperability.html#gcc-compatibility-and-interoperability_GUID-52CB6FE0-83DA-4028-9EF4-0DFAF1652736). + These packages can be installed with popular package management system, such as `apt` and `yum`: ```bash From 6b44d708d40c9f49956b09a32ecb888f9fdc2910 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Fri, 19 Aug 2022 21:39:41 +0800 Subject: [PATCH 36/63] change case because previous one is different between gnu and intel compiler --- source/module_esolver/esolver_sdft_pw_tool.cpp | 2 +- .../INPUT | 2 +- .../KPT | 0 .../README | 2 +- .../STRU | 0 tests/integrate/185_PW_SDFT_10D10S_METHD2/jd | 1 + tests/integrate/185_PW_SDFT_10D10S_METHD2/result.ref | 5 +++++ tests/integrate/185_PW_SDFT_5D10S_METHD2/jd | 1 - tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref | 5 ----- tests/integrate/CASES | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) rename tests/integrate/{185_PW_SDFT_5D10S_METHD2 => 185_PW_SDFT_10D10S_METHD2}/INPUT (97%) rename tests/integrate/{185_PW_SDFT_5D10S_METHD2 => 185_PW_SDFT_10D10S_METHD2}/KPT (100%) rename tests/integrate/{185_PW_SDFT_5D10S_METHD2 => 185_PW_SDFT_10D10S_METHD2}/README (72%) rename tests/integrate/{185_PW_SDFT_5D10S_METHD2 => 185_PW_SDFT_10D10S_METHD2}/STRU (100%) create mode 100644 tests/integrate/185_PW_SDFT_10D10S_METHD2/jd create mode 100644 tests/integrate/185_PW_SDFT_10D10S_METHD2/result.ref delete mode 100644 tests/integrate/185_PW_SDFT_5D10S_METHD2/jd delete mode 100644 tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index d6439e744a..449662f92d 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -532,7 +532,7 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d if(error < tmpre) error = tmpre; dos[ie] = (KS_dos + sto_dos) / ModuleBase::Ry_to_eV; sum += dos[ie]; - ofsdos < 0 diff --git a/tests/integrate/185_PW_SDFT_5D10S_METHD2/STRU b/tests/integrate/185_PW_SDFT_10D10S_METHD2/STRU similarity index 100% rename from tests/integrate/185_PW_SDFT_5D10S_METHD2/STRU rename to tests/integrate/185_PW_SDFT_10D10S_METHD2/STRU diff --git a/tests/integrate/185_PW_SDFT_10D10S_METHD2/jd b/tests/integrate/185_PW_SDFT_10D10S_METHD2/jd new file mode 100644 index 0000000000..040f7576ef --- /dev/null +++ b/tests/integrate/185_PW_SDFT_10D10S_METHD2/jd @@ -0,0 +1 @@ +test method_sto = 2 SDFT with 10 KS orbitals and 10 stochastic orbitals, 1*1*1 kpoint, 20000 seed_sto(must use 4 cores) diff --git a/tests/integrate/185_PW_SDFT_10D10S_METHD2/result.ref b/tests/integrate/185_PW_SDFT_10D10S_METHD2/result.ref new file mode 100644 index 0000000000..2956d2316f --- /dev/null +++ b/tests/integrate/185_PW_SDFT_10D10S_METHD2/result.ref @@ -0,0 +1,5 @@ +etotref -323.9139593248294204 +etotperatomref -161.9569796624 +totalforceref 1.020878 +totalstressref 1751.314860 +totaltimeref +1.57183 diff --git a/tests/integrate/185_PW_SDFT_5D10S_METHD2/jd b/tests/integrate/185_PW_SDFT_5D10S_METHD2/jd deleted file mode 100644 index bb3a3e9dc9..0000000000 --- a/tests/integrate/185_PW_SDFT_5D10S_METHD2/jd +++ /dev/null @@ -1 +0,0 @@ -test method_sto = 2 SDFT with 5 KS orbitals and 10 stochastic orbitals, 1*1*1 kpoint, 20000 seed_sto(must use 4 cores) diff --git a/tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref b/tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref deleted file mode 100644 index 7de2d0d5fa..0000000000 --- a/tests/integrate/185_PW_SDFT_5D10S_METHD2/result.ref +++ /dev/null @@ -1,5 +0,0 @@ -etotref -324.2147671023046769 -etotperatomref -162.1073835512 -totalforceref 4.067650 -totalstressref 1839.374349 -totaltimeref +2.48875 diff --git a/tests/integrate/CASES b/tests/integrate/CASES index 6b833e243c..3a087c731a 100644 --- a/tests/integrate/CASES +++ b/tests/integrate/CASES @@ -87,7 +87,7 @@ 184_PW_KPAR_SDFT_ALL 184_PW_BNDKPAR_SDFT_MALL 185_PW_SDFT_10S_METHD2 -185_PW_SDFT_5D10S_METHD2 +185_PW_SDFT_10D10S_METHD2 186_PW_SKG_ALL 186_PW_SKG_10D10S 186_PW_KG_100 From 3bf4613b73653f35f784bfe99cc5540eb0b599e4 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Sat, 20 Aug 2022 10:55:44 +0800 Subject: [PATCH 37/63] optimize Stochastic DOS of method_sto = 2 --- .../module_esolver/esolver_sdft_pw_tool.cpp | 76 +++++++++++++++---- source/src_pw/sto_func.cpp | 21 ++++- source/src_pw/sto_func.h | 1 + source/src_pw/sto_iter.cpp | 4 +- source/src_pw/sto_iter.h | 2 + source/src_pw/sto_wf.cpp | 16 ++-- source/src_pw/sto_wf.h | 3 +- 7 files changed, 95 insertions(+), 28 deletions(-) diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index 449662f92d..826814f5af 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -465,8 +465,19 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d Stochastic_hchi& stohchi = stoiter.stohchi; const int npwx = GlobalC::wf.npwx; - double * spolyv = new double [nche_dos]; - ModuleBase::GlobalFunc::ZEROS(spolyv, nche_dos); + double * spolyv = nullptr; + std::complex *allorderchi = nullptr; + if(stoiter.method == 1) + { + spolyv = new double [nche_dos]; + ModuleBase::GlobalFunc::ZEROS(spolyv, nche_dos); + } + else + { + spolyv = new double [nche_dos*nche_dos]; + ModuleBase::GlobalFunc::ZEROS(spolyv, nche_dos*nche_dos); + allorderchi = new std::complex [this->stowf.nchip_max * npwx * nche_dos]; + } cout<<"1. TracepolyA:"<stowf.nchip[ik]; + const int nchipk = this->stowf.nchip[ik]; complex * pchi; if(GlobalV::NBANDS > 0) pchi = stowf.chiortho[ik].c; else pchi = stowf.chi0[ik].c; - che.tracepolyA(&stohchi, &Stochastic_hchi::hchi_norm, pchi, npw, npwx, nchip); - for(int i = 0 ; i < nche_dos ; ++i) + if(stoiter.method == 1) + { + che.tracepolyA(&stohchi, &Stochastic_hchi::hchi_norm, pchi, npw, npwx, nchipk); + for(int i = 0 ; i < nche_dos ; ++i) + { + spolyv[i] += che.polytrace[i] * GlobalC::kv.wk[ik] / 2 ; + } + } + else { - spolyv[i] += che.polytrace[i] * GlobalC::kv.wk[ik] / 2 ; + ModuleBase::GlobalFunc::ZEROS(allorderchi, this->stowf.nchip_max * npwx * nche_dos); + che.calpolyvec_complex(&stohchi, &Stochastic_hchi::hchi_norm, pchi, allorderchi, npw, npwx, nchipk); + double* vec_all= (double *) allorderchi; + char trans = 'T'; + char normal = 'N'; + double one = 1; + int LDA = npwx * nchipk * 2; + int M = npwx * nchipk * 2; + int N = nche_dos; + double kweight = GlobalC::kv.wk[ik] / 2; + dgemm_(&trans,&normal, &N,&N,&M,&kweight,vec_all,&LDA,vec_all,&LDA,&one,spolyv,&N); } } + if(stoiter.method == 2) delete[] allorderchi; string dosfile = GlobalV::global_out_dir+"DOS1_smearing.dat"; ofstream ofsdos(dosfile.c_str()); @@ -498,17 +527,26 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d ModuleBase::GlobalFunc::ZEROS(dos,ndos); stoiter.stofunc.sigma = sigmain / ModuleBase::Ry_to_eV; double sum = 0; - double error = 0; + double maxerror = 0; ofsdos<::ngauss); double KS_dos = 0; - double sto_dos = BlasConnector::dot(nche_dos,che.coef_real,1,spolyv,1); + double sto_dos = 0; + stoiter.stofunc.targ_e = (emin + ie * de) / ModuleBase::Ry_to_eV; + if(stoiter.method == 1) + { + che.calcoef_real(&stoiter.stofunc, &Sto_Func::ngauss); + sto_dos = BlasConnector::dot(nche_dos,che.coef_real,1,spolyv,1); + } + else + { + che.calcoef_real(&stoiter.stofunc, &Sto_Func::nroot_gauss); + sto_dos = stoiter.vTMv(che.coef_real,spolyv,nche_dos); + } if(GlobalV::NBANDS > 0) { for(int ik = 0; ik < nk; ++ik) @@ -525,11 +563,23 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d MPI_Allreduce(MPI_IN_PLACE, &KS_dos, 1, MPI_DOUBLE, MPI_SUM , STO_WORLD); MPI_Allreduce(MPI_IN_PLACE, &sto_dos, 1, MPI_DOUBLE, MPI_SUM , MPI_COMM_WORLD); #endif - double tmpre = che.coef_real[nche_dos-1] * spolyv[nche_dos-1]; + double tmpre = 0; + if(stoiter.method == 1) + { + tmpre = che.coef_real[nche_dos-1] * spolyv[nche_dos-1]; + } + else + { + const int norder = nche_dos; + double last_coef = che.coef_real[norder-1]; + double last_spolyv = spolyv[norder*norder - 1]; + tmpre = last_coef *(BlasConnector::dot(norder,che.coef_real,1,spolyv+norder*(norder-1),1) + + BlasConnector::dot(norder,che.coef_real,1,spolyv+norder-1,norder)-last_coef*last_spolyv); + } #ifdef __MPI MPI_Allreduce(MPI_IN_PLACE, &tmpre, 1, MPI_DOUBLE, MPI_SUM , MPI_COMM_WORLD); #endif - if(error < tmpre) error = tmpre; + if(maxerror < tmpre) maxerror = tmpre; dos[ie] = (KS_dos + sto_dos) / ModuleBase::Ry_to_eV; sum += dos[ie]; ofsdos <:: nxfd(REAL rawe) REAL DeltaE = (Emax - Emin)/2; REAL e = rawe * DeltaE + Ebar; REAL ne_mu = (e - mu) / this->tem ; - if(ne_mu > 40) + if(ne_mu > 36) return 0; else return e / (1 + exp(ne_mu)); @@ -103,9 +103,9 @@ REAL Sto_Func:: n_root_fdlnfd(REAL rawe) REAL Ebar = (Emin + Emax)/2; REAL DeltaE = (Emax - Emin)/2; REAL ne_mu = (rawe * DeltaE + Ebar - mu) / this->tem ; - if(ne_mu > 36) + if(ne_mu > 72) return 0; - else if(ne_mu < -36) + else if(ne_mu < -72) return 0; else { @@ -170,12 +170,25 @@ REAL Sto_Func::ngauss(REAL rawe) REAL DeltaE = (Emax - Emin)/2; REAL e = rawe * DeltaE + Ebar; REAL a = pow((targ_e-e),2)/2.0/pow(sigma,2); - if(a > 72) + if(a > 32) return 0; else return exp(-a) /sqrt(TWOPI) / sigma ; } +template +REAL Sto_Func::nroot_gauss(REAL rawe) +{ + REAL Ebar = (Emin + Emax)/2; + REAL DeltaE = (Emax - Emin)/2; + REAL e = rawe * DeltaE + Ebar; + REAL a = pow((targ_e-e),2)/4.0/pow(sigma,2); + if(a > 32) + return 0; + else + return exp(-a) /sqrt(sqrt(TWOPI) * sigma) ; +} + //we only have two examples: double and float. template class Sto_Func; #ifdef __MIX_PRECISION diff --git a/source/src_pw/sto_func.h b/source/src_pw/sto_func.h index f0ecc25b4c..b4b0fc8d21 100644 --- a/source/src_pw/sto_func.h +++ b/source/src_pw/sto_func.h @@ -33,6 +33,7 @@ class Sto_Func REAL targ_e; REAL gauss(REAL e); REAL ngauss(REAL e); + REAL nroot_gauss(REAL e); }; diff --git a/source/src_pw/sto_iter.cpp b/source/src_pw/sto_iter.cpp index f1f757f9b1..1e241e6ad6 100644 --- a/source/src_pw/sto_iter.cpp +++ b/source/src_pw/sto_iter.cpp @@ -9,7 +9,7 @@ #include "global.h" #include "occupy.h" -double vTMv(const double *v, const double * M, const int n) +double Stochastic_Iter::vTMv(const double *v, const double * M, const int n) { const char normal = 'N'; const double one = 1; @@ -193,7 +193,7 @@ void Stochastic_Iter::check_precision(const double ref, const double thr, const const int norder = p_che->norder; double last_coef = p_che->coef_real[norder-1]; double last_spolyv = spolyv[norder*norder - 1]; - error += last_coef *(BlasConnector::dot(norder,p_che->coef_real,1,spolyv+norder*(norder-1),1) + error = last_coef *(BlasConnector::dot(norder,p_che->coef_real,1,spolyv+norder*(norder-1),1) + BlasConnector::dot(norder,p_che->coef_real,1,spolyv+norder-1,norder)-last_coef*last_spolyv); } diff --git a/source/src_pw/sto_iter.h b/source/src_pw/sto_iter.h index 1523adb074..65f79a4e48 100644 --- a/source/src_pw/sto_iter.h +++ b/source/src_pw/sto_iter.h @@ -66,6 +66,8 @@ class Stochastic_Iter void calPn(const int& ik, Stochastic_WF& stowf); //cal Tnchi = \sum_n C_n*T_n(\hat{h})|\chi> void calTnchi_ik(const int& ik, Stochastic_WF& stowf); + //cal v^T*M*v + double vTMv(const double *v, const double * M, const int n); }; diff --git a/source/src_pw/sto_wf.cpp b/source/src_pw/sto_wf.cpp index f288418f9f..02ce3e9645 100644 --- a/source/src_pw/sto_wf.cpp +++ b/source/src_pw/sto_wf.cpp @@ -18,14 +18,10 @@ Stochastic_WF::Stochastic_WF() Stochastic_WF::~Stochastic_WF() { - if (chi0 != nullptr) - delete[] chi0; - if (shchi != nullptr) - delete[] shchi; - if (chiortho != nullptr) - delete[] chiortho; - if (nchip != nullptr) - delete[] nchip; + delete[] chi0; + delete[] shchi; + delete[] chiortho; + delete[] nchip; } void Stochastic_WF::init(const int nks_in) @@ -83,6 +79,7 @@ void Init_Sto_Orbitals(Stochastic_WF& stowf, const int seed_in) stowf.chi0[ik].c[i] = 1.0 / sqrt(double(nchi)); } } + stowf.nchip_max = tmpnchip; } void Update_Sto_Orbitals(Stochastic_WF& stowf, const int seed_in) @@ -153,6 +150,7 @@ void Init_Com_Orbitals(Stochastic_WF& stowf, K_Vectors& kv) ++tmpnchip; stowf.nchip[ik] = tmpnchip; stowf.chi0[ik].create(tmpnchip, ndim, true); + stowf.nchip_max = std::max(tmpnchip,stowf.nchip_max); const int re = totnpw[ik] % ngroup; int ip = 0, ig0 = 0; @@ -195,7 +193,9 @@ void Init_Com_Orbitals(Stochastic_WF& stowf, K_Vectors& kv) const int ndim = GlobalC::wf.npwx; for (int ik = 0; ik < kv.nks; ++ik) { + stowf.nchip[ik] = ndim; stowf.chi0[ik].create(stowf.nchip[ik], ndim, true); + stowf.nchip_max = ndim; for (int ichi = 0; ichi < kv.ngk[ik]; ++ichi) { stowf.chi0[ik](ichi, ichi) = 1; diff --git a/source/src_pw/sto_wf.h b/source/src_pw/sto_wf.h index 5c5b87216e..b428cd872a 100644 --- a/source/src_pw/sto_wf.h +++ b/source/src_pw/sto_wf.h @@ -23,7 +23,8 @@ class Stochastic_WF ModuleBase::ComplexMatrix* chiortho; // stochastic wavefunctions after in reciprocal space orthogonalized with KS wavefunctions ModuleBase::ComplexMatrix* shchi; // sqrt(f(H))|chi> int nchi; // Total number of stochatic obitals - int *nchip; // The number of stochatic obitals in current process of each k point. + int *nchip; // The number of stochatic orbitals in current process of each k point. + int nchip_max = 0; // Max number of stochastic orbitals among all k points. int nks; //number of k-points int nbands_diag; // number of bands obtained from diagonalization From 30286ca636cd923ed8466b5368e5e7e187141bd2 Mon Sep 17 00:00:00 2001 From: Chun Cai Date: Sat, 20 Aug 2022 11:28:40 +0800 Subject: [PATCH 38/63] Update docs/install.md --- docs/install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/install.md b/docs/install.md index 29e03267ed..c1f2d6b76b 100644 --- a/docs/install.md +++ b/docs/install.md @@ -42,7 +42,7 @@ To compile ABACUS, please make sure that the following prerequisites are present - [ELPA](https://elpa.mpcdf.mpg.de/) >= 2017. - [CEREAL](https://uscilab.github.io/cereal/). -> GCC version 5.1 or later is required: Intel compilers also use GCC headers and libraries[(ref)]( https://www.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compatibility-and-portability/gcc-compatibility-and-interoperability.html#gcc-compatibility-and-interoperability_GUID-52CB6FE0-83DA-4028-9EF4-0DFAF1652736). +> GCC version 5.1 or later is required: Intel compilers also use GCC headers and libraries[(ref)](https://www.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/compatibility-and-portability/gcc-compatibility-and-interoperability.html#gcc-compatibility-and-interoperability_GUID-52CB6FE0-83DA-4028-9EF4-0DFAF1652736). These packages can be installed with popular package management system, such as `apt` and `yum`: From 90ce54549a9b4d1454fc0b69add3e395755d78d9 Mon Sep 17 00:00:00 2001 From: sunml99 Date: Sat, 20 Aug 2022 14:09:50 +0800 Subject: [PATCH 39/63] Replace UFFT with FFT and fix makefile --- source/Makefile.Objects | 1 + source/module_surchem/CMakeLists.txt | 2 +- source/module_surchem/H_correction_pw.cpp | 13 ++++++------- source/module_surchem/cal_totn.cpp | 3 +-- source/module_surchem/cal_vcav.cpp | 6 +++--- source/module_surchem/cal_vel.cpp | 8 ++++---- source/module_surchem/minimize_cg.cpp | 8 ++++---- source/module_surchem/{force.cpp => sol_force.cpp} | 7 ++++--- 8 files changed, 24 insertions(+), 24 deletions(-) rename source/module_surchem/{force.cpp => sol_force.cpp} (96%) diff --git a/source/Makefile.Objects b/source/Makefile.Objects index e20bdad230..1d7d823f5c 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -245,6 +245,7 @@ OBJS_SURCHEM=H_correction_pw.o\ corrected_energy.o\ minimize_cg.o\ efield.o\ + sol_force.o\ OBJS_XC=xc_funct_corr_gga.o \ xc_funct_corr_lda.o \ diff --git a/source/module_surchem/CMakeLists.txt b/source/module_surchem/CMakeLists.txt index 84b420cde4..62230dac5b 100644 --- a/source/module_surchem/CMakeLists.txt +++ b/source/module_surchem/CMakeLists.txt @@ -11,5 +11,5 @@ add_library( corrected_energy.cpp minimize_cg.cpp efield.cpp - force.cpp + sol_force.cpp ) \ No newline at end of file diff --git a/source/module_surchem/H_correction_pw.cpp b/source/module_surchem/H_correction_pw.cpp index 57cd8b5eff..6ad2b036bc 100644 --- a/source/module_surchem/H_correction_pw.cpp +++ b/source/module_surchem/H_correction_pw.cpp @@ -26,7 +26,7 @@ ModuleBase::matrix surchem::v_correction(const UnitCell &cell, complex *Porter_g = new complex[rho_basis->npw]; ModuleBase::GlobalFunc::ZEROS(Porter_g, rho_basis->npw); - GlobalC::UFFT.ToReciSpace(Porter, Porter_g, rho_basis); + rho_basis->real2recip(Porter, Porter_g); complex *N = new complex[rho_basis->npw]; complex *TOTN = new complex[rho_basis->npw]; @@ -149,7 +149,7 @@ ModuleBase::matrix surchem::v_compensating(const UnitCell &cell, ModulePW::PW_Ba // std::cout << " ecomp=" << ecomp << std::endl; comp_chg_energy = ecomp; - GlobalC::UFFT.ToRealSpace(phi_comp_G, phi_comp_R, rho_basis); + rho_basis->recip2real(phi_comp_G, phi_comp_R); ModuleBase::matrix v_comp(GlobalV::NSPIN, rho_basis->nrxx); if (GlobalV::NSPIN == 4) @@ -205,7 +205,7 @@ void surchem::test_V_to_N(ModuleBase::matrix &v, phi_comp_R[ir] = v(0, ir); } - GlobalC::UFFT.ToReciSpace(phi_comp_R, phi_comp_G, rho_basis); + rho_basis->real2recip(phi_comp_R, phi_comp_G); for (int ig = 0; ig < rho_basis->npw; ig++) { if (rho_basis->gg[ig] >= 1.0e-12) // LiuXh 20180410 @@ -214,7 +214,7 @@ void surchem::test_V_to_N(ModuleBase::matrix &v, comp_reci[ig] = phi_comp_G[ig] / fac; } } - GlobalC::UFFT.ToRealSpace(comp_reci, N_real, rho_basis); + rho_basis->recip2real(comp_reci, N_real); complex *vloc_g = new complex[rho_basis->npw]; complex *ng = new complex[rho_basis->npw]; @@ -225,8 +225,7 @@ void surchem::test_V_to_N(ModuleBase::matrix &v, for (int ir = 0; ir < rho_basis->nrxx; ir++) Porter[ir] = rho[0][ir]; - GlobalC::UFFT.ToReciSpace(GlobalC::pot.vltot, - vloc_g, rho_basis); // now n is vloc in Recispace + rho_basis->real2recip(GlobalC::pot.vltot,vloc_g);// now n is vloc in Recispace for (int ig = 0; ig < rho_basis->npw; ig++) { if (rho_basis->gg[ig] >= 1.0e-12) // LiuXh 20180410 { @@ -237,7 +236,7 @@ void surchem::test_V_to_N(ModuleBase::matrix &v, } } double *nr = new double[rho_basis->nrxx]; - GlobalC::UFFT.ToRealSpace(ng, nr, rho_basis); + rho_basis->recip2real(ng, nr); double *diff = new double[rho_basis->nrxx]; double *diff2 = new double[rho_basis->nrxx]; diff --git a/source/module_surchem/cal_totn.cpp b/source/module_surchem/cal_totn.cpp index 2785d082d5..e2a183fab3 100644 --- a/source/module_surchem/cal_totn.cpp +++ b/source/module_surchem/cal_totn.cpp @@ -7,8 +7,7 @@ void surchem::cal_totn(const UnitCell &cell, ModulePW::PW_Basis* rho_basis, complex *vloc_g = new complex[rho_basis->npw]; ModuleBase::GlobalFunc::ZEROS(vloc_g, rho_basis->npw); - GlobalC::UFFT.ToReciSpace(GlobalC::pot.vltot, - vloc_g, rho_basis); // now n is vloc in Recispace + rho_basis->real2recip(GlobalC::pot.vltot, vloc_g); // now n is vloc in Recispace for (int ig = 0; ig < rho_basis->npw; ig++) { if(ig==rho_basis->ig_gge0) { diff --git a/source/module_surchem/cal_vcav.cpp b/source/module_surchem/cal_vcav.cpp index 7c4330678a..477b1b1a7f 100644 --- a/source/module_surchem/cal_vcav.cpp +++ b/source/module_surchem/cal_vcav.cpp @@ -36,7 +36,7 @@ void shape_gradn(const complex *PS_TOTN, ModulePW::PW_Basis* rho_basis, double *PS_TOTN_real = new double[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(PS_TOTN_real, rho_basis->nrxx); - GlobalC::UFFT.ToRealSpace(PS_TOTN, PS_TOTN_real,rho_basis); + rho_basis->recip2real(PS_TOTN, PS_TOTN_real); double epr_c = 1.0 / sqrt(ModuleBase::TWO_PI) / GlobalV::sigma_k; double epr_z = 0; @@ -119,8 +119,8 @@ void surchem::createcavity(const UnitCell &ucell, ModulePW::PW_Basis* rho_basis, // packs the real array into a complex one // to G space complex *inv_gn = new complex[rho_basis->npw]; - GlobalC::UFFT.ToReciSpace(sqrt_nablan_2, inv_gn,rho_basis); - + rho_basis->real2recip(sqrt_nablan_2, inv_gn); + // \nabla(1 / |\nabla n|), ggn in real space ModuleBase::Vector3 *ggn = new ModuleBase::Vector3[rho_basis->nrxx]; XC_Functional::grad_rho(inv_gn, ggn, rho_basis); diff --git a/source/module_surchem/cal_vel.cpp b/source/module_surchem/cal_vel.cpp index ce64c63964..fe6b246cc1 100644 --- a/source/module_surchem/cal_vel.cpp +++ b/source/module_surchem/cal_vel.cpp @@ -58,7 +58,7 @@ ModuleBase::matrix surchem::cal_vel(const UnitCell &cell, ModuleBase::timer::tick("surchem", "cal_vel"); // double *TOTN_real = new double[pwb.nrxx]; - GlobalC::UFFT.ToRealSpace(TOTN, TOTN_real,rho_basis); + rho_basis->recip2real(TOTN, TOTN_real); // -4pi * TOTN(G) complex *B = new complex[rho_basis->npw]; @@ -69,7 +69,7 @@ ModuleBase::matrix surchem::cal_vel(const UnitCell &cell, // Build a nrxx vector to DO FFT . double *PS_TOTN_real = new double[rho_basis->nrxx]; - GlobalC::UFFT.ToRealSpace(PS_TOTN, PS_TOTN_real,rho_basis); + rho_basis->recip2real(PS_TOTN, PS_TOTN_real); // build epsilon in real space (nrxx) double *epsilon = new double[rho_basis->nrxx]; @@ -95,8 +95,8 @@ ModuleBase::matrix surchem::cal_vel(const UnitCell &cell, double *phi_tilda_R0 = new double[rho_basis->nrxx]; // double *delta_phi_R = new double[pwb.nrxx]; - GlobalC::UFFT.ToRealSpace(Sol_phi, phi_tilda_R,rho_basis); - GlobalC::UFFT.ToRealSpace(Sol_phi0, phi_tilda_R0,rho_basis); + rho_basis->recip2real(Sol_phi, phi_tilda_R); + rho_basis->recip2real(Sol_phi0, phi_tilda_R0); // the 1st item of tmp_Vel for (int i = 0; i < rho_basis->nrxx; i++) diff --git a/source/module_surchem/minimize_cg.cpp b/source/module_surchem/minimize_cg.cpp index 55541fd397..95657e987d 100644 --- a/source/module_surchem/minimize_cg.cpp +++ b/source/module_surchem/minimize_cg.cpp @@ -202,7 +202,7 @@ void surchem::Leps2(const UnitCell &ucell, { grad_grad_phi[ir] = grad_phi[ir].x; } - GlobalC::UFFT.ToReciSpace(grad_grad_phi, grad_grad_phi_G, rho_basis); + rho_basis->real2recip(grad_grad_phi, grad_grad_phi_G); XC_Functional::grad_rho(grad_grad_phi_G, tmp_vector3, rho_basis); for (int ir = 0; ir < rho_basis->nrxx; ir++) { @@ -217,7 +217,7 @@ void surchem::Leps2(const UnitCell &ucell, { grad_grad_phi[ir] = grad_phi[ir].y; } - GlobalC::UFFT.ToReciSpace(grad_grad_phi, grad_grad_phi_G, rho_basis); + rho_basis->real2recip(grad_grad_phi, grad_grad_phi_G); XC_Functional::grad_rho(grad_grad_phi_G, tmp_vector3, rho_basis); for (int ir = 0; ir < rho_basis->nrxx; ir++) { @@ -232,7 +232,7 @@ void surchem::Leps2(const UnitCell &ucell, { grad_grad_phi[ir] = grad_phi[ir].z; } - GlobalC::UFFT.ToReciSpace(grad_grad_phi, grad_grad_phi_G, rho_basis); + rho_basis->real2recip(grad_grad_phi, grad_grad_phi_G); XC_Functional::grad_rho(grad_grad_phi_G, tmp_vector3, rho_basis); for (int ir = 0; ir < rho_basis->nrxx; ir++) { @@ -243,7 +243,7 @@ void surchem::Leps2(const UnitCell &ucell, // cout << lp_real << [i] << endl; // } - GlobalC::UFFT.ToReciSpace(lp_real, lp, rho_basis); + rho_basis->real2recip(lp_real, lp); // cout<<"lp: "< *delta_phi_g = new complex[rho_basis->npw]; //ModuleBase::GlobalFunc::ZEROS(delta_phi_g, rho_basis->npw); - GlobalC::UFFT.ToReciSpace(GlobalC::solvent_model.delta_phi, delta_phi_g,rho_basis); + rho_basis->real2recip(GlobalC::solvent_model.delta_phi, delta_phi_g); + //GlobalC::UFFT.ToReciSpace(GlobalC::solvent_model.delta_phi, delta_phi_g,rho_basis); double Ael=0;double Ael1 = 0; //ModuleBase::GlobalFunc::ZEROS(vg, ngmc); int iat = 0; @@ -85,8 +86,8 @@ void force_cor_two(const UnitCell &cell, ModulePW::PW_Basis* rho_basis , ModuleB } } - GlobalC::UFFT.ToReciSpace(Vcav_sum, Vcav_g, rho_basis); - GlobalC::UFFT.ToReciSpace(GlobalC::solvent_model.epspot, Vel_g, rho_basis); + rho_basis->real2recip(Vcav_sum, Vcav_g); + rho_basis->real2recip(GlobalC::solvent_model.epspot, Vel_g); int iat = 0; double Ael1 = 0; From e5a28d4d4c1fed74fa6ebb0e544b41480945d68d Mon Sep 17 00:00:00 2001 From: dyzheng Date: Sat, 20 Aug 2022 20:22:18 +0800 Subject: [PATCH 40/63] Fix: Veff error when MPI_threads larger than nz --- source/module_hamilt/ks_pw/veff_pw.cpp | 48 ++++++++++++++++---------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/source/module_hamilt/ks_pw/veff_pw.cpp b/source/module_hamilt/ks_pw/veff_pw.cpp index ade8ddeaa1..462639a52c 100644 --- a/source/module_hamilt/ks_pw/veff_pw.cpp +++ b/source/module_hamilt/ks_pw/veff_pw.cpp @@ -46,38 +46,48 @@ void Veff::act { if (this->npol == 1) { - const double* current_veff = &(this->veff[0](current_spin, 0)); wfcpw->recip2real(tmpsi_in, porter, ik); - for (int ir = 0; ir < this->veff->nc; ++ir) + // NOTICE: when MPI threads are larger than number of Z grids + // veff would contain nothing, and nothing should be do in real space + // but the 3DFFT can not be skipped, it will cause stuck + if(this->veff->nc != 0) { - porter[ir] *= current_veff[ir]; + GlobalV::ofs_running<<__FILE__<<__LINE__<<" "<veff->nr<<" "<veff->nc<veff[0](current_spin, 0)); + for (int ir = 0; ir < this->veff->nc; ++ir) + { + porter[ir] *= current_veff[ir]; + } } wfcpw->real2recip(porter, tmhpsi, ik, true); } else { - const double* current_veff[4]; - for(int is=0;is<4;is++) - { - current_veff[is] = &(this->veff[0](is, 0)); - } std::complex *porter1 = new std::complex[wfcpw->nmaxgr]; // fft to real space and doing things. wfcpw->recip2real(tmpsi_in, porter, ik); wfcpw->recip2real(tmpsi_in + this->max_npw, porter1, ik); std::complex sup, sdown; - for (int ir = 0; ir < this->veff->nc; ir++) + if(this->veff->nc != 0) { - sup = porter[ir] * (current_veff[0][ir] + current_veff[3][ir]) - + porter1[ir] - * (current_veff[1][ir] - - std::complex(0.0, 1.0) * current_veff[2][ir]); - sdown = porter1[ir] * (current_veff[0][ir] - current_veff[3][ir]) - + porter[ir] - * (current_veff[1][ir] - + std::complex(0.0, 1.0) * current_veff[2][ir]); - porter[ir] = sup; - porter1[ir] = sdown; + const double* current_veff[4]; + for(int is=0;is<4;is++) + { + current_veff[is] = &(this->veff[0](is, 0)); + } + for (int ir = 0; ir < this->veff->nc; ir++) + { + sup = porter[ir] * (current_veff[0][ir] + current_veff[3][ir]) + + porter1[ir] + * (current_veff[1][ir] + - std::complex(0.0, 1.0) * current_veff[2][ir]); + sdown = porter1[ir] * (current_veff[0][ir] - current_veff[3][ir]) + + porter[ir] + * (current_veff[1][ir] + + std::complex(0.0, 1.0) * current_veff[2][ir]); + porter[ir] = sup; + porter1[ir] = sdown; + } } // (3) fft back to G space. wfcpw->real2recip(porter, tmhpsi, this->ik, true); From f08c6389c04050afe0fa30dcdea2fdf00cdada1b Mon Sep 17 00:00:00 2001 From: dyzheng Date: Sat, 20 Aug 2022 20:59:44 +0800 Subject: [PATCH 41/63] Test: add test case for nz=3, add parameter test_skip_ewald for this case only --- source/input.cpp | 6 ++++ source/input.h | 3 +- source/input_conv.cpp | 1 + source/module_base/global_variable.cpp | 2 ++ source/module_base/global_variable.h | 1 + .../module_esolver/esolver_ks_lcao_elec.cpp | 5 ++- source/module_esolver/esolver_ks_pw.cpp | 5 ++- source/module_hamilt/ks_pw/veff_pw.cpp | 1 - tests/integrate/101_PW_15_lowz/INPUT | 33 +++++++++++++++++++ tests/integrate/101_PW_15_lowz/KPT | 4 +++ tests/integrate/101_PW_15_lowz/STRU | 19 +++++++++++ tests/integrate/101_PW_15_lowz/jd | 1 + tests/integrate/101_PW_15_lowz/result.ref | 3 ++ tests/integrate/CASES | 1 + 14 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 tests/integrate/101_PW_15_lowz/INPUT create mode 100644 tests/integrate/101_PW_15_lowz/KPT create mode 100644 tests/integrate/101_PW_15_lowz/STRU create mode 100644 tests/integrate/101_PW_15_lowz/jd create mode 100644 tests/integrate/101_PW_15_lowz/result.ref diff --git a/source/input.cpp b/source/input.cpp index 6661d6e14d..c10c465500 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -407,6 +407,7 @@ void Input::Default(void) // test only //========================================================== test_just_neighbor = false; + test_skip_ewald = false; //========================================================== // DFT+U Xin Qu added on 2020-10-29 @@ -1505,6 +1506,10 @@ bool Input::Read(const std::string &fn) { read_value(ifs, test_just_neighbor); } + else if (strcmp("test_skip_ewald", word) == 0) + { + read_value(ifs, test_skip_ewald); + } //-------------- //---------------------------------------------------------------------------------- // Xin Qu added on 2020-10-29 for DFT+U @@ -2203,6 +2208,7 @@ void Input::Bcast() Parallel_Common::bcast_int(td_vextout); Parallel_Common::bcast_int(td_dipoleout); Parallel_Common::bcast_bool(test_just_neighbor); + Parallel_Common::bcast_bool(test_skip_ewald); Parallel_Common::bcast_int(GlobalV::ocp); Parallel_Common::bcast_string(GlobalV::ocp_set); Parallel_Common::bcast_int(out_mul); // qifeng add 2019/9/10 diff --git a/source/input.h b/source/input.h index 82cf9a8d6b..d32d692713 100644 --- a/source/input.h +++ b/source/input.h @@ -421,7 +421,8 @@ class Input //========================================================== // variables for test only //========================================================== - bool test_just_neighbor; + bool test_just_neighbor = false; + bool test_skip_ewald = false; private: //========================================================== diff --git a/source/input_conv.cpp b/source/input_conv.cpp index 6c5210e84a..3d5c5e6d57 100644 --- a/source/input_conv.cpp +++ b/source/input_conv.cpp @@ -135,6 +135,7 @@ void Input_Conv::Convert(void) GlobalV::VION_IN_H = INPUT.vion_in_h; GlobalV::TEST_FORCE = INPUT.test_force; GlobalV::TEST_STRESS = INPUT.test_stress; + GlobalV::test_skip_ewald = INPUT.test_skip_ewald; //---------------------------------------------------------- // iteration (1/3) diff --git a/source/module_base/global_variable.cpp b/source/module_base/global_variable.cpp index c831285aed..d97f652d0d 100644 --- a/source/module_base/global_variable.cpp +++ b/source/module_base/global_variable.cpp @@ -157,6 +157,8 @@ int test_wf = 0; int test_charge = 0; int test_potential = 0; int test_energy = 0; +// for test purpose, skip ewald calculation +bool test_skip_ewald = false; //---------------------------------------------------------- // src_lcao //---------------------------------------------------------- diff --git a/source/module_base/global_variable.h b/source/module_base/global_variable.h index 76542c1df9..25b4bc079f 100644 --- a/source/module_base/global_variable.h +++ b/source/module_base/global_variable.h @@ -180,6 +180,7 @@ extern int test_wf; extern int test_charge; extern int test_potential; extern int test_energy; +extern bool test_skip_ewald; //========================================================== // src_onscaling //========================================================== diff --git a/source/module_esolver/esolver_ks_lcao_elec.cpp b/source/module_esolver/esolver_ks_lcao_elec.cpp index d9ef3d2a65..a0d185975c 100644 --- a/source/module_esolver/esolver_ks_lcao_elec.cpp +++ b/source/module_esolver/esolver_ks_lcao_elec.cpp @@ -256,7 +256,10 @@ namespace ModuleESolver #endif // 1. calculate ewald energy. // mohan update 2021-02-25 - H_Ewald_pw::compute_ewald(GlobalC::ucell, GlobalC::rhopw); + if(!GlobalV::test_skip_ewald) + { + H_Ewald_pw::compute_ewald(GlobalC::ucell, GlobalC::rhopw); + } //2. the electron charge density should be symmetrized, // here is the initialization diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index cd02da527d..751cf41ad0 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -180,7 +180,10 @@ namespace ModuleESolver } //calculate ewald energy - H_Ewald_pw::compute_ewald(GlobalC::ucell, GlobalC::rhopw); + if(!GlobalV::test_skip_ewald) + { + H_Ewald_pw::compute_ewald(GlobalC::ucell, GlobalC::rhopw); + } //Symmetry_rho should be moved to Init() Symmetry_rho srho; for (int is = 0; is < GlobalV::NSPIN; is++) diff --git a/source/module_hamilt/ks_pw/veff_pw.cpp b/source/module_hamilt/ks_pw/veff_pw.cpp index 462639a52c..f37900bd06 100644 --- a/source/module_hamilt/ks_pw/veff_pw.cpp +++ b/source/module_hamilt/ks_pw/veff_pw.cpp @@ -52,7 +52,6 @@ void Veff::act // but the 3DFFT can not be skipped, it will cause stuck if(this->veff->nc != 0) { - GlobalV::ofs_running<<__FILE__<<__LINE__<<" "<veff->nr<<" "<veff->nc<veff[0](current_spin, 0)); for (int ir = 0; ir < this->veff->nc; ++ir) { diff --git a/tests/integrate/101_PW_15_lowz/INPUT b/tests/integrate/101_PW_15_lowz/INPUT new file mode 100644 index 0000000000..d6ef196391 --- /dev/null +++ b/tests/integrate/101_PW_15_lowz/INPUT @@ -0,0 +1,33 @@ +INPUT_PARAMETERS +#Parameters (1.General) +suffix autotest +calculation scf +ntype 1 +nbands 6 +symmetry 1 +pseudo_dir ../tools/PP_ORB/ +pseudo_type upf201 + +#Parameters (2.Iteration) +ecutwfc 20 +scf_thr 1e-9 +scf_nmax 1 + + +#Parameters (3.Basis) +basis_type pw + +#Parameters (4.Smearing) +smearing_method gauss +smearing_sigma 0.002 + +#Parameters (5.Mixing) +mixing_type pulay +mixing_beta 0.7 + +nx 24 +ny 24 +nz 3 +pw_seed 1 + +test_skip_ewald 1 diff --git a/tests/integrate/101_PW_15_lowz/KPT b/tests/integrate/101_PW_15_lowz/KPT new file mode 100644 index 0000000000..c289c0158a --- /dev/null +++ b/tests/integrate/101_PW_15_lowz/KPT @@ -0,0 +1,4 @@ +K_POINTS +0 +Gamma +1 1 1 0 0 0 diff --git a/tests/integrate/101_PW_15_lowz/STRU b/tests/integrate/101_PW_15_lowz/STRU new file mode 100644 index 0000000000..0dabfb85ad --- /dev/null +++ b/tests/integrate/101_PW_15_lowz/STRU @@ -0,0 +1,19 @@ +ATOMIC_SPECIES +Si 14 Si_ONCV_PBE-1.0.upf + +LATTICE_CONSTANT +10.2 // add lattice constant + +LATTICE_VECTORS +0.5 0.5 0.0 +0.5 0.0 0.5 +0.0 0.5 0.5 + +ATOMIC_POSITIONS +Direct + +Si // Element type +0.0 // magnetism +2 +0.00 0.00 0.00 1 1 1 +0.25 0.25 0.25 1 1 1 diff --git a/tests/integrate/101_PW_15_lowz/jd b/tests/integrate/101_PW_15_lowz/jd new file mode 100644 index 0000000000..63b443a549 --- /dev/null +++ b/tests/integrate/101_PW_15_lowz/jd @@ -0,0 +1 @@ +test SG15 pseudopotential, symmetry=on, nz is 3 which less than default MPI_threads 4, ewald calculation is skipped in this case diff --git a/tests/integrate/101_PW_15_lowz/result.ref b/tests/integrate/101_PW_15_lowz/result.ref new file mode 100644 index 0000000000..19ad2cc69e --- /dev/null +++ b/tests/integrate/101_PW_15_lowz/result.ref @@ -0,0 +1,3 @@ +etotref -1.407077993281502 +etotperatomref -0.7035389966 +totaltimeref 0.15155 diff --git a/tests/integrate/CASES b/tests/integrate/CASES index 6b833e243c..a0bdc11c1f 100644 --- a/tests/integrate/CASES +++ b/tests/integrate/CASES @@ -6,6 +6,7 @@ 101_PW_upf201_Al_pseudopots 101_PW_upf201_pseudopots 101_PW_VW_pseudopots +101_PW_15_lowz 102_PW_DA_davidson 103_PW_15_CS_CF 103_PW_15_CS_CF_bspline From 5d34fb175bfd6573836f64ae0a881d65b189ace9 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Sun, 21 Aug 2022 12:03:15 +0800 Subject: [PATCH 42/63] add npart_sto to avoid using too much memory --- docs/input-main.md | 6 ++++ source/input.cpp | 6 ++++ source/input.h | 1 + source/module_esolver/esolver_sdft_pw.cpp | 14 +++++--- source/module_esolver/esolver_sdft_pw.h | 2 +- .../module_esolver/esolver_sdft_pw_tool.cpp | 34 +++++++++++++------ source/src_io/write_input.cpp | 1 + tests/integrate/186_PW_SDOS_10D10S/INPUT | 2 +- 8 files changed, 48 insertions(+), 18 deletions(-) diff --git a/docs/input-main.md b/docs/input-main.md index 87143b025f..36513e85c2 100644 --- a/docs/input-main.md +++ b/docs/input-main.md @@ -642,6 +642,12 @@ This part of variables are used to control the parameters of stochastic DFT (SDF - **Description**: Frequency (once each initsto_freq steps) to generate new stochastic orbitals when running md. - **Default**:1000 +#### npart_sto + +- **Type**: Integer +- **Description**: Make memory cost to 1/npart_sto times of previous one when running post process of SDFT like DOS with method_sto = 2. +- **Default**:1 + ### Geometry relaxation This part of variables are used to control the geometry relaxation. diff --git a/source/input.cpp b/source/input.cpp index 28a332027d..f5393c28a6 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -145,6 +145,7 @@ void Input::Default(void) kpar = 1; initsto_freq = 1000; method_sto = 2; + npart_sto = 1; cal_cond = false; dos_nche = 100; cond_nche = 20; @@ -595,6 +596,10 @@ bool Input::Read(const std::string &fn) { read_value(ifs, method_sto); } + else if (strcmp("npart_sto", word) == 0) + { + read_value(ifs, npart_sto); + } else if (strcmp("cal_cond", word) == 0) { read_value(ifs, cal_cond); @@ -1978,6 +1983,7 @@ void Input::Bcast() Parallel_Common::bcast_double(emin_sto); Parallel_Common::bcast_int(initsto_freq); Parallel_Common::bcast_int(method_sto); + Parallel_Common::bcast_int(npart_sto); Parallel_Common::bcast_bool(cal_cond); Parallel_Common::bcast_int(cond_nche); Parallel_Common::bcast_double(cond_dw); diff --git a/source/input.h b/source/input.h index 82cf9a8d6b..e755d1daa3 100644 --- a/source/input.h +++ b/source/input.h @@ -72,6 +72,7 @@ class Input int bndpar; //parallel for stochastic/deterministic bands int initsto_freq; //frequency to init stochastic orbitals when running md int method_sto; //different methods for sdft, 1: slow, less memory 2: fast, more memory + int npart_sto; //for method_sto = 2, reduce memory bool cal_cond; //calculate electronic conductivities int cond_nche; //orders of Chebyshev expansions for conductivities double cond_dw; //d\omega for conductivities diff --git a/source/module_esolver/esolver_sdft_pw.cpp b/source/module_esolver/esolver_sdft_pw.cpp index 747f2bd6fb..7dc8fdb082 100644 --- a/source/module_esolver/esolver_sdft_pw.cpp +++ b/source/module_esolver/esolver_sdft_pw.cpp @@ -166,17 +166,21 @@ void ESolver_SDFT_PW::postprocess() if(INPUT.out_dos) { double emax, emin; - if(INPUT.dos_setemax) emax = INPUT.dos_emax_ev; - if(INPUT.dos_setemin) emin = INPUT.dos_emin_ev; + if(INPUT.dos_setemax) + emax = INPUT.dos_emax_ev; + else + emax = ((hsolver::HSolverPW_SDFT*)phsol)->stoiter.stohchi.Emax*ModuleBase::Ry_to_eV; + if(INPUT.dos_setemin) + emin = INPUT.dos_emin_ev; + else + emin = ((hsolver::HSolverPW_SDFT*)phsol)->stoiter.stohchi.Emin*ModuleBase::Ry_to_eV; if(!INPUT.dos_setemax && !INPUT.dos_setemin) { - emax = ((hsolver::HSolverPW_SDFT*)phsol)->stoiter.stohchi.Emax; - emin = ((hsolver::HSolverPW_SDFT*)phsol)->stoiter.stohchi.Emin; double delta=(emax-emin)*INPUT.dos_scale; emax=emax+delta/2.0; emin=emin-delta/2.0; } - this->caldos(INPUT.dos_nche, INPUT.b_coef, emin, emax, INPUT.dos_edelta_ev ); + this->caldos(INPUT.dos_nche, INPUT.b_coef, emin, emax, INPUT.dos_edelta_ev, INPUT.npart_sto ); } } diff --git a/source/module_esolver/esolver_sdft_pw.h b/source/module_esolver/esolver_sdft_pw.h index 729db1149a..2fbac693c3 100644 --- a/source/module_esolver/esolver_sdft_pw.h +++ b/source/module_esolver/esolver_sdft_pw.h @@ -33,7 +33,7 @@ class ESolver_SDFT_PW: public ESolver_KS_PW const double dw_in, const int times); //calculate DOS void caldos(const int nche_dos, const double sigmain, - const double emin, const double emax, const double de); + const double emin, const double emax, const double de, const int npart); private: int nche_sto; //norder of Chebyshev diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index 826814f5af..123caf8959 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -454,7 +454,7 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w ModuleBase::timer::tick(this->classname,"sKG"); } -void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const double emin, const double emax, const double de) +void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const double emin, const double emax, const double de, const int npart) { cout<<"========================="< [this->stowf.nchip_max * npwx * nche_dos]; + int nchip_new = ceil((double)this->stowf.nchip_max / npart); + allorderchi = new std::complex [nchip_new * npwx * nche_dos]; } cout<<"1. TracepolyA:"<stowf.nchip[ik]; - complex * pchi; + std::complex * pchi; if(GlobalV::NBANDS > 0) pchi = stowf.chiortho[ik].c; else @@ -505,17 +506,28 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d } else { - ModuleBase::GlobalFunc::ZEROS(allorderchi, this->stowf.nchip_max * npwx * nche_dos); - che.calpolyvec_complex(&stohchi, &Stochastic_hchi::hchi_norm, pchi, allorderchi, npw, npwx, nchipk); - double* vec_all= (double *) allorderchi; + int N = nche_dos; + double kweight = GlobalC::kv.wk[ik] / 2; char trans = 'T'; char normal = 'N'; double one = 1; - int LDA = npwx * nchipk * 2; - int M = npwx * nchipk * 2; - int N = nche_dos; - double kweight = GlobalC::kv.wk[ik] / 2; - dgemm_(&trans,&normal, &N,&N,&M,&kweight,vec_all,&LDA,vec_all,&LDA,&one,spolyv,&N); + for(int ipart = 0 ; ipart < npart ; ++ipart) + { + int nchipk_new = nchipk / npart; + int start_nchipk = ipart * nchipk_new + nchipk % npart; + if(ipart < nchipk % npart) + { + nchipk_new++; + start_nchipk = ipart * nchipk_new; + } + ModuleBase::GlobalFunc::ZEROS(allorderchi, nchipk_new * npwx * nche_dos); + std::complex *tmpchi = pchi + start_nchipk * npwx; + che.calpolyvec_complex(&stohchi, &Stochastic_hchi::hchi_norm, tmpchi, allorderchi, npw, npwx, nchipk_new); + double* vec_all= (double *) allorderchi; + int LDA = npwx * nchipk_new * 2; + int M = npwx * nchipk_new * 2; + dgemm_(&trans,&normal, &N,&N,&M,&kweight,vec_all,&LDA,vec_all,&LDA,&one,spolyv,&N); + } } } if(stoiter.method == 2) delete[] allorderchi; diff --git a/source/src_io/write_input.cpp b/source/src_io/write_input.cpp index 054f96696b..a177fc1156 100644 --- a/source/src_io/write_input.cpp +++ b/source/src_io/write_input.cpp @@ -111,6 +111,7 @@ void Input::Print(const std::string &fn) const ofs << "\n#Parameters (3.Stochastic DFT)" << std::endl; ModuleBase::GlobalFunc::OUTP(ofs, "method_sto", method_sto, "1: slow and save memory, 2: fast and waste memory"); + ModuleBase::GlobalFunc::OUTP(ofs, "npart_sto", npart_sto, "Reduce memory when calculating Stochastic DOS"); ModuleBase::GlobalFunc::OUTP(ofs, "nbands_sto", nbands_sto, "number of stochstic orbitals"); ModuleBase::GlobalFunc::OUTP(ofs, "nche_sto", nche_sto, "Chebyshev expansion orders"); ModuleBase::GlobalFunc::OUTP(ofs, "emin_sto", emin_sto, "trial energy to guess the lower bound of eigen energies of the Hamitonian operator"); diff --git a/tests/integrate/186_PW_SDOS_10D10S/INPUT b/tests/integrate/186_PW_SDOS_10D10S/INPUT index 6f4707b826..0556037a4c 100644 --- a/tests/integrate/186_PW_SDOS_10D10S/INPUT +++ b/tests/integrate/186_PW_SDOS_10D10S/INPUT @@ -39,4 +39,4 @@ dos_emax_ev 100 dos_edelta_ev 0.1 dos_sigma 4 dos_nche 240 - +npart_sto 2 From d20b3539836b1a71285b1a51256694b77dc8db15 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 22 Aug 2022 14:26:55 +0800 Subject: [PATCH 43/63] refactor : define new type of calculation "gen_jle" which generates deepks projectors and save to file 'jle.orb' --- docs/input-main.md | 5 +++-- source/driver_run.cpp | 2 +- source/input.cpp | 9 +++++++++ source/module_esolver/esolver_ks_pw.cpp | 20 +++++++++++--------- source/src_io/numerical_descriptor.cpp | 4 ++++ tests/deepks/CASES | 6 +++--- 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/docs/input-main.md b/docs/input-main.md index 604739013e..2aead8ea6c 100644 --- a/docs/input-main.md +++ b/docs/input-main.md @@ -150,6 +150,7 @@ This part of variables are used to control general system parameters. - *sto-md*: molecular dynamics with [stochastic DFT](#electronic-structure-sdft) - *test_memory* : checks memory required for the calculation. The number is not quite reliable, please use with care - *test_neighbour* : only performs neighbouring atom search + - *gen_jle* : generates projectors for DeePKS; see also deepks_lmax_descriptor > Note: *istate* and *ienvelope* only work for LCAO basis set and are not working right now. - **Default**: scf @@ -965,8 +966,8 @@ Warning: this function is not robust enough for the current version. Please try #### deepks_descriptor_lmax - **Type**: Integer -- **Description**: control the max angular momentum of descriptor basis. -- **Default**: 0 +- **Description**: when generating projectors, this variable controls the max angular momentum of descriptor basis. +- **Default**: 2 #### deepks_scf diff --git a/source/driver_run.cpp b/source/driver_run.cpp index e4d522580d..0ccd49941d 100644 --- a/source/driver_run.cpp +++ b/source/driver_run.cpp @@ -59,7 +59,7 @@ void Driver::driver_run() Run_MD_PW run_md_pw; run_md_pw.md_ions_pw(p_esolver); } - else // cell relaxations + else // scf; cell relaxation; nscf; etc { Ions ions; ions.opt_ions(p_esolver); diff --git a/source/input.cpp b/source/input.cpp index 05f7f82178..96fe8ac371 100644 --- a/source/input.cpp +++ b/source/input.cpp @@ -2494,6 +2494,15 @@ void Input::Check(void) } else if(calculation == "test_neighbour") { + this->relax_nmax = 1; + } + else if(calculation == "gen_jle") + { + this->relax_nmax = 1; + if(basis_type != "pw") + { + ModuleBase::WARNING_QUIT("Input","to generate descriptors, please use pw basis"); + } } else { diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 1f4467bdd5..a7dec410a0 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -161,6 +161,8 @@ namespace ModuleESolver void ESolver_KS_PW::beforescf(int istep) { + ModuleBase::TITLE("ESolver_KS_PW", "beforescf"); + //init Hamilt, this should be allocated before each scf loop //Operators in HamiltPW should be reallocated once cell changed //delete Hamilt if not first scf @@ -175,7 +177,6 @@ namespace ModuleESolver this->phami = new hamilt::HamiltPW(); } - //---------------------------------------------------------- // about vdw, jiyy add vdwd3 and linpz add vdwd2 //---------------------------------------------------------- @@ -222,6 +223,15 @@ namespace ModuleESolver return; } + if (GlobalV::CALCULATION == "gen_jle") + { + // caoyu add 2020-11-24, mohan updat 2021-01-03 + Numerical_Descriptor nc; + nc.output_descriptor(this->psi[0], INPUT.deepks_descriptor_lmax); + ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running,"GENERATE DESCRIPTOR FOR DEEPKS"); + return; + } + // self consistent calculations for electronic ground state if (GlobalV::CALCULATION == "nscf") { @@ -621,14 +631,6 @@ namespace ModuleESolver // compute density of states GlobalC::en.perform_dos_pw(); - // caoyu add 2020-11-24, mohan updat 2021-01-03 - if(GlobalV::BASIS_TYPE=="pw" && GlobalV::deepks_out_labels) - { - Numerical_Descriptor nc; - nc.output_descriptor(this->psi[0], INPUT.deepks_descriptor_lmax); - ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running,"GENERATE DESCRIPTOR FOR DEEPKS"); - } - if(GlobalV::BASIS_TYPE=="pw" && winput::out_spillage) //xiaohui add 2013-09-01 { //std::cout << "\n Output Spillage Information : " << std::endl; diff --git a/source/src_io/numerical_descriptor.cpp b/source/src_io/numerical_descriptor.cpp index ac85788e2b..5baf2980bd 100644 --- a/source/src_io/numerical_descriptor.cpp +++ b/source/src_io/numerical_descriptor.cpp @@ -48,6 +48,10 @@ void Numerical_Descriptor::output_descriptor(const psi::Psi assert(nmax>0); + // Currently we are not considering doing DeePKS in PW basis + // hence this subroutine is used only for generating projectors and save to jle.orb + // As a result, I will return here and the rest of the code is saved for future use + return; //----------------------------------- // 2. Open the file diff --git a/tests/deepks/CASES b/tests/deepks/CASES index 1c897cc739..4b299999a7 100644 --- a/tests/deepks/CASES +++ b/tests/deepks/CASES @@ -1,6 +1,6 @@ -601_PW_deepks_s_H2O -601_PW_deepks_p_H2O -601_PW_deepks_d_H2O +#601_PW_deepks_s_H2O +#601_PW_deepks_p_H2O +#601_PW_deepks_d_H2O 602_NO_deepks_d_H2O_scf_lda2pbe 603_NO_deepks_H2O_multik 603_NO_deepks_CH4 From 040ef5aa08a75461dc185b906247de50751f1433 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Mon, 22 Aug 2022 20:15:23 +0800 Subject: [PATCH 44/63] optimize stochastic DOS and reduce a lot of time in loop --- .../module_esolver/esolver_sdft_pw_tool.cpp | 86 ++++++++++++------- 1 file changed, 55 insertions(+), 31 deletions(-) diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index 123caf8959..d04392f5f3 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -94,6 +94,7 @@ void ESolver_SDFT_PW::check_che(const int nche_in) void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double wcut, const double dw_in, const int times) { + ModuleBase::TITLE(this->classname,"sKG"); ModuleBase::timer::tick(this->classname,"sKG"); cout<<"Calculating conductivity...."<classname,"caldos"); + ModuleBase::timer::tick(this->classname,"caldos"); cout<<"========================="<stowf.nchip_max / npart); allorderchi = new std::complex [nchip_new * npwx * nche_dos]; } + ModuleBase::timer::tick(this->classname,"Tracepoly"); cout<<"1. TracepolyA:"<classname,"Tracepoly"); + cout<<"2. Dos:"<classname,"DOS Loop"); int n10 = ndos/10; int percent = 10; + double *sto_dos = new double [ndos]; + double *ks_dos = new double [ndos]; + double *error = new double [ndos]; for(int ie = 0; ie < ndos; ++ie) { - double KS_dos = 0; - double sto_dos = 0; + double tmpks = 0; + double tmpsto = 0; stoiter.stofunc.targ_e = (emin + ie * de) / ModuleBase::Ry_to_eV; if(stoiter.method == 1) { che.calcoef_real(&stoiter.stofunc, &Sto_Func::ngauss); - sto_dos = BlasConnector::dot(nche_dos,che.coef_real,1,spolyv,1); + tmpsto = BlasConnector::dot(nche_dos,che.coef_real,1,spolyv,1); } else { che.calcoef_real(&stoiter.stofunc, &Sto_Func::nroot_gauss); - sto_dos = stoiter.vTMv(che.coef_real,spolyv,nche_dos); + tmpsto = stoiter.vTMv(che.coef_real,spolyv,nche_dos); } if(GlobalV::NBANDS > 0) { @@ -566,46 +570,66 @@ void ESolver_SDFT_PW:: caldos( const int nche_dos, const double sigmain, const d double *en=&(this->pelec->ekb(ik, 0)); for(int ib = 0; ib < GlobalV::NBANDS; ++ib) { - KS_dos += stoiter.stofunc.gauss(en[ib]) * GlobalC::kv.wk[ik] / 2 ; + tmpks += stoiter.stofunc.gauss(en[ib]) * GlobalC::kv.wk[ik] / 2 ; } } } - KS_dos /= GlobalV::NPROC_IN_POOL; -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &KS_dos, 1, MPI_DOUBLE, MPI_SUM , STO_WORLD); - MPI_Allreduce(MPI_IN_PLACE, &sto_dos, 1, MPI_DOUBLE, MPI_SUM , MPI_COMM_WORLD); -#endif - double tmpre = 0; + tmpks /= GlobalV::NPROC_IN_POOL; + + double tmperror = 0; if(stoiter.method == 1) { - tmpre = che.coef_real[nche_dos-1] * spolyv[nche_dos-1]; + tmperror = che.coef_real[nche_dos-1] * spolyv[nche_dos-1]; } else { const int norder = nche_dos; double last_coef = che.coef_real[norder-1]; double last_spolyv = spolyv[norder*norder - 1]; - tmpre = last_coef *(BlasConnector::dot(norder,che.coef_real,1,spolyv+norder*(norder-1),1) + tmperror = last_coef *(BlasConnector::dot(norder,che.coef_real,1,spolyv+norder*(norder-1),1) + BlasConnector::dot(norder,che.coef_real,1,spolyv+norder-1,norder)-last_coef*last_spolyv); } -#ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &tmpre, 1, MPI_DOUBLE, MPI_SUM , MPI_COMM_WORLD); -#endif - if(maxerror < tmpre) maxerror = tmpre; - dos[ie] = (KS_dos + sto_dos) / ModuleBase::Ry_to_eV; - sum += dos[ie]; - ofsdos <classname,"DOS Loop"); + ModuleBase::timer::tick(this->classname,"caldos"); return; } From bdb17f03f95e59f6f2ff0b9c8bee5478fb567b0f Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Tue, 23 Aug 2022 09:36:38 +0800 Subject: [PATCH 45/63] change cout --- source/module_esolver/esolver_sdft_pw_tool.cpp | 4 ++-- source/src_pw/sto_iter.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index d04392f5f3..6e652349da 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -133,7 +133,7 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w stoiter.stofunc.t = dt; chet.calcoef_pair(&stoiter.stofunc, &Sto_Func::ncos, &Sto_Func::nsin); chet2.calcoef_pair(&stoiter.stofunc, &Sto_Func::ncos, &Sto_Func::n_sin); - cout<<"Chebyshev precision: "< thr) { stringstream ss; @@ -211,7 +211,7 @@ void Stochastic_Iter::check_precision(const double ref, const double thr, const ss.clear(); ss<>tartxt; - string warningtxt = "( "+info+" Chebyshev error = "+fractxt+" > threshold = "+tartxt+" ) Maybe you should increase the parameter \"nche_sto\" for more accuracy."; + string warningtxt = "( "+info+" relative Chebyshev error = "+fractxt+" > threshold = "+tartxt+" ) Maybe you should increase the parameter \"nche_sto\" for more accuracy."; ModuleBase::WARNING("Stochastic_Chebychev", warningtxt); } //=============================== From fcc8e8d3ec9878ec9ae8598ea89c097e3e577b0f Mon Sep 17 00:00:00 2001 From: dyzheng Date: Tue, 23 Aug 2022 14:07:37 +0800 Subject: [PATCH 46/63] Fix: add CHECK_WARNING_QUIT function for reporting no plane wave error --- source/module_base/tool_quit.cpp | 21 +++++++++++++++++++++ source/module_base/tool_quit.h | 8 ++++++++ source/module_pw/pw_basis_k.cpp | 1 + 3 files changed, 30 insertions(+) diff --git a/source/module_base/tool_quit.cpp b/source/module_base/tool_quit.cpp index 8e382c657a..415e939988 100644 --- a/source/module_base/tool_quit.cpp +++ b/source/module_base/tool_quit.cpp @@ -128,4 +128,25 @@ void WARNING_QUIT(const std::string &file,const std::string &description) QUIT(); } + +//Input judgement and communicate , if any judgement is true, do WARNING_QUIT +void CHECK_WARNING_QUIT(bool error_in, const std::string &file,const std::string &description) +{ + int error = (int)error_in; +#ifdef __NORMAL +// only for UT, do nothing here +#else +#ifdef __MPI + int error_max = error; + MPI_Reduce(&error, &error_max, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD); + MPI_Bcast(&error_max, 1, MPI_INT, 0, MPI_COMM_WORLD); + error = error_max; +#endif +#endif + if(error) + { + WARNING_QUIT(file, description); + } +} + } diff --git a/source/module_base/tool_quit.h b/source/module_base/tool_quit.h index dd001517e8..bedc6b011d 100644 --- a/source/module_base/tool_quit.h +++ b/source/module_base/tool_quit.h @@ -43,6 +43,14 @@ void QUIT(void); */ void WARNING_QUIT(const std::string &file, const std::string &description); +/** + * @brief Check, if true, WARNING_QUIT + * + * @param file The file where warning happens + * @param description The warning information + */ +void CHECK_WARNING_QUIT(bool error, const std::string &file,const std::string &description); + } // namespace ModuleBase #endif diff --git a/source/module_pw/pw_basis_k.cpp b/source/module_pw/pw_basis_k.cpp index 4b81c9b258..9ee84af36a 100644 --- a/source/module_pw/pw_basis_k.cpp +++ b/source/module_pw/pw_basis_k.cpp @@ -80,6 +80,7 @@ void PW_Basis_K::setupIndGk() ++ng; } } + ModuleBase::CHECK_WARNING_QUIT((ng==0), "PW_Basis_K::setupIndGk", "some cores have no plane waves!"); this->npwk[ik] = ng; if(ng == 0) { From c1394c42050a68133cbee7e25d8ffc00c2735ef0 Mon Sep 17 00:00:00 2001 From: dyzheng <49852742+dyzheng@users.noreply.github.com> Date: Tue, 23 Aug 2022 14:09:39 +0800 Subject: [PATCH 47/63] Fix: typo in annotation Co-authored-by: Chun Cai --- source/module_hamilt/ks_pw/veff_pw.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/module_hamilt/ks_pw/veff_pw.cpp b/source/module_hamilt/ks_pw/veff_pw.cpp index f37900bd06..865aa35f19 100644 --- a/source/module_hamilt/ks_pw/veff_pw.cpp +++ b/source/module_hamilt/ks_pw/veff_pw.cpp @@ -48,8 +48,8 @@ void Veff::act { wfcpw->recip2real(tmpsi_in, porter, ik); // NOTICE: when MPI threads are larger than number of Z grids - // veff would contain nothing, and nothing should be do in real space - // but the 3DFFT can not be skipped, it will cause stuck + // veff would contain nothing, and nothing should be done in real space + // but the 3DFFT can not be skipped, it will cause hanging if(this->veff->nc != 0) { const double* current_veff = &(this->veff[0](current_spin, 0)); From 94c011d06e6a0ed960a29350865497ead589c646 Mon Sep 17 00:00:00 2001 From: dyzheng Date: Tue, 23 Aug 2022 14:50:52 +0800 Subject: [PATCH 48/63] Fix: error for kpar != 1 --- source/module_pw/pw_basis_k.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/module_pw/pw_basis_k.cpp b/source/module_pw/pw_basis_k.cpp index 9ee84af36a..17b185508d 100644 --- a/source/module_pw/pw_basis_k.cpp +++ b/source/module_pw/pw_basis_k.cpp @@ -69,6 +69,8 @@ void PW_Basis_K::setupIndGk() //count npwk this->npwk_max = 0; delete[] this->npwk; this->npwk = new int [this->nks]; + //minimun npw, only for check + int npwk_min = this->npw; for (int ik = 0; ik < this->nks; ik++) { int ng = 0; @@ -80,7 +82,6 @@ void PW_Basis_K::setupIndGk() ++ng; } } - ModuleBase::CHECK_WARNING_QUIT((ng==0), "PW_Basis_K::setupIndGk", "some cores have no plane waves!"); this->npwk[ik] = ng; if(ng == 0) { @@ -90,7 +91,12 @@ void PW_Basis_K::setupIndGk() { this->npwk_max = ng; } + if ( npwk_min > ng) + { + npwk_min = ng; + } } + ModuleBase::CHECK_WARNING_QUIT((npwk_min==0), "PW_Basis_K::setupIndGk", "some cores have no plane waves!"); //get igl2isz_k and igl2ig_k delete[] igl2isz_k; this->igl2isz_k = new int [this->nks * this->npwk_max]; From 428e01f43fa2b048200cd3a7f9dc6cf0460f53d2 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 23 Aug 2022 15:32:09 +0800 Subject: [PATCH 49/63] gint : put charge extrapolation in Esolver --- source/module_esolver/esolver_ks.cpp | 3 + source/module_esolver/esolver_ks.h | 2 + .../module_esolver/esolver_ks_lcao_elec.cpp | 18 ++++++ source/module_esolver/esolver_ks_pw.cpp | 18 ++++++ source/src_ions/ions.cpp | 16 ----- source/src_ions/ions.h | 2 - source/src_lcao/run_md_lcao.cpp | 1 + source/src_pw/charge_extra.cpp | 61 ++++++++++--------- source/src_pw/charge_extra.h | 6 ++ source/src_pw/run_md_pw.cpp | 1 + 10 files changed, 81 insertions(+), 47 deletions(-) diff --git a/source/module_esolver/esolver_ks.cpp b/source/module_esolver/esolver_ks.cpp index 3e9aeb7158..c9afb48df4 100644 --- a/source/module_esolver/esolver_ks.cpp +++ b/source/module_esolver/esolver_ks.cpp @@ -95,6 +95,9 @@ namespace ModuleESolver ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT CHARGE"); // Initializee the potential. GlobalC::pot.allocate(GlobalC::rhopw->nrxx); + + // Initialize charge extrapolation + CE.Init_CE(); } void ESolver_KS::hamilt2density(const int istep, const int iter, const double ethr) diff --git a/source/module_esolver/esolver_ks.h b/source/module_esolver/esolver_ks.h index efd9559e13..fe7fa37fbd 100644 --- a/source/module_esolver/esolver_ks.h +++ b/source/module_esolver/esolver_ks.h @@ -8,6 +8,7 @@ #include "module_elecstate/elecstate.h" #include "module_pw/pw_basis_k.h" #include "src_io/cal_test.h" +#include "../src_pw/charge_extra.h" // #include "estates.h" // #include "h2e.h" namespace ModuleESolver @@ -69,6 +70,7 @@ namespace ModuleESolver elecstate::ElecState* pelec = nullptr; hamilt::Hamilt* phami = nullptr; ModulePW::PW_Basis_K* pw_wfc = nullptr; + Charge_Extra CE; protected: std::string basisname; //PW or LCAO diff --git a/source/module_esolver/esolver_ks_lcao_elec.cpp b/source/module_esolver/esolver_ks_lcao_elec.cpp index f5d329ff73..697846ccd7 100644 --- a/source/module_esolver/esolver_ks_lcao_elec.cpp +++ b/source/module_esolver/esolver_ks_lcao_elec.cpp @@ -232,6 +232,24 @@ namespace ModuleESolver ModuleBase::TITLE("ESolver_KS_LCAO", "beforescf"); ModuleBase::timer::tick("ESolver_KS_LCAO", "beforescf"); + if(GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax") + { + if(GlobalC::ucell.ionic_position_updated) + { + GlobalV::ofs_running << " Setup the extrapolated charge." << std::endl; + // charge extrapolation if istep>0. + CE.update_istep(istep); + CE.update_all_pos(GlobalC::ucell); + CE.extrapolate_charge(); + CE.save_pos_next(GlobalC::ucell); + + GlobalV::ofs_running << " Setup the Vl+Vh+Vxc according to new structure factor and new charge." << std::endl; + // calculate the new potential accordint to + // the new charge density. + GlobalC::pot.init_pot( istep-1, GlobalC::sf.strucFac ); + } + } + //---------------------------------------------------------- // about vdw, jiyy add vdwd3 and linpz add vdwd2 //---------------------------------------------------------- diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index a7dec410a0..580188dae9 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -163,6 +163,24 @@ namespace ModuleESolver { ModuleBase::TITLE("ESolver_KS_PW", "beforescf"); + if(GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax") + { + if(GlobalC::ucell.ionic_position_updated) + { + GlobalV::ofs_running << " Setup the extrapolated charge." << std::endl; + // charge extrapolation if istep>0. + CE.update_istep(istep); + CE.update_all_pos(GlobalC::ucell); + CE.extrapolate_charge(); + CE.save_pos_next(GlobalC::ucell); + + GlobalV::ofs_running << " Setup the Vl+Vh+Vxc according to new structure factor and new charge." << std::endl; + // calculate the new potential accordint to + // the new charge density. + GlobalC::pot.init_pot( istep-1, GlobalC::sf.strucFac ); + } + } + //init Hamilt, this should be allocated before each scf loop //Operators in HamiltPW should be reallocated once cell changed //delete Hamilt if not first scf diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 3cee8a1de8..7987758ae1 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -64,7 +64,6 @@ void Ions::opt_ions(ModuleESolver::ESolver *p_esolver) } time_t fend = time(NULL); - if(GlobalV::OUT_LEVEL=="i") { double etime_min = difftime(eend, estart)/60.0; @@ -211,21 +210,6 @@ void Ions::reset_after_relax(const int& istep) ModuleBase::TITLE("Ions","reset_after_relax"); GlobalV::ofs_running << " Setup the structure factor in plane wave basis." << std::endl; GlobalC::sf.setup_structure_factor(&GlobalC::ucell,GlobalC::rhopw); - - GlobalV::ofs_running << " Setup the extrapolated charge." << std::endl; - // charge extrapolation if istep>0. - CE.update_istep(istep); - CE.update_all_pos(GlobalC::ucell); - CE.extrapolate_charge(); - CE.save_pos_next(GlobalC::ucell); - - GlobalV::ofs_running << " Setup the Vl+Vh+Vxc according to new structure factor and new charge." << std::endl; - // calculate the new potential accordint to - // the new charge density. - GlobalC::pot.init_pot( istep, GlobalC::sf.strucFac ); - - GlobalV::ofs_running << " Setup the new wave functions?" << std::endl; - //GlobalC::wf.wfcinit(); } void Ions::reset_after_cellrelax(int& f_step, int& s_step, ModuleESolver::ESolver *p_esolver) diff --git a/source/src_ions/ions.h b/source/src_ions/ions.h index 3801817843..04d8589e47 100644 --- a/source/src_ions/ions.h +++ b/source/src_ions/ions.h @@ -33,8 +33,6 @@ class Ions //MD md; //mohan add 2011-11-07 - Charge_Extra CE; - Lattice_Change_Methods LCM; //seperate force_stress function first diff --git a/source/src_lcao/run_md_lcao.cpp b/source/src_lcao/run_md_lcao.cpp index 09e5b45a42..64257b5cf3 100644 --- a/source/src_lcao/run_md_lcao.cpp +++ b/source/src_lcao/run_md_lcao.cpp @@ -24,6 +24,7 @@ Run_MD_LCAO::Run_MD_LCAO() { cellchange = false; + CE.Init_CE(); } Run_MD_LCAO::~Run_MD_LCAO() diff --git a/source/src_pw/charge_extra.cpp b/source/src_pw/charge_extra.cpp index d9618bdce9..2d1510e41d 100644 --- a/source/src_pw/charge_extra.cpp +++ b/source/src_pw/charge_extra.cpp @@ -7,6 +7,38 @@ // #endif Charge_Extra::Charge_Extra() +{ +} + +Charge_Extra::~Charge_Extra() +{ + if(pot_order > 1) + { + for(int is=0; is 2) + // { + // for(int is=0; is 1) - { - for(int is=0; is 2) - // { - // for(int is=0; is Date: Tue, 23 Aug 2022 17:05:46 +0800 Subject: [PATCH 50/63] Refactor: added template for Operator --- .../module_esolver/esolver_sdft_pw_tool.cpp | 8 +++---- source/module_hamilt/hamilt.h | 2 +- source/module_hamilt/hamilt_pw.cpp | 8 +++---- source/module_hamilt/ks_pw/ekinetic_pw.cpp | 4 ---- source/module_hamilt/ks_pw/ekinetic_pw.h | 12 +++++++++-- source/module_hamilt/ks_pw/meta_pw.cpp | 4 ---- source/module_hamilt/ks_pw/meta_pw.h | 12 +++++++++-- source/module_hamilt/ks_pw/nonlocal_pw.cpp | 6 ------ source/module_hamilt/ks_pw/nonlocal_pw.h | 12 +++++++++-- source/module_hamilt/ks_pw/operator_pw.h | 2 +- source/module_hamilt/ks_pw/veff_pw.cpp | 4 ---- source/module_hamilt/ks_pw/veff_pw.h | 12 +++++++++-- source/module_hamilt/operator.h | 21 ++++++++++++------- source/module_hsolver/diago_cg.cpp | 2 +- source/module_hsolver/diago_david.cpp | 2 +- source/module_hsolver/diago_iter_assist.cpp | 4 ++-- 16 files changed, 67 insertions(+), 48 deletions(-) diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index 493be88140..896ed26a38 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -245,20 +245,20 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w // this->phami->hPsi(j1psi.get_pointer(), j2psi.get_pointer(), ndim*totbands_per*npwx); // this->phami->hPsi(j1sfpsi.get_pointer(), j2sfpsi.get_pointer(), ndim*totbands_per*npwx); psi::Range allbands(1,0,0,totbands_per-1); - hamilt::Operator::hpsi_info info_psi0(&psi0, allbands); + hamilt::Operator>::hpsi_info info_psi0(&psi0, allbands); const std::complex* hpsi_out = std::get<0>(this->phami->ops->hPsi(info_psi0))->get_pointer(); ModuleBase::GlobalFunc::COPYARRAY(hpsi_out, hpsi0.get_pointer(), totbands_per*npwx); - hamilt::Operator::hpsi_info info_sfpsi0(&sfpsi0, allbands); + hamilt::Operator>::hpsi_info info_sfpsi0(&sfpsi0, allbands); const std::complex* hsfpsi_out = std::get<0>(this->phami->ops->hPsi(info_sfpsi0))->get_pointer(); ModuleBase::GlobalFunc::COPYARRAY(hsfpsi_out, hsfpsi0.get_pointer(), totbands_per*npwx); psi::Range allndimbands(1,0,0,ndim*totbands_per-1); - hamilt::Operator::hpsi_info info_j1psi(&j1psi, allndimbands); + hamilt::Operator>::hpsi_info info_j1psi(&j1psi, allndimbands); const std::complex* hj1psi_out = std::get<0>(this->phami->ops->hPsi(info_j1psi))->get_pointer(); ModuleBase::GlobalFunc::COPYARRAY(hj1psi_out, j2psi.get_pointer(), ndim*totbands_per*npwx); - hamilt::Operator::hpsi_info info_j1sfpsi(&j1sfpsi, allndimbands); + hamilt::Operator>::hpsi_info info_j1sfpsi(&j1sfpsi, allndimbands); const std::complex* hj1sfpsi_out = std::get<0>(this->phami->ops->hPsi(info_j1sfpsi))->get_pointer(); ModuleBase::GlobalFunc::COPYARRAY(hj1sfpsi_out, j2sfpsi.get_pointer(), ndim*totbands_per*npwx); diff --git a/source/module_hamilt/hamilt.h b/source/module_hamilt/hamilt.h index 487ced4528..3ff6d03a2c 100644 --- a/source/module_hamilt/hamilt.h +++ b/source/module_hamilt/hamilt.h @@ -34,7 +34,7 @@ class Hamilt int non_first_scf=0; // first node operator, add operations from each operators - Operator* ops = nullptr; + Operator>* ops = nullptr; }; } // namespace hamilt diff --git a/source/module_hamilt/hamilt_pw.cpp b/source/module_hamilt/hamilt_pw.cpp index 30d055397a..d2876c8c95 100644 --- a/source/module_hamilt/hamilt_pw.cpp +++ b/source/module_hamilt/hamilt_pw.cpp @@ -25,7 +25,7 @@ HamiltPW::HamiltPW() if (GlobalV::T_IN_H) { - Operator* ekinetic = new Ekinetic( + Operator>* ekinetic = new Ekinetic( tpiba2, gk2, GlobalC::wfcpw->npwk_max @@ -41,7 +41,7 @@ HamiltPW::HamiltPW() } if (GlobalV::VL_IN_H) { - Operator* veff = new Veff( + Operator>* veff = new Veff( isk, &(GlobalC::pot.vr_eff), GlobalC::wfcpw @@ -57,7 +57,7 @@ HamiltPW::HamiltPW() } if (GlobalV::VNL_IN_H) { - Operator* nonlocal = new Nonlocal( + Operator>* nonlocal = new Nonlocal( isk, &GlobalC::ppcell, &GlobalC::ucell @@ -71,7 +71,7 @@ HamiltPW::HamiltPW() this->ops->add(nonlocal); } } - Operator* meta = new Meta( + Operator>* meta = new Meta( tpiba, isk, &GlobalC::pot.vofk, diff --git a/source/module_hamilt/ks_pw/ekinetic_pw.cpp b/source/module_hamilt/ks_pw/ekinetic_pw.cpp index 062ed1a722..ac43a61129 100644 --- a/source/module_hamilt/ks_pw/ekinetic_pw.cpp +++ b/source/module_hamilt/ks_pw/ekinetic_pw.cpp @@ -6,9 +6,6 @@ namespace hamilt { -template class Ekinetic; - -template<> Ekinetic::Ekinetic( double tpiba2_in, const double* gk2_in, @@ -26,7 +23,6 @@ Ekinetic::Ekinetic( } } -template<> void Ekinetic::act ( const psi::Psi> *psi_in, diff --git a/source/module_hamilt/ks_pw/ekinetic_pw.h b/source/module_hamilt/ks_pw/ekinetic_pw.h index d92b056096..e6846fb62e 100644 --- a/source/module_hamilt/ks_pw/ekinetic_pw.h +++ b/source/module_hamilt/ks_pw/ekinetic_pw.h @@ -6,8 +6,16 @@ namespace hamilt { -template -class Ekinetic : public T +#ifndef __EKINETICTEMPLATE +#define __EKINETICTEMPLATE + +template class Ekinetic : public T +{}; + +#endif + +template<> +class Ekinetic : public OperatorPW { public: Ekinetic( diff --git a/source/module_hamilt/ks_pw/meta_pw.cpp b/source/module_hamilt/ks_pw/meta_pw.cpp index c0274ca7bb..0b5517d6a2 100644 --- a/source/module_hamilt/ks_pw/meta_pw.cpp +++ b/source/module_hamilt/ks_pw/meta_pw.cpp @@ -10,9 +10,6 @@ namespace hamilt { -template class Meta; - -template<> Meta::Meta( double tpiba_in, const int* isk_in, @@ -31,7 +28,6 @@ Meta::Meta( } } -template<> void Meta::act ( const psi::Psi> *psi_in, diff --git a/source/module_hamilt/ks_pw/meta_pw.h b/source/module_hamilt/ks_pw/meta_pw.h index 5a25d17c8e..030b61b769 100644 --- a/source/module_hamilt/ks_pw/meta_pw.h +++ b/source/module_hamilt/ks_pw/meta_pw.h @@ -8,8 +8,16 @@ namespace hamilt { -template -class Meta : public T +#ifndef __METATEMPLATE +#define __METATEMPLATE + +template class Meta : public T +{}; + +#endif + +template<> +class Meta : public OperatorPW { public: Meta( diff --git a/source/module_hamilt/ks_pw/nonlocal_pw.cpp b/source/module_hamilt/ks_pw/nonlocal_pw.cpp index b065fed057..0858668c27 100644 --- a/source/module_hamilt/ks_pw/nonlocal_pw.cpp +++ b/source/module_hamilt/ks_pw/nonlocal_pw.cpp @@ -10,9 +10,6 @@ namespace hamilt { -template class Nonlocal; - -template<> Nonlocal::Nonlocal ( const int* isk_in, @@ -30,7 +27,6 @@ Nonlocal::Nonlocal } } -template<> void Nonlocal::init(const int ik_in) { this->ik = ik_in; @@ -49,7 +45,6 @@ void Nonlocal::init(const int ik_in) //-------------------------------------------------------------------------- // this function sum up each non-local pseudopotential located on each atom, //-------------------------------------------------------------------------- -template<> void Nonlocal::add_nonlocal_pp(std::complex *hpsi_in, const std::complex *becp, const int m) const { ModuleBase::timer::tick("Nonlocal", "add_nonlocal_pp"); @@ -170,7 +165,6 @@ void Nonlocal::add_nonlocal_pp(std::complex *hpsi_in, const return; } -template<> void Nonlocal::act ( const psi::Psi> *psi_in, diff --git a/source/module_hamilt/ks_pw/nonlocal_pw.h b/source/module_hamilt/ks_pw/nonlocal_pw.h index 2b57f611cc..c76978adf6 100644 --- a/source/module_hamilt/ks_pw/nonlocal_pw.h +++ b/source/module_hamilt/ks_pw/nonlocal_pw.h @@ -10,8 +10,16 @@ namespace hamilt { -template -class Nonlocal : public T +#ifndef __NONLOCALTEMPLATE +#define __NONLOCALTEMPLATE + +template class Nonlocal : public T +{}; + +#endif + +template<> +class Nonlocal : public OperatorPW { public: Nonlocal( diff --git a/source/module_hamilt/ks_pw/operator_pw.h b/source/module_hamilt/ks_pw/operator_pw.h index 1ecc0c8cc8..29f1c1306d 100644 --- a/source/module_hamilt/ks_pw/operator_pw.h +++ b/source/module_hamilt/ks_pw/operator_pw.h @@ -6,7 +6,7 @@ namespace hamilt { -class OperatorPW : public Operator +class OperatorPW : public Operator> { public: virtual ~OperatorPW(){}; diff --git a/source/module_hamilt/ks_pw/veff_pw.cpp b/source/module_hamilt/ks_pw/veff_pw.cpp index ade8ddeaa1..8592aee6aa 100644 --- a/source/module_hamilt/ks_pw/veff_pw.cpp +++ b/source/module_hamilt/ks_pw/veff_pw.cpp @@ -7,9 +7,6 @@ namespace hamilt { -template class Veff; - -template<> Veff::Veff( const int* isk_in, const ModuleBase::matrix* veff_in, @@ -26,7 +23,6 @@ Veff::Veff( } } -template<> void Veff::act ( const psi::Psi> *psi_in, diff --git a/source/module_hamilt/ks_pw/veff_pw.h b/source/module_hamilt/ks_pw/veff_pw.h index 978689f4d5..5008eaef4e 100644 --- a/source/module_hamilt/ks_pw/veff_pw.h +++ b/source/module_hamilt/ks_pw/veff_pw.h @@ -8,8 +8,16 @@ namespace hamilt { -template -class Veff : public T +#ifndef __VEFFTEMPLATE +#define __VEFFTEMPLATE + +template class Veff : public T +{}; + +#endif + +template<> +class Veff : public OperatorPW { public: Veff( diff --git a/source/module_hamilt/operator.h b/source/module_hamilt/operator.h index a5d4aa1967..bd9f497c3e 100644 --- a/source/module_hamilt/operator.h +++ b/source/module_hamilt/operator.h @@ -8,6 +8,11 @@ namespace hamilt { +// Basic class for operator module, +// it is designed for "O|psi>" and "" +// Operator "O" might have several different types, which should be calculated one by one. +// In basic class , function add() is designed for combine all operators together with a chain. +template class Operator { public: @@ -25,12 +30,12 @@ class Operator } } - typedef std::tuple>*, const psi::Range> hpsi_info; + //this is the core function for Operator + // do H|psi> from input |psi> , + // output of hpsi would be first member of the returned tuple + typedef std::tuple*, const psi::Range> hpsi_info; virtual hpsi_info hPsi(const hpsi_info& input)const {return hpsi_info(nullptr, 0);} - virtual void act(std::complex *hk_matrix)const {return;} - virtual void act(double *hk_matrix)const {return;} - virtual void init(const int ik_in) { this->ik = ik_in; @@ -67,9 +72,9 @@ class Operator Operator* next_op = nullptr; //if this Operator is first node in chain table, hpsi would not be empty - mutable psi::Psi>* hpsi = nullptr; + mutable psi::Psi* hpsi = nullptr; - std::complex* get_hpsi(const hpsi_info& info)const + T* get_hpsi(const hpsi_info& info)const { const int nbands_range = (std::get<1>(info).range_2 - std::get<1>(info).range_1 + 1); //recursive call of hPsi, hpsi inputs as new psi, @@ -87,9 +92,9 @@ class Operator this->recursive = true; } //create a new hpsi - this->hpsi = new psi::Psi>(std::get<0>(info)[0], 1, nbands_range); + this->hpsi = new psi::Psi(std::get<0>(info)[0], 1, nbands_range); - std::complex* pointer_hpsi = this->hpsi->get_pointer(); + T* pointer_hpsi = this->hpsi->get_pointer(); size_t total_hpsi_size = nbands_range * this->hpsi->get_nbasis(); ModuleBase::GlobalFunc::ZEROS(pointer_hpsi, total_hpsi_size); return pointer_hpsi; diff --git a/source/module_hsolver/diago_cg.cpp b/source/module_hsolver/diago_cg.cpp index 7388c38da5..6533c8024f 100644 --- a/source/module_hsolver/diago_cg.cpp +++ b/source/module_hsolver/diago_cg.cpp @@ -10,7 +10,7 @@ namespace hsolver { -typedef hamilt::Operator::hpsi_info hp_info; +typedef hamilt::Operator>::hpsi_info hp_info; DiagoCG::DiagoCG(const double *precondition_in) { diff --git a/source/module_hsolver/diago_david.cpp b/source/module_hsolver/diago_david.cpp index be59f37dde..d99e35d86b 100644 --- a/source/module_hsolver/diago_david.cpp +++ b/source/module_hsolver/diago_david.cpp @@ -8,7 +8,7 @@ namespace hsolver { -typedef hamilt::Operator::hpsi_info hp_info; +typedef hamilt::Operator>::hpsi_info hp_info; int DiagoDavid::PW_DIAG_NDIM = 4; diff --git a/source/module_hsolver/diago_iter_assist.cpp b/source/module_hsolver/diago_iter_assist.cpp index 696a7b3a84..13de5c6413 100644 --- a/source/module_hsolver/diago_iter_assist.cpp +++ b/source/module_hsolver/diago_iter_assist.cpp @@ -51,7 +51,7 @@ void DiagoIterAssist::diagH_subspace(hamilt::Hamilt* pHamilt, const std::complex *ppsi = psi.get_pointer(); psi::Range all_bands_range(1, psi.get_current_k(), 0, psi.get_nbands()-1); - hamilt::Operator::hpsi_info hpsi_in(&psi, all_bands_range); + hamilt::Operator>::hpsi_info hpsi_in(&psi, all_bands_range); const std::complex *aux = std::get<0>(pHamilt->ops->hPsi(hpsi_in))->get_pointer(); char trans1 = 'C'; @@ -188,7 +188,7 @@ void DiagoIterAssist::diagH_subspace_init(hamilt::Hamilt* pHamilt, const std::complex *ppsi = psi_temp.get_pointer(); psi::Range all_bands_range(1, 0, 0, nstart-1); - hamilt::Operator::hpsi_info hpsi_in(&psi_temp, all_bands_range); + hamilt::Operator>::hpsi_info hpsi_in(&psi_temp, all_bands_range); const std::complex *aux = std::get<0>(pHamilt->ops->hPsi(hpsi_in))->get_pointer(); char trans1 = 'C'; From d5bfeafc280e678dab2a500156aac745c305ff7f Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Wed, 24 Aug 2022 15:16:17 +0800 Subject: [PATCH 51/63] rewrite check_warning_quit --- source/module_base/tool_quit.cpp | 42 ++++++++++++++++++++--------- source/module_base/tool_quit.h | 2 +- source/module_pw/pw_basis.cpp | 8 +++--- source/module_pw/pw_basis_k.cpp | 15 +++-------- source/module_pw/pw_distributeg.cpp | 1 + 5 files changed, 41 insertions(+), 27 deletions(-) diff --git a/source/module_base/tool_quit.cpp b/source/module_base/tool_quit.cpp index 415e939988..87b4e23b96 100644 --- a/source/module_base/tool_quit.cpp +++ b/source/module_base/tool_quit.cpp @@ -11,6 +11,7 @@ #include "global_file.h" #include "timer.h" #include "memory.h" +#include "input.h" #endif namespace ModuleBase @@ -129,24 +130,41 @@ void WARNING_QUIT(const std::string &file,const std::string &description) } -//Input judgement and communicate , if any judgement is true, do WARNING_QUIT -void CHECK_WARNING_QUIT(bool error_in, const std::string &file,const std::string &description) +//Check and print warning information for all cores. +//Maybe in the future warning.log should be replaced by error.log. +void CHECK_WARNING_QUIT(const bool error_in, const std::string &file,const std::string &description) { - int error = (int)error_in; #ifdef __NORMAL // only for UT, do nothing here #else -#ifdef __MPI - int error_max = error; - MPI_Reduce(&error, &error_max, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD); - MPI_Bcast(&error_max, 1, MPI_INT, 0, MPI_COMM_WORLD); - error = error_max; -#endif -#endif - if(error) + if(error_in) { - WARNING_QUIT(file, description); + //All cores will print inforamtion + std::cout.clear(); + if(!GlobalV::ofs_running.is_open()) + { + string logfile = GlobalV::global_out_dir + "running_" + GlobalV::CALCULATION + ".log"; + GlobalV::ofs_running.open( logfile.c_str(), std::ios::app ); + } + if(!GlobalV::ofs_warning.is_open()) + { + string warningfile = GlobalV::global_out_dir + "warning.log"; + GlobalV::ofs_warning.open( warningfile.c_str(), std::ios::app ); + } + + //print error information + std::cout << " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << std::endl; + std::cout << " ERROR! " << description << std::endl; + std::cout << " CHECK IN FILE : " << GlobalV::global_out_dir << "warning.log" << std::endl; + std::cout << " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << std::endl; + GlobalV::ofs_running << " ERROR! CHECK IN FILE : " << GlobalV::global_out_dir << "warning.log" << std::endl; + GlobalV::ofs_warning << std::endl; + GlobalV::ofs_warning << " ERROR! " << file << ", core " << GlobalV::MY_RANK+1 << ": " << description << std::endl; + GlobalV::ofs_warning << std::endl; + exit(0); } +#endif + return; } } diff --git a/source/module_base/tool_quit.h b/source/module_base/tool_quit.h index bedc6b011d..c2957c4a9b 100644 --- a/source/module_base/tool_quit.h +++ b/source/module_base/tool_quit.h @@ -49,7 +49,7 @@ void WARNING_QUIT(const std::string &file, const std::string &description); * @param file The file where warning happens * @param description The warning information */ -void CHECK_WARNING_QUIT(bool error, const std::string &file,const std::string &description); +void CHECK_WARNING_QUIT(const bool error, const std::string &file,const std::string &description); } // namespace ModuleBase diff --git a/source/module_pw/pw_basis.cpp b/source/module_pw/pw_basis.cpp index f6699da978..59b87476c0 100644 --- a/source/module_pw/pw_basis.cpp +++ b/source/module_pw/pw_basis.cpp @@ -94,9 +94,10 @@ void PW_Basis::getstartgr() /// void PW_Basis::collect_local_pw() { - delete[] this->gg; this->gg = new double[this->npw]; - delete[] this->gdirect; this->gdirect = new ModuleBase::Vector3[this->npw]; - delete[] this->gcar; this->gcar = new ModuleBase::Vector3[this->npw]; + if(this->npw <= 0) return; + delete[] this->gg; this->gg = new double[this->npw]; + delete[] this->gdirect; this->gdirect = new ModuleBase::Vector3[this->npw]; + delete[] this->gcar; this->gcar = new ModuleBase::Vector3[this->npw]; ModuleBase::Vector3 f; for(int ig = 0 ; ig < this-> npw ; ++ig) @@ -128,6 +129,7 @@ void PW_Basis::collect_local_pw() /// void PW_Basis::collect_uniqgg() { + if(this->npw <= 0) return; delete[] this->ig2igg; this->ig2igg = new int [this->npw]; int *sortindex = new int [this->npw]; double *tmpgg = new double [this->npw]; diff --git a/source/module_pw/pw_basis_k.cpp b/source/module_pw/pw_basis_k.cpp index 17b185508d..6358fbf3a9 100644 --- a/source/module_pw/pw_basis_k.cpp +++ b/source/module_pw/pw_basis_k.cpp @@ -69,8 +69,6 @@ void PW_Basis_K::setupIndGk() //count npwk this->npwk_max = 0; delete[] this->npwk; this->npwk = new int [this->nks]; - //minimun npw, only for check - int npwk_min = this->npw; for (int ik = 0; ik < this->nks; ik++) { int ng = 0; @@ -83,22 +81,16 @@ void PW_Basis_K::setupIndGk() } } this->npwk[ik] = ng; - if(ng == 0) - { - std::cout<<"Some proc has no plane waves. You can reduce the number of proc to avoid waste!"<npwk_max < ng) { this->npwk_max = ng; } - if ( npwk_min > ng) - { - npwk_min = ng; - } } - ModuleBase::CHECK_WARNING_QUIT((npwk_min==0), "PW_Basis_K::setupIndGk", "some cores have no plane waves!"); + //get igl2isz_k and igl2ig_k + if(this->npwk_max <= 0) return; delete[] igl2isz_k; this->igl2isz_k = new int [this->nks * this->npwk_max]; delete[] igl2ig_k; this->igl2ig_k = new int [this->nks * this->npwk_max]; for (int ik = 0; ik < this->nks; ik++) @@ -140,6 +132,7 @@ void PW_Basis_K::setuptransform() void PW_Basis_K::collect_local_pw() { + if(this->npwk_max <= 0) return; delete[] gk2; delete[] gcar; this->gk2 = new double[this->npwk_max * this->nks]; diff --git a/source/module_pw/pw_distributeg.cpp b/source/module_pw/pw_distributeg.cpp index e3686f5fff..8fef054cd6 100644 --- a/source/module_pw/pw_distributeg.cpp +++ b/source/module_pw/pw_distributeg.cpp @@ -25,6 +25,7 @@ void PW_Basis::distribute_g() { ModuleBase::WARNING_QUIT("divide", "No such division type."); } + ModuleBase::CHECK_WARNING_QUIT((this->npw == 0), "pw_distributeg.cpp", "Current core has no plane waves! Please reduce the cores."); ModuleBase::timer::tick(this->classname, "distributeg"); return; } From a60dbee1ff517a69e1875840b23220ad44aad9fd Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 24 Aug 2022 15:47:26 +0800 Subject: [PATCH 52/63] refactor : move init_after_vc to esolver this way I can fully decouple esolver and relaxation --- source/Makefile.Objects | 3 +- source/module_cell/unitcell.h | 1 + source/module_esolver/esolver_ks_pw.cpp | 9 +- source/src_ions/CMakeLists.txt | 1 + source/src_ions/ions.cpp | 149 +++--------------------- source/src_ions/ions.h | 4 +- source/src_ions/relaxation.cpp | 124 ++++++++++++++++++++ source/src_ions/variable_cell.cpp | 11 +- source/src_ions/variable_cell.h | 2 +- source/src_lcao/run_md_lcao.cpp | 2 +- source/src_pw/Makefile.Objects | 3 +- source/src_pw/potential.cpp | 4 - source/src_pw/run_md_pw.cpp | 3 +- 13 files changed, 164 insertions(+), 152 deletions(-) create mode 100644 source/src_ions/relaxation.cpp diff --git a/source/Makefile.Objects b/source/Makefile.Objects index 202b46c648..eff63da8dc 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -339,7 +339,8 @@ write_wfc_realspace.o\ magnetism.o\ optical.o\ run_md_pw.o\ -ions.o \ +ions.o\ +relaxation.o\ ions_move_methods.o\ ions_move_bfgs.o\ ions_move_cg.o\ diff --git a/source/module_cell/unitcell.h b/source/module_cell/unitcell.h index 63ab3de228..9913d9165f 100644 --- a/source/module_cell/unitcell.h +++ b/source/module_cell/unitcell.h @@ -76,6 +76,7 @@ class UnitCell //I'm doing a bad thing here! Will change later bool ionic_position_updated = false; //whether the ionic position has been updated + bool cell_parameter_updated = false; //whether the cell parameters are updated private: ModuleBase::Matrix3 stress; //calculate stress on the cell diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 52c72ca808..95421b0ee8 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -180,7 +180,14 @@ namespace ModuleESolver GlobalC::pot.init_pot( istep-1, GlobalC::sf.strucFac ); } } - + if(GlobalC::ucell.cell_parameter_updated) + { + GlobalC::wfcpw->initgrids(GlobalC::ucell.lat0, GlobalC::ucell.latvec, GlobalC::wfcpw->nx, GlobalC::wfcpw->ny, GlobalC::wfcpw->nz); + GlobalC::wfcpw->initparameters(false, INPUT.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); + GlobalC::wfcpw->collect_local_pw(); + GlobalC::wf.init_after_vc(GlobalC::kv.nks, this->psi); + GlobalC::wf.init_at_1(); + } //init Hamilt, this should be allocated before each scf loop //Operators in HamiltPW should be reallocated once cell changed //delete Hamilt if not first scf diff --git a/source/src_ions/CMakeLists.txt b/source/src_ions/CMakeLists.txt index 16f0d07c15..8e13caf0c2 100644 --- a/source/src_ions/CMakeLists.txt +++ b/source/src_ions/CMakeLists.txt @@ -12,4 +12,5 @@ add_library( lattice_change_cg.cpp lattice_change_methods.cpp variable_cell.cpp + relaxation.cpp ) diff --git a/source/src_ions/ions.cpp b/source/src_ions/ions.cpp index 7987758ae1..faba21f59d 100644 --- a/source/src_ions/ions.cpp +++ b/source/src_ions/ions.cpp @@ -60,7 +60,24 @@ void Ions::opt_ions(ModuleESolver::ESolver *p_esolver) if (GlobalV::CALCULATION=="scf" || GlobalV::CALCULATION=="relax" || GlobalV::CALCULATION=="cell-relax" || GlobalV::CALCULATION.substr(0,3)=="sto") { - stop = this->after_scf(p_esolver, istep, force_step, stress_step); // pengfei Li 2018-05-14 + //I'm considering putting force and stress + //as part of ucell and use ucell to pass information + //back and forth between esolver and relaxation + //but I'll use force and stress explicitly here for now + + //calculate and gather all parts of total ionic forces + ModuleBase::matrix force; + if(GlobalV::CAL_FORCE) + { + p_esolver->cal_Force(force); + } + //calculate and gather all parts of stress + ModuleBase::matrix stress; + if(GlobalV::CAL_STRESS) + { + p_esolver->cal_Stress(stress); + } + stop = this->relaxation(force, stress, istep, force_step, stress_step); // pengfei Li 2018-05-14 } time_t fend = time(NULL); @@ -94,132 +111,4 @@ void Ions::opt_ions(ModuleESolver::ESolver *p_esolver) ModuleBase::timer::tick("Ions","opt_ions_pw"); return; -} - -bool Ions::after_scf(ModuleESolver::ESolver *p_esolver, const int &istep, int &force_step, int &stress_step) -{ - ModuleBase::TITLE("Ions","after_scf"); - - // should not do it this way, will change later - GlobalC::ucell.ionic_position_updated = false; - - //calculate and gather all parts of total ionic forces - ModuleBase::matrix force; - if(GlobalV::CAL_FORCE) - { - p_esolver->cal_Force(force); - } - //calculate and gather all parts of stress - ModuleBase::matrix stress; - if(GlobalV::CAL_STRESS) - { - p_esolver->cal_Stress(stress); - } - //stop in last step - if(istep==GlobalV::RELAX_NMAX) - { - return 1; - } - //choose what to do next - if(GlobalV::CALCULATION!="cell-relax") force_step = istep; - if(this->if_do_relax()) - { - //do relax calculation and generate next structure - bool converged = 0; - converged = this->do_relax(istep, force_step, force, GlobalC::en.etot); - if(!converged) - { - this->reset_after_relax(istep); - GlobalC::ucell.ionic_position_updated = true; - return converged; - } - else if(GlobalV::CALCULATION!="cell-relax") - { - return converged; - } - } - if(this->if_do_cellrelax()) - { - //do cell relax calculation and generate next structure - bool converged = 0; - converged = this->do_cellrelax(stress_step, stress, GlobalC::en.etot); - if(!converged) this->reset_after_cellrelax(force_step, stress_step, p_esolver); - return converged; - } - - return 1; -} - -bool Ions::if_do_relax() -{ - ModuleBase::TITLE("Ions","if_do_relax"); - if(GlobalV::CALCULATION=="relax"||GlobalV::CALCULATION=="cell-relax") - { - if(!GlobalC::ucell.if_atoms_can_move()) - { - ModuleBase::WARNING("Ions","No atom is allowed to move!"); - return 0; - } -// if(!IMM.get_converged()) return 1; - else - { - assert(GlobalV::CAL_FORCE==1); - return 1; - } - } - else return 0; -} -bool Ions::if_do_cellrelax() -{ - ModuleBase::TITLE("Ions","if_do_cellrelax"); - if(GlobalV::CALCULATION=="cell-relax") - { - if(!GlobalC::ucell.if_cell_can_change()) - { - ModuleBase::WARNING("Ions", "Lattice vectors are not allowed to change!"); - return 0; - } - else if(GlobalC::ucell.if_atoms_can_move()&&!IMM.get_converged()) - { - GlobalV::ofs_running<<"Note: Need to wait for atomic relaxation first!"; - return 0; - } - else - { - assert(GlobalV::CAL_STRESS==1); - return 1; - } - } - else return 0; -} -bool Ions::do_relax(const int& istep, int& jstep, const ModuleBase::matrix& ionic_force, const double& total_energy) -{ - ModuleBase::TITLE("Ions","do_relax"); - IMM.cal_movement(istep, jstep, ionic_force, total_energy); - ++jstep; - return IMM.get_converged(); -} -bool Ions::do_cellrelax(const int& istep, const ModuleBase::matrix& stress, const double& total_energy) -{ - ModuleBase::TITLE("Ions","do_cellrelax"); - LCM.cal_lattice_change(istep, stress, total_energy); - return LCM.get_converged(); -} -void Ions::reset_after_relax(const int& istep) -{ - ModuleBase::TITLE("Ions","reset_after_relax"); - GlobalV::ofs_running << " Setup the structure factor in plane wave basis." << std::endl; - GlobalC::sf.setup_structure_factor(&GlobalC::ucell,GlobalC::rhopw); -} - -void Ions::reset_after_cellrelax(int& f_step, int& s_step, ModuleESolver::ESolver *p_esolver) -{ - ModuleBase::TITLE("Ions","reset_after_cellrelax"); - Variable_Cell::init_after_vc(p_esolver); - GlobalC::pot.init_pot(s_step, GlobalC::sf.strucFac); //LiuXh add 20180619 - - //GlobalV::ofs_running << " Setup the new wave functions?" << std::endl; //LiuXh add 20180619 - //GlobalC::wf.wfcinit(p_esolver->psi); //LiuXh add 20180619 - f_step = 1; - ++s_step; -} +} \ No newline at end of file diff --git a/source/src_ions/ions.h b/source/src_ions/ions.h index 04d8589e47..2a2176c994 100644 --- a/source/src_ions/ions.h +++ b/source/src_ions/ions.h @@ -36,13 +36,13 @@ class Ions Lattice_Change_Methods LCM; //seperate force_stress function first - bool after_scf(ModuleESolver::ESolver *p_esolver,const int &istep, int &force_step, int &stress_step); + bool relaxation(ModuleBase::matrix force,ModuleBase::matrix stress,const int &istep, int &force_step, int &stress_step); bool if_do_relax(); bool if_do_cellrelax(); bool do_relax(const int& istep, int& jstep, const ModuleBase::matrix& ionic_force, const double& total_energy); bool do_cellrelax(const int& istep, const ModuleBase::matrix& stress, const double& total_energy); void reset_after_relax(const int& istep); - void reset_after_cellrelax(int& force_step, int& stress_step, ModuleESolver::ESolver *p_esolver); + void reset_after_cellrelax(int& force_step, int& stress_step); void update_pot(void); diff --git a/source/src_ions/relaxation.cpp b/source/src_ions/relaxation.cpp new file mode 100644 index 0000000000..1a26c9c4a6 --- /dev/null +++ b/source/src_ions/relaxation.cpp @@ -0,0 +1,124 @@ +#include "ions.h" +#include "../src_pw/global.h" // use chr. +#include "../src_io/print_info.h" +#include "variable_cell.h" // mohan add 2021-02-01 + +// The interface for relaxation +bool Ions::relaxation(ModuleBase::matrix force, ModuleBase::matrix stress, const int &istep, int &force_step, int &stress_step) +{ + ModuleBase::TITLE("Ions","after_scf"); + + // should not do it this way, will change after the refactor of ucell class + GlobalC::ucell.ionic_position_updated = false; + GlobalC::ucell.cell_parameter_updated = false; + + //stop in last step + if(istep==GlobalV::RELAX_NMAX) + { + return 1; + } + //choose what to do next + if(GlobalV::CALCULATION!="cell-relax") force_step = istep; + if(this->if_do_relax()) + { + //do relax calculation and generate next structure + bool converged = 0; + converged = this->do_relax(istep, force_step, force, GlobalC::en.etot); + if(!converged) + { + this->reset_after_relax(istep); + GlobalC::ucell.ionic_position_updated = true; + return converged; + } + else if(GlobalV::CALCULATION!="cell-relax") + { + return converged; + } + } + if(this->if_do_cellrelax()) + { + //do cell relax calculation and generate next structure + bool converged = 0; + converged = this->do_cellrelax(stress_step, stress, GlobalC::en.etot); + if(!converged) + { + GlobalC::ucell.cell_parameter_updated = true; + this->reset_after_cellrelax(force_step, stress_step); + } + return converged; + } + + return 1; +} + +bool Ions::if_do_relax() +{ + ModuleBase::TITLE("Ions","if_do_relax"); + if(GlobalV::CALCULATION=="relax"||GlobalV::CALCULATION=="cell-relax") + { + if(!GlobalC::ucell.if_atoms_can_move()) + { + ModuleBase::WARNING("Ions","No atom is allowed to move!"); + return 0; + } +// if(!IMM.get_converged()) return 1; + else + { + assert(GlobalV::CAL_FORCE==1); + return 1; + } + } + else return 0; +} +bool Ions::if_do_cellrelax() +{ + ModuleBase::TITLE("Ions","if_do_cellrelax"); + if(GlobalV::CALCULATION=="cell-relax") + { + if(!GlobalC::ucell.if_cell_can_change()) + { + ModuleBase::WARNING("Ions", "Lattice vectors are not allowed to change!"); + return 0; + } + else if(GlobalC::ucell.if_atoms_can_move()&&!IMM.get_converged()) + { + GlobalV::ofs_running<<"Note: Need to wait for atomic relaxation first!"; + return 0; + } + else + { + assert(GlobalV::CAL_STRESS==1); + return 1; + } + } + else return 0; +} +bool Ions::do_relax(const int& istep, int& jstep, const ModuleBase::matrix& ionic_force, const double& total_energy) +{ + ModuleBase::TITLE("Ions","do_relax"); + IMM.cal_movement(istep, jstep, ionic_force, total_energy); + ++jstep; + return IMM.get_converged(); +} +bool Ions::do_cellrelax(const int& istep, const ModuleBase::matrix& stress, const double& total_energy) +{ + ModuleBase::TITLE("Ions","do_cellrelax"); + LCM.cal_lattice_change(istep, stress, total_energy); + return LCM.get_converged(); +} +void Ions::reset_after_relax(const int& istep) +{ + ModuleBase::TITLE("Ions","reset_after_relax"); + GlobalV::ofs_running << " Setup the structure factor in plane wave basis." << std::endl; + GlobalC::sf.setup_structure_factor(&GlobalC::ucell,GlobalC::rhopw); +} + +void Ions::reset_after_cellrelax(int& f_step, int& s_step) +{ + ModuleBase::TITLE("Ions","reset_after_cellrelax"); + Variable_Cell::init_after_vc(); + GlobalC::pot.init_pot(s_step, GlobalC::sf.strucFac); //LiuXh add 20180619 + + f_step = 1; + ++s_step; +} diff --git a/source/src_ions/variable_cell.cpp b/source/src_ions/variable_cell.cpp index 6860bd63dd..190d48d94b 100644 --- a/source/src_ions/variable_cell.cpp +++ b/source/src_ions/variable_cell.cpp @@ -5,7 +5,7 @@ Variable_Cell::Variable_Cell(){} Variable_Cell::~Variable_Cell(){} -void Variable_Cell::init_after_vc(ModuleESolver::ESolver *p_esolver) +void Variable_Cell::init_after_vc() { ModuleBase::TITLE("Variable_Cell","init_after_vc"); @@ -29,15 +29,6 @@ void Variable_Cell::init_after_vc(ModuleESolver::ESolver *p_esolver) GlobalC::rhopw->collect_uniqgg(); GlobalC::sf.setup_structure_factor(&GlobalC::ucell,GlobalC::rhopw); - if(GlobalV::BASIS_TYPE=="pw") - { - GlobalC::wfcpw->initgrids(GlobalC::ucell.lat0, GlobalC::ucell.latvec, GlobalC::wfcpw->nx, GlobalC::wfcpw->ny, GlobalC::wfcpw->nz); - GlobalC::wfcpw->initparameters(false, INPUT.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); - GlobalC::wfcpw->collect_local_pw(); - GlobalC::wf.init_after_vc(GlobalC::kv.nks, p_esolver->psi); - GlobalC::wf.init_at_1(); - } - GlobalV::ofs_running << " Setup the Vl+Vh+Vxc according to new structure factor and new charge." << std::endl; //================================= // initalize local pseudopotential diff --git a/source/src_ions/variable_cell.h b/source/src_ions/variable_cell.h index 6fc5185e90..909263b794 100644 --- a/source/src_ions/variable_cell.h +++ b/source/src_ions/variable_cell.h @@ -18,7 +18,7 @@ class Variable_Cell Variable_Cell(); ~Variable_Cell(); - static void init_after_vc(ModuleESolver::ESolver *p_esolver); //LiuXh add 20180515 + static void init_after_vc(); //LiuXh add 20180515 }; diff --git a/source/src_lcao/run_md_lcao.cpp b/source/src_lcao/run_md_lcao.cpp index 64257b5cf3..a9ee6f4997 100644 --- a/source/src_lcao/run_md_lcao.cpp +++ b/source/src_lcao/run_md_lcao.cpp @@ -102,7 +102,7 @@ void Run_MD_LCAO::opt_ions(ModuleESolver::ESolver* p_esolver) if (cellchange) { - Variable_Cell::init_after_vc(p_esolver); + Variable_Cell::init_after_vc(); } // reset local potential diff --git a/source/src_pw/Makefile.Objects b/source/src_pw/Makefile.Objects index 3f0ba70178..a9035ba7ca 100644 --- a/source/src_pw/Makefile.Objects +++ b/source/src_pw/Makefile.Objects @@ -50,7 +50,8 @@ OBJS_IONS=MD_basic.o\ MD_thermo.o\ MD_fire.o\ MD_func.o\ -ions.o \ +ions.o\ +relaxation.o\ ions_move_methods.o\ ions_move_bfgs.o\ ions_move_cg.o\ diff --git a/source/src_pw/potential.cpp b/source/src_pw/potential.cpp index ea69b27ffd..cde1ad785f 100644 --- a/source/src_pw/potential.cpp +++ b/source/src_pw/potential.cpp @@ -229,10 +229,6 @@ void Potential::init_pot(const int &istep, // number of ionic steps GlobalC::restart.info_load.load_charge_finish = true; } } - else - { - // the extrapolation part moves to ions.cpp. - } // renormalize the charge density GlobalC::CHR.renormalize_rho(); diff --git a/source/src_pw/run_md_pw.cpp b/source/src_pw/run_md_pw.cpp index 4cfe754c1f..cb2fee56e5 100644 --- a/source/src_pw/run_md_pw.cpp +++ b/source/src_pw/run_md_pw.cpp @@ -97,7 +97,8 @@ void Run_MD_PW::md_ions_pw(ModuleESolver::ESolver *p_esolver) if(cellchange) { - Variable_Cell::init_after_vc(p_esolver); + GlobalC::ucell.cell_parameter_updated = true; + Variable_Cell::init_after_vc(); } // reset local potential and initial wave function From ff8fba1ed057a749569a7f3ee01820e7d86fd1dd Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 24 Aug 2022 15:59:18 +0800 Subject: [PATCH 53/63] refactor : renaming src_ions to module_relaxation --- CMakeLists.txt | 2 +- docs/install.md | 2 +- source/CMakeLists.txt | 2 +- source/Makefile | 2 +- source/input_conv.cpp | 2 +- source/input_update.cpp | 2 +- source/{src_ions => module_relaxation}/CMakeLists.txt | 2 +- source/{src_ions => module_relaxation}/bfgs_basic.cpp | 0 source/{src_ions => module_relaxation}/bfgs_basic.h | 0 source/{src_ions => module_relaxation}/ions.cpp | 0 source/{src_ions => module_relaxation}/ions.h | 6 ++++++ source/{src_ions => module_relaxation}/ions_move_basic.cpp | 0 source/{src_ions => module_relaxation}/ions_move_basic.h | 0 source/{src_ions => module_relaxation}/ions_move_bfgs.cpp | 0 source/{src_ions => module_relaxation}/ions_move_bfgs.h | 0 source/{src_ions => module_relaxation}/ions_move_cg.cpp | 0 source/{src_ions => module_relaxation}/ions_move_cg.h | 0 .../{src_ions => module_relaxation}/ions_move_methods.cpp | 0 source/{src_ions => module_relaxation}/ions_move_methods.h | 0 source/{src_ions => module_relaxation}/ions_move_sd.cpp | 0 source/{src_ions => module_relaxation}/ions_move_sd.h | 0 .../lattice_change_basic.cpp | 0 .../{src_ions => module_relaxation}/lattice_change_basic.h | 0 .../{src_ions => module_relaxation}/lattice_change_cg.cpp | 0 source/{src_ions => module_relaxation}/lattice_change_cg.h | 0 .../lattice_change_methods.cpp | 0 .../lattice_change_methods.h | 0 source/{src_ions => module_relaxation}/relaxation.cpp | 0 source/{src_ions => module_relaxation}/variable_cell.cpp | 0 source/{src_ions => module_relaxation}/variable_cell.h | 0 source/src_lcao/run_md_lcao.cpp | 2 +- source/src_pw/Makefile | 2 +- source/src_pw/Makefile.parallel | 2 +- source/src_pw/Makefile.serial | 2 +- source/src_pw/global.h | 2 +- source/src_pw/run_md_pw.cpp | 2 +- 36 files changed, 19 insertions(+), 13 deletions(-) rename source/{src_ions => module_relaxation}/CMakeLists.txt (96%) rename source/{src_ions => module_relaxation}/bfgs_basic.cpp (100%) rename source/{src_ions => module_relaxation}/bfgs_basic.h (100%) rename source/{src_ions => module_relaxation}/ions.cpp (100%) rename source/{src_ions => module_relaxation}/ions.h (79%) rename source/{src_ions => module_relaxation}/ions_move_basic.cpp (100%) rename source/{src_ions => module_relaxation}/ions_move_basic.h (100%) rename source/{src_ions => module_relaxation}/ions_move_bfgs.cpp (100%) rename source/{src_ions => module_relaxation}/ions_move_bfgs.h (100%) rename source/{src_ions => module_relaxation}/ions_move_cg.cpp (100%) rename source/{src_ions => module_relaxation}/ions_move_cg.h (100%) rename source/{src_ions => module_relaxation}/ions_move_methods.cpp (100%) rename source/{src_ions => module_relaxation}/ions_move_methods.h (100%) rename source/{src_ions => module_relaxation}/ions_move_sd.cpp (100%) rename source/{src_ions => module_relaxation}/ions_move_sd.h (100%) rename source/{src_ions => module_relaxation}/lattice_change_basic.cpp (100%) rename source/{src_ions => module_relaxation}/lattice_change_basic.h (100%) rename source/{src_ions => module_relaxation}/lattice_change_cg.cpp (100%) rename source/{src_ions => module_relaxation}/lattice_change_cg.h (100%) rename source/{src_ions => module_relaxation}/lattice_change_methods.cpp (100%) rename source/{src_ions => module_relaxation}/lattice_change_methods.h (100%) rename source/{src_ions => module_relaxation}/relaxation.cpp (100%) rename source/{src_ions => module_relaxation}/variable_cell.cpp (100%) rename source/{src_ions => module_relaxation}/variable_cell.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d732a0195..cd506c2230 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -325,7 +325,7 @@ target_link_libraries(${ABACUS_BIN_NAME} neighbor orb io - ions + relax lcao gint parallel diff --git a/docs/install.md b/docs/install.md index 97f6d47fa3..09201873d9 100644 --- a/docs/install.md +++ b/docs/install.md @@ -285,7 +285,7 @@ OPTS = ${INCLUDES} -Ofast -traceback -std=c++14 -simd -march=native -xHost -m64 - src_external - src_global - src_io -- src_ions +- module_relaxation - src_lcao - src_parallel - src_pdiag diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 8cd202fbdf..c573b98311 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -15,7 +15,7 @@ add_subdirectory(module_xc) add_subdirectory(module_esolver) add_subdirectory(module_gint) add_subdirectory(src_io) -add_subdirectory(src_ions) +add_subdirectory(module_relaxation) add_subdirectory(src_lcao) add_subdirectory(src_parallel) add_subdirectory(src_pdiag) diff --git a/source/Makefile b/source/Makefile index 2872780da9..5043526890 100644 --- a/source/Makefile +++ b/source/Makefile @@ -27,7 +27,7 @@ VPATH=./src_global\ :./module_gint\ :./src_pw\ :./src_lcao\ -:./src_ions\ +:./module_relaxation\ :./src_io\ :./src_parallel\ :./src_pdiag\ diff --git a/source/input_conv.cpp b/source/input_conv.cpp index 56c2abab05..1ff0f0a621 100644 --- a/source/input_conv.cpp +++ b/source/input_conv.cpp @@ -12,7 +12,7 @@ #include "src_io/epsilon0_pwscf.h" #include "src_io/epsilon0_vasp.h" #include "src_io/optical.h" -#include "src_ions/ions_move_basic.h" +#include "module_relaxation/ions_move_basic.h" #include "src_pw/global.h" #include "src_pw/occupy.h" #ifdef __EXX diff --git a/source/input_update.cpp b/source/input_update.cpp index ebfae1fd67..077569b00f 100644 --- a/source/input_update.cpp +++ b/source/input_update.cpp @@ -7,7 +7,7 @@ #include "module_base/global_function.h" #include "module_base/global_variable.h" #include "input.h" -#include "src_ions/ions_move_basic.h" +#include "module_relaxation/ions_move_basic.h" #include "src_io/optical.h" #ifdef __LCAO #include "src_lcao/FORCE_STRESS.h" diff --git a/source/src_ions/CMakeLists.txt b/source/module_relaxation/CMakeLists.txt similarity index 96% rename from source/src_ions/CMakeLists.txt rename to source/module_relaxation/CMakeLists.txt index 8e13caf0c2..835d3e68fa 100644 --- a/source/src_ions/CMakeLists.txt +++ b/source/module_relaxation/CMakeLists.txt @@ -1,5 +1,5 @@ add_library( - ions + relax OBJECT bfgs_basic.cpp ions.cpp diff --git a/source/src_ions/bfgs_basic.cpp b/source/module_relaxation/bfgs_basic.cpp similarity index 100% rename from source/src_ions/bfgs_basic.cpp rename to source/module_relaxation/bfgs_basic.cpp diff --git a/source/src_ions/bfgs_basic.h b/source/module_relaxation/bfgs_basic.h similarity index 100% rename from source/src_ions/bfgs_basic.h rename to source/module_relaxation/bfgs_basic.h diff --git a/source/src_ions/ions.cpp b/source/module_relaxation/ions.cpp similarity index 100% rename from source/src_ions/ions.cpp rename to source/module_relaxation/ions.cpp diff --git a/source/src_ions/ions.h b/source/module_relaxation/ions.h similarity index 79% rename from source/src_ions/ions.h rename to source/module_relaxation/ions.h index 2a2176c994..6bc1b0591a 100644 --- a/source/src_ions/ions.h +++ b/source/module_relaxation/ions.h @@ -10,6 +10,12 @@ #include "lattice_change_methods.h" #include "module_esolver/esolver.h" + +//The workflow opt_ions should be moved outside module_relaxation +//since the latter is intended to perform the sole task of +//creating the next step structure based on force and stress +//according to some relaxation algorithm +//However, it will remain this way until the ucell class and MD module are sorted out class Ions { diff --git a/source/src_ions/ions_move_basic.cpp b/source/module_relaxation/ions_move_basic.cpp similarity index 100% rename from source/src_ions/ions_move_basic.cpp rename to source/module_relaxation/ions_move_basic.cpp diff --git a/source/src_ions/ions_move_basic.h b/source/module_relaxation/ions_move_basic.h similarity index 100% rename from source/src_ions/ions_move_basic.h rename to source/module_relaxation/ions_move_basic.h diff --git a/source/src_ions/ions_move_bfgs.cpp b/source/module_relaxation/ions_move_bfgs.cpp similarity index 100% rename from source/src_ions/ions_move_bfgs.cpp rename to source/module_relaxation/ions_move_bfgs.cpp diff --git a/source/src_ions/ions_move_bfgs.h b/source/module_relaxation/ions_move_bfgs.h similarity index 100% rename from source/src_ions/ions_move_bfgs.h rename to source/module_relaxation/ions_move_bfgs.h diff --git a/source/src_ions/ions_move_cg.cpp b/source/module_relaxation/ions_move_cg.cpp similarity index 100% rename from source/src_ions/ions_move_cg.cpp rename to source/module_relaxation/ions_move_cg.cpp diff --git a/source/src_ions/ions_move_cg.h b/source/module_relaxation/ions_move_cg.h similarity index 100% rename from source/src_ions/ions_move_cg.h rename to source/module_relaxation/ions_move_cg.h diff --git a/source/src_ions/ions_move_methods.cpp b/source/module_relaxation/ions_move_methods.cpp similarity index 100% rename from source/src_ions/ions_move_methods.cpp rename to source/module_relaxation/ions_move_methods.cpp diff --git a/source/src_ions/ions_move_methods.h b/source/module_relaxation/ions_move_methods.h similarity index 100% rename from source/src_ions/ions_move_methods.h rename to source/module_relaxation/ions_move_methods.h diff --git a/source/src_ions/ions_move_sd.cpp b/source/module_relaxation/ions_move_sd.cpp similarity index 100% rename from source/src_ions/ions_move_sd.cpp rename to source/module_relaxation/ions_move_sd.cpp diff --git a/source/src_ions/ions_move_sd.h b/source/module_relaxation/ions_move_sd.h similarity index 100% rename from source/src_ions/ions_move_sd.h rename to source/module_relaxation/ions_move_sd.h diff --git a/source/src_ions/lattice_change_basic.cpp b/source/module_relaxation/lattice_change_basic.cpp similarity index 100% rename from source/src_ions/lattice_change_basic.cpp rename to source/module_relaxation/lattice_change_basic.cpp diff --git a/source/src_ions/lattice_change_basic.h b/source/module_relaxation/lattice_change_basic.h similarity index 100% rename from source/src_ions/lattice_change_basic.h rename to source/module_relaxation/lattice_change_basic.h diff --git a/source/src_ions/lattice_change_cg.cpp b/source/module_relaxation/lattice_change_cg.cpp similarity index 100% rename from source/src_ions/lattice_change_cg.cpp rename to source/module_relaxation/lattice_change_cg.cpp diff --git a/source/src_ions/lattice_change_cg.h b/source/module_relaxation/lattice_change_cg.h similarity index 100% rename from source/src_ions/lattice_change_cg.h rename to source/module_relaxation/lattice_change_cg.h diff --git a/source/src_ions/lattice_change_methods.cpp b/source/module_relaxation/lattice_change_methods.cpp similarity index 100% rename from source/src_ions/lattice_change_methods.cpp rename to source/module_relaxation/lattice_change_methods.cpp diff --git a/source/src_ions/lattice_change_methods.h b/source/module_relaxation/lattice_change_methods.h similarity index 100% rename from source/src_ions/lattice_change_methods.h rename to source/module_relaxation/lattice_change_methods.h diff --git a/source/src_ions/relaxation.cpp b/source/module_relaxation/relaxation.cpp similarity index 100% rename from source/src_ions/relaxation.cpp rename to source/module_relaxation/relaxation.cpp diff --git a/source/src_ions/variable_cell.cpp b/source/module_relaxation/variable_cell.cpp similarity index 100% rename from source/src_ions/variable_cell.cpp rename to source/module_relaxation/variable_cell.cpp diff --git a/source/src_ions/variable_cell.h b/source/module_relaxation/variable_cell.h similarity index 100% rename from source/src_ions/variable_cell.h rename to source/module_relaxation/variable_cell.h diff --git a/source/src_lcao/run_md_lcao.cpp b/source/src_lcao/run_md_lcao.cpp index a9ee6f4997..9f51933fd0 100644 --- a/source/src_lcao/run_md_lcao.cpp +++ b/source/src_lcao/run_md_lcao.cpp @@ -9,7 +9,7 @@ #include "../src_io/write_HS.h" #include "../src_io/cal_r_overlap_R.h" #include "../src_io/print_info.h" -#include "../src_ions/variable_cell.h" // mohan add 2021-02-01 +#include "../module_relaxation/variable_cell.h" // mohan add 2021-02-01 #include "../src_ri/exx_abfs.h" #include "../src_ri/exx_opt_orb.h" #include "../module_neighbor/sltk_atom_arrange.h" diff --git a/source/src_pw/Makefile b/source/src_pw/Makefile index 119d21dd09..5354849dfd 100644 --- a/source/src_pw/Makefile +++ b/source/src_pw/Makefile @@ -72,7 +72,7 @@ VPATH=../src_global\ :../module_symmetry\ :../src_parallel\ :../src_io\ -:../src_ions\ +:../module_relaxation\ :../module_md\ :../module_symmetry\ :../\ diff --git a/source/src_pw/Makefile.parallel b/source/src_pw/Makefile.parallel index 551acf9176..f7c6ae8113 100644 --- a/source/src_pw/Makefile.parallel +++ b/source/src_pw/Makefile.parallel @@ -58,7 +58,7 @@ VPATH=../src_global\ :../module_symmetry\ :../src_parallel\ :../src_io\ -:../src_ions\ +:../module_relaxation\ :../module_md\ :../module_symmetry\ :../\ diff --git a/source/src_pw/Makefile.serial b/source/src_pw/Makefile.serial index 682fed75ca..1bd6369b4b 100644 --- a/source/src_pw/Makefile.serial +++ b/source/src_pw/Makefile.serial @@ -69,7 +69,7 @@ VPATH=../src_global\ :../module_cell\ :../src_parallel\ :../src_io\ -:../src_ions\ +:../module_relaxation\ :../module_md\ :../module_symmetry\ :../\ diff --git a/source/src_pw/global.h b/source/src_pw/global.h index 59e4af0c4c..85b864ce4e 100644 --- a/source/src_pw/global.h +++ b/source/src_pw/global.h @@ -4,7 +4,7 @@ #include "../module_base/global_function.h" #include "../module_base/global_variable.h" #include "../src_io/restart.h" -#include "../src_ions/ions.h" +#include "../module_relaxation/ions.h" #include "../src_lcao/exx_lip.h" #include "VNL_in_pw.h" #include "charge_broyden.h" diff --git a/source/src_pw/run_md_pw.cpp b/source/src_pw/run_md_pw.cpp index cb2fee56e5..bf91c4b9aa 100644 --- a/source/src_pw/run_md_pw.cpp +++ b/source/src_pw/run_md_pw.cpp @@ -1,6 +1,6 @@ #include "run_md_pw.h" #include "global.h" // use chr. -#include "../src_ions/variable_cell.h" // mohan add 2021-02-01 +#include "../module_relaxation/variable_cell.h" // mohan add 2021-02-01 #include "../module_md/MD_func.h" #include "../module_md/FIRE.h" #include "../module_md/NVE.h" From 5169f084b0d97f0b6155deb1116c7e3032202225 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Wed, 24 Aug 2022 16:09:04 +0800 Subject: [PATCH 54/63] fix bug when nproc > nz of scan --- source/module_hamilt/ks_pw/meta_pw.cpp | 10 ++++++---- tests/integrate/101_PW_15_lowz/INPUT | 5 +++-- tests/integrate/101_PW_15_lowz/result.ref | 6 +++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/source/module_hamilt/ks_pw/meta_pw.cpp b/source/module_hamilt/ks_pw/meta_pw.cpp index c0274ca7bb..0cf6fe935b 100644 --- a/source/module_hamilt/ks_pw/meta_pw.cpp +++ b/source/module_hamilt/ks_pw/meta_pw.cpp @@ -65,11 +65,13 @@ void Meta::act } wfcpw->recip2real(porter, porter, ik); - - const double* pvk = &(this->vk[0](current_spin, 0)); - for (int ir = 0; ir < this->vk->nc; ir++) + if(this->vk->nc != 0) { - porter[ir] *= pvk[ir]; + const double* pvk = &(this->vk[0](current_spin, 0)); + for (int ir = 0; ir < this->vk->nc; ir++) + { + porter[ir] *= pvk[ir]; + } } wfcpw->real2recip(porter, porter, ik); diff --git a/tests/integrate/101_PW_15_lowz/INPUT b/tests/integrate/101_PW_15_lowz/INPUT index d6ef196391..366f0c663c 100644 --- a/tests/integrate/101_PW_15_lowz/INPUT +++ b/tests/integrate/101_PW_15_lowz/INPUT @@ -7,11 +7,12 @@ nbands 6 symmetry 1 pseudo_dir ../tools/PP_ORB/ pseudo_type upf201 +dft_functional scan #Parameters (2.Iteration) ecutwfc 20 scf_thr 1e-9 -scf_nmax 1 +scf_nmax 2 #Parameters (3.Basis) @@ -19,7 +20,7 @@ basis_type pw #Parameters (4.Smearing) smearing_method gauss -smearing_sigma 0.002 +smearing_sigma 0.002 #Parameters (5.Mixing) mixing_type pulay diff --git a/tests/integrate/101_PW_15_lowz/result.ref b/tests/integrate/101_PW_15_lowz/result.ref index 19ad2cc69e..bd7d81bd3f 100644 --- a/tests/integrate/101_PW_15_lowz/result.ref +++ b/tests/integrate/101_PW_15_lowz/result.ref @@ -1,3 +1,3 @@ -etotref -1.407077993281502 -etotperatomref -0.7035389966 -totaltimeref 0.15155 +etotref -0.03063241935806423 +etotperatomref -0.0153162097 +totaltimeref From 40ba63293b79b3b80574f062ac531a4d8ad72a74 Mon Sep 17 00:00:00 2001 From: Qianruipku Date: Wed, 24 Aug 2022 16:14:24 +0800 Subject: [PATCH 55/63] delete input.h in too_quit.cpp --- source/module_base/tool_quit.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/module_base/tool_quit.cpp b/source/module_base/tool_quit.cpp index 87b4e23b96..7f0646e867 100644 --- a/source/module_base/tool_quit.cpp +++ b/source/module_base/tool_quit.cpp @@ -11,7 +11,6 @@ #include "global_file.h" #include "timer.h" #include "memory.h" -#include "input.h" #endif namespace ModuleBase @@ -143,12 +142,12 @@ void CHECK_WARNING_QUIT(const bool error_in, const std::string &file,const std:: std::cout.clear(); if(!GlobalV::ofs_running.is_open()) { - string logfile = GlobalV::global_out_dir + "running_" + GlobalV::CALCULATION + ".log"; + std::string logfile = GlobalV::global_out_dir + "running_" + GlobalV::CALCULATION + ".log"; GlobalV::ofs_running.open( logfile.c_str(), std::ios::app ); } if(!GlobalV::ofs_warning.is_open()) { - string warningfile = GlobalV::global_out_dir + "warning.log"; + std::string warningfile = GlobalV::global_out_dir + "warning.log"; GlobalV::ofs_warning.open( warningfile.c_str(), std::ios::app ); } From 8bbd2312ad56fd47e6f8b27c4abdc7312f1bd621 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 24 Aug 2022 17:02:54 +0800 Subject: [PATCH 56/63] fix : update cmake file of test_deepks --- source/module_deepks/test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/module_deepks/test/CMakeLists.txt b/source/module_deepks/test/CMakeLists.txt index d9b8947f29..0702aa30bc 100644 --- a/source/module_deepks/test/CMakeLists.txt +++ b/source/module_deepks/test/CMakeLists.txt @@ -7,7 +7,7 @@ get_target_property(ABACUS_LINK_LIBRARIES ${ABACUS_BIN_NAME} LINK_LIBRARIES) target_link_libraries( test_deepks base cell symmetry md surchem xc_ - neighbor orb io ions gint lcao parallel mrrr pdiag pw ri driver esolver hsolver psi elecstate hamilt planewave + neighbor orb io relax gint lcao parallel mrrr pdiag pw ri driver esolver hsolver psi elecstate hamilt planewave pthread deepks ${ABACUS_LINK_LIBRARIES} From 1a548f6d51e7ca7078b60833e340a0395490baa5 Mon Sep 17 00:00:00 2001 From: dyzheng Date: Thu, 25 Aug 2022 14:06:13 +0800 Subject: [PATCH 57/63] Refactor: modified Operator::hPsi(), hpsi memory arranged outside --- .../module_esolver/esolver_sdft_pw_tool.cpp | 20 ++++---- source/module_hamilt/ks_pw/operator_pw.h | 22 +++++---- source/module_hamilt/operator.h | 46 ++++++++++++------- source/module_hsolver/diago_cg.cpp | 23 +++++----- source/module_hsolver/diago_david.cpp | 13 +++--- source/module_hsolver/diago_iter_assist.cpp | 20 ++++++-- source/module_psi/psi.h | 17 +++++++ 7 files changed, 101 insertions(+), 60 deletions(-) diff --git a/source/module_esolver/esolver_sdft_pw_tool.cpp b/source/module_esolver/esolver_sdft_pw_tool.cpp index f50b7e65ff..d47f0bd1cc 100644 --- a/source/module_esolver/esolver_sdft_pw_tool.cpp +++ b/source/module_esolver/esolver_sdft_pw_tool.cpp @@ -246,22 +246,18 @@ void ESolver_SDFT_PW::sKG(const int nche_KG, const double fwhmin, const double w // this->phami->hPsi(j1psi.get_pointer(), j2psi.get_pointer(), ndim*totbands_per*npwx); // this->phami->hPsi(j1sfpsi.get_pointer(), j2sfpsi.get_pointer(), ndim*totbands_per*npwx); psi::Range allbands(1,0,0,totbands_per-1); - hamilt::Operator>::hpsi_info info_psi0(&psi0, allbands); - const std::complex* hpsi_out = std::get<0>(this->phami->ops->hPsi(info_psi0))->get_pointer(); - ModuleBase::GlobalFunc::COPYARRAY(hpsi_out, hpsi0.get_pointer(), totbands_per*npwx); + hamilt::Operator>::hpsi_info info_psi0(&psi0, allbands, hpsi0.get_pointer()); + this->phami->ops->hPsi(info_psi0); - hamilt::Operator>::hpsi_info info_sfpsi0(&sfpsi0, allbands); - const std::complex* hsfpsi_out = std::get<0>(this->phami->ops->hPsi(info_sfpsi0))->get_pointer(); - ModuleBase::GlobalFunc::COPYARRAY(hsfpsi_out, hsfpsi0.get_pointer(), totbands_per*npwx); + hamilt::Operator>::hpsi_info info_sfpsi0(&sfpsi0, allbands, hsfpsi0.get_pointer()); + this->phami->ops->hPsi(info_sfpsi0); psi::Range allndimbands(1,0,0,ndim*totbands_per-1); - hamilt::Operator>::hpsi_info info_j1psi(&j1psi, allndimbands); - const std::complex* hj1psi_out = std::get<0>(this->phami->ops->hPsi(info_j1psi))->get_pointer(); - ModuleBase::GlobalFunc::COPYARRAY(hj1psi_out, j2psi.get_pointer(), ndim*totbands_per*npwx); + hamilt::Operator>::hpsi_info info_j1psi(&j1psi, allndimbands, j2psi.get_pointer()); + this->phami->ops->hPsi(info_j1psi); - hamilt::Operator>::hpsi_info info_j1sfpsi(&j1sfpsi, allndimbands); - const std::complex* hj1sfpsi_out = std::get<0>(this->phami->ops->hPsi(info_j1sfpsi))->get_pointer(); - ModuleBase::GlobalFunc::COPYARRAY(hj1sfpsi_out, j2sfpsi.get_pointer(), ndim*totbands_per*npwx); + hamilt::Operator>::hpsi_info info_j1sfpsi(&j1sfpsi, allndimbands, j2sfpsi.get_pointer()); + this->phami->ops->hPsi(info_j1sfpsi); /* // stohchi.hchi_norm(psi0.get_pointer(), hpsi0.get_pointer(), totbands_per); diff --git a/source/module_hamilt/ks_pw/operator_pw.h b/source/module_hamilt/ks_pw/operator_pw.h index 29f1c1306d..9ecaeea7ac 100644 --- a/source/module_hamilt/ks_pw/operator_pw.h +++ b/source/module_hamilt/ks_pw/operator_pw.h @@ -13,10 +13,11 @@ class OperatorPW : public Operator> //in PW code, different operators donate hPsi independently //run this->act function for the first operator and run all act() for other nodes in chain table - virtual hpsi_info hPsi(const hpsi_info& input)const + virtual hpsi_info hPsi(hpsi_info& input)const { ModuleBase::timer::tick("OperatorPW", "hPsi"); - std::tuple*, int> psi_info = std::get<0>(input)->to_range(std::get<1>(input)); + auto psi_input = std::get<0>(input); + std::tuple*, int> psi_info = psi_input->to_range(std::get<1>(input)); int n_npwx = std::get<1>(psi_info); std::complex *tmhpsi = this->get_hpsi(input); @@ -27,20 +28,25 @@ class OperatorPW : public Operator> ModuleBase::WARNING_QUIT("OperatorPW", "please choose correct range of psi for hPsi()!"); } - this->act(std::get<0>(input), n_npwx, tmpsi_in, tmhpsi); + this->act(psi_input, n_npwx, tmpsi_in, tmhpsi); OperatorPW* node((OperatorPW*)this->next_op); while(node != nullptr) { - node->act(std::get<0>(input), n_npwx, tmpsi_in, tmhpsi); + node->act(psi_input, n_npwx, tmpsi_in, tmhpsi); node = (OperatorPW*)(node->next_op); } - //during recursive call of hPsi, delete the input psi - if(this->recursive) delete std::get<0>(input); - ModuleBase::timer::tick("OperatorPW", "hPsi"); - return hpsi_info(this->hpsi, psi::Range(1, 0, 0, n_npwx/std::get<0>(input)->npol)); + //if in_place, copy temporary hpsi to target hpsi_pointer, then delete hpsi and new a wrapper for return + std::complex* hpsi_pointer = std::get<2>(input); + if(this->in_place) + { + ModuleBase::GlobalFunc::COPYARRAY(this->hpsi->get_pointer(), hpsi_pointer, this->hpsi->size()); + delete this->hpsi; + this->hpsi = new psi::Psi>(hpsi_pointer, *psi_input, 1, n_npwx/psi_input->npol); + } + return hpsi_info(this->hpsi, psi::Range(1, 0, 0, n_npwx/psi_input->npol), hpsi_pointer); } //main function which should be modified in Operator for PW base diff --git a/source/module_hamilt/operator.h b/source/module_hamilt/operator.h index bd9f497c3e..044fc8489b 100644 --- a/source/module_hamilt/operator.h +++ b/source/module_hamilt/operator.h @@ -4,6 +4,7 @@ #include #include "module_psi/psi.h" #include "module_base/global_function.h" +#include "module_base/tool_quit.h" namespace hamilt { @@ -33,8 +34,12 @@ class Operator //this is the core function for Operator // do H|psi> from input |psi> , // output of hpsi would be first member of the returned tuple - typedef std::tuple*, const psi::Range> hpsi_info; - virtual hpsi_info hPsi(const hpsi_info& input)const {return hpsi_info(nullptr, 0);} + typedef std::tuple*, const psi::Range, T*> hpsi_info; + virtual hpsi_info hPsi(hpsi_info& input)const + { + ModuleBase::WARNING_QUIT("Operator::hPsi", "hPsi error!"); + return hpsi_info(nullptr, 0, nullptr); + } virtual void init(const int ik_in) { @@ -65,7 +70,7 @@ class Operator protected: int ik = 0; - mutable bool recursive = false; + mutable bool in_place = false; //calculation type, only different type can be in main chain table int cal_type = 0; @@ -74,30 +79,39 @@ class Operator //if this Operator is first node in chain table, hpsi would not be empty mutable psi::Psi* hpsi = nullptr; + /*This function would analyze hpsi_info and choose how to arrange hpsi storage + In hpsi_info, if the third parameter hpsi_pointer is set, which indicates memory of hpsi is arranged by developer; + if hpsi_pointer is not set(nullptr), which indicates memory of hpsi is arranged by Operator, this case is rare. + two cases would occurred: + 1. hpsi_pointer != nullptr && psi_pointer == hpsi_pointer , psi would be replaced by hpsi, hpsi need a temporary memory + 2. hpsi_pointer != nullptr && psi_pointer != hpsi_pointer , this is the commonly case + */ T* get_hpsi(const hpsi_info& info)const { const int nbands_range = (std::get<1>(info).range_2 - std::get<1>(info).range_1 + 1); - //recursive call of hPsi, hpsi inputs as new psi, + //in_place call of hPsi, hpsi inputs as new psi, //create a new hpsi and delete old hpsi later - if(this->hpsi != std::get<0>(info) ) + T* hpsi_pointer = std::get<2>(info); + const T* psi_pointer = std::get<0>(info)->get_pointer(); + if(!hpsi_pointer) { - this->recursive = false; - if(this->hpsi != nullptr) - { - delete this->hpsi; - } + ModuleBase::WARNING_QUIT("Operator::hPsi", "hpsi_pointer can not be nullptr"); + } + else if(hpsi_pointer == psi_pointer) + { + this->in_place = true; + this->hpsi = new psi::Psi(std::get<0>(info)[0], 1, nbands_range); } else { - this->recursive = true; + this->in_place = false; + this->hpsi = new psi::Psi(hpsi_pointer, std::get<0>(info)[0], 1, nbands_range); } - //create a new hpsi - this->hpsi = new psi::Psi(std::get<0>(info)[0], 1, nbands_range); - T* pointer_hpsi = this->hpsi->get_pointer(); + hpsi_pointer = this->hpsi->get_pointer(); size_t total_hpsi_size = nbands_range * this->hpsi->get_nbasis(); - ModuleBase::GlobalFunc::ZEROS(pointer_hpsi, total_hpsi_size); - return pointer_hpsi; + ModuleBase::GlobalFunc::ZEROS(hpsi_pointer, total_hpsi_size); + return hpsi_pointer; } }; diff --git a/source/module_hsolver/diago_cg.cpp b/source/module_hsolver/diago_cg.cpp index 6533c8024f..9235cca5ef 100644 --- a/source/module_hsolver/diago_cg.cpp +++ b/source/module_hsolver/diago_cg.cpp @@ -48,18 +48,18 @@ void DiagoCG::diag_mock(hamilt::Hamilt *phm_in, psi::Psi> & // Works for generalized eigenvalue problem (US pseudopotentials) as well //------------------------------------------------------------------- this->phi_m = new psi::Psi>(phi, 1, 1); - this->hphi.resize(this->dim, ModuleBase::ZERO); - this->sphi.resize(this->dim, ModuleBase::ZERO); + this->hphi.resize(this->dmx, ModuleBase::ZERO); + this->sphi.resize(this->dmx, ModuleBase::ZERO); this->cg = new psi::Psi>(phi, 1, 1); - this->scg.resize(this->dim, ModuleBase::ZERO); - this->pphi.resize(this->dim, ModuleBase::ZERO); + this->scg.resize(this->dmx, ModuleBase::ZERO); + this->pphi.resize(this->dmx, ModuleBase::ZERO); //in band_by_band CG method, only the first band in phi_m would be calculated psi::Range cg_hpsi_range(0); - this->gradient.resize(this->dim, ModuleBase::ZERO); - this->g0.resize(this->dim, ModuleBase::ZERO); + this->gradient.resize(this->dmx, ModuleBase::ZERO); + this->g0.resize(this->dmx, ModuleBase::ZERO); this->lagrange.resize(this->n_band, ModuleBase::ZERO); for (int m = 0; m < this->n_band; m++) @@ -79,9 +79,8 @@ void DiagoCG::diag_mock(hamilt::Hamilt *phm_in, psi::Psi> & //do hPsi, actually the result of hpsi stored in Operator, //the necessary of copying operation should be checked later - hp_info cg_hpsi_in(this->phi_m, cg_hpsi_range); - const std::complex* hpsi_out = std::get<0>(phm_in->ops->hPsi(cg_hpsi_in))->get_pointer(); - ModuleBase::GlobalFunc::COPYARRAY(hpsi_out, this->hphi.data(), this->dim); + hp_info cg_hpsi_in(this->phi_m, cg_hpsi_range, this->hphi.data()); + phm_in->ops->hPsi(cg_hpsi_in); this->eigenvalue[m] = ModuleBase::GlobalFunc::ddot_real(this->dim, this->phi_m->get_pointer(), this->hphi.data()); @@ -96,9 +95,9 @@ void DiagoCG::diag_mock(hamilt::Hamilt *phm_in, psi::Psi> & this->orthogonal_gradient(phm_in, phi, m); this->calculate_gamma_cg(iter, gg_last, cg_norm, theta); - hp_info cg_hpsi_in(this->cg, cg_hpsi_range); - const std::complex* cg_hpsi = std::get<0>(phm_in->ops->hPsi(cg_hpsi_in))->get_pointer(); - ModuleBase::GlobalFunc::COPYARRAY(cg_hpsi, this->pphi.data(), this->dim); + hp_info cg_hpsi_in(this->cg, cg_hpsi_range, this->pphi.data()); + phm_in->ops->hPsi(cg_hpsi_in); + phm_in->sPsi(this->cg->get_pointer(), this->scg.data(), (size_t)this->dim); converged = this->update_psi(cg_norm, theta, this->eigenvalue[m]); diff --git a/source/module_hsolver/diago_david.cpp b/source/module_hsolver/diago_david.cpp index fbb1e01911..b36b370f62 100644 --- a/source/module_hsolver/diago_david.cpp +++ b/source/module_hsolver/diago_david.cpp @@ -105,9 +105,8 @@ void DiagoDavid::diag_mock(hamilt::Hamilt* phm_in, psi::Psi }*/ } //end of SchmitOrth and calculate H|psi> - hp_info dav_hpsi_in(&basis, psi::Range(1, 0, 0, nband-1)); - auto hp_psi = std::get<0>(phm_in->ops->hPsi(dav_hpsi_in)); - ModuleBase::GlobalFunc::COPYARRAY(hp_psi->get_pointer(), &hp(0, 0), hp_psi->get_nbasis() * nband); + hp_info dav_hpsi_in(&basis, psi::Range(1, 0, 0, nband-1), &hp(0, 0)); + phm_in->ops->hPsi(dav_hpsi_in); hc.zero_out(); sc.zero_out(); @@ -380,10 +379,10 @@ void DiagoDavid::cal_grad(hamilt::Hamilt* phm_in, phm_in->sPsi(ppsi, spsi, (size_t)npw); } - hp_info dav_hpsi_in(&basis, psi::Range(1, 0, nbase, nbase + notconv-1)); - auto hp_psi = std::get<0>(phm_in->ops->hPsi(dav_hpsi_in)); - ModuleBase::GlobalFunc::COPYARRAY(hp_psi->get_pointer(), &hp(nbase, 0), hp_psi->get_nbasis()*notconv); - + //calculate H|psi> for not convergence bands + hp_info dav_hpsi_in(&basis, psi::Range(1, 0, nbase, nbase + notconv-1), &hp(nbase, 0)); + phm_in->ops->hPsi(dav_hpsi_in); + ModuleBase::timer::tick("DiagoDavid", "cal_grad"); return; } diff --git a/source/module_hsolver/diago_iter_assist.cpp b/source/module_hsolver/diago_iter_assist.cpp index 13de5c6413..e16e2c9eca 100644 --- a/source/module_hsolver/diago_iter_assist.cpp +++ b/source/module_hsolver/diago_iter_assist.cpp @@ -50,9 +50,14 @@ void DiagoIterAssist::diagH_subspace(hamilt::Hamilt* pHamilt, //const std::complex *paux = aux; const std::complex *ppsi = psi.get_pointer(); + //allocated hpsi + std::vector> hpsi(psi.get_nbands() * psi.get_nbasis()); + //do hPsi for all bands psi::Range all_bands_range(1, psi.get_current_k(), 0, psi.get_nbands()-1); - hamilt::Operator>::hpsi_info hpsi_in(&psi, all_bands_range); - const std::complex *aux = std::get<0>(pHamilt->ops->hPsi(hpsi_in))->get_pointer(); + hamilt::Operator>::hpsi_info hpsi_in(&psi, all_bands_range, hpsi.data()); + pHamilt->ops->hPsi(hpsi_in); + //use aux as a data pointer for hpsi + const std::complex *aux = hpsi.data(); char trans1 = 'C'; char trans2 = 'N'; @@ -187,9 +192,14 @@ void DiagoIterAssist::diagH_subspace_init(hamilt::Hamilt* pHamilt, ModuleBase::GlobalFunc::COPYARRAY(psi.c, psi_temp.get_pointer(), psi_temp.size()); const std::complex *ppsi = psi_temp.get_pointer(); - psi::Range all_bands_range(1, 0, 0, nstart-1); - hamilt::Operator>::hpsi_info hpsi_in(&psi_temp, all_bands_range); - const std::complex *aux = std::get<0>(pHamilt->ops->hPsi(hpsi_in))->get_pointer(); + //allocated hpsi + std::vector> hpsi(psi_temp.get_nbands() * psi_temp.get_nbasis()); + //do hPsi for all bands + psi::Range all_bands_range(1, psi_temp.get_current_k(), 0, psi_temp.get_nbands()-1); + hamilt::Operator>::hpsi_info hpsi_in(&psi_temp, all_bands_range, hpsi.data()); + pHamilt->ops->hPsi(hpsi_in); + //use aux as a data pointer for hpsi + const std::complex *aux = hpsi.data(); char trans1 = 'C'; char trans2 = 'N'; diff --git a/source/module_psi/psi.h b/source/module_psi/psi.h index 088756c245..84d4ab55d1 100644 --- a/source/module_psi/psi.h +++ b/source/module_psi/psi.h @@ -97,6 +97,23 @@ class Psi else for(size_t index=0; indexsize();++index) psi[index] = tmp[index]; } } + + //Constructor 5: a wrapper of a data pointer, used for Operator::hPsi() + //in this case, fix_k can not be used + Psi(T* psi_pointer, const Psi& psi_in, const int nk_in, int nband_in=0) + { + assert(nk_in<=psi_in.get_nk()); + if(nband_in == 0) + { + nband_in = psi_in.get_nbands(); + } + this->ngk = psi_in.ngk; + this->npol = psi_in.npol; + this->nk = nk_in; + this->nbands = nband_in; + this->nbasis = psi_in.nbasis; + this->psi_current = psi_pointer; + } // initialize the wavefunction coefficient // only resize and construct function now is used From 5a6b1e3cf94f2a42f25eb3fd18d31c8935ea34c6 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 25 Aug 2022 14:39:27 +0800 Subject: [PATCH 58/63] fix : needs pw basis for envelope function --- source/module_esolver/esolver_ks.cpp | 18 ++++++++++++++++++ source/module_esolver/esolver_ks_pw.cpp | 15 --------------- source/src_lcao/local_orbital_charge.h | 2 +- 3 files changed, 19 insertions(+), 16 deletions(-) diff --git a/source/module_esolver/esolver_ks.cpp b/source/module_esolver/esolver_ks.cpp index c9afb48df4..8df0dc4b46 100644 --- a/source/module_esolver/esolver_ks.cpp +++ b/source/module_esolver/esolver_ks.cpp @@ -82,6 +82,24 @@ namespace ModuleESolver // mohan add 2021-01-30 Print_Info::setup_parameters(ucell, GlobalC::kv); + if(GlobalV::BASIS_TYPE=="pw" || GlobalV::CALCULATION=="ienvelope") + { + //Envelope function is calculated as lcao_in_pw + //new plane wave basis + #ifdef __MPI + this->pw_wfc->initmpi(GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, POOL_WORLD); + #endif + this->pw_wfc->initgrids(ucell.lat0, ucell.latvec, GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz); + this->pw_wfc->initparameters(false, inp.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); + #ifdef __MPI + if(INPUT.pw_seed > 0) MPI_Allreduce(MPI_IN_PLACE, &this->pw_wfc->ggecut, 1, MPI_DOUBLE, MPI_MAX , MPI_COMM_WORLD); + //qianrui add 2021-8-13 to make different kpar parameters can get the same results + #endif + this->pw_wfc->setuptransform(); + for(int ik = 0 ; ik < GlobalC::kv.nks; ++ik) GlobalC::kv.ngk[ik] = this->pw_wfc->npwk[ik]; + this->pw_wfc->collect_local_pw(); + this->print_wfcfft(inp, GlobalV::ofs_running); + } // initialize the real-space uniform grid for FFT and parallel // distribution of plane waves GlobalC::Pgrid.init(GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz, GlobalC::rhopw->nplane, diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 95421b0ee8..372669456f 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -69,21 +69,6 @@ namespace ModuleESolver void ESolver_KS_PW::Init_GlobalC(Input& inp, UnitCell_pseudo& cell) { - //new plane wave basis -#ifdef __MPI - this->pw_wfc->initmpi(GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, POOL_WORLD); -#endif - this->pw_wfc->initgrids(cell.lat0, cell.latvec, GlobalC::rhopw->nx, GlobalC::rhopw->ny, GlobalC::rhopw->nz); - this->pw_wfc->initparameters(false, inp.ecutwfc, GlobalC::kv.nks, GlobalC::kv.kvec_d.data()); -#ifdef __MPI - if(INPUT.pw_seed > 0) MPI_Allreduce(MPI_IN_PLACE, &this->pw_wfc->ggecut, 1, MPI_DOUBLE, MPI_MAX , MPI_COMM_WORLD); - //qianrui add 2021-8-13 to make different kpar parameters can get the same results -#endif - this->pw_wfc->setuptransform(); - for(int ik = 0 ; ik < GlobalC::kv.nks; ++ik) GlobalC::kv.ngk[ik] = this->pw_wfc->npwk[ik]; - this->pw_wfc->collect_local_pw(); - ESolver_KS::print_wfcfft(inp, GlobalV::ofs_running); - this->psi = GlobalC::wf.allocate(GlobalC::kv.nks); // cout<nrxx< Date: Thu, 25 Aug 2022 15:52:28 +0800 Subject: [PATCH 59/63] fix : in beforescf, use istep instead of istep - 1 this is because the 'istep' fed to Esolver::Run is already istep - 1 --- source/module_esolver/esolver_ks_pw.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/module_esolver/esolver_ks_pw.cpp b/source/module_esolver/esolver_ks_pw.cpp index 372669456f..d13448ca07 100644 --- a/source/module_esolver/esolver_ks_pw.cpp +++ b/source/module_esolver/esolver_ks_pw.cpp @@ -162,7 +162,7 @@ namespace ModuleESolver GlobalV::ofs_running << " Setup the Vl+Vh+Vxc according to new structure factor and new charge." << std::endl; // calculate the new potential accordint to // the new charge density. - GlobalC::pot.init_pot( istep-1, GlobalC::sf.strucFac ); + GlobalC::pot.init_pot( istep, GlobalC::sf.strucFac ); } } if(GlobalC::ucell.cell_parameter_updated) From ae4351e59b42b80c1395e4545a6a44537780c383 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 25 Aug 2022 15:57:09 +0800 Subject: [PATCH 60/63] fix : update reference value in 2nd order MD test cases since we've updated the 2nd order extrapolation scheme --- tests/integrate/170_PW_MD_2O/result.ref | 8 ++++---- tests/integrate/270_NO_MD_2O/result.ref | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/integrate/170_PW_MD_2O/result.ref b/tests/integrate/170_PW_MD_2O/result.ref index 803dfee9c6..f91c08a25e 100644 --- a/tests/integrate/170_PW_MD_2O/result.ref +++ b/tests/integrate/170_PW_MD_2O/result.ref @@ -1,5 +1,5 @@ -etotref -211.7989767495471 -etotperatomref -105.8994883748 -totalforceref 0.673488 -totalstressref 387.295738 +etotref -211.7989767457971 +etotperatomref -105.8994883729 +totalforceref 0.673564 +totalstressref 387.288753 totaltimeref +0.40399 diff --git a/tests/integrate/270_NO_MD_2O/result.ref b/tests/integrate/270_NO_MD_2O/result.ref index 362736b507..4b8bc71414 100644 --- a/tests/integrate/270_NO_MD_2O/result.ref +++ b/tests/integrate/270_NO_MD_2O/result.ref @@ -1,5 +1,5 @@ -etotref -211.5879950287044 -etotperatomref -105.7939975144 -totalforceref 1.954326 -totalstressref 595.789229 +etotref -211.5879950293724 +etotperatomref -105.7939975147 +totalforceref 1.954342 +totalstressref 595.789919 totaltimeref +5.996 From 05425e61987c9e09d32940ff5871ae0e98b1dd52 Mon Sep 17 00:00:00 2001 From: hongriTianqi Date: Thu, 25 Aug 2022 17:57:32 +0800 Subject: [PATCH 61/63] example: add dpgen autotest example --- docs/examples/dpgen.md | 190 +- .../dpgen-example/autotest/Al.PD04.PBE.UPF | 5825 +++++++++++++++++ .../autotest/Al_gga_10au_100Ry_3s3p2d.orb | 2037 ++++++ examples/dpgen-example/autotest/INPUT | 22 + examples/dpgen-example/autotest/INPUT.rlx | 23 + examples/dpgen-example/autotest/confs/STRU | 25 + examples/dpgen-example/autotest/machine.json | 108 + examples/dpgen-example/autotest/property.json | 56 + .../dpgen-example/init_and_run/machine.json | 108 + 9 files changed, 8391 insertions(+), 3 deletions(-) create mode 100644 examples/dpgen-example/autotest/Al.PD04.PBE.UPF create mode 100644 examples/dpgen-example/autotest/Al_gga_10au_100Ry_3s3p2d.orb create mode 100644 examples/dpgen-example/autotest/INPUT create mode 100644 examples/dpgen-example/autotest/INPUT.rlx create mode 100644 examples/dpgen-example/autotest/confs/STRU create mode 100644 examples/dpgen-example/autotest/machine.json create mode 100644 examples/dpgen-example/autotest/property.json create mode 100644 examples/dpgen-example/init_and_run/machine.json diff --git a/docs/examples/dpgen.md b/docs/examples/dpgen.md index f2ff30435a..54c69604f9 100644 --- a/docs/examples/dpgen.md +++ b/docs/examples/dpgen.md @@ -2,7 +2,9 @@ [back to main page](../../README.md) -[DP-GEN](https://github.com/deepmodeling/dpgen), the deep potential generator, is a package designed to generate deep learning based model of interatomic potential energy and force fields (Yuzhi Zhang, Haidi Wang, Weijie Chen, Jinzhe Zeng, Linfeng Zhang, Han Wang, and Weinan E, DP-GEN: A concurrent learning platform for the generation of reliable deep learning based potential energy models, Computer Physics Communications, 2020, 107206). ABACUS can now interface with DP-GEN to generate deep potentials. In the following, we take the FCC aluminum as an example. +[DP-GEN](https://github.com/deepmodeling/dpgen), the deep potential generator, is a package designed to generate deep learning based model of interatomic potential energy and force fields (Yuzhi Zhang, Haidi Wang, Weijie Chen, Jinzhe Zeng, Linfeng Zhang, Han Wang, and Weinan E, DP-GEN: A concurrent learning platform for the generation of reliable deep learning based potential energy models, Computer Physics Communications, 2020, 107206). ABACUS can now interface with DP-GEN to generate deep potentials and performe autotests. In the following, we take the FCC aluminum as an example. + +## init_bulk and run This example can be found in examples/dpgen-example/init_and_run directory. @@ -11,7 +13,7 @@ Firstly, one needs to prepare input files for ABACUS calculation, e.g., “INPUT Secondly, for the "dpgen init_bulk" step, an `init.json` file should be provided: -``` +```json { "init_fp_style": "ABACUS", # abacus interface "stages": [1,2,3,4], @@ -36,7 +38,7 @@ Secondly, for the "dpgen init_bulk" step, an `init.json` file should be provided ``` Next, for the "dpgen run" step, the following `run_param.json` should be provided. -``` +```json { "type_map": [ "Al" @@ -181,6 +183,188 @@ Next, for the "dpgen run" step, the following `run_param.json` should be provide } ``` +## autotest + +This example can be found in examples/dpgen-example/autotest directory. + +`dpgen autotest` supports to perform `relaxation`,`eos` (equation of state),`elastic`,`surface`,`vacancy`, and `interstitial` calculations with ABACUS. A `property.json` and `machine.json` file need to be provided. For example, + +`property.json`: +```json + +{ + "structures": ["confs/"], + "interaction": { + "type": "abacus", + "incar": "./INPUT", + "potcar_prefix":"./", + "potcars": {"Al": "Al.PD04.PBE.UPF"}, + "orb_files": {"Al":"Al_gga_10au_100Ry_3s3p2d.orb"} + }, + "_relaxation": { + "cal_type": "relaxation", + "cal_setting":{ + "input_prop": "./INPUT.rlx" + } + }, + "properties": [ + { + "type": "eos", + "vol_start": 0.85, + "vol_end": 1.15, + "vol_step": 0.01, + "cal_setting": { + "relax_pos": true, + "relax_shape": true, + "relax_vol": false, + "overwrite_interaction":{ + "type": "abacus", + "incar": "./INPUT", + "potcar_prefix":"./", + "orb_files": {"Al":"Al_gga_10au_100Ry_3s3p2d.orb"}, + "potcars": {"Al": "Al.PD04.PBE.UPF"} } + } + }, + { + "type": "elastic", + "skip": false, + "norm_deform": 1e-2, + "shear_deform": 1e-2 + }, + { + "type": "vacancy", + "skip": false, + "supercell": [2, 2, 2] + }, + { + "type": "surface", + "skip": true, + "min_slab_size": 15, + "min_vacuum_size":11, + "pert_xz": 0.01, + "max_miller": 3, + "cal_type": "static" + } + ] +} +``` + +`machine.json` + +```json +{ + "api_version": "1.0", + "deepmd_version": "2.1.0", + "train" :[ + { + "command": "dp", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "00*/train.log", + "grouped":true, + "job_name": "Al-train-VASP", + "disk_size": 100, + "scass_type":"c8_m32_1 * NVIDIA V100", + "platform": "ali", + "image_name":"LBG_DeePMD-kit_2.1.0_v1", + "on_demand":0 + } + } + }, + "resources": { + "number_node":123473334635, + "local_root":"./", + "cpu_per_node": 4, + "gpu_per_node": 1, + "queue_name": "GPU", + "group_size": 1 + } + }], + "model_devi": + [{ + "command": "lmp -i input.lammps -v restart 0", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "*/model_devi.log", + "grouped":true, + "job_name": "Al-devia-ABACUS", + "disk_size": 200, + "scass_type":"c8_m32_1 * NVIDIA V100", + "platform": "ali", + "image_name":"LBG_DeePMD-kit_2.1.0_v1", + "on_demand":0 + } + } + }, + "resources": { + "number_node": 28348383, + "local_root":"./", + "cpu_per_node": 4, + "gpu_per_node": 1, + "queue_name": "GPU", + "group_size": 100 + } + }], + "fp": + [{ + "command": "OMP_NUM_THREADS=1 mpirun -np 16 abacus", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "task*/fp.log", + "grouped":true, + "job_name": "al-DFT-test", + "disk_size": 100, + "scass_type":"c32_m128_cpu", + "platform": "ali", + "image_name":"XXXXX", + "on_demand":0 + } + } + }, + "resources": { + "number_node": 712254638889, + "cpu_per_node": 32, + "gpu_per_node": 0, + "queue_name": "CPU", + "group_size": 2, + "local_root":"./", + "source_list": ["/opt/intel/oneapi/setvars.sh"] + } + } + ] +} + +``` + +For each property, the command `dpgen autotest make property.json` will generate the input files, `dpgen autotest run property.json machine.json` will run the corresponding tasks, and `dpgen autotest post property.json` will collect the final results. + Notes: - The ABACUS-DPGEN interface can be used in both pw and lcao basis. diff --git a/examples/dpgen-example/autotest/Al.PD04.PBE.UPF b/examples/dpgen-example/autotest/Al.PD04.PBE.UPF new file mode 100644 index 0000000000..272c57d274 --- /dev/null +++ b/examples/dpgen-example/autotest/Al.PD04.PBE.UPF @@ -0,0 +1,5825 @@ + + + + This pseudopotential file has been produced using the code + ONCVPSP (Optimized Norm-Conservinng Vanderbilt PSeudopotential) + scalar-relativistic version 3.3.1 12/12/2017 by D. R. Hamann + The code is available through a link at URL www.mat-simresearch.com. + Documentation with the package provides a full discription of the + input data below. + + + While it is not required under the terms of the GNU GPL, it is + suggested that you cite D. R. Hamann, Phys. Rev. B 88, 085117 (2013) + in any publication using these pseudopotentials. + + +# ATOM AND REFERENCE CONFIGURATION +# atsym z nc nv iexc psfile + Al 13.00 3 2 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 + 2 +# +# l, rc, ep, ncon, nbas, qcut + 0 1.75000 -0.28491 4 9 6.00000 + 1 1.75000 -0.09967 4 9 6.40000 + 2 1.70000 0.05000 4 9 6.50000 +# +# LOCAL POTENTIAL +# lloc, lpopt, rc(5), dvloc0 + 4 5 1.40000 0.00000 +# +# VANDERBILT-KLEINMAN-BYLANDER PROJECTORs +# l, nproj, debl + 0 2 2.80000 + 1 2 2.80000 + 2 2 1.50000 +# +# MODEL CORE CHARGE +# icmod, fcfact, rcfact + 3 5.00000 1.30000 +# +# LOG DERIVATIVE ANALYSIS +# epsh1, epsh2, depsh + -12.00 12.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 6.0200 6.0300 6.0400 6.0500 6.0600 6.0700 + 6.0800 6.0900 6.1000 6.1100 6.1200 6.1300 6.1400 6.1500 + 6.1600 6.1700 6.1800 6.1900 6.2000 6.2100 6.2200 6.2300 + 6.2400 6.2500 6.2600 6.2700 6.2800 6.2900 6.3000 6.3100 + 6.3200 6.3300 6.3400 6.3500 6.3600 6.3700 6.3800 6.3900 + 6.4000 6.4100 6.4200 6.4300 6.4400 6.4500 6.4600 6.4700 + 6.4800 6.4900 6.5000 6.5100 6.5200 6.5300 6.5400 6.5500 + 6.5600 6.5700 6.5800 6.5900 6.6000 6.6100 6.6200 6.6300 + 6.6400 6.6500 6.6600 6.6700 6.6800 6.6900 6.7000 6.7100 + 6.7200 6.7300 6.7400 6.7500 6.7600 6.7700 6.7800 6.7900 + 6.8000 6.8100 6.8200 6.8300 6.8400 6.8500 6.8600 6.8700 + 6.8800 6.8900 6.9000 6.9100 6.9200 6.9300 6.9400 6.9500 + 6.9600 6.9700 6.9800 6.9900 7.0000 7.0100 7.0200 7.0300 + 7.0400 7.0500 7.0600 7.0700 7.0800 7.0900 7.1000 7.1100 + 7.1200 7.1300 7.1400 7.1500 7.1600 7.1700 7.1800 7.1900 + 7.2000 7.2100 7.2200 7.2300 7.2400 7.2500 7.2600 7.2700 + 7.2800 7.2900 7.3000 7.3100 7.3200 7.3300 7.3400 7.3500 + 7.3600 7.3700 7.3800 7.3900 7.4000 7.4100 7.4200 7.4300 + 7.4400 7.4500 7.4600 7.4700 7.4800 7.4900 7.5000 7.5100 + 7.5200 7.5300 7.5400 7.5500 7.5600 7.5700 7.5800 7.5900 + 7.6000 7.6100 7.6200 7.6300 7.6400 7.6500 7.6600 7.6700 + 7.6800 7.6900 7.7000 7.7100 7.7200 7.7300 7.7400 7.7500 + 7.7600 7.7700 7.7800 7.7900 7.8000 7.8100 7.8200 7.8300 + 7.8400 7.8500 7.8600 7.8700 7.8800 7.8900 7.9000 7.9100 + 7.9200 7.9300 7.9400 7.9500 7.9600 7.9700 7.9800 7.9900 + 8.0000 8.0100 8.0200 8.0300 8.0400 8.0500 8.0600 8.0700 + 8.0800 8.0900 8.1000 8.1100 8.1200 8.1300 8.1400 8.1500 + 8.1600 8.1700 8.1800 8.1900 8.2000 8.2100 8.2200 8.2300 + 8.2400 8.2500 8.2600 8.2700 8.2800 8.2900 8.3000 8.3100 + 8.3200 8.3300 8.3400 8.3500 8.3600 8.3700 8.3800 8.3900 + 8.4000 8.4100 8.4200 8.4300 8.4400 8.4500 8.4600 8.4700 + 8.4800 8.4900 8.5000 8.5100 8.5200 8.5300 8.5400 8.5500 + 8.5600 8.5700 8.5800 8.5900 8.6000 8.6100 8.6200 8.6300 + 8.6400 8.6500 8.6600 8.6700 8.6800 8.6900 8.7000 8.7100 + 8.7200 8.7300 8.7400 8.7500 8.7600 8.7700 8.7800 8.7900 + 8.8000 8.8100 8.8200 8.8300 8.8400 8.8500 8.8600 8.8700 + 8.8800 8.8900 8.9000 8.9100 8.9200 8.9300 8.9400 8.9500 + 8.9600 8.9700 8.9800 8.9900 9.0000 9.0100 9.0200 9.0300 + 9.0400 9.0500 9.0600 9.0700 9.0800 9.0900 9.1000 9.1100 + 9.1200 9.1300 9.1400 9.1500 9.1600 9.1700 9.1800 9.1900 + 9.2000 9.2100 9.2200 9.2300 9.2400 9.2500 9.2600 9.2700 + 9.2800 9.2900 9.3000 9.3100 9.3200 9.3300 9.3400 9.3500 + 9.3600 9.3700 9.3800 9.3900 9.4000 9.4100 9.4200 9.4300 + 9.4400 9.4500 9.4600 9.4700 9.4800 9.4900 9.5000 9.5100 + 9.5200 9.5300 9.5400 9.5500 9.5600 9.5700 9.5800 9.5900 + 9.6000 9.6100 9.6200 9.6300 9.6400 9.6500 9.6600 9.6700 + 9.6800 9.6900 9.7000 9.7100 9.7200 9.7300 9.7400 9.7500 + 9.7600 9.7700 9.7800 9.7900 9.8000 9.8100 9.8200 9.8300 + 9.8400 9.8500 9.8600 9.8700 9.8800 9.8900 9.9000 9.9100 + 9.9200 9.9300 9.9400 9.9500 9.9600 9.9700 9.9800 9.9900 + 10.0000 10.0100 10.0200 10.0300 10.0400 10.0500 10.0600 10.0700 + 10.0800 10.0900 10.1000 10.1100 10.1200 10.1300 10.1400 10.1500 + 10.1600 10.1700 10.1800 10.1900 10.2000 10.2100 10.2200 10.2300 + 10.2400 10.2500 10.2600 10.2700 10.2800 10.2900 10.3000 10.3100 + 10.3200 10.3300 10.3400 10.3500 10.3600 10.3700 10.3800 10.3900 + 10.4000 10.4100 10.4200 10.4300 10.4400 10.4500 10.4600 10.4700 + 10.4800 10.4900 10.5000 10.5100 10.5200 10.5300 10.5400 10.5500 + 10.5600 10.5700 10.5800 10.5900 10.6000 10.6100 10.6200 10.6300 + 10.6400 10.6500 10.6600 10.6700 10.6800 10.6900 10.7000 10.7100 + 10.7200 10.7300 10.7400 10.7500 10.7600 10.7700 10.7800 10.7900 + 10.8000 10.8100 10.8200 10.8300 10.8400 10.8500 10.8600 10.8700 + 10.8800 10.8900 10.9000 10.9100 10.9200 10.9300 10.9400 10.9500 + 10.9600 10.9700 10.9800 10.9900 11.0000 11.0100 11.0200 11.0300 + 11.0400 11.0500 11.0600 11.0700 11.0800 11.0900 11.1000 11.1100 + 11.1200 11.1300 11.1400 11.1500 11.1600 11.1700 11.1800 11.1900 + 11.2000 11.2100 11.2200 11.2300 11.2400 11.2500 11.2600 11.2700 + 11.2800 11.2900 11.3000 11.3100 11.3200 11.3300 11.3400 11.3500 + 11.3600 11.3700 11.3800 11.3900 11.4000 11.4100 11.4200 11.4300 + 11.4400 11.4500 11.4600 11.4700 11.4800 11.4900 11.5000 11.5100 + 11.5200 11.5300 11.5400 11.5500 11.5600 11.5700 11.5800 11.5900 + 11.6000 11.6100 11.6200 11.6300 11.6400 11.6500 11.6600 11.6700 + 11.6800 11.6900 11.7000 11.7100 11.7200 11.7300 11.7400 11.7500 + 11.7600 11.7700 11.7800 11.7900 11.8000 11.8100 11.8200 11.8300 + 11.8400 11.8500 11.8600 11.8700 11.8800 11.8900 11.9000 11.9100 + 11.9200 11.9300 11.9400 11.9500 11.9600 11.9700 11.9800 11.9900 + 12.0000 12.0100 12.0200 12.0300 12.0400 12.0500 12.0600 12.0700 + 12.0800 12.0900 12.1000 12.1100 12.1200 12.1300 12.1400 12.1500 + 12.1600 12.1700 12.1800 12.1900 12.2000 12.2100 12.2200 12.2300 + 12.2400 12.2500 12.2600 12.2700 12.2800 12.2900 12.3000 12.3100 + 12.3200 12.3300 12.3400 12.3500 12.3600 12.3700 12.3800 12.3900 + 12.4000 12.4100 12.4200 12.4300 12.4400 12.4500 12.4600 12.4700 + 12.4800 12.4900 12.5000 12.5100 12.5200 12.5300 12.5400 12.5500 + 12.5600 12.5700 12.5800 12.5900 12.6000 12.6100 12.6200 12.6300 + 12.6400 12.6500 12.6600 12.6700 12.6800 12.6900 12.7000 12.7100 + 12.7200 12.7300 12.7400 12.7500 12.7600 12.7700 12.7800 12.7900 + 12.8000 12.8100 12.8200 12.8300 12.8400 12.8500 12.8600 12.8700 + 12.8800 12.8900 12.9000 12.9100 12.9200 12.9300 12.9400 12.9500 + 12.9600 12.9700 12.9800 12.9900 13.0000 13.0100 13.0200 13.0300 + 13.0400 13.0500 13.0600 13.0700 13.0800 13.0900 13.1000 13.1100 + 13.1200 13.1300 13.1400 13.1500 13.1600 13.1700 13.1800 13.1900 + 13.2000 13.2100 13.2200 13.2300 13.2400 13.2500 13.2600 13.2700 + 13.2800 13.2900 13.3000 13.3100 13.3200 13.3300 13.3400 13.3500 + 13.3600 13.3700 13.3800 13.3900 13.4000 13.4100 13.4200 13.4300 + 13.4400 13.4500 13.4600 13.4700 13.4800 13.4900 13.5000 13.5100 + 13.5200 13.5300 13.5400 13.5500 13.5600 13.5700 13.5800 13.5900 + 13.6000 13.6100 13.6200 13.6300 13.6400 13.6500 13.6600 13.6700 + 13.6800 13.6900 13.7000 13.7100 13.7200 13.7300 13.7400 13.7500 + 13.7600 13.7700 13.7800 13.7900 13.8000 13.8100 13.8200 13.8300 + 13.8400 13.8500 13.8600 13.8700 13.8800 13.8900 13.9000 13.9100 + 13.9200 13.9300 13.9400 13.9500 13.9600 13.9700 13.9800 13.9900 + 14.0000 14.0100 14.0200 14.0300 14.0400 14.0500 14.0600 14.0700 + 14.0800 14.0900 14.1000 14.1100 14.1200 14.1300 14.1400 14.1500 + 14.1600 14.1700 14.1800 14.1900 14.2000 14.2100 14.2200 14.2300 + 14.2400 14.2500 14.2600 14.2700 14.2800 14.2900 14.3000 14.3100 + 14.3200 14.3300 14.3400 14.3500 14.3600 14.3700 14.3800 14.3900 + 14.4000 14.4100 14.4200 14.4300 14.4400 14.4500 14.4600 14.4700 + 14.4800 14.4900 14.5000 14.5100 14.5200 14.5300 14.5400 14.5500 + 14.5600 14.5700 14.5800 14.5900 14.6000 14.6100 14.6200 14.6300 + 14.6400 14.6500 14.6600 14.6700 14.6800 14.6900 14.7000 14.7100 + 14.7200 14.7300 14.7400 14.7500 14.7600 14.7700 14.7800 14.7900 + 14.8000 14.8100 14.8200 14.8300 14.8400 14.8500 14.8600 14.8700 + 14.8800 14.8900 14.9000 14.9100 14.9200 14.9300 14.9400 14.9500 + 14.9600 14.9700 14.9800 14.9900 15.0000 15.0100 15.0200 15.0300 + 15.0400 15.0500 15.0600 15.0700 15.0800 15.0900 15.1000 15.1100 + 15.1200 15.1300 15.1400 15.1500 15.1600 15.1700 15.1800 15.1900 + 15.2000 15.2100 15.2200 15.2300 15.2400 15.2500 15.2600 15.2700 + 15.2800 15.2900 15.3000 15.3100 15.3200 15.3300 15.3400 15.3500 + 15.3600 15.3700 15.3800 15.3900 15.4000 15.4100 15.4200 15.4300 + 15.4400 15.4500 15.4600 15.4700 15.4800 15.4900 15.5000 15.5100 + 15.5200 15.5300 15.5400 15.5500 15.5600 15.5700 15.5800 15.5900 + 15.6000 15.6100 15.6200 15.6300 15.6400 15.6500 15.6600 15.6700 + 15.6800 15.6900 15.7000 15.7100 15.7200 15.7300 15.7400 15.7500 + 15.7600 15.7700 15.7800 15.7900 15.8000 15.8100 15.8200 15.8300 + 15.8400 15.8500 15.8600 15.8700 15.8800 15.8900 15.9000 15.9100 + 15.9200 15.9300 15.9400 15.9500 15.9600 15.9700 15.9800 15.9900 + 16.0000 16.0100 16.0200 16.0300 16.0400 16.0500 16.0600 16.0700 + 16.0800 16.0900 16.1000 16.1100 16.1200 16.1300 16.1400 16.1500 + 16.1600 16.1700 16.1800 16.1900 16.2000 16.2100 16.2200 16.2300 + 16.2400 16.2500 16.2600 16.2700 16.2800 16.2900 16.3000 16.3100 + 16.3200 16.3300 16.3400 16.3500 16.3600 16.3700 16.3800 16.3900 + 16.4000 16.4100 16.4200 16.4300 16.4400 16.4500 16.4600 16.4700 + 16.4800 16.4900 16.5000 16.5100 16.5200 16.5300 16.5400 16.5500 + 16.5600 16.5700 16.5800 16.5900 16.6000 16.6100 16.6200 16.6300 + 16.6400 16.6500 16.6600 16.6700 16.6800 16.6900 16.7000 16.7100 + 16.7200 16.7300 16.7400 16.7500 16.7600 16.7700 16.7800 16.7900 + 16.8000 16.8100 16.8200 16.8300 16.8400 16.8500 16.8600 16.8700 + 16.8800 16.8900 16.9000 16.9100 16.9200 16.9300 16.9400 16.9500 + 16.9600 16.9700 16.9800 16.9900 17.0000 17.0100 17.0200 17.0300 + 17.0400 17.0500 17.0600 17.0700 17.0800 17.0900 17.1000 17.1100 + 17.1200 17.1300 17.1400 17.1500 17.1600 17.1700 17.1800 17.1900 + 17.2000 17.2100 17.2200 17.2300 17.2400 17.2500 17.2600 17.2700 + 17.2800 17.2900 17.3000 17.3100 17.3200 17.3300 17.3400 17.3500 + 17.3600 17.3700 17.3800 17.3900 17.4000 17.4100 17.4200 17.4300 + 17.4400 17.4500 17.4600 17.4700 17.4800 17.4900 17.5000 17.5100 + 17.5200 17.5300 17.5400 17.5500 17.5600 17.5700 17.5800 17.5900 + 17.6000 17.6100 17.6200 17.6300 17.6400 17.6500 17.6600 17.6700 + 17.6800 17.6900 17.7000 17.7100 17.7200 17.7300 17.7400 17.7500 + 17.7600 17.7700 17.7800 17.7900 17.8000 17.8100 17.8200 17.8300 + 17.8400 17.8500 17.8600 17.8700 17.8800 17.8900 17.9000 17.9100 + 17.9200 17.9300 17.9400 17.9500 17.9600 17.9700 17.9800 17.9900 + 18.0000 18.0100 18.0200 18.0300 18.0400 18.0500 18.0600 18.0700 + 18.0800 18.0900 18.1000 18.1100 18.1200 18.1300 18.1400 18.1500 + 18.1600 18.1700 18.1800 18.1900 18.2000 18.2100 18.2200 18.2300 + 18.2400 18.2500 18.2600 18.2700 18.2800 18.2900 18.3000 18.3100 + 18.3200 18.3300 18.3400 18.3500 18.3600 18.3700 18.3800 18.3900 + 18.4000 18.4100 18.4200 18.4300 18.4400 18.4500 18.4600 18.4700 + 18.4800 18.4900 18.5000 18.5100 18.5200 18.5300 18.5400 18.5500 + 18.5600 18.5700 18.5800 18.5900 18.6000 18.6100 18.6200 18.6300 + 18.6400 18.6500 18.6600 18.6700 18.6800 18.6900 18.7000 18.7100 + 18.7200 18.7300 18.7400 18.7500 + + + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 0.0100 + 0.0100 0.0100 0.0100 0.0100 + + + + -8.1841022395E+00 -8.1839427173E+00 -8.1834640636E+00 -8.1826660250E+00 + -8.1815481793E+00 -8.1801099382E+00 -8.1783505490E+00 -8.1762690978E+00 + -8.1738645129E+00 -8.1711355686E+00 -8.1680808891E+00 -8.1646989536E+00 + -8.1609880998E+00 -8.1569465295E+00 -8.1525723125E+00 -8.1478633910E+00 + -8.1428175844E+00 -8.1374325924E+00 -8.1317059993E+00 -8.1256352765E+00 + -8.1192177859E+00 -8.1124507821E+00 -8.1053314142E+00 -8.0978567276E+00 + -8.0900236655E+00 -8.0818290695E+00 -8.0732696810E+00 -8.0643421417E+00 + -8.0550429946E+00 -8.0453686846E+00 -8.0353155603E+00 -8.0248798745E+00 + -8.0140577871E+00 -8.0028453668E+00 -7.9912385943E+00 -7.9792333661E+00 + -7.9668254987E+00 -7.9540107334E+00 -7.9407847430E+00 -7.9271431374E+00 + -7.9130814719E+00 -7.8985952545E+00 -7.8836799550E+00 -7.8683310141E+00 + -7.8525438531E+00 -7.8363138837E+00 -7.8196365184E+00 -7.8025071809E+00 + -7.7849213159E+00 -7.7668743995E+00 -7.7483619488E+00 -7.7293795312E+00 + -7.7099227729E+00 -7.6899873671E+00 -7.6695690810E+00 -7.6486637626E+00 + -7.6272673459E+00 -7.6053758556E+00 -7.5829854110E+00 -7.5600922288E+00 + -7.5366926253E+00 -7.5127830181E+00 -7.4883599269E+00 -7.4634199738E+00 + -7.4379598843E+00 -7.4119764870E+00 -7.3854667145E+00 -7.3584276044E+00 + -7.3308563006E+00 -7.3027500560E+00 -7.2741062365E+00 -7.2449223252E+00 + -7.2151959300E+00 -7.1849247909E+00 -7.1541067914E+00 -7.1227399700E+00 + -7.0908225354E+00 -7.0583528834E+00 -7.0253296159E+00 -6.9917515632E+00 + -6.9576178077E+00 -6.9229277103E+00 -6.8876809396E+00 -6.8518775019E+00 + -6.8155177747E+00 -6.7786025410E+00 -6.7411330253E+00 -6.7031109311E+00 + -6.6645384797E+00 -6.6254184493E+00 -6.5857542151E+00 -6.5455497892E+00 + -6.5048098610E+00 -6.4635398366E+00 -6.4217458778E+00 -6.3794349408E+00 + -6.3366148121E+00 -6.2932941448E+00 -6.2494824914E+00 -6.2051903360E+00 + -6.1604291237E+00 -6.1152112874E+00 -6.0695502732E+00 -6.0234605620E+00 + -5.9769576893E+00 -5.9300582625E+00 -5.8827799751E+00 -5.8351416186E+00 + -5.7871630923E+00 -5.7388654110E+00 -5.6902707097E+00 -5.6414022478E+00 + -5.5922844114E+00 -5.5429427138E+00 -5.4934037960E+00 -5.4436954265E+00 + -5.3938465005E+00 -5.3438870404E+00 -5.2938481958E+00 -5.2437622456E+00 + -5.1936626009E+00 -5.1435838103E+00 -5.0935615672E+00 -5.0436327195E+00 + -4.9938352825E+00 -4.9442084550E+00 -4.8947926382E+00 -4.8456294585E+00 + -4.7967617946E+00 -4.7482338068E+00 -4.7000909714E+00 -4.6523801178E+00 + -4.6051494695E+00 -4.5584486879E+00 -4.5123289195E+00 -4.4668428456E+00 + -4.4220447337E+00 -4.3779904983E+00 -4.3347377285E+00 -4.2923457794E+00 + -4.2508758082E+00 -4.2103908411E+00 -4.1709548112E+00 -4.1326314301E+00 + -4.0954789696E+00 -4.0595462927E+00 -4.0248711207E+00 -3.9914778545E+00 + -3.9593759442E+00 -3.9285591316E+00 -3.8990053070E+00 -3.8706771975E+00 + -3.8435236582E+00 -3.8174815842E+00 -3.7924782208E+00 -3.7684337817E+00 + -3.7452641174E+00 -3.7228834131E+00 -3.7012065859E+00 -3.6801515164E+00 + -3.6596407742E+00 -3.6396030581E+00 -3.6199741211E+00 -3.6006973782E+00 + -3.5817241004E+00 -3.5630133441E+00 -3.5445316137E+00 -3.5262523482E+00 + -3.5081552897E+00 -3.4902257975E+00 -3.4724539386E+00 -3.4548338107E+00 + -3.4373631378E+00 -3.4200422192E+00 -3.4028740122E+00 -3.3858628277E+00 + -3.3690080302E+00 -3.3523012778E+00 -3.3357273043E+00 -3.3192615524E+00 + -3.3028833762E+00 -3.2865912338E+00 -3.2703902500E+00 -3.2542884643E+00 + -3.2382950538E+00 -3.2224109447E+00 -3.2066326375E+00 -3.1909598052E+00 + -3.1753954679E+00 -3.1599417353E+00 -3.1445987653E+00 -3.1293666033E+00 + -3.1142455864E+00 -3.0992357923E+00 -3.0843370740E+00 -3.0695491239E+00 + -3.0548715051E+00 -3.0403036661E+00 -3.0258449541E+00 -3.0114946321E+00 + -2.9972518937E+00 -2.9831158768E+00 -2.9690856757E+00 -2.9551603523E+00 + -2.9413389459E+00 -2.9276204816E+00 -2.9140039785E+00 -2.9004884556E+00 + -2.8870729380E+00 -2.8737564614E+00 -2.8605380765E+00 -2.8474168518E+00 + -2.8343918768E+00 -2.8214622639E+00 -2.8086271501E+00 -2.7958856982E+00 + -2.7832370976E+00 -2.7706805645E+00 -2.7582153426E+00 -2.7458407023E+00 + -2.7335559410E+00 -2.7213603820E+00 -2.7092533742E+00 -2.6972342913E+00 + -2.6853025305E+00 -2.6734575118E+00 -2.6616986767E+00 -2.6500254871E+00 + -2.6384374244E+00 -2.6269339876E+00 -2.6155146927E+00 -2.6041790710E+00 + -2.5929266682E+00 -2.5817570428E+00 -2.5706697651E+00 -2.5596644157E+00 + -2.5487405848E+00 -2.5378978702E+00 -2.5271358771E+00 -2.5164542161E+00 + -2.5058525027E+00 -2.4953303559E+00 -2.4848873973E+00 -2.4745232501E+00 + -2.4642375382E+00 -2.4540298850E+00 -2.4438999131E+00 -2.4338472427E+00 + -2.4238714914E+00 -2.4139722734E+00 -2.4041491983E+00 -2.3944018710E+00 + -2.3847298909E+00 -2.3751328512E+00 -2.3656103382E+00 -2.3561619314E+00 + -2.3467872024E+00 -2.3374857150E+00 -2.3282570244E+00 -2.3191006773E+00 + -2.3100162114E+00 -2.3010031549E+00 -2.2920610271E+00 -2.2831893374E+00 + -2.2743875857E+00 -2.2656552622E+00 -2.2569918475E+00 -2.2483968125E+00 + -2.2398696184E+00 -2.2314097170E+00 -2.2230165509E+00 -2.2146895534E+00 + -2.2064281489E+00 -2.1982317533E+00 -2.1900997739E+00 -2.1820316101E+00 + -2.1740266538E+00 -2.1660842895E+00 -2.1582038947E+00 -2.1503848407E+00 + -2.1426264928E+00 -2.1349282109E+00 -2.1272893499E+00 -2.1197092604E+00 + -2.1121872890E+00 -2.1047227793E+00 -2.0973150718E+00 -2.0899635052E+00 + -2.0826674166E+00 -2.0754261422E+00 -2.0682390176E+00 -2.0611053791E+00 + -2.0540245636E+00 -2.0469959096E+00 -2.0400187575E+00 -2.0330924507E+00 + -2.0262163354E+00 -2.0193897620E+00 -2.0126120850E+00 -2.0058826639E+00 + -1.9992008636E+00 -1.9925660550E+00 -1.9859776154E+00 -1.9794349288E+00 + -1.9729373867E+00 -1.9664843884E+00 -1.9600753413E+00 -1.9537096611E+00 + -1.9473867728E+00 -1.9411061102E+00 -1.9348671169E+00 -1.9286692459E+00 + -1.9225119606E+00 -1.9163947344E+00 -1.9103170511E+00 -1.9042784051E+00 + -1.8982783015E+00 -1.8923162563E+00 -1.8863917961E+00 -1.8805044589E+00 + -1.8746537931E+00 -1.8688393585E+00 -1.8630607257E+00 -1.8573174760E+00 + -1.8516092018E+00 -1.8459355060E+00 -1.8402960023E+00 -1.8346903146E+00 + -1.8291180775E+00 -1.8235789353E+00 -1.8180725426E+00 -1.8125985636E+00 + -1.8071566720E+00 -1.8017465508E+00 -1.7963678920E+00 -1.7910203964E+00 + -1.7857037732E+00 -1.7804177401E+00 -1.7751620223E+00 -1.7699363530E+00 + -1.7647404724E+00 -1.7595741280E+00 -1.7544370739E+00 -1.7493290705E+00 + -1.7442498844E+00 -1.7391992878E+00 -1.7341770586E+00 -1.7291829796E+00 + -1.7242168385E+00 -1.7192784275E+00 -1.7143675433E+00 -1.7094839860E+00 + -1.7046275598E+00 -1.6997980720E+00 -1.6949953331E+00 -1.6902191564E+00 + -1.6854693577E+00 -1.6807457552E+00 -1.6760481693E+00 -1.6713764219E+00 + -1.6667303369E+00 -1.6621097396E+00 -1.6575144563E+00 -1.6529443148E+00 + -1.6483991435E+00 -1.6438787717E+00 -1.6393830293E+00 -1.6349117467E+00 + -1.6304647548E+00 -1.6260418847E+00 -1.6216429677E+00 -1.6172678354E+00 + -1.6129163192E+00 -1.6085882508E+00 -1.6042834617E+00 -1.6000017834E+00 + -1.5957430476E+00 -1.5915070854E+00 -1.5872937284E+00 -1.5831028079E+00 + -1.5789341550E+00 -1.5747876012E+00 -1.5706629779E+00 -1.5665601163E+00 + -1.5624788483E+00 -1.5584190055E+00 -1.5543804201E+00 -1.5503629245E+00 + -1.5463663515E+00 -1.5423905345E+00 -1.5384353073E+00 -1.5345005046E+00 + -1.5305859616E+00 -1.5266915143E+00 -1.5228169999E+00 -1.5189622562E+00 + -1.5151271224E+00 -1.5113114386E+00 -1.5075150463E+00 -1.5037377881E+00 + -1.4999795082E+00 -1.4962400522E+00 -1.4925192670E+00 -1.4888170015E+00 + -1.4851331058E+00 -1.4814674319E+00 -1.4778198336E+00 -1.4741901664E+00 + -1.4705782877E+00 -1.4669840566E+00 -1.4634073342E+00 -1.4598479836E+00 + -1.4563058697E+00 -1.4527808595E+00 -1.4492728217E+00 -1.4457816272E+00 + -1.4423071487E+00 -1.4388492609E+00 -1.4354078406E+00 -1.4319827662E+00 + -1.4285739181E+00 -1.4251811787E+00 -1.4218044322E+00 -1.4184435644E+00 + -1.4150984631E+00 -1.4117690176E+00 -1.4084551191E+00 -1.4051566603E+00 + -1.4018735354E+00 -1.3986056403E+00 -1.3953528722E+00 -1.3921151298E+00 + -1.3888923133E+00 -1.3856843238E+00 -1.3824910641E+00 -1.3793124380E+00 + -1.3761483502E+00 -1.3729987068E+00 -1.3698634148E+00 -1.3667423821E+00 + -1.3636355176E+00 -1.3605427310E+00 -1.3574639326E+00 -1.3543990339E+00 + -1.3513479467E+00 -1.3483105835E+00 -1.3452868577E+00 -1.3422766828E+00 + -1.3392799733E+00 -1.3362966440E+00 -1.3333266100E+00 -1.3303697870E+00 + -1.3274260911E+00 -1.3244954388E+00 -1.3215777469E+00 -1.3186729325E+00 + -1.3157809131E+00 -1.3129016066E+00 -1.3100349309E+00 -1.3071808046E+00 + -1.3043391462E+00 -1.3015098748E+00 -1.2986929097E+00 -1.2958881704E+00 + -1.2930955767E+00 -1.2903150489E+00 -1.2875465075E+00 -1.2847898733E+00 + -1.2820450676E+00 -1.2793120118E+00 -1.2765906279E+00 -1.2738808382E+00 + -1.2711825656E+00 -1.2684957332E+00 -1.2658202646E+00 -1.2631560840E+00 + -1.2605031161E+00 -1.2578612860E+00 -1.2552305195E+00 -1.2526107427E+00 + -1.2500018827E+00 -1.2474038669E+00 -1.2448166234E+00 -1.2422400810E+00 + -1.2396741692E+00 -1.2371188181E+00 -1.2345739586E+00 -1.2320395221E+00 + -1.2295154411E+00 -1.2270016486E+00 -1.2244980783E+00 -1.2220046650E+00 + -1.2195213438E+00 -1.2170480511E+00 -1.2145847236E+00 -1.2121312992E+00 + -1.2096877163E+00 -1.2072539142E+00 -1.2048298331E+00 -1.2024154138E+00 + -1.2000105978E+00 -1.1976153278E+00 -1.1952295467E+00 -1.1928531987E+00 + -1.1904862282E+00 -1.1881285808E+00 -1.1857802024E+00 -1.1834410399E+00 + -1.1811110407E+00 -1.1787901530E+00 -1.1764783255E+00 -1.1741755075E+00 + -1.1718816490E+00 -1.1695967005E+00 -1.1673206130E+00 -1.1650533382E+00 + -1.1627948282E+00 -1.1605450355E+00 -1.1583039132E+00 -1.1560714148E+00 + -1.1538474940E+00 -1.1516321048E+00 -1.1494252019E+00 -1.1472267402E+00 + -1.1450366722E+00 -1.1428549540E+00 -1.1406815453E+00 -1.1385164033E+00 + -1.1363594848E+00 -1.1342107464E+00 -1.1320701505E+00 -1.1299376678E+00 + -1.1278132253E+00 -1.1256967731E+00 -1.1235882625E+00 -1.1214876475E+00 + -1.1193948847E+00 -1.1173098821E+00 -1.1152326592E+00 -1.1131632051E+00 + -1.1111015024E+00 -1.1090475334E+00 -1.1070012785E+00 -1.1049627344E+00 + -1.1029318756E+00 -1.1009086321E+00 -1.0988929540E+00 -1.0968847848E+00 + -1.0948840626E+00 -1.0928907201E+00 -1.0909047323E+00 -1.0889259740E+00 + -1.0869543559E+00 -1.0849897944E+00 -1.0830322099E+00 -1.0810815294E+00 + -1.0791376428E+00 -1.0772004576E+00 -1.0752700497E+00 -1.0733464122E+00 + -1.0714295445E+00 -1.0695194499E+00 -1.0676161321E+00 -1.0657196762E+00 + -1.0638300244E+00 -1.0619471020E+00 -1.0600708718E+00 -1.0582012922E+00 + -1.0563383187E+00 -1.0544819049E+00 -1.0526319536E+00 -1.0507884728E+00 + -1.0489514323E+00 -1.0471207982E+00 -1.0452965378E+00 -1.0434786191E+00 + -1.0416670117E+00 -1.0398616937E+00 -1.0380626226E+00 -1.0362697662E+00 + -1.0344830923E+00 -1.0327025689E+00 -1.0309281643E+00 -1.0291598469E+00 + -1.0273975849E+00 -1.0256413478E+00 -1.0238911047E+00 -1.0221468250E+00 + -1.0204084782E+00 -1.0186760341E+00 -1.0169494628E+00 -1.0152287343E+00 + -1.0135138191E+00 -1.0118046877E+00 -1.0101013110E+00 -1.0084036600E+00 + -1.0067117058E+00 -1.0050254197E+00 -1.0033447734E+00 -1.0016697387E+00 + -1.0000002874E+00 -9.9833639162E-01 -9.9667802378E-01 -9.9502515632E-01 + -9.9337776194E-01 -9.9173581349E-01 -9.9009928401E-01 -9.8846814672E-01 + -9.8684237500E-01 -9.8522194244E-01 -9.8360682277E-01 -9.8199698990E-01 + -9.8039241792E-01 -9.7879308108E-01 -9.7719895380E-01 -9.7561001068E-01 + -9.7402622645E-01 -9.7244757604E-01 -9.7087403452E-01 -9.6930557714E-01 + -9.6774217929E-01 -9.6618381653E-01 -9.6463046458E-01 -9.6308209931E-01 + -9.6153869673E-01 -9.6000023304E-01 -9.5846668456E-01 -9.5693802777E-01 + -9.5541423931E-01 -9.5389529595E-01 -9.5238117463E-01 -9.5087185241E-01 + -9.4936730652E-01 -9.4786751432E-01 -9.4637245332E-01 -9.4488210116E-01 + -9.4339643564E-01 -9.4191543467E-01 -9.4043907633E-01 -9.3896733882E-01 + -9.3750020048E-01 -9.3603763978E-01 -9.3457963534E-01 -9.3312616589E-01 + -9.3167721032E-01 -9.3023274762E-01 -9.2879275693E-01 -9.2735721751E-01 + -9.2592610876E-01 -9.2449941019E-01 -9.2307710146E-01 -9.2165916233E-01 + -9.2024557270E-01 -9.1883631257E-01 -9.1743136210E-01 -9.1603070155E-01 + -9.1463431129E-01 -9.1324217183E-01 -9.1185426379E-01 -9.1047056790E-01 + -9.0909106501E-01 -9.0771573611E-01 -9.0634456226E-01 -9.0497752468E-01 + -9.0361460467E-01 -9.0225578365E-01 -9.0090104317E-01 -8.9955036487E-01 + -8.9820373051E-01 -8.9686112195E-01 -8.9552252117E-01 -8.9418791025E-01 + -8.9285727137E-01 -8.9153058683E-01 -8.9020783904E-01 -8.8888901048E-01 + -8.8757408378E-01 -8.8626304164E-01 -8.8495586687E-01 -8.8365254238E-01 + -8.8235305120E-01 -8.8105737642E-01 -8.7976550127E-01 -8.7847740906E-01 + -8.7719308319E-01 -8.7591250716E-01 -8.7463566459E-01 -8.7336253916E-01 + -8.7209311467E-01 -8.7082737501E-01 -8.6956530415E-01 -8.6830688616E-01 + -8.6705210522E-01 -8.6580094556E-01 -8.6455339155E-01 -8.6330942762E-01 + -8.6206903828E-01 -8.6083220817E-01 -8.5959892197E-01 -8.5836916449E-01 + -8.5714292059E-01 -8.5592017524E-01 -8.5470091349E-01 -8.5348512047E-01 + -8.5227278141E-01 -8.5106388160E-01 -8.4985840643E-01 -8.4865634137E-01 + -8.4745767196E-01 -8.4626238385E-01 -8.4507046275E-01 -8.4388189444E-01 + -8.4269666480E-01 -8.4151475979E-01 -8.4033616543E-01 -8.3916086784E-01 + -8.3798885319E-01 -8.3682010776E-01 -8.3565461789E-01 -8.3449236999E-01 + -8.3333335055E-01 -8.3217754614E-01 -8.3102494340E-01 -8.2987552905E-01 + -8.2872928988E-01 -8.2758621274E-01 -8.2644628457E-01 -8.2530949238E-01 + -8.2417582325E-01 -8.2304526431E-01 -8.2191780280E-01 -8.2079342599E-01 + -8.1967212126E-01 -8.1855387601E-01 -8.1743867776E-01 -8.1632651405E-01 + -8.1521737254E-01 -8.1411124090E-01 -8.1300810691E-01 -8.1190795840E-01 + -8.1081078326E-01 -8.0971656946E-01 -8.0862530503E-01 -8.0753697805E-01 + -8.0645157668E-01 -8.0536908914E-01 -8.0428950371E-01 -8.0321280874E-01 + -8.0213899263E-01 -8.0106804385E-01 -7.9999995094E-01 -7.9893470248E-01 + -7.9787228713E-01 -7.9681269360E-01 -7.9575591067E-01 -7.9470192717E-01 + -7.9365073199E-01 -7.9260231408E-01 -7.9155666245E-01 -7.9051376617E-01 + -7.8947361436E-01 -7.8843619620E-01 -7.8740150092E-01 -7.8636951783E-01 + -7.8534023626E-01 -7.8431364563E-01 -7.8328973540E-01 -7.8226849507E-01 + -7.8124991422E-01 -7.8023398247E-01 -7.7922068951E-01 -7.7821002507E-01 + -7.7720197893E-01 -7.7619654094E-01 -7.7519370098E-01 -7.7419344900E-01 + -7.7319577499E-01 -7.7220066901E-01 -7.7120812115E-01 -7.7021812156E-01 + -7.6923066043E-01 -7.6824572802E-01 -7.6726331463E-01 -7.6628341060E-01 + -7.6530600633E-01 -7.6433109226E-01 -7.6335865890E-01 -7.6238869678E-01 + -7.6142119651E-01 -7.6045614871E-01 -7.5949354407E-01 -7.5853337333E-01 + -7.5757562727E-01 -7.5662029672E-01 -7.5566737255E-01 -7.5471684568E-01 + -7.5376870707E-01 -7.5282294774E-01 -7.5187955874E-01 -7.5093853117E-01 + -7.4999985618E-01 -7.4906352495E-01 -7.4812952872E-01 -7.4719785876E-01 + -7.4626850639E-01 -7.4534146299E-01 -7.4441671994E-01 -7.4349426871E-01 + -7.4257410078E-01 -7.4165620768E-01 -7.4074058099E-01 -7.3982721233E-01 + -7.3891609335E-01 -7.3800721576E-01 -7.3710057129E-01 -7.3619615171E-01 + -7.3529394886E-01 -7.3439395460E-01 -7.3349616081E-01 -7.3260055945E-01 + -7.3170714249E-01 -7.3081590195E-01 -7.2992682988E-01 -7.2903991839E-01 + -7.2815515960E-01 -7.2727254569E-01 -7.2639206886E-01 -7.2551372137E-01 + -7.2463749550E-01 -7.2376338358E-01 -7.2289137795E-01 -7.2202147103E-01 + -7.2115365523E-01 -7.2028792303E-01 -7.1942426694E-01 -7.1856267949E-01 + -7.1770315326E-01 -7.1684568087E-01 -7.1599025496E-01 -7.1513686822E-01 + -7.1428551335E-01 -7.1343618312E-01 -7.1258887031E-01 -7.1174356774E-01 + -7.1090026826E-01 -7.1005896476E-01 -7.0921965018E-01 -7.0838231745E-01 + -7.0754695957E-01 -7.0671356956E-01 -7.0588214048E-01 -7.0505266541E-01 + -7.0422513748E-01 -7.0339954983E-01 -7.0257589565E-01 -7.0175416815E-01 + -7.0093436058E-01 -7.0011646623E-01 -6.9930047840E-01 -6.9848639043E-01 + -6.9767419570E-01 -6.9686388760E-01 -6.9605545959E-01 -6.9524890510E-01 + -6.9444421765E-01 -6.9364139076E-01 -6.9284041798E-01 -6.9204129290E-01 + -6.9124400913E-01 -6.9044856031E-01 -6.8965494011E-01 -6.8886314225E-01 + -6.8807316044E-01 -6.8728498845E-01 -6.8649862006E-01 -6.8571404910E-01 + -6.8493126940E-01 -6.8415027484E-01 -6.8337105932E-01 -6.8259361677E-01 + -6.8181794114E-01 -6.8104402642E-01 -6.8027186661E-01 -6.7950145576E-01 + -6.7873278793E-01 -6.7796585720E-01 -6.7720065771E-01 -6.7643718359E-01 + -6.7567542901E-01 -6.7491538817E-01 -6.7415705530E-01 -6.7340042465E-01 + -6.7264549048E-01 -6.7189224710E-01 -6.7114068884E-01 -6.7039081005E-01 + -6.6964260510E-01 -6.6889606839E-01 -6.6815119436E-01 -6.6740797746E-01 + -6.6666641215E-01 -6.6592649295E-01 -6.6518821437E-01 -6.6445157097E-01 + -6.6371655732E-01 -6.6298316801E-01 -6.6225139768E-01 -6.6152124096E-01 + -6.6079269252E-01 -6.6006574705E-01 -6.5934039928E-01 -6.5861664393E-01 + -6.5789447577E-01 -6.5717388959E-01 -6.5645488019E-01 -6.5573744240E-01 + -6.5502157108E-01 -6.5430726110E-01 -6.5359450736E-01 -6.5288330477E-01 + -6.5217364828E-01 -6.5146553286E-01 -6.5075895349E-01 -6.5005390517E-01 + -6.4935038294E-01 -6.4864838185E-01 -6.4794789696E-01 -6.4724892338E-01 + -6.4655145621E-01 -6.4585549059E-01 -6.4516102168E-01 -6.4446804465E-01 + -6.4377655470E-01 -6.4308654706E-01 -6.4239801695E-01 -6.4171095964E-01 + -6.4102537041E-01 -6.4034124456E-01 -6.3965857741E-01 -6.3897736429E-01 + -6.3829760057E-01 -6.3761928162E-01 -6.3694240285E-01 -6.3626695967E-01 + -6.3559294752E-01 -6.3492036185E-01 -6.3424919815E-01 -6.3357945191E-01 + -6.3291111864E-01 -6.3224419388E-01 -6.3157867318E-01 -6.3091455210E-01 + -6.3025182625E-01 -6.2959049122E-01 -6.2893054264E-01 -6.2827197616E-01 + -6.2761478744E-01 -6.2695897217E-01 -6.2630452603E-01 -6.2565144475E-01 + -6.2499972406E-01 -6.2434935971E-01 -6.2370034749E-01 -6.2305268316E-01 + -6.2240636254E-01 -6.2176138145E-01 -6.2111773573E-01 -6.2047542124E-01 + -6.1983443385E-01 -6.1919476945E-01 -6.1855642396E-01 -6.1791939329E-01 + -6.1728367339E-01 -6.1664926021E-01 -6.1601614974E-01 -6.1538433796E-01 + -6.1475382089E-01 -6.1412459454E-01 -6.1349665495E-01 -6.1286999819E-01 + -6.1224462033E-01 -6.1162051745E-01 -6.1099768566E-01 -6.1037612109E-01 + -6.0975581986E-01 -6.0913677813E-01 -6.0851899207E-01 -6.0790245786E-01 + -6.0728717170E-01 -6.0667312980E-01 -6.0606032840E-01 -6.0544876374E-01 + -6.0483843207E-01 -6.0422932968E-01 -6.0362145285E-01 -6.0301479789E-01 + -6.0240936111E-01 -6.0180513886E-01 -6.0120212748E-01 -6.0060032333E-01 + -5.9999972280E-01 -5.9940032227E-01 -5.9880211816E-01 -5.9820510687E-01 + -5.9760928486E-01 -5.9701464857E-01 -5.9642119447E-01 -5.9582891902E-01 + -5.9523781873E-01 -5.9464789010E-01 -5.9405912965E-01 -5.9347153391E-01 + -5.9288509943E-01 -5.9229982278E-01 -5.9171570052E-01 -5.9113272924E-01 + -5.9055090555E-01 -5.8997022606E-01 -5.8939068740E-01 -5.8881228621E-01 + -5.8823501914E-01 -5.8765888286E-01 -5.8708387406E-01 -5.8650998942E-01 + -5.8593722565E-01 -5.8536557948E-01 -5.8479504763E-01 -5.8422562685E-01 + -5.8365731389E-01 -5.8309010553E-01 -5.8252399856E-01 -5.8195898975E-01 + -5.8139507593E-01 -5.8083225391E-01 -5.8027052052E-01 -5.7970987261E-01 + -5.7915030704E-01 -5.7859182067E-01 -5.7803441039E-01 -5.7747807308E-01 + -5.7692280566E-01 -5.7636860504E-01 -5.7581546814E-01 -5.7526339192E-01 + -5.7471237331E-01 -5.7416240929E-01 -5.7361349683E-01 -5.7306563292E-01 + -5.7251881455E-01 -5.7197303873E-01 -5.7142830250E-01 -5.7088460287E-01 + -5.7034193689E-01 -5.6980030162E-01 -5.6925969413E-01 -5.6872011149E-01 + -5.6818155078E-01 -5.6764400912E-01 -5.6710748361E-01 -5.6657197136E-01 + -5.6603746952E-01 -5.6550397523E-01 -5.6497148564E-01 -5.6443999791E-01 + -5.6390950922E-01 -5.6338001676E-01 -5.6285151772E-01 -5.6232400931E-01 + -5.6179748875E-01 -5.6127195326E-01 -5.6074740008E-01 -5.6022382646E-01 + -5.5970122966E-01 -5.5917960695E-01 -5.5865895561E-01 -5.5813927292E-01 + -5.5762055619E-01 -5.5710280272E-01 -5.5658600984E-01 -5.5607017487E-01 + -5.5555529515E-01 -5.5504136804E-01 -5.5452839088E-01 -5.5401636105E-01 + -5.5350527593E-01 -5.5299513291E-01 -5.5248592938E-01 -5.5197766274E-01 + -5.5147033043E-01 -5.5096392985E-01 -5.5045845846E-01 -5.4995391368E-01 + -5.4945029298E-01 -5.4894759383E-01 -5.4844581368E-01 -5.4794495004E-01 + -5.4744500038E-01 -5.4694596220E-01 -5.4644783303E-01 -5.4595061036E-01 + -5.4545429175E-01 -5.4495887471E-01 -5.4446435680E-01 -5.4397073557E-01 + -5.4347800858E-01 -5.4298617341E-01 -5.4249522763E-01 -5.4200516884E-01 + -5.4151599464E-01 -5.4102770262E-01 -5.4054029042E-01 -5.4005375564E-01 + -5.3956809593E-01 -5.3908330893E-01 -5.3859939228E-01 -5.3811634364E-01 + -5.3763416069E-01 -5.3715284109E-01 -5.3667238253E-01 -5.3619278270E-01 + -5.3571403930E-01 -5.3523615004E-01 -5.3475911263E-01 -5.3428292480E-01 + -5.3380758428E-01 -5.3333308882E-01 -5.3285943615E-01 -5.3238662404E-01 + -5.3191465025E-01 -5.3144351255E-01 -5.3097320873E-01 -5.3050373657E-01 + -5.3003509387E-01 -5.2956727843E-01 -5.2910028806E-01 -5.2863412058E-01 + -5.2816877383E-01 -5.2770424562E-01 -5.2724053382E-01 -5.2677763625E-01 + -5.2631555079E-01 -5.2585427530E-01 -5.2539380764E-01 -5.2493414571E-01 + -5.2447528738E-01 -5.2401723055E-01 -5.2355997313E-01 -5.2310351301E-01 + -5.2264784813E-01 -5.2219297639E-01 -5.2173889574E-01 -5.2128560411E-01 + -5.2083309945E-01 -5.2038137970E-01 -5.1993044283E-01 -5.1948028681E-01 + -5.1903090960E-01 -5.1858230919E-01 -5.1813448357E-01 -5.1768743073E-01 + -5.1724114867E-01 -5.1679563540E-01 -5.1635088894E-01 -5.1590690730E-01 + -5.1546368852E-01 -5.1502123063E-01 -5.1457953168E-01 -5.1413858970E-01 + -5.1369840277E-01 -5.1325896894E-01 -5.1282028628E-01 -5.1238235286E-01 + -5.1194516677E-01 -5.1150872610E-01 -5.1107302894E-01 -5.1063807339E-01 + -5.1020385757E-01 -5.0977037958E-01 -5.0933763755E-01 -5.0890562960E-01 + -5.0847435387E-01 -5.0804380849E-01 -5.0761399162E-01 -5.0718490141E-01 + -5.0675653601E-01 -5.0632889360E-01 -5.0590197233E-01 -5.0547577040E-01 + -5.0505028597E-01 -5.0462551725E-01 -5.0420146243E-01 -5.0377811970E-01 + -5.0335548729E-01 -5.0293356339E-01 -5.0251234624E-01 -5.0209183405E-01 + -5.0167202506E-01 -5.0125291751E-01 -5.0083450964E-01 -5.0041679969E-01 + -4.9999978593E-01 -4.9958346662E-01 -4.9916784001E-01 -4.9875290439E-01 + -4.9833865804E-01 -4.9792509923E-01 -4.9751222625E-01 -4.9710003741E-01 + -4.9668853100E-01 -4.9627770533E-01 -4.9586755871E-01 -4.9545808946E-01 + -4.9504929590E-01 -4.9464117637E-01 -4.9423372918E-01 -4.9382695270E-01 + -4.9342084526E-01 -4.9301540520E-01 -4.9261063090E-01 -4.9220652070E-01 + -4.9180307298E-01 -4.9140028611E-01 -4.9099815847E-01 -4.9059668843E-01 + -4.9019587440E-01 -4.8979571475E-01 -4.8939620789E-01 -4.8899735223E-01 + -4.8859914617E-01 -4.8820158812E-01 -4.8780467651E-01 -4.8740840977E-01 + -4.8701278631E-01 -4.8661780458E-01 -4.8622346301E-01 -4.8582976006E-01 + -4.8543669416E-01 -4.8504426378E-01 -4.8465246738E-01 -4.8426130341E-01 + -4.8387077036E-01 -4.8348086669E-01 -4.8309159089E-01 -4.8270294143E-01 + -4.8231491681E-01 -4.8192751553E-01 -4.8154073608E-01 -4.8115457696E-01 + -4.8076903669E-01 -4.8038411378E-01 -4.7999980675E-01 -4.7961611411E-01 + -4.7923303441E-01 -4.7885056616E-01 -4.7846870791E-01 -4.7808745820E-01 + -4.7770681558E-01 -4.7732677860E-01 -4.7694734580E-01 -4.7656851576E-01 + -4.7619028704E-01 -4.7581265820E-01 -4.7543562783E-01 -4.7505919449E-01 + -4.7468335678E-01 -4.7430811328E-01 -4.7393346258E-01 -4.7355940328E-01 + -4.7318593398E-01 -4.7281305328E-01 -4.7244075980E-01 -4.7206905214E-01 + -4.7169792893E-01 -4.7132738879E-01 -4.7095743035E-01 -4.7058805223E-01 + -4.7021925307E-01 -4.6985103152E-01 -4.6948338622E-01 -4.6911631581E-01 + -4.6874981894E-01 -4.6838389429E-01 -4.6801854049E-01 -4.6765375623E-01 + -4.6728954017E-01 -4.6692589098E-01 -4.6656280734E-01 -4.6620028794E-01 + -4.6583833145E-01 -4.6547693658E-01 -4.6511610200E-01 -4.6475582643E-01 + -4.6439610855E-01 -4.6403694709E-01 -4.6367834074E-01 -4.6332028823E-01 + -4.6296278826E-01 -4.6260583957E-01 -4.6224944088E-01 -4.6189359091E-01 + -4.6153828841E-01 -4.6118353211E-01 -4.6082932074E-01 -4.6047565306E-01 + -4.6012252782E-01 -4.5976994377E-01 -4.5941789966E-01 -4.5906639425E-01 + -4.5871542632E-01 -4.5836499463E-01 -4.5801509794E-01 -4.5766573504E-01 + -4.5731690471E-01 -4.5696860572E-01 -4.5662083687E-01 -4.5627359695E-01 + -4.5592688475E-01 -4.5558069906E-01 -4.5523503870E-01 -4.5488990246E-01 + -4.5454528915E-01 -4.5420119759E-01 -4.5385762659E-01 -4.5351457498E-01 + -4.5317204157E-01 -4.5283002519E-01 -4.5248852467E-01 -4.5214753885E-01 + -4.5180706656E-01 -4.5146710664E-01 -4.5112765794E-01 -4.5078871931E-01 + -4.5045028959E-01 -4.5011236765E-01 -4.4977495234E-01 -4.4943804251E-01 + -4.4910163705E-01 -4.4876573480E-01 -4.4843033466E-01 -4.4809543548E-01 + -4.4776103615E-01 -4.4742713556E-01 -4.4709373258E-01 -4.4676082611E-01 + -4.4642841503E-01 -4.4609649824E-01 -4.4576507465E-01 -4.4543414314E-01 + -4.4510370264E-01 -4.4477375203E-01 -4.4444429024E-01 -4.4411531619E-01 + -4.4378682877E-01 -4.4345882693E-01 -4.4313130959E-01 -4.4280427566E-01 + -4.4247772408E-01 -4.4215165379E-01 -4.4182606372E-01 -4.4150095281E-01 + -4.4117632000E-01 -4.4085216425E-01 -4.4052848449E-01 -4.4020527969E-01 + -4.3988254879E-01 -4.3956029076E-01 -4.3923850456E-01 -4.3891718914E-01 + -4.3859634349E-01 -4.3827596657E-01 -4.3795605735E-01 -4.3763661481E-01 + -4.3731763793E-01 -4.3699912569E-01 -4.3668107708E-01 -4.3636349109E-01 + -4.3604636670E-01 -4.3572970292E-01 -4.3541349873E-01 -4.3509775314E-01 + -4.3478246516E-01 -4.3446763378E-01 -4.3415325802E-01 -4.3383933689E-01 + -4.3352586940E-01 -4.3321285458E-01 -4.3290029143E-01 -4.3258817899E-01 + -4.3227651627E-01 -4.3196530232E-01 -4.3165453615E-01 -4.3134421681E-01 + -4.3103434333E-01 -4.3072491475E-01 -4.3041593012E-01 -4.3010738847E-01 + -4.2979928886E-01 -4.2949163034E-01 -4.2918441195E-01 -4.2887763277E-01 + -4.2857129184E-01 -4.2826538822E-01 -4.2795992099E-01 -4.2765488921E-01 + -4.2735029195E-01 -4.2704612827E-01 -4.2674239726E-01 -4.2643909800E-01 + -4.2613622955E-01 -4.2583379102E-01 -4.2553178147E-01 -4.2523020000E-01 + -4.2492904570E-01 -4.2462831766E-01 -4.2432801498E-01 -4.2402813676E-01 + -4.2372868209E-01 -4.2342965008E-01 -4.2313103984E-01 -4.2283285047E-01 + -4.2253508109E-01 -4.2223773080E-01 -4.2194079873E-01 -4.2164428399E-01 + -4.2134818571E-01 -4.2105250300E-01 -4.2075723499E-01 -4.2046238081E-01 + -4.2016793960E-01 -4.1987391047E-01 -4.1958029258E-01 -4.1928708505E-01 + -4.1899428704E-01 -4.1870189767E-01 -4.1840991610E-01 -4.1811834147E-01 + -4.1782717293E-01 -4.1753640964E-01 -4.1724605074E-01 -4.1695609541E-01 + -4.1666654279E-01 -4.1637739204E-01 -4.1608864234E-01 -4.1580029284E-01 + -4.1551234272E-01 -4.1522479115E-01 -4.1493763730E-01 -4.1465088034E-01 + -4.1436451945E-01 -4.1407855382E-01 -4.1379298262E-01 -4.1350780504E-01 + -4.1322302027E-01 -4.1293862750E-01 -4.1265462591E-01 -4.1237101470E-01 + -4.1208779307E-01 -4.1180496021E-01 -4.1152251532E-01 -4.1124045761E-01 + -4.1095878628E-01 -4.1067750053E-01 -4.1039659958E-01 -4.1011608264E-01 + -4.0983594892E-01 -4.0955619763E-01 -4.0927682800E-01 -4.0899783924E-01 + -4.0871923057E-01 -4.0844100121E-01 -4.0816315040E-01 -4.0788567737E-01 + -4.0760858133E-01 -4.0733186153E-01 -4.0705551719E-01 -4.0677954756E-01 + -4.0650395187E-01 -4.0622872936E-01 -4.0595387928E-01 -4.0567940087E-01 + -4.0540529337E-01 -4.0513155604E-01 -4.0485818813E-01 -4.0458518888E-01 + -4.0431255756E-01 -4.0404029342E-01 -4.0376839572E-01 -4.0349686371E-01 + -4.0322569667E-01 -4.0295489386E-01 -4.0268445453E-01 -4.0241437797E-01 + -4.0214466345E-01 -4.0187531023E-01 -4.0160631758E-01 -4.0133768480E-01 + -4.0106941115E-01 -4.0080149591E-01 -4.0053393837E-01 -4.0026673781E-01 + -3.9999989352E-01 -3.9973340479E-01 -3.9946727090E-01 -3.9920149114E-01 + -3.9893606482E-01 -3.9867099122E-01 -3.9840626964E-01 -3.9814189939E-01 + -3.9787787976E-01 -3.9761421006E-01 -3.9735088959E-01 -3.9708791765E-01 + -3.9682529357E-01 -3.9656301663E-01 -3.9630108617E-01 -3.9603950149E-01 + -3.9577826191E-01 -3.9551736674E-01 -3.9525681531E-01 -3.9499660694E-01 + -3.9473674094E-01 -3.9447721665E-01 -3.9421803339E-01 -3.9395919049E-01 + -3.9370068727E-01 -3.9344252308E-01 -3.9318469724E-01 -3.9292720909E-01 + -3.9267005797E-01 -3.9241324321E-01 -3.9215676415E-01 -3.9190062015E-01 + -3.9164481053E-01 -3.9138933465E-01 -3.9113419186E-01 -3.9087938150E-01 + -3.9062490292E-01 -3.9037075548E-01 -3.9011693853E-01 -3.8986345143E-01 + -3.8961029353E-01 -3.8935746419E-01 -3.8910496278E-01 -3.8885278865E-01 + -3.8860094118E-01 -3.8834941972E-01 -3.8809822364E-01 -3.8784735231E-01 + -3.8759680511E-01 -3.8734658140E-01 -3.8709668057E-01 -3.8684710197E-01 + -3.8659784500E-01 -3.8634890903E-01 -3.8610029344E-01 -3.8585199761E-01 + -3.8560402093E-01 -3.8535636278E-01 -3.8510902254E-01 -3.8486199962E-01 + -3.8461529339E-01 -3.8436890324E-01 -3.8412282858E-01 -3.8387706879E-01 + -3.8363162327E-01 -3.8338649142E-01 -3.8314167264E-01 -3.8289716632E-01 + -3.8265297187E-01 -3.8240908870E-01 -3.8216551621E-01 -3.8192225380E-01 + -3.8167930089E-01 -3.8143665688E-01 -3.8119432118E-01 -3.8095229322E-01 + -3.8071057239E-01 -3.8046915812E-01 -3.8022804983E-01 -3.7998724693E-01 + -3.7974674884E-01 -3.7950655499E-01 -3.7926666480E-01 -3.7902707769E-01 + -3.7878779309E-01 -3.7854881042E-01 -3.7831012912E-01 -3.7807174862E-01 + -3.7783366834E-01 -3.7759588772E-01 -3.7735840620E-01 -3.7712122321E-01 + -3.7688433819E-01 -3.7664775057E-01 -3.7641145980E-01 -3.7617546532E-01 + -3.7593976658E-01 -3.7570436300E-01 -3.7546925406E-01 -3.7523443918E-01 + -3.7499991782E-01 -3.7476568943E-01 -3.7453175345E-01 -3.7429810935E-01 + -3.7406475658E-01 -3.7383169459E-01 -3.7359892284E-01 -3.7336644078E-01 + -3.7313424788E-01 -3.7290234360E-01 -3.7267072740E-01 -3.7243939874E-01 + -3.7220835709E-01 -3.7197760192E-01 -3.7174713268E-01 -3.7151694886E-01 + -3.7128704991E-01 -3.7105743532E-01 -3.7082810456E-01 -3.7059905709E-01 + -3.7037029240E-01 -3.7014180996E-01 -3.6991360924E-01 -3.6968568974E-01 + -3.6945805092E-01 -3.6923069228E-01 -3.6900361329E-01 -3.6877681343E-01 + -3.6855029220E-01 -3.6832404909E-01 -3.6809808357E-01 -3.6787239513E-01 + -3.6764698328E-01 -3.6742184750E-01 -3.6719698728E-01 -3.6697240212E-01 + -3.6674809151E-01 -3.6652405495E-01 -3.6630029194E-01 -3.6607680198E-01 + -3.6585358457E-01 -3.6563063921E-01 -3.6540796540E-01 -3.6518556265E-01 + -3.6496343046E-01 -3.6474156835E-01 -3.6451997580E-01 -3.6429865235E-01 + -3.6407759749E-01 -3.6385681074E-01 -3.6363629160E-01 -3.6341603961E-01 + -3.6319605426E-01 -3.6297633507E-01 -3.6275688157E-01 -3.6253769327E-01 + -3.6231876968E-01 -3.6210011034E-01 -3.6188171476E-01 -3.6166358247E-01 + -3.6144571299E-01 -3.6122810584E-01 -3.6101076055E-01 -3.6079367665E-01 + -3.6057685367E-01 -3.6036029114E-01 -3.6014398859E-01 -3.5992794554E-01 + -3.5971216154E-01 -3.5949663612E-01 -3.5928136882E-01 -3.5906635916E-01 + -3.5885160670E-01 -3.5863711096E-01 -3.5842287148E-01 -3.5820888782E-01 + -3.5799515950E-01 -3.5778168608E-01 -3.5756846710E-01 -3.5735550210E-01 + -3.5714279063E-01 -3.5693033224E-01 -3.5671812647E-01 -3.5650617288E-01 + -3.5629447101E-01 -3.5608302042E-01 -3.5587182066E-01 -3.5566087129E-01 + -3.5545017186E-01 -3.5523972192E-01 -3.5502952103E-01 -3.5481956876E-01 + -3.5460986466E-01 -3.5440040829E-01 -3.5419119921E-01 -3.5398223698E-01 + -3.5377352117E-01 -3.5356505134E-01 -3.5335682706E-01 -3.5314884790E-01 + -3.5294111341E-01 -3.5273362318E-01 -3.5252637676E-01 -3.5231937373E-01 + -3.5211261367E-01 -3.5190609614E-01 -3.5169982071E-01 -3.5149378697E-01 + -3.5128799448E-01 -3.5108244283E-01 -3.5087713159E-01 -3.5067206034E-01 + -3.5046722865E-01 -3.5026263612E-01 -3.5005828232E-01 -3.4985416683E-01 + -3.4965028923E-01 -3.4944664912E-01 -3.4924324608E-01 -3.4904007968E-01 + -3.4883714953E-01 -3.4863445520E-01 -3.4843199630E-01 -3.4822977240E-01 + -3.4802778309E-01 -3.4782602798E-01 -3.4762450665E-01 -3.4742321870E-01 + -3.4722216372E-01 -3.4702134131E-01 -3.4682075106E-01 -3.4662039257E-01 + -3.4642026545E-01 -3.4622036928E-01 -3.4602070368E-01 -3.4582126823E-01 + -3.4562206255E-01 -3.4542308624E-01 -3.4522433890E-01 -3.4502582014E-01 + -3.4482752956E-01 -3.4462946677E-01 -3.4443163137E-01 -3.4423402298E-01 + -3.4403664120E-01 -3.4383948565E-01 -3.4364255594E-01 -3.4344585168E-01 + -3.4324937247E-01 -3.4305311795E-01 -3.4285708771E-01 -3.4266128138E-01 + -3.4246569857E-01 -3.4227033891E-01 -3.4207520200E-01 -3.4188028747E-01 + -3.4168559494E-01 -3.4149112403E-01 -3.4129687436E-01 -3.4110284555E-01 + -3.4090903723E-01 -3.4071544902E-01 -3.4052208055E-01 -3.4032893144E-01 + -3.4013600132E-01 -3.3994328981E-01 -3.3975079656E-01 -3.3955852118E-01 + -3.3936646330E-01 -3.3917462256E-01 -3.3898299859E-01 -3.3879159103E-01 + -3.3860039949E-01 -3.3840942363E-01 -3.3821866308E-01 -3.3802811746E-01 + -3.3783778642E-01 -3.3764766960E-01 -3.3745776664E-01 -3.3726807716E-01 + -3.3707860082E-01 -3.3688933726E-01 -3.3670028611E-01 -3.3651144702E-01 + -3.3632281964E-01 -3.3613440360E-01 -3.3594619856E-01 -3.3575820415E-01 + -3.3557042002E-01 -3.3538284583E-01 -3.3519548122E-01 -3.3500832584E-01 + -3.3482137933E-01 -3.3463464136E-01 -3.3444811156E-01 -3.3426178960E-01 + -3.3407567512E-01 -3.3388976778E-01 -3.3370406724E-01 -3.3351857314E-01 + -3.3333328515E-01 -3.3314820292E-01 -3.3296332610E-01 -3.3277865437E-01 + -3.3259418737E-01 -3.3240992476E-01 -3.3222586621E-01 -3.3204201138E-01 + -3.3185835993E-01 -3.3167491152E-01 -3.3149166581E-01 -3.3130862247E-01 + -3.3112578117E-01 -3.3094314157E-01 -3.3076070333E-01 -3.3057846613E-01 + -3.3039642963E-01 -3.3021459350E-01 -3.3003295741E-01 -3.2985152103E-01 + -3.2967028403E-01 -3.2948924608E-01 -3.2930840685E-01 -3.2912776603E-01 + -3.2894732327E-01 -3.2876707826E-01 -3.2858703067E-01 -3.2840718017E-01 + -3.2822752645E-01 -3.2804806918E-01 -3.2786880804E-01 -3.2768974270E-01 + -3.2751087285E-01 -3.2733219817E-01 -3.2715371833E-01 -3.2697543302E-01 + -3.2679734192E-01 -3.2661944471E-01 -3.2644174108E-01 -3.2626423071E-01 + -3.2608691329E-01 -3.2590978850E-01 -3.2573285603E-01 -3.2555611556E-01 + -3.2537956678E-01 -3.2520320939E-01 -3.2502704306E-01 -3.2485106749E-01 + -3.2467528237E-01 -3.2449968740E-01 -3.2432428225E-01 -3.2414906663E-01 + -3.2397404023E-01 -3.2379920274E-01 -3.2362455385E-01 -3.2345009327E-01 + -3.2327582068E-01 -3.2310173578E-01 -3.2292783828E-01 -3.2275412786E-01 + -3.2258060422E-01 -3.2240726707E-01 -3.2223411610E-01 -3.2206115102E-01 + -3.2188837152E-01 -3.2171577731E-01 -3.2154336808E-01 -3.2137114355E-01 + -3.2119910341E-01 -3.2102724737E-01 -3.2085557513E-01 -3.2068408640E-01 + -3.2051278089E-01 -3.2034165829E-01 -3.2017071833E-01 -3.1999996070E-01 + + + + -1.5381461105E-09 2.2298172447E-02 4.4482909183E-02 6.6442672064E-02 + 8.8069689887E-02 1.0926177179E-01 1.2992403767E-01 1.4997053977E-01 + 1.6932575124E-01 1.8792589909E-01 2.0572012151E-01 2.2267143174E-01 + 2.3875747353E-01 2.5397105616E-01 2.6832046019E-01 2.8182950820E-01 + 2.9453739836E-01 3.0649830184E-01 3.1778072863E-01 3.2846666943E-01 + 3.3865052484E-01 3.4843783575E-01 3.5794383201E-01 3.6729181905E-01 + 3.7661142438E-01 3.8603672811E-01 3.9570430340E-01 4.0575119406E-01 + 4.1631285753E-01 4.2752110230E-01 4.3950204872E-01 4.5237414233E-01 + 4.6624624798E-01 4.8121585226E-01 4.9736740017E-01 5.1477079035E-01 + 5.3348005131E-01 5.5353221819E-01 5.7494642746E-01 5.9772324382E-01 + 6.2184423019E-01 6.4727176885E-01 6.7394913803E-01 7.0180084479E-01 + 7.3073321160E-01 7.6063521054E-01 7.9137953541E-01 8.2282389900E-01 + 8.5481253930E-01 8.8717791582E-01 9.1974257412E-01 9.5232115460E-01 + 9.8472251916E-01 1.0167519678E+00 1.0482135160E+00 1.0789122018E+00 + 1.1086563932E+00 1.1372600627E+00 1.1645450004E+00 1.1903429335E+00 + 1.2144975252E+00 1.2368662239E+00 1.2573219384E+00 1.2757545143E+00 + 1.2920719928E+00 1.3062016321E+00 1.3180906784E+00 1.3277068738E+00 + 1.3350386939E+00 1.3400953105E+00 1.3429062802E+00 1.3435209598E+00 + 1.3420076585E+00 1.3384525346E+00 1.3329582534E+00 1.3256424223E+00 + 1.3166358245E+00 1.3060804745E+00 1.2941275224E+00 1.2809350338E+00 + 1.2666656772E+00 1.2514843500E+00 1.2355557753E+00 1.2190421035E+00 + 1.2021005526E+00 1.1848811191E+00 1.1675243929E+00 1.1501595082E+00 + 1.1329022575E+00 1.1158533997E+00 1.0990971844E+00 1.0827001166E+00 + 1.0667099807E+00 1.0511551393E+00 1.0360441190E+00 1.0213654925E+00 + 1.0070880602E+00 9.9316133263E-01 9.7951630887E-01 9.6606654466E-01 + 9.5270949683E-01 9.3932812909E-01 9.2579275944E-01 9.1196312620E-01 + 8.9769064651E-01 8.8282083815E-01 8.6719587290E-01 8.5065722786E-01 + 8.3304839889E-01 8.1421763975E-01 7.9402068902E-01 7.7232344712E-01 + 7.4900456570E-01 7.2395791257E-01 6.9709487605E-01 6.6834647499E-01 + 6.3766524224E-01 6.0502685267E-01 5.7043146852E-01 5.3390477966E-01 + 4.9549871976E-01 4.5529184220E-01 4.1338934496E-01 3.6992273833E-01 + 3.2504915306E-01 2.7895029056E-01 2.3183102374E-01 1.8391766011E-01 + 1.3545588155E-01 8.6708383761E-02 3.7952239288E-02 -1.0523988882E-02 + -5.8423348499E-02 -1.0544378059E-01 -1.5128154552E-01 -1.9563475092E-01 + -2.3820694154E-01 -2.7871070630E-01 -3.1687125963E-01 -3.5242995082E-01 + -3.8514766464E-01 -4.1480805649E-01 -4.4122058420E-01 -4.6422326723E-01 + -4.8368497507E-01 -4.9950732002E-01 -5.1162608640E-01 -5.2001219001E-01 + -5.2467218501E-01 -5.2564829733E-01 -5.2301804054E-01 -5.1689341462E-01 + -5.0741974051E-01 -4.9477415066E-01 -4.7916377874E-01 -4.6082366533E-01 + -4.4001441702E-01 -4.1701962544E-01 -3.9214307270E-01 -3.6570573547E-01 + -3.3804259543E-01 -3.0949928906E-01 -2.8042859518E-01 -2.5118681041E-01 + -2.2213001633E-01 -1.9361029820E-01 -1.6597193280E-01 -1.3954760741E-01 + -1.1465469955E-01 -9.1591677964E-02 -7.0634661081E-02 -5.2042475720E-02 + -3.6025527253E-02 -2.2716238635E-02 -1.2343702691E-02 -5.2549257257E-03 + -1.3486746536E-03 1.8191734785E-04 3.1554347333E-04 -1.6475527969E-05 + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + + + 3.4041912275E-09 -7.7006378483E-03 -1.5144395301E-02 -2.2078637799E-02 + -2.8259160005E-02 -3.3454245158E-02 -3.7448540579E-02 -4.0046692107E-02 + -4.1076683626E-02 -4.0392832042E-02 -3.7878392920E-02 -3.3447737486E-02 + -2.7048067809E-02 -1.8660643464E-02 -8.3014999492E-03 3.9783536655E-03 + 1.8093262990E-02 3.3923780078E-02 5.1318028863E-02 7.0093567073E-02 + 9.0039720288E-02 1.1092035702E-01 1.3247706733E-01 1.5443270154E-01 + 1.7649522050E-01 1.9836180401E-01 2.1972316030E-01 2.4026797643E-01 + 2.5968744688E-01 2.7767981669E-01 2.9395487457E-01 3.0823833209E-01 + 3.2027602614E-01 3.2983788419E-01 3.3672159475E-01 3.4075592941E-01 + 3.4180366717E-01 3.3976407748E-01 3.3457492386E-01 3.2621395682E-01 + 3.1469987151E-01 3.0009271286E-01 2.8249371876E-01 2.6204459917E-01 + 2.3892625724E-01 2.1335696600E-01 1.8559002199E-01 1.5591090429E-01 + 1.2463397463E-01 9.2098760677E-02 5.8665870521E-02 2.4712591786E-02 + -9.3717665518E-03 -4.3190727783E-02 -7.6345631580E-02 -1.0844068153E-01 + -1.3908798780E-01 -1.6791253624E-01 -1.9455701603E-01 -2.1868643932E-01 + -2.3999248904E-01 -2.5819753415E-01 -2.7305825607E-01 -2.8436883481E-01 + -2.9196364927E-01 -2.9571945239E-01 -2.9555698879E-01 -2.9144203026E-01 + -2.8338581172E-01 -2.7144485903E-01 -2.5572020767E-01 -2.3635602015E-01 + -2.1353761780E-01 -1.8748895108E-01 -1.5846954013E-01 -1.2677092475E-01 + -9.2712669978E-02 -5.6637979789E-02 -1.8908977078E-02 2.0098286956E-02 + 5.9999026794E-02 1.0040504954E-01 1.4093014209E-01 1.8119544449E-01 + 2.2083473525E-01 2.5949955475E-01 2.9686409502E-01 3.3262978643E-01 + 3.6652951578E-01 3.9833141464E-01 4.2784216214E-01 4.5490975304E-01 + 4.7942568817E-01 5.0132655248E-01 5.2059495369E-01 5.3725980305E-01 + 5.5139592887E-01 5.6312302192E-01 5.7260392159E-01 5.8004226022E-01 + 5.8567949239E-01 5.8979134413E-01 5.9268372579E-01 5.9468815968E-01 + 5.9615678079E-01 5.9745697536E-01 5.9896572797E-01 6.0106375192E-01 + 6.0412948222E-01 6.0853301260E-01 6.1463006011E-01 6.2275604147E-01 + 6.3322034478E-01 6.4630087821E-01 6.6223897575E-01 6.8123473520E-01 + 7.0344285933E-01 7.2896906477E-01 7.5786711856E-01 7.9013655198E-01 + 8.2572109404E-01 8.6450785990E-01 9.0632731823E-01 9.5095405088E-01 + 9.9810830996E-01 1.0474583686E+00 1.0986236458E+00 1.1511785804E+00 + 1.2046572200E+00 1.2585584762E+00 1.3123519903E+00 1.3654845512E+00 + 1.4173869878E+00 1.4674814608E+00 1.5151890715E+00 1.5599376929E+00 + 1.6011699363E+00 1.6383511587E+00 1.6709773790E+00 1.6985830873E+00 + 1.7207487635E+00 1.7371080453E+00 1.7473534971E+00 1.7512415841E+00 + 1.7485926553E+00 1.7392911067E+00 1.7232864345E+00 1.7005927938E+00 + 1.6712880267E+00 1.6355124560E+00 1.5934673572E+00 1.5454133601E+00 + 1.4916686976E+00 1.4326073902E+00 1.3686572640E+00 1.3002977443E+00 + 1.2280572746E+00 1.1525103184E+00 1.0742736900E+00 9.9400233436E-01 + 9.1238422654E-01 8.3013466351E-01 7.4798968981E-01 6.6669896242E-01 + 5.8701794029E-01 5.0969968733E-01 4.3548630429E-01 3.6510023430E-01 + 2.9923553616E-01 2.3854932394E-01 1.8365350022E-01 1.3512846747E-01 + 9.3442729294E-02 5.8876737788E-02 3.1976236831E-02 1.3606898476E-02 + 3.4878299426E-03 -4.7589108677E-04 -8.1934699786E-04 4.2749871757E-05 + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + + + 1.6679140194E-08 1.1878572911E-03 4.7212566679E-03 1.0510243378E-02 + 1.8406759055E-02 2.8207407709E-02 3.9657262010E-02 5.2454645045E-02 + 6.6256806071E-02 8.0686393429E-02 9.5338614043E-02 1.0978895699E-01 + 1.2360134868E-01 1.3633659954E-01 1.4756099652E-01 1.5685489279E-01 + 1.6382114556E-01 1.6809325456E-01 1.6934305836E-01 1.6728785225E-01 + 1.6169680062E-01 1.5239652758E-01 1.3927578309E-01 1.2228909649E-01 + 1.0145934560E-01 7.6879187594E-02 4.8711315985E-02 1.7187527671E-02 + -1.7393396452E-02 -5.4668974181E-02 -9.4217425371E-02 -1.3556313456E-01 + -1.7818309352E-01 -2.2151422761E-01 -2.6496149465E-01 -3.0790663139E-01 + -3.4971741108E-01 -3.8975726628E-01 -4.2739512379E-01 -4.6201529398E-01 + -4.9302725455E-01 -5.1987516928E-01 -5.4204698506E-01 -5.5908295629E-01 + -5.7058345362E-01 -5.7621592418E-01 -5.7572088345E-01 -5.6891683292E-01 + -5.5570401461E-01 -5.3606693105E-01 -5.1007557865E-01 -4.7788536266E-01 + -4.3973568243E-01 -3.9594719721E-01 -3.4691780343E-01 -2.9311737568E-01 + -2.3508134328E-01 -1.7340319373E-01 -1.0872601204E-01 -4.1733181331E-02 + 2.6861615906E-02 9.6324943806E-02 1.6591454466E-01 2.3489048666E-01 + 3.0252635367E-01 3.6812030086E-01 4.3100580035E-01 4.9056190482E-01 + 5.4622286272E-01 5.9748692805E-01 6.4392421837E-01 6.8518348912E-01 + 7.2099770763E-01 7.5118832857E-01 7.7566819170E-01 7.9444298417E-01 + 8.0761123123E-01 8.1536280240E-01 8.1797594291E-01 8.1581286384E-01 + 8.0931394695E-01 7.9899064266E-01 7.8541716065E-01 7.6922107243E-01 + 7.5107296349E-01 7.3167528859E-01 7.1175059780E-01 6.9202931251E-01 + 6.7323723896E-01 6.5608301342E-01 6.4124567554E-01 6.2936256694E-01 + 6.2101774867E-01 6.1673112542E-01 6.1694845520E-01 6.2203241146E-01 + 6.3225485010E-01 6.4779041694E-01 6.6871161195E-01 6.9498540534E-01 + 7.2647147783E-01 7.6292213343E-01 8.0398390771E-01 8.4920086862E-01 + 8.9801958211E-01 9.4979568775E-01 1.0038020051E+00 1.0592380674E+00 + 1.1152409556E+00 1.1708972862E+00 1.2252561854E+00 1.2773430665E+00 + 1.3261740125E+00 1.3707705549E+00 1.4101746317E+00 1.4434635025E+00 + 1.4697643941E+00 1.4882686575E+00 1.4982452145E+00 1.4990530861E+00 + 1.4901528048E+00 1.4711165250E+00 1.4416366647E+00 1.4015329331E+00 + 1.3507576217E+00 1.2893990500E+00 1.2176831015E+00 1.1359728037E+00 + 1.0447659191E+00 9.4469057653E-01 8.3649897582E-01 7.2105922202E-01 + 5.9934540554E-01 4.7242603878E-01 3.4145099214E-01 2.0763711905E-01 + 7.2252741076E-02 -6.3398785639E-02 -1.9799619275E-01 -3.3021788976E-01 + -4.5875975990E-01 -5.8235291603E-01 -6.9978112697E-01 -8.0989767428E-01 + -9.1164114841E-01 -1.0040501851E+00 -1.0862769150E+00 -1.1575988280E+00 + -1.2174289745E+00 -1.2653242531E+00 -1.3009917949E+00 -1.3242932427E+00 + -1.3352469614E+00 -1.3340281069E+00 -1.3209665580E+00 -1.2965427843E+00 + -1.2613816152E+00 -1.2162441156E+00 -1.1620175090E+00 -1.0997034504E+00 + -1.0304046129E+00 -9.5530992779E-01 -8.7567851579E-01 -7.9282264688E-01 + -7.0808984816E-01 -6.2284448708E-01 -5.3844901359E-01 -4.5624517569E-01 + -3.7753542828E-01 -3.0356483324E-01 -2.3550368202E-01 -1.7445970874E-01 + -1.2136578860E-01 -7.6873470935E-02 -4.1951668548E-02 -1.7956569076E-02 + -4.6753057529E-03 5.6473669013E-04 1.0546829095E-03 -5.5191919771E-05 + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + + + -1.2258315446E-08 -1.1015890619E-03 -4.3828461835E-03 -9.7736580293E-03 + -1.7158551531E-02 -2.6378743125E-02 -3.7234959093E-02 -4.9490979381E-02 + -6.2877845003E-02 -7.7098657872E-02 -9.1833891768E-02 -1.0674712443E-01 + -1.2149109342E-01 -1.3571397269E-01 -1.4906576298E-01 -1.6120468663E-01 + -1.7180347721E-01 -1.8055545585E-01 -1.8718028892E-01 -1.9142932721E-01 + -1.9309043288E-01 -1.9199220903E-01 -1.8800755607E-01 -1.8105649011E-01 + -1.7110817064E-01 -1.5818209764E-01 -1.4234845190E-01 -1.2372756664E-01 + -1.0248853258E-01 -7.8846953520E-02 -5.3061883235E-02 -2.5431988697E-02 + 3.7090025488E-03 3.3997500590E-02 6.5045815562E-02 9.6448393026E-02 + 1.2778842255E-01 1.5864471288E-01 1.8859872192E-01 2.1724162627E-01 + 2.4418131362E-01 2.6904918154E-01 2.9150662861E-01 3.1125112770E-01 + 3.2802177737E-01 3.4160423485E-01 3.5183494341E-01 3.5860457758E-01 + 3.6186064184E-01 3.6160917141E-01 3.5791549808E-01 3.5090405867E-01 + 3.4075723894E-01 3.2771326148E-01 3.1206314132E-01 2.9414674853E-01 + 2.7434803141E-01 2.5308946832E-01 2.3082582868E-01 2.0803733598E-01 + 1.8522233568E-01 1.6288957999E-01 1.4155024862E-01 1.2170983001E-01 + 1.0385999074E-01 8.8470562636E-02 7.5981776001E-02 6.6796865129E-02 + 6.1275167410E-02 5.9725830722E-02 6.2402235366E-02 6.9497226528E-02 + 8.1139241472E-02 9.7389402329E-02 1.1823963096E-01 1.4361182675E-01 + 1.7335813212E-01 2.0726229335E-01 2.4504210782E-01 2.8635293103E-01 + 3.3079220036E-01 3.7790491617E-01 4.2719000507E-01 4.7810747594E-01 + 5.3008626590E-01 5.8253266166E-01 6.3483917154E-01 6.8639371536E-01 + 7.3658899268E-01 7.8483188625E-01 8.3055275502E-01 8.7321447142E-01 + 9.1232106024E-01 9.4742580081E-01 9.7813866118E-01 1.0041329419E+00 + 1.0251510181E+00 1.0410090804E+00 1.0516007914E+00 1.0568997870E+00 + 1.0569609736E+00 1.0519205848E+00 1.0419949836E+00 1.0274782143E+00 + 1.0087383263E+00 9.8621251232E-01 9.6040112113E-01 9.3186062409E-01 + 9.0119562993E-01 8.6905005874E-01 8.3609759973E-01 8.0303159020E-01 + 7.7055446270E-01 7.3936691625E-01 7.1015697229E-01 6.8358908158E-01 + 6.6029344742E-01 6.4085572971E-01 6.2580729193E-01 6.1561614527E-01 + 6.1067873454E-01 6.1131270289E-01 6.1775075753E-01 6.3013574133E-01 + 6.4851700059E-01 6.7284812605E-01 7.0298611343E-01 7.3869197525E-01 + 7.7963282442E-01 8.2538540762E-01 8.7544105883E-01 9.2921202971E-01 + 9.8603910767E-01 1.0452004364E+00 1.1059214307E+00 1.1673856413E+00 + 1.2287464424E+00 1.2891393770E+00 1.3476949613E+00 1.4035518481E+00 + 1.4558700753E+00 1.5038442631E+00 1.5467157693E+00 1.5837842229E+00 + 1.6144149983E+00 1.6380466913E+00 1.6541991121E+00 1.6624796633E+00 + 1.6625888030E+00 1.6543246849E+00 1.6375868311E+00 1.6123788966E+00 + 1.5788104114E+00 1.5370974868E+00 1.4875623510E+00 1.4306316873E+00 + 1.3668335818E+00 1.2967931761E+00 1.2212267402E+00 1.1409344562E+00 + 1.0567916068E+00 9.6973857804E-01 8.8076949102E-01 7.9091987228E-01 + 7.0125334316E-01 6.1284770186E-01 5.2678051002E-01 4.4411450961E-01 + 3.6588305380E-01 2.9307583198E-01 2.2662509797E-01 1.6741991607E-01 + 1.1620138646E-01 7.3463588505E-02 4.0025332648E-02 1.7097046404E-02 + 4.4226866011E-03 -5.6662222755E-04 -1.0176334185E-03 5.3132028720E-05 + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + + + -1.5249409124E-08 -3.6973911391E-05 -2.9419384858E-04 -9.8395915013E-04 + -2.3028640029E-03 -4.4244114089E-03 -7.4921758437E-03 -1.1613679151E-02 + -1.6855128965E-02 -2.3237150491E-02 -3.0731621140E-02 -3.9259693838E-02 + -4.8691069122E-02 -5.8844549175E-02 -6.9489879014E-02 -8.0350851930E-02 + -9.1109628460E-02 -1.0141219122E-01 -1.1087483242E-01 -1.1909154753E-01 + -1.2564218727E-01 -1.3010120230E-01 -1.3204680016E-01 -1.3107032260E-01 + -1.2678564468E-01 -1.1883839343E-01 -1.0691478515E-01 -9.0749885442E-02 + -7.0135105310E-02 -4.4924760118E-02 -1.5041534807E-02 1.9519280711E-02 + 5.8686898800E-02 1.0231357092E-01 1.5017461297E-01 2.0196994867E-01 + 2.5732716995E-01 3.1580608277E-01 3.7690467607E-01 4.4006642200E-01 + 5.0468878755E-01 5.7013281156E-01 6.3573357749E-01 7.0081139213E-01 + 7.6468346346E-01 8.2667585781E-01 8.8613550788E-01 9.4244203857E-01 + 9.9501917773E-01 1.0433455240E+00 1.0869644522E+00 1.1254929523E+00 + 1.1586292128E+00 1.1861587847E+00 1.2079591836E+00 1.2240028198E+00 + 1.2343581730E+00 1.2391891633E+00 1.2387527047E+00 1.2333944598E+00 + 1.2235428509E+00 1.2097014171E+00 1.1924396380E+00 1.1723823781E+00 + 1.1501981322E+00 1.1265862787E+00 1.1022635681E+00 1.0779500941E+00 + 1.0543550042E+00 1.0321622180E+00 1.0120164236E+00 9.9450962109E-01 + 9.8016847473E-01 9.6944272493E-01 9.6269489315E-01 9.6019149253E-01 + 9.6209593117E-01 9.6846326601E-01 9.7923693259E-01 9.9424754073E-01 + 1.0132137890E+00 1.0357455123E+00 1.0613488366E+00 1.0894333772E+00 + 1.1193213770E+00 1.1502586435E+00 1.1814271120E+00 1.2119588241E+00 + 1.2409510905E+00 1.2674825728E+00 1.2906300094E+00 1.3094852862E+00 + 1.3231725495E+00 1.3308650521E+00 1.3318014227E+00 1.3253010614E+00 + 1.3107783688E+00 1.2877555425E+00 1.2558736905E+00 1.2149020436E+00 + 1.1647450785E+00 1.1054473997E+00 1.0371962669E+00 9.6032169540E-01 + 8.7529410096E-01 7.8271950109E-01 6.8333233306E-01 5.7798598812E-01 + 4.6764120536E-01 3.5335250631E-01 2.3625288809E-01 1.1753702747E-01 + -1.5567256859E-03 -1.1976526198E-01 -2.3582021326E-01 -3.4846770387E-01 + -4.5648801268E-01 -5.5871480516E-01 -6.5405359611E-01 -7.4149911874E-01 + -8.2015129492E-01 -8.8922951708E-01 -9.4808498380E-01 -9.9621086914E-01 + -1.0332501374E+00 -1.0590008452E+00 -1.0734188393E+00 -1.0766177926E+00 + -1.0688665429E+00 -1.0505837949E+00 -1.0223302582E+00 -9.8479832658E-01 + -9.3879949751E-01 -8.8524972066E-01 -8.2515291479E-01 -7.5958295279E-01 + -6.8966439043E-01 -6.1655227490E-01 -5.4141141393E-01 -4.6539535725E-01 + -3.8962553615E-01 -3.1517090482E-01 -2.4302957562E-01 -1.7411201988E-01 + -1.0923160155E-01 -4.9096064475E-02 5.7005825107E-03 5.4682837940E-02 + 9.7496324671E-02 1.3390845434E-01 1.6380724693E-01 1.8719853868E-01 + 2.0420170197E-01 2.1504404794E-01 2.2005397062E-01 2.1965290345E-01 + 2.1434606508E-01 2.0471211366E-01 1.9139154450E-01 1.7507416856E-01 + 1.5648540834E-01 1.3637194932E-01 1.1548658181E-01 9.4572811448E-02 + 7.4349265447E-02 5.5504512096E-02 3.8647056374E-02 2.4253393148E-02 + 1.2924147957E-02 5.3247677475E-03 1.3233953374E-03 -1.2020022031E-04 + -1.9482486732E-04 6.0788070309E-05 8.2167907232E-05 -7.7853406773E-06 + -1.4917790561E-05 -2.3684818020E-07 -6.7916397559E-07 0.0000000000E+00 + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + + + 2.4641681522E-08 8.0240621523E-05 6.3926780957E-04 2.1426478519E-03 + 5.0298108571E-03 9.7017371223E-03 1.6509530816E-02 2.5744147086E-02 + 3.7627514061E-02 5.2305261367E-02 6.9841232368E-02 9.0213918990E-02 + 1.1331491662E-01 1.3894945289E-01 1.6683899915E-01 1.9662592811E-01 + 2.2788013602E-01 2.6010750473E-01 2.9276003745E-01 3.2524746450E-01 + 3.5695008156E-01 3.8723255362E-01 4.1545839442E-01 4.4100481323E-01 + 4.6327760942E-01 4.8172579037E-01 4.9585558990E-01 5.0524357347E-01 + 5.0954853083E-01 5.0852187907E-01 5.0201632605E-01 4.8999257724E-01 + 4.7252390694E-01 4.4979845653E-01 4.2211916754E-01 3.8990130535E-01 + 3.5366757756E-01 3.1404090153E-01 2.7173492384E-01 2.2754244241E-01 + 1.8232192690E-01 1.3698237479E-01 9.2466777858E-02 4.9734506127E-02 + 9.7429432326E-03 -2.6571272930E-02 -5.8311036608E-02 -8.4637213787E-02 + -1.0478636207E-01 -1.1808736634E-01 -1.2397664136E-01 -1.2201157537E-01 + -1.1188191814E-01 -9.3418852793E-02 -6.6601531725E-02 -3.1560903577E-02 + 1.1419292236E-02 6.1904433287E-02 1.1931383915E-01 1.8292847210E-01 + 2.5190141608E-01 3.2527098115E-01 4.0197622817E-01 4.8087465884E-01 + 5.6076177082E-01 6.4039213792E-01 7.1850164092E-01 7.9383044754E-01 + 8.6514631978E-01 9.3126781484E-01 9.9108694137E-01 1.0435908373E+00 + 1.0878820473E+00 1.1231969994E+00 1.1489223069E+00 1.1646085595E+00 + 1.1699813087E+00 1.1649490013E+00 1.1496076680E+00 1.1242422343E+00 + 1.0893243783E+00 1.0455069272E+00 9.9361484557E-01 9.3463293344E-01 + 8.6969041498E-01 8.0004265755E-01 7.2705031738E-01 6.5215625892E-01 + 5.7686064044E-01 5.0269459652E-01 4.3119297935E-01 3.6386664314E-01 + 3.0217477020E-01 2.4749774212E-01 2.0111105516E-01 1.6416076578E-01 + 1.3764092916E-01 1.2237346304E-01 1.1899082939E-01 1.2792187896E-01 + 1.4938115074E-01 1.8336185794E-01 2.2963272820E-01 2.8773879607E-01 + 3.5700617812E-01 4.3655078646E-01 5.2529086547E-01 6.2196316703E-01 + 7.2514251018E-01 8.3326441049E-01 9.4465040434E-01 1.0575356394E+00 + 1.1700982607E+00 1.2804900830E+00 1.3868680151E+00 1.4874256784E+00 + 1.5804246568E+00 1.6642248198E+00 1.7373131621E+00 1.7983306337E+00 + 1.8460964681E+00 1.8796295437E+00 1.8981663702E+00 1.9011753557E+00 + 1.8883670662E+00 1.8597002386E+00 1.8153834255E+00 1.7558722004E+00 + 1.6818618968E+00 1.5942760103E+00 1.4942504152E+00 1.3831135991E+00 + 1.2623632785E+00 1.1336397342E+00 9.9869629596E-01 8.5936749671E-01 + 7.1753538154E-01 5.7509453994E-01 4.3391658294E-01 2.9581433732E-01 + 1.6250670872E-01 3.5584659901E-02 -8.3517327526E-02 -1.9354652632E-01 + -2.9343723370E-01 -3.8231626988E-01 -4.5951134293E-01 -5.2455271134E-01 + -5.7717191591E-01 -6.1729855363E-01 -6.4505486186E-01 -6.6074895445E-01 + -6.6486654581E-01 -6.5806153214E-01 -6.4114516464E-01 -6.1507379218E-01 + -5.8093471020E-01 -5.3993027619E-01 -4.9335945143E-01 -4.4259757741E-01 + -3.8907334662E-01 -3.3424428416E-01 -2.7957005413E-01 -2.2648494557E-01 + -1.7636941629E-01 -1.3054455823E-01 -9.0165192087E-02 -5.6109478972E-02 + -2.9553462399E-02 -1.1834836963E-02 -2.5601541991E-03 6.4308370562E-04 + 5.7684312642E-04 -1.7207648642E-04 -2.2560891871E-04 2.3480074407E-05 + 4.4075574440E-05 1.2198212755E-07 3.4978468749E-07 0.0000000000E+00 + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + 0. 0. 0. 0. + + + 1.0253333203E+01 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 1.4565829637E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 1.4575095131E+01 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 1.6648748652E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + -5.5409935671E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 -1.2754436333E+00 + + + + + -1.3798476250E-12 1.2942076768E-03 2.5897803537E-03 3.8880836788E-03 + 5.1904845793E-03 6.4983518520E-03 7.8130566956E-03 9.1359731674E-03 + 1.0468478546E-02 1.1811953589E-02 1.3167782658E-02 1.4537353724E-02 + 1.5922058210E-02 1.7323290691E-02 1.8742448425E-02 2.0180930726E-02 + 2.1640138161E-02 2.3121471589E-02 2.4626331029E-02 2.6156114371E-02 + 2.7712215938E-02 2.9296024900E-02 3.0908923556E-02 3.2552285507E-02 + 3.4227473710E-02 3.5935838460E-02 3.7678715286E-02 3.9457422807E-02 + 4.1273260549E-02 4.3127506745E-02 4.5021416148E-02 4.6956217860E-02 + 4.8933113211E-02 5.0953273700E-02 5.3017839007E-02 5.5127915111E-02 + 5.7284572513E-02 5.9488844584E-02 6.1741726047E-02 6.4044171606E-02 + 6.6397094726E-02 6.8801366569E-02 7.1257815096E-02 7.3767224324E-02 + 7.6330333750E-02 7.8947837925E-02 8.1620386185E-02 8.4348582519E-02 + 8.7132985575E-02 8.9974108784E-02 9.2872420595E-02 9.5828344795E-02 + 9.8842260919E-02 1.0191450471E-01 1.0504536862E-01 1.0823510236E-01 + 1.1148391341E-01 1.1479196754E-01 1.1815938935E-01 1.2158626269E-01 + 1.2507263101E-01 1.2861849775E-01 1.3222382649E-01 1.3588854111E-01 + 1.3961252578E-01 1.4339562485E-01 1.4723764261E-01 1.5113834294E-01 + 1.5509744882E-01 1.5911464170E-01 1.6318956078E-01 1.6732180213E-01 + 1.7151091780E-01 1.7575641470E-01 1.8005775351E-01 1.8441434747E-01 + 1.8882556118E-01 1.9329070931E-01 1.9780905533E-01 2.0237981027E-01 + 2.0700213150E-01 2.1167512160E-01 2.1639782728E-01 2.2116923841E-01 + 2.2598828724E-01 2.3085384768E-01 2.3576473486E-01 2.4071970477E-01 + 2.4571745423E-01 2.5075662099E-01 2.5583578413E-01 2.6095346470E-01 + 2.6610812660E-01 2.7129817776E-01 2.7652197158E-01 2.8177780863E-01 + 2.8706393862E-01 2.9237856265E-01 2.9771983569E-01 3.0308586930E-01 + 3.0847473461E-01 3.1388446545E-01 3.1931306172E-01 3.2475849289E-01 + 3.3021870164E-01 3.3569160765E-01 3.4117511139E-01 3.4666709810E-01 + 3.5216544165E-01 3.5766800846E-01 3.6317266144E-01 3.6867726373E-01 + 3.7417968247E-01 3.7967779237E-01 3.8516947916E-01 3.9065264283E-01 + 3.9612520071E-01 4.0158509030E-01 4.0703027186E-01 4.1245873075E-01 + 4.1786847952E-01 4.2325755965E-01 4.2862404310E-01 4.3396603352E-01 + 4.3928166719E-01 4.4456911366E-01 4.4982657616E-01 4.5505229170E-01 + 4.6024453097E-01 4.6540159801E-01 4.7052182962E-01 4.7560359469E-01 + 4.8064529329E-01 4.8564535567E-01 4.9060224114E-01 4.9551443696E-01 + 5.0038045710E-01 5.0519884106E-01 5.0996815275E-01 5.1468697933E-01 + 5.1935393029E-01 5.2396763656E-01 5.2852674983E-01 5.3302994201E-01 + 5.3747590497E-01 5.4186335047E-01 5.4619101035E-01 5.5045763698E-01 + 5.5466200405E-01 5.5880290756E-01 5.6287916721E-01 5.6688962801E-01 + 5.7083316226E-01 5.7470867173E-01 5.7851509020E-01 5.8225138624E-01 + 5.8591656626E-01 5.8950967772E-01 5.9302981267E-01 5.9647611132E-01 + 5.9984776586E-01 6.0314402437E-01 6.0636419480E-01 6.0950764899E-01 + 6.1257382672E-01 6.1556223970E-01 6.1847247551E-01 6.2130420143E-01 + 6.2405716812E-01 6.2673121312E-01 6.2932626414E-01 6.3184234225E-01 + 6.3427956409E-01 6.3663814468E-01 6.3891840020E-01 6.4112074813E-01 + 6.4324571125E-01 6.4529391398E-01 6.4726606046E-01 6.4916291996E-01 + 6.5098529156E-01 6.5273396301E-01 6.5440972294E-01 6.5601335575E-01 + 6.5754564481E-01 6.5900738788E-01 6.6039939092E-01 6.6172245921E-01 + 6.6297739669E-01 6.6416500912E-01 6.6528610400E-01 6.6634148898E-01 + 6.6733197139E-01 6.6825835806E-01 6.6912145495E-01 6.6992206678E-01 + 6.7066099670E-01 6.7133904602E-01 6.7195701389E-01 6.7251569708E-01 + 6.7301588971E-01 6.7345838306E-01 6.7384396530E-01 6.7417342134E-01 + 6.7444753262E-01 6.7466707696E-01 6.7483282836E-01 6.7494555690E-01 + 6.7500602854E-01 6.7501500502E-01 6.7497324374E-01 6.7488149762E-01 + 6.7474051499E-01 6.7455103949E-01 6.7431381000E-01 6.7402956048E-01 + 6.7369901995E-01 6.7332291236E-01 6.7290195655E-01 6.7243686614E-01 + 6.7192834950E-01 6.7137710963E-01 6.7078384416E-01 6.7014924527E-01 + 6.6947399963E-01 6.6875878833E-01 6.6800428688E-01 6.6721116515E-01 + 6.6638008731E-01 6.6551171182E-01 6.6460669136E-01 6.6366567285E-01 + 6.6268929740E-01 6.6167820024E-01 6.6063301077E-01 6.5955435251E-01 + 6.5844284306E-01 6.5729909411E-01 6.5612371143E-01 6.5491729484E-01 + 6.5368043821E-01 6.5241372947E-01 6.5111775057E-01 6.4979307753E-01 + 6.4844028039E-01 6.4705992323E-01 6.4565256419E-01 6.4421875544E-01 + 6.4275904323E-01 6.4127396788E-01 6.3976406376E-01 6.3822985937E-01 + 6.3667187728E-01 6.3509063421E-01 6.3348664100E-01 6.3186040265E-01 + 6.3021241835E-01 6.2854318146E-01 6.2685317958E-01 6.2514289455E-01 + 6.2341280248E-01 6.2166337376E-01 6.1989507310E-01 6.1810835959E-01 + 6.1630368665E-01 6.1448150214E-01 6.1264224834E-01 6.1078636200E-01 + 6.0891427439E-01 6.0702641127E-01 6.0512319302E-01 6.0320503459E-01 + 6.0127234556E-01 5.9932553020E-01 5.9736498748E-01 5.9539111112E-01 + 5.9340428963E-01 5.9140490631E-01 5.8939333934E-01 5.8736996181E-01 + 5.8533514172E-01 5.8328924205E-01 5.8123262080E-01 5.7916563103E-01 + 5.7708862088E-01 5.7500193364E-01 5.7290590776E-01 5.7080087693E-01 + 5.6868717006E-01 5.6656511140E-01 5.6443502052E-01 5.6229721236E-01 + 5.6015199731E-01 5.5799968120E-01 5.5584056537E-01 5.5367494672E-01 + 5.5150311773E-01 5.4932536651E-01 5.4714197685E-01 5.4495322825E-01 + 5.4275939595E-01 5.4056075102E-01 5.3835756033E-01 5.3615008665E-01 + 5.3393858869E-01 5.3172332107E-01 5.2950453447E-01 5.2728247558E-01 + 5.2505738717E-01 5.2282950816E-01 5.2059907361E-01 5.1836631481E-01 + 5.1613145928E-01 5.1389473082E-01 5.1165634957E-01 5.0941653203E-01 + 5.0717549109E-01 5.0493343610E-01 5.0269057290E-01 5.0044710382E-01 + 4.9820322777E-01 4.9595914025E-01 4.9371503341E-01 4.9147109605E-01 + 4.8922751369E-01 4.8698446860E-01 4.8474213984E-01 4.8250070327E-01 + 4.8026033162E-01 4.7802119454E-01 4.7578345856E-01 4.7354728722E-01 + 4.7131284102E-01 4.6908027754E-01 4.6684975141E-01 4.6462141435E-01 + 4.6239541525E-01 4.6017190016E-01 4.5795101234E-01 4.5573289230E-01 + 4.5351767781E-01 4.5130550396E-01 4.4909650318E-01 4.4689080528E-01 + 4.4468853746E-01 4.4248982439E-01 4.4029478818E-01 4.3810354845E-01 + 4.3591622237E-01 4.3373292465E-01 4.3155376761E-01 4.2937886121E-01 + 4.2720831303E-01 4.2504222837E-01 4.2288071023E-01 4.2072385937E-01 + 4.1857177430E-01 4.1642455135E-01 4.1428228469E-01 4.1214506634E-01 + 4.1001298622E-01 4.0788613214E-01 4.0576458990E-01 4.0364844324E-01 + 4.0153777390E-01 3.9943266167E-01 3.9733318437E-01 3.9523941792E-01 + 3.9315143633E-01 3.9106931176E-01 3.8899311452E-01 3.8692291310E-01 + 3.8485877420E-01 3.8280076277E-01 3.8074894200E-01 3.7870337338E-01 + 3.7666411671E-01 3.7463123010E-01 3.7260477004E-01 3.7058479139E-01 + 3.6857134742E-01 3.6656448983E-01 3.6456426877E-01 3.6257073285E-01 + 3.6058392919E-01 3.5860390342E-01 3.5663069972E-01 3.5466436083E-01 + 3.5270492807E-01 3.5075244136E-01 3.4880693927E-01 3.4686845899E-01 + 3.4493703641E-01 3.4301270607E-01 3.4109550126E-01 3.3918545398E-01 + 3.3728259498E-01 3.3538695378E-01 3.3349855870E-01 3.3161743686E-01 + 3.2974361421E-01 3.2787711556E-01 3.2601796456E-01 3.2416618377E-01 + 3.2232179464E-01 3.2048481755E-01 3.1865527180E-01 3.1683317567E-01 + 3.1501854640E-01 3.1321140023E-01 3.1141175242E-01 3.0961961722E-01 + 3.0783500795E-01 3.0605793700E-01 3.0428841581E-01 3.0252645492E-01 + 3.0077206399E-01 2.9902525179E-01 2.9728602623E-01 2.9555439439E-01 + 2.9383036250E-01 2.9211393600E-01 2.9040511950E-01 2.8870391686E-01 + 2.8701033113E-01 2.8532436463E-01 2.8364601894E-01 2.8197529490E-01 + 2.8031219265E-01 2.7865671160E-01 2.7700885051E-01 2.7536860745E-01 + 2.7373597982E-01 2.7211096439E-01 2.7049355729E-01 2.6888375401E-01 + 2.6728154945E-01 2.6568693792E-01 2.6409991313E-01 2.6252046820E-01 + 2.6094859574E-01 2.5938428775E-01 2.5782753573E-01 2.5627833065E-01 + 2.5473666294E-01 2.5320252256E-01 2.5167589895E-01 2.5015678108E-01 + 2.4864515743E-01 2.4714101604E-01 2.4564434449E-01 2.4415512990E-01 + 2.4267335900E-01 2.4119901805E-01 2.3973209292E-01 2.3827256909E-01 + 2.3682043162E-01 2.3537566521E-01 2.3393825416E-01 2.3250818243E-01 + 2.3108543360E-01 2.2966999091E-01 2.2826183727E-01 2.2686095524E-01 + 2.2546732707E-01 2.2408093469E-01 2.2270175973E-01 2.2132978350E-01 + 2.1996498705E-01 2.1860735111E-01 2.1725685617E-01 2.1591348243E-01 + 2.1457720983E-01 2.1324801806E-01 2.1192588657E-01 2.1061079455E-01 + 2.0930272098E-01 2.0800164460E-01 2.0670754392E-01 2.0542039727E-01 + 2.0414018274E-01 2.0286687823E-01 2.0160046146E-01 2.0034090994E-01 + 1.9908820101E-01 1.9784231184E-01 1.9660321940E-01 1.9537090053E-01 + 1.9414533190E-01 1.9292649002E-01 1.9171435125E-01 1.9050889181E-01 + 1.8931008779E-01 1.8811791514E-01 1.8693234968E-01 1.8575336711E-01 + 1.8458094302E-01 1.8341505288E-01 1.8225567205E-01 1.8110277579E-01 + 1.7995633925E-01 1.7881633750E-01 1.7768274551E-01 1.7655553817E-01 + 1.7543469029E-01 1.7432017660E-01 1.7321197174E-01 1.7211005030E-01 + 1.7101438681E-01 1.6992495570E-01 1.6884173139E-01 1.6776468822E-01 + 1.6669380047E-01 1.6562904239E-01 1.6457038819E-01 1.6351781201E-01 + 1.6247128798E-01 1.6143079018E-01 1.6039629269E-01 1.5936776951E-01 + 1.5834519466E-01 1.5732854211E-01 1.5631778584E-01 1.5531289978E-01 + 1.5431385788E-01 1.5332063405E-01 1.5233320221E-01 1.5135153627E-01 + 1.5037561014E-01 1.4940539773E-01 1.4844087295E-01 1.4748200971E-01 + 1.4652878195E-01 1.4558116359E-01 1.4463912858E-01 1.4370265088E-01 + 1.4277170446E-01 1.4184626333E-01 1.4092630149E-01 1.4001179299E-01 + 1.3910271190E-01 1.3819903229E-01 1.3730072829E-01 1.3640777406E-01 + 1.3552014376E-01 1.3463781163E-01 1.3376075191E-01 1.3288893888E-01 + 1.3202234689E-01 1.3116095030E-01 1.3030472352E-01 1.2945364100E-01 + 1.2860767726E-01 1.2776680684E-01 1.2693100434E-01 1.2610024440E-01 + 1.2527450172E-01 1.2445375106E-01 1.2363796722E-01 1.2282712506E-01 + 1.2202119950E-01 1.2122016550E-01 1.2042399811E-01 1.1963267241E-01 + 1.1884616356E-01 1.1806444678E-01 1.1728749734E-01 1.1651529058E-01 + 1.1574780192E-01 1.1498500683E-01 1.1422688084E-01 1.1347339957E-01 + 1.1272453870E-01 1.1198027397E-01 1.1124058120E-01 1.1050543628E-01 + 1.0977481517E-01 1.0904869391E-01 1.0832704859E-01 1.0760985542E-01 + 1.0689709063E-01 1.0618873057E-01 1.0548475165E-01 1.0478513034E-01 + 1.0408984322E-01 1.0339886693E-01 1.0271217818E-01 1.0202975377E-01 + 1.0135157059E-01 1.0067760560E-01 1.0000783584E-01 9.9342238419E-02 + 9.8680790553E-02 9.8023469525E-02 9.7370252704E-02 9.6721117540E-02 + 9.6076041568E-02 9.5435002408E-02 9.4797977760E-02 9.4164945414E-02 + 9.3535883239E-02 9.2910769193E-02 9.2289581318E-02 9.1672297742E-02 + 9.1058896677E-02 9.0449356425E-02 8.9843655370E-02 8.9241771986E-02 + 8.8643684832E-02 8.8049372555E-02 8.7458813887E-02 8.6871987650E-02 + 8.6288872752E-02 8.5709448189E-02 8.5133693046E-02 8.4561586493E-02 + 8.3993107791E-02 8.3428236287E-02 8.2866951418E-02 8.2309232708E-02 + 8.1755059769E-02 8.1204412304E-02 8.0657270101E-02 8.0113613038E-02 + 7.9573421084E-02 7.9036674292E-02 7.8503352807E-02 7.7973436862E-02 + 7.7446906777E-02 7.6923742962E-02 7.6403925916E-02 7.5887436226E-02 + 7.5374254566E-02 7.4864361701E-02 7.4357738482E-02 7.3854365851E-02 + 7.3354224836E-02 7.2857296555E-02 7.2363562212E-02 7.1873003101E-02 + 7.1385600604E-02 7.0901336189E-02 7.0420191413E-02 6.9942147921E-02 + 6.9467187446E-02 6.8995291805E-02 6.8526442907E-02 6.8060622746E-02 + 6.7597813402E-02 6.7137997043E-02 6.6681155924E-02 6.6227272386E-02 + 6.5776328857E-02 6.5328307850E-02 6.4883191965E-02 6.4440963889E-02 + 6.4001606393E-02 6.3565102333E-02 6.3131434653E-02 6.2700586381E-02 + 6.2272540628E-02 6.1847280592E-02 6.1424789556E-02 6.1005050885E-02 + 6.0588048031E-02 6.0173764528E-02 5.9762183994E-02 5.9353290131E-02 + 5.8947066724E-02 5.8543497642E-02 5.8142566835E-02 5.7744258337E-02 + 5.7348556265E-02 5.6955444817E-02 5.6564908272E-02 5.6176930994E-02 + 5.5791497424E-02 5.5408592088E-02 5.5028199590E-02 5.4650304618E-02 + 5.4274891937E-02 5.3901946395E-02 5.3531452918E-02 5.3163396512E-02 + 5.2797762263E-02 5.2434535336E-02 5.2073700974E-02 5.1715244501E-02 + 5.1359151316E-02 5.1005406899E-02 5.0653996806E-02 5.0304906672E-02 + 4.9958122206E-02 4.9613629199E-02 4.9271413514E-02 4.8931461094E-02 + 4.8593757956E-02 4.8258290193E-02 4.7925043975E-02 4.7594005545E-02 + 4.7265161224E-02 4.6938497405E-02 4.6614000557E-02 4.6291657223E-02 + 4.5971454019E-02 4.5653377635E-02 4.5337414835E-02 4.5023552456E-02 + 4.4711777406E-02 4.4402076667E-02 4.4094437293E-02 4.3788846410E-02 + 4.3485291214E-02 4.3183758975E-02 4.2884237031E-02 4.2586712793E-02 + 4.2291173741E-02 4.1997607426E-02 4.1706001468E-02 4.1416343557E-02 + 4.1128621452E-02 4.0842822981E-02 4.0558936040E-02 4.0276948595E-02 + 3.9996848678E-02 3.9718624390E-02 3.9442263899E-02 3.9167755441E-02 + 3.8895087317E-02 3.8624247896E-02 3.8355225613E-02 3.8088008968E-02 + 3.7822586530E-02 3.7558946928E-02 3.7297078860E-02 3.7036971089E-02 + 3.6778612439E-02 3.6521991802E-02 3.6267098132E-02 3.6013920447E-02 + 3.5762447828E-02 3.5512669419E-02 3.5264574428E-02 3.5018152123E-02 + 3.4773391837E-02 3.4530282963E-02 3.4288814955E-02 3.4048977331E-02 + 3.3810759667E-02 3.3574151602E-02 3.3339142833E-02 3.3105723120E-02 + 3.2873882281E-02 3.2643610193E-02 3.2414896793E-02 3.2187732079E-02 + 3.1962106104E-02 3.1738008981E-02 3.1515430883E-02 3.1294362039E-02 + 3.1074792734E-02 3.0856713313E-02 3.0640114177E-02 3.0424985784E-02 + 3.0211318648E-02 2.9999103338E-02 2.9788330481E-02 2.9578990760E-02 + 2.9371074910E-02 2.9164573724E-02 2.8959478049E-02 2.8755778785E-02 + 2.8553466889E-02 2.8352533370E-02 2.8152969291E-02 2.7954765769E-02 + 2.7757913972E-02 2.7562405125E-02 2.7368230501E-02 2.7175381428E-02 + 2.6983849285E-02 2.6793625504E-02 2.6604701567E-02 2.6417069008E-02 + 2.6230719413E-02 2.6045644416E-02 2.5861835704E-02 2.5679285013E-02 + 2.5497984129E-02 2.5317924888E-02 2.5139099175E-02 2.4961498925E-02 + 2.4785116121E-02 2.4609942795E-02 2.4435971027E-02 2.4263192946E-02 + 2.4091600727E-02 2.3921186596E-02 2.3751942822E-02 2.3583861725E-02 + 2.3416935670E-02 2.3251157068E-02 2.3086518377E-02 2.2923012103E-02 + 2.2760630796E-02 2.2599367050E-02 2.2439213507E-02 2.2280162854E-02 + 2.2122207822E-02 2.1965341186E-02 2.1809555767E-02 2.1654844430E-02 + 2.1501200082E-02 2.1348615675E-02 2.1197084206E-02 2.1046598712E-02 + 2.0897152276E-02 2.0748738022E-02 2.0601349117E-02 2.0454978769E-02 + 2.0309620231E-02 2.0165266794E-02 2.0021911795E-02 1.9879548608E-02 + 1.9738170651E-02 1.9597771382E-02 1.9458344300E-02 1.9319882943E-02 + 1.9182380891E-02 1.9045831764E-02 1.8910229220E-02 1.8775566958E-02 + 1.8641838716E-02 1.8509038271E-02 1.8377159440E-02 1.8246196076E-02 + 1.8116142074E-02 1.7986991364E-02 1.7858737915E-02 1.7731375736E-02 + 1.7604898871E-02 1.7479301402E-02 1.7354577449E-02 1.7230721168E-02 + 1.7107726752E-02 1.6985588430E-02 1.6864300470E-02 1.6743857173E-02 + 1.6624252878E-02 1.6505481957E-02 1.6387538821E-02 1.6270417915E-02 + 1.6154113717E-02 1.6038620744E-02 1.5923933544E-02 1.5810046702E-02 + 1.5696954835E-02 1.5584652597E-02 1.5473134673E-02 1.5362395784E-02 + 1.5252430684E-02 1.5143234160E-02 1.5034801031E-02 1.4927126151E-02 + 1.4820204407E-02 1.4714030715E-02 1.4608600029E-02 1.4503907329E-02 + 1.4399947633E-02 1.4296715986E-02 1.4194207468E-02 1.4092417189E-02 + 1.3991340289E-02 1.3890971942E-02 1.3791307351E-02 1.3692341750E-02 + 1.3594070404E-02 1.3496488608E-02 1.3399591687E-02 1.3303374997E-02 + 1.3207833923E-02 1.3112963879E-02 1.3018760311E-02 1.2925218692E-02 + 1.2832334524E-02 1.2740103340E-02 1.2648520700E-02 1.2557582193E-02 + 1.2467283438E-02 1.2377620080E-02 1.2288587794E-02 1.2200182281E-02 + 1.2112399272E-02 1.2025234524E-02 1.1938683822E-02 1.1852742980E-02 + 1.1767407835E-02 1.1682674255E-02 1.1598538133E-02 1.1514995389E-02 + 1.1432041970E-02 1.1349673848E-02 1.1267887023E-02 1.1186677519E-02 + 1.1106041387E-02 1.1025974705E-02 1.0946473574E-02 1.0867534121E-02 + 1.0789152501E-02 1.0711324890E-02 1.0634047492E-02 1.0557316535E-02 + 1.0481128271E-02 1.0405478976E-02 1.0330364952E-02 1.0255782525E-02 + 1.0181728044E-02 1.0108197883E-02 1.0035188438E-02 9.9626961306E-03 + 9.8907174053E-03 9.8192487295E-03 9.7482865942E-03 9.6778275132E-03 + 9.6078680235E-03 9.5384046845E-03 9.4694340786E-03 9.4009528106E-03 + 9.3329575075E-03 9.2654448187E-03 9.1984114156E-03 9.1318539916E-03 + 9.0657692620E-03 9.0001539635E-03 8.9350048546E-03 8.8703187152E-03 + 8.8060923465E-03 8.7423225707E-03 8.6790062312E-03 8.6161401921E-03 + 8.5537213386E-03 8.4917465761E-03 8.4302128309E-03 8.3691170494E-03 + 8.3084561986E-03 8.2482272652E-03 8.1884272562E-03 8.1290531985E-03 + 8.0701021385E-03 8.0115711425E-03 7.9534572963E-03 7.8957577050E-03 + 7.8384694929E-03 7.7815898036E-03 7.7251157997E-03 7.6690446627E-03 + 7.6133735929E-03 7.5580998092E-03 7.5032205493E-03 7.4487330691E-03 + 7.3946346430E-03 7.3409225635E-03 7.2875941411E-03 7.2346467047E-03 + 7.1820776006E-03 7.1298841933E-03 7.0780638645E-03 7.0266140138E-03 + 6.9755320581E-03 6.9248154316E-03 6.8744615858E-03 6.8244679892E-03 + 6.7748321274E-03 6.7255515028E-03 6.6766236345E-03 6.6280460586E-03 + 6.5798163275E-03 6.5319320101E-03 6.4843906917E-03 6.4371899739E-03 + 6.3903274743E-03 6.3438008268E-03 6.2976076810E-03 6.2517457026E-03 + 6.2062125728E-03 6.1610059887E-03 6.1161236626E-03 6.0715633226E-03 + 6.0273227120E-03 5.9833995894E-03 5.9397917285E-03 5.8964969181E-03 + 5.8535129619E-03 5.8108376786E-03 5.7684689016E-03 5.7264044788E-03 + 5.6846422731E-03 5.6431801615E-03 5.6020160356E-03 5.5611478012E-03 + 5.5205733785E-03 5.4802907015E-03 5.4402977186E-03 5.4005923919E-03 + 5.3611726974E-03 5.3220366249E-03 5.2831821779E-03 5.2446073734E-03 + 5.2063102419E-03 5.1682888275E-03 5.1305411873E-03 5.0930653919E-03 + 5.0558595250E-03 5.0189216834E-03 4.9822499767E-03 4.9458425277E-03 + 4.9096974716E-03 4.8738129568E-03 4.8381871440E-03 4.8028182067E-03 + 4.7677043307E-03 4.7328437144E-03 4.6982345683E-03 4.6638751154E-03 + 4.6297635906E-03 4.5958982410E-03 4.5622773259E-03 4.5288991162E-03 + 4.4957618949E-03 4.4628639567E-03 4.4302036079E-03 4.3977791666E-03 + 4.3655889622E-03 4.3336313359E-03 4.3019046400E-03 4.2704072383E-03 + 4.2391375058E-03 4.2080938286E-03 4.1772746039E-03 4.1466782402E-03 + 4.1163031565E-03 4.0861477831E-03 4.0562105608E-03 4.0264899413E-03 + 3.9969843871E-03 3.9676923710E-03 3.9386123764E-03 3.9097428974E-03 + 3.8810824383E-03 3.8526295137E-03 3.8243826486E-03 3.7963403779E-03 + 3.7685012470E-03 3.7408638111E-03 3.7134266354E-03 3.6861882952E-03 + 3.6591473754E-03 3.6323024709E-03 3.6056521863E-03 3.5791951357E-03 + 3.5529299430E-03 3.5268552414E-03 3.5009696739E-03 3.4752718926E-03 + 3.4497605591E-03 3.4244343442E-03 3.3992919280E-03 3.3743319998E-03 + 3.3495532578E-03 3.3249544095E-03 3.3005341711E-03 3.2762912680E-03 + 3.2522244342E-03 3.2283324128E-03 3.2046139553E-03 3.1810678221E-03 + 3.1576927822E-03 3.1344876131E-03 3.1114511009E-03 3.0885820401E-03 + 3.0658792336E-03 3.0433414927E-03 3.0209676368E-03 2.9987564938E-03 + 2.9767068996E-03 2.9548176982E-03 2.9330877417E-03 2.9115158903E-03 + 2.8901010122E-03 2.8688419832E-03 2.8477376872E-03 2.8267870159E-03 + 2.8059888687E-03 2.7853421526E-03 2.7648457824E-03 2.7444986805E-03 + 2.7242997766E-03 2.7042480081E-03 2.6843423198E-03 2.6645816638E-03 + 2.6449649998E-03 2.6254912945E-03 2.6061595219E-03 2.5869686633E-03 + 2.5679177070E-03 2.5490056486E-03 2.5302314905E-03 2.5115942423E-03 + 2.4930929204E-03 2.4747265483E-03 2.4564941560E-03 2.4383947807E-03 + 2.4204274663E-03 2.4025912631E-03 2.3848852284E-03 2.3673084261E-03 + 2.3498599265E-03 2.3325388066E-03 2.3153441499E-03 2.2982750462E-03 + 2.2813305919E-03 2.2645098895E-03 2.2478120482E-03 2.2312361831E-03 + 2.2147814157E-03 2.1984468738E-03 2.1822316911E-03 2.1661350076E-03 + 2.1501559694E-03 2.1342937284E-03 2.1185474426E-03 2.1029162761E-03 + 2.0873993986E-03 2.0719959859E-03 2.0567052196E-03 2.0415262869E-03 + 2.0264583810E-03 2.0115007005E-03 1.9966524500E-03 1.9819128394E-03 + 1.9672810845E-03 1.9527564065E-03 1.9383380319E-03 1.9240251931E-03 + 1.9098171275E-03 1.8957130783E-03 1.8817122938E-03 1.8678140277E-03 + 1.8540175389E-03 1.8403220918E-03 1.8267269557E-03 1.8132314053E-03 + 1.7998347203E-03 1.7865361856E-03 1.7733350912E-03 1.7602307321E-03 + 1.7472224082E-03 1.7343094246E-03 1.7214910911E-03 1.7087667225E-03 + 1.6961356385E-03 1.6835971635E-03 1.6711506269E-03 1.6587953628E-03 + 1.6465307099E-03 1.6343560118E-03 1.6222706166E-03 1.6102738771E-03 + 1.5983651507E-03 1.5865437994E-03 1.5748091898E-03 1.5631606929E-03 + 1.5515976841E-03 1.5401195435E-03 1.5287256555E-03 1.5174154087E-03 + 1.5061881964E-03 1.4950434159E-03 1.4839804690E-03 1.4729987618E-03 + 1.4620977043E-03 1.4512767112E-03 1.4405352011E-03 1.4298725966E-03 + 1.4192883248E-03 1.4087818165E-03 1.3983525069E-03 1.3879998351E-03 + 1.3777232440E-03 1.3675221809E-03 1.3573960967E-03 1.3473444463E-03 + 1.3373666887E-03 1.3274622864E-03 1.3176307061E-03 1.3078714182E-03 + 1.2981838968E-03 1.2885676198E-03 1.2790220688E-03 1.2695467293E-03 + 1.2601410902E-03 1.2508046444E-03 1.2415368880E-03 1.2323373212E-03 + 1.2232054473E-03 1.2141407736E-03 1.2051428106E-03 1.1962110724E-03 + 1.1873450766E-03 1.1785443444E-03 1.1698084002E-03 1.1611367719E-03 + 1.1525289909E-03 1.1439845918E-03 1.1355031126E-03 1.1270840946E-03 + 1.1187270825E-03 1.1104316241E-03 1.1021972706E-03 1.0940235762E-03 + 1.0859100986E-03 1.0778563986E-03 1.0698620399E-03 1.0619265896E-03 + 1.0540496178E-03 1.0462306979E-03 1.0384694060E-03 1.0307653215E-03 + 1.0231180268E-03 1.0155271073E-03 1.0079921513E-03 1.0005127501E-03 + 9.9308849804E-04 9.8571899225E-04 9.7840383283E-04 9.7114262273E-04 + 9.6393496779E-04 9.5678047666E-04 9.4967876082E-04 9.4262943455E-04 + 9.3563211493E-04 9.2868642177E-04 9.2179197763E-04 9.1494840779E-04 + 9.0815534025E-04 9.0141240567E-04 8.9471923738E-04 8.8807547137E-04 + 8.8148074623E-04 8.7493470319E-04 8.6843698604E-04 8.6198724117E-04 + 8.5558511748E-04 8.4923026647E-04 8.4292234209E-04 8.3666100083E-04 + 8.3044590167E-04 8.2427670601E-04 8.1815307773E-04 8.1207468314E-04 + 8.0604119095E-04 8.0005227227E-04 7.9410760058E-04 7.8820685174E-04 + 7.8234970394E-04 7.7653583770E-04 7.7076493585E-04 7.6503668351E-04 + 7.5935076810E-04 7.5370687928E-04 7.4810470897E-04 7.4254395132E-04 + 7.3702430268E-04 7.3154546162E-04 7.2610712888E-04 7.2070900737E-04 + 7.1535080215E-04 7.1003222042E-04 7.0475297150E-04 6.9951276683E-04 + 6.9431131992E-04 6.8914834636E-04 6.8402356382E-04 6.7893669201E-04 + 6.7388745267E-04 6.6887556954E-04 6.6390076841E-04 6.5896277701E-04 + 6.5406132509E-04 6.4919614431E-04 6.4436696833E-04 6.3957353272E-04 + 6.3481557495E-04 6.3009283444E-04 6.2540505246E-04 6.2075197219E-04 + 6.1613333866E-04 6.1154889874E-04 6.0699840118E-04 6.0248159651E-04 + 5.9799823711E-04 5.9354807714E-04 5.8913087254E-04 5.8474638105E-04 + 5.8039436215E-04 5.7607457707E-04 5.7178678879E-04 5.6753076200E-04 + 5.6330626312E-04 5.5911306024E-04 5.5495092317E-04 5.5081962337E-04 + 5.4671893398E-04 5.4264862977E-04 5.3860848718E-04 5.3459828427E-04 + 5.3061780069E-04 5.2666681772E-04 5.2274511822E-04 5.1885248665E-04 + 5.1498870903E-04 5.1115357292E-04 5.0734686746E-04 5.0356838330E-04 + 4.9981791264E-04 4.9609524917E-04 4.9240018810E-04 4.8873252614E-04 + 4.8509206145E-04 4.8147859370E-04 4.7789192400E-04 4.7433185491E-04 + 4.7079819045E-04 4.6729073604E-04 4.6380929854E-04 4.6035368622E-04 + 4.5692370874E-04 4.5351917716E-04 4.5013990390E-04 4.4678570277E-04 + 4.4345638893E-04 4.4015177889E-04 4.3687169050E-04 4.3361594294E-04 + 4.3038435672E-04 4.2717675363E-04 4.2399295682E-04 4.2083279067E-04 + 4.1769608088E-04 4.1458265442E-04 4.1149233951E-04 4.0842496564E-04 + 4.0538036355E-04 4.0235836519E-04 3.9935880378E-04 3.9638151371E-04 + 3.9342633064E-04 3.9049309137E-04 3.8758163395E-04 3.8469179757E-04 + 3.8182342262E-04 3.7897635066E-04 3.7615042440E-04 3.7334548770E-04 + 3.7056138557E-04 3.6779796416E-04 3.6505507072E-04 3.6233255365E-04 + 3.5963026244E-04 3.5694804770E-04 3.5428576110E-04 3.5164325544E-04 + 3.4902038456E-04 3.4641700341E-04 3.4383296796E-04 3.4126813526E-04 + 3.3872236340E-04 3.3619551152E-04 3.3368743978E-04 3.3119800938E-04 + 3.2872708251E-04 3.2627452241E-04 3.2384019329E-04 3.2142396037E-04 + 3.1902568985E-04 3.1664524892E-04 3.1428250574E-04 3.1193732944E-04 + 3.0960959010E-04 3.0729915877E-04 3.0500590742E-04 3.0272970900E-04 + 3.0047043735E-04 2.9822796725E-04 2.9600217442E-04 2.9379293547E-04 + 2.9160012791E-04 2.8942363018E-04 2.8726332158E-04 2.8511908232E-04 + 2.8299079347E-04 2.8087833699E-04 2.7878159569E-04 2.7670045325E-04 + 2.7463479422E-04 2.7258450397E-04 2.7054946873E-04 2.6852957556E-04 + 2.6652471235E-04 2.6453476781E-04 2.6255963148E-04 2.6059919370E-04 + 2.5865334563E-04 2.5672197921E-04 2.5480498720E-04 2.5290226312E-04 + 2.5101370129E-04 2.4913919680E-04 2.4727864554E-04 2.4543194411E-04 + 2.4359898992E-04 2.4177968111E-04 2.3997391658E-04 2.3818159597E-04 + 2.3640261966E-04 2.3463688875E-04 2.3288430509E-04 2.3114477123E-04 + 2.2941819047E-04 2.2770446677E-04 2.2600350486E-04 2.2431521012E-04 + 2.2263948865E-04 2.2097624723E-04 2.1932539335E-04 2.1768683515E-04 + 2.1606048147E-04 2.1444624180E-04 2.1284402633E-04 2.1125374587E-04 + 2.0967531192E-04 2.0810863662E-04 2.0655363275E-04 2.0501021374E-04 + 2.0347829366E-04 2.0195778721E-04 2.0044860972E-04 1.9895067715E-04 + 1.9746390607E-04 1.9598821367E-04 1.9452351774E-04 1.9306973670E-04 + 1.9162678954E-04 1.9019459587E-04 1.8877307590E-04 1.8736215040E-04 + 1.8596174074E-04 1.8457176887E-04 1.8319215732E-04 1.8182282919E-04 + 1.8046370813E-04 1.7911471837E-04 1.7777578471E-04 1.7644683247E-04 + 1.7512778756E-04 1.7381857642E-04 1.7251912602E-04 1.7122936389E-04 + 1.6994921808E-04 1.6867861718E-04 1.6741749031E-04 1.6616576709E-04 + 1.6492337770E-04 1.6369025279E-04 1.6246632356E-04 1.6125152170E-04 + 1.6004577941E-04 1.5884902938E-04 1.5766120481E-04 1.5648223938E-04 + 1.5531206728E-04 1.5415062317E-04 1.5299784220E-04 1.5185365999E-04 + 1.5071801266E-04 1.4959083676E-04 1.4847206935E-04 1.4736164793E-04 + 1.4625951048E-04 1.4516559542E-04 1.4407984163E-04 1.4300218846E-04 + 1.4193257569E-04 1.4087094354E-04 1.3981723269E-04 1.3877138425E-04 + 1.3773333975E-04 1.3670304118E-04 1.3568043095E-04 1.3466545189E-04 + 1.3365804726E-04 1.3265816072E-04 1.3166573638E-04 1.3068071874E-04 + 1.2970305271E-04 1.2873268361E-04 1.2776955718E-04 1.2681361955E-04 + 1.2586481724E-04 1.2492309718E-04 1.2398840668E-04 1.2306069345E-04 + 1.2213990559E-04 1.2122599157E-04 1.2031890024E-04 1.1941858086E-04 + 1.1852498303E-04 1.1763805673E-04 1.1675775234E-04 1.1588402056E-04 + 1.1501681250E-04 1.1415607960E-04 1.1330177367E-04 1.1245384688E-04 + 1.1161225176E-04 1.1077694117E-04 1.0994786834E-04 1.0912498685E-04 + 1.0830825060E-04 1.0749761384E-04 1.0669303118E-04 1.0589445754E-04 + 1.0510184818E-04 1.0431515871E-04 1.0353434504E-04 1.0275936342E-04 + 1.0199017044E-04 1.0122672299E-04 1.0046897829E-04 9.9716893869E-05 + 9.8970427577E-05 9.8229537577E-05 9.7494182339E-05 9.6764320642E-05 + 9.6039911572E-05 9.5320914516E-05 9.4607289164E-05 9.3898995504E-05 + 9.3195993820E-05 9.2498244693E-05 9.1805708994E-05 9.1118347880E-05 + 9.0436122806E-05 8.9758995507E-05 8.9086928005E-05 8.8419882599E-05 + 8.7757821872E-05 8.7100708682E-05 8.6448506164E-05 8.5801177726E-05 + 8.5158687047E-05 8.4520998075E-05 8.3888075027E-05 8.3259882386E-05 + 8.2636384897E-05 8.2017547566E-05 8.1403335661E-05 8.0793714706E-05 + 8.0188650482E-05 7.9588109023E-05 7.8992056613E-05 7.8400459792E-05 + 7.7813285346E-05 7.7230500306E-05 7.6652071951E-05 7.6077967798E-05 + 7.5508155610E-05 7.4942603387E-05 7.4381279367E-05 7.3824152023E-05 + 7.3271190063E-05 7.2722362429E-05 7.2177638290E-05 7.1636987048E-05 + 7.1100378329E-05 7.0567781986E-05 7.0039168096E-05 6.9514506959E-05 + 6.8993769091E-05 6.8476925233E-05 6.7963946343E-05 6.7454803591E-05 + 6.6949468366E-05 6.6447912265E-05 6.5950107099E-05 6.5456024887E-05 + 6.4965637857E-05 6.4478918443E-05 6.3995839282E-05 6.3516373218E-05 + 6.3040493293E-05 6.2568172754E-05 6.2099385041E-05 6.1634103797E-05 + 6.1172302858E-05 6.0713956254E-05 6.0259038210E-05 5.9807523140E-05 + 5.9359385649E-05 5.8914600535E-05 5.8473142780E-05 5.8034987552E-05 + 5.7600110204E-05 5.7168486272E-05 5.6740091475E-05 5.6314901711E-05 + 5.5892893058E-05 5.5474041773E-05 5.5058324288E-05 5.4645717211E-05 + 5.4236197324E-05 5.3829741581E-05 5.3426327109E-05 5.3025931203E-05 + 5.2628531329E-05 5.2234105120E-05 5.1842630374E-05 5.1454085053E-05 + 5.1068447289E-05 5.0685695373E-05 5.0305807758E-05 4.9928763057E-05 + 4.9554540041E-05 4.9183117642E-05 4.8814474946E-05 4.8448591196E-05 + 4.8085445790E-05 4.7725018277E-05 4.7367288361E-05 4.7012235895E-05 + 4.6659840883E-05 4.6310083479E-05 4.5962943981E-05 4.5618402839E-05 + 4.5276440643E-05 4.4937038132E-05 4.4600176183E-05 4.4265835821E-05 + 4.3933998212E-05 4.3604644660E-05 4.3277756608E-05 4.2953315639E-05 + 4.2631303472E-05 4.2311701962E-05 4.1994493100E-05 4.1679659010E-05 + 4.1367181951E-05 4.1057044311E-05 4.0749228612E-05 4.0443717506E-05 + 4.0140493772E-05 3.9839540320E-05 3.9540840185E-05 3.9244376530E-05 + 3.8950132644E-05 3.8658091938E-05 3.8368237945E-05 3.8080554327E-05 + 3.7795024865E-05 3.7511633461E-05 3.7230364134E-05 3.6951201027E-05 + 3.6674128396E-05 3.6399130620E-05 3.6126192189E-05 3.5855297711E-05 + 3.5586431910E-05 3.5319579622E-05 3.5054725796E-05 3.4791855494E-05 + 3.4530953889E-05 3.4272006265E-05 3.4014998014E-05 3.3759914640E-05 + 3.3506741753E-05 3.3255465069E-05 3.3006070410E-05 3.2758543709E-05 + 3.2512871000E-05 3.2269038422E-05 3.2027032218E-05 3.1786838731E-05 + 3.1548444410E-05 3.1311835800E-05 3.1076999551E-05 3.0843922409E-05 + 3.0612591221E-05 3.0382992931E-05 3.0155114582E-05 2.9928943312E-05 + 2.9704466354E-05 2.9481671039E-05 2.9260544791E-05 2.9041075127E-05 + 2.8823249659E-05 2.8607056090E-05 2.8392482213E-05 2.8179515916E-05 + 2.7968145176E-05 2.7758358059E-05 2.7550142721E-05 2.7343487405E-05 + 2.7138380443E-05 2.6934810254E-05 2.6732765341E-05 2.6532234297E-05 + 2.6333205796E-05 2.6135668599E-05 2.5939611551E-05 2.5745023578E-05 + 2.5551893691E-05 2.5360210981E-05 2.5169964623E-05 2.4981143870E-05 + 2.4793738057E-05 2.4607736598E-05 2.4423128986E-05 2.4239904790E-05 + 2.4058053663E-05 2.3877565330E-05 2.3698429595E-05 2.3520636338E-05 + 2.3344175513E-05 2.3169037150E-05 2.2995211355E-05 2.2822688305E-05 + 2.2651458251E-05 2.2481511519E-05 2.2312838505E-05 2.2145429676E-05 + 2.1979275574E-05 2.1814366807E-05 2.1650694057E-05 2.1488248072E-05 + 2.1327019672E-05 2.1166999745E-05 2.1008179245E-05 2.0850549195E-05 + 2.0694100685E-05 2.0538824872E-05 2.0384712980E-05 2.0231756297E-05 + 2.0079946175E-05 1.9929274033E-05 1.9779731354E-05 1.9631309682E-05 + 1.9484000626E-05 1.9337795858E-05 1.9192687112E-05 1.9048666183E-05 + 1.8905724927E-05 1.8763855262E-05 1.8623049167E-05 1.8483298678E-05 + 1.8344595894E-05 1.8206932970E-05 1.8070302122E-05 1.7934695623E-05 + 1.7800105802E-05 1.7666525047E-05 1.7533945806E-05 1.7402360579E-05 + 1.7271761923E-05 1.7142142453E-05 1.7013494836E-05 1.6885811796E-05 + 1.6759086110E-05 1.6633310609E-05 1.6508478179E-05 1.6384581758E-05 + 1.6261614336E-05 1.6139568958E-05 1.6018438719E-05 1.5898216765E-05 + 1.5778896295E-05 1.5660470557E-05 1.5542932852E-05 1.5426276529E-05 + 1.5310494987E-05 1.5195581674E-05 1.5081530087E-05 1.4968333773E-05 + 1.4855986328E-05 1.4744481393E-05 1.4633812658E-05 1.4523973861E-05 + 1.4414958785E-05 1.4306761261E-05 1.4199375164E-05 1.4092794418E-05 + 1.3987012991E-05 1.3882024894E-05 1.3777824185E-05 1.3674404967E-05 + 1.3571761385E-05 1.3469887629E-05 1.3368777933E-05 1.3268426573E-05 + 1.3168827869E-05 1.3069976181E-05 1.2971865914E-05 1.2874491512E-05 + 1.2777847463E-05 1.2681928297E-05 1.2586728582E-05 1.2492242929E-05 + 1.2398465988E-05 1.2305392450E-05 1.2213017044E-05 1.2121334540E-05 + 1.2030339747E-05 1.1940027511E-05 1.1850392720E-05 1.1761430296E-05 + 1.1673135203E-05 1.1585502441E-05 1.1498527045E-05 1.1412204092E-05 + 1.1326528691E-05 1.1241495992E-05 1.1157101177E-05 1.1073339468E-05 + 1.0990206119E-05 1.0907696421E-05 1.0825805702E-05 1.0744529324E-05 + 1.0663862682E-05 1.0583801208E-05 1.0504340367E-05 1.0425475657E-05 + 1.0347202611E-05 1.0269516795E-05 1.0192413808E-05 1.0115889281E-05 + 1.0039938881E-05 9.9645583039E-06 9.8897432790E-06 9.8154895678E-06 + 9.7417929633E-06 9.6686492902E-06 9.5960544041E-06 9.5240041918E-06 + 9.4524945710E-06 9.3815214897E-06 9.3110809260E-06 9.2411688876E-06 + 9.1717814142E-06 9.1029145738E-06 9.0345644640E-06 8.9667272115E-06 + 8.8993989721E-06 8.8325759302E-06 8.7662542989E-06 8.7004303195E-06 + 8.6351002616E-06 8.5702604226E-06 8.5059071277E-06 8.4420367296E-06 + 8.3786456082E-06 8.3157301706E-06 8.2532868507E-06 8.1913121093E-06 + 8.1298024333E-06 8.0687543364E-06 8.0081643580E-06 7.9480290636E-06 + + + 6.0521921676E-12 3.6624939570E-05 1.4645122572E-04 3.2933352974E-04 + 5.8503054310E-04 9.1320632659E-04 1.3134321756E-03 1.7851889786E-03 + 2.3278700409E-03 2.9407843386E-03 3.6231601637E-03 4.3741491186E-03 + 5.1928304102E-03 6.0782153969E-03 7.0292523335E-03 8.0448312629E-03 + 9.1237889999E-03 1.0264914154E-02 1.1466952138E-02 1.2728610115E-02 + 1.4048561830E-02 1.5425452291E-02 1.6857902252E-02 1.8344512466E-02 + 1.9883867676E-02 2.1474540324E-02 2.3115093949E-02 2.4804086279E-02 + 2.6540071989E-02 2.8321605143E-02 3.0147241316E-02 3.2015539415E-02 + 3.3925063205E-02 3.5874382582E-02 3.7862074598E-02 3.9886724289E-02 + 4.1946925328E-02 4.4041280552E-02 4.6168402396E-02 4.8326913270E-02 + 5.0515445943E-02 5.2732643946E-02 5.4977162057E-02 5.7247666899E-02 + 5.9542837680E-02 6.1861367120E-02 6.4201962578E-02 6.6563347419E-02 + 6.8944262620E-02 7.1343468644E-02 7.3759747578E-02 7.6191905531E-02 + 7.8638775302E-02 8.1099219286E-02 8.3572132604E-02 8.6056446440E-02 + 8.8551131542E-02 9.1055201852E-02 9.3567718228E-02 9.6087792206E-02 + 9.8614589759E-02 1.0114733499E-01 1.0368531370E-01 1.0622787682E-01 + 1.0877444358E-01 1.1132450440E-01 1.1387762345E-01 1.1643344085E-01 + 1.1899167439E-01 1.2155212077E-01 1.2411465638E-01 1.2667923748E-01 + 1.2924589980E-01 1.3181475758E-01 1.3438600201E-01 1.3695989898E-01 + 1.3953678634E-01 1.4211707049E-01 1.4470122240E-01 1.4728977317E-01 + 1.4988330895E-01 1.5248246552E-01 1.5508792240E-01 1.5770039662E-01 + 1.6032063618E-01 1.6294941333E-01 1.6558751763E-01 1.6823574901E-01 + 1.7089491073E-01 1.7356580253E-01 1.7624921377E-01 1.7894591695E-01 + 1.8165666141E-01 1.8438216744E-01 1.8712312075E-01 1.8988016754E-01 + 1.9265390992E-01 1.9544490210E-01 1.9825364699E-01 2.0108059359E-01 + 2.0392613495E-01 2.0679060678E-01 2.0967428678E-01 2.1257739456E-01 + 2.1550009218E-01 2.1844248536E-01 2.2140462517E-01 2.2438651027E-01 + 2.2738808961E-01 2.3040926551E-01 2.3344989708E-01 2.3650980393E-01 + 2.3958877003E-01 2.4268654768E-01 2.4580286153E-01 2.4893741256E-01 + 2.5208988190E-01 2.5525993445E-01 2.5844722225E-01 2.6165138750E-01 + 2.6487206517E-01 2.6810888512E-01 2.7136147377E-01 2.7462945520E-01 + 2.7791245164E-01 2.8121008342E-01 2.8452196826E-01 2.8784772003E-01 + 2.9118694685E-01 2.9453924865E-01 2.9790421422E-01 3.0128141772E-01 + 3.0467041478E-01 3.0807073827E-01 3.1148189368E-01 3.1490335431E-01 + 3.1833455640E-01 3.2177489404E-01 3.2522371430E-01 3.2868031235E-01 + 3.3214392692E-01 3.3561373600E-01 3.3908885305E-01 3.4256832365E-01 + 3.4605112279E-01 3.4953615283E-01 3.5302224219E-01 3.5650814491E-01 + 3.5999254102E-01 3.6347403789E-01 3.6695117249E-01 3.7042241459E-01 + 3.7388617105E-01 3.7734079096E-01 3.8078457182E-01 3.8421576662E-01 + 3.8763259181E-01 3.9103323610E-01 3.9441587003E-01 3.9777865620E-01 + 4.0111976012E-01 4.0443736156E-01 4.0772966627E-01 4.1099491801E-01 + 4.1423141066E-01 4.1743750050E-01 4.2061161825E-01 4.2375228103E-01 + 4.2685810385E-01 4.2992781079E-01 4.3296024542E-01 4.3595438095E-01 + 4.3890932825E-01 4.4182434470E-01 4.4469884224E-01 4.4753239087E-01 + 4.5032472785E-01 4.5307575370E-01 4.5578549704E-01 4.5845409146E-01 + 4.6108171725E-01 4.6366853329E-01 4.6621469826E-01 4.6872036276E-01 + 4.7118567538E-01 4.7361080927E-01 4.7599595239E-01 4.7834129327E-01 + 4.8064702059E-01 4.8291332883E-01 4.8514041884E-01 4.8732849555E-01 + 4.8947776766E-01 4.9158844780E-01 4.9366075222E-01 4.9569490061E-01 + 4.9769111586E-01 4.9964962393E-01 5.0157065358E-01 5.0345443633E-01 + 5.0530120618E-01 5.0711119955E-01 5.0888465511E-01 5.1062181364E-01 + 5.1232291790E-01 5.1398821256E-01 5.1561794402E-01 5.1721236033E-01 + 5.1877171108E-01 5.2029624734E-01 5.2178622148E-01 5.2324188717E-01 + 5.2466349921E-01 5.2605131351E-01 5.2740558695E-01 5.2872657735E-01 + 5.3001454335E-01 5.3126974436E-01 5.3249244046E-01 5.3368289238E-01 + 5.3484136136E-01 5.3596810913E-01 5.3706339783E-01 5.3812748993E-01 + 5.3916064820E-01 5.4016313562E-01 5.4113521533E-01 5.4207715056E-01 + 5.4298920459E-01 5.4387164070E-01 5.4472472207E-01 5.4554871178E-01 + 5.4634387272E-01 5.4711046757E-01 5.4784875873E-01 5.4855900828E-01 + 5.4924147791E-01 5.4989642891E-01 5.5052412212E-01 5.5112481787E-01 + 5.5169877592E-01 5.5224625548E-01 5.5276751510E-01 5.5326281271E-01 + 5.5373240549E-01 5.5417654992E-01 5.5459550167E-01 5.5498951565E-01 + 5.5535884589E-01 5.5570374557E-01 5.5602446696E-01 5.5632126141E-01 + 5.5659437929E-01 5.5684407000E-01 5.5707058191E-01 5.5727416238E-01 + 5.5745505768E-01 5.5761351300E-01 5.5774977242E-01 5.5786407888E-01 + 5.5795667419E-01 5.5802779896E-01 5.5807769264E-01 5.5810659343E-01 + 5.5811473834E-01 5.5810236311E-01 5.5806970223E-01 5.5801698893E-01 + 5.5794445512E-01 5.5785233144E-01 5.5774084718E-01 5.5761023033E-01 + 5.5746070752E-01 5.5729250405E-01 5.5710584384E-01 5.5690094945E-01 + 5.5667804207E-01 5.5643734147E-01 5.5617906606E-01 5.5590343282E-01 + 5.5561065734E-01 5.5530095377E-01 5.5497453487E-01 5.5463161194E-01 + 5.5427239486E-01 5.5389709209E-01 5.5350591062E-01 5.5309905601E-01 + 5.5267673237E-01 5.5223914236E-01 5.5178648718E-01 5.5131896659E-01 + 5.5083677889E-01 5.5034012090E-01 5.4982918801E-01 5.4930417412E-01 + 5.4876527171E-01 5.4821267175E-01 5.4764656380E-01 5.4706713591E-01 + 5.4647457472E-01 5.4586906537E-01 5.4525079157E-01 5.4461993557E-01 + 5.4397667814E-01 5.4332119864E-01 5.4265367495E-01 5.4197428352E-01 + 5.4128319933E-01 5.4058059594E-01 5.3986664546E-01 5.3914151858E-01 + 5.3840538452E-01 5.3765841111E-01 5.3690076473E-01 5.3613261034E-01 + 5.3535411148E-01 5.3456543028E-01 5.3376672744E-01 5.3295816229E-01 + 5.3213989272E-01 5.3131207524E-01 5.3047486496E-01 5.2962841559E-01 + 5.2877287947E-01 5.2790840755E-01 5.2703514942E-01 5.2615325328E-01 + 5.2526286597E-01 5.2436413298E-01 5.2345719843E-01 5.2254220509E-01 + 5.2161929440E-01 5.2068860646E-01 5.1975028001E-01 5.1880445249E-01 + 5.1785126001E-01 5.1689083736E-01 5.1592331801E-01 5.1494883415E-01 + 5.1396751666E-01 5.1297949510E-01 5.1198489778E-01 5.1098385172E-01 + 5.0997648264E-01 5.0896291503E-01 5.0794327208E-01 5.0691767576E-01 + 5.0588624675E-01 5.0484910453E-01 5.0380636729E-01 5.0275815205E-01 + 5.0170457455E-01 5.0064574935E-01 4.9958178978E-01 4.9851280798E-01 + 4.9743891487E-01 4.9636022019E-01 4.9527683251E-01 4.9418885920E-01 + 4.9309640646E-01 4.9199957936E-01 4.9089848176E-01 4.8979321641E-01 + 4.8868388490E-01 4.8757058769E-01 4.8645342411E-01 4.8533249236E-01 + 4.8420788953E-01 4.8307971161E-01 4.8194805347E-01 4.8081300891E-01 + 4.7967467063E-01 4.7853313025E-01 4.7738847832E-01 4.7624080433E-01 + 4.7509019670E-01 4.7393674282E-01 4.7278052902E-01 4.7162164060E-01 + 4.7046016184E-01 4.6929617598E-01 4.6812976527E-01 4.6696101094E-01 + 4.6578999323E-01 4.6461679138E-01 4.6344148366E-01 4.6226414734E-01 + 4.6108485876E-01 4.5990369326E-01 4.5872072525E-01 4.5753602820E-01 + 4.5634967462E-01 4.5516173610E-01 4.5397228332E-01 4.5278138602E-01 + 4.5158911306E-01 4.5039553238E-01 4.4920071103E-01 4.4800471518E-01 + 4.4680761012E-01 4.4560946028E-01 4.4441032922E-01 4.4321027964E-01 + 4.4200937340E-01 4.4080767152E-01 4.3960523418E-01 4.3840212076E-01 + 4.3719838980E-01 4.3599409904E-01 4.3478930541E-01 4.3358406506E-01 + 4.3237843334E-01 4.3117246482E-01 4.2996621333E-01 4.2875973189E-01 + 4.2755307278E-01 4.2634628756E-01 4.2513942700E-01 4.2393254117E-01 + 4.2272567939E-01 4.2151889029E-01 4.2031222175E-01 4.1910572098E-01 + 4.1789943446E-01 4.1669340801E-01 4.1548768674E-01 4.1428231509E-01 + 4.1307733684E-01 4.1187279511E-01 4.1066873234E-01 4.0946519035E-01 + 4.0826221030E-01 4.0705983272E-01 4.0585809754E-01 4.0465704401E-01 + 4.0345671083E-01 4.0225713605E-01 4.0105835713E-01 3.9986041095E-01 + 3.9866333380E-01 3.9746716137E-01 3.9627192879E-01 3.9507767064E-01 + 3.9388442092E-01 3.9269221306E-01 3.9150107999E-01 3.9031105405E-01 + 3.8912216708E-01 3.8793445038E-01 3.8674793472E-01 3.8556265036E-01 + 3.8437862705E-01 3.8319589404E-01 3.8201448009E-01 3.8083441345E-01 + 3.7965572190E-01 3.7847843272E-01 3.7730257275E-01 3.7612816833E-01 + 3.7495524536E-01 3.7378382926E-01 3.7261394504E-01 3.7144561721E-01 + 3.7027886990E-01 3.6911372676E-01 3.6795021103E-01 3.6678834553E-01 + 3.6562815266E-01 3.6446965441E-01 3.6331287236E-01 3.6215782768E-01 + 3.6100454116E-01 3.5985303320E-01 3.5870332380E-01 3.5755543259E-01 + 3.5640937881E-01 3.5526518135E-01 3.5412285871E-01 3.5298242907E-01 + 3.5184391020E-01 3.5070731955E-01 3.4957267423E-01 3.4843999099E-01 + 3.4730928624E-01 3.4618057608E-01 3.4505387626E-01 3.4392920222E-01 + 3.4280656907E-01 3.4168599161E-01 3.4056748432E-01 3.3945106140E-01 + 3.3833673671E-01 3.3722452385E-01 3.3611443609E-01 3.3500648645E-01 + 3.3390068762E-01 3.3279705205E-01 3.3169559188E-01 3.3059631899E-01 + 3.2949924499E-01 3.2840438123E-01 3.2731173878E-01 3.2622132847E-01 + 3.2513316085E-01 3.2404724626E-01 3.2296359474E-01 3.2188221614E-01 + 3.2080312002E-01 3.1972631574E-01 3.1865181240E-01 3.1757961888E-01 + 3.1650974384E-01 3.1544219571E-01 3.1437698269E-01 3.1331411278E-01 + 3.1225359376E-01 3.1119543318E-01 3.1013963842E-01 3.0908621661E-01 + 3.0803517472E-01 3.0698651949E-01 3.0594025749E-01 3.0489639507E-01 + 3.0385493840E-01 3.0281589348E-01 3.0177926611E-01 3.0074506189E-01 + 2.9971328628E-01 2.9868394454E-01 2.9765704176E-01 2.9663258285E-01 + 2.9561057256E-01 2.9459101549E-01 2.9357391604E-01 2.9255927849E-01 + 2.9154710692E-01 2.9053740528E-01 2.8953017737E-01 2.8852542683E-01 + 2.8752315713E-01 2.8652337164E-01 2.8552607353E-01 2.8453126588E-01 + 2.8353895159E-01 2.8254913344E-01 2.8156181407E-01 2.8057699600E-01 + 2.7959468159E-01 2.7861487309E-01 2.7763757262E-01 2.7666278218E-01 + 2.7569050362E-01 2.7472073870E-01 2.7375348905E-01 2.7278875616E-01 + 2.7182654144E-01 2.7086684616E-01 2.6990967148E-01 2.6895501847E-01 + 2.6800288806E-01 2.6705328109E-01 2.6610619829E-01 2.6516164029E-01 + 2.6421960762E-01 2.6328010071E-01 2.6234311986E-01 2.6140866533E-01 + 2.6047673722E-01 2.5954733559E-01 2.5862046038E-01 2.5769611143E-01 + 2.5677428852E-01 2.5585499131E-01 2.5493821940E-01 2.5402397227E-01 + 2.5311224936E-01 2.5220304999E-01 2.5129637342E-01 2.5039221881E-01 + 2.4949058526E-01 2.4859147179E-01 2.4769487733E-01 2.4680080075E-01 + 2.4590924083E-01 2.4502019629E-01 2.4413366578E-01 2.4324964787E-01 + 2.4236814106E-01 2.4148914379E-01 2.4061265444E-01 2.3973867130E-01 + 2.3886719262E-01 2.3799821657E-01 2.3713174126E-01 2.3626776475E-01 + 2.3540628502E-01 2.3454730001E-01 2.3369080758E-01 2.3283680557E-01 + 2.3198529171E-01 2.3113626372E-01 2.3028971924E-01 2.2944565587E-01 + 2.2860407115E-01 2.2776496257E-01 2.2692832756E-01 2.2609416352E-01 + 2.2526246779E-01 2.2443323765E-01 2.2360647034E-01 2.2278216307E-01 + 2.2196031298E-01 2.2114091717E-01 2.2032397272E-01 2.1950947663E-01 + 2.1869742587E-01 2.1788781739E-01 2.1708064806E-01 2.1627591474E-01 + 2.1547361424E-01 2.1467374332E-01 2.1387629873E-01 2.1308127715E-01 + 2.1228867524E-01 2.1149848961E-01 2.1071071686E-01 2.0992535354E-01 + 2.0914239615E-01 2.0836184117E-01 2.0758368507E-01 2.0680792424E-01 + 2.0603455507E-01 2.0526357391E-01 2.0449497708E-01 2.0372876087E-01 + 2.0296492154E-01 2.0220345532E-01 2.0144435842E-01 2.0068762699E-01 + 1.9993325720E-01 1.9918124515E-01 1.9843158695E-01 1.9768427865E-01 + 1.9693931630E-01 1.9619669591E-01 1.9545641347E-01 1.9471846495E-01 + 1.9398284629E-01 1.9324955341E-01 1.9251858220E-01 1.9178992855E-01 + 1.9106358830E-01 1.9033955729E-01 1.8961783132E-01 1.8889840619E-01 + 1.8818127766E-01 1.8746644148E-01 1.8675389339E-01 1.8604362909E-01 + 1.8533564428E-01 1.8462993464E-01 1.8392649581E-01 1.8322532345E-01 + 1.8252641316E-01 1.8182976057E-01 1.8113536125E-01 1.8044321079E-01 + 1.7975330473E-01 1.7906563862E-01 1.7838020800E-01 1.7769700837E-01 + 1.7701603523E-01 1.7633728407E-01 1.7566075037E-01 1.7498642956E-01 + 1.7431431712E-01 1.7364440845E-01 1.7297669900E-01 1.7231118416E-01 + 1.7164785933E-01 1.7098671990E-01 1.7032776123E-01 1.6967097870E-01 + 1.6901636766E-01 1.6836392344E-01 1.6771364139E-01 1.6706551681E-01 + 1.6641954502E-01 1.6577572134E-01 1.6513404104E-01 1.6449449942E-01 + 1.6385709175E-01 1.6322181330E-01 1.6258865933E-01 1.6195762509E-01 + 1.6132870583E-01 1.6070189679E-01 1.6007719318E-01 1.5945459025E-01 + 1.5883408320E-01 1.5821566725E-01 1.5759933759E-01 1.5698508943E-01 + 1.5637291796E-01 1.5576281836E-01 1.5515478581E-01 1.5454881549E-01 + 1.5394490256E-01 1.5334304221E-01 1.5274322957E-01 1.5214545982E-01 + 1.5154972810E-01 1.5095602956E-01 1.5036435934E-01 1.4977471258E-01 + 1.4918708442E-01 1.4860146999E-01 1.4801786443E-01 1.4743626285E-01 + 1.4685666038E-01 1.4627905215E-01 1.4570343326E-01 1.4512979884E-01 + 1.4455814399E-01 1.4398846384E-01 1.4342075348E-01 1.4285500803E-01 + 1.4229122259E-01 1.4172939226E-01 1.4116951215E-01 1.4061157736E-01 + 1.4005558299E-01 1.3950152414E-01 1.3894939591E-01 1.3839919339E-01 + 1.3785091168E-01 1.3730454588E-01 1.3676009109E-01 1.3621754240E-01 + 1.3567689490E-01 1.3513814370E-01 1.3460128389E-01 1.3406631057E-01 + 1.3353321883E-01 1.3300200377E-01 1.3247266050E-01 1.3194518410E-01 + 1.3141956968E-01 1.3089581234E-01 1.3037390719E-01 1.2985384932E-01 + 1.2933563384E-01 1.2881925586E-01 1.2830471049E-01 1.2779199283E-01 + 1.2728109799E-01 1.2677202110E-01 1.2626475726E-01 1.2575930159E-01 + 1.2525564921E-01 1.2475379525E-01 1.2425373482E-01 1.2375546305E-01 + 1.2325897507E-01 1.2276426602E-01 1.2227133102E-01 1.2178016522E-01 + 1.2129076376E-01 1.2080312177E-01 1.2031723440E-01 1.1983309681E-01 + 1.1935070414E-01 1.1887005156E-01 1.1839113421E-01 1.1791394727E-01 + 1.1743848590E-01 1.1696474527E-01 1.1649272055E-01 1.1602240692E-01 + 1.1555379956E-01 1.1508689366E-01 1.1462168441E-01 1.1415816700E-01 + 1.1369633663E-01 1.1323618850E-01 1.1277771782E-01 1.1232091979E-01 + 1.1186578964E-01 1.1141232258E-01 1.1096051384E-01 1.1051035865E-01 + 1.1006185224E-01 1.0961498984E-01 1.0916976671E-01 1.0872617809E-01 + 1.0828421924E-01 1.0784388541E-01 1.0740517187E-01 1.0696807388E-01 + 1.0653258673E-01 1.0609870568E-01 1.0566642603E-01 1.0523574307E-01 + 1.0480665209E-01 1.0437914839E-01 1.0395322728E-01 1.0352888408E-01 + 1.0310611409E-01 1.0268491265E-01 1.0226527509E-01 1.0184719674E-01 + 1.0143067294E-01 1.0101569904E-01 1.0060227040E-01 1.0019038237E-01 + 9.9780030322E-02 9.9371209629E-02 9.8963915668E-02 9.8558143825E-02 + 9.8153889489E-02 9.7751148059E-02 9.7349914940E-02 9.6950185540E-02 + 9.6551955279E-02 9.6155219579E-02 9.5759973870E-02 9.5366213589E-02 + 9.4973934181E-02 9.4583131096E-02 9.4193799790E-02 9.3805935728E-02 + 9.3419534380E-02 9.3034591226E-02 9.2651101748E-02 9.2269061440E-02 + 9.1888465801E-02 9.1509310335E-02 9.1131590556E-02 9.0755301985E-02 + 9.0380440149E-02 9.0007000582E-02 8.9634978827E-02 8.9264370433E-02 + 8.8895170956E-02 8.8527375961E-02 8.8160981018E-02 8.7795981708E-02 + 8.7432373616E-02 8.7070152336E-02 8.6709313469E-02 8.6349852625E-02 + 8.5991765421E-02 8.5635047480E-02 8.5279694436E-02 8.4925701926E-02 + 8.4573065600E-02 8.4221781112E-02 8.3871844126E-02 8.3523250312E-02 + 8.3175995350E-02 8.2830074926E-02 8.2485484734E-02 8.2142220478E-02 + 8.1800277868E-02 8.1459652623E-02 8.1120340469E-02 8.0782337141E-02 + 8.0445638382E-02 8.0110239943E-02 7.9776137583E-02 7.9443327070E-02 + 7.9111804179E-02 7.8781564694E-02 7.8452604406E-02 7.8124919116E-02 + 7.7798504633E-02 7.7473356774E-02 7.7149471363E-02 7.6826844234E-02 + 7.6505471230E-02 7.6185348200E-02 7.5866471004E-02 7.5548835509E-02 + 7.5232437591E-02 7.4917273133E-02 7.4603338029E-02 7.4290628180E-02 + 7.3979139496E-02 7.3668867895E-02 7.3359809305E-02 7.3051959660E-02 + 7.2745314906E-02 7.2439870996E-02 7.2135623890E-02 7.1832569559E-02 + 7.1530703982E-02 7.1230023147E-02 7.0930523051E-02 7.0632199698E-02 + 7.0335049102E-02 7.0039067287E-02 6.9744250283E-02 6.9450594132E-02 + 6.9158094881E-02 6.8866748590E-02 6.8576551325E-02 6.8287499162E-02 + 6.7999588186E-02 6.7712814489E-02 6.7427174175E-02 6.7142663355E-02 + 6.6859278149E-02 6.6577014686E-02 6.6295869104E-02 6.6015837551E-02 + 6.5736916183E-02 6.5459101165E-02 6.5182388670E-02 6.4906774883E-02 + 6.4632255994E-02 6.4358828207E-02 6.4086487729E-02 6.3815230782E-02 + 6.3545053592E-02 6.3275952399E-02 6.3007923447E-02 6.2740962992E-02 + 6.2475067300E-02 6.2210232644E-02 6.1946455306E-02 6.1683731579E-02 + 6.1422057763E-02 6.1161430170E-02 6.0901845117E-02 6.0643298934E-02 + 6.0385787959E-02 6.0129308537E-02 5.9873857025E-02 5.9619429788E-02 + 5.9366023200E-02 5.9113633645E-02 5.8862257514E-02 5.8611891211E-02 + 5.8362531145E-02 5.8114173737E-02 5.7866815416E-02 5.7620452620E-02 + 5.7375081798E-02 5.7130699406E-02 5.6887301910E-02 5.6644885786E-02 + 5.6403447517E-02 5.6162983599E-02 5.5923490532E-02 5.5684964830E-02 + 5.5447403014E-02 5.5210801615E-02 5.4975157171E-02 5.4740466233E-02 + 5.4506725358E-02 5.4273931113E-02 5.4042080075E-02 5.3811168830E-02 + 5.3581193973E-02 5.3352152108E-02 5.3124039849E-02 5.2896853817E-02 + 5.2670590646E-02 5.2445246975E-02 5.2220819455E-02 5.1997304745E-02 + 5.1774699515E-02 5.1553000441E-02 5.1332204212E-02 5.1112307522E-02 + 5.0893307078E-02 5.0675199594E-02 5.0457981793E-02 5.0241650409E-02 + 5.0026202183E-02 4.9811633868E-02 4.9597942223E-02 4.9385124017E-02 + 4.9173176031E-02 4.8962095051E-02 4.8751877874E-02 4.8542521307E-02 + 4.8334022164E-02 4.8126377272E-02 4.7919583462E-02 4.7713637577E-02 + 4.7508536470E-02 4.7304277002E-02 4.7100856041E-02 4.6898270468E-02 + 4.6696517170E-02 4.6495593044E-02 4.6295494998E-02 4.6096219946E-02 + 4.5897764813E-02 4.5700126532E-02 4.5503302046E-02 4.5307288307E-02 + 4.5112082274E-02 4.4917680918E-02 4.4724081218E-02 4.4531280160E-02 + 4.4339274741E-02 4.4148061968E-02 4.3957638854E-02 4.3768002424E-02 + 4.3579149709E-02 4.3391077751E-02 4.3203783601E-02 4.3017264319E-02 + 4.2831516971E-02 4.2646538635E-02 4.2462326399E-02 4.2278877355E-02 + 4.2096188609E-02 4.1914257273E-02 4.1733080468E-02 4.1552655326E-02 + 4.1372978984E-02 4.1194048592E-02 4.1015861306E-02 4.0838414293E-02 + 4.0661704725E-02 4.0485729788E-02 4.0310486672E-02 4.0135972580E-02 + 3.9962184719E-02 3.9789120309E-02 3.9616776577E-02 3.9445150758E-02 + 3.9274240098E-02 3.9104041848E-02 3.8934553271E-02 3.8765771638E-02 + 3.8597694227E-02 3.8430318326E-02 3.8263641232E-02 3.8097660250E-02 + 3.7932372693E-02 3.7767775884E-02 3.7603867153E-02 3.7440643840E-02 + 3.7278103293E-02 3.7116242867E-02 3.6955059929E-02 3.6794551851E-02 + 3.6634716015E-02 3.6475549812E-02 3.6317050641E-02 3.6159215909E-02 + 3.6002043032E-02 3.5845529434E-02 3.5689672547E-02 3.5534469814E-02 + 3.5379918682E-02 3.5226016610E-02 3.5072761063E-02 3.4920149517E-02 + 3.4768179454E-02 3.4616848366E-02 3.4466153750E-02 3.4316093116E-02 + 3.4166663978E-02 3.4017863862E-02 3.3869690299E-02 3.3722140830E-02 + 3.3575213003E-02 3.3428904377E-02 3.3283212515E-02 3.3138134991E-02 + 3.2993669386E-02 3.2849813291E-02 3.2706564302E-02 3.2563920025E-02 + 3.2421878075E-02 3.2280436072E-02 3.2139591647E-02 3.1999342438E-02 + 3.1859686090E-02 3.1720620258E-02 3.1582142603E-02 3.1444250796E-02 + 3.1306942513E-02 3.1170215441E-02 3.1034067274E-02 3.0898495712E-02 + 3.0763498465E-02 3.0629073250E-02 3.0495217793E-02 3.0361929827E-02 + 3.0229207091E-02 3.0097047335E-02 2.9965448314E-02 2.9834407794E-02 + 2.9703923545E-02 2.9573993347E-02 2.9444614987E-02 2.9315786261E-02 + 2.9187504970E-02 2.9059768925E-02 2.8932575943E-02 2.8805923851E-02 + 2.8679810481E-02 2.8554233674E-02 2.8429191278E-02 2.8304681149E-02 + 2.8180701150E-02 2.8057249151E-02 2.7934323032E-02 2.7811920678E-02 + 2.7690039982E-02 2.7568678845E-02 2.7447835174E-02 2.7327506886E-02 + 2.7207691904E-02 2.7088388157E-02 2.6969593583E-02 2.6851306127E-02 + 2.6733523742E-02 2.6616244386E-02 2.6499466028E-02 2.6383186640E-02 + 2.6267404205E-02 2.6152116710E-02 2.6037322152E-02 2.5923018533E-02 + 2.5809203865E-02 2.5695876163E-02 2.5583033453E-02 2.5470673765E-02 + 2.5358795140E-02 2.5247395622E-02 2.5136473264E-02 2.5026026126E-02 + 2.4916052275E-02 2.4806549785E-02 2.4697516736E-02 2.4588951217E-02 + 2.4480851322E-02 2.4373215154E-02 2.4266040819E-02 2.4159326436E-02 + 2.4053070124E-02 2.3947270015E-02 2.3841924244E-02 2.3737030953E-02 + 2.3632588293E-02 2.3528594421E-02 2.3425047499E-02 2.3321945698E-02 + 2.3219287194E-02 2.3117070171E-02 2.3015292819E-02 2.2913953336E-02 + 2.2813049923E-02 2.2712580793E-02 2.2612544161E-02 2.2512938251E-02 + 2.2413761293E-02 2.2315011523E-02 2.2216687185E-02 2.2118786528E-02 + 2.2021307808E-02 2.1924249288E-02 2.1827609238E-02 2.1731385932E-02 + 2.1635577652E-02 2.1540182688E-02 2.1445199333E-02 2.1350625889E-02 + 2.1256460664E-02 2.1162701972E-02 2.1069348132E-02 2.0976397471E-02 + 2.0883848323E-02 2.0791699026E-02 2.0699947925E-02 2.0608593372E-02 + 2.0517633725E-02 2.0427067349E-02 2.0336892612E-02 2.0247107892E-02 + 2.0157711570E-02 2.0068702036E-02 1.9980077685E-02 1.9891836916E-02 + 1.9803978138E-02 1.9716499762E-02 1.9629400208E-02 1.9542677901E-02 + 1.9456331271E-02 1.9370358756E-02 1.9284758799E-02 1.9199529848E-02 + 1.9114670358E-02 1.9030178790E-02 1.8946053611E-02 1.8862293292E-02 + 1.8778896312E-02 1.8695861156E-02 1.8613186313E-02 1.8530870279E-02 + 1.8448911555E-02 1.8367308649E-02 1.8286060073E-02 1.8205164347E-02 + 1.8124619995E-02 1.8044425547E-02 1.7964579538E-02 1.7885080511E-02 + 1.7805927012E-02 1.7727117595E-02 1.7648650817E-02 1.7570525242E-02 + 1.7492739439E-02 1.7415291985E-02 1.7338181459E-02 1.7261406447E-02 + 1.7184965541E-02 1.7108857338E-02 1.7033080440E-02 1.6957633456E-02 + 1.6882514998E-02 1.6807723686E-02 1.6733258143E-02 1.6659116999E-02 + 1.6585298889E-02 1.6511802453E-02 1.6438626337E-02 1.6365769191E-02 + 1.6293229672E-02 1.6221006440E-02 1.6149098164E-02 1.6077503513E-02 + 1.6006221166E-02 1.5935249804E-02 1.5864588116E-02 1.5794234793E-02 + 1.5724188534E-02 1.5654448041E-02 1.5585012023E-02 1.5515879192E-02 + 1.5447048266E-02 1.5378517970E-02 1.5310287030E-02 1.5242354181E-02 + 1.5174718161E-02 1.5107377712E-02 1.5040331584E-02 1.4973578529E-02 + 1.4907117306E-02 1.4840946678E-02 1.4775065413E-02 1.4709472283E-02 + 1.4644166067E-02 1.4579145546E-02 1.4514409510E-02 1.4449956749E-02 + 1.4385786062E-02 1.4321896249E-02 1.4258286119E-02 1.4194954481E-02 + 1.4131900152E-02 1.4069121954E-02 1.4006618712E-02 1.3944389256E-02 + 1.3882432421E-02 1.3820747047E-02 1.3759331979E-02 1.3698186064E-02 + 1.3637308158E-02 1.3576697117E-02 1.3516351805E-02 1.3456271089E-02 + 1.3396453841E-02 1.3336898937E-02 1.3277605258E-02 1.3218571690E-02 + 1.3159797122E-02 1.3101280449E-02 1.3043020570E-02 1.2985016388E-02 + 1.2927266811E-02 1.2869770750E-02 1.2812527123E-02 1.2755534850E-02 + 1.2698792857E-02 1.2642300072E-02 1.2586055431E-02 1.2530057870E-02 + 1.2474306334E-02 1.2418799768E-02 1.2363537123E-02 1.2308517356E-02 + 1.2253739425E-02 1.2199202295E-02 1.2144904932E-02 1.2090846311E-02 + 1.2037025406E-02 1.1983441199E-02 1.1930092675E-02 1.1876978821E-02 + 1.1824098631E-02 1.1771451103E-02 1.1719035236E-02 1.1666850037E-02 + 1.1614894515E-02 1.1563167683E-02 1.1511668558E-02 1.1460396161E-02 + 1.1409349519E-02 1.1358527661E-02 1.1307929619E-02 1.1257554431E-02 + 1.1207401139E-02 1.1157468787E-02 1.1107756424E-02 1.1058263104E-02 + 1.1008987883E-02 1.0959929822E-02 1.0911087986E-02 1.0862461443E-02 + 1.0814049265E-02 1.0765850528E-02 1.0717864312E-02 1.0670089702E-02 + 1.0622525783E-02 1.0575171648E-02 1.0528026391E-02 1.0481089111E-02 + 1.0434358910E-02 1.0387834895E-02 1.0341516175E-02 1.0295401863E-02 + 1.0249491077E-02 1.0203782937E-02 1.0158276568E-02 1.0112971097E-02 + 1.0067865657E-02 1.0022959382E-02 9.9782514117E-03 9.9337408877E-03 + 9.8894269561E-03 9.8453087663E-03 9.8013854713E-03 9.7576562276E-03 + 9.7141201950E-03 9.6707765371E-03 9.6276244207E-03 9.5846630162E-03 + 9.5418914974E-03 9.4993090417E-03 9.4569148296E-03 9.4147080453E-03 + 9.3726878761E-03 9.3308535131E-03 9.2892041503E-03 9.2477389855E-03 + 9.2064572195E-03 9.1653580565E-03 9.1244407042E-03 9.0837043734E-03 + 9.0431482783E-03 9.0027716363E-03 8.9625736682E-03 8.9225535979E-03 + 8.8827106527E-03 8.8430440629E-03 8.8035530623E-03 8.7642368878E-03 + 8.7250947793E-03 8.6861259801E-03 8.6473297367E-03 8.6087052986E-03 + 8.5702519184E-03 8.5319688522E-03 8.4938553587E-03 8.4559107000E-03 + 8.4181341414E-03 8.3805249511E-03 8.3430824004E-03 8.3058057636E-03 + 8.2686943183E-03 8.2317473447E-03 8.1949641266E-03 8.1583439502E-03 + 8.1218861052E-03 8.0855898840E-03 8.0494545821E-03 8.0134794979E-03 + 7.9776639328E-03 7.9420071911E-03 7.9065085801E-03 7.8711674099E-03 + 7.8359829937E-03 7.8009546474E-03 7.7660816899E-03 7.7313634429E-03 + 7.6967992310E-03 7.6623883817E-03 7.6281302254E-03 7.5940240950E-03 + 7.5600693265E-03 7.5262652588E-03 7.4926112333E-03 7.4591065944E-03 + 7.4257506892E-03 7.3925428676E-03 7.3594824821E-03 7.3265688882E-03 + 7.2938014438E-03 7.2611795100E-03 7.2287024500E-03 7.1963696303E-03 + 7.1641804197E-03 7.1321341897E-03 7.1002303146E-03 7.0684681714E-03 + 7.0368471395E-03 7.0053666012E-03 6.9740259413E-03 6.9428245471E-03 + 6.9117618088E-03 6.8808371189E-03 6.8500498726E-03 6.8193994677E-03 + 6.7888853046E-03 6.7585067860E-03 6.7282633176E-03 6.6981543071E-03 + 6.6681791651E-03 6.6383373047E-03 6.6086281411E-03 6.5790510926E-03 + 6.5496055794E-03 6.5202910246E-03 6.4911068536E-03 6.4620524941E-03 + 6.4331273766E-03 6.4043309336E-03 6.3756626004E-03 6.3471218146E-03 + 6.3187080159E-03 6.2904206469E-03 6.2622591522E-03 6.2342229790E-03 + 6.2063115767E-03 6.1785243971E-03 6.1508608945E-03 6.1233205252E-03 + 6.0959027483E-03 6.0686070247E-03 6.0414328179E-03 6.0143795938E-03 + 5.9874468203E-03 5.9606339677E-03 5.9339405087E-03 5.9073659181E-03 + 5.8809096730E-03 5.8545712528E-03 5.8283501389E-03 5.8022458153E-03 + 5.7762577680E-03 5.7503854850E-03 5.7246284570E-03 5.6989861765E-03 + 5.6734581382E-03 5.6480438392E-03 5.6227427785E-03 5.5975544574E-03 + 5.5724783794E-03 5.5475140500E-03 5.5226609769E-03 5.4979186698E-03 + 5.4732866407E-03 5.4487644036E-03 5.4243514745E-03 5.4000473717E-03 + 5.3758516154E-03 5.3517637279E-03 5.3277832337E-03 5.3039096591E-03 + 5.2801425325E-03 5.2564813846E-03 5.2329257479E-03 5.2094751568E-03 + 5.1861291479E-03 5.1628872599E-03 5.1397490331E-03 5.1167140102E-03 + 5.0937817356E-03 5.0709517558E-03 5.0482236193E-03 5.0255968763E-03 + 5.0030710793E-03 4.9806457824E-03 4.9583205419E-03 4.9360949158E-03 + 4.9139684642E-03 4.8919407489E-03 4.8700113338E-03 4.8481797846E-03 + 4.8264456687E-03 4.8048085557E-03 4.7832680169E-03 4.7618236253E-03 + 4.7404749562E-03 4.7192215861E-03 4.6980630940E-03 4.6769990602E-03 + 4.6560290671E-03 4.6351526989E-03 4.6143695413E-03 4.5936791823E-03 + 4.5730812113E-03 4.5525752196E-03 4.5321608003E-03 4.5118375483E-03 + 4.4916050600E-03 4.4714629339E-03 4.4514107701E-03 4.4314481704E-03 + 4.4115747383E-03 4.3917900791E-03 4.3720937998E-03 4.3524855091E-03 + 4.3329648175E-03 4.3135313369E-03 4.2941846813E-03 4.2749244659E-03 + 4.2557503081E-03 4.2366618265E-03 4.2176586416E-03 4.1987403755E-03 + 4.1799066520E-03 4.1611570964E-03 4.1424913359E-03 4.1239089989E-03 + 4.1054097158E-03 4.0869931184E-03 4.0686588402E-03 4.0504065163E-03 + 4.0322357833E-03 4.0141462795E-03 3.9961376447E-03 3.9782095202E-03 + 3.9603615490E-03 3.9425933756E-03 3.9249046462E-03 3.9072950081E-03 + 3.8897641107E-03 3.8723116046E-03 3.8549371419E-03 3.8376403764E-03 + 3.8204209633E-03 3.8032785594E-03 3.7862128227E-03 3.7692234131E-03 + 3.7523099918E-03 3.7354722215E-03 3.7187097662E-03 3.7020222917E-03 + 3.6854094649E-03 3.6688709545E-03 3.6524064305E-03 3.6360155642E-03 + 3.6196980285E-03 3.6034534978E-03 3.5872816477E-03 3.5711821554E-03 + 3.5551546994E-03 3.5391989598E-03 3.5233146178E-03 3.5075013562E-03 + 3.4917588592E-03 3.4760868123E-03 3.4604849023E-03 3.4449528176E-03 + 3.4294902478E-03 3.4140968839E-03 3.3987724183E-03 3.3835165445E-03 + 3.3683289578E-03 3.3532093544E-03 3.3381574321E-03 3.3231728899E-03 + 3.3082554281E-03 3.2934047485E-03 3.2786205539E-03 3.2639025487E-03 + 3.2492504385E-03 3.2346639301E-03 3.2201427316E-03 3.2056865526E-03 + 3.1912951036E-03 3.1769680967E-03 3.1627052452E-03 3.1485062635E-03 + 3.1343708673E-03 3.1202987737E-03 3.1062897010E-03 3.0923433685E-03 + 3.0784594971E-03 3.0646378086E-03 3.0508780263E-03 3.0371798745E-03 + 3.0235430787E-03 3.0099673659E-03 2.9964524639E-03 2.9829981021E-03 + 2.9696040107E-03 2.9562699213E-03 2.9429955668E-03 2.9297806810E-03 + 2.9166249989E-03 2.9035282570E-03 2.8904901926E-03 2.8775105442E-03 + 2.8645890517E-03 2.8517254558E-03 2.8389194986E-03 2.8261709233E-03 + 2.8134794741E-03 2.8008448965E-03 2.7882669369E-03 2.7757453430E-03 + 2.7632798636E-03 2.7508702485E-03 2.7385162488E-03 2.7262176163E-03 + 2.7139741044E-03 2.7017854673E-03 2.6896514602E-03 2.6775718397E-03 + 2.6655463631E-03 2.6535747890E-03 2.6416568770E-03 2.6297923879E-03 + 2.6179810833E-03 2.6062227260E-03 2.5945170798E-03 2.5828639096E-03 + 2.5712629814E-03 2.5597140620E-03 2.5482169194E-03 2.5367713226E-03 + 2.5253770417E-03 2.5140338475E-03 2.5027415123E-03 2.4914998090E-03 + 2.4803085116E-03 2.4691673953E-03 2.4580762360E-03 2.4470348108E-03 + 2.4360428977E-03 2.4251002756E-03 2.4142067246E-03 2.4033620256E-03 + 2.3925659605E-03 2.3818183122E-03 2.3711188644E-03 2.3604674021E-03 + 2.3498637108E-03 2.3393075774E-03 2.3287987894E-03 2.3183371355E-03 + 2.3079224050E-03 2.2975543885E-03 2.2872328773E-03 2.2769576637E-03 + 2.2667285409E-03 2.2565453030E-03 2.2464077451E-03 2.2363156630E-03 + 2.2262688537E-03 2.2162671148E-03 2.2063102450E-03 2.1963980439E-03 + 2.1865303117E-03 2.1767068499E-03 2.1669274606E-03 2.1571919469E-03 + 2.1475001126E-03 2.1378517626E-03 2.1282467026E-03 2.1186847390E-03 + 2.1091656792E-03 2.0996893314E-03 2.0902555048E-03 2.0808640093E-03 + 2.0715146556E-03 2.0622072553E-03 2.0529416209E-03 2.0437175656E-03 + 2.0345349035E-03 2.0253934497E-03 2.0162930197E-03 2.0072334302E-03 + 1.9982144986E-03 1.9892360429E-03 1.9802978823E-03 1.9713998366E-03 + 1.9625417262E-03 1.9537233726E-03 1.9449445980E-03 1.9362052253E-03 + 1.9275050784E-03 1.9188439817E-03 1.9102217605E-03 1.9016382411E-03 + 1.8930932501E-03 1.8845866152E-03 1.8761181650E-03 1.8676877284E-03 + 1.8592951354E-03 1.8509402167E-03 1.8426228038E-03 1.8343427287E-03 + 1.8260998245E-03 1.8178939247E-03 1.8097248638E-03 1.8015924769E-03 + 1.7934965999E-03 1.7854370694E-03 1.7774137226E-03 1.7694263977E-03 + 1.7614749334E-03 1.7535591692E-03 1.7456789452E-03 1.7378341025E-03 + 1.7300244825E-03 1.7222499277E-03 1.7145102809E-03 1.7068053861E-03 + 1.6991350875E-03 1.6914992302E-03 1.6838976601E-03 1.6763302237E-03 + 1.6687967680E-03 1.6612971409E-03 1.6538311910E-03 1.6463987674E-03 + 1.6389997200E-03 1.6316338994E-03 1.6243011566E-03 1.6170013436E-03 + 1.6097343129E-03 1.6024999176E-03 1.5952980116E-03 1.5881284494E-03 + 1.5809910860E-03 1.5738857773E-03 1.5668123796E-03 1.5597707500E-03 + 1.5527607462E-03 1.5457822265E-03 1.5388350499E-03 1.5319190759E-03 + 1.5250341647E-03 1.5181801772E-03 1.5113569747E-03 1.5045644194E-03 + 1.4978023740E-03 1.4910707017E-03 1.4843692663E-03 1.4776979326E-03 + 1.4710565654E-03 1.4644450306E-03 1.4578631944E-03 1.4513109238E-03 + 1.4447880862E-03 1.4382945497E-03 1.4318301830E-03 1.4253948554E-03 + 1.4189884366E-03 1.4126107972E-03 1.4062618081E-03 1.3999413409E-03 + 1.3936492677E-03 1.3873854613E-03 1.3811497949E-03 1.3749421423E-03 + 1.3687623781E-03 1.3626103771E-03 1.3564860149E-03 1.3503891676E-03 + 1.3443197118E-03 1.3382775247E-03 1.3322624840E-03 1.3262744680E-03 + 1.3203133555E-03 1.3143790260E-03 1.3084713592E-03 1.3025902357E-03 + 1.2967355364E-03 1.2909071428E-03 1.2851049369E-03 1.2793288013E-03 + 1.2735786190E-03 1.2678542738E-03 1.2621556496E-03 1.2564826312E-03 + 1.2508351037E-03 1.2452129527E-03 1.2396160644E-03 1.2340443256E-03 + 1.2284976233E-03 1.2229758454E-03 1.2174788799E-03 1.2120066157E-03 + 1.2065589418E-03 1.2011357480E-03 1.1957369245E-03 1.1903623618E-03 + 1.1850119513E-03 1.1796855845E-03 1.1743831535E-03 1.1691045510E-03 + 1.1638496700E-03 1.1586184041E-03 1.1534106474E-03 1.1482262944E-03 + 1.1430652400E-03 1.1379273798E-03 1.1328126096E-03 1.1277208258E-03 + 1.1226519253E-03 1.1176058054E-03 1.1125823638E-03 1.1075814989E-03 + 1.1026031092E-03 1.0976470939E-03 1.0927133527E-03 1.0878017854E-03 + 1.0829122927E-03 1.0780447754E-03 1.0731991349E-03 1.0683752731E-03 + 1.0635730921E-03 1.0587924946E-03 1.0540333839E-03 1.0492956634E-03 + 1.0445792371E-03 1.0398840094E-03 1.0352098852E-03 1.0305567697E-03 + 1.0259245687E-03 1.0213131883E-03 1.0167225349E-03 1.0121525156E-03 + 1.0076030376E-03 1.0030740089E-03 9.9856533750E-04 9.9407693211E-04 + 9.8960870172E-04 9.8516055575E-04 9.8073240403E-04 9.7632415678E-04 + 9.7193572464E-04 9.6756701864E-04 9.6321795021E-04 9.5888843117E-04 + 9.5457837374E-04 9.5028769054E-04 9.4601629457E-04 9.4176409922E-04 + 9.3753101828E-04 9.3331696591E-04 9.2912185666E-04 9.2494560546E-04 + + + + 1.3271110416E-01 1.3269861596E-01 1.3266115798E-01 1.3259875001E-01 + 1.3251142504E-01 1.3239922922E-01 1.3226222179E-01 1.3210047509E-01 + 1.3191407445E-01 1.3170311815E-01 1.3146771732E-01 1.3120799586E-01 + 1.3092409033E-01 1.3061614984E-01 1.3028433594E-01 1.2992882246E-01 + 1.2954979540E-01 1.2914745274E-01 1.2872200431E-01 1.2827367163E-01 + 1.2780268765E-01 1.2730929668E-01 1.2679375409E-01 1.2625632615E-01 + 1.2569728980E-01 1.2511693244E-01 1.2451555168E-01 1.2389345513E-01 + 1.2325096010E-01 1.2258839341E-01 1.2190609107E-01 1.2120439807E-01 + 1.2048366804E-01 1.1974426303E-01 1.1898655320E-01 1.1821091651E-01 + 1.1741773845E-01 1.1660741174E-01 1.1578033600E-01 1.1493691746E-01 + 1.1407756863E-01 1.1320270799E-01 1.1231275969E-01 1.1140815319E-01 + 1.1048932295E-01 1.0955670810E-01 1.0861075211E-01 1.0765190247E-01 + 1.0668061032E-01 1.0569733015E-01 1.0470251945E-01 1.0369663840E-01 + 1.0268014946E-01 1.0165351714E-01 1.0061720758E-01 9.9571688247E-02 + 9.8517427623E-02 9.7454894838E-02 9.6384559362E-02 9.5306890674E-02 + 9.4222357938E-02 9.3131429680E-02 9.2034573472E-02 9.0932255618E-02 + 8.9824940838E-02 8.8713091968E-02 8.7597169652E-02 8.6477632045E-02 + 8.5354934518E-02 8.4229529375E-02 8.3101865562E-02 8.1972388393E-02 + 8.0841539278E-02 7.9709755455E-02 7.8577469732E-02 7.7445110229E-02 + 7.6313100136E-02 7.5181857467E-02 7.4051794830E-02 7.2923319196E-02 + 7.1796831685E-02 7.0672727346E-02 6.9551394960E-02 6.8433216834E-02 + 6.7318568620E-02 6.6207819125E-02 6.5101330143E-02 6.3999456284E-02 + 6.2902544820E-02 6.1810935532E-02 6.0724960568E-02 5.9644944314E-02 + 5.8571203261E-02 5.7504045894E-02 5.6443772580E-02 5.5390675470E-02 + 5.4345038404E-02 5.3307136829E-02 5.2277237722E-02 5.1255599524E-02 + 5.0242472080E-02 4.9238096587E-02 4.8242705554E-02 4.7256522764E-02 + 4.6279763249E-02 4.5312633269E-02 4.4355330305E-02 4.3408043051E-02 + 4.2470951420E-02 4.1544226556E-02 4.0628030852E-02 3.9722517980E-02 + 3.8827832917E-02 3.7944111993E-02 3.7071482936E-02 3.6210064924E-02 + 3.5359968646E-02 3.4521296373E-02 3.3694142026E-02 3.2878591258E-02 + 3.2074721539E-02 3.1282602248E-02 3.0502294766E-02 2.9733852582E-02 + 2.8977321397E-02 2.8232739236E-02 2.7500136567E-02 2.6779536422E-02 + 2.6070954518E-02 2.5374399394E-02 2.4689872539E-02 2.4017368534E-02 + 2.3356875189E-02 2.2708373690E-02 2.2071838748E-02 2.1447238746E-02 + 2.0834535894E-02 2.0233686387E-02 1.9644640561E-02 1.9067343053E-02 + 1.8501732964E-02 1.7947744024E-02 1.7405304757E-02 1.6874338646E-02 + 1.6354764305E-02 1.5846495642E-02 1.5349442034E-02 1.4863508496E-02 + 1.4388595848E-02 1.3924600892E-02 1.3471416576E-02 1.3028932168E-02 + 1.2597033427E-02 1.2175602772E-02 1.1764519446E-02 1.1363659693E-02 + 1.0972896917E-02 1.0592101852E-02 1.0221142726E-02 9.8598854233E-03 + 9.5081936455E-03 9.1659290722E-03 8.8329515184E-03 8.5091190901E-03 + 8.1942883381E-03 7.8883144093E-03 7.5910511961E-03 7.3023514822E-03 + 7.0220670875E-03 6.7500490088E-03 6.4861475587E-03 6.2302125014E-03 + 5.9820931853E-03 5.7416386732E-03 5.5086978688E-03 5.2831196406E-03 + 5.0647529422E-03 4.8534469298E-03 4.6490510760E-03 4.4514152805E-03 + 4.2603899772E-03 4.0758262385E-03 3.8975758754E-03 3.7254915345E-03 + 3.5594267917E-03 3.3992362421E-03 3.2447755867E-03 3.0959017153E-03 + 2.9524727858E-03 2.8143483009E-03 2.6813891800E-03 2.5534578285E-03 + 2.4304182035E-03 2.3121358759E-03 2.1984780892E-03 2.0893138145E-03 + 1.9845138032E-03 1.8839506349E-03 1.7874987634E-03 1.6950345583E-03 + 1.6064363445E-03 1.5215844375E-03 1.4403611763E-03 1.3626509530E-03 + 1.2883402395E-03 1.2173176109E-03 1.1494737665E-03 1.0847015479E-03 + 1.0228959539E-03 9.6395415314E-04 9.0777549420E-04 8.5426151268E-04 + 8.0331593614E-04 7.5484468655E-04 7.0875588033E-04 6.6495982623E-04 + 6.2336902087E-04 5.8389814230E-04 5.4646404138E-04 5.1098573130E-04 + 4.7738437512E-04 4.4558327156E-04 4.1550783896E-04 3.8708559766E-04 + 3.6024615072E-04 3.3492116319E-04 3.1104433988E-04 2.8855140178E-04 + 2.6738006125E-04 2.4746999590E-04 2.2876282138E-04 2.1120206317E-04 + 1.9473312717E-04 1.7930326965E-04 1.6486156609E-04 1.5135887934E-04 + 1.3874782713E-04 1.2698274879E-04 1.1601967146E-04 1.0581627581E-04 + 9.6331861201E-05 8.7527310523E-05 7.9365054709E-05 7.1809036858E-05 + 6.4824676263E-05 5.8378832218E-05 5.2439767627E-05 4.6977112695E-05 + 4.1961828523E-05 3.7366170665E-05 3.3163652918E-05 2.9329011143E-05 + 2.5838167189E-05 2.2668193179E-05 1.9797275944E-05 1.7204681679E-05 + 1.4870721075E-05 1.2776714715E-05 1.0904958767E-05 9.2386912768E-06 + 7.7620588104E-06 6.4600834559E-06 5.3186305361E-06 4.3243767331E-06 + 3.4647786426E-06 2.7280420936E-06 2.1030919578E-06 1.5795424533E-06 + 1.1476682144E-06 7.9837594863E-07 5.2317663276E-07 3.1415844542E-07 + 1.6396038566E-07 6.5746465615E-08 1.3180580967E-08 4.0216461161E-10 + 2.2002440753E-08 7.3001276554E-08 1.4882491234E-07 2.4528427292E-07 + 3.5855387988E-07 4.8515159909E-07 6.2191901548E-07 7.6600242694E-07 + 9.1483454412E-07 1.0661169116E-06 1.2178029381E-06 1.3680815067E-06 + 1.5153613843E-06 1.6582561805E-06 1.7955698904E-06 1.9262831284E-06 + 2.0495399590E-06 2.1646352966E-06 2.2710028585E-06 2.3682037747E-06 + 2.4559157048E-06 2.5339224738E-06 2.6021042910E-06 2.6604284762E-06 + 2.7089406815E-06 2.7477565883E-06 2.7770541242E-06 2.7970661155E-06 + 2.8080733894E-06 2.8103983163E-06 2.8043987735E-06 2.7904625079E-06 + 2.7690019045E-06 2.7404491103E-06 2.7052515296E-06 2.6638676720E-06 + 2.6167633427E-06 2.5644081188E-06 2.5072721475E-06 2.4458232640E-06 + 2.3805243554E-06 2.3118309794E-06 2.2401892410E-06 2.1660339701E-06 + 2.0897870287E-06 2.0118558724E-06 1.9326322943E-06 1.8524914630E-06 + 1.7717909658E-06 1.6908701208E-06 1.6100494181E-06 1.5296301880E-06 + 1.4498942435E-06 1.3711037474E-06 1.2935011840E-06 1.2173094906E-06 + 1.1427321435E-06 1.0699534248E-06 9.9913877190E-07 9.3043523447E-07 + 8.6397186308E-07 7.9986024752E-07 7.3819510846E-07 6.7905496804E-07 + 6.2250272235E-07 5.6858634247E-07 5.1733959566E-07 4.6878284089E-07 + 4.2292368551E-07 3.7975776340E-07 3.3926949311E-07 3.0143292997E-07 + 2.6621242847E-07 2.3356343088E-07 2.0343319129E-07 1.7576163218E-07 + 1.5048195428E-07 1.2752138126E-07 1.0680182561E-07 8.8240656933E-08 + 7.1751273753E-08 5.7243741283E-08 4.4625382517E-08 3.3801410268E-08 + 2.4675456857E-08 1.7150075301E-08 1.1127239631E-08 6.5088262375E-09 + 3.1970852055E-09 1.0950002553E-09 1.0668838615E-10 1.3773539323E-10 + 1.0955883252E-09 2.8897884889E-09 5.4322593005E-09 8.6375415070E-09 + 1.2423034058E-08 1.6709176777E-08 2.1419604241E-08 2.6481292404E-08 + 3.1824674751E-08 3.7383758829E-08 4.3096177856E-08 4.8903251824E-08 + 5.4750020413E-08 6.0585264275E-08 6.6361501090E-08 7.2034966189E-08 + 7.7565580588E-08 8.2916904918E-08 8.8056071493E-08 9.2953719132E-08 + 9.7583906663E-08 1.0192402215E-07 1.0595467060E-07 1.0965956162E-07 + 1.1302539982E-07 1.1604175583E-07 1.1870094459E-07 1.2099786103E-07 + 1.2292986534E-07 1.2449663912E-07 1.2570004117E-07 1.2654396897E-07 + 1.2703417701E-07 1.2717817044E-07 1.2698504825E-07 1.2646536463E-07 + 1.2563097934E-07 1.2449490099E-07 1.2307117951E-07 1.2137476262E-07 + 1.1942137369E-07 1.1722736674E-07 1.1480960483E-07 1.1218536175E-07 + 1.0937220227E-07 1.0638788400E-07 1.0325023094E-07 9.9977047884E-08 + 9.6586040260E-08 9.3094723429E-08 8.9520351651E-08 8.5879820382E-08 + 8.2189611954E-08 7.8465739798E-08 7.4723687803E-08 7.0978365983E-08 + 6.7244046973E-08 6.3534336276E-08 5.9862143103E-08 5.6239647851E-08 + 5.2678281782E-08 4.9188697718E-08 4.5780759176E-08 4.2463535672E-08 + 3.9245294483E-08 3.6133500438E-08 3.3134815540E-08 3.0255104298E-08 + 2.7499447094E-08 2.4872151574E-08 2.2376768309E-08 2.0016109630E-08 + 1.7792272128E-08 1.5706658419E-08 1.3760003426E-08 1.1952401893E-08 + 1.0283333964E-08 8.7517085961E-09 7.3558826044E-09 6.0936973970E-09 + 4.9625127120E-09 3.9592363811E-09 3.0803724943E-09 2.3220478845E-09 + 1.6800451111E-09 1.1498395008E-09 7.2663129061E-10 4.0538340679E-10 + 1.8086523498E-10 4.7669866666E-11 2.5214974089E-13 3.2960312336E-11 + 1.4005881801E-10 3.1578263963E-10 5.5434371241E-10 8.4996202073E-10 + 1.1968925574E-09 1.5894466099E-09 2.0220200525E-09 2.4891226915E-09 + 2.9853834185E-09 3.5055743592E-09 4.0446280607E-09 4.5976472841E-09 + 5.1599370102E-09 5.7270030067E-09 6.2945635352E-09 6.8585605557E-09 + 7.4151670916E-09 7.9607921076E-09 8.4920984882E-09 9.0059926186E-09 + 9.4996316806E-09 9.9704250709E-09 1.0416033259E-08 1.0834369599E-08 + 1.1223599565E-08 1.1582133299E-08 1.1908623254E-08 1.2201959182E-08 + 1.2461261958E-08 1.2685877792E-08 1.2875370359E-08 1.3029512528E-08 + 1.3148277866E-08 1.3231831440E-08 1.3280521762E-08 1.3294865868E-08 + 1.3275542891E-08 1.3223383037E-08 1.3139356308E-08 1.3024561422E-08 + 1.2880218170E-08 1.2707645101E-08 1.2508258375E-08 1.2283558512E-08 + 1.2035118922E-08 1.1764574970E-08 1.1473618003E-08 1.1163969886E-08 + 1.0837386507E-08 1.0495644835E-08 1.0140532843E-08 9.7738402635E-09 + 9.3973546199E-09 9.0128379082E-09 8.6220313403E-09 8.2266460052E-09 + 7.8283549029E-09 7.4287863477E-09 7.0295217351E-09 6.6320789873E-09 + 6.2379147178E-09 5.8484210172E-09 5.4649197772E-09 5.0886590966E-09 + 4.7208123755E-09 4.3624707710E-09 4.0146410662E-09 3.6782488966E-09 + 3.3541353971E-09 3.0430564591E-09 2.7457200574E-09 2.4627973922E-09 + 2.1946250820E-09 1.9415907132E-09 1.7040087107E-09 1.4821255411E-09 + 1.2761240925E-09 1.0854832248E-09 9.1092611770E-10 7.5269384672E-10 + 6.1082599025E-10 4.8524182714E-10 3.7571871933E-10 2.8231098439E-10 + 2.0452150210E-10 1.4083707648E-10 9.0160951266E-11 5.1261771606E-11 + 2.2802154033E-11 3.3700987523E-12 -8.2796133960E-12 -1.3832710957E-11 + -1.4777046796E-11 -1.2507776793E-11 -8.3075239234E-12 -3.3107534045E-12 + 9.5322554464E-13 3.2481748989E-12 4.5072479849E-12 4.7016184973E-12 + 3.9545036317E-12 2.5024955104E-12 6.5468607842E-13 -2.9761755394E-13 + -6.4258508774E-13 -8.2512947768E-13 -8.3114080147E-13 -6.7388829173E-13 + -3.8976890134E-13 -3.2266232980E-14 -2.8224119426E-15 -5.0078177802E-15 + -6.0137825265E-15 -5.7919014813E-15 -4.4740793616E-15 -2.3405424865E-15 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 + + + 0.0000000000E+00 3.3512884074E-06 1.3435372523E-05 3.0342849961E-05 + 5.4224521073E-05 8.5291099380E-05 1.2381281394E-04 1.7011891112E-04 + 2.2459706508E-04 2.8769270768E-04 3.5990828983E-04 4.4180248711E-04 + 5.3398936297E-04 6.3713750313E-04 7.5196913431E-04 8.7925923996E-04 + 1.0198346850E-03 1.1745733595E-03 1.3444033512E-03 1.5303021535E-03 + 1.7332959139E-03 1.9544587282E-03 2.1949119791E-03 2.4558237210E-03 + 2.7384081069E-03 3.0439248537E-03 3.3736787394E-03 3.7290191253E-03 + 4.1113394938E-03 4.5220769939E-03 4.9627119828E-03 5.4347675554E-03 + 5.9398090506E-03 6.4794435272E-03 7.0553191988E-03 7.6691248234E-03 + 8.3225890405E-03 9.0174796526E-03 9.7556028504E-03 1.0538802380E-02 + 1.1368958655E-02 1.2247987821E-02 1.3177840772E-02 1.4160502134E-02 + 1.5197989220E-02 1.6292350968E-02 1.7445666881E-02 1.8660045965E-02 + 1.9937625699E-02 2.1280571021E-02 2.2691073377E-02 2.4171349801E-02 + 2.5723642068E-02 2.7350215910E-02 2.9053360287E-02 3.0835386741E-02 + 3.2698628794E-02 3.4645441408E-02 3.6678200480E-02 3.8799302359E-02 + 4.1011163369E-02 4.3316219301E-02 4.5716924861E-02 4.8215753025E-02 + 5.0815194287E-02 5.3517755731E-02 5.6325959924E-02 5.9242343563E-02 + 6.2269455835E-02 6.5409856470E-02 6.8666113420E-02 7.2040800146E-02 + 7.5536492466E-02 7.9155764934E-02 8.2901186731E-02 8.6775317035E-02 + 9.0780699856E-02 9.4919858337E-02 9.9195288506E-02 1.0360945249E-01 + 1.0816477119E-01 1.1286361650E-01 1.1770830298E-01 1.2270107913E-01 + 1.2784411832E-01 1.3313950928E-01 1.3858924640E-01 1.4419521977E-01 + 1.4995920514E-01 1.5588285375E-01 1.6196768224E-01 1.6821506267E-01 + 1.7462621272E-01 1.8120218618E-01 1.8794386386E-01 1.9485194490E-01 + 2.0192693873E-01 2.0916915755E-01 2.1657870967E-01 2.2415549346E-01 + 2.3189919230E-01 2.3980927036E-01 2.4788496931E-01 2.5612530609E-01 + 2.6452907156E-01 2.7309483030E-01 2.8182092131E-01 2.9070545981E-01 + 2.9974633988E-01 3.0894123819E-01 3.1828761848E-01 3.2778273694E-01 + 3.3742364827E-01 3.4720721247E-01 3.5713010209E-01 3.6718881007E-01 + 3.7737965783E-01 3.8769880363E-01 3.9814225111E-01 4.0870585773E-01 + 4.1938534326E-01 4.3017629787E-01 4.4107419009E-01 4.5207437416E-01 + 4.6317209704E-01 4.7436250466E-01 4.8564064766E-01 4.9700148629E-01 + 5.0843989460E-01 5.1995066385E-01 5.3152850515E-01 5.4316805123E-01 + 5.5486385758E-01 5.6661040274E-01 5.7840208811E-01 5.9023323702E-01 + 6.0209809348E-01 6.1399082046E-01 6.2590549798E-01 6.3783612111E-01 + 6.4977659800E-01 6.6172074812E-01 6.7366230083E-01 6.8559489452E-01 + 6.9751207644E-01 7.0940730331E-01 7.2127394306E-01 7.3310527761E-01 + 7.4489450705E-01 7.5663475521E-01 7.6831907674E-01 7.7994046593E-01 + 7.9149186718E-01 8.0296618724E-01 8.1435630930E-01 8.2565510887E-01 + 8.3685547146E-01 8.4795031200E-01 8.5893259597E-01 8.6979536207E-01 + 8.8053174636E-01 8.9113500768E-01 9.0159855422E-01 9.1191597098E-01 + 9.2208104794E-01 9.3208780871E-01 9.4193053933E-01 9.5160381710E-01 + 9.6110253898E-01 9.7042194948E-01 9.7955766758E-01 9.8850571315E-01 + 9.9726252922E-01 1.0058250060E+00 1.0141905044E+00 1.0223568683E+00 + 1.0303224507E+00 1.0380861096E+00 1.0456471260E+00 1.0530051473E+00 + 1.0601600493E+00 1.0671117617E+00 1.0738603154E+00 1.0804058242E+00 + 1.0867484909E+00 1.0928886734E+00 1.0988268577E+00 1.1045636188E+00 + 1.1100996155E+00 1.1154356018E+00 1.1205724263E+00 1.1255110224E+00 + 1.1302524051E+00 1.1347976682E+00 1.1391479812E+00 1.1433045856E+00 + 1.1472687918E+00 1.1510419761E+00 1.1546255776E+00 1.1580210951E+00 + 1.1612300846E+00 1.1642541561E+00 1.1670949713E+00 1.1697542406E+00 + 1.1722337207E+00 1.1745352121E+00 1.1766605567E+00 1.1786116352E+00 + 1.1803903653E+00 1.1819986990E+00 1.1834386205E+00 1.1847121441E+00 + 1.1858213125E+00 1.1867681942E+00 1.1875548819E+00 1.1881834904E+00 + 1.1886561551E+00 1.1889750299E+00 1.1891422854E+00 1.1891601075E+00 + 1.1890306955E+00 1.1887562607E+00 1.1883390245E+00 1.1877812173E+00 + 1.1870850769E+00 1.1862528470E+00 1.1852867758E+00 1.1841891150E+00 + 1.1829621178E+00 1.1816080387E+00 1.1801291312E+00 1.1785276476E+00 + 1.1768058370E+00 1.1749659451E+00 1.1730102123E+00 1.1709408734E+00 + 1.1687601562E+00 1.1664702808E+00 1.1640734584E+00 1.1615718910E+00 + 1.1589677699E+00 1.1562632755E+00 1.1534605760E+00 1.1505618271E+00 + 1.1475691714E+00 1.1444847370E+00 1.1413106378E+00 1.1380489722E+00 + 1.1347018230E+00 1.1312712566E+00 1.1277593224E+00 1.1241680527E+00 + 1.1204994617E+00 1.1167555456E+00 1.1129382819E+00 1.1090496289E+00 + 1.1050915258E+00 1.1010658918E+00 1.0969746261E+00 1.0928196077E+00 + 1.0886026949E+00 1.0843257250E+00 1.0799905143E+00 1.0755988580E+00 + 1.0711525295E+00 1.0666532806E+00 1.0621028414E+00 1.0575029200E+00 + 1.0528552021E+00 1.0481613517E+00 1.0434230101E+00 1.0386417965E+00 + 1.0338193075E+00 1.0289571174E+00 1.0240567778E+00 1.0191198179E+00 + 1.0141477444E+00 1.0091420414E+00 1.0041041704E+00 9.9903557070E-01 + 9.9393765880E-01 9.8881182903E-01 9.8365945331E-01 9.7848188128E-01 + 9.7328044040E-01 9.6805643600E-01 9.6281115138E-01 9.5754584795E-01 + 9.5226176529E-01 9.4696012127E-01 9.4164211222E-01 9.3630891299E-01 + 9.3096167716E-01 9.2560153710E-01 9.2022960420E-01 9.1484696896E-01 + 9.0945470117E-01 9.0405385006E-01 8.9864544451E-01 8.9323049316E-01 + 8.8780998461E-01 8.8238488761E-01 8.7695615123E-01 8.7152470505E-01 + 8.6609145934E-01 8.6065730524E-01 8.5522311499E-01 8.4978974209E-01 + 8.4435802152E-01 8.3892876991E-01 8.3350278578E-01 8.2808084972E-01 + 8.2266372460E-01 8.1725215577E-01 8.1184687128E-01 8.0644858207E-01 + 8.0105798220E-01 7.9567574904E-01 7.9030254349E-01 7.8493901020E-01 + 7.7958577775E-01 7.7424345890E-01 7.6891265078E-01 7.6359393510E-01 + 7.5828787836E-01 7.5299503208E-01 7.4771593299E-01 7.4245110324E-01 + 7.3720105064E-01 7.3196626881E-01 7.2674723747E-01 7.2154442256E-01 + 7.1635827652E-01 7.1118923846E-01 7.0603773435E-01 7.0090417727E-01 + 6.9578896759E-01 6.9069249314E-01 6.8561512948E-01 6.8055724004E-01 + 6.7551917634E-01 6.7050127820E-01 6.6550387389E-01 6.6052728040E-01 + 6.5557180355E-01 6.5063773825E-01 6.4572536865E-01 6.4083496833E-01 + 6.3596680050E-01 6.3112111819E-01 6.2629816441E-01 6.2149817236E-01 + 6.1672136557E-01 6.1196795814E-01 6.0723815486E-01 6.0253215140E-01 + 5.9785013450E-01 5.9319228213E-01 5.8855876364E-01 5.8394973998E-01 + 5.7936536380E-01 5.7480577968E-01 5.7027112423E-01 5.6576152630E-01 + 5.6127710710E-01 5.5681798040E-01 5.5238425263E-01 5.4797602309E-01 + 5.4359338406E-01 5.3923642097E-01 5.3490521253E-01 5.3059983090E-01 + 5.2632034181E-01 5.2206680470E-01 5.1783927291E-01 5.1363779373E-01 + 5.0946240863E-01 5.0531315332E-01 5.0119005793E-01 4.9709314710E-01 + 4.9302244016E-01 4.8897795121E-01 4.8495968926E-01 4.8096765838E-01 + 4.7700185777E-01 4.7306228193E-01 4.6914892074E-01 4.6526175960E-01 + 4.6140077954E-01 4.5756595731E-01 4.5375726554E-01 4.4997467279E-01 + 4.4621814369E-01 4.4248763906E-01 4.3878311598E-01 4.3510452791E-01 + 4.3145182478E-01 4.2782495311E-01 4.2422385609E-01 4.2064847368E-01 + 4.1709874269E-01 4.1357459691E-01 4.1007596715E-01 4.0660278138E-01 + 4.0315496478E-01 3.9973243983E-01 3.9633512641E-01 3.9296294190E-01 + 3.8961580120E-01 3.8629361687E-01 3.8299629919E-01 3.7972375620E-01 + 3.7647589386E-01 3.7325261602E-01 3.7005382459E-01 3.6687941954E-01 + 3.6372929900E-01 3.6060335933E-01 3.5750149517E-01 3.5442359955E-01 + 3.5136956388E-01 3.4833927808E-01 3.4533263062E-01 3.4234950857E-01 + 3.3938979767E-01 3.3645338238E-01 3.3354014595E-01 3.3064997047E-01 + 3.2778273691E-01 3.2493832519E-01 3.2211661425E-01 3.1931748204E-01 + 3.1654080566E-01 3.1378646130E-01 3.1105432440E-01 3.0834426961E-01 + 3.0565617087E-01 3.0298990147E-01 3.0034533405E-01 2.9772234070E-01 + 2.9512079295E-01 2.9254056183E-01 2.8998151791E-01 2.8744353136E-01 + 2.8492647194E-01 2.8243020906E-01 2.7995461186E-01 2.7749954915E-01 + 2.7506488954E-01 2.7265050141E-01 2.7025625296E-01 2.6788201227E-01 + 2.6552764727E-01 2.6319302583E-01 2.6087801575E-01 2.5858248483E-01 + 2.5630630084E-01 2.5404933158E-01 2.5181144492E-01 2.4959250880E-01 + 2.4739239126E-01 2.4521096047E-01 2.4304808474E-01 2.4090363257E-01 + 2.3877747265E-01 2.3666947387E-01 2.3457950537E-01 2.3250743655E-01 + 2.3045313707E-01 2.2841647691E-01 2.2639732633E-01 2.2439555594E-01 + 2.2241103670E-01 2.2044363992E-01 2.1849323730E-01 2.1655970094E-01 + 2.1464290332E-01 2.1274271739E-01 2.1085901649E-01 2.0899167446E-01 + 2.0714056556E-01 2.0530556456E-01 2.0348654669E-01 2.0168338771E-01 + 1.9989596388E-01 1.9812415196E-01 1.9636782928E-01 1.9462687369E-01 + 1.9290116360E-01 1.9119057796E-01 1.8949499632E-01 1.8781429880E-01 + 1.8614836608E-01 1.8449707947E-01 1.8286032086E-01 1.8123797275E-01 + 1.7962991825E-01 1.7803604110E-01 1.7645622566E-01 1.7489035692E-01 + 1.7333832052E-01 1.7180000272E-01 1.7027529045E-01 1.6876407127E-01 + 1.6726623340E-01 1.6578166575E-01 1.6431025784E-01 1.6285189990E-01 + 1.6140648281E-01 1.5997389812E-01 1.5855403806E-01 1.5714679555E-01 + 1.5575206418E-01 1.5436973820E-01 1.5299971258E-01 1.5164188296E-01 + 1.5029614565E-01 1.4896239767E-01 1.4764053673E-01 1.4633046122E-01 + 1.4503207021E-01 1.4374526348E-01 1.4246994149E-01 1.4120600540E-01 + 1.3995335706E-01 1.3871189900E-01 1.3748153444E-01 1.3626216732E-01 + 1.3505370223E-01 1.3385604447E-01 1.3266910003E-01 1.3149277558E-01 + 1.3032697849E-01 1.2917161679E-01 1.2802659921E-01 1.2689183516E-01 + 1.2576723474E-01 1.2465270871E-01 1.2354816851E-01 1.2245352628E-01 + 1.2136869480E-01 1.2029358755E-01 1.1922811865E-01 1.1817220291E-01 + 1.1712575580E-01 1.1608869345E-01 1.1506093264E-01 1.1404239084E-01 + 1.1303298613E-01 1.1203263727E-01 1.1104126367E-01 1.1005878538E-01 + 1.0908512309E-01 1.0812019813E-01 1.0716393249E-01 1.0621624876E-01 + 1.0527707020E-01 1.0434632066E-01 1.0342392464E-01 1.0250980726E-01 + 1.0160389426E-01 1.0070611199E-01 9.9816387409E-02 9.8934648100E-02 + 9.8060822241E-02 9.7194838615E-02 9.6336626604E-02 9.5486116187E-02 + 9.4643237934E-02 9.3807923004E-02 9.2980103140E-02 9.2159710669E-02 + 9.1346678495E-02 9.0540940095E-02 8.9742429520E-02 8.8951081384E-02 + 8.8166830867E-02 8.7389613710E-02 8.6619366207E-02 8.5856025207E-02 + 8.5099528106E-02 8.4349812849E-02 8.3606817917E-02 8.2870482331E-02 + 8.2140745648E-02 8.1417547953E-02 8.0700829857E-02 7.9990532496E-02 + 7.9286597524E-02 7.8588967109E-02 7.7897583934E-02 7.7212391186E-02 + 7.6533332558E-02 7.5860352245E-02 7.5193394936E-02 7.4532405814E-02 + 7.3877330553E-02 7.3228115309E-02 7.2584706724E-02 7.1947051915E-02 + 7.1315098476E-02 7.0688794470E-02 7.0068088428E-02 6.9452929345E-02 + 6.8843266675E-02 6.8239050330E-02 6.7640230671E-02 6.7046758514E-02 + 6.6458585115E-02 6.5875662174E-02 6.5297941831E-02 6.4725376657E-02 + 6.4157919658E-02 6.3595524266E-02 6.3038144337E-02 6.2485734149E-02 + 6.1938248395E-02 6.1395642185E-02 6.0857871036E-02 6.0324890874E-02 + 5.9796658028E-02 5.9273129228E-02 5.8754261598E-02 5.8240012659E-02 + 5.7730340319E-02 5.7225202875E-02 5.6724559005E-02 5.6228367770E-02 + 5.5736588605E-02 5.5249181320E-02 5.4766106096E-02 5.4287323480E-02 + 5.3812794384E-02 5.3342480079E-02 5.2876342195E-02 5.2414342716E-02 + 5.1956443979E-02 5.1502608667E-02 5.1052799809E-02 5.0606980777E-02 + 5.0165115281E-02 4.9727167368E-02 4.9293101416E-02 4.8862882137E-02 + 4.8436474567E-02 4.8013844067E-02 4.7594956320E-02 4.7179777328E-02 + 4.6768273406E-02 4.6360411185E-02 4.5956157604E-02 4.5555479908E-02 + 4.5158345650E-02 4.4764722681E-02 4.4374579153E-02 4.3987883513E-02 + 4.3604604502E-02 4.3224711150E-02 4.2848172778E-02 4.2474958990E-02 + 4.2105039674E-02 4.1738384997E-02 4.1374965405E-02 4.1014751619E-02 + 4.0657714631E-02 4.0303825703E-02 3.9953056367E-02 3.9605378416E-02 + 3.9260763911E-02 3.8919185168E-02 3.8580614762E-02 3.8245025525E-02 + 3.7912390541E-02 3.7582683143E-02 3.7255876914E-02 3.6931945683E-02 + 3.6610863521E-02 3.6292604741E-02 3.5977143896E-02 3.5664455775E-02 + 3.5354515402E-02 3.5047298031E-02 3.4742779150E-02 3.4440934471E-02 + 3.4141739936E-02 3.3845171708E-02 3.3551206172E-02 3.3259819933E-02 + 3.2970989814E-02 3.2684692850E-02 3.2400906294E-02 3.2119607608E-02 + 3.1840774464E-02 3.1564384740E-02 3.1290416520E-02 3.1018848094E-02 + 3.0749657949E-02 3.0482824775E-02 3.0218327458E-02 2.9956145080E-02 + 2.9696256918E-02 2.9438642440E-02 2.9183281305E-02 2.8930153360E-02 + 2.8679238639E-02 2.8430517361E-02 2.8183969926E-02 2.7939576919E-02 + 2.7697319103E-02 2.7457177417E-02 2.7219132980E-02 2.6983167083E-02 + 2.6749261190E-02 2.6517396937E-02 2.6287556130E-02 2.6059720741E-02 + 2.5833872910E-02 2.5609994943E-02 2.5388069306E-02 2.5168078630E-02 + 2.4950005703E-02 2.4733833474E-02 2.4519545049E-02 2.4307123686E-02 + 2.4096552802E-02 2.3887815964E-02 2.3680896891E-02 2.3475779450E-02 + 2.3272447659E-02 2.3070885681E-02 2.2871077825E-02 2.2673008543E-02 + 2.2476662431E-02 2.2282024226E-02 2.2089078806E-02 2.1897811185E-02 + 2.1708206517E-02 2.1520250090E-02 2.1333927329E-02 2.1149223789E-02 + 2.0966125160E-02 2.0784617262E-02 2.0604686044E-02 2.0426317585E-02 + 2.0249498090E-02 2.0074213890E-02 1.9900451440E-02 1.9728197321E-02 + 1.9557438233E-02 1.9388161000E-02 1.9220352564E-02 1.9053999989E-02 + 1.8889090453E-02 1.8725611253E-02 1.8563549801E-02 1.8402893623E-02 + 1.8243630359E-02 1.8085747762E-02 1.7929233693E-02 1.7774076127E-02 + 1.7620263146E-02 1.7467782940E-02 1.7316623809E-02 1.7166774154E-02 + 1.7018222484E-02 1.6870957413E-02 1.6724967656E-02 1.6580242031E-02 + 1.6436769455E-02 1.6294538950E-02 1.6153539632E-02 1.6013760718E-02 + 1.5875191522E-02 1.5737821454E-02 1.5601640020E-02 1.5466636819E-02 + 1.5332801546E-02 1.5200123987E-02 1.5068594021E-02 1.4938201618E-02 + 1.4808936837E-02 1.4680789828E-02 1.4553750828E-02 1.4427810163E-02 + 1.4302958245E-02 1.4179185572E-02 1.4056482728E-02 1.3934840380E-02 + 1.3814249281E-02 1.3694700264E-02 1.3576184246E-02 1.3458692225E-02 + 1.3342215279E-02 1.3226744567E-02 1.3112271324E-02 1.2998786867E-02 + 1.2886282587E-02 1.2774749956E-02 1.2664180519E-02 1.2554565897E-02 + 1.2445897787E-02 1.2338167957E-02 1.2231368252E-02 1.2125490587E-02 + 1.2020526951E-02 1.1916469401E-02 1.1813310068E-02 1.1711041151E-02 + 1.1609654920E-02 1.1509143713E-02 1.1409499934E-02 1.1310716057E-02 + 1.1212784622E-02 1.1115698235E-02 1.1019449567E-02 1.0924031354E-02 + 1.0829436397E-02 1.0735657562E-02 1.0642687775E-02 1.0550520026E-02 + 1.0459147369E-02 1.0368562916E-02 1.0278759842E-02 1.0189731382E-02 + 1.0101470829E-02 1.0013971538E-02 9.9272269209E-03 9.8412304478E-03 + 9.7559756466E-03 9.6714561024E-03 9.5876654566E-03 9.5045974065E-03 + 9.4222457050E-03 9.3406041599E-03 9.2596666333E-03 9.1794270414E-03 + 9.0998793541E-03 9.0210175941E-03 8.9428358366E-03 8.8653282088E-03 + 8.7884888895E-03 8.7123121084E-03 8.6367921459E-03 8.5619233326E-03 + 8.4877000484E-03 8.4141167229E-03 8.3411678345E-03 8.2688479097E-03 + 8.1971515230E-03 8.1260732965E-03 8.0556078990E-03 7.9857500462E-03 + 7.9164944999E-03 7.8478360676E-03 7.7797696020E-03 7.7122900009E-03 + 7.6453922068E-03 7.5790712064E-03 7.5133220298E-03 7.4481397507E-03 + 7.3835194855E-03 7.3194563934E-03 7.2559456756E-03 7.1929825752E-03 + 7.1305623766E-03 7.0686804050E-03 7.0073320270E-03 6.9465126491E-03 + 6.8862177179E-03 6.8264427192E-03 6.7671831785E-03 6.7084346600E-03 + 6.6501927663E-03 6.5924531384E-03 6.5352114549E-03 6.4784634320E-03 + 6.4222048232E-03 6.3664314189E-03 6.3111390458E-03 6.2563235671E-03 + 6.2019808815E-03 6.1481069233E-03 6.0946976623E-03 6.0417491030E-03 + 5.9892572844E-03 5.9372182799E-03 5.8856281967E-03 5.8344831762E-03 + 5.7837793928E-03 5.7335130542E-03 5.6836804007E-03 5.6342777051E-03 + 5.5853012727E-03 5.5367474403E-03 5.4886125766E-03 5.4408930816E-03 + 5.3935853864E-03 5.3466859529E-03 5.3001912736E-03 5.2540978714E-03 + 5.2084022990E-03 5.1631011389E-03 5.1181910031E-03 5.0736685327E-03 + 5.0295303979E-03 4.9857732976E-03 4.9423939590E-03 4.8993891375E-03 + 4.8567556166E-03 4.8144902075E-03 4.7725897490E-03 4.7310511068E-03 + 4.6898711738E-03 4.6490468695E-03 4.6085751400E-03 4.5684529577E-03 + 4.5286773210E-03 4.4892452541E-03 4.4501538066E-03 4.4114000538E-03 + 4.3729810962E-03 4.3348940590E-03 4.2971360921E-03 4.2597043701E-03 + 4.2225960916E-03 4.1858084795E-03 4.1493387804E-03 4.1131842646E-03 + 4.0773422258E-03 4.0418099809E-03 4.0065848699E-03 3.9716642558E-03 + 3.9370455241E-03 3.9027260827E-03 3.8687033618E-03 3.8349748135E-03 + 3.8015379119E-03 3.7683901527E-03 3.7355290532E-03 3.7029521518E-03 + 3.6706570080E-03 3.6386412023E-03 3.6069023361E-03 3.5754380313E-03 + 3.5442459301E-03 3.5133236947E-03 3.4826690078E-03 3.4522795716E-03 + 3.4221531081E-03 3.3922873588E-03 3.3626800845E-03 3.3333290651E-03 + 3.3042320997E-03 3.2753870062E-03 3.2467916212E-03 3.2184437999E-03 + 3.1903414156E-03 3.1624823600E-03 3.1348645429E-03 3.1074858918E-03 + 3.0803443520E-03 3.0534378865E-03 3.0267644756E-03 3.0003221167E-03 + 2.9741088248E-03 2.9481226316E-03 2.9223615857E-03 2.8968237524E-03 + 2.8715072136E-03 2.8464100674E-03 2.8215304284E-03 2.7968664272E-03 + 2.7724162104E-03 2.7481779405E-03 2.7241497955E-03 2.7003299692E-03 + 2.6767166709E-03 2.6533081251E-03 2.6301025716E-03 2.6070982650E-03 + 2.5842934750E-03 2.5616864862E-03 2.5392755975E-03 2.5170591227E-03 + 2.4950353898E-03 2.4732027413E-03 2.4515595335E-03 2.4301041370E-03 + 2.4088349365E-03 2.3877503303E-03 2.3668487304E-03 2.3461285623E-03 + 2.3255882652E-03 2.3052262914E-03 2.2850411065E-03 2.2650311892E-03 + 2.2451950312E-03 2.2255311372E-03 2.2060380244E-03 2.1867142229E-03 + 2.1675582755E-03 2.1485687372E-03 2.1297441754E-03 2.1110831698E-03 + 2.0925843122E-03 2.0742462065E-03 2.0560674684E-03 2.0380467255E-03 + 2.0201826172E-03 2.0024737943E-03 1.9849189193E-03 1.9675166662E-03 + 1.9502657202E-03 1.9331647779E-03 1.9162125469E-03 1.8994077458E-03 + 1.8827491043E-03 1.8662353628E-03 1.8498652727E-03 1.8336375957E-03 + 1.8175511045E-03 1.8016045820E-03 1.7857968214E-03 1.7701266266E-03 + 1.7545928116E-03 1.7391942005E-03 1.7239296272E-03 1.7087979361E-03 + 1.6937979809E-03 1.6789286256E-03 1.6641887436E-03 1.6495772180E-03 + 1.6350929414E-03 1.6207348161E-03 1.6065017534E-03 1.5923926742E-03 + 1.5784065087E-03 1.5645421960E-03 1.5507986844E-03 1.5371749312E-03 + 1.5236699027E-03 1.5102825738E-03 1.4970119283E-03 1.4838569588E-03 + 1.4708166664E-03 1.4578900607E-03 1.4450761598E-03 1.4323739901E-03 + 1.4197825867E-03 1.4073009927E-03 1.3949282594E-03 1.3826634462E-03 + 1.3705056205E-03 1.3584538580E-03 1.3465072418E-03 1.3346648633E-03 + 1.3229258214E-03 1.3112892228E-03 1.2997541819E-03 1.2883198205E-03 + 1.2769852682E-03 1.2657496618E-03 1.2546121457E-03 1.2435718715E-03 + 1.2326279982E-03 1.2217796917E-03 1.2110261253E-03 1.2003664794E-03 + 1.1897999413E-03 1.1793257053E-03 1.1689429725E-03 1.1586509511E-03 + 1.1484488557E-03 1.1383359080E-03 1.1283113363E-03 1.1183743755E-03 + 1.1085242668E-03 1.0987602582E-03 1.0890816041E-03 1.0794875652E-03 + 1.0699774087E-03 1.0605504077E-03 1.0512058421E-03 1.0419429974E-03 + 1.0327611657E-03 1.0236596448E-03 1.0146377387E-03 1.0056947575E-03 + 9.9683001705E-04 9.8804283909E-04 9.7933255119E-04 9.7069848669E-04 + 9.6213998465E-04 9.5365638981E-04 9.4524705252E-04 9.3691132871E-04 + 9.2864857985E-04 9.2045817284E-04 9.1233948000E-04 9.0429187919E-04 + 8.9631475351E-04 8.8840749138E-04 8.8056948645E-04 8.7280013760E-04 + 8.6509884885E-04 8.5746502936E-04 8.4989809334E-04 8.4239746006E-04 + 8.3496255377E-04 8.2759280365E-04 8.2028764380E-04 8.1304651310E-04 + 8.0586885543E-04 7.9875411936E-04 7.9170175820E-04 7.8471122997E-04 + 7.7778199734E-04 7.7091352760E-04 7.6410529263E-04 7.5735676883E-04 + 7.5066743713E-04 7.4403678290E-04 7.3746429597E-04 7.3094947053E-04 + 7.2449180506E-04 7.1809080247E-04 7.1174596995E-04 7.0545681888E-04 + 6.9922286486E-04 6.9304362766E-04 6.8691863118E-04 6.8084740342E-04 + 6.7482947645E-04 6.6886438636E-04 6.6295167324E-04 6.5709088115E-04 + 6.5128155805E-04 6.4552325580E-04 6.3981553009E-04 6.3415794056E-04 + 6.2855005057E-04 6.2299142723E-04 6.1748164141E-04 6.1202026766E-04 + 6.0660688420E-04 6.0124107290E-04 5.9592241921E-04 5.9065051217E-04 + 5.8542494438E-04 5.8024531191E-04 5.7511121436E-04 5.7002225470E-04 + 5.6497803942E-04 5.5997817841E-04 5.5502228490E-04 5.5010997545E-04 + 5.4524086992E-04 5.4041459149E-04 5.3563076655E-04 5.3088902473E-04 + 5.2618899888E-04 5.2153032498E-04 5.1691264218E-04 5.1233559275E-04 + 5.0779882204E-04 5.0330197839E-04 4.9884471331E-04 4.9442668128E-04 + 4.9004753976E-04 4.8570694917E-04 4.8140457284E-04 4.7714007704E-04 + 4.7291313092E-04 4.6872340648E-04 4.6457057855E-04 4.6045432480E-04 + 4.5637432566E-04 4.5233026433E-04 4.4832182676E-04 4.4434870155E-04 + 4.4041058010E-04 4.3650715646E-04 4.3263812730E-04 4.2880319192E-04 + 4.2500205224E-04 4.2123441272E-04 4.1749998042E-04 4.1379846491E-04 + 4.1012957829E-04 4.0649303515E-04 4.0288855254E-04 3.9931584997E-04 + 3.9577464939E-04 3.9226467508E-04 3.8878565382E-04 3.8533731473E-04 + 3.8191938928E-04 3.7853161123E-04 3.7517371669E-04 3.7184544402E-04 + 3.6854653388E-04 3.6527672916E-04 3.6203577498E-04 3.5882341867E-04 + 3.5563940976E-04 3.5248349995E-04 3.4935544308E-04 3.4625499513E-04 + 3.4318191417E-04 3.4013596046E-04 3.3711689629E-04 3.3412448599E-04 + 3.3115849598E-04 3.2821869466E-04 3.2530485248E-04 3.2241674187E-04 + 3.1955413722E-04 3.1671681489E-04 3.1390455320E-04 3.1111713237E-04 + 3.0835433454E-04 3.0561594375E-04 3.0290174583E-04 3.0021152863E-04 + 2.9754508175E-04 2.9490219665E-04 2.9228266658E-04 2.8968628659E-04 + 2.8711285352E-04 2.8456216597E-04 2.8203402430E-04 2.7952823060E-04 + 2.7704458867E-04 2.7458290404E-04 2.7214298392E-04 2.6972463718E-04 + 2.6732767438E-04 2.6495190767E-04 2.6259715093E-04 2.6026321963E-04 + 2.5794993082E-04 2.5565710315E-04 2.5338455687E-04 2.5113211376E-04 + 2.4889959718E-04 2.4668683201E-04 2.4449364468E-04 2.4231986309E-04 + 2.4016531669E-04 2.3802983637E-04 2.3591325453E-04 2.3381540498E-04 + 2.3173612300E-04 2.2967524537E-04 2.2763261022E-04 2.2560805713E-04 + 2.2360142706E-04 2.2161256236E-04 2.1964130674E-04 2.1768750530E-04 + 2.1575100448E-04 2.1383165204E-04 2.1192929710E-04 2.1004379008E-04 + 2.0817498270E-04 2.0632272798E-04 2.0448688020E-04 2.0266729493E-04 + 2.0086382904E-04 1.9907634061E-04 1.9730468897E-04 1.9554873466E-04 + 1.9380833947E-04 1.9208336636E-04 1.9037367952E-04 1.8867914429E-04 + 1.8699962723E-04 1.8533499603E-04 1.8368511955E-04 1.8204986779E-04 + 1.8042911190E-04 1.7882272412E-04 1.7723057782E-04 1.7565254753E-04 + 1.7408850882E-04 1.7253833838E-04 1.7100191396E-04 1.6947911438E-04 + 1.6796981953E-04 1.6647391033E-04 1.6499126876E-04 1.6352177783E-04 + 1.6206532156E-04 1.6062178501E-04 1.5919105422E-04 1.5777301623E-04 + 1.5636755909E-04 1.5497457176E-04 1.5359394428E-04 1.5222556759E-04 + 1.5086933361E-04 1.4952513518E-04 1.4819286609E-04 1.4687242108E-04 + 1.4556369576E-04 1.4426658672E-04 1.4298099140E-04 1.4170680816E-04 + 1.4044393626E-04 1.3919227583E-04 1.3795172788E-04 1.3672219429E-04 + 1.3550357777E-04 1.3429578190E-04 1.3309871114E-04 1.3191227077E-04 + 1.3073636688E-04 1.2957090641E-04 1.2841579709E-04 1.2727094748E-04 + 1.2613626693E-04 1.2501166558E-04 1.2389705438E-04 1.2279234503E-04 + 1.2169745004E-04 1.2061228265E-04 1.1953675690E-04 1.1847078755E-04 + 1.1741429010E-04 1.1636718083E-04 1.1532937676E-04 1.1430079560E-04 + 1.1328135581E-04 1.1227097657E-04 1.1126957773E-04 1.1027707989E-04 + 1.0929340433E-04 1.0831847301E-04 1.0735220858E-04 1.0639453438E-04 + 1.0544537441E-04 1.0450465336E-04 1.0357229655E-04 1.0264822998E-04 + 1.0173238026E-04 1.0082467471E-04 9.9925041247E-05 9.9033408443E-05 + 9.8149705485E-05 9.7273862184E-05 9.6405808968E-05 9.5545476877E-05 + 9.4692797558E-05 9.3847703258E-05 9.3010126820E-05 9.2180001678E-05 + 9.1357261851E-05 9.0541841938E-05 8.9733677116E-05 8.8932703128E-05 + 8.8138856266E-05 8.7352073407E-05 8.6572291992E-05 8.5799450000E-05 + 8.5033485954E-05 8.4274338919E-05 8.3521948498E-05 8.2776254823E-05 + 8.2037198555E-05 8.1304720876E-05 8.0578763487E-05 7.9859268602E-05 + 7.9146178943E-05 7.8439437738E-05 7.7738988714E-05 7.7044776093E-05 + 7.6356744583E-05 7.5674839369E-05 7.4999006159E-05 7.4329191117E-05 + 7.3665340881E-05 7.3007402560E-05 7.2355323727E-05 7.1709052419E-05 + 7.1068537131E-05 7.0433726811E-05 6.9804570858E-05 6.9181019115E-05 + 6.8563021871E-05 6.7950529849E-05 6.7343494211E-05 6.6741866545E-05 + 6.6145598870E-05 6.5554643603E-05 6.4968953621E-05 6.4388482206E-05 + 6.3813183049E-05 6.3243010245E-05 6.2677918298E-05 6.2117862111E-05 + 6.1562796987E-05 6.1012678622E-05 6.0467463103E-05 5.9927106905E-05 + 5.9391566887E-05 5.8860800288E-05 5.8334764727E-05 5.7813418195E-05 + 5.7296719054E-05 5.6784626032E-05 5.6277098201E-05 5.5774095042E-05 + 5.5275576370E-05 5.4781502354E-05 5.4291833515E-05 5.3806530724E-05 + 5.3325555197E-05 5.2848868491E-05 5.2376432504E-05 5.1908209473E-05 + 5.1444161964E-05 5.0984252877E-05 5.0528445438E-05 5.0076703201E-05 + 4.9628990039E-05 4.9185270146E-05 4.8745508027E-05 4.8309668490E-05 + 4.7877716690E-05 4.7449618072E-05 4.7025338384E-05 4.6604843679E-05 + 4.6188100308E-05 4.5775074923E-05 4.5365734467E-05 4.4960046179E-05 + 4.4557977584E-05 4.4159496498E-05 4.3764571019E-05 4.3373169528E-05 + 4.2985260687E-05 4.2600813433E-05 4.2219796980E-05 4.1842180812E-05 + 4.1467934665E-05 4.1097028583E-05 4.0729432855E-05 4.0365118035E-05 + 4.0004054935E-05 3.9646214625E-05 3.9291568434E-05 3.8940087943E-05 + 3.8591744984E-05 3.8246511640E-05 3.7904360240E-05 3.7565263359E-05 + 3.7229193814E-05 3.6896124663E-05 3.6566029203E-05 3.6238880967E-05 + 3.5914653722E-05 3.5593321455E-05 3.5274858404E-05 3.4959239035E-05 + 3.4646438034E-05 3.4336430310E-05 3.4029190996E-05 3.3724695443E-05 + 3.3422919225E-05 3.3123838127E-05 3.2827428152E-05 3.2533665515E-05 + 3.2242526642E-05 3.1953988167E-05 3.1668026932E-05 3.1384619984E-05 + 3.1103744575E-05 3.0825378155E-05 3.0549498375E-05 3.0276083072E-05 + 3.0005110309E-05 2.9736558329E-05 2.9470405566E-05 2.9206630646E-05 + 2.8945212387E-05 2.8686129791E-05 2.8429362048E-05 2.8174888534E-05 + 2.7922688806E-05 2.7672742603E-05 2.7425029844E-05 2.7179530626E-05 + 2.6936225222E-05 2.6695094082E-05 2.6456117827E-05 2.6219277251E-05 + 2.5984553312E-05 2.5751927141E-05 2.5521380050E-05 2.5292893506E-05 + 2.5066449140E-05 2.4842028749E-05 2.4619614289E-05 2.4399187876E-05 + 2.4180731787E-05 2.3964228455E-05 2.3749660468E-05 2.3537010571E-05 + 2.3326261660E-05 2.3117396785E-05 2.2910399145E-05 2.2705252088E-05 + 2.2501939111E-05 2.2300443857E-05 2.2100750107E-05 2.1902841793E-05 + 2.1706703000E-05 2.1512317943E-05 2.1319670981E-05 2.1128746609E-05 + 2.0939529463E-05 2.0752004312E-05 2.0566156063E-05 2.0381969756E-05 + 2.0199430565E-05 2.0018523793E-05 1.9839234877E-05 1.9661549382E-05 + 1.9485453001E-05 1.9310931554E-05 1.9137970988E-05 1.8966557375E-05 + 1.8796676904E-05 1.8628315891E-05 1.8461460783E-05 1.8296098142E-05 + 1.8132214649E-05 1.7969797101E-05 1.7808832415E-05 1.7649307623E-05 + 1.7491209873E-05 1.7334526428E-05 1.7179244662E-05 1.7025352063E-05 + 1.6872836231E-05 1.6721684874E-05 1.6571885812E-05 1.6423426971E-05 + 1.6276296385E-05 1.6130482197E-05 1.5985972651E-05 1.5842756087E-05 + 1.5700820972E-05 1.5560155863E-05 1.5420749421E-05 1.5282590406E-05 + 1.5145667678E-05 1.5009970198E-05 1.4875487023E-05 1.4742207308E-05 + 1.4610120306E-05 1.4479215365E-05 1.4349481926E-05 1.4220909525E-05 + 1.4093487794E-05 1.3967206453E-05 1.3842055316E-05 1.3718024287E-05 + 1.3595103359E-05 1.3473282613E-05 1.3352552216E-05 1.3232902435E-05 + 1.3114323615E-05 1.2996806190E-05 1.2880340675E-05 1.2764917673E-05 + 1.2650527870E-05 1.2537162033E-05 1.2424811014E-05 1.2313465743E-05 + 1.2203117235E-05 1.2093756582E-05 1.1985374956E-05 1.1877963609E-05 + 1.1771513869E-05 1.1666017143E-05 1.1561464913E-05 1.1457848738E-05 + 1.1355160245E-05 1.1253391145E-05 1.1152533225E-05 1.1052578341E-05 + 1.0953518420E-05 1.0855345464E-05 1.0758051544E-05 1.0661628802E-05 + 1.0566069452E-05 1.0471365773E-05 1.0377510118E-05 1.0284494905E-05 + 1.0192312620E-05 1.0100955817E-05 1.0010417115E-05 9.9206892000E-06 + 9.8317648228E-06 9.7436367986E-06 9.6562980071E-06 9.5697413863E-06 + 9.4839599420E-06 9.3989467476E-06 9.3146949336E-06 9.2311976914E-06 + 9.1484482734E-06 9.0664399920E-06 8.9851662195E-06 8.9046203871E-06 + 8.8247959846E-06 8.7456865599E-06 8.6672857186E-06 8.5895871232E-06 + 8.5125844927E-06 8.4362716021E-06 8.3606422822E-06 8.2856904186E-06 + 8.2114099514E-06 8.1377948751E-06 8.0648392355E-06 7.9925371286E-06 + 7.9208827152E-06 7.8498702013E-06 7.7794938445E-06 7.7097479538E-06 + 7.6406268889E-06 7.5721250600E-06 7.5042369270E-06 7.4369569993E-06 + 7.3702798354E-06 7.3042000422E-06 7.2387122749E-06 7.1738112362E-06 + 7.1094916764E-06 7.0457483924E-06 6.9825762276E-06 6.9199700715E-06 + 6.8579248591E-06 6.7964355709E-06 6.7354972262E-06 6.6751048980E-06 + 6.6152537024E-06 6.5559387967E-06 6.4971553815E-06 6.4388987003E-06 + 6.3811640391E-06 6.3239467259E-06 6.2672421305E-06 6.2110456639E-06 + 6.1553527783E-06 6.1001589664E-06 6.0454597612E-06 5.9912507354E-06 + 5.9375275015E-06 5.8842857112E-06 5.8315210547E-06 5.7792292610E-06 + 5.7274060972E-06 5.6760473682E-06 5.6251489095E-06 5.5747066072E-06 + 5.5247163781E-06 5.4751741751E-06 5.4260759874E-06 5.3774178399E-06 + 5.3291957930E-06 5.2814059424E-06 5.2340444187E-06 5.1871073869E-06 + 5.1405910464E-06 5.0944916307E-06 5.0488054065E-06 5.0035286744E-06 + 4.9586577678E-06 4.9141890527E-06 4.8701189279E-06 4.8264438241E-06 + 4.7831602042E-06 4.7402645624E-06 4.6977534181E-06 4.6556233344E-06 + 4.6138708989E-06 4.5724927299E-06 4.5314854757E-06 4.4908458146E-06 + 4.4505704547E-06 4.4106561334E-06 4.3710996173E-06 4.3318977020E-06 + 4.2930472116E-06 4.2545449986E-06 4.2163879439E-06 4.1785729558E-06 + 4.1410969708E-06 4.1039569523E-06 4.0671498911E-06 4.0306728049E-06 + 3.9945227380E-06 3.9586967611E-06 3.9231919669E-06 3.8880054813E-06 + 3.8531344543E-06 3.8185760604E-06 3.7843274989E-06 3.7503859944E-06 + 3.7167487964E-06 3.6834131787E-06 3.6503764398E-06 3.6176359023E-06 + 3.5851889124E-06 3.5530328405E-06 3.5211650803E-06 3.4895830488E-06 + 3.4582841862E-06 3.4272659553E-06 3.3965258421E-06 3.3660613546E-06 + 3.3358700234E-06 3.3059494011E-06 3.2762970605E-06 3.2469105959E-06 + 3.2177876286E-06 3.1889257976E-06 3.1603227633E-06 3.1319762067E-06 + 3.1038838298E-06 3.0760433549E-06 3.0484525250E-06 3.0211091031E-06 + 2.9940108722E-06 2.9671556352E-06 2.9405412146E-06 2.9141654525E-06 + 2.8880262101E-06 2.8621213679E-06 2.8364488254E-06 2.8110065007E-06 + 2.7857923308E-06 2.7608042709E-06 2.7360402946E-06 2.7114983910E-06 + 2.6871765706E-06 2.6630728630E-06 2.6391853133E-06 2.6155119845E-06 + 2.5920509565E-06 2.5688003266E-06 2.5457582092E-06 2.5229227355E-06 + 2.5002920533E-06 2.4778643272E-06 2.4556377381E-06 2.4336104832E-06 + 2.4117807758E-06 2.3901468453E-06 2.3687069368E-06 2.3474593113E-06 + 2.3264022451E-06 2.3055340302E-06 2.2848529737E-06 2.2643573980E-06 + 2.2440456379E-06 2.2239160466E-06 2.2039669927E-06 2.1841968579E-06 + 2.1646040384E-06 2.1451869447E-06 2.1259440015E-06 2.1068736478E-06 + 2.0879743363E-06 2.0692445338E-06 2.0506827206E-06 2.0322873908E-06 + 2.0140570519E-06 1.9959902248E-06 1.9780854436E-06 1.9603412555E-06 + 1.9427562207E-06 1.9253289125E-06 1.9080579166E-06 1.8909418318E-06 + 1.8739792691E-06 1.8571688505E-06 1.8405092114E-06 1.8239990021E-06 + 1.8076368828E-06 1.7914215259E-06 1.7753516154E-06 1.7594258473E-06 + 1.7436429293E-06 1.7280015806E-06 1.7125005318E-06 1.6971385251E-06 + 1.6819143136E-06 1.6668266619E-06 1.6518743456E-06 1.6370561511E-06 + 1.6223708758E-06 1.6078173278E-06 1.5933943261E-06 1.5791006999E-06 + 1.5649352892E-06 1.5508969443E-06 1.5369845257E-06 1.5231969011E-06 + 1.5095329545E-06 1.4959915769E-06 1.4825716692E-06 1.4692721423E-06 + 1.4560919166E-06 1.4430299223E-06 1.4300850993E-06 1.4172563967E-06 + 1.4045427732E-06 1.3919431970E-06 1.3794566452E-06 1.3670821042E-06 + 1.3548185697E-06 1.3426650459E-06 1.3306205465E-06 1.3186840936E-06 + 1.3068547182E-06 1.2951314602E-06 1.2835133676E-06 1.2719994975E-06 + 1.2605889143E-06 1.2492806903E-06 1.2380739097E-06 1.2269676625E-06 + 1.2159610474E-06 1.2050531706E-06 1.1942431466E-06 1.1835300980E-06 + 1.1729131549E-06 1.1623914553E-06 1.1519641452E-06 1.1416303779E-06 + 1.1313893144E-06 1.1212401233E-06 1.1111819806E-06 1.1012140696E-06 + 1.0913355811E-06 1.0815457130E-06 1.0718436704E-06 1.0622286655E-06 + 1.0526999178E-06 1.0432566535E-06 1.0338981051E-06 1.0246235118E-06 + 1.0154321221E-06 1.0063231899E-06 9.9729597554E-07 9.8834974609E-07 + 9.7948377514E-07 9.7069734280E-07 9.6198973566E-07 9.5336024666E-07 + 9.4480817511E-07 9.3633282659E-07 9.2793351289E-07 9.1960955200E-07 + 9.1136026799E-07 9.0318499101E-07 8.9508305720E-07 8.8705380865E-07 + 8.7909659335E-07 8.7121076515E-07 8.6339568366E-07 8.5565071425E-07 + + + diff --git a/examples/dpgen-example/autotest/Al_gga_10au_100Ry_3s3p2d.orb b/examples/dpgen-example/autotest/Al_gga_10au_100Ry_3s3p2d.orb new file mode 100644 index 0000000000..4b9cdf4b9d --- /dev/null +++ b/examples/dpgen-example/autotest/Al_gga_10au_100Ry_3s3p2d.orb @@ -0,0 +1,2037 @@ +--------------------------------------------------------------------------- +Element Al +Energy Cutoff(Ry) 100 +Radius Cutoff(a.u.) 10 +Lmax 2 +Number of Sorbital--> 3 +Number of Porbital--> 3 +Number of Dorbital--> 2 +--------------------------------------------------------------------------- +SUMMARY END + +Mesh 1001 +dr 0.01 + Type L N + 0 0 0 + 1.383406212538e-01 1.383647381527e-01 1.384370806818e-01 1.385576243280e-01 + 1.387263282034e-01 1.389431349952e-01 1.392079708978e-01 1.395207455258e-01 + 1.398813518098e-01 1.402896658763e-01 1.407455469117e-01 1.412488370138e-01 + 1.417993610304e-01 1.423969263885e-01 1.430413229148e-01 1.437323226496e-01 + 1.444696796574e-01 1.452531298344e-01 1.460823907174e-01 1.469571612939e-01 + 1.478771218186e-01 1.488419336358e-01 1.498512390119e-01 1.509046609801e-01 + 1.520018031986e-01 1.531422498253e-01 1.543255654111e-01 1.555512948135e-01 + 1.568189631330e-01 1.581280756726e-01 1.594781179244e-01 1.608685555825e-01 + 1.622988345850e-01 1.637683811856e-01 1.652766020555e-01 1.668228844178e-01 + 1.684065962124e-01 1.700270862949e-01 1.716836846666e-01 1.733757027378e-01 + 1.751024336232e-01 1.768631524688e-01 1.786571168099e-01 1.804835669597e-01 + 1.823417264265e-01 1.842308023592e-01 1.861499860191e-01 1.880984532772e-01 + 1.900753651338e-01 1.920798682608e-01 1.941110955624e-01 1.961681667537e-01 + 1.982501889547e-01 2.003562572976e-01 2.024854555442e-01 2.046368567125e-01 + 2.068095237098e-01 2.090025099689e-01 2.112148600870e-01 2.134456104632e-01 + 2.156937899343e-01 2.179584204050e-01 2.202385174715e-01 2.225330910369e-01 + 2.248411459154e-01 2.271616824253e-01 2.294936969677e-01 2.318361825906e-01 + 2.341881295369e-01 2.365485257755e-01 2.389163575146e-01 2.412906096961e-01 + 2.436702664717e-01 2.460543116598e-01 2.484417291833e-01 2.508315034881e-01 + 2.532226199441e-01 2.556140652272e-01 2.580048276846e-01 2.603938976836e-01 + 2.627802679458e-01 2.651629338662e-01 2.675408938210e-01 2.699131494631e-01 + 2.722787060096e-01 2.746365725200e-01 2.769857621701e-01 2.793252925205e-01 + 2.816541857844e-01 2.839714690940e-01 2.862761747701e-01 2.885673405943e-01 + 2.908440100885e-01 2.931052328008e-01 2.953500646015e-01 2.975775679913e-01 + 2.997868124211e-01 3.019768746274e-01 3.041468389838e-01 3.062957978695e-01 + 3.084228520560e-01 3.105271111143e-01 3.126076938411e-01 3.146637287069e-01 + 3.166943543243e-01 3.186987199387e-01 3.206759859394e-01 3.226253243922e-01 + 3.245459195930e-01 3.264369686405e-01 3.282976820284e-01 3.301272842553e-01 + 3.319250144510e-01 3.336901270181e-01 3.354218922862e-01 3.371195971781e-01 + 3.387825458840e-01 3.404100605437e-01 3.420014819326e-01 3.435561701495e-01 + 3.450735053035e-01 3.465528881973e-01 3.479937410042e-01 3.493955079350e-01 + 3.507576558925e-01 3.520796751111e-01 3.533610797766e-01 3.546014086257e-01 + 3.558002255195e-01 3.569571199909e-01 3.580717077600e-01 3.591436312180e-01 + 3.601725598736e-01 3.611581907621e-01 3.621002488134e-01 3.629984871768e-01 + 3.638526875010e-01 3.646626601672e-01 3.654282444735e-01 3.661493087696e-01 + 3.668257505398e-01 3.674574964347e-01 3.680445022492e-01 3.685867528480e-01 + 3.690842620366e-01 3.695370723799e-01 3.699452549665e-01 3.703089091214e-01 + 3.706281620657e-01 3.709031685260e-01 3.711341102946e-01 3.713211957406e-01 + 3.714646592752e-01 3.715647607728e-01 3.716217849487e-01 3.716360406981e-01 + 3.716078603961e-01 3.715375991637e-01 3.714256341011e-01 3.712723634916e-01 + 3.710782059793e-01 3.708435997236e-01 3.705690015324e-01 3.702548859795e-01 + 3.699017445075e-01 3.695100845194e-01 3.690804284639e-01 3.686133129146e-01 + 3.681092876493e-01 3.675689147299e-01 3.669927675875e-01 3.663814301142e-01 + 3.657354957658e-01 3.650555666766e-01 3.643422527890e-01 3.635961710017e-01 + 3.628179443355e-01 3.620082011225e-01 3.611675742169e-01 3.602967002315e-01 + 3.593962187998e-01 3.584667718656e-01 3.575090030008e-01 3.565235567524e-01 + 3.555110780190e-01 3.544722114570e-01 3.534076009179e-01 3.523178889149e-01 + 3.512037161203e-01 3.500657208921e-01 3.489045388300e-01 3.477208023607e-01 + 3.465151403495e-01 3.452881777406e-01 3.440405352216e-01 3.427728289143e-01 + 3.414856700873e-01 3.401796648927e-01 3.388554141218e-01 3.375135129816e-01 + 3.361545508887e-01 3.347791112796e-01 3.333877714363e-01 3.319811023257e-01 + 3.305596684505e-01 3.291240277118e-01 3.276747312799e-01 3.262123234748e-01 + 3.247373416518e-01 3.232503160948e-01 3.217517699124e-01 3.202422189390e-01 + 3.187221716389e-01 3.171921290113e-01 3.156525844982e-01 3.141040238927e-01 + 3.125469252475e-01 3.109817587845e-01 3.094089868042e-01 3.078290635949e-01 + 3.062424353426e-01 3.046495400407e-01 3.030508074008e-01 3.014466587644e-01 + 2.998375070155e-01 2.982237564960e-01 2.966058029233e-01 2.949840333116e-01 + 2.933588258966e-01 2.917305500660e-01 2.900995662953e-01 2.884662260900e-01 + 2.868308719358e-01 2.851938372571e-01 2.835554463841e-01 2.819160145311e-01 + 2.802758477849e-01 2.786352431052e-01 2.769944883380e-01 2.753538622410e-01 + 2.737136345239e-01 2.720740659026e-01 2.704354081678e-01 2.687979042693e-01 + 2.671617884151e-01 2.655272861865e-01 2.638946146683e-01 2.622639825948e-01 + 2.606355905111e-01 2.590096309488e-01 2.573862886174e-01 2.557657406086e-01 + 2.541481566150e-01 2.525336991607e-01 2.509225238442e-01 2.493147795923e-01 + 2.477106089233e-01 2.461101482195e-01 2.445135280070e-01 2.429208732417e-01 + 2.413323036005e-01 2.397479337752e-01 2.381678737702e-01 2.365922291987e-01 + 2.350211015798e-01 2.334545886327e-01 2.318927845668e-01 2.303357803670e-01 + 2.287836640720e-01 2.272365210450e-01 2.256944342340e-01 2.241574844227e-01 + 2.226257504680e-01 2.210993095256e-01 2.195782372604e-01 2.180626080426e-01 + 2.165524951272e-01 2.150479708168e-01 2.135491066075e-01 2.120559733163e-01 + 2.105686411902e-01 2.090871799975e-01 2.076116590990e-01 2.061421475023e-01 + 2.046787138958e-01 2.032214266655e-01 2.017703538937e-01 2.003255633400e-01 + 1.988871224059e-01 1.974550980830e-01 1.960295568869e-01 1.946105647758e-01 + 1.931981870570e-01 1.917924882813e-01 1.903935321262e-01 1.890013812700e-01 + 1.876160972584e-01 1.862377403638e-01 1.848663694396e-01 1.835020417711e-01 + 1.821448129241e-01 1.807947365923e-01 1.794518644463e-01 1.781162459846e-01 + 1.767879283875e-01 1.754669563773e-01 1.741533720840e-01 1.728472149191e-01 + 1.715485214581e-01 1.702573253329e-01 1.689736571356e-01 1.676975443338e-01 + 1.664290111992e-01 1.651680787489e-01 1.639147647018e-01 1.626690834490e-01 + 1.614310460388e-01 1.602006601780e-01 1.589779302471e-01 1.577628573322e-01 + 1.565554392708e-01 1.553556707132e-01 1.541635431985e-01 1.529790452439e-01 + 1.518021624483e-01 1.506328776080e-01 1.494711708443e-01 1.483170197424e-01 + 1.471703995001e-01 1.460312830858e-01 1.448996414034e-01 1.437754434650e-01 + 1.426586565682e-01 1.415492464779e-01 1.404471776109e-01 1.393524132219e-01 + 1.382649155902e-01 1.371846462045e-01 1.361115659464e-01 1.350456352696e-01 + 1.339868143743e-01 1.329350633763e-01 1.318903424678e-01 1.308526120713e-01 + 1.298218329837e-01 1.287979665103e-01 1.277809745884e-01 1.267708198990e-01 + 1.257674659665e-01 1.247708772458e-01 1.237810191962e-01 1.227978583418e-01 + 1.218213623187e-01 1.208514999083e-01 1.198882410572e-01 1.189315568834e-01 + 1.179814196697e-01 1.170378028440e-01 1.161006809469e-01 1.151700295886e-01 + 1.142458253936e-01 1.133280459352e-01 1.124166696609e-01 1.115116758087e-01 + 1.106130443153e-01 1.097207557187e-01 1.088347910535e-01 1.079551317432e-01 + 1.070817594875e-01 1.062146561487e-01 1.053538036352e-01 1.044991837865e-01 + 1.036507782584e-01 1.028085684100e-01 1.019725351948e-01 1.011426590551e-01 + 1.003189198224e-01 9.950129662338e-02 9.868976779293e-02 9.788431079539e-02 + 9.708490215378e-02 9.629151738846e-02 9.550413096536e-02 9.472271625446e-02 + 9.394724549858e-02 9.317768979314e-02 9.241401907664e-02 9.165620213228e-02 + 9.090420660038e-02 9.015799900171e-02 8.941754477131e-02 8.868280830256e-02 + 8.795375300107e-02 8.723034134786e-02 8.651253497120e-02 8.580029472656e-02 + 8.509358078379e-02 8.439235272077e-02 8.369656962276e-02 8.300619018634e-02 + 8.232117282719e-02 8.164147579063e-02 8.096705726386e-02 8.029787548902e-02 + 7.963388887584e-02 7.897505611308e-02 7.832133627755e-02 7.767268893984e-02 + 7.702907426571e-02 7.639045311231e-02 7.575678711824e-02 7.512803878670e-02 + 7.450417156096e-02 7.388514989140e-02 7.327093929356e-02 7.266150639659e-02 + 7.205681898168e-02 7.145684601013e-02 7.086155764064e-02 7.027092523581e-02 + 6.968492135759e-02 6.910351975182e-02 6.852669532182e-02 6.795442409135e-02 + 6.738668315711e-02 6.682345063123e-02 6.626470557421e-02 6.571042791880e-02 + 6.516059838547e-02 6.461519839027e-02 6.407420994563e-02 6.353761555517e-02 + 6.300539810326e-02 6.247754074028e-02 6.195402676463e-02 6.143483950235e-02 + 6.091996218555e-02 6.040937783061e-02 5.990306911712e-02 5.940101826875e-02 + 5.890320693703e-02 5.840961608900e-02 5.792022589977e-02 5.743501565098e-02 + 5.695396363593e-02 5.647704707241e-02 5.600424202387e-02 5.553552332972e-02 + 5.507086454547e-02 5.461023789316e-02 5.415361422273e-02 5.370096298455e-02 + 5.325225221369e-02 5.280744852588e-02 5.236651712544e-02 5.192942182529e-02 + 5.149612507877e-02 5.106658802333e-02 5.064077053568e-02 5.021863129815e-02 + 4.980012787584e-02 4.938521680391e-02 4.897385368466e-02 4.856599329338e-02 + 4.816158969257e-02 4.776059635345e-02 4.736296628403e-02 4.696865216273e-02 + 4.657760647667e-02 4.618978166348e-02 4.580513025568e-02 4.542360502661e-02 + 4.504515913670e-02 4.466974627905e-02 4.429732082336e-02 4.392783795693e-02 + 4.356125382182e-02 4.319752564720e-02 4.283661187574e-02 4.247847228323e-02 + 4.212306809053e-02 4.177036206700e-02 4.142031862463e-02 4.107290390222e-02 + 4.072808583899e-02 4.038583423705e-02 4.004612081227e-02 3.970891923328e-02 + 3.937420514821e-02 3.904195619907e-02 3.871215202360e-02 3.838477424469e-02 + 3.805980644745e-02 3.773723414398e-02 3.741704472638e-02 3.709922740812e-02 + 3.678377315435e-02 3.647067460171e-02 3.615992596809e-02 3.585152295331e-02 + 3.554546263108e-02 3.524174333345e-02 3.494036452830e-02 3.464132669097e-02 + 3.434463117083e-02 3.405028005393e-02 3.375827602261e-02 3.346862221308e-02 + 3.318132207213e-02 3.289637921384e-02 3.261379727741e-02 3.233357978709e-02 + 3.205573001515e-02 3.178025084891e-02 3.150714466271e-02 3.123641319565e-02 + 3.096805743603e-02 3.070207751306e-02 3.043847259679e-02 3.017724080668e-02 + 2.991837912945e-02 2.966188334678e-02 2.940774797306e-02 2.915596620373e-02 + 2.890652987437e-02 2.865942943066e-02 2.841465390934e-02 2.817219093014e-02 + 2.793202669861e-02 2.769414601969e-02 2.745853232161e-02 2.722516769012e-02 + 2.699403291229e-02 2.676510752957e-02 2.653836989971e-02 2.631379726656e-02 + 2.609136583756e-02 2.587105086781e-02 2.565282675023e-02 2.543666711095e-02 + 2.522254490904e-02 2.501043253984e-02 2.480030194105e-02 2.459212470054e-02 + 2.438587216526e-02 2.418151555021e-02 2.397902604660e-02 2.377837492855e-02 + 2.357953365733e-02 2.338247398237e-02 2.318716803848e-02 2.299358843836e-02 + 2.280170835981e-02 2.261150162714e-02 2.242294278605e-02 2.223600717171e-02 + 2.205067096935e-02 2.186691126727e-02 2.168470610182e-02 2.150403449410e-02 + 2.132487647837e-02 2.114721312204e-02 2.097102653707e-02 2.079629988317e-02 + 2.062301736254e-02 2.045116420672e-02 2.028072665556e-02 2.011169192868e-02 + 1.994404818990e-02 1.977778450501e-02 1.961289079332e-02 1.944935777361e-02 + 1.928717690501e-02 1.912634032338e-02 1.896684077395e-02 1.880867154070e-02 + 1.865182637332e-02 1.849629941238e-02 1.834208511337e-02 1.818917817037e-02 + 1.803757344000e-02 1.788726586638e-02 1.773825040768e-02 1.759052196500e-02 + 1.744407531409e-02 1.729890504063e-02 1.715500547942e-02 1.701237065813e-02 + 1.687099424611e-02 1.673086950841e-02 1.659198926568e-02 1.645434586003e-02 + 1.631793112716e-02 1.618273637504e-02 1.604875236901e-02 1.591596932373e-02 + 1.578437690162e-02 1.565396421799e-02 1.552471985265e-02 1.539663186783e-02 + 1.526968783219e-02 1.514387485069e-02 1.501917959989e-02 1.489558836845e-02 + 1.477308710223e-02 1.465166145379e-02 1.453129683548e-02 1.441197847588e-02 + 1.429369147892e-02 1.417642088505e-02 1.406015173404e-02 1.394486912870e-02 + 1.383055829889e-02 1.371720466536e-02 1.360479390270e-02 1.349331200086e-02 + 1.338274532469e-02 1.327308067089e-02 1.316430532194e-02 1.305640709640e-02 + 1.294937439523e-02 1.284319624361e-02 1.273786232792e-02 1.263336302753e-02 + 1.252968944114e-02 1.242683340729e-02 1.232478751905e-02 1.222354513254e-02 + 1.212310036933e-02 1.202344811256e-02 1.192458399696e-02 1.182650439263e-02 + 1.172920638286e-02 1.163268773611e-02 1.153694687230e-02 1.144198282380e-02 + 1.134779519138e-02 1.125438409537e-02 1.116175012266e-02 1.106989426968e-02 + 1.097881788210e-02 1.088852259150e-02 1.079901024972e-02 1.071028286129e-02 + 1.062234251449e-02 1.053519131177e-02 1.044883129981e-02 1.036326440007e-02 + 1.027849234016e-02 1.019451658680e-02 1.011133828067e-02 1.002895817392e-02 + 9.947376570648e-03 9.866593270938e-03 9.786607518876e-03 9.707417954936e-03 + 9.629022573157e-03 9.551418683418e-03 9.474602879144e-03 9.398571010672e-03 + 9.323318164503e-03 9.248838648606e-03 9.175125983887e-03 9.102172901882e-03 + 9.029971348713e-03 8.958512495253e-03 8.887786753443e-03 8.817783798613e-03 + 8.748492597651e-03 8.679901442790e-03 8.611997990758e-03 8.544769306983e-03 + 8.478201914523e-03 8.412281847330e-03 8.346994707459e-03 8.282325725771e-03 + 8.218259825675e-03 8.154781689427e-03 8.091875826491e-03 8.029526643434e-03 + 7.967718514849e-03 7.906435854774e-03 7.845663188071e-03 7.785385221250e-03 + 7.725586912215e-03 7.666253538428e-03 7.607370762996e-03 7.548924698210e-03 + 7.490901966087e-03 7.433289755492e-03 7.376075875432e-03 7.319248804174e-03 + 7.262797733848e-03 7.206712610234e-03 7.150984167497e-03 7.095603957626e-03 + 7.040564374433e-03 6.985858671952e-03 6.931480977164e-03 6.877426297001e-03 + 6.823690519616e-03 6.770270409966e-03 6.717163599783e-03 6.664368572064e-03 + 6.611884640223e-03 6.559711922125e-03 6.507851309219e-03 6.456304431047e-03 + 6.405073615424e-03 6.354161844616e-03 6.303572707878e-03 6.253310350709e-03 + 6.203379421233e-03 6.153785014124e-03 6.104532612470e-03 6.055628028038e-03 + 6.007077340370e-03 5.958886835135e-03 5.911062942209e-03 5.863612173879e-03 + 5.816541063639e-03 5.769856105963e-03 5.723563697471e-03 5.677670079881e-03 + 5.632181285096e-03 5.587103082786e-03 5.542440930773e-03 5.498199928525e-03 + 5.454384774008e-03 5.410999724143e-03 5.368048559072e-03 5.325534550392e-03 + 5.283460433510e-03 5.241828384217e-03 5.200639999548e-03 5.159896282976e-03 + 5.119597633932e-03 5.079743841633e-03 5.040334083150e-03 5.001366925629e-03 + 4.962840332544e-03 4.924751673828e-03 4.887097739714e-03 4.849874758094e-03 + 4.813078415148e-03 4.776703879044e-03 4.740745826408e-03 4.705198471330e-03 + 4.670055596588e-03 4.635310586823e-03 4.600956463342e-03 4.566985920257e-03 + 4.533391361644e-03 4.500164939419e-03 4.467298591622e-03 4.434784080820e-03 + 4.402613032330e-03 4.370776971982e-03 4.339267363169e-03 4.308075642911e-03 + 4.277193256707e-03 4.246611691967e-03 4.216322509801e-03 4.186317375001e-03 + 4.156588084064e-03 4.127126591107e-03 4.097925031565e-03 4.068975743595e-03 + 4.040271287105e-03 4.011804460373e-03 3.983568314239e-03 3.955556163867e-03 + 3.927761598109e-03 3.900178486511e-03 3.872800984035e-03 3.845623533570e-03 + 3.818640866354e-03 3.791848000401e-03 3.765240237091e-03 3.738813156044e-03 + 3.712562608460e-03 3.686484709067e-03 3.660575826867e-03 3.634832574844e-03 + 3.609251798828e-03 3.583830565690e-03 3.558566151043e-03 3.533456026644e-03 + 3.508497847657e-03 3.483689439957e-03 3.459028787621e-03 3.434514020777e-03 + 3.410143403931e-03 3.385915324922e-03 3.361828284597e-03 3.337880887333e-03 + 3.314071832472e-03 3.290399906750e-03 3.266863977776e-03 3.243462988589e-03 + 3.220195953335e-03 3.197061954045e-03 3.174060138522e-03 3.151189719304e-03 + 3.128449973658e-03 3.105840244549e-03 3.083359942526e-03 3.061008548416e-03 + 3.038785616757e-03 3.016690779849e-03 2.994723752310e-03 2.972884336024e-03 + 2.951172425337e-03 2.929588012383e-03 2.908131192389e-03 2.886802168834e-03 + 2.865601258319e-03 2.844528895011e-03 2.823585634529e-03 2.802772157151e-03 + 2.782089270215e-03 2.761537909604e-03 2.741119140213e-03 2.720834155311e-03 + 2.700684274708e-03 2.680670941668e-03 2.660795718520e-03 2.641060280915e-03 + 2.621466410720e-03 2.602015987543e-03 2.582710978887e-03 2.563553428973e-03 + 2.544545446269e-03 2.525689189789e-03 2.506986854230e-03 2.488440654044e-03 + 2.470052806557e-03 2.451825514239e-03 2.433760946275e-03 2.415861219568e-03 + 2.398128379346e-03 2.380564379522e-03 2.363171062994e-03 2.345950142049e-03 + 2.328903179076e-03 2.312031567758e-03 2.295336514942e-03 2.278819023364e-03 + 2.262479875430e-03 2.246319618225e-03 2.230338549920e-03 2.214536707758e-03 + 2.198913857771e-03 2.183469486367e-03 2.168202793933e-03 2.153112690563e-03 + 2.138197794025e-03 2.123456430041e-03 2.108886634955e-03 2.094486160834e-03 + 2.080252483037e-03 2.066182810244e-03 2.052274096950e-03 2.038523058368e-03 + 2.024926187694e-03 2.011479775653e-03 1.998179932213e-03 1.985022610356e-03 + 1.972003631748e-03 1.959118714151e-03 1.946363500386e-03 1.933733588645e-03 + 1.921224563934e-03 1.908832030402e-03 1.896551644322e-03 1.884379147435e-03 + 1.872310400421e-03 1.860341416170e-03 1.848468392610e-03 1.836687744768e-03 + 1.824996135780e-03 1.813390506560e-03 1.801868103832e-03 1.790426506238e-03 + 1.779063648242e-03 1.767777841564e-03 1.756567793884e-03 1.745432624564e-03 + 1.734371877180e-03 1.723385528625e-03 1.712473994626e-03 1.701638131478e-03 + 1.690879233876e-03 1.680199028706e-03 1.669599664721e-03 1.659083698025e-03 + 1.648654073340e-03 1.638314101044e-03 1.628067430012e-03 1.617918016318e-03 + 1.607870087871e-03 1.597928105134e-03 1.588096718040e-03 1.578380719319e-03 + 1.568784994424e-03 1.559314468308e-03 1.549974049316e-03 1.540768570485e-03 + 1.531702728578e-03 1.522781021184e-03 1.514007682261e-03 1.505386616499e-03 + 1.496921332909e-03 1.488614878045e-03 1.480469769303e-03 1.472487928728e-03 + 1.464670617769e-03 1.457018373445e-03 1.449530946369e-03 1.442207241079e-03 + 1.435045259123e-03 1.428042045342e-03 1.421193637774e-03 1.414495021604e-03 + 1.407940087554e-03 1.401521595092e-03 1.395231140837e-03 1.389059132475e-03 + 1.382994768518e-03 1.377026024172e-03 1.371139643577e-03 1.365321138627e-03 + 1.359554794571e-03 1.353823682514e-03 1.348109678960e-03 1.342393492440e-03 + 1.336654697259e-03 1.330871774348e-03 1.325022159140e-03 1.319082296369e-03 + 1.313027701577e-03 1.306833029107e-03 1.300472146200e-03 1.293918212757e-03 + 1.287143766118e-03 1.280120810041e-03 1.272820906738e-03 1.265215270439e-03 + 1.257274860413e-03 1.248970470618e-03 1.240272812198e-03 1.231152583749e-03 + 1.221580522714e-03 1.211527429251e-03 1.200964151654e-03 1.189861519764e-03 + 1.178190210099e-03 1.165920523804e-03 1.153022056512e-03 1.139463238270e-03 + 1.125210722803e-03 1.110228609345e-03 1.094477488346e-03 1.077913315652e-03 + 1.060486139324e-03 1.042138729920e-03 1.022805198891e-03 1.002409730011e-03 + 9.808655934559e-04 9.580746577355e-04 9.339276559635e-04 9.083054930012e-04 + 8.810818906978e-04 8.521276508047e-04 8.213167606178e-04 7.885344681306e-04 + 7.536873078532e-04 7.167148668778e-04 6.776028510417e-04 6.363967583924e-04 + 5.932152143537e-04 5.482617993954e-04 5.018340393513e-04 4.543281653928e-04 + 4.062383159756e-04 3.581490689228e-04 3.107205664493e-04 2.646660196364e-04 + 2.207220215603e-04 1.796128096652e-04 1.420103306142e-04 1.084925962621e-04 + 7.950329666691e-05 5.531588219905e-05 3.600528727889e-05 2.143011635228e-05 + 1.122745593328e-05 4.821559074216e-06 1.446548741934e-06 1.821092371897e-07 + 0.000000000000e+00 + Type L N + 0 0 1 + 3.168390094610e-01 3.167904361342e-01 3.166447407743e-01 3.164019971979e-01 + 3.160623282854e-01 3.156259057597e-01 3.150929498796e-01 3.144637290475e-01 + 3.137385593351e-01 3.129178039289e-01 3.120018724994e-01 3.109912204968e-01 + 3.098863483771e-01 3.086878007640e-01 3.073961655496e-01 3.060120729401e-01 + 3.045361944512e-01 3.029692418583e-01 3.013119661074e-01 2.995651561924e-01 + 2.977296380047e-01 2.958062731605e-01 2.937959578120e-01 2.916996214486e-01 + 2.895182256930e-01 2.872527630990e-01 2.849042559553e-01 2.824737551022e-01 + 2.799623387638e-01 2.773711114034e-01 2.747012026048e-01 2.719537659835e-01 + 2.691299781329e-01 2.662310376086e-01 2.632581639527e-01 2.602125967620e-01 + 2.570955948025e-01 2.539084351705e-01 2.506524125031e-01 2.473288382383e-01 + 2.439390399249e-01 2.404843605831e-01 2.369661581136e-01 2.333858047568e-01 + 2.297446865980e-01 2.260442031187e-01 2.222857667918e-01 2.184708027167e-01 + 2.146007482934e-01 2.106770529314e-01 2.067011777901e-01 2.026745955468e-01 + 1.985987901898e-01 1.944752568303e-01 1.903055015313e-01 1.860910411471e-01 + 1.818334031713e-01 1.775341255861e-01 1.731947567120e-01 1.688168550502e-01 + 1.644019891160e-01 1.599517372579e-01 1.554676874588e-01 1.509514371151e-01 + 1.464045927915e-01 1.418287699462e-01 1.372255926255e-01 1.325966931238e-01 + 1.279437116070e-01 1.232682956973e-01 1.185721000180e-01 1.138567856964e-01 + 1.091240198241e-01 1.043754748741e-01 9.961282807524e-02 9.483776074228e-02 + 9.005195756469e-02 8.525710585299e-02 8.045489474516e-02 7.564701437432e-02 + 7.083515499975e-02 6.602100610357e-02 6.120625545566e-02 5.639258814974e-02 + 5.158168561360e-02 4.677522459695e-02 4.197487614032e-02 3.718230452875e-02 + 3.239916623397e-02 2.762710884916e-02 2.286777002003e-02 1.812277637641e-02 + 1.339374246825e-02 8.682269710059e-03 3.989945337558e-03 -6.816586194501e-04 + -5.330986344481e-03 -9.956499218430e-03 -1.455667677695e-02 -1.913001763804e-02 + -2.367504039683e-02 -2.819028448505e-02 -3.267431099258e-02 -3.712570344913e-02 + -4.154306856412e-02 -4.592503692324e-02 -5.027026364057e-02 -5.457742896518e-02 + -5.884523884184e-02 -6.307242542547e-02 -6.725774754939e-02 -7.139999114773e-02 + -7.549796963278e-02 -7.955052422808e-02 -8.355652425854e-02 -8.751486739918e-02 + -9.142447988406e-02 -9.528431667744e-02 -9.909336160936e-02 -1.028506274778e-01 + -1.065551561204e-01 -1.102060184570e-01 -1.138023145082e-01 -1.173431733897e-01 + -1.208277532874e-01 -1.242552414154e-01 -1.276248539597e-01 -1.309358360104e-01 + -1.341874614848e-01 -1.373790330451e-01 -1.405098820113e-01 -1.435793682746e-01 + -1.465868802098e-01 -1.495318345919e-01 -1.524136765176e-01 -1.552318793325e-01 + -1.579859445669e-01 -1.606754018799e-01 -1.632998090145e-01 -1.658587517618e-01 + -1.683518439376e-01 -1.707787273693e-01 -1.731390718938e-01 -1.754325753665e-01 + -1.776589636794e-01 -1.798179907894e-01 -1.819094387533e-01 -1.839331177702e-01 + -1.858888662286e-01 -1.877765507571e-01 -1.895960662762e-01 -1.913473360490e-01 + -1.930303117302e-01 -1.946449734082e-01 -1.961913296410e-01 -1.976694174813e-01 + -1.990793024887e-01 -2.004210787272e-01 -2.016948687452e-01 -2.029008235344e-01 + -2.040391224670e-01 -2.051099732077e-01 -2.061136115980e-01 -2.070503015123e-01 + -2.079203346816e-01 -2.087240304850e-01 -2.094617357062e-01 -2.101338242543e-01 + -2.107406968471e-01 -2.112827806566e-01 -2.117605289158e-01 -2.121744204858e-01 + -2.125249593841e-01 -2.128126742738e-01 -2.130381179128e-01 -2.132018665658e-01 + -2.133045193789e-01 -2.133466977170e-01 -2.133290444674e-01 -2.132522233097e-01 + -2.131169179544e-01 -2.129238313526e-01 -2.126736848783e-01 -2.123672174868e-01 + -2.120051848509e-01 -2.115883584781e-01 -2.111175248123e-01 -2.105934843220e-01 + -2.100170505785e-01 -2.093890493280e-01 -2.087103175594e-01 -2.079817025727e-01 + -2.072040610495e-01 -2.063782581304e-01 -2.055051665007e-01 -2.045856654899e-01 + -2.036206401844e-01 -2.026109805603e-01 -2.015575806353e-01 -2.004613376449e-01 + -1.993231512434e-01 -1.981439227331e-01 -1.969245543227e-01 -1.956659484173e-01 + -1.943690069412e-01 -1.930346306943e-01 -1.916637187436e-01 -1.902571678513e-01 + -1.888158719376e-01 -1.873407215809e-01 -1.858326035547e-01 -1.842924003999e-01 + -1.827209900329e-01 -1.811192453898e-01 -1.794880341026e-01 -1.778282182105e-01 + -1.761406539010e-01 -1.744261912819e-01 -1.726856741818e-01 -1.709199399761e-01 + -1.691298194389e-01 -1.673161366165e-01 -1.654797087214e-01 -1.636213460448e-01 + -1.617418518844e-01 -1.598420224867e-01 -1.579226469996e-01 -1.559845074345e-01 + -1.540283786354e-01 -1.520550282525e-01 -1.500652167178e-01 -1.480596972219e-01 + -1.460392156892e-01 -1.440045107493e-01 -1.419563137047e-01 -1.398953484910e-01 + -1.378223316304e-01 -1.357379721756e-01 -1.336429716445e-01 -1.315380239439e-01 + -1.294238152826e-01 -1.273010240722e-01 -1.251703208168e-01 -1.230323679903e-01 + -1.208878199026e-01 -1.187373225542e-01 -1.165815134804e-01 -1.144210215852e-01 + -1.122564669660e-01 -1.100884607308e-01 -1.079176048079e-01 -1.057444917502e-01 + -1.035697045352e-01 -1.013938163621e-01 -9.921739044850e-02 -9.704097982678e-02 + -9.486512714300e-02 -9.269036445987e-02 -9.051721306531e-02 -8.834618328832e-02 + -8.617777432417e-02 -8.401247407024e-02 -8.185075897432e-02 -7.969309389693e-02 + -7.753993198896e-02 -7.539171458618e-02 -7.324887112174e-02 -7.111181905781e-02 + -6.898096383736e-02 -6.685669885691e-02 -6.473940546092e-02 -6.262945295836e-02 + -6.052719866181e-02 -5.843298794931e-02 -5.634715434890e-02 -5.427001964582e-02 + -5.220189401192e-02 -5.014307615691e-02 -4.809385350071e-02 -4.605450236615e-02 + -4.402528819105e-02 -4.200646575858e-02 -3.999827944464e-02 -3.800096348101e-02 + -3.601474223269e-02 -3.403983048797e-02 -3.207643375954e-02 -3.012474859493e-02 + -2.818496289464e-02 -2.625725623593e-02 -2.434180020070e-02 -2.243875870546e-02 + -2.054828833163e-02 -1.867053865435e-02 -1.680565256807e-02 -1.495376660717e-02 + -1.311501125996e-02 -1.128951127449e-02 -9.477385954740e-03 -7.678749445720e-03 + -5.893711006285e-03 -4.122375268485e-03 -2.364842482429e-03 -6.212087457938e-04 + 1.108433782770e-03 2.823996686936e-03 4.525395113143e-03 6.212547608483e-03 + 7.885375976182e-03 9.543805148664e-03 1.118776307807e-02 1.281718064392e-02 + 1.443199157747e-02 1.603213240232e-02 1.761754239035e-02 1.918816353248e-02 + 2.074394052311e-02 2.228482075736e-02 2.381075433995e-02 2.532169410463e-02 + 2.681759564287e-02 2.829841734057e-02 2.976412042146e-02 3.121466899588e-02 + 3.265003011350e-02 3.407017381886e-02 3.547507320806e-02 3.686470448563e-02 + 3.823904702009e-02 3.959808339710e-02 4.094179946899e-02 4.227018439963e-02 + 4.358323070356e-02 4.488093427863e-02 4.616329443111e-02 4.743031389272e-02 + 4.868199882897e-02 4.991835883817e-02 5.113940694091e-02 5.234515955965e-02 + 5.353563648825e-02 5.471086085149e-02 5.587085905461e-02 5.701566072312e-02 + 5.814529863310e-02 5.925980863249e-02 6.035922955387e-02 6.144360311927e-02 + 6.251297383777e-02 6.356738889661e-02 6.460689804665e-02 6.563155348310e-02 + 6.664140972236e-02 6.763652347608e-02 6.861695352330e-02 6.958276058184e-02 + 7.053400717973e-02 7.147075752797e-02 7.239307739542e-02 7.330103398679e-02 + 7.419469582486e-02 7.507413263751e-02 7.593941525069e-02 7.679061548791e-02 + 7.762780607697e-02 7.845106056462e-02 7.926045323964e-02 8.005605906471e-02 + 8.083795361759e-02 8.160621304163e-02 8.236091400604e-02 8.310213367566e-02 + 8.382994969046e-02 8.454444015445e-02 8.524568363379e-02 8.593375916382e-02 + 8.660874626443e-02 8.727072496344e-02 8.791977582721e-02 8.855597999793e-02 + 8.917941923677e-02 8.979017597207e-02 9.038833335182e-02 9.097397529938e-02 + 9.154718657161e-02 9.210805281845e-02 9.265666064283e-02 9.319309766019e-02 + 9.371745255639e-02 9.422981514314e-02 9.473027641012e-02 9.521892857268e-02 + 9.569586511442e-02 9.616118082386e-02 9.661497182432e-02 9.705733559639e-02 + 9.748837099255e-02 9.790817824309e-02 9.831685895320e-02 9.871451609077e-02 + 9.910125396457e-02 9.947717819276e-02 9.984239566173e-02 1.001970144751e-01 + 1.005411438931e-01 1.008748942632e-01 1.011983769405e-01 1.015117042014e-01 + 1.018149891471e-01 1.021083456017e-01 1.023918880023e-01 1.026657312832e-01 + 1.029299907557e-01 1.031847819829e-01 1.034302206515e-01 1.036664224409e-01 + 1.038935028916e-01 1.041115772725e-01 1.043207604495e-01 1.045211667557e-01 + 1.047129098638e-01 1.048961026639e-01 1.050708571439e-01 1.052372842778e-01 + 1.053954939195e-01 1.055455947044e-01 1.056876939595e-01 1.058218976227e-01 + 1.059483101718e-01 1.060670345637e-01 1.061781721846e-01 1.062818228120e-01 + 1.063780845870e-01 1.064670539996e-01 1.065488258856e-01 1.066234934349e-01 + 1.066911482118e-01 1.067518801878e-01 1.068057777840e-01 1.068529279258e-01 + 1.068934161075e-01 1.069273264668e-01 1.069547418680e-01 1.069757439943e-01 + 1.069904134473e-01 1.069988298532e-01 1.070010719747e-01 1.069972178274e-01 + 1.069873448009e-01 1.069715297807e-01 1.069498492736e-01 1.069223795321e-01 + 1.068891966784e-01 1.068503768270e-01 1.068059962038e-01 1.067561312614e-01 + 1.067008587895e-01 1.066402560187e-01 1.065744007180e-01 1.065033712837e-01 + 1.064272468200e-01 1.063461072100e-01 1.062600331759e-01 1.061691063295e-01 + 1.060734092106e-01 1.059730253138e-01 1.058680391032e-01 1.057585360154e-01 + 1.056446024494e-01 1.055263257441e-01 1.054037941442e-01 1.052770967533e-01 + 1.051463234752e-01 1.050115649434e-01 1.048729124408e-01 1.047304578070e-01 + 1.045842933372e-01 1.044345116712e-01 1.042812056741e-01 1.041244683098e-01 + 1.039643925071e-01 1.038010710204e-01 1.036345962862e-01 1.034650602746e-01 + 1.032925543393e-01 1.031171690653e-01 1.029389941160e-01 1.027581180810e-01 + 1.025746283253e-01 1.023886108409e-01 1.022001501022e-01 1.020093289258e-01 + 1.018162283357e-01 1.016209274347e-01 1.014235032835e-01 1.012240307869e-01 + 1.010225825896e-01 1.008192289803e-01 1.006140378066e-01 1.004070743990e-01 + 1.001984015073e-01 9.998807924635e-02 9.977616505406e-02 9.956271366080e-02 + 9.934777707005e-02 9.913140455073e-02 9.891364264092e-02 9.869453516294e-02 + 9.847412324938e-02 9.825244537991e-02 9.802953742841e-02 9.780543272006e-02 + 9.758016209784e-02 9.735375399784e-02 9.712623453293e-02 9.689762758396e-02 + 9.666795489798e-02 9.643723619270e-02 9.620548926643e-02 9.597273011284e-02 + 9.573897303968e-02 9.550423079085e-02 9.526851467085e-02 9.503183467107e-02 + 9.479419959709e-02 9.455561719620e-02 9.431609428460e-02 9.407563687350e-02 + 9.383425029351e-02 9.359193931675e-02 9.334870827608e-02 9.310456118098e-02 + 9.285950182959e-02 9.261353391644e-02 9.236666113558e-02 9.211888727871e-02 + 9.187021632807e-02 9.162065254383e-02 9.137020054585e-02 9.111886538960e-02 + 9.086665263623e-02 9.061356841665e-02 9.035961948975e-02 9.010481329466e-02 + 8.984915799720e-02 8.959266253059e-02 8.933533663062e-02 8.907719086527e-02 + 8.881823665927e-02 8.855848631338e-02 8.829795301907e-02 8.803665086843e-02 + 8.777459485981e-02 8.751180089931e-02 8.724828579838e-02 8.698406726785e-02 + 8.671916390847e-02 8.645359519837e-02 8.618738147751e-02 8.592054392947e-02 + 8.565310456062e-02 8.538508617700e-02 8.511651235896e-02 8.484740743381e-02 + 8.457779644648e-02 8.430770512850e-02 8.403715986512e-02 8.376618766101e-02 + 8.349481610421e-02 8.322307332875e-02 8.295098797568e-02 8.267858915277e-02 + 8.240590639273e-02 8.213296961005e-02 8.185980905646e-02 8.158645527506e-02 + 8.131293905291e-02 8.103929137245e-02 8.076554336146e-02 8.049172624166e-02 + 8.021787127612e-02 7.994400971530e-02 7.967017274198e-02 7.939639141504e-02 + 7.912269661219e-02 7.884911897180e-02 7.857568883399e-02 7.830243618100e-02 + 7.802939057721e-02 7.775658110882e-02 7.748403632355e-02 7.721178417052e-02 + 7.693985194058e-02 7.666826620746e-02 7.639705276986e-02 7.612623659502e-02 + 7.585584176387e-02 7.558589141828e-02 7.531640771068e-02 7.504741175636e-02 + 7.477892358894e-02 7.451096211917e-02 7.424354509763e-02 7.397668908145e-02 + 7.371040940558e-02 7.344472015874e-02 7.317963416447e-02 7.291516296745e-02 + 7.265131682546e-02 7.238810470700e-02 7.212553429489e-02 7.186361199595e-02 + 7.160234295680e-02 7.134173108587e-02 7.108177908163e-02 7.082248846702e-02 + 7.056385962986e-02 7.030589186928e-02 7.004858344782e-02 6.979193164913e-02 + 6.953593284069e-02 6.928058254162e-02 6.902587549474e-02 6.877180574288e-02 + 6.851836670857e-02 6.826555127690e-02 6.801335188085e-02 6.776176058847e-02 + 6.751076919147e-02 6.726036929437e-02 6.701055240369e-02 6.676131001649e-02 + 6.651263370756e-02 6.626451521458e-02 6.601694652058e-02 6.576991993306e-02 + 6.552342815907e-02 6.527746437564e-02 6.503202229502e-02 6.478709622404e-02 + 6.454268111716e-02 6.429877262271e-02 6.405536712182e-02 6.381246175979e-02 + 6.357005446939e-02 6.332814398605e-02 6.308672985455e-02 6.284581242722e-02 + 6.260539285353e-02 6.236547306112e-02 6.212605572834e-02 6.188714424846e-02 + 6.164874268590e-02 6.141085572460e-02 6.117348860910e-02 6.093664707868e-02 + 6.070033729513e-02 6.046456576477e-02 6.022933925520e-02 5.999466470773e-02 + 5.976054914607e-02 5.952699958203e-02 5.929402291931e-02 5.906162585587e-02 + 5.882981478613e-02 5.859859570362e-02 5.836797410517e-02 5.813795489740e-02 + 5.790854230654e-02 5.767973979236e-02 5.745154996716e-02 5.722397452053e-02 + 5.699701415085e-02 5.677066850403e-02 5.654493612048e-02 5.631981439060e-02 + 5.609529951970e-02 5.587138650259e-02 5.564806910837e-02 5.542533987572e-02 + 5.520319011898e-02 5.498160994515e-02 5.476058828189e-02 5.454011291651e-02 + 5.432017054580e-02 5.410074683653e-02 5.388182649636e-02 5.366339335466e-02 + 5.344543045283e-02 5.322792014360e-02 5.301084419854e-02 5.279418392317e-02 + 5.257792027882e-02 5.236203401040e-02 5.214650577914e-02 5.193131629936e-02 + 5.171644647817e-02 5.150187755720e-02 5.128759125512e-02 5.107356990995e-02 + 5.085979662003e-02 5.064625538249e-02 5.043293122822e-02 5.021981035214e-02 + 5.000688023783e-02 4.979412977539e-02 4.958154937163e-02 4.936913105166e-02 + 4.915686855095e-02 4.894475739716e-02 4.873279498099e-02 4.852098061533e-02 + 4.830931558231e-02 4.809780316765e-02 4.788644868208e-02 4.767525946941e-02 + 4.746424490128e-02 4.725341635832e-02 4.704278719800e-02 4.683237270911e-02 + 4.662219005326e-02 4.641225819374e-02 4.620259781213e-02 4.599323121330e-02 + 4.578418221937e-02 4.557547605343e-02 4.536713921373e-02 4.515919933936e-02 + 4.495168506825e-02 4.474462588851e-02 4.453805198425e-02 4.433199407690e-02 + 4.412648326318e-02 4.392155085087e-02 4.371722819359e-02 4.351354652566e-02 + 4.331053679834e-02 4.310822951848e-02 4.290665459077e-02 4.270584116468e-02 + 4.250581748711e-02 4.230661076176e-02 4.210824701617e-02 4.191075097732e-02 + 4.171414595650e-02 4.151845374432e-02 4.132369451634e-02 4.112988675000e-02 + 4.093704715319e-02 4.074519060492e-02 4.055433010824e-02 4.036447675571e-02 + 4.017563970732e-02 3.998782618095e-02 3.980104145517e-02 3.961528888414e-02 + 3.943056992434e-02 3.924688417265e-02 3.906422941530e-02 3.888260168717e-02 + 3.870199534066e-02 3.852240312358e-02 3.834381626514e-02 3.816622456930e-02 + 3.798961651455e-02 3.781397935928e-02 3.763929925178e-02 3.746556134385e-02 + 3.729274990723e-02 3.712084845174e-02 3.694983984420e-02 3.677970642732e-02 + 3.661043013752e-02 3.644199262087e-02 3.627437534635e-02 3.610755971553e-02 + 3.594152716814e-02 3.577625928269e-02 3.561173787160e-02 3.544794507035e-02 + 3.528486342020e-02 3.512247594396e-02 3.496076621476e-02 3.479971841736e-02 + 3.463931740206e-02 3.447954873101e-02 3.432039871705e-02 3.416185445510e-02 + 3.400390384636e-02 3.384653561554e-02 3.368973932134e-02 3.353350536075e-02 + 3.337782496744e-02 3.322269020480e-02 3.306809395413e-02 3.291402989856e-02 + 3.276049250331e-02 3.260747699282e-02 3.245497932554e-02 3.230299616681e-02 + 3.215152486062e-02 3.200056340082e-02 3.185011040230e-02 3.170016507289e-02 + 3.155072718633e-02 3.140179705696e-02 3.125337551646e-02 3.110546389319e-02 + 3.095806399429e-02 3.081117809103e-02 3.066480890741e-02 3.051895961236e-02 + 3.037363381549e-02 3.022883556638e-02 3.008456935748e-02 2.994084013033e-02 + 2.979765328491e-02 2.965501469198e-02 2.951293070783e-02 2.937140819122e-02 + 2.923045452194e-02 2.909007762048e-02 2.895028596828e-02 2.881108862791e-02 + 2.867249526249e-02 2.853451615380e-02 2.839716221827e-02 2.826044502023e-02 + 2.812437678166e-02 2.798897038783e-02 2.785423938806e-02 2.772019799105e-02 + 2.758686105410e-02 2.745424406566e-02 2.732236312079e-02 2.719123488889e-02 + 2.706087657358e-02 2.693130586411e-02 2.680254087833e-02 2.667460009699e-02 + 2.654750228924e-02 2.642126642948e-02 2.629591160571e-02 2.617145691948e-02 + 2.604792137800e-02 2.592532377863e-02 2.580368258647e-02 2.568301580562e-02 + 2.556334084478e-02 2.544467437815e-02 2.532703220245e-02 2.521042909102e-02 + 2.509487864612e-02 2.498039315054e-02 2.486698341964e-02 2.475465865504e-02 + 2.464342630125e-02 2.453329190647e-02 2.442425898878e-02 2.431632890910e-02 + 2.420950075209e-02 2.410377121616e-02 2.399913451398e-02 2.389558228432e-02 + 2.379310351657e-02 2.369168448871e-02 2.359130871975e-02 2.349195693736e-02 + 2.339360706144e-02 2.329623420409e-02 2.319981068656e-02 2.310430607325e-02 + 2.300968722323e-02 2.291591835893e-02 2.282296115208e-02 2.273077482657e-02 + 2.263931627762e-02 2.254854020682e-02 2.245839927213e-02 2.236884425195e-02 + 2.227982422217e-02 2.219128674499e-02 2.210317806813e-02 2.201544333291e-02 + 2.192802678961e-02 2.184087201850e-02 2.175392215447e-02 2.166712011368e-02 + 2.158040882002e-02 2.149373142951e-02 2.140703155059e-02 2.132025345822e-02 + 2.123334229964e-02 2.114624429001e-02 2.105890689562e-02 2.097127900299e-02 + 2.088331107181e-02 2.079495527005e-02 2.070616558956e-02 2.061689794061e-02 + 2.052711022391e-02 2.043676237906e-02 2.034581640820e-02 2.025423637407e-02 + 2.016198837178e-02 2.006904047395e-02 1.997536264878e-02 1.988092665126e-02 + 1.978570588760e-02 1.968967525341e-02 1.959281094644e-02 1.949509025455e-02 + 1.939649132046e-02 1.929699288446e-02 1.919657400681e-02 1.909521377173e-02 + 1.899289097512e-02 1.888958379815e-02 1.878526946939e-02 1.867992391805e-02 + 1.857352142108e-02 1.846603424724e-02 1.835743230104e-02 1.824768276982e-02 + 1.813674977715e-02 1.802459404587e-02 1.791117257400e-02 1.779643832698e-02 + 1.768033994927e-02 1.756282149884e-02 1.744382220737e-02 1.732327626951e-02 + 1.720111266378e-02 1.707725500821e-02 1.695162145288e-02 1.682412461197e-02 + 1.669467153730e-02 1.656316373503e-02 1.642949722701e-02 1.629356265775e-02 + 1.615524544734e-02 1.601442599013e-02 1.587097989791e-02 1.572477828529e-02 + 1.557568809300e-02 1.542357244284e-02 1.526829101453e-02 1.510970043051e-02 + 1.494765462854e-02 1.478200519407e-02 1.461260161378e-02 1.443929139794e-02 + 1.426192000253e-02 1.408033046127e-02 1.389436261390e-02 1.370385179065e-02 + 1.350862678562e-02 1.330850692713e-02 1.310329803487e-02 1.289278704917e-02 + 1.267673513432e-02 1.245486910604e-02 1.222687112405e-02 1.199236673557e-02 + 1.175091156419e-02 1.150197721750e-02 1.124493733559e-02 1.097905511110e-02 + 1.070347405810e-02 1.041721425258e-02 1.011917665934e-02 9.808158426931e-03 + 9.482882093277e-03 9.142041412128e-03 8.784365902578e-03 8.408705178112e-03 + 8.014132599503e-03 7.600065839961e-03 7.166399638022e-03 6.713643503007e-03 + 6.243054661751e-03 5.756754387479e-03 5.257814364932e-03 4.750299256052e-03 + 4.239252432550e-03 3.730614138733e-03 3.231065204281e-03 2.747794728155e-03 + 2.288196588920e-03 1.859506695582e-03 1.468399906078e-03 1.120571735297e-03 + 8.203345621970e-04 5.702603208884e-04 3.709011041260e-04 2.206154748039e-04 + 1.155216627393e-04 4.958966748407e-05 1.487337020611e-05 1.872112165864e-06 + 0.000000000000e+00 + Type L N + 0 0 2 + -1.813057268673e+00 -1.812890384123e+00 -1.812389695274e+00 -1.811555096961e+00 + -1.810386415331e+00 -1.808883409982e+00 -1.807045776923e+00 -1.804873152365e+00 + -1.802365117304e+00 -1.799521202879e+00 -1.796340896478e+00 -1.792823648544e+00 + -1.788968880063e+00 -1.784775990680e+00 -1.780244367401e+00 -1.775373393835e+00 + -1.770162459932e+00 -1.764610972149e+00 -1.758718364005e+00 -1.752484106960e+00 + -1.745907721568e+00 -1.738988788829e+00 -1.731726961703e+00 -1.724121976713e+00 + -1.716173665568e+00 -1.707881966776e+00 -1.699246937154e+00 -1.690268763203e+00 + -1.680947772280e+00 -1.671284443512e+00 -1.661279418409e+00 -1.650933511114e+00 + -1.640247718252e+00 -1.629223228323e+00 -1.617861430613e+00 -1.606163923565e+00 + -1.594132522594e+00 -1.581769267294e+00 -1.569076428033e+00 -1.556056511888e+00 + -1.542712267916e+00 -1.529046691737e+00 -1.515063029415e+00 -1.500764780640e+00 + -1.486155701184e+00 -1.471239804650e+00 -1.456021363507e+00 -1.440504909418e+00 + -1.424695232865e+00 -1.408597382097e+00 -1.392216661396e+00 -1.375558628700e+00 + -1.358629092590e+00 -1.341434108664e+00 -1.323979975334e+00 -1.306273229063e+00 + -1.288320639071e+00 -1.270129201554e+00 -1.251706133424e+00 -1.233058865623e+00 + -1.214195036037e+00 -1.195122482040e+00 -1.175849232706e+00 -1.156383500720e+00 + -1.136733674026e+00 -1.116908307238e+00 -1.096916112846e+00 -1.076765952264e+00 + -1.056466826718e+00 -1.036027868043e+00 -1.015458329378e+00 -9.947675758113e-01 + -9.739650749899e-01 -9.530603877150e-01 -9.320631585465e-01 -9.109831064350e-01 + -8.898300153975e-01 -8.686137252524e-01 -8.473441224266e-01 -8.260311308467e-01 + -8.046847029223e-01 -7.833148106317e-01 -7.619314367131e-01 -7.405445659684e-01 + -7.191641766812e-01 -6.978002321513e-01 -6.764626723459e-01 -6.551614056669e-01 + -6.339063008333e-01 -6.127071788752e-01 -5.915738052379e-01 -5.705158819908e-01 + -5.495430401387e-01 -5.286648320311e-01 -5.078907238641e-01 -4.872300882732e-01 + -4.666921970112e-01 -4.462862137087e-01 -4.260211867144e-01 -4.059060420128e-01 + -3.859495762172e-01 -3.661604496383e-01 -3.465471794279e-01 -3.271181327992e-01 + -3.078815203255e-01 -2.888453893209e-01 -2.700176173075e-01 -2.514059055741e-01 + -2.330177728334e-01 -2.148605489852e-01 -1.969413689944e-01 -1.792671668932e-01 + -1.618446699193e-01 -1.446803928001e-01 -1.277806321972e-01 -1.111514613220e-01 + -9.479872473900e-02 -7.872803336877e-02 -6.294475970604e-02 -4.745403326829e-02 + -3.226073628938e-02 -1.736949967347e-02 -2.784699224138e-03 1.148954783639e-02 + 2.544938604389e-02 3.909122455067e-02 5.241173965294e-02 6.540787697466e-02 + 7.807685329653e-02 9.041615801949e-02 1.024235542537e-01 1.140970795248e-01 + 1.254350460905e-01 1.364360408625e-01 1.470989249297e-01 1.574228326795e-01 + 1.674071705182e-01 1.770516151884e-01 1.863561116884e-01 1.953208707957e-01 + 2.039463662007e-01 2.122333312570e-01 2.201827553583e-01 2.277958799492e-01 + 2.350741941846e-01 2.420194302473e-01 2.486335583399e-01 2.549187813651e-01 + 2.608775293115e-01 2.665124533602e-01 2.718264197336e-01 2.768225033008e-01 + 2.815039809635e-01 2.858743248385e-01 2.899371952594e-01 2.936964336170e-01 + 2.971560550594e-01 3.003202410713e-01 3.031933319550e-01 3.057798192305e-01 + 3.080843379768e-01 3.101116591324e-01 3.118666817737e-01 3.133544253901e-01 + 3.145800221714e-01 3.155487093258e-01 3.162658214423e-01 3.167367829124e-01 + 3.169671004252e-01 3.169623555466e-01 3.167281973961e-01 3.162703354285e-01 + 3.155945323325e-01 3.147065970516e-01 3.136123779357e-01 3.123177560283e-01 + 3.108286384945e-01 3.091509521931e-01 3.072906373965e-01 3.052536416588e-01 + 3.030459138357e-01 3.006733982532e-01 2.981420290288e-01 2.954577245416e-01 + 2.926263820510e-01 2.896538724627e-01 2.865460352400e-01 2.833086734575e-01 + 2.799475489964e-01 2.764683778778e-01 2.728768257327e-01 2.691785034060e-01 + 2.653789626931e-01 2.614836922073e-01 2.574981133766e-01 2.534275765693e-01 + 2.492773573476e-01 2.450526528495e-01 2.407585782989e-01 2.364001636463e-01 + 2.319823503393e-01 2.275099882277e-01 2.229878326033e-01 2.184205413794e-01 + 2.138126724120e-01 2.091686809678e-01 2.044929173428e-01 1.997896246365e-01 + 1.950629366864e-01 1.903168761679e-01 1.855553528664e-01 1.807821621240e-01 + 1.760009834701e-01 1.712153794376e-01 1.664287945727e-01 1.616445546410e-01 + 1.568658660362e-01 1.520958153945e-01 1.473373694176e-01 1.425933749100e-01 + 1.378665590289e-01 1.331595297521e-01 1.284747765614e-01 1.238146713441e-01 + 1.191814695088e-01 1.145773113155e-01 1.100042234156e-01 1.054641205983e-01 + 1.009588077374e-01 9.648998193298e-02 9.205923483955e-02 8.766805517312e-02 + 8.331783138692e-02 7.900985450555e-02 7.474532110585e-02 7.052533643218e-02 + 6.635091763263e-02 6.222299710229e-02 5.814242591858e-02 5.410997735350e-02 + 5.012635044664e-02 4.619217362300e-02 4.230800833865e-02 3.847435273786e-02 + 3.469164530459e-02 3.096026849172e-02 2.728055231146e-02 2.365277787055e-02 + 2.007718083458e-02 1.655395480600e-02 1.308325460123e-02 9.665199413058e-03 + 6.299875845312e-03 2.987340807803e-03 -2.723757392878e-04 -3.479268201399e-03 + -6.633352934411e-03 -9.734666005512e-03 -1.278326113594e-02 -1.577920782998e-02 + -1.872258969331e-02 -2.161350294206e-02 -2.445205510276e-02 -2.723836390171e-02 + -2.997255634094e-02 -3.265476795635e-02 -3.528514225265e-02 -3.786383030770e-02 + -4.039099053844e-02 -4.286678861863e-02 -4.529139753808e-02 -4.766499779173e-02 + -4.998777768627e-02 -5.225993375093e-02 -5.448167123882e-02 -5.665320470416e-02 + -5.877475864081e-02 -6.084656816695e-02 -6.286887974071e-02 -6.484195189160e-02 + -6.676605595275e-02 -6.864147677905e-02 -7.046851343707e-02 -7.224747985286e-02 + -7.397870540452e-02 -7.566253544732e-02 -7.729933175988e-02 -7.888947290110e-02 + -8.043335446854e-02 -8.193138925007e-02 -8.338400726212e-02 -8.479165566895e-02 + -8.615479857873e-02 -8.747391671384e-02 -8.874950695404e-02 -8.998208175261e-02 + -9.117216842713e-02 -9.232030832783e-02 -9.342705588791e-02 -9.449297756163e-02 + -9.551865065698e-02 -9.650466207145e-02 -9.745160693995e-02 -9.836008720552e-02 + -9.923071012397e-02 -1.000640867148e-01 -1.008608301710e-01 -1.016215542415e-01 + -1.023468716001e-01 -1.030373922144e-01 -1.036937217308e-01 -1.043164598872e-01 + -1.049061989714e-01 -1.054635223352e-01 -1.059890029813e-01 -1.064832022335e-01 + -1.069466685046e-01 -1.073799361721e-01 -1.077835245736e-01 -1.081579371307e-01 + -1.085036606105e-01 -1.088211645320e-01 -1.091109007232e-01 -1.093733030340e-01 + -1.096087872081e-01 -1.098177509150e-01 -1.100005739437e-01 -1.101576185558e-01 + -1.102892299963e-01 -1.103957371570e-01 -1.104774533877e-01 -1.105346774475e-01 + -1.105676945887e-01 -1.105767777625e-01 -1.105621889370e-01 -1.105241805137e-01 + -1.104629968317e-01 -1.103788757442e-01 -1.102720502527e-01 -1.101427501849e-01 + -1.099912038988e-01 -1.098176399982e-01 -1.096222890433e-01 -1.094053852385e-01 + -1.091671680836e-01 -1.089078839699e-01 -1.086277877078e-01 -1.083271439690e-01 + -1.080062286304e-01 -1.076653300057e-01 -1.073047499514e-01 -1.069248048373e-01 + -1.065258263700e-01 -1.061081622610e-01 -1.056721767314e-01 -1.052182508483e-01 + -1.047467826867e-01 -1.042581873149e-01 -1.037528966027e-01 -1.032313588513e-01 + -1.026940382474e-01 -1.021414141462e-01 -1.015739801865e-01 -1.009922432467e-01 + -1.003967222488e-01 -9.978794682037e-02 -9.916645582625e-02 -9.853279578156e-02 + -9.788751916032e-02 -9.723118261401e-02 -9.656434511566e-02 -9.588756604587e-02 + -9.520140323770e-02 -9.450641099801e-02 -9.380313812278e-02 -9.309212592468e-02 + -9.237390629055e-02 -9.164899978664e-02 -9.091791382913e-02 -9.018114093665e-02 + -8.943915708129e-02 -8.869242015332e-02 -8.794136855435e-02 -8.718641993210e-02 + -8.642797006910e-02 -8.566639193606e-02 -8.490203491929e-02 -8.413522423005e-02 + -8.336626050192e-02 -8.259541958068e-02 -8.182295250964e-02 -8.104908571108e-02 + -8.027402136328e-02 -7.949793797026e-02 -7.872099111999e-02 -7.794331442478e-02 + -7.716502063597e-02 -7.638620292351e-02 -7.560693630911e-02 -7.482727924054e-02 + -7.404727529310e-02 -7.326695498294e-02 -7.248633767600e-02 -7.170543357529e-02 + -7.092424576824e-02 -7.014277231539e-02 -6.936100836118e-02 -6.857894824712e-02 + -6.779658760753e-02 -6.701392542828e-02 -6.623096604875e-02 -6.544772108808e-02 + -6.466421127695e-02 -6.388046817712e-02 -6.309653577177e-02 -6.231247191073e-02 + -6.152834959591e-02 -6.074425809359e-02 -5.996030386180e-02 -5.917661128233e-02 + -5.839332318906e-02 -5.761060118563e-02 -5.682862574757e-02 -5.604759610599e-02 + -5.526772991157e-02 -5.448926267996e-02 -5.371244702133e-02 -5.293755165900e-02 + -5.216486024390e-02 -5.139466997353e-02 -5.062729002598e-02 -4.986303982102e-02 + -4.910224712249e-02 -4.834524599698e-02 -4.759237464588e-02 -4.684397312875e-02 + -4.610038099721e-02 -4.536193485938e-02 -4.462896589593e-02 -4.390179734909e-02 + -4.318074200657e-02 -4.246609970264e-02 -4.175815485832e-02 -4.105717408299e-02 + -4.036340385882e-02 -3.967706832932e-02 -3.899836721242e-02 -3.832747385745e-02 + -3.766453346461e-02 -3.700966148402e-02 -3.636294221020e-02 -3.572442758618e-02 + -3.509413622989e-02 -3.447205269358e-02 -3.385812696523e-02 -3.325227421897e-02 + -3.265437481928e-02 -3.206427458196e-02 -3.148178529256e-02 -3.090668548079e-02 + -3.033872144749e-02 -2.977760853847e-02 -2.922303265751e-02 -2.867465200884e-02 + -2.813209905747e-02 -2.759498269390e-02 -2.706289058802e-02 -2.653539171538e-02 + -2.601203903757e-02 -2.549237231713e-02 -2.497592104628e-02 -2.446220746761e-02 + -2.395074966439e-02 -2.344106469719e-02 -2.293267176325e-02 -2.242509535494e-02 + -2.191786839315e-02 -2.141053531231e-02 -2.090265507340e-02 -2.039380408234e-02 + -1.988357899174e-02 -1.937159936484e-02 -1.885751018165e-02 -1.834098416863e-02 + -1.782172393448e-02 -1.729946389639e-02 -1.677397198248e-02 -1.624505109847e-02 + -1.571254034780e-02 -1.517631599714e-02 -1.463629218072e-02 -1.409242133924e-02 + -1.354469439126e-02 -1.299314063698e-02 -1.243782739648e-02 -1.187885938666e-02 + -1.131637784303e-02 -1.075055939469e-02 -1.018161470241e-02 -9.609786872084e-03 + -9.035349656865e-03 -8.458605463482e-03 -7.879883179316e-03 -7.299535838257e-03 + -6.717938144490e-03 -6.135483874321e-03 -5.552583176965e-03 -4.969659795838e-03 + -4.387148232338e-03 -3.805490874328e-03 -3.225135111617e-03 -2.646530460593e-03 + -2.070125719846e-03 -1.496366178130e-03 -9.256908953283e-04 -3.585300762519e-04 + 2.046974439031e-04 7.635865847799e-04 1.317748260393e-03 1.866811458017e-03 + 2.410425143030e-03 2.948259977923e-03 3.480009845449e-03 4.005393167619e-03 + 4.524154014153e-03 5.036062995835e-03 5.540917940122e-03 6.038544348273e-03 + 6.528795635136e-03 7.011553154563e-03 7.486726015270e-03 7.954250693650e-03 + 8.414090451732e-03 8.866234570045e-03 9.310697406580e-03 9.747517294418e-03 + 1.017675529176e-02 1.059849379921e-02 1.101283506001e-02 1.141989955978e-02 + 1.181982434287e-02 1.221276126280e-02 1.259887518470e-02 1.297834215759e-02 + 1.335134757436e-02 1.371808433707e-02 1.407875104481e-02 1.443355022064e-02 + 1.478268659374e-02 1.512636545178e-02 1.546479107751e-02 1.579816528287e-02 + 1.612668605208e-02 1.645054630444e-02 1.676993278577e-02 1.708502509618e-02 + 1.739599486014e-02 1.770300504348e-02 1.800620942009e-02 1.830575218971e-02 + 1.860176774647e-02 1.889438059623e-02 1.918370541941e-02 1.946984727418e-02 + 1.975290193389e-02 2.003295635075e-02 2.031008923699e-02 2.058437175323e-02 + 2.085586829291e-02 2.112463735069e-02 2.139073246184e-02 2.165420319917e-02 + 2.191509621327e-02 2.217345630187e-02 2.242932749343e-02 2.268275413042e-02 + 2.293378193771e-02 2.318245906159e-02 2.342883706561e-02 2.367297186975e-02 + 2.391492462021e-02 2.415476247789e-02 2.439255931454e-02 2.462839630672e-02 + 2.486236241858e-02 2.509455476609e-02 2.532507885629e-02 2.555404869680e-02 + 2.578158677202e-02 2.600782388407e-02 2.623289885806e-02 2.645695811241e-02 + 2.668015509705e-02 2.690264960303e-02 2.712460694931e-02 2.734619705305e-02 + 2.756759339178e-02 2.778897186652e-02 2.801050957632e-02 2.823238351570e-02 + 2.845476920734e-02 2.867783928315e-02 2.890176202778e-02 2.912669989872e-02 + 2.935280803802e-02 2.958023279055e-02 2.980911024402e-02 3.003956480598e-02 + 3.027170783250e-02 3.050563632342e-02 3.074143169799e-02 3.097915866459e-02 + 3.121886419713e-02 3.146057663000e-02 3.170430488235e-02 3.195003782140e-02 + 3.219774377328e-02 3.244737018849e-02 3.269884346780e-02 3.295206895291e-02 + 3.320693108466e-02 3.346329373011e-02 3.372100067817e-02 3.397987630200e-02 + 3.423972638481e-02 3.450033910400e-02 3.476148616746e-02 3.502292409398e-02 + 3.528439562868e-02 3.554563128283e-02 3.580635098647e-02 3.606626584092e-02 + 3.632507995732e-02 3.658249236673e-02 3.683819898611e-02 3.709189462443e-02 + 3.734327501227e-02 3.759203883827e-02 3.783788977552e-02 3.808053848087e-02 + 3.831970455065e-02 3.855511841608e-02 3.878652316271e-02 3.901367625830e-02 + 3.923635117459e-02 3.945433888927e-02 3.966744925547e-02 3.987551222695e-02 + 4.007837892895e-02 4.027592256538e-02 4.046803915485e-02 4.065464808939e-02 + 4.083569251121e-02 4.101113950448e-02 4.118098010071e-02 4.134522909789e-02 + 4.150392469528e-02 4.165712794719e-02 4.180492204071e-02 4.194741140405e-02 + 4.208472065331e-02 4.221699338711e-02 4.234439083976e-02 4.246709040494e-02 + 4.258528404266e-02 4.269917658370e-02 4.280898394624e-02 4.291493128023e-02 + 4.301725105564e-02 4.311618111112e-02 4.321196267990e-02 4.330483840993e-02 + 4.339505039510e-02 4.348283823435e-02 4.356843713507e-02 4.365207607671e-02 + 4.373397604990e-02 4.381434838572e-02 4.389339318858e-02 4.397129788561e-02 + 4.404823590388e-02 4.412436548587e-02 4.419982865213e-02 4.427475031874e-02 + 4.434923757580e-02 4.442337913139e-02 4.449724492445e-02 4.457088590777e-02 + 4.464433400137e-02 4.471760221458e-02 4.479068493373e-02 4.486355837089e-02 + 4.493618116771e-02 4.500849514671e-02 4.508042620168e-02 4.515188531690e-02 + 4.522276970446e-02 4.529296404742e-02 4.536234183611e-02 4.543076678370e-02 + 4.549809430702e-02 4.556417305760e-02 4.562884648815e-02 4.569195443889e-02 + 4.575333472876e-02 4.581282473602e-02 4.587026295349e-02 4.592549050383e-02 + 4.597835260082e-02 4.602869994332e-02 4.607639002947e-02 4.612128837928e-02 + 4.616326965524e-02 4.620221867133e-02 4.623803128214e-02 4.627061514514e-02 + 4.629989035047e-02 4.632578991386e-02 4.634826012995e-02 4.636726078454e-02 + 4.638276522577e-02 4.639476029590e-02 4.640324612630e-02 4.640823580022e-02 + 4.640975488876e-02 4.640784086696e-02 4.640254241822e-02 4.639391863592e-02 + 4.638203813277e-02 4.636697806866e-02 4.634882310905e-02 4.632766432630e-02 + 4.630359805694e-02 4.627672472835e-02 4.624714766849e-02 4.621497191224e-02 + 4.618030301836e-02 4.614324591025e-02 4.610390375387e-02 4.606237688552e-02 + 4.601876180153e-02 4.597315022119e-02 4.592562823363e-02 4.587627553799e-02 + 4.582516478562e-02 4.577236103144e-02 4.571792130077e-02 4.566189427636e-02 + 4.560432010915e-02 4.554523035480e-02 4.548464803671e-02 4.542258783472e-02 + 4.535905639743e-02 4.529405277435e-02 4.522756896320e-02 4.515959056579e-02 + 4.509009754522e-02 4.501906507543e-02 4.494646447340e-02 4.487226420320e-02 + 4.479643093999e-02 4.471893068162e-02 4.463972989468e-02 4.455879668115e-02 + 4.447610195190e-02 4.439162059255e-02 4.430533260745e-02 4.421722422754e-02 + 4.412728896810e-02 4.403552862257e-02 4.394195417956e-02 4.384658665048e-02 + 4.374945779608e-02 4.365061074136e-02 4.355010046915e-02 4.344799418378e-02 + 4.334437153781e-02 4.323932471596e-02 4.313295837177e-02 4.302538941419e-02 + 4.291674664271e-02 4.280717023142e-02 4.269681106363e-02 4.258582992077e-02 + 4.247439653041e-02 4.236268848018e-02 4.225089000554e-02 4.213919066119e-02 + 4.202778388686e-02 4.191686547984e-02 4.180663198765e-02 4.169727903521e-02 + 4.158899960206e-02 4.148198226567e-02 4.137640942780e-02 4.127245554100e-02 + 4.117028535315e-02 4.107005218752e-02 4.097189627627e-02 4.087594316490e-02 + 4.078230220466e-02 4.069106514978e-02 4.060230487516e-02 4.051607422970e-02 + 4.043240503917e-02 4.035130727137e-02 4.027276837508e-02 4.019675280275e-02 + 4.012320172528e-02 4.005203294573e-02 3.998314101679e-02 3.991639756518e-02 + 3.985165182417e-02 3.978873137346e-02 3.972744308382e-02 3.966757426173e-02 + 3.960889398749e-02 3.955115463829e-02 3.949409358591e-02 3.943743505680e-02 + 3.938089214082e-02 3.932416893320e-02 3.926696279264e-02 3.920896669766e-02 + 3.914987168138e-02 3.908936932469e-02 3.902715428621e-02 3.896292684737e-02 + 3.889639545008e-02 3.882727920438e-02 3.875531034337e-02 3.868023660286e-02 + 3.860182350358e-02 3.851985651427e-02 3.843414307479e-02 3.834451445950e-02 + 3.825082746203e-02 3.815296588418e-02 3.805084181312e-02 3.794439667272e-02 + 3.783360203671e-02 3.771846019344e-02 3.759900445387e-02 3.747529919686e-02 + 3.734743964798e-02 3.721555139039e-02 3.707978960881e-02 3.694033806985e-02 + 3.679740784447e-02 3.665123578083e-02 3.650208273768e-02 3.635023159137e-02 + 3.619598503105e-02 3.603966315921e-02 3.588160091630e-02 3.572214535024e-02 + 3.556165275305e-02 3.540048568828e-02 3.523900993438e-02 3.507759136992e-02 + 3.491659282751e-02 3.475637094392e-02 3.459727303412e-02 3.443963401714e-02 + 3.428377342149e-02 3.412999249741e-02 3.397857146286e-02 3.382976690875e-02 + 3.368380938838e-02 3.354090121424e-02 3.340121448397e-02 3.326488935548e-02 + 3.313203258904e-02 3.300271637231e-02 3.287697744155e-02 3.275481651019e-02 + 3.263619801286e-02 3.252105017078e-02 3.240926538111e-02 3.230070093043e-02 + 3.219518002931e-02 3.209249316237e-02 3.199239974495e-02 3.189463007509e-02 + 3.179888756652e-02 3.170485124567e-02 3.161217849337e-02 3.152050800930e-02 + 3.142946297506e-02 3.133865438983e-02 3.124768455040e-02 3.115615064615e-02 + 3.106364843777e-02 3.096977598773e-02 3.087413740935e-02 3.077634660096e-02 + 3.067603093116e-02 3.057283484140e-02 3.046642333218e-02 3.035648529976e-02 + 3.024273669147e-02 3.012492344832e-02 3.000282420562e-02 2.987625272368e-02 + 2.974506002276e-02 2.960913619869e-02 2.946841189795e-02 2.932285943390e-02 + 2.917249352830e-02 2.901737166581e-02 2.885759405175e-02 2.869330316739e-02 + 2.852468291964e-02 2.835195738620e-02 2.817538916014e-02 2.799527730180e-02 + 2.781195490900e-02 2.762578632033e-02 2.743716396932e-02 2.724650491075e-02 + 2.705424704321e-02 2.686084505524e-02 2.666676612484e-02 2.647248540477e-02 + 2.627848132843e-02 2.608523077283e-02 2.589320411728e-02 2.570286023759e-02 + 2.551464147670e-02 2.532896863364e-02 2.514623601305e-02 2.496680657756e-02 + 2.479100724525e-02 2.461912437371e-02 2.445139947136e-02 2.428802517535e-02 + 2.412914153374e-02 2.397483262770e-02 2.382512356700e-02 2.367997788946e-02 + 2.353929539168e-02 2.340291041487e-02 2.327059060531e-02 2.314203616404e-02 + 2.301687959454e-02 2.289468594999e-02 2.277495357321e-02 2.265711531092e-02 + 2.254054017065e-02 2.242453537044e-02 2.230834870904e-02 2.219117115571e-02 + 2.207213952303e-02 2.195033904246e-02 2.182480561065e-02 2.169452741531e-02 + 2.155844558527e-02 2.141545344463e-02 2.126439389427e-02 2.110405440595e-02 + 2.093315911227e-02 2.075035752961e-02 2.055420958617e-02 2.034316687101e-02 + 2.011555039806e-02 1.986952571580e-02 1.960307689780e-02 1.931398181613e-02 + 1.899979209574e-02 1.865782220703e-02 1.828515316961e-02 1.787865716765e-02 + 1.743504983189e-02 1.695097681795e-02 1.642314039405e-02 1.584846985775e-02 + 1.522433661080e-02 1.454881061599e-02 1.382094986850e-02 1.304110873632e-02 + 1.221124504648e-02 1.133520027347e-02 1.041892290863e-02 9.470602892002e-03 + 8.500685652692e-03 7.521738435485e-03 6.548149488013e-03 5.595652226486e-03 + 4.680681082118e-03 3.819582246430e-03 3.027719429994e-03 2.318530166852e-03 + 1.702600172799e-03 1.186829983441e-03 7.737681522974e-04 4.611779260458e-04 + 2.418896037221e-04 1.039696980113e-04 3.121236860217e-05 3.930885905926e-06 + 0.000000000000e+00 + Type L N + 0 1 0 + 0.000000000000e+00 3.716050806881e-03 7.430119258365e-03 1.114022739300e-02 + 1.484440601958e-02 1.854069905808e-02 2.222716782792e-02 2.590189526639e-02 + 2.956299006061e-02 3.320859067686e-02 3.683686927158e-02 4.044603546929e-02 + 4.403433999319e-02 4.760007813515e-02 5.114159305277e-02 5.465727888204e-02 + 5.814558365534e-02 6.160501201545e-02 6.503412771742e-02 6.843155591148e-02 + 7.179598520104e-02 7.512616947148e-02 7.842092948621e-02 8.167915424805e-02 + 8.489980212516e-02 8.808190174167e-02 9.122455263483e-02 9.432692568130e-02 + 9.738826329638e-02 1.004078794113e-01 1.033851592343e-01 1.063195588028e-01 + 1.092106043343e-01 1.120578913845e-01 1.148610838224e-01 1.176199126332e-01 + 1.203341745582e-01 1.230037305842e-01 1.256285042943e-01 1.282084800913e-01 + 1.307437013069e-01 1.332342682084e-01 1.356803359172e-01 1.380821122493e-01 + 1.404398554924e-01 1.427538721317e-01 1.450245145351e-01 1.472521786120e-01 + 1.494373014544e-01 1.515803589746e-01 1.536818635460e-01 1.557423616613e-01 + 1.577624316129e-01 1.597426812082e-01 1.616837455242e-01 1.635862847116e-01 + 1.654509818518e-01 1.672785408751e-01 1.690696845430e-01 1.708251524994e-01 + 1.725456993940e-01 1.742320930795e-01 1.758851128857e-01 1.775055479692e-01 + 1.790941957417e-01 1.806518603730e-01 1.821793513711e-01 1.836774822343e-01 + 1.851470691755e-01 1.865889299141e-01 1.880038825329e-01 1.893927443970e-01 + 1.907563311282e-01 1.920954556340e-01 1.934109271832e-01 1.947035505262e-01 + 1.959741250528e-01 1.972234439848e-01 1.984522935963e-01 1.996614524595e-01 + 2.008516907088e-01 2.020237693210e-01 2.031784394056e-01 2.043164415028e-01 + 2.054385048849e-01 2.065453468575e-01 2.076376720596e-01 2.087161717571e-01 + 2.097815231318e-01 2.108343885609e-01 2.118754148882e-01 2.129052326867e-01 + 2.139244555112e-01 2.149336791434e-01 2.159334808290e-01 2.169244185099e-01 + 2.179070300526e-01 2.188818324755e-01 2.198493211788e-01 2.208099691795e-01 + 2.217642263551e-01 2.227125187017e-01 2.236552476083e-01 2.245927891540e-01 + 2.255254934321e-01 2.264536839047e-01 2.273776567959e-01 2.282976805245e-01 + 2.292139951854e-01 2.301268120806e-01 2.310363133081e-01 2.319426514114e-01 + 2.328459490936e-01 2.337462990024e-01 2.346437635879e-01 2.355383750374e-01 + 2.364301352907e-01 2.373190161381e-01 2.382049594037e-01 2.390878772157e-01 + 2.399676523652e-01 2.408441387536e-01 2.417171619300e-01 2.425865197177e-01 + 2.434519829283e-01 2.443132961638e-01 2.451701787027e-01 2.460223254691e-01 + 2.468694080818e-01 2.477110759786e-01 2.485469576134e-01 2.493766617208e-01 + 2.501997786436e-01 2.510158817176e-01 2.518245287087e-01 2.526252632963e-01 + 2.534176165952e-01 2.542011087129e-01 2.549752503310e-01 2.557395443092e-01 + 2.564934872996e-01 2.572365713688e-01 2.579682856181e-01 2.586881177957e-01 + 2.593955558942e-01 2.600900897267e-01 2.607712124740e-01 2.614384221979e-01 + 2.620912233139e-01 2.627291280170e-01 2.633516576559e-01 2.639583440508e-01 + 2.645487307480e-01 2.651223742104e-01 2.656788449368e-01 2.662177285085e-01 + 2.667386265600e-01 2.672411576706e-01 2.677249581760e-01 2.681896828975e-01 + 2.686350057889e-01 2.690606204994e-01 2.694662408537e-01 2.698516012488e-01 + 2.702164569693e-01 2.705605844221e-01 2.708837812921e-01 2.711858666219e-01 + 2.714666808169e-01 2.717260855801e-01 2.719639637785e-01 2.721802192452e-01 + 2.723747765211e-01 2.725475805394e-01 2.726985962584e-01 2.728278082448e-01 + 2.729352202133e-01 2.730208545272e-01 2.730847516627e-01 2.731269696435e-01 + 2.731475834475e-01 2.731466843931e-01 2.731243795063e-01 2.730807908743e-01 + 2.730160549898e-01 2.729303220884e-01 2.728237554834e-01 2.726965309024e-01 + 2.725488358266e-01 2.723808688374e-01 2.721928389719e-01 2.719849650911e-01 + 2.717574752603e-01 2.715106061461e-01 2.712446024301e-01 2.709597162408e-01 + 2.706562066047e-01 2.703343389172e-01 2.699943844342e-01 2.696366197842e-01 + 2.692613265005e-01 2.688687905749e-01 2.684593020302e-01 2.680331545128e-01 + 2.675906449038e-01 2.671320729484e-01 2.666577409010e-01 2.661679531876e-01 + 2.656630160815e-01 2.651432373938e-01 2.646089261746e-01 2.640603924272e-01 + 2.634979468301e-01 2.629219004694e-01 2.623325645773e-01 2.617302502785e-01 + 2.611152683408e-01 2.604879289309e-01 2.598485413740e-01 2.591974139163e-01 + 2.585348534903e-01 2.578611654816e-01 2.571766534984e-01 2.564816191419e-01 + 2.557763617784e-01 2.550611783134e-01 2.543363629671e-01 2.536022070529e-01 + 2.528589987576e-01 2.521070229256e-01 2.513465608469e-01 2.505778900497e-01 + 2.498012840985e-01 2.490170123987e-01 2.482253400089e-01 2.474265274609e-01 + 2.466208305897e-01 2.458085003736e-01 2.449897827861e-01 2.441649186594e-01 + 2.433341435620e-01 2.424976876906e-01 2.416557757762e-01 2.408086270070e-01 + 2.399564549671e-01 2.390994675930e-01 2.382378671463e-01 2.373718502060e-01 + 2.365016076772e-01 2.356273248189e-01 2.347491812895e-01 2.338673512099e-01 + 2.329820032451e-01 2.320933007014e-01 2.312014016412e-01 2.303064590129e-01 + 2.294086207958e-01 2.285080301584e-01 2.276048256306e-01 2.266991412855e-01 + 2.257911069334e-01 2.248808483229e-01 2.239684873506e-01 2.230541422761e-01 + 2.221379279410e-01 2.212199559916e-01 2.203003351016e-01 2.193791711948e-01 + 2.184565676662e-01 2.175326255988e-01 2.166074439758e-01 2.156811198858e-01 + 2.147537487205e-01 2.138254243633e-01 2.128962393671e-01 2.119662851207e-01 + 2.110356520033e-01 2.101044295251e-01 2.091727064544e-01 2.082405709296e-01 + 2.073081105570e-01 2.063754124925e-01 2.054425635086e-01 2.045096500455e-01 + 2.035767582471e-01 2.026439739825e-01 2.017113828519e-01 2.007790701796e-01 + 1.998471209933e-01 1.989156199904e-01 1.979846514937e-01 1.970542993956e-01 + 1.961246470930e-01 1.951957774142e-01 1.942677725380e-01 1.933407139074e-01 + 1.924146821383e-01 1.914897569248e-01 1.905660169427e-01 1.896435397523e-01 + 1.887224017010e-01 1.878026778285e-01 1.868844417744e-01 1.859677656896e-01 + 1.850527201534e-01 1.841393740961e-01 1.832277947281e-01 1.823180474777e-01 + 1.814101959361e-01 1.805043018115e-01 1.796004248927e-01 1.786986230214e-01 + 1.777989520755e-01 1.769014659602e-01 1.760062166105e-01 1.751132540020e-01 + 1.742226261708e-01 1.733343792428e-01 1.724485574701e-01 1.715652032755e-01 + 1.706843573039e-01 1.698060584784e-01 1.689303440635e-01 1.680572497300e-01 + 1.671868096255e-01 1.663190564449e-01 1.654540215036e-01 1.645917348099e-01 + 1.637322251368e-01 1.628755200919e-01 1.620216461840e-01 1.611706288868e-01 + 1.603224926968e-01 1.594772611865e-01 1.586349570511e-01 1.577956021485e-01 + 1.569592175318e-01 1.561258234740e-01 1.552954394853e-01 1.544680843210e-01 + 1.536437759819e-01 1.528225317060e-01 1.520043679525e-01 1.511893003773e-01 + 1.503773438020e-01 1.495685121748e-01 1.487628185266e-01 1.479602749202e-01 + 1.471608923961e-01 1.463646809135e-01 1.455716492895e-01 1.447818051360e-01 + 1.439951547969e-01 1.432117032848e-01 1.424314542210e-01 1.416544097777e-01 + 1.408805706250e-01 1.401099358828e-01 1.393425030809e-01 1.385782681250e-01 + 1.378172252736e-01 1.370593671236e-01 1.363046846075e-01 1.355531670016e-01 + 1.348048019479e-01 1.340595754876e-01 1.333174721093e-01 1.325784748103e-01 + 1.318425651727e-01 1.311097234525e-01 1.303799286838e-01 1.296531587961e-01 + 1.289293907448e-01 1.282086006543e-01 1.274907639737e-01 1.267758556426e-01 + 1.260638502675e-01 1.253547223064e-01 1.246484462615e-01 1.239449968776e-01 + 1.232443493450e-01 1.225464795049e-01 1.218513640571e-01 1.211589807657e-01 + 1.204693086631e-01 1.197823282498e-01 1.190980216874e-01 1.184163729844e-01 + 1.177373681714e-01 1.170609954651e-01 1.163872454185e-01 1.157161110565e-01 + 1.150475879947e-01 1.143816745398e-01 1.137183717711e-01 1.130576836012e-01 + 1.123996168150e-01 1.117441810862e-01 1.110913889714e-01 1.104412558796e-01 + 1.097938000181e-01 1.091490423152e-01 1.085070063182e-01 1.078677180682e-01 + 1.072312059521e-01 1.065975005325e-01 1.059666343561e-01 1.053386417429e-01 + 1.047135585557e-01 1.040914219532e-01 1.034722701280e-01 1.028561420309e-01 + 1.022430770832e-01 1.016331148810e-01 1.010262948917e-01 1.004226561459e-01 + 9.982223692776e-02 9.922507446533e-02 9.863120462367e-02 9.804066160369e-02 + 9.745347764879e-02 9.686968276202e-02 9.628930443606e-02 9.571236739841e-02 + 9.513889337414e-02 9.456890086810e-02 9.400240496882e-02 9.343941717573e-02 + 9.287994525142e-02 9.232399310036e-02 9.177156067534e-02 9.122264391260e-02 + 9.067723469646e-02 9.013532085395e-02 8.959688617972e-02 8.906191049133e-02 + 8.853036971458e-02 8.800223599849e-02 8.747747785912e-02 8.695606035134e-02 + 8.643794526715e-02 8.592309135928e-02 8.541145458826e-02 8.490298839103e-02 + 8.439764396919e-02 8.389537059433e-02 8.339611592828e-02 8.289982635557e-02 + 8.240644732541e-02 8.191592370052e-02 8.142820010979e-02 8.094322130206e-02 + 8.046093249795e-02 7.998127973697e-02 7.950421021683e-02 7.902967262236e-02 + 7.855761744112e-02 7.808799726306e-02 7.762076706188e-02 7.715588445549e-02 + 7.669330994352e-02 7.623300711990e-02 7.577494285855e-02 7.531908747082e-02 + 7.486541483320e-02 7.441390248422e-02 7.396453168987e-02 7.351728747682e-02 + 7.307215863327e-02 7.262913767743e-02 7.218822079386e-02 7.174940773834e-02 + 7.131270171201e-02 7.087810920593e-02 7.044563981744e-02 7.001530603989e-02 + 6.958712302764e-02 6.916110833828e-02 6.873728165449e-02 6.831566448783e-02 + 6.789627986711e-02 6.747915201413e-02 6.706430600952e-02 6.665176745169e-02 + 6.624156211187e-02 6.583371558826e-02 6.542825296228e-02 6.502519846011e-02 + 6.462457512216e-02 6.422640448379e-02 6.383070626977e-02 6.343749810525e-02 + 6.304679524590e-02 6.265861032941e-02 6.227295315068e-02 6.188983046258e-02 + 6.150924580415e-02 6.113119935759e-02 6.075568783550e-02 6.038270439914e-02 + 6.001223860867e-02 5.964427640563e-02 5.927880012791e-02 5.891578855704e-02 + 5.855521699745e-02 5.819705738696e-02 5.784127843756e-02 5.748784580523e-02 + 5.713672228740e-02 5.678786804618e-02 5.644124085559e-02 5.609679637053e-02 + 5.575448841514e-02 5.541426928812e-02 5.507609008226e-02 5.473990101550e-02 + 5.440565177058e-02 5.407329184035e-02 5.374277087574e-02 5.341403903342e-02 + 5.308704732016e-02 5.276174793077e-02 5.243809457692e-02 5.211604280393e-02 + 5.179555029272e-02 5.147657714454e-02 5.115908614586e-02 5.084304301131e-02 + 5.052841660256e-02 5.021517912132e-02 4.990330627484e-02 4.959277741256e-02 + 4.928357563284e-02 4.897568785881e-02 4.866910488293e-02 4.836382137980e-02 + 4.805983588728e-02 4.775715075620e-02 4.745577206909e-02 4.715570952876e-02 + 4.685697631785e-02 4.655958893049e-02 4.626356697777e-02 4.596893296861e-02 + 4.567571206816e-02 4.538393183567e-02 4.509362194437e-02 4.480481388556e-02 + 4.451754065975e-02 4.423183645730e-02 4.394773633147e-02 4.366527586659e-02 + 4.338449084424e-02 4.310541691024e-02 4.282808924523e-02 4.255254224165e-02 + 4.227880918980e-02 4.200692197549e-02 4.173691079181e-02 4.146880386737e-02 + 4.120262721306e-02 4.093840438951e-02 4.067615629677e-02 4.041590098805e-02 + 4.015765350877e-02 3.990142576197e-02 3.964722640111e-02 3.939506075083e-02 + 3.914493075595e-02 3.889683495910e-02 3.865076850656e-02 3.840672318217e-02 + 3.816468746854e-02 3.792464663486e-02 3.768658285009e-02 3.745047532030e-02 + 3.721630044868e-02 3.698403201653e-02 3.675364138335e-02 3.652509770409e-02 + 3.629836816131e-02 3.607341821018e-02 3.585021183382e-02 3.562871180667e-02 + 3.540887996339e-02 3.519067747094e-02 3.497406510112e-02 3.475900350147e-02 + 3.454545346178e-02 3.433337617419e-02 3.412273348439e-02 3.391348813189e-02 + 3.370560397746e-02 3.349904621561e-02 3.329378157068e-02 3.308977847483e-02 + 3.288700722669e-02 3.268544012946e-02 3.248505160760e-02 3.228581830126e-02 + 3.208771913811e-02 3.189073538214e-02 3.169485065944e-02 3.150005096112e-02 + 3.130632462370e-02 3.111366228757e-02 3.092205683429e-02 3.073150330378e-02 + 3.054199879239e-02 3.035354233336e-02 3.016613476105e-02 2.997977856054e-02 + 2.979447770439e-02 2.961023747838e-02 2.942706429816e-02 2.924496551873e-02 + 2.906394923893e-02 2.888402410286e-02 2.870519910036e-02 2.852748336853e-02 + 2.835088599643e-02 2.817541583477e-02 2.800108131256e-02 2.782789026247e-02 + 2.765584975657e-02 2.748496595406e-02 2.731524396240e-02 2.714668771298e-02 + 2.697929985264e-02 2.681308165183e-02 2.664803293017e-02 2.648415200005e-02 + 2.632143562861e-02 2.615987901826e-02 2.599947580574e-02 2.584021807961e-02 + 2.568209641566e-02 2.552509992975e-02 2.536921634736e-02 2.521443208886e-02 + 2.506073236955e-02 2.490810131319e-02 2.475652207771e-02 2.460597699166e-02 + 2.445644769984e-02 2.430791531646e-02 2.416036058425e-02 2.401376403751e-02 + 2.386810616764e-02 2.372336758909e-02 2.357952920412e-02 2.343657236450e-02 + 2.329447902845e-02 2.315323191121e-02 2.301281462756e-02 2.287321182484e-02 + 2.273440930509e-02 2.259639413499e-02 2.245915474246e-02 2.232268099896e-02 + 2.218696428659e-02 2.205199754931e-02 2.191777532777e-02 2.178429377738e-02 + 2.165155066944e-02 2.151954537531e-02 2.138827883379e-02 2.125775350211e-02 + 2.112797329089e-02 2.099894348386e-02 2.087067064317e-02 2.074316250112e-02 + 2.061642783955e-02 2.049047635806e-02 2.036531853239e-02 2.024096546436e-02 + 2.011742872499e-02 1.999472019223e-02 1.987285188512e-02 1.975183579578e-02 + 1.963168372123e-02 1.951240709646e-02 1.939401683053e-02 1.927652314734e-02 + 1.915993543263e-02 1.904426208866e-02 1.892951039819e-02 1.881568639887e-02 + 1.870279476946e-02 1.859083872889e-02 1.847981994919e-02 1.836973848311e-02 + 1.826059270720e-02 1.815237928069e-02 1.804509312089e-02 1.793872739496e-02 + 1.783327352839e-02 1.772872122994e-02 1.762505853280e-02 1.752227185158e-02 + 1.742034605445e-02 1.731926454982e-02 1.721900938662e-02 1.711956136715e-02 + 1.702090017145e-02 1.692300449188e-02 1.682585217667e-02 1.672942038095e-02 + 1.663368572379e-02 1.653862444976e-02 1.644421259343e-02 1.635042614514e-02 + 1.625724121659e-02 1.616463420451e-02 1.607258195094e-02 1.598106189854e-02 + 1.589005223957e-02 1.579953205700e-02 1.570948145657e-02 1.561988168848e-02 + 1.553071525773e-02 1.544196602200e-02 1.535361927631e-02 1.526566182370e-02 + 1.517808203138e-02 1.509086987187e-02 1.500401694893e-02 1.491751650813e-02 + 1.483136343206e-02 1.474555422046e-02 1.466008695546e-02 1.457496125262e-02 + 1.449017819817e-02 1.440574027340e-02 1.432165126697e-02 1.423791617621e-02 + 1.415454109843e-02 1.407153311354e-02 1.398890015917e-02 1.390665089975e-02 + 1.382479459073e-02 1.374334093966e-02 1.366229996534e-02 1.358168185669e-02 + 1.350149683261e-02 1.342175500446e-02 1.334246624242e-02 1.326364004712e-02 + 1.318528542783e-02 1.310741078840e-02 1.303002382200e-02 1.295313141586e-02 + 1.287673956661e-02 1.280085330728e-02 1.272547664644e-02 1.265061251999e-02 + 1.257626275614e-02 1.250242805356e-02 1.242910797298e-02 1.235630094213e-02 + 1.228400427372e-02 1.221221419632e-02 1.214092589741e-02 1.207013357821e-02 + 1.199983051939e-02 1.193000915693e-02 1.186066116710e-02 1.179177755951e-02 + 1.172334877713e-02 1.165536480205e-02 1.158781526570e-02 1.152068956227e-02 + 1.145397696392e-02 1.138766673648e-02 1.132174825427e-02 1.125621111268e-02 + 1.119104523724e-02 1.112624098786e-02 1.106178925709e-02 1.099768156116e-02 + 1.093391012293e-02 1.087046794553e-02 1.080734887606e-02 1.074454765851e-02 + 1.068205997526e-02 1.061988247671e-02 1.055801279873e-02 1.049644956758e-02 + 1.043519239238e-02 1.037424184512e-02 1.031359942842e-02 1.025326753147e-02 + 1.019324937451e-02 1.013354894267e-02 1.007417090967e-02 1.001512055250e-02 + 9.956403657918e-03 9.898026421803e-03 9.839995342686e-03 9.782317110532e-03 + 9.724998492167e-03 9.668046214658e-03 9.611466848024e-03 9.555266688686e-03 + 9.499451645032e-03 9.444027126482e-03 9.388997937417e-03 9.334368177256e-03 + 9.280141147943e-03 9.226319270016e-03 9.172904008328e-03 9.119895808436e-03 + 9.067294044488e-03 9.015096979406e-03 8.963301737947e-03 8.911904293137e-03 + 8.860899466420e-03 8.810280941675e-03 8.760041293163e-03 8.710172027239e-03 + 8.660663637572e-03 8.611505673402e-03 8.562686820261e-03 8.514194992400e-03 + 8.466017436047e-03 8.418140842475e-03 8.370551469735e-03 8.323235271816e-03 + 8.276178033862e-03 8.229365512017e-03 8.182783576388e-03 8.136418355548e-03 + 8.090256380983e-03 8.044284729848e-03 7.998491164390e-03 7.952864266417e-03 + 7.907393565219e-03 7.862069657389e-03 7.816884317060e-03 7.771830595149e-03 + 7.726902906320e-03 7.682097102444e-03 7.637410531521e-03 7.592842081110e-03 + 7.548392205518e-03 7.504062936121e-03 7.459857874388e-03 7.415782167341e-03 + 7.371842465395e-03 7.328046862667e-03 7.284404820076e-03 7.240927071739e-03 + 7.197625515313e-03 7.154513087188e-03 7.111603623555e-03 7.068911708569e-03 + 7.026452510984e-03 6.984241610789e-03 6.942294817491e-03 6.900627981839e-03 + 6.859256802870e-03 6.818196632234e-03 6.777462277853e-03 6.737067808981e-03 + 6.697026364793e-03 6.657349968596e-03 6.618049349791e-03 6.579133775617e-03 + 6.540610894704e-03 6.502486594337e-03 6.464764873254e-03 6.427447731679e-03 + 6.390535080123e-03 6.354024668362e-03 6.317912035788e-03 6.282190484150e-03 + 6.246851073508e-03 6.211882641956e-03 6.177271849504e-03 6.143003246207e-03 + 6.109059364424e-03 6.075420834828e-03 6.042066525526e-03 6.008973703425e-03 + 5.976118216701e-03 5.943474697021e-03 5.911016779904e-03 5.878717341408e-03 + 5.846548749125e-03 5.814483125235e-03 5.782492619259e-03 5.750549687925e-03 + 5.718627379479e-03 5.686699619641e-03 5.654741496304e-03 5.622729540046e-03 + 5.590641997458e-03 5.558459094305e-03 5.526163285537e-03 5.493739489249e-03 + 5.461175301723e-03 5.428461190832e-03 5.395590665193e-03 5.362560416627e-03 + 5.329370433680e-03 5.296024084149e-03 5.262528164816e-03 5.228892916838e-03 + 5.195132005526e-03 5.161262463527e-03 5.127304596754e-03 5.093281852727e-03 + 5.059220651294e-03 5.025150178098e-03 4.991102141444e-03 4.957110493604e-03 + 4.923211117925e-03 4.889441483469e-03 4.855840269208e-03 4.822446960159e-03 + 4.789301418135e-03 4.756443430075e-03 4.723912237198e-03 4.691746048473e-03 + 4.659981542127e-03 4.628653359089e-03 4.597793592481e-03 4.567431277353e-03 + 4.537591885000e-03 4.508296826258e-03 4.479562968200e-03 4.451402168676e-03 + 4.423820833070e-03 4.396819497595e-03 4.370392443314e-03 4.344527344936e-03 + 4.319204958220e-03 4.294398849610e-03 4.270075171408e-03 4.246192485511e-03 + 4.222701638308e-03 4.199545688912e-03 4.176659892353e-03 4.153971738716e-03 + 4.131401048400e-03 4.108860122683e-03 4.086253947471e-03 4.063480446459e-03 + 4.040430777746e-03 4.016989665130e-03 3.993035751620e-03 3.968441958048e-03 + 3.943075823769e-03 3.916799799250e-03 3.889471451845e-03 3.860943536355e-03 + 3.831063871590e-03 3.799674953908e-03 3.766613229987e-03 3.731707945941e-03 + 3.694779491048e-03 3.655637165349e-03 3.614076325242e-03 3.569874904406e-03 + 3.522789373220e-03 3.472550291518e-03 3.418857728542e-03 3.361376968521e-03 + 3.299735084359e-03 3.233519133745e-03 3.162276893606e-03 3.085521175708e-03 + 3.002738828183e-03 2.913405491160e-03 2.817007005941e-03 2.713068047657e-03 + 2.601188043571e-03 2.481083753324e-03 2.352637047102e-03 2.215945474850e-03 + 2.071372255506e-03 1.919591437942e-03 1.761623322241e-03 1.598854914980e-03 + 1.433040348708e-03 1.266276916644e-03 1.100953701167e-03 9.396716835480e-04 + 7.851366089909e-04 6.400285619701e-04 5.068549295416e-04 3.877958950000e-04 + 2.845534971932e-04 1.982163240612e-04 1.291518623571e-04 7.693728425960e-05 + 4.033703305712e-05 1.733213478061e-05 5.202005722215e-06 6.550489907226e-07 + 0.000000000000e+00 + Type L N + 0 1 1 + 0.000000000000e+00 5.517306585949e-03 1.103161463370e-02 1.653992987028e-02 + 2.203926654498e-02 2.752665166979e-02 3.299912923524e-02 3.845376439317e-02 + 4.388764759848e-02 4.929789870172e-02 5.468167098433e-02 6.003615512873e-02 + 6.535858311521e-02 7.064623203800e-02 7.589642783261e-02 8.110654890712e-02 + 8.627402966989e-02 9.139636394643e-02 9.647110827851e-02 1.014958850986e-01 + 1.064683857728e-01 1.113863735065e-01 1.162476861060e-01 1.210502385907e-01 + 1.257920256500e-01 1.304711239407e-01 1.350856942186e-01 1.396339833018e-01 + 1.441143258600e-01 1.485251460276e-01 1.528649588364e-01 1.571323714668e-01 + 1.613260843142e-01 1.654448918690e-01 1.694876834110e-01 1.734534435148e-01 + 1.773412523692e-01 1.811502859098e-01 1.848798157659e-01 1.885292090242e-01 + 1.920979278121e-01 1.955855287019e-01 1.989916619415e-01 2.023160705150e-01 + 2.055585890368e-01 2.087191424862e-01 2.117977447874e-01 2.147944972406e-01 + 2.177095868120e-01 2.205432842890e-01 2.232959423081e-01 2.259679932638e-01 + 2.285599471064e-01 2.310723890370e-01 2.335059771084e-01 2.358614397408e-01 + 2.381395731616e-01 2.403412387772e-01 2.424673604872e-01 2.445189219492e-01 + 2.464969638033e-01 2.484025808648e-01 2.502369192951e-01 2.520011737568e-01 + 2.536965845635e-01 2.553244348306e-01 2.568860476353e-01 2.583827831920e-01 + 2.598160360509e-01 2.611872323249e-01 2.624978269502e-01 2.637493009869e-01 + 2.649431589631e-01 2.660809262664e-01 2.671641465868e-01 2.681943794132e-01 + 2.691731975861e-01 2.701021849076e-01 2.709829338101e-01 2.718170430846e-01 + 2.726061156669e-01 2.733517564833e-01 2.740555703532e-01 2.747191599473e-01 + 2.753441238002e-01 2.759320543743e-01 2.764845361724e-01 2.770031438972e-01 + 2.774894406531e-01 2.779449761874e-01 2.783712851690e-01 2.787698854985e-01 + 2.791422766489e-01 2.794899380313e-01 2.798143273842e-01 2.801168791821e-01 + 2.803990030607e-01 2.806620822570e-01 2.809074720608e-01 2.811364982766e-01 + 2.813504556948e-01 2.815506065696e-01 2.817381791056e-01 2.819143659509e-01 + 2.820803226984e-01 2.822371663975e-01 2.823859740748e-01 2.825277812709e-01 + 2.826635805914e-01 2.827943202794e-01 2.829209028115e-01 2.830441835232e-01 + 2.831649692680e-01 2.832840171169e-01 2.834020331028e-01 2.835196710193e-01 + 2.836375312773e-01 2.837561598299e-01 2.838760471704e-01 2.839976274135e-01 + 2.841212774654e-01 2.842473162926e-01 2.843760042951e-01 2.845075427942e-01 + 2.846420736399e-01 2.847796789475e-01 2.849203809684e-01 2.850641421031e-01 + 2.852108650621e-01 2.853603931790e-01 2.855125108831e-01 2.856669443329e-01 + 2.858233622165e-01 2.859813767197e-01 2.861405446641e-01 2.863003688166e-01 + 2.864602993697e-01 2.866197355911e-01 2.867780276414e-01 2.869344785569e-01 + 2.870883463918e-01 2.872388465167e-01 2.873851540661e-01 2.875264065276e-01 + 2.876617064652e-01 2.877901243678e-01 2.879107016119e-01 2.880224535284e-01 + 2.881243725623e-01 2.882154315115e-01 2.882945868332e-01 2.883607820032e-01 + 2.884129509146e-01 2.884500213012e-01 2.884709181700e-01 2.884745672297e-01 + 2.884598982971e-01 2.884258486694e-01 2.883713664441e-01 2.882954137739e-01 + 2.881969700411e-01 2.880750349366e-01 2.879286314306e-01 2.877568086213e-01 + 2.875586444492e-01 2.873332482652e-01 2.870797632412e-01 2.867973686142e-01 + 2.864852817534e-01 2.861427600440e-01 2.857691025790e-01 2.853636516561e-01 + 2.849257940713e-01 2.844549622104e-01 2.839506349331e-01 2.834123382504e-01 + 2.828396457960e-01 2.822321790932e-01 2.815896076203e-01 2.809116486793e-01 + 2.801980670733e-01 2.794486745982e-01 2.786633293588e-01 2.778419349150e-01 + 2.769844392704e-01 2.760908337128e-01 2.751611515171e-01 2.741954665247e-01 + 2.731938916101e-01 2.721565770488e-01 2.710837087999e-01 2.699755067175e-01 + 2.688322227036e-01 2.676541388191e-01 2.664415653639e-01 2.651948389425e-01 + 2.639143205274e-01 2.626003935339e-01 2.612534619194e-01 2.598739483189e-01 + 2.584622922294e-01 2.570189482521e-01 2.555443844056e-01 2.540390805159e-01 + 2.525035266944e-01 2.509382219090e-01 2.493436726566e-01 2.477203917400e-01 + 2.460688971555e-01 2.443897110924e-01 2.426833590477e-01 2.409503690556e-01 + 2.391912710318e-01 2.374065962323e-01 2.355968768218e-01 2.337626455507e-01 + 2.319044355347e-01 2.300227801321e-01 2.281182129127e-01 2.261912677109e-01 + 2.242424787561e-01 2.222723808708e-01 2.202815097296e-01 2.182704021670e-01 + 2.162395965283e-01 2.141896330491e-01 2.121210542586e-01 2.100344053915e-01 + 2.079302348036e-01 2.058090943771e-01 2.036715399092e-01 2.015181314728e-01 + 1.993494337420e-01 1.971660162734e-01 1.949684537357e-01 1.927573260815e-01 + 1.905332186538e-01 1.882967222228e-01 1.860484329484e-01 1.837889522642e-01 + 1.815188866808e-01 1.792388475069e-01 1.769494504859e-01 1.746513153503e-01 + 1.723450652934e-01 1.700313263607e-01 1.677107267646e-01 1.653838961254e-01 + 1.630514646438e-01 1.607140622107e-01 1.583723174602e-01 1.560268567719e-01 + 1.536783032329e-01 1.513272755636e-01 1.489743870197e-01 1.466202442772e-01 + 1.442654463098e-01 1.419105832691e-01 1.395562353765e-01 1.372029718365e-01 + 1.348513497809e-01 1.325019132533e-01 1.301551922431e-01 1.278117017771e-01 + 1.254719410781e-01 1.231363927969e-01 1.208055223256e-01 1.184797771991e-01 + 1.161595865894e-01 1.138453608985e-01 1.115374914537e-01 1.092363503086e-01 + 1.069422901520e-01 1.046556443260e-01 1.023767269541e-01 1.001058331778e-01 + 9.784323950153e-02 9.558920424146e-02 9.334396807702e-02 9.110775469882e-02 + 8.888077154879e-02 8.666321064613e-02 8.445524949228e-02 8.225705204737e-02 + 8.006876976997e-02 7.789054271125e-02 7.572250065445e-02 7.356476428985e-02 + 7.141744641532e-02 6.928065315215e-02 6.715448516583e-02 6.503903888139e-02 + 6.293440768285e-02 6.084068308665e-02 5.875795587898e-02 5.668631720745e-02 + 5.462585961780e-02 5.257667802690e-02 5.053887062401e-02 4.851253969258e-02 + 4.649779234601e-02 4.449474117132e-02 4.250350477558e-02 4.052420823077e-02 + 3.855698341390e-02 3.660196923984e-02 3.465931178565e-02 3.272916430578e-02 + 3.081168713897e-02 2.890704750823e-02 2.701541921658e-02 2.513698224201e-02 + 2.327192223604e-02 2.142042993128e-02 1.958270046394e-02 1.775893261840e-02 + 1.594932800122e-02 1.415409015300e-02 1.237342360669e-02 1.060753290183e-02 + 8.856621564211e-03 7.120891060972e-03 5.400539741312e-03 3.695761773082e-03 + 2.006746085562e-03 3.336753286608e-04 -1.323275141427e-03 -2.963938240282e-03 + -4.588156087622e-03 -6.195780884953e-03 -7.786675730035e-03 -9.360715360279e-03 + -1.091778681789e-02 -1.245779003027e-02 -1.398063830006e-02 -1.548625869993e-02 + -1.697459236834e-02 -1.844559470310e-02 -1.989923545094e-02 -2.133549869177e-02 + -2.275438271778e-02 -2.415589980827e-02 -2.554007590196e-02 -2.690695016984e-02 + -2.825657449216e-02 -2.958901284438e-02 -3.090434059755e-02 -3.220264373942e-02 + -3.348401802337e-02 -3.474856805297e-02 -3.599640631038e-02 -3.722765213752e-02 + -3.844243067928e-02 -3.964087179856e-02 -4.082310897272e-02 -4.198927818196e-02 + -4.313951679941e-02 -4.427396249327e-02 -4.539275215100e-02 -4.649602083529e-02 + -4.758390078144e-02 -4.865652044523e-02 -4.971400360986e-02 -5.075646856025e-02 + -5.178402733199e-02 -5.279678504180e-02 -5.379483930557e-02 -5.477827974907e-02 + -5.574718761572e-02 -5.670163547488e-02 -5.764168703310e-02 -5.856739704992e-02 + -5.947881135866e-02 -6.037596699201e-02 -6.125889241070e-02 -6.212760783320e-02 + -6.298212566298e-02 -6.382245100912e-02 -6.464858229529e-02 -6.546051195108e-02 + -6.625822717906e-02 -6.704171079027e-02 -6.781094209994e-02 -6.856589787500e-02 + -6.930655332431e-02 -7.003288312207e-02 -7.074486245469e-02 -7.144246808107e-02 + -7.212567939622e-02 -7.279447948803e-02 -7.344885617707e-02 -7.408880302941e-02 + -7.471432033294e-02 -7.532541602754e-02 -7.592210658041e-02 -7.650441779786e-02 + -7.707238556594e-02 -7.762605651244e-02 -7.816548858394e-02 -7.869075153211e-02 + -7.920192730442e-02 -7.969911033519e-02 -8.018240773392e-02 -8.065193936873e-02 + -8.110783784382e-02 -8.155024837051e-02 -8.197932853282e-02 -8.239524794930e-02 + -8.279818783359e-02 -8.318834045758e-02 -8.356590852140e-02 -8.393110443586e-02 + -8.428414952320e-02 -8.462527314322e-02 -8.495471175235e-02 -8.527270790374e-02 + -8.557950919720e-02 -8.587536718805e-02 -8.616053626455e-02 -8.643527250359e-02 + -8.669983251481e-02 -8.695447228312e-02 -8.719944601988e-02 -8.743500503269e-02 + -8.766139662369e-02 -8.787886302599e-02 -8.808764038745e-02 -8.828795781064e-02 + -8.848003645728e-02 -8.866408872478e-02 -8.884031750206e-02 -8.900891551081e-02 + -8.917006473790e-02 -8.932393596337e-02 -8.947068838816e-02 -8.961046936418e-02 + -8.974341422890e-02 -8.986964624549e-02 -8.998927664845e-02 -9.010240479402e-02 + -9.020911841343e-02 -9.030949396628e-02 -9.040359709048e-02 -9.049148314405e-02 + -9.057319783362e-02 -9.064877792343e-02 -9.071825201804e-02 -9.078164141121e-02 + -9.083896099300e-02 -9.089022020642e-02 -9.093542404473e-02 -9.097457407992e-02 + -9.100766951295e-02 -9.103470823589e-02 -9.105568789603e-02 -9.107060695235e-02 + -9.107946571439e-02 -9.108226735405e-02 -9.107901888118e-02 -9.106973207374e-02 + -9.105442435442e-02 -9.103311960541e-02 -9.100584891424e-02 -9.097265124373e-02 + -9.093357402021e-02 -9.088867363463e-02 -9.083801585223e-02 -9.078167612706e-02 + -9.071973981875e-02 -9.065230230963e-02 -9.057946902134e-02 -9.050135533090e-02 + -9.041808638724e-02 -9.032979682993e-02 -9.023663041293e-02 -9.013873953684e-02 + -9.003628469408e-02 -8.992943383218e-02 -8.981836164108e-02 -8.970324877098e-02 + -8.958428098784e-02 -8.946164827449e-02 -8.933554388524e-02 -8.920616336272e-02 + -8.907370352581e-02 -8.893836143781e-02 -8.880033336395e-02 -8.865981372782e-02 + -8.851699407573e-02 -8.837206205838e-02 -8.822520043876e-02 -8.807658613499e-02 + -8.792638930643e-02 -8.777477249106e-02 -8.762188980155e-02 -8.746788618684e-02 + -8.731289676550e-02 -8.715704623652e-02 -8.700044837225e-02 -8.684320559765e-02 + -8.668540865918e-02 -8.652713638558e-02 -8.636845554254e-02 -8.620942078157e-02 + -8.605007468338e-02 -8.589044789458e-02 -8.573055935611e-02 -8.557041662062e-02 + -8.541001625569e-02 -8.524934432854e-02 -8.508837696757e-02 -8.492708099516e-02 + -8.476541462577e-02 -8.460332822254e-02 -8.444076510553e-02 -8.427766240381e-02 + -8.411395194388e-02 -8.394956116604e-02 -8.378441406053e-02 -8.361843211514e-02 + -8.345153526564e-02 -8.328364284087e-02 -8.311467449411e-02 -8.294455111272e-02 + -8.277319569829e-02 -8.260053420981e-02 -8.242649636298e-02 -8.225101637887e-02 + -8.207403367625e-02 -8.189549350181e-02 -8.171534749373e-02 -8.153355417429e-02 + -8.135007936825e-02 -8.116489654412e-02 -8.097798707639e-02 -8.078934042772e-02 + -8.059895425029e-02 -8.040683440693e-02 -8.021299491295e-02 -8.001745780048e-02 + -7.982025290787e-02 -7.962141759730e-02 -7.942099640436e-02 -7.921904062425e-02 + -7.901560783922e-02 -7.881076139310e-02 -7.860456981852e-02 -7.839710622338e-02 + -7.818844764287e-02 -7.797867436426e-02 -7.776786923120e-02 -7.755611693478e-02 + -7.734350329861e-02 -7.713011456495e-02 -7.691603668902e-02 -7.670135464836e-02 + -7.648615177385e-02 -7.627050910888e-02 -7.605450480244e-02 -7.583821354195e-02 + -7.562170603081e-02 -7.540504851530e-02 -7.518830236495e-02 -7.497152370982e-02 + -7.475476313751e-02 -7.453806545218e-02 -7.432146949720e-02 -7.410500804213e-02 + -7.388870773458e-02 -7.367258911620e-02 -7.345666670198e-02 -7.324094912104e-02 + -7.302543931650e-02 -7.281013480176e-02 -7.259502796945e-02 -7.238010644927e-02 + -7.216535351022e-02 -7.195074850235e-02 -7.173626733286e-02 -7.152188297097e-02 + -7.130756597584e-02 -7.109328504152e-02 -7.087900755293e-02 -7.066470014665e-02 + -7.045032927036e-02 -7.023586173497e-02 -7.002126525334e-02 -6.980650895997e-02 + -6.959156390600e-02 -6.937640352450e-02 -6.916100406098e-02 -6.894534496484e-02 + -6.872940923770e-02 -6.851318373506e-02 -6.829665941838e-02 -6.807983155506e-02 + -6.786269986446e-02 -6.764526860876e-02 -6.742754662790e-02 -6.720954731850e-02 + -6.699128855744e-02 -6.677279257101e-02 -6.655408575153e-02 -6.633519842362e-02 + -6.611616456290e-02 -6.589702147046e-02 -6.567780940693e-02 -6.545857119023e-02 + -6.523935176171e-02 -6.502019772554e-02 -6.480115686654e-02 -6.458227765186e-02 + -6.436360872225e-02 -6.414519837839e-02 -6.392709406815e-02 -6.370934188065e-02 + -6.349198605244e-02 -6.327506849173e-02 -6.305862832573e-02 -6.284270147627e-02 + -6.262732026861e-02 -6.241251307766e-02 -6.219830401590e-02 -6.198471266645e-02 + -6.177175386442e-02 -6.155943752927e-02 -6.134776855012e-02 -6.113674672561e-02 + -6.092636675925e-02 -6.071661831049e-02 -6.050748610147e-02 -6.029895007835e-02 + -6.009098562600e-02 -5.988356383401e-02 -5.967665181131e-02 -5.947021304654e-02 + -5.926420781050e-02 -5.905859359654e-02 -5.885332559464e-02 -5.864835719414e-02 + -5.844364051016e-02 -5.823912692804e-02 -5.803476766039e-02 -5.783051431075e-02 + -5.762631943806e-02 -5.742213711591e-02 -5.721792348069e-02 -5.701363726268e-02 + -5.680924029455e-02 -5.660469799155e-02 -5.639997979825e-02 -5.619505959693e-02 + -5.598991607286e-02 -5.578453303254e-02 -5.557889967100e-02 -5.537301078509e-02 + -5.516686693002e-02 -5.496047451700e-02 -5.475384585056e-02 -5.454699910461e-02 + -5.433995823682e-02 -5.413275284183e-02 -5.392541794412e-02 -5.371799373211e-02 + -5.351052523575e-02 -5.330306195026e-02 -5.309565740945e-02 -5.288836871236e-02 + -5.268125600767e-02 -5.247438194068e-02 -5.226781106798e-02 -5.206160924557e-02 + -5.185584299614e-02 -5.165057886179e-02 -5.144588274838e-02 -5.124181926813e-02 + -5.103845108688e-02 -5.083583828253e-02 -5.063403772119e-02 -5.043310245738e-02 + -5.023308116432e-02 -5.003401760029e-02 -4.983595011665e-02 -4.963891121268e-02 + -4.944292714204e-02 -4.924801757518e-02 -4.905419532156e-02 -4.886146611481e-02 + -4.866982846356e-02 -4.847927356997e-02 -4.828978531740e-02 -4.810134032783e-02 + -4.791390808919e-02 -4.772745115197e-02 -4.754192539384e-02 -4.735728035022e-02 + -4.717345960839e-02 -4.699040126172e-02 -4.680803842031e-02 -4.662629977366e-02 + -4.644511020032e-02 -4.626439141928e-02 -4.608406267718e-02 -4.590404146512e-02 + -4.572424425864e-02 -4.554458727390e-02 -4.536498723331e-02 -4.518536213327e-02 + -4.500563200702e-02 -4.482571967530e-02 -4.464555147785e-02 -4.446505797872e-02 + -4.428417463862e-02 -4.410284244797e-02 -4.392100851441e-02 -4.373862659911e-02 + -4.355565759653e-02 -4.337206995298e-02 -4.318784001969e-02 -4.300295233674e-02 + -4.281739984501e-02 -4.263118402359e-02 -4.244431495133e-02 -4.225681129131e-02 + -4.206870019822e-02 -4.188001714906e-02 -4.169080569845e-02 -4.150111716043e-02 + -4.131101021949e-02 -4.112055047405e-02 -4.092980991638e-02 -4.073886635348e-02 + -4.054780277418e-02 -4.035670666789e-02 -4.016566930135e-02 -3.997478495970e-02 + -3.978415015890e-02 -3.959386283661e-02 -3.940402152881e-02 -3.921472453995e-02 + -3.902606911397e-02 -3.883815061400e-02 -3.865106171816e-02 -3.846489163910e-02 + -3.827972537422e-02 -3.809564299377e-02 -3.791271897331e-02 -3.773102157670e-02 + -3.755061229555e-02 -3.737154535012e-02 -3.719386725652e-02 -3.701761646417e-02 + -3.684282306690e-02 -3.666950859047e-02 -3.649768585850e-02 -3.632735893798e-02 + -3.615852316507e-02 -3.599116525073e-02 -3.582526346548e-02 -3.566078790129e-02 + -3.549770080841e-02 -3.533595700383e-02 -3.517550434758e-02 -3.501628428253e-02 + -3.485823243242e-02 -3.470127925271e-02 -3.454535072804e-02 -3.439036910980e-02 + -3.423625368682e-02 -3.408292158198e-02 -3.393028856732e-02 -3.377826988986e-02 + -3.362678110046e-02 -3.347573887785e-02 -3.332506184022e-02 -3.317467133657e-02 + -3.302449221049e-02 -3.287445352921e-02 -3.272448927095e-02 -3.257453896429e-02 + -3.242454827345e-02 -3.227446952401e-02 -3.212426216424e-02 -3.197389315766e-02 + -3.182333730319e-02 -3.167257748005e-02 -3.152160481501e-02 -3.137041877061e-02 + -3.121902715362e-02 -3.106744604367e-02 -3.091569964297e-02 -3.076382004849e-02 + -3.061184694904e-02 -3.045982725021e-02 -3.030781463074e-02 -3.015586903486e-02 + -3.000405610539e-02 -2.985244656320e-02 -2.970111553908e-02 -2.955014186443e-02 + -2.939960732774e-02 -2.924959590406e-02 -2.910019296478e-02 -2.895148447566e-02 + -2.880355619054e-02 -2.865649284880e-02 -2.851037738413e-02 -2.836529015243e-02 + -2.822130818611e-02 -2.807850448220e-02 -2.793694733091e-02 -2.779669969132e-02 + -2.765781862005e-02 -2.752035475852e-02 -2.738435188364e-02 -2.724984652629e-02 + -2.711686766116e-02 -2.698543647101e-02 -2.685556618745e-02 -2.672726200976e-02 + -2.660052110244e-02 -2.647533267147e-02 -2.635167811838e-02 -2.622953127055e-02 + -2.610885868539e-02 -2.598962002538e-02 -2.587176850013e-02 -2.575525137099e-02 + -2.564001051334e-02 -2.552598303072e-02 -2.541310191483e-02 -2.530129674475e-02 + -2.519049441838e-02 -2.508061990886e-02 -2.497159703838e-02 -2.486334926163e-02 + -2.475580045111e-02 -2.464887567642e-02 -2.454250196968e-02 -2.443660906950e-02 + -2.433113013594e-02 -2.422600242929e-02 -2.412116794587e-02 -2.401657400438e-02 + -2.391217377684e-02 -2.380792675886e-02 -2.370379917418e-02 -2.359976430960e-02 + -2.349580277664e-02 -2.339190269730e-02 -2.328805981180e-02 -2.318427750724e-02 + -2.308056676666e-02 -2.297694603880e-02 -2.287344102987e-02 -2.277008441916e-02 + -2.266691550121e-02 -2.256397975805e-02 -2.246132836558e-02 -2.235901763896e-02 + -2.225710842247e-02 -2.215566542989e-02 -2.205475654182e-02 -2.195445206705e-02 + -2.185482397532e-02 -2.175594510908e-02 -2.165788838223e-02 -2.156072597389e-02 + -2.146452852529e-02 -2.136936434798e-02 -2.127529865135e-02 -2.118239279742e-02 + -2.109070359030e-02 -2.100028260795e-02 -2.091117558283e-02 -2.082342183802e-02 + -2.073705378461e-02 -2.065209648569e-02 -2.056856729147e-02 -2.048647554946e-02 + -2.040582239293e-02 -2.032660060976e-02 -2.024879459352e-02 -2.017238037718e-02 + -2.009732574940e-02 -2.002359045240e-02 -1.995112645941e-02 -1.987987832898e-02 + -1.980978363272e-02 -1.974077345190e-02 -1.967277293791e-02 -1.960570193080e-02 + -1.953947562930e-02 -1.947400530524e-02 -1.940919905487e-02 -1.934496257881e-02 + -1.928119998230e-02 -1.921781458688e-02 -1.915470974449e-02 -1.909178964500e-02 + -1.902896010775e-02 -1.896612934819e-02 -1.890320871052e-02 -1.884011335764e-02 + -1.877676290985e-02 -1.871308202456e-02 -1.864900090910e-02 -1.858445576012e-02 + -1.851938912290e-02 -1.845375016536e-02 -1.838749486172e-02 -1.832058608208e-02 + -1.825299358487e-02 -1.818469391008e-02 -1.811567017215e-02 -1.804591175256e-02 + -1.797541389295e-02 -1.790417719077e-02 -1.783220700052e-02 -1.775951274446e-02 + -1.768610713799e-02 -1.761200533545e-02 -1.753722400343e-02 -1.746178032913e-02 + -1.738569097263e-02 -1.730897097205e-02 -1.723163261191e-02 -1.715368426502e-02 + -1.707512921910e-02 -1.699596449964e-02 -1.691617970070e-02 -1.683575583571e-02 + -1.675466422040e-02 -1.667286539984e-02 -1.659030813164e-02 -1.650692843697e-02 + -1.642264873073e-02 -1.633737704175e-02 -1.625100633312e-02 -1.616341393217e-02 + -1.607446107825e-02 -1.598399259577e-02 -1.589183669781e-02 -1.579780492412e-02 + -1.570169221459e-02 -1.560327711608e-02 -1.550232211618e-02 -1.539857409182e-02 + -1.529176485305e-02 -1.518161175262e-02 -1.506781831883e-02 -1.495007485308e-02 + -1.482805891250e-02 -1.470143557339e-02 -1.456985734139e-02 -1.443296354106e-02 + -1.429037898259e-02 -1.414171166927e-02 -1.398654928194e-02 -1.382445416263e-02 + -1.365495652908e-02 -1.347754569668e-02 -1.329165917863e-02 -1.309666969376e-02 + -1.289187034811e-02 -1.267645858110e-02 -1.244951988342e-02 -1.221001279293e-02 + -1.195675723437e-02 -1.168842884544e-02 -1.140356246283e-02 -1.110056834175e-02 + -1.077776484908e-02 -1.043343118964e-02 -1.006588308793e-02 -9.673573161848e-03 + -9.255215938872e-03 -8.809935089441e-03 -8.337427575722e-03 -7.838136222039e-03 + -7.313418987037e-03 -6.765700326020e-03 -6.198587903076e-03 -5.616936991589e-03 + -5.026845591751e-03 -4.435565891169e-03 -3.851322322602e-03 -3.283033026325e-03 + -2.739939637386e-03 -2.231159361408e-03 -1.765182422079e-03 -1.349346155308e-03 + -9.893232459975e-04 -6.886649043736e-04 -4.484394419578e-04 -2.670023692688e-04 + -1.399258754277e-04 -6.010391557814e-05 -1.803512097766e-05 -2.270703901798e-06 + 0.000000000000e+00 + Type L N + 0 1 2 + 0.000000000000e+00 2.353771982045e-02 4.703126246072e-02 7.043664255459e-02 + 9.371025709773e-02 1.168090734728e-01 1.396908137151e-01 1.623141338115e-01 + 1.846387968635e-01 2.066258389926e-01 2.282377269244e-01 2.494385062490e-01 + 2.701939394308e-01 2.904716327185e-01 3.102411511896e-01 3.294741212601e-01 + 3.481443200809e-01 3.662277513457e-01 3.837027071388e-01 4.005498155560e-01 + 4.167520739412e-01 4.322948676879e-01 4.471659746643e-01 4.613555554290e-01 + 4.748561295060e-01 4.876625380942e-01 4.997718936840e-01 5.111835171462e-01 + 5.218988629518e-01 5.319214332612e-01 5.412566816998e-01 5.499119077078e-01 + 5.578961424116e-01 5.652200270217e-01 5.718956848049e-01 5.779365877159e-01 + 5.833574188020e-01 5.881739315126e-01 5.924028070528e-01 5.960615109215e-01 + 5.991681497645e-01 6.017413296526e-01 6.038000168686e-01 6.053634022499e-01 + 6.064507700868e-01 6.070813725268e-01 6.072743103718e-01 6.070484210907e-01 + 6.064221747939e-01 6.054135788409e-01 6.040400916647e-01 6.023185463108e-01 + 6.002650840995e-01 5.978950987216e-01 5.952231909868e-01 5.922631343469e-01 + 5.890278512172e-01 5.855294000274e-01 5.817789728369e-01 5.777869032597e-01 + 5.735626843543e-01 5.691149960501e-01 5.644517416029e-01 5.595800924948e-01 + 5.545065411288e-01 5.492369606023e-01 5.437766707908e-01 5.381305099240e-01 + 5.323029107950e-01 5.262979807137e-01 5.201195842873e-01 5.137714280986e-01 + 5.072571463427e-01 5.005803864845e-01 4.937448940092e-01 4.867545953549e-01 + 4.796136781419e-01 4.723266678470e-01 4.648985001110e-01 4.573345879165e-01 + 4.496408829250e-01 4.418239303257e-01 4.338909166090e-01 4.258497097545e-01 + 4.177088913903e-01 4.094777805646e-01 4.011664488472e-01 3.927857265631e-01 + 3.843472000429e-01 3.758631998601e-01 3.673467801092e-01 3.588116888611e-01 + 3.502723300150e-01 3.417437168429e-01 3.332414176018e-01 3.247814936576e-01 + 3.163804306350e-01 3.080550631686e-01 2.998224938906e-01 2.917000073379e-01 + 2.837049795112e-01 2.758547838530e-01 2.681666944459e-01 2.606577872547e-01 + 2.533448402547e-01 2.462442332946e-01 2.393718485497e-01 2.327429724076e-01 + 2.263721996245e-01 2.202733405613e-01 2.144593322878e-01 2.089421543059e-01 + 2.037327496026e-01 1.988409516986e-01 1.942754183036e-01 1.900435721372e-01 + 1.861515494058e-01 1.826041563680e-01 1.794048343462e-01 1.765556334748e-01 + 1.740571953985e-01 1.719087450626e-01 1.701080916591e-01 1.686516387173e-01 + 1.675344032536e-01 1.667500438194e-01 1.662908972161e-01 1.661480235754e-01 + 1.663112594364e-01 1.667692783906e-01 1.675096588039e-01 1.685189580736e-01 + 1.697827928292e-01 1.712859244398e-01 1.730123491572e-01 1.749453921898e-01 + 1.770678049771e-01 1.793618649168e-01 1.818094767849e-01 1.843922750799e-01 + 1.870917265291e-01 1.898892319960e-01 1.927662270470e-01 1.957042804519e-01 + 1.986851899206e-01 2.016910744095e-01 2.047044623684e-01 2.077083753393e-01 + 2.106864063668e-01 2.136227927288e-01 2.165024825512e-01 2.193111949262e-01 + 2.220354732149e-01 2.246627312753e-01 2.271812924202e-01 2.295804209726e-01 + 2.318503463514e-01 2.339822796822e-01 2.359684229928e-01 2.378019711108e-01 + 2.394771064442e-01 2.409889868794e-01 2.423337270857e-01 2.435083735663e-01 + 2.445108738420e-01 2.453400401951e-01 2.459955084410e-01 2.464776922248e-01 + 2.467877333721e-01 2.469274488416e-01 2.468992748475e-01 2.467062087312e-01 + 2.463517491662e-01 2.458398352836e-01 2.451747852985e-01 2.443612352117e-01 + 2.434040781405e-01 2.423084048193e-01 2.410794457804e-01 2.397225157004e-01 + 2.382429603636e-01 2.366461066569e-01 2.349372159719e-01 2.331214413466e-01 + 2.312037886351e-01 2.291890819459e-01 2.270819335416e-01 2.248867183438e-01 + 2.226075531370e-01 2.202482805140e-01 2.178124575605e-01 2.153033492222e-01 + 2.127239262557e-01 2.100768676170e-01 2.073645670993e-01 2.045891439908e-01 + 2.017524574875e-01 1.988561245608e-01 1.959015409492e-01 1.928899049188e-01 + 1.898222434119e-01 1.866994401884e-01 1.835222655482e-01 1.802914072140e-01 + 1.770075019497e-01 1.736711674896e-01 1.702830343557e-01 1.668437771498e-01 + 1.633541449207e-01 1.598149902221e-01 1.562272964959e-01 1.525922034425e-01 + 1.489110300652e-01 1.451852951045e-01 1.414167346139e-01 1.376073164616e-01 + 1.337592515797e-01 1.298750018223e-01 1.259572843304e-01 1.220090723465e-01 + 1.180335924563e-01 1.140343182802e-01 1.100149606744e-01 1.059794545413e-01 + 1.019319423849e-01 9.787675478457e-02 9.381838799314e-02 8.976147889568e-02 + 8.571077759600e-02 8.167111792157e-02 7.764738616089e-02 7.364448836599e-02 + 6.966731656842e-02 6.572071426826e-02 6.180944156405e-02 5.793814029516e-02 + 5.411129956823e-02 5.033322203584e-02 4.660799128748e-02 4.293944070194e-02 + 3.933112409530e-02 3.578628848022e-02 3.230784923090e-02 2.889836792353e-02 + 2.556003309484e-02 2.229464413175e-02 1.910359847339e-02 1.598788227310e-02 + 1.294806463334e-02 9.984295489944e-03 7.096307185821e-03 4.283419736712e-03 + 1.544549754771e-03 -1.121777041122e-03 -3.717409835235e-03 -6.244553386824e-03 + -8.705745539016e-03 -1.110383177136e-02 -1.344193703210e-02 -1.572343511319e-02 + -1.795191585557e-02 -2.013115049353e-02 -2.226505546551e-02 -2.435765503361e-02 + -2.641304306607e-02 -2.843534434468e-02 -3.042867576421e-02 -3.239710779132e-02 + -3.434462654823e-02 -3.627509687975e-02 -3.819222675274e-02 -4.009953332368e-02 + -4.200031099362e-02 -4.389760175020e-02 -4.579416807371e-02 -4.769246865937e-02 + -4.959463717997e-02 -5.150246428358e-02 -5.341738298916e-02 -5.534045761011e-02 + -5.727237630108e-02 -5.921344728840e-02 -6.116359880876e-02 -6.312238274467e-02 + -6.508898190980e-02 -6.706222090188e-02 -6.904058040676e-02 -7.102221480384e-02 + -7.300497289194e-02 -7.498642152444e-02 -7.696387191535e-02 -7.893440835243e-02 + -8.089491903099e-02 -8.284212870224e-02 -8.477263281323e-02 -8.668293280171e-02 + -8.856947219937e-02 -9.042867318939e-02 -9.225697326138e-02 -9.405086160630e-02 + -9.580691489786e-02 -9.752183211339e-02 -9.919246805773e-02 -1.008158652669e-01 + -1.023892839853e-01 -1.039102299287e-01 -1.053764795690e-01 -1.067861027002e-01 + -1.081374820725e-01 -1.094293299098e-01 -1.106607011583e-01 -1.118310033438e-01 + -1.129400029496e-01 -1.139878282609e-01 -1.149749686555e-01 -1.159022703550e-01 + -1.167709286865e-01 -1.175824769347e-01 -1.183387719025e-01 -1.190419763241e-01 + -1.196945383091e-01 -1.202991680218e-01 -1.208588118271e-01 -1.213766241587e-01 + -1.218559373845e-01 -1.223002299666e-01 -1.227130932248e-01 -1.230981970280e-01 + -1.234592547479e-01 -1.237999878112e-01 -1.241240901968e-01 -1.244351932169e-01 + -1.247368309228e-01 -1.250324064654e-01 -1.253251597341e-01 -1.256181365811e-01 + -1.259141599250e-01 -1.262158030064e-01 -1.265253650496e-01 -1.268448495583e-01 + -1.271759454480e-01 -1.275200111918e-01 -1.278780621240e-01 -1.282507610182e-01 + -1.286384120230e-01 -1.290409580072e-01 -1.294579813323e-01 -1.298887080400e-01 + -1.303320154065e-01 -1.307864427852e-01 -1.312502056296e-01 -1.317212125549e-01 + -1.321970852710e-01 -1.326751811922e-01 -1.331526185028e-01 -1.336263034372e-01 + -1.340929595110e-01 -1.345491584231e-01 -1.349913523329e-01 -1.354159072064e-01 + -1.358191369136e-01 -1.361973377557e-01 -1.365468230965e-01 -1.368639577731e-01 + -1.371451919650e-01 -1.373870942047e-01 -1.375863832265e-01 -1.377399583583e-01 + -1.378449281782e-01 -1.378986371762e-01 -1.378986901800e-01 -1.378429743252e-01 + -1.377296783786e-01 -1.375573092439e-01 -1.373247055109e-01 -1.370310479359e-01 + -1.366758667716e-01 -1.362590458943e-01 -1.357808237069e-01 -1.352417908294e-01 + -1.346428846135e-01 -1.339853805552e-01 -1.332708807011e-01 -1.325012991779e-01 + -1.316788449980e-01 -1.308060023196e-01 -1.298855083642e-01 -1.289203292139e-01 + -1.279136337301e-01 -1.268687658537e-01 -1.257892155562e-01 -1.246785887278e-01 + -1.235405762922e-01 -1.223789228456e-01 -1.211973951211e-01 -1.199997505751e-01 + -1.187897063949e-01 -1.175709092149e-01 -1.163469058247e-01 -1.151211151377e-01 + -1.138968016760e-01 -1.126770508114e-01 -1.114647459824e-01 -1.102625480874e-01 + -1.090728772317e-01 -1.078978969803e-01 -1.067395012465e-01 -1.055993039150e-01 + -1.044786312753e-01 -1.033785173106e-01 -1.022997018599e-01 -1.012426316429e-01 + -1.002074641104e-01 -9.919407405211e-02 -9.820206287316e-02 -9.723077041810e-02 + -9.627928920306e-02 -9.534648089053e-02 -9.443099482165e-02 -9.353128840201e-02 + -9.264564911987e-02 -9.177221796146e-02 -9.090901397593e-02 -9.005395973282e-02 + -8.920490740836e-02 -8.835966523212e-02 -8.751602402439e-02 -8.667178355546e-02 + -8.582477846197e-02 -8.497290346160e-02 -8.411413761651e-02 -8.324656740710e-02 + -8.236840839144e-02 -8.147802524137e-02 -8.057394996421e-02 -7.965489813852e-02 + -7.871978301358e-02 -7.776772734479e-02 -7.679807286118e-02 -7.581038728529e-02 + -7.480446885177e-02 -7.378034829597e-02 -7.273828831024e-02 -7.167878049103e-02 + -7.060253982543e-02 -6.951049679036e-02 -6.840378716181e-02 -6.728373965381e-02 + -6.615186152883e-02 -6.500982234069e-02 -6.385943598967e-02 -6.270264128552e-02 + -6.154148122837e-02 -6.037808122977e-02 -5.921462650548e-02 -5.805333887924e-02 + -5.689645324162e-02 -5.574619391033e-02 -5.460475113840e-02 -5.347425801392e-02 + -5.235676799010e-02 -5.125423327684e-02 -5.016848431531e-02 -4.910121054499e-02 + -4.805394265864e-02 -4.702803652456e-02 -4.602465893797e-02 -4.504477534370e-02 + -4.408913965206e-02 -4.315828624748e-02 -4.225252426709e-02 -4.137193420273e-02 + -4.051636685581e-02 -3.968544465053e-02 -3.887856528658e-02 -3.809490768857e-02 + -3.733344018619e-02 -3.659293083633e-02 -3.587195977676e-02 -3.516893348055e-02 + -3.448210076108e-02 -3.380957036041e-02 -3.314932993760e-02 -3.249926625982e-02 + -3.185718638757e-02 -3.122083963526e-02 -3.058794008119e-02 -2.995618939604e-02 + -2.932329975589e-02 -2.868701660584e-02 -2.804514104209e-02 -2.739555158481e-02 + -2.673622512098e-02 -2.606525680508e-02 -2.538087871689e-02 -2.468147708849e-02 + -2.396560792782e-02 -2.323201088260e-02 -2.247962120709e-02 -2.170757971336e-02 + -2.091524060994e-02 -2.010217715236e-02 -1.926818505259e-02 -1.841328361738e-02 + -1.753771460894e-02 -1.664193884453e-02 -1.572663057476e-02 -1.479266970298e-02 + -1.384113193037e-02 -1.287327693210e-02 -1.189053469026e-02 -1.089449012791e-02 + -9.886866205613e-03 -8.869505657690e-03 -7.844351558908e-03 -6.813426924227e-03 + -5.778813553876e-03 -4.742630343582e-03 -3.707011285036e-03 -2.674083384669e-03 + -1.645944729461e-03 -6.246429268351e-04 3.878458583268e-04 1.389637052744e-03 + 2.378956801577e-03 3.354159875321e-03 4.313746171654e-03 5.256375641609e-03 + 6.180881485704e-03 7.086281483418e-03 7.971787338636e-03 8.836811944062e-03 + 9.680974488957e-03 1.050410335676e-02 1.130623678180e-02 1.208762125740e-02 + 1.284870771074e-02 1.359014548273e-02 1.431277417404e-02 1.501761343995e-02 + 1.570585083829e-02 1.637882785450e-02 1.703802424701e-02 1.768504087319e-02 + 1.832158117235e-02 1.894943149604e-02 1.957044048797e-02 2.018649772620e-02 + 2.079951184798e-02 2.141138838337e-02 2.202400752714e-02 2.263920207982e-02 + 2.325873578700e-02 2.388428230309e-02 2.451740499922e-02 2.515953782747e-02 + 2.581196744292e-02 2.647581677303e-02 2.715203020938e-02 2.784136058105e-02 + 2.854435805091e-02 2.926136105735e-02 2.999248940339e-02 3.073763957350e-02 + 3.149648233661e-02 3.226846267043e-02 3.305280201900e-02 3.384850287202e-02 + 3.465435563084e-02 3.546894770306e-02 3.629067474499e-02 3.711775394932e-02 + 3.794823925467e-02 3.878003833383e-02 3.961093119922e-02 4.043859024768e-02 + 4.126060155118e-02 4.207448718757e-02 4.287772839391e-02 4.366778931642e-02 + 4.444214112406e-02 4.519828624862e-02 4.593378251209e-02 4.664626690234e-02 + 4.733347876094e-02 4.799328215210e-02 4.862368718879e-02 4.922287010206e-02 + 4.978919185109e-02 5.032121508538e-02 5.081771928604e-02 5.127771393086e-02 + 5.170044954638e-02 5.208542653108e-02 5.243240165487e-02 5.274139216310e-02 + 5.301267743623e-02 5.324679818036e-02 5.344455314795e-02 5.360699341205e-02 + 5.373541424165e-02 5.383134464912e-02 5.389653470374e-02 5.393294072731e-02 + 5.394270850883e-02 5.392815469492e-02 5.389174653054e-02 5.383608014139e-02 + 5.376385756367e-02 5.367786273952e-02 5.358093670717e-02 5.347595222272e-02 + 5.336578805674e-02 5.325330321213e-02 5.314131131113e-02 5.303255539785e-02 + 5.292968339910e-02 5.283522448016e-02 5.275156652379e-02 5.268093495000e-02 + 5.262537308142e-02 5.258672424414e-02 5.256661577736e-02 5.256644510648e-02 + 5.258736801457e-02 5.263028922575e-02 5.269585539147e-02 5.278445054740e-02 + 5.289619408467e-02 5.303094125445e-02 5.318828620053e-02 5.336756748938e-02 + 5.356787608332e-02 5.378806567804e-02 5.402676530291e-02 5.428239406025e-02 + 5.455317785867e-02 5.483716797625e-02 5.513226127113e-02 5.543622184111e-02 + 5.574670391955e-02 5.606127578261e-02 5.637744443306e-02 5.669268081819e-02 + 5.700444533404e-02 5.731021336534e-02 5.760750061033e-02 5.789388794143e-02 + 5.816704555760e-02 5.842475619106e-02 5.866493714029e-02 5.888566091286e-02 + 5.908517427541e-02 5.926191552376e-02 5.941452980357e-02 5.954188233155e-02 + 5.964306938765e-02 5.971742697090e-02 5.976453703467e-02 5.978423124104e-02 + 5.977659219867e-02 5.974195217329e-02 5.968088928550e-02 5.959422123483e-02 + 5.948299661438e-02 5.934848390373e-02 5.919215825128e-02 5.901568617921e-02 + 5.882090836477e-02 5.860982067129e-02 5.838455361939e-02 5.814735050485e-02 + 5.790054438318e-02 5.764653415229e-02 5.738775997413e-02 5.712667828249e-02 + 5.686573662914e-02 5.660734862178e-02 5.635386920692e-02 5.610757054764e-02 + 5.587061874023e-02 5.564505160605e-02 5.543275778402e-02 5.523545733675e-02 + 5.505468406834e-02 5.489176973492e-02 5.474783031055e-02 5.462375445044e-02 + 5.452019427195e-02 5.443755855061e-02 5.437600840441e-02 5.433545551479e-02 + 5.431556290745e-02 5.431574829037e-02 5.433518992089e-02 5.437283494816e-02 + 5.442741015241e-02 5.449743497818e-02 5.458123673551e-02 5.467696782086e-02 + 5.478262478914e-02 5.489606908901e-02 5.501504925658e-02 5.513722434733e-02 + 5.526018837332e-02 5.538149550156e-02 5.549868576161e-02 5.560931100416e-02 + 5.571096084937e-02 5.580128836283e-02 5.587803519909e-02 5.593905595692e-02 + 5.598234149781e-02 5.600604098861e-02 5.600848244105e-02 5.598819153530e-02 + 5.594390853105e-02 5.587460308796e-02 5.577948683748e-02 5.565802357014e-02 + 5.550993692543e-02 5.533521549591e-02 5.513411528277e-02 5.490715946605e-02 + 5.465513547927e-02 5.437908940524e-02 5.408031773619e-02 5.376035656812e-02 + 5.342096832463e-02 5.306412613076e-02 5.269199598101e-02 5.230691686821e-02 + 5.191137906083e-02 5.150800073550e-02 5.109950318867e-02 5.068868486613e-02 + 5.027839446235e-02 4.987150335116e-02 4.947087761775e-02 4.907934996642e-02 + 4.869969178152e-02 4.833458561811e-02 4.798659839642e-02 4.765815556799e-02 + 4.735151651311e-02 4.706875141839e-02 4.681171986935e-02 4.658205137751e-02 + 4.638112804323e-02 4.621006953516e-02 4.606972054576e-02 4.596064085801e-02 + 4.588309813406e-02 4.583706350973e-02 4.582221005205e-02 4.583791410883e-02 + 4.588325955130e-02 4.595704488227e-02 4.605779315414e-02 4.618376461337e-02 + 4.633297196070e-02 4.650319809069e-02 4.669201614880e-02 4.689681172130e-02 + 4.711480695127e-02 4.734308635432e-02 4.757862409011e-02 4.781831243034e-02 + 4.805899115110e-02 4.829747756721e-02 4.853059691873e-02 4.875521281502e-02 + 4.896825744006e-02 4.916676122353e-02 4.934788168628e-02 4.950893117558e-02 + 4.964740321505e-02 4.976099720660e-02 4.984764123661e-02 4.990551275602e-02 + 4.993305692372e-02 4.992900242451e-02 4.989237459689e-02 4.982250573109e-02 + 4.971904242527e-02 4.958194991547e-02 4.941151332459e-02 4.920833580500e-02 + 4.897333357997e-02 4.870772791906e-02 4.841303411298e-02 4.809104754267e-02 + 4.774382696633e-02 4.737367517568e-02 4.698311719925e-02 4.657487625481e-02 + 4.615184767641e-02 4.571707106185e-02 4.527370090501e-02 4.482497599352e-02 + 4.437418786529e-02 4.392464862815e-02 4.347965845449e-02 4.304247306691e-02 + 4.261627153312e-02 4.220412468609e-02 4.180896448126e-02 4.143355459463e-02 + 4.108046255513e-02 4.075203369054e-02 4.045036715066e-02 4.017729425137e-02 + 3.993435936273e-02 3.972280353965e-02 3.954355106837e-02 3.939719907415e-02 + 3.928401030630e-02 3.920390918642e-02 3.915648117406e-02 3.914097547204e-02 + 3.915631106100e-02 3.920108602021e-02 3.927359005955e-02 3.937182015532e-02 + 3.949349915225e-02 3.963609716382e-02 3.979685557516e-02 3.997281342611e-02 + 4.016083592758e-02 4.035764484233e-02 4.055985044123e-02 4.076398472951e-02 + 4.096653562301e-02 4.116398174365e-02 4.135282749506e-02 4.152963807509e-02 + 4.169107408004e-02 4.183392535782e-02 4.195514377239e-02 4.205187455044e-02 + 4.212148589317e-02 4.216159655119e-02 4.217010107834e-02 4.214519250144e-02 + 4.208538216642e-02 4.198951654733e-02 4.185679083319e-02 4.168675913793e-02 + 4.147934121038e-02 4.123482555509e-02 4.095386890893e-02 4.063749205376e-02 + 4.028707198118e-02 3.990433046106e-02 3.949131910104e-02 3.905040101927e-02 + 3.858422928635e-02 3.809572232540e-02 3.758803649019e-02 3.706453607037e-02 + 3.652876100015e-02 3.598439257098e-02 3.543521747093e-02 3.488509049203e-02 + 3.433789626307e-02 3.379751037713e-02 3.326776029260e-02 3.275238639167e-02 + 3.225500358183e-02 3.177906382420e-02 3.132781996678e-02 3.090429125127e-02 + 3.051123084926e-02 3.015109576707e-02 2.982601943877e-02 2.953778730356e-02 + 2.928781563792e-02 2.907713388369e-02 2.890637068198e-02 2.877574378895e-02 + 2.868505401373e-02 2.863368328145e-02 2.862059688558e-02 2.864434995402e-02 + 2.870309811337e-02 2.879461229491e-02 2.891629758589e-02 2.906521598970e-02 + 2.923811291956e-02 2.943144721292e-02 2.964142441774e-02 2.986403306773e-02 + 3.009508363222e-02 3.033024979717e-02 3.056511170779e-02 3.079520078051e-02 + 3.101604567248e-02 3.122321898115e-02 3.141238423447e-02 3.157934272434e-02 + 3.172007973204e-02 3.183080969470e-02 3.190801986627e-02 3.194851203510e-02 + 3.194944187309e-02 3.190835550803e-02 3.182322293174e-02 3.169246788094e-02 + 3.151499385613e-02 3.129020597492e-02 3.101802839123e-02 3.069891704895e-02 + 3.033386757849e-02 2.992441818693e-02 2.947264743617e-02 2.898116684875e-02 + 2.845310832741e-02 2.789210642122e-02 2.730227551822e-02 2.668818209147e-02 + 2.605481217135e-02 2.540753426250e-02 2.475205796677e-02 2.409438861610e-02 + 2.344077825793e-02 2.279767337310e-02 2.217165973985e-02 2.156940488781e-02 + 2.099759861317e-02 2.046289204880e-02 1.997183580215e-02 1.953081768836e-02 + 1.914600059580e-02 1.882326102701e-02 1.856812885860e-02 1.838572885953e-02 + 1.828072449885e-02 1.825726455994e-02 1.831893306063e-02 1.846870295550e-02 + 1.870889406941e-02 1.904113567973e-02 1.946633412840e-02 1.998464580433e-02 + 2.059545579128e-02 2.129736242578e-02 2.208816795282e-02 2.296487540320e-02 + 2.392369174252e-02 2.496003725579e-02 2.606856102904e-02 2.724316226486e-02 + 2.847701701674e-02 2.976260973982e-02 3.109176882712e-02 3.245570502497e-02 + 3.384505129727e-02 3.524990234232e-02 3.665985157366e-02 3.806402299150e-02 + 3.945109504796e-02 4.080931342742e-02 4.212648973233e-02 4.338998352063e-02 + 4.458666614130e-02 4.570286652228e-02 4.672430162440e-02 4.763599777664e-02 + 4.842221354644e-02 4.906638001972e-02 4.955108002329e-02 4.985809334103e-02 + 4.996853953670e-02 4.986315256700e-02 4.952272077231e-02 4.892872088250e-02 + 4.806416435631e-02 4.691465807099e-02 4.546965912408e-02 4.372387619574e-02 + 4.167873945871e-02 3.934383037222e-02 3.673813572791e-02 3.389097148938e-02 + 3.084241581914e-02 2.764310116493e-02 2.435324500351e-02 2.104084841094e-02 + 1.777905907762e-02 1.464277594399e-02 1.170465887984e-02 9.030789294132e-03 + 6.676295746076e-03 4.681302352360e-03 3.067568689341e-03 1.836162847991e-03 + 9.664435244762e-04 4.165266291689e-04 1.252857545735e-04 1.579676576049e-05 + 0.000000000000e+00 + Type L N + 0 2 0 + 0.000000000000e+00 7.178134451301e-05 2.870337590894e-04 6.454825993306e-04 + 1.146670917815e-03 1.789960627966e-03 2.574534139601e-03 3.499396443688e-03 + 4.563377642685e-03 5.765135910481e-03 7.103160870580e-03 8.575777375015e-03 + 1.018114966728e-02 1.191728590970e-02 1.378204305443e-02 1.577313203577e-02 + 1.788812326037e-02 2.012445237113e-02 2.247942625872e-02 2.495022929527e-02 + 2.753392976276e-02 3.022748644956e-02 3.302775538720e-02 3.593149670043e-02 + 3.893538154286e-02 4.203599909132e-02 4.522986357248e-02 4.851342129545e-02 + 5.188305766559e-02 5.533510415492e-02 5.886584520611e-02 6.247152504786e-02 + 6.614835440100e-02 6.989251705598e-02 7.370017630360e-02 7.756748120300e-02 + 8.149057267185e-02 8.546558938596e-02 8.948867347670e-02 9.355597601683e-02 + 9.766366228672e-02 1.018079168147e-01 1.059849481875e-01 1.101909936270e-01 + 1.144223233337e-01 1.186752445953e-01 1.229461056642e-01 1.272312994058e-01 + 1.315272667228e-01 1.358304997614e-01 1.401375449057e-01 1.444450055691e-01 + 1.487495447903e-01 1.530478876453e-01 1.573368234826e-01 1.616132079954e-01 + 1.658739651393e-01 1.701160889080e-01 1.743366449772e-01 1.785327722291e-01 + 1.827016841676e-01 1.868406702343e-01 1.909470970372e-01 1.950184095010e-01 + 1.990521319470e-01 2.030458691132e-01 2.069973071203e-01 2.109042143913e-01 + 2.147644425300e-01 2.185759271637e-01 2.223366887532e-01 2.260448333735e-01 + 2.296985534659e-01 2.332961285635e-01 2.368359259883e-01 2.403164015184e-01 + 2.437361000242e-01 2.470936560680e-01 2.503877944643e-01 2.536173307941e-01 + 2.567811718687e-01 2.598783161344e-01 2.629078540119e-01 2.658689681622e-01 + 2.687609336703e-01 2.715831181385e-01 2.743349816801e-01 2.770160768045e-01 + 2.796260481848e-01 2.821646322991e-01 2.846316569368e-01 2.870270405617e-01 + 2.893507915244e-01 2.916030071159e-01 2.937838724568e-01 2.958936592165e-01 + 2.979327241558e-01 2.999015074910e-01 3.018005310753e-01 3.036303963958e-01 + 3.053917823855e-01 3.070854430504e-01 3.087122049138e-01 3.102729642800e-01 + 3.117686843217e-01 3.132003919968e-01 3.145691748007e-01 3.158761773616e-01 + 3.171225978887e-01 3.183096844825e-01 3.194387313184e-01 3.205110747165e-01 + 3.215280891102e-01 3.224911829276e-01 3.234017944007e-01 3.242613873178e-01 + 3.250714467358e-01 3.258334746676e-01 3.265489857632e-01 3.272195030005e-01 + 3.278465534041e-01 3.284316638083e-01 3.289763566833e-01 3.294821460400e-01 + 3.299505334311e-01 3.303830040645e-01 3.307810230451e-01 3.311460317596e-01 + 3.314794444187e-01 3.317826447703e-01 3.320569829964e-01 3.323037728045e-01 + 3.325242887240e-01 3.327197636176e-01 3.328913864141e-01 3.330403000707e-01 + 3.331675997688e-01 3.332743313479e-01 3.333614899808e-01 3.334300190898e-01 + 3.334808095046e-01 3.335146988611e-01 3.335324712362e-01 3.335348570169e-01 + 3.335225329963e-01 3.334961226910e-01 3.334561968719e-01 3.334032742993e-01 + 3.333378226533e-01 3.332602596472e-01 3.331709543145e-01 3.330702284554e-01 + 3.329583582309e-01 3.328355758905e-01 3.327020716204e-01 3.325579954971e-01 + 3.324034595327e-01 3.322385397965e-01 3.320632786004e-01 3.318776867305e-01 + 3.316817457137e-01 3.314754101037e-01 3.312586097732e-01 3.310312521991e-01 + 3.307932247286e-01 3.305443968140e-01 3.302846222045e-01 3.300137410855e-01 + 3.297315821551e-01 3.294379646291e-01 3.291327001664e-01 3.288155947089e-01 + 3.284864502277e-01 3.281450663734e-01 3.277912420235e-01 3.274247767258e-01 + 3.270454720348e-01 3.266531327399e-01 3.262475679848e-01 3.258285922791e-01 + 3.253960264031e-01 3.249496982080e-01 3.244894433141e-01 3.240151057111e-01 + 3.235265382640e-01 3.230236031293e-01 3.225061720878e-01 3.219741267977e-01 + 3.214273589753e-01 3.208657705097e-01 3.202892735159e-01 3.196977903361e-01 + 3.190912534920e-01 3.184696055980e-01 3.178327992398e-01 3.171807968251e-01 + 3.165135704132e-01 3.158311015288e-01 3.151333809650e-01 3.144204085828e-01 + 3.136921931093e-01 3.129487519405e-01 3.121901109528e-01 3.114163043257e-01 + 3.106273743789e-01 3.098233714272e-01 3.090043536530e-01 3.081703870000e-01 + 3.073215450875e-01 3.064579091460e-01 3.055795679733e-01 3.046866179124e-01 + 3.037791628473e-01 3.028573142168e-01 3.019211910449e-01 3.009709199837e-01 + 3.000066353677e-01 2.990284792760e-01 2.980366015995e-01 2.970311601096e-01 + 2.960123205256e-01 2.949802565766e-01 2.939351500550e-01 2.928771908572e-01 + 2.918065770101e-01 2.907235146773e-01 2.896282181444e-01 2.885209097789e-01 + 2.874018199626e-01 2.862711869938e-01 2.851292569574e-01 2.839762835612e-01 + 2.828125279361e-01 2.816382584002e-01 2.804537501854e-01 2.792592851268e-01 + 2.780551513135e-01 2.768416427035e-01 2.756190587022e-01 2.743877037054e-01 + 2.731478866101e-01 2.718999202934e-01 2.706441210630e-01 2.693808080818e-01 + 2.681103027691e-01 2.668329281827e-01 2.655490083841e-01 2.642588677918e-01 + 2.629628305257e-01 2.616612197468e-01 2.603543569973e-01 2.590425615431e-01 + 2.577261497254e-01 2.564054343234e-01 2.550807239336e-01 2.537523223690e-01 + 2.524205280819e-01 2.510856336148e-01 2.497479250814e-01 2.484076816821e-01 + 2.470651752564e-01 2.457206698752e-01 2.443744214738e-01 2.430266775303e-01 + 2.416776767878e-01 2.403276490244e-01 2.389768148696e-01 2.376253856693e-01 + 2.362735633985e-01 2.349215406215e-01 2.335695004993e-01 2.322176168427e-01 + 2.308660542107e-01 2.295149680505e-01 2.281645048801e-01 2.268148025079e-01 + 2.254659902893e-01 2.241181894169e-01 2.227715132395e-01 2.214260676101e-01 + 2.200819512566e-01 2.187392561734e-01 2.173980680295e-01 2.160584665911e-01 + 2.147205261531e-01 2.133843159777e-01 2.120499007356e-01 2.107173409477e-01 + 2.093866934224e-01 2.080580116870e-01 2.067313464089e-01 2.054067458057e-01 + 2.040842560397e-01 2.027639215959e-01 2.014457856411e-01 2.001298903626e-01 + 1.988162772844e-01 1.975049875605e-01 1.961960622439e-01 1.948895425313e-01 + 1.935854699820e-01 1.922838867126e-01 1.909848355661e-01 1.896883602570e-01 + 1.883945054925e-01 1.871033170714e-01 1.858148419608e-01 1.845291283528e-01 + 1.832462257028e-01 1.819661847500e-01 1.806890575230e-01 1.794148973316e-01 + 1.781437587474e-01 1.768756975739e-01 1.756107708097e-01 1.743490366054e-01 + 1.730905542168e-01 1.718353839558e-01 1.705835871410e-01 1.693352260502e-01 + 1.680903638747e-01 1.668490646785e-01 1.656113933627e-01 1.643774156363e-01 + 1.631471979940e-01 1.619208077023e-01 1.606983127936e-01 1.594797820690e-01 + 1.582652851095e-01 1.570548922957e-01 1.558486748356e-01 1.546467047996e-01 + 1.534490551626e-01 1.522557998511e-01 1.510670137957e-01 1.498827729867e-01 + 1.487031545317e-01 1.475282367141e-01 1.463580990499e-01 1.451928223430e-01 + 1.440324887355e-01 1.428771817522e-01 1.417269863377e-01 1.405819888841e-01 + 1.394422772484e-01 1.383079407565e-01 1.371790701945e-01 1.360557577845e-01 + 1.349380971443e-01 1.338261832296e-01 1.327201122584e-01 1.316199816166e-01 + 1.305258897445e-01 1.294379360037e-01 1.283562205247e-01 1.272808440351e-01 + 1.262119076693e-01 1.251495127593e-01 1.240937606089e-01 1.230447522513e-01 + 1.220025881919e-01 1.209673681372e-01 1.199391907125e-01 1.189181531695e-01 + 1.179043510856e-01 1.168978780578e-01 1.158988253933e-01 1.149072817984e-01 + 1.139233330690e-01 1.129470617851e-01 1.119785470111e-01 1.110178640052e-01 + 1.100650839403e-01 1.091202736380e-01 1.081834953190e-01 1.072548063722e-01 + 1.063342591428e-01 1.054219007445e-01 1.045177728948e-01 1.036219117758e-01 + 1.027343479229e-01 1.018551061411e-01 1.009842054510e-01 1.001216590636e-01 + 9.926747438676e-02 9.842165306066e-02 9.758419102407e-02 9.675507861019e-02 + 9.593430067154e-02 9.512183673289e-02 9.431766117100e-02 9.352174341974e-02 + 9.273404819881e-02 9.195453576412e-02 9.118316217773e-02 9.041987959496e-02 + 8.966463656615e-02 8.891737835054e-02 8.817804723933e-02 8.744658288524e-02 + 8.672292263557e-02 8.600700186577e-02 8.529875431069e-02 8.459811239043e-02 + 8.390500752805e-02 8.321937045620e-02 8.254113151010e-02 8.187022090425e-02 + 8.120656899039e-02 8.055010649473e-02 7.990076473215e-02 7.925847579580e-02 + 7.862317272047e-02 7.799478961851e-02 7.737326178724e-02 7.675852578712e-02 + 7.615051949044e-02 7.554918210011e-02 7.495445413904e-02 7.436627741032e-02 + 7.378459492921e-02 7.320935082777e-02 7.264049023377e-02 7.207795912515e-02 + 7.152170416220e-02 7.097167249935e-02 7.042781157905e-02 6.989006891008e-02 + 6.935839183313e-02 6.883272727635e-02 6.831302150386e-02 6.779921986027e-02 + 6.729126651417e-02 6.678910420386e-02 6.629267398831e-02 6.580191500639e-02 + 6.531676424753e-02 6.483715633651e-02 6.436302333538e-02 6.389429456489e-02 + 6.343089644819e-02 6.297275237872e-02 6.251978261465e-02 6.207190420132e-02 + 6.162903092348e-02 6.119107328836e-02 6.075793854064e-02 6.032953070989e-02 + 5.990575069075e-02 5.948649635606e-02 5.907166270232e-02 5.866114202716e-02 + 5.825482413767e-02 5.785259658839e-02 5.745434494757e-02 5.705995308962e-02 + 5.666930351187e-02 5.628227767330e-02 5.589875635257e-02 5.551862002274e-02 + 5.514174923964e-02 5.476802504087e-02 5.439732935233e-02 5.402954539874e-02 + 5.366455811507e-02 5.330225455543e-02 5.294252429587e-02 5.258525982809e-02 + 5.223035694043e-02 5.187771508324e-02 5.152723771540e-02 5.117883262919e-02 + 5.083241225067e-02 5.048789391323e-02 5.014520010183e-02 4.980425866596e-02 + 4.946500299965e-02 4.912737218681e-02 4.879131111088e-02 4.845677052790e-02 + 4.812370710226e-02 4.779208340507e-02 4.746186787507e-02 4.713303474256e-02 + 4.680556391700e-02 4.647944083924e-02 4.615465629983e-02 4.583120622479e-02 + 4.550909143097e-02 4.518831735276e-02 4.486889374290e-02 4.455083434951e-02 + 4.423415657251e-02 4.391888110189e-02 4.360503154125e-02 4.329263401941e-02 + 4.298171679359e-02 4.267230984709e-02 4.236444448504e-02 4.205815293123e-02 + 4.175346792938e-02 4.145042235187e-02 4.114904881903e-02 4.084937933182e-02 + 4.055144492077e-02 4.025527531356e-02 3.996089862381e-02 3.966834106303e-02 + 3.937762667789e-02 3.908877711417e-02 3.880181140907e-02 3.851674581284e-02 + 3.823359364061e-02 3.795236515496e-02 3.767306747960e-02 3.739570454399e-02 + 3.712027705870e-02 3.684678252095e-02 3.657521524940e-02 3.630556644717e-02 + 3.603782429176e-02 3.577197405025e-02 3.550799821804e-02 3.524587667924e-02 + 3.498558688648e-02 3.472710405799e-02 3.447040138951e-02 3.421545027861e-02 + 3.396222055886e-02 3.371068074129e-02 3.346079826055e-02 3.321253972330e-02 + 3.296587115608e-02 3.272075825041e-02 3.247716660271e-02 3.223506194657e-02 + 3.199441037557e-02 3.175517855432e-02 3.151733391617e-02 3.128084484582e-02 + 3.104568084542e-02 3.081181268296e-02 3.057921252197e-02 3.034785403168e-02 + 3.011771247720e-02 2.988876478926e-02 2.966098961367e-02 2.943436734036e-02 + 2.920888011263e-02 2.898451181706e-02 2.876124805488e-02 2.853907609589e-02 + 2.831798481597e-02 2.809796461963e-02 2.787900734896e-02 2.766110618073e-02 + 2.744425551321e-02 2.722845084462e-02 2.701368864497e-02 2.679996622331e-02 + 2.658728159220e-02 2.637563333139e-02 2.616502045259e-02 2.595544226715e-02 + 2.574689825840e-02 2.553938796046e-02 2.533291084494e-02 2.512746621705e-02 + 2.492305312246e-02 2.471967026600e-02 2.451731594324e-02 2.431598798565e-02 + 2.411568372015e-02 2.391639994319e-02 2.371813290988e-02 2.352087833795e-02 + 2.332463142650e-02 2.312938688913e-02 2.293513900089e-02 2.274188165825e-02 + 2.254960845126e-02 2.235831274679e-02 2.216798778147e-02 2.197862676325e-02 + 2.179022297985e-02 2.160276991252e-02 2.141626135370e-02 2.123069152650e-02 + 2.104605520447e-02 2.086234782987e-02 2.067956562851e-02 2.049770571950e-02 + 2.031676621827e-02 2.013674633105e-02 1.995764643940e-02 1.977946817320e-02 + 1.960221447093e-02 1.942588962593e-02 1.925049931764e-02 1.907605062696e-02 + 1.890255203509e-02 1.873001340530e-02 1.855844594732e-02 1.838786216434e-02 + 1.821827578274e-02 1.804970166468e-02 1.788215570442e-02 1.771565470872e-02 + 1.755021626260e-02 1.738585858128e-02 1.722260034983e-02 1.706046055176e-02 + 1.689945828840e-02 1.673961259059e-02 1.658094222462e-02 1.642346549446e-02 + 1.626720004216e-02 1.611216264854e-02 1.595836903636e-02 1.580583367806e-02 + 1.565456961008e-02 1.550458825598e-02 1.535589926029e-02 1.520851033505e-02 + 1.506242712081e-02 1.491765306395e-02 1.477418931163e-02 1.463203462603e-02 + 1.449118531890e-02 1.435163520753e-02 1.421337559297e-02 1.407639526106e-02 + 1.394068050660e-02 1.380621518090e-02 1.367298076256e-02 1.354095645105e-02 + 1.341011928270e-02 1.328044426809e-02 1.315190454993e-02 1.302447158014e-02 + 1.289811531459e-02 1.277280442391e-02 1.264850651853e-02 1.252518838580e-02 + 1.240281623724e-02 1.228135596345e-02 1.216077339442e-02 1.204103456266e-02 + 1.192210596676e-02 1.180395483275e-02 1.168654937071e-02 1.156985902411e-02 + 1.145385470948e-02 1.133850904383e-02 1.122379655768e-02 1.110969389147e-02 + 1.099617997321e-02 1.088323617570e-02 1.077084645140e-02 1.065899744375e-02 + 1.054767857340e-02 1.043688209862e-02 1.032660314887e-02 1.021683973127e-02 + 1.010759270959e-02 9.998865755762e-03 9.890665274411e-03 9.783000300814e-03 + 9.675882373215e-03 9.569325380609e-03 9.463345387348e-03 9.357960436190e-03 + 9.253190331614e-03 9.149056405462e-03 9.045581267126e-03 8.942788540697e-03 + 8.840702591626e-03 8.739348245567e-03 8.638750502174e-03 8.538934246695e-03 + 8.439923962243e-03 8.341743445629e-03 8.244415529651e-03 8.147961814653e-03 + 8.052402412124e-03 7.957755702996e-03 7.864038113155e-03 7.771263908551e-03 + 7.679445012095e-03 7.588590844324e-03 7.498708189616e-03 7.409801089455e-03 + 7.321870764025e-03 7.234915563106e-03 7.148930946973e-03 7.063909497714e-03 + 6.979840961045e-03 6.896712318445e-03 6.814507889077e-03 6.733209460716e-03 + 6.652796448548e-03 6.573246080466e-03 6.494533607195e-03 6.416632535306e-03 + 6.339514880962e-03 6.263151441992e-03 6.187512085700e-03 6.112566049638e-03 + 6.038282252417e-03 5.964629611512e-03 5.891577364923e-03 5.819095393477e-03 + 5.747154540560e-03 5.675726926015e-03 5.604786251027e-03 5.534308090832e-03 + 5.464270172227e-03 5.394652632934e-03 5.325438260075e-03 5.256612705157e-03 + 5.188164673202e-03 5.120086083877e-03 5.052372202740e-03 4.985021741002e-03 + 4.918036922476e-03 4.851423516729e-03 4.785190837741e-03 4.719351707723e-03 + 4.653922386069e-03 4.588922463782e-03 4.524374723999e-03 4.460304969641e-03 + 4.396741819477e-03 4.333716474235e-03 4.271262454711e-03 4.209415314066e-03 + 4.148212326803e-03 4.087692157147e-03 4.027894509765e-03 3.968859765959e-03 + 3.910628608617e-03 3.853241639363e-03 3.796738991404e-03 3.741159941686e-03 + 3.686542525966e-03 3.632923160424e-03 3.580336273388e-03 3.528813950694e-03 + 3.478385598074e-03 3.429077623846e-03 3.380913144987e-03 3.333911719504e-03 + 3.288089107753e-03 3.243457065117e-03 3.200023168180e-03 3.157790676225e-03 + 3.116758429546e-03 3.076920785778e-03 3.038267595042e-03 3.000784214379e-03 + 2.964451561582e-03 2.929246208150e-03 2.895140510747e-03 2.862102780160e-03 + 2.830097486428e-03 2.799085498450e-03 2.769024356055e-03 2.739868572225e-03 + 2.711569962856e-03 2.684078001177e-03 2.657340193727e-03 2.631302474563e-03 + 2.605909614196e-03 2.581105639610e-03 2.556834261605e-03 2.533039305623e-03 + 2.509665142181e-03 2.486657113028e-03 2.463961949162e-03 2.441528176936e-03 + 2.419306508562e-03 2.397250213468e-03 2.375315467138e-03 2.353461674270e-03 + 2.331651763314e-03 2.309852449708e-03 2.288034465451e-03 2.266172752912e-03 + 2.244246621144e-03 2.222239863309e-03 2.200140834165e-03 2.177942486956e-03 + 2.155642369413e-03 2.133242578960e-03 2.110749677588e-03 2.088174567246e-03 + 2.065532326964e-03 2.042842013265e-03 2.020126425789e-03 1.997411840344e-03 + 1.974727711935e-03 1.952106350561e-03 1.929582572861e-03 1.907193332877e-03 + 1.884977335421e-03 1.862974635658e-03 1.841226228675e-03 1.819773632874e-03 + 1.798658471060e-03 1.777922053158e-03 1.757604964409e-03 1.737746662873e-03 + 1.718385089967e-03 1.699556297605e-03 1.681294095376e-03 1.663629720967e-03 + 1.646591536820e-03 1.630204755763e-03 1.614491198038e-03 1.599469081883e-03 + 1.585152849459e-03 1.571553029600e-03 1.558676138473e-03 1.546524618901e-03 + 1.535096818702e-03 1.524387008022e-03 1.514385435281e-03 1.505078420958e-03 + 1.496448488087e-03 1.488474527982e-03 1.481131999379e-03 1.474393158840e-03 + 1.468227320014e-03 1.462601139013e-03 1.457478922985e-03 1.452822958691e-03 + 1.448593857753e-03 1.444750915059e-03 1.441252476708e-03 1.438056313816e-03 + 1.435119998411e-03 1.432401277705e-03 1.429858443008e-03 1.427450689646e-03 + 1.425138464347e-03 1.422883796686e-03 1.420650611370e-03 1.418405018348e-03 + 1.416115577942e-03 1.413753538499e-03 1.411293044324e-03 1.408711311967e-03 + 1.405988773276e-03 1.403109183969e-03 1.400059696831e-03 1.396830899019e-03 + 1.393416813309e-03 1.389814863520e-03 1.386025804687e-03 1.382053618950e-03 + 1.377905378449e-03 1.373591076886e-03 1.369123431712e-03 1.364517659209e-03 + 1.359791225027e-03 1.354963572972e-03 1.350055835072e-03 1.345090526158e-03 + 1.340091226314e-03 1.335082254736e-03 1.330088338568e-03 1.325134280387e-03 + 1.320244627980e-03 1.315443350067e-03 1.310753521538e-03 1.306197021692e-03 + 1.301794248805e-03 1.297563854221e-03 1.293522498904e-03 1.289684635222e-03 + 1.286062316381e-03 1.282665035732e-03 1.279499597766e-03 1.276570022346e-03 + 1.273877483332e-03 1.271420282396e-03 1.269193858445e-03 1.267190832699e-03 + 1.265401089050e-03 1.263811888987e-03 1.262408019942e-03 1.261171975588e-03 + 1.260084166225e-03 1.259123157061e-03 1.258265931889e-03 1.257488179329e-03 + 1.256764598567e-03 1.256069221259e-03 1.255375746073e-03 1.254657882162e-03 + 1.253889697719e-03 1.253045969679e-03 1.252102530568e-03 1.251036608468e-03 + 1.249827156115e-03 1.248455165195e-03 1.246903962003e-03 1.245159480791e-03 + 1.243210511309e-03 1.241048917250e-03 1.238669822607e-03 1.236071763183e-03 + 1.233256800884e-03 1.230230598718e-03 1.227002454832e-03 1.223585294304e-03 + 1.219995617827e-03 1.216253406838e-03 1.212381985105e-03 1.208407837201e-03 + 1.204360384764e-03 1.200271721869e-03 1.196176311280e-03 1.192110643761e-03 + 1.188112863059e-03 1.184222359526e-03 1.180479335734e-03 1.176924347772e-03 + 1.173597826197e-03 1.170539580923e-03 1.167788294524e-03 1.165381008644e-03 + 1.163352608357e-03 1.161735309430e-03 1.160558153495e-03 1.159846516149e-03 + 1.159621633002e-03 1.159900148561e-03 1.160693692745e-03 1.162008489629e-03 + 1.163845002784e-03 1.166197621278e-03 1.169054390067e-03 1.172396788073e-03 + 1.176199556742e-03 1.180430581275e-03 1.185050826006e-03 1.190014324476e-03 + 1.195268223709e-03 1.200752880740e-03 1.206402007798e-03 1.212142860311e-03 + 1.217896459261e-03 1.223577836049e-03 1.229096284108e-03 1.234355596804e-03 + 1.239254265987e-03 1.243685610069e-03 1.247537795214e-03 1.250693708939e-03 + 1.253030643260e-03 1.254419745990e-03 1.254725205838e-03 1.253803151713e-03 + 1.251500271431e-03 1.247652191945e-03 1.242081713695e-03 1.234597055936e-03 + 1.224990346281e-03 1.213036671935e-03 1.198494094895e-03 1.181105107936e-03 + 1.160600058454e-03 1.136703076609e-03 1.109140995104e-03 1.077655623903e-03 + 1.042019532246e-03 1.002055187734e-03 9.576569147457e-04 9.088146822842e-04 + 8.556382502198e-04 7.983797434367e-04 7.374523479483e-04 6.734426001632e-04 + 6.071137363907e-04 5.393978382182e-04 4.713750811802e-04 4.042392668743e-04 + 3.392499503276e-04 2.776727810949e-04 2.207110364072e-04 1.694325881947e-04 + 1.246975521146e-04 8.709246421976e-05 5.687689937986e-05 3.394791666666e-05 + 1.782658941679e-05 7.669224498780e-06 2.303840394477e-06 2.902582909615e-07 + 0.000000000000e+00 + Type L N + 0 2 1 + 0.000000000000e+00 -1.344964533376e-04 -5.377154898535e-04 -1.208847356325e-03 + -2.146546575734e-03 -3.348938073802e-03 -4.813625698213e-03 -6.537703069216e-03 + -8.517766681948e-03 -1.074993116966e-02 -1.322984661841e-02 -1.595271781227e-02 + -1.891332527327e-02 -2.210604794895e-02 -2.552488738938e-02 -2.916349324632e-02 + -3.301518991840e-02 -3.707300416005e-02 -4.132969346639e-02 -4.577777504261e-02 + -5.040955516432e-02 -5.521715873463e-02 -6.019255884467e-02 -6.532760614691e-02 + -7.061405785457e-02 -7.604360618566e-02 -8.160790607780e-02 -8.729860200728e-02 + -9.310735375630e-02 -9.902586098225e-02 -1.050458864555e-01 -1.111592778441e-01 + -1.173579879386e-01 -1.236340932232e-01 -1.299798107158e-01 -1.363875130143e-01 + -1.428497415028e-01 -1.493592176861e-01 -1.559088526402e-01 -1.624917545784e-01 + -1.691012345515e-01 -1.757308103157e-01 -1.823742084151e-01 -1.890253645424e-01 + -1.956784222530e-01 -2.023277301235e-01 -2.089678374527e-01 -2.155934886200e-01 + -2.221996162206e-01 -2.287813331087e-01 -2.353339234863e-01 -2.418528331791e-01 + -2.483336592501e-01 -2.547721390996e-01 -2.611641392049e-01 -2.675056436533e-01 + -2.737927426193e-01 -2.800216209367e-01 -2.861885469088e-01 -2.922898615000e-01 + -2.983219680401e-01 -3.042813225693e-01 -3.101644249400e-01 -3.159678107847e-01 + -3.216880444463e-01 -3.273217129561e-01 -3.328654211342e-01 -3.383157878716e-01 + -3.436694436427e-01 -3.489230292807e-01 -3.540731960375e-01 -3.591166069330e-01 + -3.640499393869e-01 -3.688698891109e-01 -3.735731752275e-01 -3.781565465667e-01 + -3.826167890816e-01 -3.869507343097e-01 -3.911552687978e-01 -3.952273443977e-01 + -3.991639893290e-01 -4.029623199000e-01 -4.066195527683e-01 -4.101330176169e-01 + -4.135001701185e-01 -4.167186050554e-01 -4.197860694606e-01 -4.227004756457e-01 + -4.254599139794e-01 -4.280626652849e-01 -4.305072127243e-01 -4.327922530443e-01 + -4.349167070619e-01 -4.368797292745e-01 -4.386807164889e-01 -4.403193153669e-01 + -4.417954288020e-01 -4.431092210433e-01 -4.442611215010e-01 -4.452518271750e-01 + -4.460823036611e-01 -4.467537847027e-01 -4.472677702666e-01 -4.476260231368e-01 + -4.478305640309e-01 -4.478836652573e-01 -4.477878429451e-01 -4.475458478879e-01 + -4.471606550593e-01 -4.466354518640e-01 -4.459736252032e-01 -4.451787474418e-01 + -4.442545613726e-01 -4.432049642838e-01 -4.420339912411e-01 -4.407457977042e-01 + -4.393446416005e-01 -4.378348649850e-01 -4.362208754173e-01 -4.345071271901e-01 + -4.326981025407e-01 -4.307982929814e-01 -4.288121808794e-01 -4.267442214152e-01 + -4.245988250456e-01 -4.223803405901e-01 -4.200930390563e-01 -4.177410983111e-01 + -4.153285886968e-01 -4.128594596832e-01 -4.103375276380e-01 -4.077664647855e-01 + -4.051497894156e-01 -4.024908573925e-01 -3.997928550023e-01 -3.970587931649e-01 + -3.942915030282e-01 -3.914936329450e-01 -3.886676468269e-01 -3.858158238541e-01 + -3.829402595113e-01 -3.800428679076e-01 -3.771253853284e-01 -3.741893749583e-01 + -3.712362327036e-01 -3.682671940364e-01 -3.652833417721e-01 -3.622856146891e-01 + -3.592748168905e-01 -3.562516278040e-01 -3.532166127134e-01 -3.501702337111e-01 + -3.471128609585e-01 -3.440447841442e-01 -3.409662240248e-01 -3.378773439403e-01 + -3.347782611934e-01 -3.316690581893e-01 -3.285497932340e-01 -3.254205108975e-01 + -3.222812518499e-01 -3.191320620905e-01 -3.159730014921e-01 -3.128041515962e-01 + -3.096256225979e-01 -3.064375594734e-01 -3.032401472093e-01 -3.000336151024e-01 + -2.968182401125e-01 -2.935943492540e-01 -2.903623210293e-01 -2.871225859105e-01 + -2.838756258898e-01 -2.806219731263e-01 -2.773622077258e-01 -2.740969546992e-01 + -2.708268801531e-01 -2.675526867721e-01 -2.642751086613e-01 -2.609949056206e-01 + -2.577128569293e-01 -2.544297547236e-01 -2.511463970515e-01 -2.478635806941e-01 + -2.445820938425e-01 -2.413027087206e-01 -2.380261742433e-01 -2.347532087998e-01 + -2.314844932483e-01 -2.282206642058e-01 -2.249623077140e-01 -2.217099533557e-01 + -2.184640688938e-01 -2.152250554959e-01 -2.119932436042e-01 -2.087688895001e-01 + -2.055521726087e-01 -2.023431935775e-01 -1.991419731580e-01 -1.959484519078e-01 + -1.927624907254e-01 -1.895838722175e-01 -1.864123028940e-01 -1.832474161735e-01 + -1.800887761777e-01 -1.769358822802e-01 -1.737881743736e-01 -1.706450388058e-01 + -1.675058149325e-01 -1.643698022271e-01 -1.612362678820e-01 -1.581044548310e-01 + -1.549735901183e-01 -1.518428935360e-01 -1.487115864504e-01 -1.455789007321e-01 + -1.424440877084e-01 -1.393064270530e-01 -1.361652355283e-01 -1.330198755003e-01 + -1.298697631440e-01 -1.267143762623e-01 -1.235532616462e-01 -1.203860419050e-01 + -1.172124217032e-01 -1.140321933458e-01 -1.108452416577e-01 -1.076515481129e-01 + -1.044511941733e-01 -1.012443638061e-01 -9.803134515513e-02 -9.481253135091e-02 + -9.158842044999e-02 -8.835961450448e-02 -8.512681776900e-02 -8.189083406092e-02 + -7.865256329726e-02 -7.541299723920e-02 -7.217321448204e-02 -6.893437473546e-02 + -6.569771244520e-02 -6.246452981272e-02 -5.923618927518e-02 -5.601410551225e-02 + -5.279973705042e-02 -4.959457753878e-02 -4.640014677280e-02 -4.321798154444e-02 + -4.004962639812e-02 -3.689662437250e-02 -3.376050780735e-02 -3.064278929409e-02 + -2.754495284647e-02 -2.446844536530e-02 -2.141466846813e-02 -1.838497075080e-02 + -1.538064054327e-02 -1.240289921736e-02 -9.452895098390e-03 -6.531698026696e-03 + -3.640294609015e-03 -7.795841927002e-04 2.049624410874e-03 4.846615434539e-03 + 7.610767883204e-03 1.034155647659e-02 1.303855180928e-02 1.570141973769e-02 + 1.832992001043e-02 2.092390416549e-02 2.348331272383e-02 2.600817171542e-02 + 2.849858857924e-02 3.095474748407e-02 3.337690412183e-02 3.576538002919e-02 + 3.812055649706e-02 4.044286813056e-02 4.273279612432e-02 4.499086132002e-02 + 4.721761711404e-02 4.941364228346e-02 5.157953379866e-02 5.371589968970e-02 + 5.582335203234e-02 5.790250011734e-02 5.995394386396e-02 6.197826753544e-02 + 6.397603381022e-02 6.594777825883e-02 6.789400427105e-02 6.981517847349e-02 + 7.171172667191e-02 7.358403034711e-02 7.543242372727e-02 7.725719145349e-02 + 7.905856684937e-02 8.083673079901e-02 8.259181123184e-02 8.432388320661e-02 + 8.603296958095e-02 8.771904224720e-02 8.938202390982e-02 9.102179037448e-02 + 9.263817331441e-02 9.423096347483e-02 9.579991427289e-02 9.734474574666e-02 + 9.886514880404e-02 1.003607897202e-01 1.018313148301e-01 1.032763553610e-01 + 1.046955323513e-01 1.060884615975e-01 1.074547585777e-01 1.087940432951e-01 + 1.101059449904e-01 1.113901066736e-01 1.126461894255e-01 1.138738764270e-01 + 1.150728766736e-01 1.162429283381e-01 1.173838017502e-01 1.184953019625e-01 + 1.195772708822e-01 1.206295889471e-01 1.216521763362e-01 1.226449937034e-01 + 1.236080424352e-01 1.245413644318e-01 1.254450414226e-01 1.263191938266e-01 + 1.271639791778e-01 1.279795901360e-01 1.287662521130e-01 1.295242205422e-01 + 1.302537778291e-01 1.309552300202e-01 1.316289032308e-01 1.322751398768e-01 + 1.328942947548e-01 1.334867310194e-01 1.340528161037e-01 1.345929176340e-01 + 1.351073993857e-01 1.355966173286e-01 1.360609158096e-01 1.365006239164e-01 + 1.369160520671e-01 1.373074888654e-01 1.376751982594e-01 1.380194170387e-01 + 1.383403527001e-01 1.386381817088e-01 1.389130481773e-01 1.391650629799e-01 + 1.393943033157e-01 1.396008127285e-01 1.397846015865e-01 1.399456480205e-01 + 1.400838993128e-01 1.401992737273e-01 1.402916627611e-01 1.403609338004e-01 + 1.404069331510e-01 1.404294894184e-01 1.404284171994e-01 1.404035210523e-01 + 1.403545997026e-01 1.402814504438e-01 1.401838736858e-01 1.400616776071e-01 + 1.399146828591e-01 1.397427272768e-01 1.395456705444e-01 1.393233987671e-01 + 1.390758289010e-01 1.388029129936e-01 1.385046421884e-01 1.381810504518e-01 + 1.378322179786e-01 1.374582742412e-01 1.370594006445e-01 1.366358327587e-01 + 1.361878621005e-01 1.357158374419e-01 1.352201656277e-01 1.347013118885e-01 + 1.341597996409e-01 1.335962097723e-01 1.330111794105e-01 1.324054001860e-01 + 1.317796159980e-01 1.311346203011e-01 1.304712529337e-01 1.297903965140e-01 + 1.290929724335e-01 1.283799364821e-01 1.276522741425e-01 1.269109955954e-01 + 1.261571304782e-01 1.253917224450e-01 1.246158235750e-01 1.238304886807e-01 + 1.230367695655e-01 1.222357092831e-01 1.214283364509e-01 1.206156596677e-01 + 1.197986620865e-01 1.189782961921e-01 1.181554788293e-01 1.173310865280e-01 + 1.165059511659e-01 1.156808560090e-01 1.148565321639e-01 1.140336554747e-01 + 1.132128438906e-01 1.123946553282e-01 1.115795860458e-01 1.107680695435e-01 + 1.099604759975e-01 1.091571122315e-01 1.083582222246e-01 1.075639881472e-01 + 1.067745319156e-01 1.059899172459e-01 1.052101521883e-01 1.044351921148e-01 + 1.036649431304e-01 1.028992658741e-01 1.021379796725e-01 1.013808670036e-01 + 1.006276782293e-01 9.987813654887e-02 9.913194312590e-02 9.838878233890e-02 + 9.764832710505e-02 9.691024422568e-02 9.617419970220e-02 9.543986397152e-02 + 9.470691701113e-02 9.397505326489e-02 9.324398634309e-02 9.251345345202e-02 + 9.178321951137e-02 9.105308092082e-02 9.032286894041e-02 8.959245265354e-02 + 8.886174148497e-02 8.813068725104e-02 8.739928572364e-02 8.666757769405e-02 + 8.593564952800e-02 8.520363320790e-02 8.447170586314e-02 8.374008879455e-02 + 8.300904600371e-02 8.227888224258e-02 8.154994060370e-02 8.082259967542e-02 + 8.009727029072e-02 7.937439190234e-02 7.865442862007e-02 7.793786494968e-02 + 7.722520127540e-02 7.651694913061e-02 7.581362630308e-02 7.511575182290e-02 + 7.442384088214e-02 7.373839973598e-02 7.305992063519e-02 7.238887683941e-02 + 7.172571776005e-02 7.107086428019e-02 7.042470429727e-02 6.978758853221e-02 + 6.915982664597e-02 6.854168370178e-02 6.793337700789e-02 6.733507337200e-02 + 6.674688679503e-02 6.616887662712e-02 6.560104620514e-02 6.504334198576e-02 + 6.449565318416e-02 6.395781192320e-02 6.342959389338e-02 6.291071951927e-02 + 6.240085562307e-02 6.189961757172e-02 6.140657188929e-02 6.092123931211e-02 + 6.044309826029e-02 5.997158869514e-02 5.950611632868e-02 5.904605714831e-02 + 5.859076221667e-02 5.813956270441e-02 5.769177511151e-02 5.724670663108e-02 + 5.680366060848e-02 5.636194204750e-02 5.592086311555e-02 5.547974859929e-02 + 5.503794126309e-02 5.459480706364e-02 5.414974017511e-02 5.370216778153e-02 + 5.325155459492e-02 5.279740706025e-02 5.233927721153e-02 5.187676614600e-02 + 5.140952708752e-02 5.093726801332e-02 5.045975382272e-02 4.997680803041e-02 + 4.948831397080e-02 4.899421550493e-02 4.849451722508e-02 4.798928415727e-02 + 4.747864096584e-02 4.696277066862e-02 4.644191287569e-02 4.591636156836e-02 + 4.538646243930e-02 4.485260981813e-02 4.431524321023e-02 4.377484347991e-02 + 4.323192871151e-02 4.268704978499e-02 4.214078570430e-02 4.159373871901e-02 + 4.104652928079e-02 4.049979087767e-02 3.995416478953e-02 3.941029480848e-02 + 3.886882196787e-02 3.833037932299e-02 3.779558682576e-02 3.726504633442e-02 + 3.673933679764e-02 3.621900965058e-02 3.570458445816e-02 3.519654483844e-02 + 3.469533469595e-02 3.420135479215e-02 3.371495967675e-02 3.323645500040e-02 + 3.276609522572e-02 3.230408175006e-02 3.185056144960e-02 3.140562565094e-02 + 3.096930953247e-02 3.054159195413e-02 3.012239571072e-02 2.971158820030e-02 + 2.930898249605e-02 2.891433880651e-02 2.852736630640e-02 2.814772531720e-02 + 2.777502981428e-02 2.740885023498e-02 2.704871656006e-02 2.669412163915e-02 + 2.634452472945e-02 2.599935521574e-02 2.565801647898e-02 2.531988988013e-02 + 2.498433882591e-02 2.465071288291e-02 2.431835190725e-02 2.398659015739e-02 + 2.365476035883e-02 2.332219769067e-02 2.298824366528e-02 2.265224987429e-02 + 2.231358157586e-02 2.197162110033e-02 2.162577105352e-02 2.127545729944e-02 + 2.092013170665e-02 2.055927464481e-02 2.019239722104e-02 1.981904324791e-02 + 1.943879093770e-02 1.905125432030e-02 1.865608438438e-02 1.825296994414e-02 + 1.784163823638e-02 1.742185525466e-02 1.699342582957e-02 1.655619346618e-02 + 1.611003995120e-02 1.565488474432e-02 1.519068416943e-02 1.471743042242e-02 + 1.423515041359e-02 1.374390446308e-02 1.324378486851e-02 1.273491436408e-02 + 1.221744449073e-02 1.169155389645e-02 1.115744658593e-02 1.061535013781e-02 + 1.006551390725e-02 9.508207230678e-03 8.943717648458e-03 8.372349159965e-03 + 7.794420524418e-03 7.210263619266e-03 6.620221866494e-03 6.024648735644e-03 + 5.423906330743e-03 4.818364066741e-03 4.208397439388e-03 3.594386890933e-03 + 2.976716772431e-03 2.355774401946e-03 1.731949216506e-03 1.105632014316e-03 + 4.772142825239e-04 -1.529123953357e-04 -7.843568590222e-04 -1.416728826094e-03 + -2.049639289610e-03 -2.682700867956e-03 -3.315528116112e-03 -3.947737807884e-03 + -4.578949198732e-03 -5.208784278680e-03 -5.836868024580e-03 -6.462828660597e-03 + -7.086297935240e-03 -7.706911422595e-03 -8.324308854613e-03 -8.938134490429e-03 + -9.548037527656e-03 -1.015367255957e-02 -1.075470008086e-02 -1.135078704364e-02 + -1.194160746379e-02 -1.252684307706e-02 -1.310618404243e-02 -1.367932968967e-02 + -1.424598930631e-02 -1.480588295854e-02 -1.535874233920e-02 -1.590431163516e-02 + -1.644234840564e-02 -1.697262446192e-02 -1.749492673870e-02 -1.800905814638e-02 + -1.851483839357e-02 -1.901210476867e-02 -1.950071286932e-02 -1.998053726864e-02 + -2.045147210751e-02 -2.091343160217e-02 -2.136635045744e-02 -2.181018417614e-02 + -2.224490925636e-02 -2.267052326893e-02 -2.308704480886e-02 -2.349451331534e-02 + -2.389298875632e-02 -2.428255117517e-02 -2.466330009806e-02 -2.503535380246e-02 + -2.539884844836e-02 -2.575393707572e-02 -2.610078847280e-02 -2.643958592171e-02 + -2.677052582900e-02 -2.709381625047e-02 -2.740967532069e-02 -2.771832959894e-02 + -2.802001234463e-02 -2.831496173601e-02 -2.860341904694e-02 -2.888562679749e-02 + -2.916182689429e-02 -2.943225877734e-02 -2.969715759016e-02 -2.995675239006e-02 + -3.021126441548e-02 -3.046090542684e-02 -3.070587613712e-02 -3.094636474740e-02 + -3.118254560229e-02 -3.141457797855e-02 -3.164260501982e-02 -3.186675282834e-02 + -3.208712972382e-02 -3.230382567742e-02 -3.251691192789e-02 -3.272644078436e-02 + -3.293244561927e-02 -3.313494105242e-02 -3.333392332572e-02 -3.352937086589e-02 + -3.372124503079e-02 -3.390949103307e-02 -3.409403903280e-02 -3.427480538939e-02 + -3.445169406094e-02 -3.462459813804e-02 -3.479340149722e-02 -3.495798055807e-02 + -3.511820612702e-02 -3.527394530946e-02 -3.542506347131e-02 -3.557142623037e-02 + -3.571290145749e-02 -3.584936126713e-02 -3.598068397705e-02 -3.610675601699e-02 + -3.622747376653e-02 -3.634274530298e-02 -3.645249204086e-02 -3.655665024571e-02 + -3.665517240585e-02 -3.674802844733e-02 -3.683520677861e-02 -3.691671515348e-02 + -3.699258134199e-02 -3.706285360174e-02 -3.712760094328e-02 -3.718691318579e-02 + -3.724090080132e-02 -3.728969454777e-02 -3.733344489343e-02 -3.737232123746e-02 + -3.740651093340e-02 -3.743621812449e-02 -3.746166240159e-02 -3.748307729666e-02 + -3.750070862610e-02 -3.751481270031e-02 -3.752565441689e-02 -3.753350525649e-02 + -3.753864120135e-02 -3.754134059729e-02 -3.754188198091e-02 -3.754054189402e-02 + -3.753759270754e-02 -3.753330047730e-02 -3.752792285377e-02 -3.752170706748e-02 + -3.751488801096e-02 -3.750768643745e-02 -3.750030729524e-02 -3.749293821531e-02 + -3.748574816853e-02 -3.747888630669e-02 -3.747248100016e-02 -3.746663908275e-02 + -3.746144531229e-02 -3.745696205327e-02 -3.745322918559e-02 -3.745026424116e-02 + -3.744806276753e-02 -3.744659891577e-02 -3.744582624687e-02 -3.744567874930e-02 + -3.744607205740e-02 -3.744690485884e-02 -3.744806047671e-02 -3.744940861030e-02 + -3.745080721685e-02 -3.745210451462e-02 -3.745314108692e-02 -3.745375206474e-02 + -3.745376936552e-02 -3.745302396418e-02 -3.745134817257e-02 -3.744857790296e-02 + -3.744455489143e-02 -3.743912885713e-02 -3.743215957418e-02 -3.742351883341e-02 + -3.741309227254e-02 -3.740078105446e-02 -3.738650337474e-02 -3.737019578135e-02 + -3.735181429129e-02 -3.733133529101e-02 -3.730875620965e-02 -3.728409595646e-02 + -3.725739511629e-02 -3.722871589942e-02 -3.719814184477e-02 -3.716577727797e-02 + -3.713174652853e-02 -3.709619291276e-02 -3.705927749193e-02 -3.702117761719e-02 + -3.698208527557e-02 -3.694220525326e-02 -3.690175313465e-02 -3.686095315738e-02 + -3.682003594531e-02 -3.677923614306e-02 -3.673878997662e-02 -3.669893276573e-02 + -3.665989641460e-02 -3.662190690758e-02 -3.658518183705e-02 -3.654992799033e-02 + -3.651633902214e-02 -3.648459323861e-02 -3.645485151762e-02 -3.642725538929e-02 + -3.640192529880e-02 -3.637895907208e-02 -3.635843060288e-02 -3.634038877771e-02 + -3.632485665265e-02 -3.631183089354e-02 -3.630128148843e-02 -3.629315173837e-02 + -3.628735852978e-02 -3.628379288860e-02 -3.628232081365e-02 -3.628278438339e-02 + -3.628500312769e-02 -3.628877565304e-02 -3.629388150699e-02 -3.630008326497e-02 + -3.630712882007e-02 -3.631475385407e-02 -3.632268446583e-02 -3.633063993139e-02 + -3.633833556817e-02 -3.634548567470e-02 -3.635180651579e-02 -3.635701932254e-02 + -3.636085327597e-02 -3.636304844278e-02 -3.636335863225e-02 -3.636155414319e-02 + -3.635742437122e-02 -3.635078024743e-02 -3.634145648089e-02 -3.632931357944e-02 + -3.631423962491e-02 -3.629615178133e-02 -3.627499751725e-02 -3.625075552585e-02 + -3.622343632967e-02 -3.619308255978e-02 -3.615976890231e-02 -3.612360170896e-02 + -3.608471827122e-02 -3.604328576164e-02 -3.599949984890e-02 -3.595358299696e-02 + -3.590578246183e-02 -3.585636800291e-02 -3.580562932886e-02 -3.575387330108e-02 + -3.570142092049e-02 -3.564860412604e-02 -3.559576243552e-02 -3.554323946132e-02 + -3.549137933548e-02 -3.544052307975e-02 -3.539100495732e-02 -3.534314884372e-02 + -3.529726465454e-02 -3.525364486754e-02 -3.521256117634e-02 -3.517426131198e-02 + -3.513896606734e-02 -3.510686655806e-02 -3.507812175117e-02 -3.505285629101e-02 + -3.503115864862e-02 -3.501307961858e-02 -3.499863118348e-02 -3.498778576314e-02 + -3.498047586180e-02 -3.497659412271e-02 -3.497599379551e-02 -3.497848961777e-02 + -3.498385910764e-02 -3.499184426055e-02 -3.500215363860e-02 -3.501446483699e-02 + -3.502842730804e-02 -3.504366551909e-02 -3.505978241704e-02 -3.507636316860e-02 + -3.509297914207e-02 -3.510919209349e-02 -3.512455851709e-02 -3.513863411803e-02 + -3.515097836299e-02 -3.516115906291e-02 -3.516875694095e-02 -3.517337013802e-02 + -3.517461860788e-02 -3.517214835436e-02 -3.516563546347e-02 -3.515478988462e-02 + -3.513935891673e-02 -3.511913035696e-02 -3.509393527246e-02 -3.506365035820e-02 + -3.502819984757e-02 -3.498755694597e-02 -3.494174476155e-02 -3.489083671188e-02 + -3.483495638979e-02 -3.477427687640e-02 -3.470901949472e-02 -3.463945200208e-02 + -3.456588622524e-02 -3.448867514713e-02 -3.440820945990e-02 -3.432491360390e-02 + -3.423924131782e-02 -3.415167072998e-02 -3.406269902599e-02 -3.397283673251e-02 + -3.388260166110e-02 -3.379251256059e-02 -3.370308252961e-02 -3.361481224466e-02 + -3.352818306160e-02 -3.344365005094e-02 -3.336163502922e-02 -3.328251965002e-02 + -3.320663861891e-02 -3.313427309693e-02 -3.306564435682e-02 -3.300090775525e-02 + -3.294014708272e-02 -3.288336935072e-02 -3.283050007279e-02 -3.278137909286e-02 + -3.273575700976e-02 -3.269329224209e-02 -3.265354877136e-02 -3.261599459433e-02 + -3.258000090676e-02 -3.254484203016e-02 -3.250969607965e-02 -3.247364635457e-02 + -3.243568341189e-02 -3.239470775492e-02 -3.234953303501e-02 -3.229888961901e-02 + -3.224142831970e-02 -3.217572401761e-02 -3.210027882131e-02 -3.201352431888e-02 + -3.191382237087e-02 -3.179946379081e-02 -3.166866416524e-02 -3.151955600053e-02 + -3.135017637188e-02 -3.115844932571e-02 -3.094216248758e-02 -3.069893769837e-02 + -3.042619608533e-02 -3.012111880721e-02 -2.978060581489e-02 -2.940123633176e-02 + -2.897923633283e-02 -2.851045998584e-02 -2.799039364692e-02 -2.741419234737e-02 + -2.677675947765e-02 -2.607288023845e-02 -2.529741804965e-02 -2.444558018545e-02 + -2.351325423971e-02 -2.249741058234e-02 -2.139655793813e-02 -2.021123007019e-02 + -1.894447204393e-02 -1.760228572357e-02 -1.619398725753e-02 -1.473242567619e-02 + -1.323401260692e-02 -1.171851948433e-02 -1.020861098886e-02 -8.729101618910e-03 + -7.305945344099e-03 -5.964994455209e-03 -4.730590562777e-03 -3.624075248882e-03 + -2.662327019785e-03 -1.856442040786e-03 -1.210676407889e-03 -7.217562050118e-04 + -3.786384033691e-04 -1.627723057406e-04 -4.887060377916e-05 -6.155165367928e-06 + 0.000000000000e+00 \ No newline at end of file diff --git a/examples/dpgen-example/autotest/INPUT b/examples/dpgen-example/autotest/INPUT new file mode 100644 index 0000000000..1aeffea701 --- /dev/null +++ b/examples/dpgen-example/autotest/INPUT @@ -0,0 +1,22 @@ +INPUT_PARAMETERS +# Created by Atomic Simulation Enviroment +ntype 1 +calculation cell-relax +pseudo_rcut 10.0 +pseudo_mesh 1 +ecutwfc 50 +basis_type lcao +ks_solver genelpa +smearing_method gaussian +smearing_sigma 0.01 +mixing_type pulay +mixing_beta 0.7 +scf_nmax 100 +scf_thr 1e-08 +kspacing 0.04 +relax_nmax 100 +cal_force 1 +force_thr 0.001 +cal_stress 1 +stress_thr 0.01 +out_stru 1 diff --git a/examples/dpgen-example/autotest/INPUT.rlx b/examples/dpgen-example/autotest/INPUT.rlx new file mode 100644 index 0000000000..00bbe53869 --- /dev/null +++ b/examples/dpgen-example/autotest/INPUT.rlx @@ -0,0 +1,23 @@ +INPUT_PARAMETERS +# Created by Atomic Simulation Enviroment +ntype 1 +calculation cell-relax +relax_nmax 100 +stress_thr 0.01 +force_thr_ev 0.001 +relax_method cg +pseudo_rcut 10.0 +pseudo_mesh 1 +ecutwfc 50 +basis_type lcao +ks_solver genelpa +smearing_method gaussian +smearing_sigma 0.01 +mixing_type pulay +mixing_beta 0.7 +scf_nmax 100 +scf_thr 1e-08 +cal_force 1 +cal_stress 1 +out_stru 1 +kspacing 0.04 diff --git a/examples/dpgen-example/autotest/confs/STRU b/examples/dpgen-example/autotest/confs/STRU new file mode 100644 index 0000000000..f1b4055d77 --- /dev/null +++ b/examples/dpgen-example/autotest/confs/STRU @@ -0,0 +1,25 @@ +ATOMIC_SPECIES +Al 26.9815385 pp_orb/Al.PD04.PBE.UPF + +NUMERICAL_ORBITAL +pp_orb/Al_gga_10au_100Ry_3s3p2d.orb + +LATTICE_CONSTANT +1.889726125 + +LATTICE_VECTORS + 4.0392185522 0.0000000000 0.0000000000 + 0.0000000000 4.0392185522 0.0000000000 + 0.0000000000 0.0000000000 4.0392185522 + +ATOMIC_POSITIONS +Direct + +Al +0.0000000000 +4 +0.0000000000 0.0000000000 0.0000000000 1 1 1 +0.0000000000 0.5000000000 0.5000000000 1 1 1 +0.5000000000 0.0000000000 0.5000000000 1 1 1 +0.5000000000 0.5000000000 0.0000000000 1 1 1 + diff --git a/examples/dpgen-example/autotest/machine.json b/examples/dpgen-example/autotest/machine.json new file mode 100644 index 0000000000..0d9c75af15 --- /dev/null +++ b/examples/dpgen-example/autotest/machine.json @@ -0,0 +1,108 @@ +{ + "api_version": "1.0", + "deepmd_version": "2.1.0", + "train" :[ + { + "command": "dp", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "00*/train.log", + "grouped":true, + "job_name": "Al-train-VASP", + "disk_size": 100, + "scass_type":"c8_m32_1 * NVIDIA V100", + "platform": "ali", + "image_name":"LBG_DeePMD-kit_2.1.0_v1", + "on_demand":0 + } + } + }, + "resources": { + "number_node":123473334635, + "local_root":"./", + "cpu_per_node": 4, + "gpu_per_node": 1, + "queue_name": "GPU", + "group_size": 1 + } + }], + "model_devi": + [{ + "command": "lmp -i input.lammps -v restart 0", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "*/model_devi.log", + "grouped":true, + "job_name": "Al-devia-ABACUS", + "disk_size": 200, + "scass_type":"c8_m32_1 * NVIDIA V100", + "platform": "ali", + "image_name":"LBG_DeePMD-kit_2.1.0_v1", + "on_demand":0 + } + } + }, + "resources": { + "number_node": 28348383, + "local_root":"./", + "cpu_per_node": 4, + "gpu_per_node": 1, + "queue_name": "GPU", + "group_size": 100 + } + }], + "fp": + [{ + "command": "OMP_NUM_THREADS=1 mpirun -np 16 abacus", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "task*/fp.log", + "grouped":true, + "job_name": "al-DFT-test", + "disk_size": 100, + "scass_type":"c32_m128_cpu", + "platform": "ali", + "image_name":"XXXXX", + "on_demand":0 + } + } + }, + "resources": { + "number_node": 712254638889, + "cpu_per_node": 32, + "gpu_per_node": 0, + "queue_name": "CPU", + "group_size": 2, + "local_root":"./", + "source_list": ["/opt/intel/oneapi/setvars.sh"] + } + } + ] +} diff --git a/examples/dpgen-example/autotest/property.json b/examples/dpgen-example/autotest/property.json new file mode 100644 index 0000000000..c90a77619e --- /dev/null +++ b/examples/dpgen-example/autotest/property.json @@ -0,0 +1,56 @@ +{ + "structures": ["confs/"], + "interaction": { + "type": "abacus", + "incar": "./INPUT", + "potcar_prefix":"./", + "potcars": {"Al": "Al.PD04.PBE.UPF"}, + "orb_files": {"Al":"Al_gga_10au_100Ry_3s3p2d.orb"} + }, + "_relaxation": { + "cal_type": "relaxation", + "cal_setting":{ + "input_prop": "./INPUT.rlx" + } + }, + "properties": [ + { + "type": "eos", + "vol_start": 0.85, + "vol_end": 1.15, + "vol_step": 0.01, + "cal_setting": { + "relax_pos": true, + "relax_shape": true, + "relax_vol": false, + "overwrite_interaction":{ + "type": "abacus", + "incar": "./INPUT", + "potcar_prefix":"./", + "orb_files": {"Al":"Al_gga_10au_100Ry_3s3p2d.orb"}, + "potcars": {"Al": "Al.PD04.PBE.UPF"} } + } + }, + { + "type": "elastic", + "skip": false, + "norm_deform": 1e-2, + "shear_deform": 1e-2 + }, + { + "type": "vacancy", + "skip": false, + "supercell": [2, 2, 2] + }, + { + "type": "surface", + "skip": true, + "min_slab_size": 15, + "min_vacuum_size":11, + "pert_xz": 0.01, + "max_miller": 3, + "cal_type": "static" + } + ] +} + diff --git a/examples/dpgen-example/init_and_run/machine.json b/examples/dpgen-example/init_and_run/machine.json new file mode 100644 index 0000000000..0d9c75af15 --- /dev/null +++ b/examples/dpgen-example/init_and_run/machine.json @@ -0,0 +1,108 @@ +{ + "api_version": "1.0", + "deepmd_version": "2.1.0", + "train" :[ + { + "command": "dp", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "00*/train.log", + "grouped":true, + "job_name": "Al-train-VASP", + "disk_size": 100, + "scass_type":"c8_m32_1 * NVIDIA V100", + "platform": "ali", + "image_name":"LBG_DeePMD-kit_2.1.0_v1", + "on_demand":0 + } + } + }, + "resources": { + "number_node":123473334635, + "local_root":"./", + "cpu_per_node": 4, + "gpu_per_node": 1, + "queue_name": "GPU", + "group_size": 1 + } + }], + "model_devi": + [{ + "command": "lmp -i input.lammps -v restart 0", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "*/model_devi.log", + "grouped":true, + "job_name": "Al-devia-ABACUS", + "disk_size": 200, + "scass_type":"c8_m32_1 * NVIDIA V100", + "platform": "ali", + "image_name":"LBG_DeePMD-kit_2.1.0_v1", + "on_demand":0 + } + } + }, + "resources": { + "number_node": 28348383, + "local_root":"./", + "cpu_per_node": 4, + "gpu_per_node": 1, + "queue_name": "GPU", + "group_size": 100 + } + }], + "fp": + [{ + "command": "OMP_NUM_THREADS=1 mpirun -np 16 abacus", + "machine": { + "batch_type": "DpCloudServer", + "context_type": "DpCloudServerContext", + "local_root" : "./", + "remote_profile":{ + "email": "xxx@xxx.xxx", + "password": "xxx", + "program_id": 000, + "input_data":{ + "api_version":2, + "job_type": "indicate", + "log_file": "task*/fp.log", + "grouped":true, + "job_name": "al-DFT-test", + "disk_size": 100, + "scass_type":"c32_m128_cpu", + "platform": "ali", + "image_name":"XXXXX", + "on_demand":0 + } + } + }, + "resources": { + "number_node": 712254638889, + "cpu_per_node": 32, + "gpu_per_node": 0, + "queue_name": "CPU", + "group_size": 2, + "local_root":"./", + "source_list": ["/opt/intel/oneapi/setvars.sh"] + } + } + ] +} From d742487076684680d6375879941b78b7b533dec4 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 25 Aug 2022 19:33:14 +0800 Subject: [PATCH 62/63] fix : makkefile --- source/Makefile.Objects | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/Makefile.Objects b/source/Makefile.Objects index eff63da8dc..36799e6333 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -16,8 +16,7 @@ OBJS_MAIN=driver.o\ input.o \ write_input.o\ input_conv.o\ -run_pw.o\ -run_lcao.o\ +driver_run.o OBJS_PW=xc_3.o \ vdwd2.o\ From d178ea4fe6669757e7b8d871fb35409554635fae Mon Sep 17 00:00:00 2001 From: dyzheng Date: Thu, 25 Aug 2022 20:17:46 +0800 Subject: [PATCH 63/63] Fix: updated key word of total time and replace "-eq" with "==" --- tests/integrate/tools/catch_properties.sh | 42 ++++++++++------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/tests/integrate/tools/catch_properties.sh b/tests/integrate/tools/catch_properties.sh index 5971afd3c4..9d11bc46dd 100755 --- a/tests/integrate/tools/catch_properties.sh +++ b/tests/integrate/tools/catch_properties.sh @@ -46,11 +46,7 @@ gamma_only=`grep gamma_only INPUT | awk '{print $2}' | sed s/[[:space:]]//g` imp_sol=`grep imp_sol INPUT | awk '{print $2}' | sed s/[[:space:]]//g` #echo $running_path base=`grep -En '(^|[[:space:]])basis_type($|[[:space:]])' INPUT | awk '{print $2}' | sed s/[[:space:]]//g` -if [ $base == "pw" ]; then word="plane_wave_line" -else -word="lcao_line" -fi -#echo $word +word="driver_line" test -e $1 && rm $1 #-------------------------------------------- # if NOT non-self-consistent calculations @@ -66,7 +62,7 @@ fi #echo $etot #echo "hasforce:"$has_force -if ! test -z "$has_force" && [ $has_force -eq 1 ]; then +if ! test -z "$has_force" && [ $has_force == 1 ]; then nn3=`echo "$natom + 4" |bc` #nn1=`echo "$natom + 1" |bc` #nn5=`echo "$natom + 6" |bc` @@ -79,7 +75,7 @@ fi #echo $total_force #echo "has_stress:"$has_stress -if ! test -z "$has_stress" && [ $has_stress -eq 1 ]; then +if ! test -z "$has_stress" && [ $has_stress == 1 ]; then #grep -A6 "TOTAL-STRESS" $running_path|sed '1,4d'|sed '4,8d' >stress.txt grep -A6 "TOTAL-STRESS" $running_path| awk 'NF==3' | tail -3> stress.txt total_stress=`sum_file stress.txt` @@ -89,14 +85,14 @@ fi #echo $total_stress -#if ! test -z "$has_charge" && [ $has_charge -eq 1 ]; then +#if ! test -z "$has_charge" && [ $has_charge == 1 ]; then # total_charge=`sum_file OUT.autotest/SPIN1_CHG` # echo "totalchargeref $total_charge" >>$1 #fi #echo $total_charge -if ! test -z "$has_dos" && [ $has_dos -eq 1 ]; then +if ! test -z "$has_dos" && [ $has_dos == 1 ]; then total_dos=`cat OUT.autotest/DOS1_smearing.dat | awk 'END {print}' | awk '{print $3}'` echo "totaldosref $total_dos" >> $1 fi @@ -104,7 +100,7 @@ fi # echo "totaldossmearing $smearing_dos" >> $1 #echo Onsager coefficiency -if ! test -z "$has_cond" && [ $has_cond -eq 1 ]; then +if ! test -z "$has_cond" && [ $has_cond == 1 ]; then onref=refOnsager.txt oncal=Onsager.txt python3 ../tools/CompareFile.py $onref $oncal 2 @@ -114,13 +110,13 @@ fi #echo total_dos #echo $has_band -if ! test -z "$has_band" && [ $has_band -eq 1 ]; then +if ! test -z "$has_band" && [ $has_band == 1 ]; then total_band=`sum_file OUT.autotest/BANDS_1.dat` echo "totalbandref $total_band" >>$1 fi #echo $has_hs -if ! test -z "$has_hs" && [ $has_hs -eq 1 ]; then - if ! test -z "$gamma_only" && [ $gamma_only -eq 1 ]; then +if ! test -z "$has_hs" && [ $has_hs == 1 ]; then + if ! test -z "$gamma_only" && [ $gamma_only == 1 ]; then href=data-0-H.ref hcal=OUT.autotest/data-0-H sref=data-0-H.ref @@ -139,7 +135,7 @@ if ! test -z "$has_hs" && [ $has_hs -eq 1 ]; then fi #echo $has_hs2 -if ! test -z "$has_hs2" && [ $has_hs2 -eq 1 ]; then +if ! test -z "$has_hs2" && [ $has_hs2 == 1 ]; then python3 ../tools/CompareFile.py data-HR-sparse_SPIN0.csr.ref OUT.autotest/data-HR-sparse_SPIN0.csr 8 echo "CompareHR_pass $?" >>$1 python3 ../tools/CompareFile.py data-SR-sparse_SPIN0.csr.ref OUT.autotest/data-SR-sparse_SPIN0.csr 8 @@ -147,7 +143,7 @@ if ! test -z "$has_hs2" && [ $has_hs2 -eq 1 ]; then fi # echo "$has_wfc_r" ## test out_wfc_r > 0 -if ! test -z "$has_wfc_r" && [ $has_wfc_r -eq 1 ]; then +if ! test -z "$has_wfc_r" && [ $has_wfc_r == 1 ]; then if [[ ! -f OUT.autotest/running_scf.log ]];then echo "Can't find file OUT.autotest/running_scf.log" exit 1 @@ -168,7 +164,7 @@ if ! test -z "$has_wfc_r" && [ $has_wfc_r -eq 1 ]; then fi # echo "$has_wfc_pw" ## test out_wfc_pw > 0 -if ! test -z "$has_wfc_pw" && [ $has_wfc_pw -eq 1 ]; then +if ! test -z "$has_wfc_pw" && [ $has_wfc_pw == 1 ]; then if [[ ! -f OUT.autotest/WAVEFUNC1.txt ]];then echo "Can't find file OUT.autotest/WAVEFUNC1.txt" exit 1 @@ -189,8 +185,8 @@ if ! test -z "$has_wfc_pw" && [ $has_wfc_pw -eq 1 ]; then fi # echo "$has_lowf" ## test out_wfc_lcao > 0 -if ! test -z "$has_lowf" && [ $has_lowf -eq 1 ]; then - if ! test -z "$gamma_only" && [ $gamma_only -eq 1 ]; then +if ! test -z "$has_lowf" && [ $has_lowf == 1 ]; then + if ! test -z "$gamma_only" && [ $gamma_only == 1 ]; then wfc_cal=OUT.autotest/LOWF_GAMMA_S1.dat wfc_ref=LOWF_GAMMA_S1.dat.ref else @@ -214,7 +210,7 @@ if ! test -z "$has_lowf" && [ $has_lowf -eq 1 ]; then echo "Compare_wfc_lcao_pass $?" >>$1 fi -if ! test -z "$out_dm" && [ $out_dm -eq 1 ]; then +if ! test -z "$out_dm" && [ $out_dm == 1 ]; then dmfile=`ls OUT.autotest/ | grep "^SPIN1_DM"` if test -z "$dmfile"; then echo "Can't find DM files" @@ -241,7 +237,7 @@ if ! test -z "$out_dm" && [ $out_dm -eq 1 ]; then fi fi -if ! test -z "$out_mul" && [ $out_mul -eq 1 ]; then +if ! test -z "$out_mul" && [ $out_mul == 1 ]; then python3 ../tools/CompareFile.py mulliken.txt.ref OUT.autotest/mulliken.txt 8 echo "Compare_mulliken_pass $?" >>$1 fi @@ -287,7 +283,7 @@ if [ $calculation == "istate" ]; then fi fi -if ! test -z "$imp_sol" && [ $imp_sol -eq 1 ]; then +if ! test -z "$imp_sol" && [ $imp_sol == 1 ]; then esol_el=`grep E_sol_el $running_path | awk '{print $3}'` esol_cav=`grep E_sol_cav $running_path | awk '{print $3}'` echo "esolelref $esol_el" >>$1 @@ -298,14 +294,14 @@ fi ttot=`grep $word $running_path | awk '{print $3}'` echo "totaltimeref $ttot" >>$1 -if ! test -z "$deepks_out_labels" && [ $deepks_out_labels -eq 1 ]; then +if ! test -z "$deepks_out_labels" && [ $deepks_out_labels == 1 ]; then sed '/n_des/d' descriptor.dat > des_tmp.txt total_des=`sum_file des_tmp.txt 5` rm des_tmp.txt echo "totaldes $total_des" >>$1 fi -if ! test -z "$deepks_bandgap" && [ $deepks_bandgap -eq 1 ]; then +if ! test -z "$deepks_bandgap" && [ $deepks_bandgap == 1 ]; then odelta=`python3 get_odelta.py` echo "odelta $odelta" >>$1 oprec=`python3 get_oprec.py`