From 483ac92055eb731896af416f7b7e4cf079f5fa5f Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Wed, 25 Aug 2021 22:31:36 +0800 Subject: [PATCH 001/478] Add read_pp_blps.o to Makefile.Objects --- source/Makefile.Objects | 1 + tests/integrate/CASES | 1 + 2 files changed, 2 insertions(+) diff --git a/source/Makefile.Objects b/source/Makefile.Objects index 6ddf5aa7f6..1fe5cf332c 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -32,6 +32,7 @@ read_pp.o \ read_pp_upf100.o \ read_pp_upf201.o \ read_pp_vwr.o \ +read_pp_blps.o\ pseudo_nc.o \ VL_in_pw.o\ VNL_in_pw.o\ diff --git a/tests/integrate/CASES b/tests/integrate/CASES index 7297d842e8..082388ec33 100644 --- a/tests/integrate/CASES +++ b/tests/integrate/CASES @@ -1,5 +1,6 @@ 101_PW_15_f_pseudopots 101_PW_15_pseudopots +101_PW_blps_pseudopots 101_PW_OU_pseudopots 101_PW_upf201_pseudopots 101_PW_VW_pseudopots From c8b82ff0bcde64da5ac82bbf328d547e5808337a Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Wed, 22 Sep 2021 10:22:03 +0800 Subject: [PATCH 002/478] update annotation in read_pp_blps.cpp --- source/module_cell/read_pp_blps.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/module_cell/read_pp_blps.cpp b/source/module_cell/read_pp_blps.cpp index af2084aacb..16a3bf34d0 100644 --- a/source/module_cell/read_pp_blps.cpp +++ b/source/module_cell/read_pp_blps.cpp @@ -64,7 +64,7 @@ int Pseudopot_upf::read_pseudo_blps(std::ifstream &ifs) delete[] vloc; this->r = new double[mesh]; // Bohr this->rab = new double[mesh]; - this->vloc = new double[mesh]; // Hatree + this->vloc = new double[mesh]; // Hartree ModuleBase::GlobalFunc::ZEROS(r,mesh); ModuleBase::GlobalFunc::ZEROS(rab,mesh); ModuleBase::GlobalFunc::ZEROS(vloc,mesh); @@ -72,7 +72,7 @@ int Pseudopot_upf::read_pseudo_blps(std::ifstream &ifs) for(int i = 0;i < mesh; ++i) { ifs >> num >> this->r[i] >> this->vloc[i]; - this->vloc[i] = this->vloc[i]*2; + this->vloc[i] = this->vloc[i]*2; // Hartree to Ry } rab[0] = r[1] - r[0]; for(int i = 1; i < mesh - 1; ++i) From 6530da704bba7314b980ec0636c5aead2305db2e Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Wed, 22 Sep 2021 10:35:16 +0800 Subject: [PATCH 003/478] Add some overload functions in hamilt_pw & diago_cg. --- CMakeLists.txt | 4 +- source/src_pw/diago_cg_gpu.cu | 307 ++++++++++++++++----- source/src_pw/diago_cg_gpu.h | 82 ++++-- source/src_pw/hamilt.cu | 78 ++++-- source/src_pw/hamilt_pw_gpu.cu | 455 +++++++++++++++++++++++++++++++- source/src_pw/hamilt_pw_gpu.h | 24 +- source/src_pw/use_fft.h | 8 +- source/src_pw/use_fft_kernel.cu | 56 +++- source/src_pw/use_fft_kernel.h | 5 +- 9 files changed, 897 insertions(+), 122 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 190da83f2b..241a857ffe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ ######################################## # CMake build system # This file is part of ABACUS -cmake_minimum_required(VERSION 3.18) +cmake_minimum_required(VERSION 3.15) ######################################## project(ABACUS @@ -13,7 +13,7 @@ project(ABACUS option(ENABLE_DEEPKS "Enable DeePKS functionality" OFF) option(ENABLE_LIBXC "Enable LibXC functionality" OFF) -option(USE_CUDA "Enable support to CUDA." OFF) +option(USE_CUDA "Enable support to CUDA." ON) option(ENABLE_ASAN "Enable AddressSanitizer" OFF) option(BUILD_TESTING "Build ABACUS unit tests" OFF) diff --git a/source/src_pw/diago_cg_gpu.cu b/source/src_pw/diago_cg_gpu.cu index 5bb59c5de4..6fa0fcc317 100644 --- a/source/src_pw/diago_cg_gpu.cu +++ b/source/src_pw/diago_cg_gpu.cu @@ -97,6 +97,18 @@ Diago_CG_GPU::~Diago_CG_GPU() // cublasDestroy(ddot_handle); } +template +void test_print(T *data, int size) +{ + T *h_data = (T*)malloc(size * sizeof(T)); + cudaMemcpy(h_data, data, size*sizeof(T), cudaMemcpyDeviceToHost); + cout< void Diago_CG_GPU::diag ( @@ -110,7 +122,7 @@ void Diago_CG_GPU::diag const int &maxter, const bool &reorder, int ¬conv, - T &avg_iter + double &avg_iter ) { @@ -162,6 +174,7 @@ void Diago_CG_GPU::diag for (int m=0; m2) GlobalV::ofs_running << "Diagonal Band : " << m << endl; + // cout<<"====band====="<::diag this->schmit_orth(dim, dmx, m, phi, sphi, phi_m); + // cout<<"====phi_m after schmit===="<(phi_m, 15); + GlobalC::hm.hpw.h_1psi_gpu(dim, phi_m, hphi, sphi); + // cout<<"====hphi after hpsi===="<(hphi, 15); + T em_host = 0; em_host = ddot_real(dim, phi_m, hphi); @@ -186,12 +205,25 @@ void Diago_CG_GPU::diag for (iter = 0;iter < maxter; iter++) { + // cout<<"******iter:"<calculate_gradient( precondition, dim, hphi, sphi, g, pphi ); + + // cout<<"====g after cal_grad===="<(g, 15); + this->orthogonal_gradient( dim, dmx, g, scg, lagrange, phi, m ); + + // cout<<"====lag after orth===="<(lagrange, 5); + this->calculate_gamma_cg( iter, dim, precondition, g, scg, g0, cg, gg_last, cg_norm, theta, phi_m);// scg used as sg converged = this->update_psi( dim, cg_norm, theta, pphi, cg, scg, phi_m , em_host, eps, hphi, sphi); // pphi is used as hcg + + // cout<<"====hphi after update===="<(hphi, 15); + cudaMemcpy(&e[m], &em_host, sizeof(T), cudaMemcpyHostToDevice); if ( converged ) break; }//end iter @@ -203,7 +235,8 @@ void Diago_CG_GPU::diag ++notconv; } - avg_iter += static_cast(iter) + 1.00; + // cout<<"now_iter:"<(iter) + 1.00; if (m > 0 && reorder) { @@ -281,9 +314,9 @@ void Diago_CG_GPU::calculate_gradient( // kernel_precondition(data, res, size, precondition) // (2) PH|psi> : g[i] = hpsi[i]/precondition[i] - kernel_precondition<<>>(g, hpsi, dim, precondition); + kernel_precondition<<>>(g, hpsi, dim, precondition); // (3) PS|psi> : ppsi[i] = spsi[i]/precondition[i] - kernel_precondition<<>>(ppsi, spsi, dim, precondition); + kernel_precondition<<>>(ppsi, spsi, dim, precondition); // Update lambda ! // (4) @@ -293,7 +326,7 @@ void Diago_CG_GPU::calculate_gradient( const T lambda = eh / es; // Update g ! - kernel_get_gredient<<>>(g, ppsi, dim, lambda); + kernel_get_gredient<<>>(g, ppsi, dim, lambda); // kernel_multi_add<<>>(g, g, 1, ppsi, -lambda, dim); ModuleBase::timer::tick("Diago_CG_GPU","calculate_grad"); return; @@ -302,8 +335,61 @@ void Diago_CG_GPU::calculate_gradient( template void Diago_CG_GPU::orthogonal_gradient( const int &dim, const int &dmx, - T2 *g, T2 *sg, T2 *lagrange, - const T2 *eigenfunction, const int m) + float2 *g, float2 *sg, float2 *lagrange, + const float2 *eigenfunction, const int m) +{ + if (test_cg==1) ModuleBase::TITLE("Diago_CG_GPU","orthogonal_gradient"); + ModuleBase::timer::tick("Diago_CG_GPU","orth_grad"); + + GlobalC::hm.hpw.s_1psi_gpu(dim, g, sg); + + int inc=1; + + // cublasHandle_t handle; + // cublasCreate(&handle); + cublasOperation_t trans1 = CUBLAS_OP_C; + // ONE ZERO cufftcomplex? + // cublasZgemv(handle, trans1, dim, m, ONE, eigenfunction, dmx, sg, inc, ZERO, lagrange, inc); + float2 ONE, ZERO, NEG_ONE; + ONE.y = ZERO.x = ZERO.y = 0.0; + ONE.x = 1.0; + NEG_ONE.x = -1.0; + cublasCgemv(diag_handle, trans1, dim, m, &ONE, eigenfunction, dmx, sg, inc, &ZERO, lagrange, inc); + /*for (int i=0; i and |Sg> to all states (0~m-1) + cublasOperation_t trans2 = CUBLAS_OP_N; + + cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, g, inc); + cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, sg, inc); + + /*for (int i=0; i oo = lagrange[i] * eigenfunction(i, j); + g[j] -= oo; + sg[j] -= oo; + } + }*/ + + ModuleBase::timer::tick("Diago_CG_GPU","orth_grad"); + // cublasDestroy(handle); + return; +} + +template +void Diago_CG_GPU::orthogonal_gradient( const int &dim, const int &dmx, + double2 *g, double2 *sg, double2 *lagrange, + const double2 *eigenfunction, const int m) { if (test_cg==1) ModuleBase::TITLE("Diago_CG_GPU","orthogonal_gradient"); ModuleBase::timer::tick("Diago_CG_GPU","orth_grad"); @@ -317,7 +403,7 @@ void Diago_CG_GPU::orthogonal_gradient( const int &dim, const int &dmx, cublasOperation_t trans1 = CUBLAS_OP_C; // ONE ZERO cufftcomplex? // cublasZgemv(handle, trans1, dim, m, ONE, eigenfunction, dmx, sg, inc, ZERO, lagrange, inc); - T2 ONE, ZERO, NEG_ONE; + double2 ONE, ZERO, NEG_ONE; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; NEG_ONE.x = -1.0; @@ -390,7 +476,7 @@ void Diago_CG_GPU::calculate_gamma_cg( int thread = 512; int block = (dim + thread - 1) / thread; - kernel_precondition_inverse<<>>(psg, sg, dim, precondition); + kernel_precondition_inverse<<>>(psg, sg, dim, precondition); // (3) Update gg_now! // gg_now = < g|P|sg > = < g|psg > @@ -424,7 +510,7 @@ void Diago_CG_GPU::calculate_gamma_cg( // cg[i] = gamma * cg[i] + g[i]; // } - kernel_get_gammacg<<>>(dim, cg, g, gamma); + kernel_get_gammacg<<>>(dim, cg, g, gamma); const T norma = gamma * cg_norm * sin(theta); // for (int i = 0;i < dim;i++) @@ -432,7 +518,7 @@ void Diago_CG_GPU::calculate_gamma_cg( // cg[i] -= norma * psi_m[i]; // } - kernel_get_normacg<<>>(dim, cg, psi_m, norma); + kernel_get_normacg<<>>(dim, cg, psi_m, norma); } ModuleBase::timer::tick("Diago_CG_GPU","gamma_cg"); return; @@ -479,7 +565,7 @@ bool Diago_CG_GPU::update_psi( const T e2 = ( e0 + b0 - new_e ) /2.0; if (e1>e2) { - theta += ModuleBase::PI_HALF; + theta += (T)ModuleBase::PI_HALF; } eigenvalue = min( e1, e2 ); @@ -496,9 +582,11 @@ bool Diago_CG_GPU::update_psi( // psi_m[i] = psi_m[i] * cost + sint_norm * cg[i]; // } - kernel_multi_add<<>>(psi_m, psi_m, cost, cg, sint_norm, dim); + kernel_multi_add<<>>(psi_m, psi_m, cost, cg, sint_norm, dim); // cout << "\n overlap2 = " << this->ddot(dim, psi_m, psi_m); + // cout<<"======"<::update_psi( // sphi[i] = sphi[i] * cost + sint_norm * scg[i]; // hpsi[i] = hpsi[i] * cost + sint_norm * hcg[i]; // } - kernel_multi_add<<>>(sphi, sphi, cost, scg, sint_norm, dim); - kernel_multi_add<<>>(hpsi, hpsi, cost, hcg, sint_norm, dim); + kernel_multi_add<<>>(sphi, sphi, cost, scg, sint_norm, dim); + kernel_multi_add<<>>(hpsi, hpsi, cost, hcg, sint_norm, dim); ModuleBase::timer::tick("Diago_CG_GPU","update_psi"); return 0; } @@ -525,17 +613,17 @@ void Diago_CG_GPU::schmit_orth const int& dim, const int& dmx, const int& m, //end - const T2 *psi, // matrix - T2 *sphi, - T2 *psi_m + const float2 *psi, // matrix + float2 *sphi, + float2 *psi_m ) { ModuleBase::timer::tick("Diago_CG_GPU","schmit_orth"); assert( m >= 0 ); // cout<<"orth, dim="<::schmit_orth // cublasCreate(&handle); cublasOperation_t trans1 = CUBLAS_OP_C; - T2 ONE, ZERO, NEG_ONE; + float2 ONE, ZERO, NEG_ONE; + ONE.y = ZERO.x = ZERO.y = 0.0; + ONE.x = 1.0; + NEG_ONE.x = -1.0; + cublasCgemv(diag_handle, trans1, dim, mp1, &ONE, psi, dmx, sphi, inc, &ZERO, lagrange, inc); + + float psi_norm; + CHECK_CUDA(cudaMemcpy(&psi_norm, &lagrange[m], sizeof(float), cudaMemcpyDeviceToHost)); + cublasOperation_t trans2 = CUBLAS_OP_N; + cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, psi, dmx, lagrange, inc, &ONE, psi_m, inc); + + psi_norm -= ddot_real(m, lagrange, lagrange); //next + psi_norm = sqrt(psi_norm); + + int thread = 512; + int block = (dim + thread - 1) / thread; + kernel_normalization<<>>(psi_m, dim, psi_norm); + + GlobalC::hm.hpw.s_1psi_gpu(dim, psi_m, sphi); + + // cublasDestroy(handle); + ModuleBase::timer::tick("Diago_CG_GPU","schmit_orth"); + CHECK_CUDA(cudaFree(lagrange)); + return ; +} + +template +void Diago_CG_GPU::schmit_orth +( + const int& dim, + const int& dmx, + const int& m, //end + const double2 *psi, // matrix + double2 *sphi, + double2 *psi_m +) +{ + ModuleBase::timer::tick("Diago_CG_GPU","schmit_orth"); + assert( m >= 0 ); + // cout<<"orth, dim="<::schmit_orth int thread = 512; int block = (dim + thread - 1) / thread; - kernel_normalization<<>>(psi_m, dim, psi_norm); + kernel_normalization<<>>(psi_m, dim, psi_norm); GlobalC::hm.hpw.s_1psi_gpu(dim, psi_m, sphi); @@ -569,55 +707,90 @@ void Diago_CG_GPU::schmit_orth return ; } +template +float Diago_CG_GPU::ddot_real +( + const int &dim, + const float2* psi_L, + const float2* psi_R, + const bool reduce +) +{ + int dim2=2*dim; + float result; + cublasSdot(diag_handle, dim2, (float*)psi_L, 1, (float*)psi_R, 1, &result); + return result; +} template -T Diago_CG_GPU::ddot_real +double Diago_CG_GPU::ddot_real ( const int &dim, - const T2* psi_L, - const T2* psi_R, + const double2* psi_L, + const double2* psi_R, const bool reduce ) { int dim2=2*dim; - // cublasHandle_t handle; - // cublasCreate(&handle); - T result; - // todo: - cublasDdot(diag_handle, dim2, (T*)psi_L, 1, (T*)psi_R, 1, &result); - // cublasDestroy(handle); + double result; + cublasDdot(diag_handle, dim2, (double*)psi_L, 1, (double*)psi_R, 1, &result); return result; } + +template +float2 Diago_CG_GPU::ddot +( + const int & dim, + const float2 * psi_L, + const float2 * psi_R +) +{ + float2 result; + cublasCdotc(diag_handle, dim, psi_L, 1, psi_R, 1, &result); + return result; +} // end of ddot + template -T2 Diago_CG_GPU::ddot +double2 Diago_CG_GPU::ddot ( const int & dim, - const T2 * psi_L, - const T2 * psi_R + const double2 * psi_L, + const double2 * psi_R ) { + double2 result; + cublasZdotc(diag_handle, dim, psi_L, 1, psi_R, 1, &result); + return result; +} // end of ddot + + +template +float2 Diago_CG_GPU::ddot +( + const int & dim, + const float2 *psi, //complex + const int & m, + float2 *psik +) +{ + // assert(dim > 0) ; // for (int i = 0; i < dim ; i++) // { - // result += conj(psi_L[i]) * psi_R[i] ; + // result += conj(psi(m, i)) * psik[i] ; // } - // cublasHandle_t handle; - // cublasCreate(&handle); - T2 result; - cublasZdotc(diag_handle, dim, psi_L, 1, psi_R, 1, &result); - // Parallel_Reduce::reduce_complex_double_pool( result ); - // cublasDestroy(handle); + float2 result; + cublasCdotc(diag_handle, dim, &psi[m*dim], 1, psik, 1, &result); return result; } // end of ddot -// this return template -T2 Diago_CG_GPU::ddot +double2 Diago_CG_GPU::ddot ( const int & dim, - const T2 *psi, //complex + const double2 *psi, //complex const int & m, - T2 *psik + double2 *psik ) { // assert(dim > 0) ; @@ -625,24 +798,20 @@ T2 Diago_CG_GPU::ddot // { // result += conj(psi(m, i)) * psik[i] ; // } - // cublasHandle_t handle; - // cublasCreate(&handle); - T2 result; + double2 result; cublasZdotc(diag_handle, dim, &psi[m*dim], 1, psik, 1, &result); - // Parallel_Reduce::reduce_complex_double_pool( result ); - // cublasDestroy(handle); return result; } // end of ddot // this return template -T2 Diago_CG_GPU::ddot +float2 Diago_CG_GPU::ddot ( const int & dim, - const T2 *psi_L, + const float2 *psi_L, const int & m, - const T2 *psi_R, + const float2 *psi_R, const int & n ) { @@ -652,13 +821,29 @@ T2 Diago_CG_GPU::ddot // { // result += conj( psi_L(m,i) ) * psi_R(n,i) ; // } - // cublasHandle_t handle; - // cublasCreate(&handle); - T2 result; - cublasZdotc(diag_handle, dim, &psi_L[m*dim], 1, &psi_R[n*dim], 1, &result); - // Parallel_Reduce::reduce_complex_double_pool( result ); + float2 result; + cublasCdotc(diag_handle, dim, &psi_L[m*dim], 1, &psi_R[n*dim], 1, &result); + return result; +} // end of ddot - // cublasDestroy(handle); +template +double2 Diago_CG_GPU::ddot +( + const int & dim, + const double2 *psi_L, + const int & m, + const double2 *psi_R, + const int & n +) +{ + // assert( (dim>0) && (dim<=psi_L.nc) && (dim<=psi_R.nc) ); + + // for ( int i = 0; i < dim ; i++) + // { + // result += conj( psi_L(m,i) ) * psi_R(n,i) ; + // } + double2 result; + cublasZdotc(diag_handle, dim, &psi_L[m*dim], 1, &psi_R[n*dim], 1, &result); return result; } // end of ddot diff --git a/source/src_pw/diago_cg_gpu.h b/source/src_pw/diago_cg_gpu.h index 48624792a7..82594e9e3d 100644 --- a/source/src_pw/diago_cg_gpu.h +++ b/source/src_pw/diago_cg_gpu.h @@ -17,28 +17,52 @@ class Diago_CG_GPU static int moved; - T ddot_real( + float ddot_real( const int & dim, - const T2* psi_L, - const T2* psi_R, + const float2* psi_L, + const float2* psi_R, const bool reduce = true) ; - T2 ddot( + double ddot_real( const int & dim, - const T2* psi_L, - const T2* psi_R ) ; + const double2* psi_L, + const double2* psi_R, + const bool reduce = true) ; + + float2 ddot( + const int & dim, + const float2* psi_L, + const float2* psi_R ) ; - T2 ddot( + double2 ddot( const int & dim, - const T2 *psi, // matrix + const double2* psi_L, + const double2* psi_R ) ; + + float2 ddot( + const int & dim, + const float2 *psi, // matrix const int & m, - T2 *psik ) ; + float2 *psik ) ; - T2 ddot( + double2 ddot( + const int & dim, + const double2 *psi, // matrix + const int & m, + double2 *psik ) ; + + float2 ddot( + const int & dim, + const float2 *psi_L, // matrix + const int & m, + const float2 *psi_R, // matrix + const int & n) ; + + double2 ddot( const int & dim, - const T2 *psi_L, // matrix + const double2 *psi_L, // matrix const int & m, - const T2 *psi_R, // matrix + const double2 *psi_R, // matrix const int & n) ; void diag( @@ -52,15 +76,24 @@ class Diago_CG_GPU const int &maxter, const bool &reorder, int ¬conv, - T &avg_iter); + double &avg_iter); void schmit_orth( const int &dim, const int &dmx, const int &m, - const T2 *psi, // matrix - T2 *spsi, - T2 *psi_m + const float2 *psi, // matrix + float2 *spsi, + float2 *psi_m + ); + + void schmit_orth( + const int &dim, + const int &dmx, + const int &m, + const double2 *psi, // matrix + double2 *spsi, + double2 *psi_m ); private: @@ -79,10 +112,19 @@ class Diago_CG_GPU void orthogonal_gradient( const int &dim, const int &dmx, - T2 *g, - T2 *sg, - T2 *lagrange, - const T2 *eigenfunction, // matrix + float2 *g, + float2 *sg, + float2 *lagrange, + const float2 *eigenfunction, // matrix + const int m); + + void orthogonal_gradient( + const int &dim, + const int &dmx, + double2 *g, + double2 *sg, + double2 *lagrange, + const double2 *eigenfunction, // matrix const int m); void calculate_gamma_cg( diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index c3956da52c..6a6c2e0bae 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -10,7 +10,9 @@ Hamilt::Hamilt() {} Hamilt::~Hamilt() {} -__global__ void cast_d2f(float *dst, double *src, int size) +// in tools.h + +__global__ void hamilt_cast_d2f(float *dst, double *src, int size) { int i = blockIdx.x * blockDim.x + threadIdx.x; if(i < size) @@ -19,7 +21,7 @@ __global__ void cast_d2f(float *dst, double *src, int size) } } -__global__ void cast_f2d(double *dst, float *src, int size) +__global__ void hamilt_cast_f2d(double *dst, float *src, int size) { int i = blockIdx.x * blockDim.x + threadIdx.x; if(i < size) @@ -28,6 +30,27 @@ __global__ void cast_f2d(double *dst, float *src, int size) } } +__global__ void hamilt_cast_d2f(float2 *dst, double2 *src, int size) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(i < size) + { + dst[i].x = __double2float_rn(src[i].x); + dst[i].y = __double2float_rn(src[i].y); + } +} + +__global__ void hamilt_cast_f2d(double2 *dst, float2 *src, int size) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(i < size) + { + dst[i].x = (double)(src[i].x); + dst[i].y = (double)(src[i].y); + } +} + + void Hamilt::diagH_pw( const int &istep, const int &iter, @@ -102,7 +125,10 @@ void Hamilt::diagH_pw( avg_iter += 1.0; } - Diago_CG_GPU cg_gpu; + + // Diago_CG_GPU f_cg_gpu; + Diago_CG_GPU d_cg_gpu; + bool reorder = true; CUFFT_COMPLEX *d_wf_evc; @@ -111,11 +137,11 @@ void Hamilt::diagH_pw( int DIM_CG_GPU2 = GlobalC::wf.npwx * GlobalV::NPOL; double *d_precondition; - // float2 *f_wf_evc; - // float *f_wf_ekb; + float2 *f_wf_evc; + float *f_wf_ekb; // int DIM_CG_GPU = GlobalC::kv.ngk[ik]; // int DIM_CG_GPU2 = GlobalC::wf.npwx * GlobalV::NPOL; - // float *d_precondition; + float *f_precondition; if(GlobalV::NPOL==1) { @@ -127,21 +153,34 @@ void Hamilt::diagH_pw( // CHECK_CUDA(cudaMemcpy(d_wf_ekb, wf.ekb[ik], NBANDS * sizeof(double), cudaMemcpyHostToDevice)); CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_GPU * sizeof(double), cudaMemcpyHostToDevice)); - // CHECK_CUDA(cudaMalloc((void**)&f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(float2))); - // CHECK_CUDA(cudaMalloc((void**)&f_wf_ekb, GlobalV::NBANDS * sizeof(float))); - // CHECK_CUDA(cudaMalloc((void**)&f_precondition, DIM_CG_GPU * sizeof(float))); - // int thread = 512; - // int block = GlobalV::NBANDS * GlobalC::wf.npwx / thread + 1; - // int block2 = DIM_CG_GPU / thread + 1; - // cast_d2f<<>>(f_wf_evc, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx) - // cast_d2f<<>>(f_precondition, d_precondition, ) - + // cast to float + // if(istep < 3) + // { + // CHECK_CUDA(cudaMalloc((void**)&f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(float2))); + // CHECK_CUDA(cudaMalloc((void**)&f_wf_ekb, GlobalV::NBANDS * sizeof(float))); + // CHECK_CUDA(cudaMalloc((void**)&f_precondition, DIM_CG_GPU * sizeof(float))); + // int thread = 512; + // int block = GlobalV::NBANDS * GlobalC::wf.npwx / thread + 1; + // int block2 = GlobalV::NBANDS / thread + 1; + // int block3 = DIM_CG_GPU / thread + 1; + // hamilt_cast_d2f<<>>(f_wf_evc, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); + // hamilt_cast_d2f<<>>(f_precondition, d_precondition, DIM_CG_GPU); + // cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); + // f_cg_gpu.diag(f_wf_evc, f_wf_ekb, DIM_CG_GPU, GlobalC::wf.npwx, + // GlobalV::NBANDS, f_precondition, GlobalV::ETHR, + // GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); + // hamilt_cast_f2d<<>>(d_wf_evc, f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); + // hamilt_cast_f2d<<>>(d_wf_ekb, f_wf_ekb, GlobalV::NBANDS); + // } + // else + // { cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU, GlobalC::wf.npwx, + d_cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU, GlobalC::wf.npwx, GlobalV::NBANDS, d_precondition, GlobalV::ETHR, GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); + // } + cufftDestroy(GlobalC::UFFT.fft_handle); - // to cpu CHECK_CUDA(cudaMemcpy(GlobalC::wf.evc[ik0].c, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaMemcpy(GlobalC::wf.ekb[ik], d_wf_ekb, GlobalV::NBANDS * sizeof(double), cudaMemcpyDeviceToHost)); @@ -150,6 +189,8 @@ void Hamilt::diagH_pw( CHECK_CUDA(cudaFree(d_wf_ekb)); CHECK_CUDA(cudaFree(d_precondition)); } + // comment this to debug. + else { // to gpu @@ -163,7 +204,7 @@ void Hamilt::diagH_pw( // do things cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU2, DIM_CG_GPU2, + d_cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU2, DIM_CG_GPU2, GlobalV::NBANDS, d_precondition, GlobalV::ETHR, GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); cufftDestroy(GlobalC::UFFT.fft_handle); @@ -176,6 +217,7 @@ void Hamilt::diagH_pw( CHECK_CUDA(cudaFree(d_wf_ekb)); CHECK_CUDA(cudaFree(d_precondition)); } + // P.S. : nscf is the flag about reorder. // if diagH_subspace is done once, // we don't need to reorder the eigenvectors order. diff --git a/source/src_pw/hamilt_pw_gpu.cu b/source/src_pw/hamilt_pw_gpu.cu index 0da3132a24..dfd4836776 100644 --- a/source/src_pw/hamilt_pw_gpu.cu +++ b/source/src_pw/hamilt_pw_gpu.cu @@ -5,7 +5,49 @@ #include "../src_io/optical.h" // only get judgement to calculate optical matrix or not. #include "myfunc.h" -__global__ void kernel_copy(int size, CUFFT_COMPLEX* dst, const CUFFT_COMPLEX *src) +// in tools.h + +__global__ void cast_d2f(float *dst, double *src, int size) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(i < size) + { + dst[i] = __double2float_rn(src[i]); + } +} + +__global__ void cast_f2d(double *dst, float *src, int size) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(i < size) + { + dst[i] = (double)(src[i]); + } +} + +__global__ void cast_d2f(float2 *dst, double2 *src, int size) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(i < size) + { + dst[i].x = __double2float_rn(src[i].x); + dst[i].y = __double2float_rn(src[i].y); + } +} + +__global__ void cast_f2d(double2 *dst, float2 *src, int size) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if(i < size) + { + dst[i].x = (double)(src[i].x); + dst[i].y = (double)(src[i].y); + } +} + + +template +__global__ void kernel_copy(int size, T2* dst, const T2 *src) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if(idx < size) @@ -15,7 +57,8 @@ __global__ void kernel_copy(int size, CUFFT_COMPLEX* dst, const CUFFT_COMPLEX *s } } -__global__ void kernel_get_tmhpsi(int size, CUFFT_COMPLEX *dst, const CUFFT_COMPLEX *src, double *g2kin) +template +__global__ void kernel_get_tmhpsi(int size, T2 *dst, const T2 *src, T *g2kin) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if(idx < size) @@ -25,7 +68,8 @@ __global__ void kernel_get_tmhpsi(int size, CUFFT_COMPLEX *dst, const CUFFT_COMP } } -__global__ void kernel_add_tmhpsi(int size, CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src, int *index) +template +__global__ void kernel_add_tmhpsi(int size, T2 *dst, T2 *src, int *index) { int idx = blockIdx.x * blockDim.x + threadIdx.x; int p = index[idx]; @@ -36,7 +80,8 @@ __global__ void kernel_add_tmhpsi(int size, CUFFT_COMPLEX *dst, CUFFT_COMPLEX *s } } -__global__ void kernel_addpp(CUFFT_COMPLEX *ps, double *deeq, const CUFFT_COMPLEX *becp, int nproj, int nprojx, int sum, int m, int nkb) +template +__global__ void kernel_addpp(T2 *ps, T *deeq, const T2 *becp, int nproj, int nprojx, int sum, int m, int nkb) { int ip2 = blockDim.x * blockIdx.x + threadIdx.x; int ib = blockDim.y * blockIdx.y + threadIdx.y; @@ -53,6 +98,17 @@ __global__ void kernel_addpp(CUFFT_COMPLEX *ps, double *deeq, const CUFFT_COMPLE } } +template +void print_test(T *data, int size) +{ + T *h_data = (T*)malloc(size * sizeof(T)); + cudaMemcpy(h_data, data, size*sizeof(T), cudaMemcpyDeviceToHost); + cout<h_psi_gpu(psi, hpsi); @@ -397,6 +453,23 @@ void Hamilt_PW::h_1psi_gpu( const int npw_in, const CUFFT_COMPLEX *psi, return; } +void Hamilt_PW::h_1psi_gpu( const int npw_in, const CUFFT_COMPLEX *psi, + CUFFT_COMPLEX *hpsi, CUFFT_COMPLEX *spsi) +{ + this->h_psi_gpu(psi, hpsi); + + int thread = 512; + int block = (npw_in + thread - 1) / thread; + kernel_copy<<>>(npw_in, spsi, psi); + return; +} + +void Hamilt_PW::s_1psi_gpu(const int dim, const float2 *psi, float2 *spsi) +{ + CHECK_CUDA(cudaMemcpy(spsi, psi, dim*sizeof(float2), cudaMemcpyDeviceToDevice)); + return; +} + void Hamilt_PW::s_1psi_gpu(const int dim, const CUFFT_COMPLEX *psi, CUFFT_COMPLEX *spsi) { CHECK_CUDA(cudaMemcpy(spsi, psi, dim*sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToDevice)); @@ -430,6 +503,224 @@ void Hamilt_PW::s_1psi return; } +void Hamilt_PW::h_psi_gpu(const float2 *psi_in, float2 *hpsi, const int m) +{ + ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); + // int i = 0; + // int j = 0; + // int ig= 0; + + //if(NSPIN!=4) ZEROS(hpsi, wf.npw); + //else ZEROS(hpsi, wf.npwx * NPOL);//added by zhengdy-soc + int dmax = GlobalC::wf.npwx * GlobalV::NPOL; + + // cout<<"dim inside="<>>(f_g2kin, d_g2kin, GlobalC::wf.npw); + + for(int ib = 0 ; ib < m; ++ib) + { + // cout<<"in hpsi-Kinetic, iband = "<<<>>(GlobalC::wf.npw, tmhpsi, tmpsi_in, f_g2kin); + + // if(GlobalC::NSPIN==4){ + // for(ig=GlobalC::wf.npw; ig < GlobalC::wf.npwx; ++ig) + // { + // tmhpsi[ig] = 0; + // } + // tmhpsi += GlobalC::wf.npwx; + // tmpsi_in += GlobalC::wf.npwx; + // for (ig = 0;ig < GlobalC::wf.npw ;++ig) + // { + // tmhpsi[ig] = GlobalC::wf.g2kin[ig] * tmpsi_in[ig]; + // } + // // TODO: setup with 0 + // for(ig=GlobalC::wf.npw; ig < GlobalC::wf.npwx; ++ig) + // { + // tmhpsi[ig] =0; + // } + // } + + tmhpsi += GlobalC::wf.npwx; + tmpsi_in += GlobalC::wf.npwx; + } + CHECK_CUDA(cudaFree(d_g2kin)); + CHECK_CUDA(cudaFree(f_g2kin)); + } + + ModuleBase::timer::tick("Hamilt_PW_GPU","kinetic"); + + // cout<<"======after hpsi part I======="<(hpsi, 15); + + //------------------------------------ + //(2) the local potential. + //----------------------------------- + ModuleBase::timer::tick("Hamilt_PW_GPU","vloc"); + // ... + if(GlobalV::VL_IN_H) + { + tmhpsi = hpsi; + tmpsi_in = psi_in; + // int *d_GR_index; + double *d_vr_eff1; + float *f_vr_eff1; + float2 *f_porter; + + // CHECK_CUDA(cudaMalloc((void**)&d_GR_index, GlobalC::wf.npwx * sizeof(int))); + CHECK_CUDA(cudaMalloc((void**)&d_vr_eff1, GlobalC::pw.nrxx * sizeof(double))); + CHECK_CUDA(cudaMalloc((void**)&f_vr_eff1, GlobalC::pw.nrxx * sizeof(float))); + CHECK_CUDA(cudaMalloc((void**)&f_porter, GlobalC::pw.nrxx * sizeof(float2))); + + CHECK_CUDA(cudaMemcpy(d_vr_eff1, GlobalC::pot.vr_eff1, GlobalC::pw.nrxx*sizeof(double), cudaMemcpyHostToDevice)); + + int thread2 = 512; + int block2 = (GlobalC::pw.nrxx + thread2 - 1) / thread2; + cast_d2f<<>>(f_vr_eff1, d_vr_eff1, GlobalC::pw.nrxx); + + // cout<<"NSPIN = "<(hpsi, 15); + + if(GlobalV::VNL_IN_H) + { + if ( GlobalC::ppcell.nkb > 0) + { + int nkb = GlobalC::ppcell.nkb; + float2 *becp; + double2 *d_vkb_c; + float2 *f_vkb_c; + CHECK_CUDA(cudaMalloc((void**)&becp, GlobalV::NPOL*m*nkb*sizeof(float2))); + CHECK_CUDA(cudaMalloc((void**)&d_vkb_c, GlobalC::wf.npwx*nkb*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&f_vkb_c, GlobalC::wf.npwx*nkb*sizeof(float2))); + + CHECK_CUDA(cudaMemcpy(d_vkb_c, GlobalC::ppcell.vkb.c, GlobalC::wf.npwx*nkb*sizeof(double2), cudaMemcpyHostToDevice)); + int thread = 512; + int block = (GlobalC::wf.npwx*nkb + thread - 1) / thread; + cast_d2f<<>>(f_vkb_c, d_vkb_c, GlobalC::wf.npwx*nkb); + + cublasOperation_t transa = CUBLAS_OP_C; + cublasOperation_t transb = CUBLAS_OP_N; + // cublasHandle_t handle; + // cublasCreate(&handle); + + float2 ONE, ZERO; + ONE.y = ZERO.x = ZERO.y = 0.0; + ONE.x = 1.0; + // NEG_ONE.x = -1.0; + + // cout<<"===== vkbc ===="<(f_vkb_c, 15); + + if(m==1 && GlobalV::NPOL==1) + { + int inc = 1; + cublasCgemv(hpw_handle, transa, GlobalC::wf.npw, nkb, &ONE, f_vkb_c, GlobalC::wf.npwx, psi_in, inc, &ZERO, becp, inc); + + } + else + { + int npm = GlobalV::NPOL * m; + cublasCgemm(hpw_handle, transa, transb, nkb, npm, GlobalC::wf.npw, &ONE, f_vkb_c, GlobalC::wf.npwx, psi_in, GlobalC::wf.npwx, &ZERO, becp, nkb); + + } + + // complex *hpsi_cpu = new complex[GlobalC::wf.npw*GlobalV::NPOL]; + // complex *becp_cpu = new complex[GlobalV::NPOL*m*nkb]; + + // cudaMemcpy(becp_cpu, becp, GlobalV::NPOL*m*nkb*sizeof(float2), cudaMemcpyDeviceToHost); + + // cudaMemcpy(hpsi_cpu, hpsi, GlobalC::wf.npw*GlobalV::NPOL*sizeof(float2), cudaMemcpyDeviceToHost); + + // this->add_nonlocal_pp(hpsi_cpu, becp_cpu, m); + + // cudaMemcpy(hpsi, hpsi_cpu, GlobalC::wf.npw*GlobalV::NPOL*sizeof(float2), cudaMemcpyHostToDevice); + + // delete [] hpsi_cpu; + // delete [] becp_cpu; + + // cout<<"===== becp before add nonloaclpp ===="<(becp, 15); + + this->add_nonlocal_pp_gpu(hpsi, becp, f_vkb_c, m); + + // cublasDestroy(handle); + CHECK_CUDA(cudaFree(becp)); + CHECK_CUDA(cudaFree(d_vkb_c)); + CHECK_CUDA(cudaFree(f_vkb_c)); + // cout<<"nonlocal end"<(hpsi, 15); + + //------------------------------------ + // (4) the metaGGA part + //------------------------------------ + // TODO: add metaGGA part + + ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); + return; +} + void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, const int m) { ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); @@ -463,7 +754,7 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons int thread = 512; int block = (GlobalC::wf.npw + thread - 1) / thread; - kernel_get_tmhpsi<<>>(GlobalC::wf.npw, tmhpsi, tmpsi_in, d_g2kin); + kernel_get_tmhpsi<<>>(GlobalC::wf.npw, tmhpsi, tmpsi_in, d_g2kin); // if(GlobalC::NSPIN==4){ // for(ig=GlobalC::wf.npw; ig < GlobalC::wf.npwx; ++ig) @@ -491,6 +782,9 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons ModuleBase::timer::tick("Hamilt_PW_GPU","kinetic"); + // cout<<"======after hpsi part I======="<(hpsi, 15); + //------------------------------------ //(2) the local potential. //----------------------------------- @@ -525,7 +819,7 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons // } int thread = 512; int block = (GlobalC::wf.npw + thread - 1) / thread; - kernel_add_tmhpsi<<>>(GlobalC::wf.npw, tmhpsi, d_porter, GR_index_d); + kernel_add_tmhpsi<<>>(GlobalC::wf.npw, tmhpsi, d_porter, GR_index_d); tmhpsi += dmax; tmpsi_in += dmax; @@ -535,6 +829,9 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons CHECK_CUDA(cudaFree(d_porter)); } ModuleBase::timer::tick("Hamilt_PW_GPU","vloc"); + + // cout<<"======after hpsi part II======="<(hpsi, 15); //------------------------------------ // (3) the nonlocal pseudopotential. //------------------------------------ @@ -557,6 +854,9 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons // cublasHandle_t handle; // cublasCreate(&handle); + // cout<<"===== vkbc ===="<(d_vkb_c, 15); + CUFFT_COMPLEX ONE, ZERO; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; @@ -589,6 +889,9 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons // delete [] hpsi_cpu; // delete [] becp_cpu; + // cout<<"===== becp before add nonloaclpp ===="<(becp, 15); + this->add_nonlocal_pp_gpu(hpsi, becp, d_vkb_c, m); // cublasDestroy(handle); @@ -600,6 +903,8 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons } ModuleBase::timer::tick("Hamilt_PW_GPU","vnl"); + // cout<<"======after hpsi part III======="<(hpsi, 15); //------------------------------------ // (4) the metaGGA part @@ -828,6 +1133,123 @@ void Hamilt_PW::h_psi(const std::complex *psi_in, std::complex * } +void Hamilt_PW::add_nonlocal_pp_gpu( + float2 *hpsi_in, + const float2 *becp, + const float2 *f_vkb_c, + const int m) +{ + ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_gpu"); + + // number of projectors + int nkb = GlobalC::ppcell.nkb; + + // complex *ps = new complex [nkb * GlobalV::NPOL * m]; + // ZEROS(ps, GlobalV::NPOL * m * nkb); + float2 *ps; + CHECK_CUDA(cudaMalloc((void**)&ps, nkb * GlobalV::NPOL * m * sizeof(float2))); + CHECK_CUDA(cudaMemset(ps, 0, GlobalV::NPOL * m * sizeof(float2))); + + int sum = 0; + int iat = 0; + // if(GlobalV::NSPIN!=4) + // { + for (int it=0; it>>(f_cur_deeq, cur_deeq, nprojx*nprojx); + + int thread_x = 16; + dim3 thread(thread_x, thread_x); + dim3 block((nproj+thread_x-1) / thread_x, (m+thread_x-1) / thread_x); + // dim3 block(1, 1, 1); + + // cout<<"===== ps before add pp kernel ===="<(ps, 15); + + // cout<<"===== becp before add pp kernel ===="<((float2*)becp, 15); + + // cout<<"===== f_deeq before add pp kernel ===="<<<>>(ps, f_cur_deeq, becp, nproj, nprojx, sum, m, nkb); + + sum += nproj; + ++iat; + } //end na + } //end nt + // } + + cublasOperation_t transa = CUBLAS_OP_N; + cublasOperation_t transb = CUBLAS_OP_T; + // cublasHandle_t handle; + // cublasCreate(&handle); + float2 ONE; + ONE.y = 0.0; + ONE.x = 1.0; + if(GlobalV::NPOL==1 && m==1) + { + int inc = 1; + cublasCgemv(hpw_handle, + transa, + GlobalC::wf.npw, + GlobalC::ppcell.nkb, + &ONE, + f_vkb_c, + GlobalC::wf.npwx, + ps, + inc, + &ONE, + hpsi_in, + inc); + } + else + { + int npm = GlobalV::NPOL*m; + cublasCgemm(hpw_handle, + transa, + transb, + GlobalC::wf.npw, + npm, + GlobalC::ppcell.nkb, + &ONE, + f_vkb_c, + GlobalC::wf.npwx, + ps, + npm, + &ONE, + hpsi_in, + GlobalC::wf.npwx); + } + + // delete[] ps; + CHECK_CUDA(cudaFree(ps)); + // cublasDestroy(handle); + ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_gpu"); + return; +} + void Hamilt_PW::add_nonlocal_pp_gpu( CUFFT_COMPLEX *hpsi_in, const CUFFT_COMPLEX *becp, @@ -866,7 +1288,22 @@ void Hamilt_PW::add_nonlocal_pp_gpu( dim3 block((nproj+thread_x-1) / thread_x, (m+thread_x-1) / thread_x); // dim3 block(1, 1, 1); - kernel_addpp<<>>(ps, cur_deeq, becp, nproj, nprojx, sum, m, nkb); + // cout<<"===== ps before add pp kernel ===="<(ps, 15); + + // cout<<"===== becp before add pp kernel ===="<((double2*)becp, 15); + + // cout<<"===== f_deeq before add pp kernel ===="<<<>>(ps, cur_deeq, becp, nproj, nprojx, sum, m, nkb); sum += nproj; ++iat; diff --git a/source/src_pw/hamilt_pw_gpu.h b/source/src_pw/hamilt_pw_gpu.h index 06dabc6c4b..ac7c649af4 100644 --- a/source/src_pw/hamilt_pw_gpu.h +++ b/source/src_pw/hamilt_pw_gpu.h @@ -50,6 +50,12 @@ class Hamilt_PW ModuleBase::ComplexMatrix &evc, double *en); + void h_1psi_gpu( + const int npw, + const float2 *psi1d, + float2 *hpsi, + float2 *spsi); + void h_1psi_gpu( const int npw, const CUFFT_COMPLEX *psi1d, @@ -62,11 +68,21 @@ class Hamilt_PW std::complex *hpsi, std::complex *spsi); + void h_psi_gpu( + const float2 *psi, + float2 *hpsi, + const int m = 1); + void h_psi_gpu( const CUFFT_COMPLEX *psi, CUFFT_COMPLEX *hpsi, - const int m = 1); // qianrui add a default parameter 2021-3-31 + const int m = 1); + void s_1psi_gpu( + const int npw, + const float2 *psi, + float2 *spsi); + void s_1psi_gpu( const int npw, const CUFFT_COMPLEX *psi, @@ -94,6 +110,12 @@ class Hamilt_PW // add contributions of h*psi from // non-local pseduopotentials void add_nonlocal_pp_gpu( + float2 *hpsi_in, + const float2 *becp, + const float2 *d_vkb_c, + const int m); + + void add_nonlocal_pp_gpu( CUFFT_COMPLEX *hpsi_in, const CUFFT_COMPLEX *becp, const CUFFT_COMPLEX *d_vkb_c, diff --git a/source/src_pw/use_fft.h b/source/src_pw/use_fft.h index bdd806a0bf..f6404e3fe8 100644 --- a/source/src_pw/use_fft.h +++ b/source/src_pw/use_fft.h @@ -7,7 +7,7 @@ #include "cufft.h" #include "use_fft_kernel.h" -typedef cufftDoubleComplex CUFFT_COMPLEX; +// typedef cufftDoubleComplex CUFFT_COMPLEX; #endif @@ -53,7 +53,11 @@ class Use_FFT #ifdef __CUDA cufftHandle fft_handle; - void RoundTrip(const CUFFT_COMPLEX *psi, const double *vr, const int *fft_index, CUFFT_COMPLEX *psic) + void RoundTrip(const float2 *psi, const float *vr, const int *fft_index, float2 *psic) + { + RoundTrip_kernel(psi, vr, fft_index, psic); + } + void RoundTrip(const double2 *psi, const double *vr, const int *fft_index, double2 *psic) { RoundTrip_kernel(psi, vr, fft_index, psic); } diff --git a/source/src_pw/use_fft_kernel.cu b/source/src_pw/use_fft_kernel.cu index 64d0ccb736..7ef03806ec 100644 --- a/source/src_pw/use_fft_kernel.cu +++ b/source/src_pw/use_fft_kernel.cu @@ -2,7 +2,8 @@ #include "global.h" #include "cufft.h" -__global__ void kernel_set(int size, CUFFT_COMPLEX *dst, const CUFFT_COMPLEX *src, const int *index_list) +template +__global__ void kernel_set(int size, T2 *dst, const T2 *src, const int *index_list) { int idx = blockIdx.x * blockDim.x + threadIdx.x; int p = index_list[idx]; @@ -13,7 +14,8 @@ __global__ void kernel_set(int size, CUFFT_COMPLEX *dst, const CUFFT_COMPLEX *sr } } -__global__ void kernel_roundtrip(int size, CUFFT_COMPLEX *dst, const double *src) +template +__global__ void kernel_roundtrip(int size, T2 *dst, const T *src) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if(idx < size) @@ -23,7 +25,8 @@ __global__ void kernel_roundtrip(int size, CUFFT_COMPLEX *dst, const double *src } } -__global__ void kernel_normalization(int size, CUFFT_COMPLEX *data, double norm) +template +__global__ void kernel_normalization(int size, T2 *data, T norm) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if(idx < size) @@ -79,13 +82,52 @@ __global__ void kernel_reorder(CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src, int size) // } -void RoundTrip_kernel(const CUFFT_COMPLEX *psi, const double *vr, const int *fft_index, CUFFT_COMPLEX *psic) +void RoundTrip_kernel(const float2 *psi, const float *vr, const int *fft_index, float2 *psic) { // (1) set value int thread = 512; int block = (GlobalC::wf.npw + thread - 1) / thread; int block2 = (GlobalC::pw.nrxx + thread - 1) / thread; - kernel_set<<>>(GlobalC::wf.npw, psic, psi, fft_index); + kernel_set<<>>(GlobalC::wf.npw, psic, psi, fft_index); + + // CUFFT_COMPLEX *ordered_psi; + // CHECK_CUDA(cudaMalloc((void**)&ordered_psi, GlobalC::pw.nrxx*sizeof(CUFFT_COMPLEX))); + // CHECK_CUDA(cudaMemset(ordered_psi, 0, GlobalC::pw.nrxx*sizeof(CUFFT_COMPLEX))); + + // Reorder_psi_plus(ordered_psi, psic); + + // cufftHandle cufftplan_gpu; + // cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); + cufftExecC2C(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_INVERSE); + // cufftDestroy(cufftplan_gpu); + + // int block3 = (GlobalC::pw.nrxx + thread - 1) / thread; + // kernel_normalization<<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); + + kernel_roundtrip<<>>(GlobalC::pw.nrxx, psic, vr); + + // cufftHandle cufftplan_gpu2; + // cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); + cufftExecC2C(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_FORWARD); + // cufftDestroy(cufftplan_gpu); + + // Reorder_psi_minus(psic, ordered_psi); + + int block3 = (GlobalC::pw.nrxx + thread - 1) / thread; + kernel_normalization<<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); + + // CHECK_CUDA(cudaFree(ordered_psi)); + + return; +} + +void RoundTrip_kernel(const double2 *psi, const double *vr, const int *fft_index, double2 *psic) +{ + // (1) set value + int thread = 512; + int block = (GlobalC::wf.npw + thread - 1) / thread; + int block2 = (GlobalC::pw.nrxx + thread - 1) / thread; + kernel_set<<>>(GlobalC::wf.npw, psic, psi, fft_index); // CUFFT_COMPLEX *ordered_psi; // CHECK_CUDA(cudaMalloc((void**)&ordered_psi, GlobalC::pw.nrxx*sizeof(CUFFT_COMPLEX))); @@ -101,7 +143,7 @@ void RoundTrip_kernel(const CUFFT_COMPLEX *psi, const double *vr, const int *fft // int block3 = (GlobalC::pw.nrxx + thread - 1) / thread; // kernel_normalization<<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); - kernel_roundtrip<<>>(GlobalC::pw.nrxx, psic, vr); + kernel_roundtrip<<>>(GlobalC::pw.nrxx, psic, vr); // cufftHandle cufftplan_gpu2; // cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); @@ -111,7 +153,7 @@ void RoundTrip_kernel(const CUFFT_COMPLEX *psi, const double *vr, const int *fft // Reorder_psi_minus(psic, ordered_psi); int block3 = (GlobalC::pw.nrxx + thread - 1) / thread; - kernel_normalization<<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); + kernel_normalization<<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); // CHECK_CUDA(cudaFree(ordered_psi)); diff --git a/source/src_pw/use_fft_kernel.h b/source/src_pw/use_fft_kernel.h index d2390e46b2..2fa2aabee9 100644 --- a/source/src_pw/use_fft_kernel.h +++ b/source/src_pw/use_fft_kernel.h @@ -2,7 +2,8 @@ #include "cufft.h" #include "device_launch_parameters.h" -typedef cufftDoubleComplex CUFFT_COMPLEX; +// typedef cufftDoubleComplex CUFFT_COMPLEX; -void RoundTrip_kernel(const CUFFT_COMPLEX *psi, const double *vr, const int *fft_index, CUFFT_COMPLEX *psic); +void RoundTrip_kernel(const float2 *psi, const float *vr, const int *fft_index, float2 *psic); +void RoundTrip_kernel(const double2 *psi, const double *vr, const int *fft_index, double2 *psic); From 2bdb7ec5d978b84eccadac96c7d3a85b2ff9e318 Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Wed, 22 Sep 2021 11:13:40 +0800 Subject: [PATCH 004/478] Change name CUFFT_COMPLEX to double2. --- source/src_pw/diago_cg_gpu.h | 2 -- source/src_pw/hamilt.cu | 14 ++++----- source/src_pw/hamilt_pw_gpu.cu | 52 ++++++++++++++++----------------- source/src_pw/hamilt_pw_gpu.h | 21 +++++++------ source/src_pw/use_fft.h | 1 - source/src_pw/use_fft_kernel.cu | 22 +++++++------- source/src_pw/use_fft_kernel.h | 2 -- 7 files changed, 54 insertions(+), 60 deletions(-) diff --git a/source/src_pw/diago_cg_gpu.h b/source/src_pw/diago_cg_gpu.h index 82594e9e3d..60e39f365f 100644 --- a/source/src_pw/diago_cg_gpu.h +++ b/source/src_pw/diago_cg_gpu.h @@ -5,8 +5,6 @@ #include "cufft.h" #include "cublas_v2.h" -// typedef cufftDoubleComplex CUFFT_COMPLEX; - template class Diago_CG_GPU { diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index 6a6c2e0bae..eb13d053f8 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -131,7 +131,7 @@ void Hamilt::diagH_pw( bool reorder = true; - CUFFT_COMPLEX *d_wf_evc; + double2 *d_wf_evc; double *d_wf_ekb; int DIM_CG_GPU = GlobalC::kv.ngk[ik]; int DIM_CG_GPU2 = GlobalC::wf.npwx * GlobalV::NPOL; @@ -145,11 +145,11 @@ void Hamilt::diagH_pw( if(GlobalV::NPOL==1) { - CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(CUFFT_COMPLEX))); + CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2))); CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_GPU * sizeof(double))); - CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(CUFFT_COMPLEX), cudaMemcpyHostToDevice)); + CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2), cudaMemcpyHostToDevice)); // CHECK_CUDA(cudaMemcpy(d_wf_ekb, wf.ekb[ik], NBANDS * sizeof(double), cudaMemcpyHostToDevice)); CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_GPU * sizeof(double), cudaMemcpyHostToDevice)); @@ -182,7 +182,7 @@ void Hamilt::diagH_pw( cufftDestroy(GlobalC::UFFT.fft_handle); // to cpu - CHECK_CUDA(cudaMemcpy(GlobalC::wf.evc[ik0].c, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToHost)); + CHECK_CUDA(cudaMemcpy(GlobalC::wf.evc[ik0].c, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaMemcpy(GlobalC::wf.ekb[ik], d_wf_ekb, GlobalV::NBANDS * sizeof(double), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaFree(d_wf_evc)); @@ -194,11 +194,11 @@ void Hamilt::diagH_pw( else { // to gpu - CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(CUFFT_COMPLEX))); + CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(double2))); CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_GPU2 * sizeof(double))); - CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(CUFFT_COMPLEX), cudaMemcpyHostToDevice)); + CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(double2), cudaMemcpyHostToDevice)); // CHECK_CUDA(cudaMemcpy(d_wf_ekb, GlobalC::wf.ekb[ik], GlobalV::NBANDS * sizeof(double), cudaMemcpyHostToDevice)); CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_GPU2 * sizeof(double), cudaMemcpyHostToDevice)); // do things @@ -210,7 +210,7 @@ void Hamilt::diagH_pw( cufftDestroy(GlobalC::UFFT.fft_handle); // to cpu - CHECK_CUDA(cudaMemcpy(GlobalC::wf.evc[ik0].c, d_wf_evc, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToHost)); + CHECK_CUDA(cudaMemcpy(GlobalC::wf.evc[ik0].c, d_wf_evc, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(double2), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaMemcpy(GlobalC::wf.ekb[ik], d_wf_ekb, GlobalV::NBANDS * sizeof(double), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaFree(d_wf_evc)); diff --git a/source/src_pw/hamilt_pw_gpu.cu b/source/src_pw/hamilt_pw_gpu.cu index dfd4836776..3ba098d018 100644 --- a/source/src_pw/hamilt_pw_gpu.cu +++ b/source/src_pw/hamilt_pw_gpu.cu @@ -453,8 +453,8 @@ void Hamilt_PW::h_1psi_gpu( const int npw_in, const float2 *psi, return; } -void Hamilt_PW::h_1psi_gpu( const int npw_in, const CUFFT_COMPLEX *psi, - CUFFT_COMPLEX *hpsi, CUFFT_COMPLEX *spsi) +void Hamilt_PW::h_1psi_gpu( const int npw_in, const double2 *psi, + double2 *hpsi, double2 *spsi) { this->h_psi_gpu(psi, hpsi); @@ -470,9 +470,9 @@ void Hamilt_PW::s_1psi_gpu(const int dim, const float2 *psi, float2 *spsi) return; } -void Hamilt_PW::s_1psi_gpu(const int dim, const CUFFT_COMPLEX *psi, CUFFT_COMPLEX *spsi) +void Hamilt_PW::s_1psi_gpu(const int dim, const double2 *psi, double2 *spsi) { - CHECK_CUDA(cudaMemcpy(spsi, psi, dim*sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToDevice)); + CHECK_CUDA(cudaMemcpy(spsi, psi, dim*sizeof(double2), cudaMemcpyDeviceToDevice)); return; } @@ -721,7 +721,7 @@ void Hamilt_PW::h_psi_gpu(const float2 *psi_in, float2 *hpsi, const int m) return; } -void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, const int m) +void Hamilt_PW::h_psi_gpu(const double2 *psi_in, double2 *hpsi, const int m) { ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); // int i = 0; @@ -737,8 +737,8 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons //------------------------------------ //(1) the kinetical energy. //------------------------------------ - CUFFT_COMPLEX *tmhpsi; - const CUFFT_COMPLEX *tmpsi_in; + double2 *tmhpsi; + const double2 *tmpsi_in; ModuleBase::timer::tick("Hamilt_PW_GPU","kinetic"); if(GlobalV::T_IN_H) { @@ -796,11 +796,11 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons tmpsi_in = psi_in; // int *d_GR_index; double *d_vr_eff1; - CUFFT_COMPLEX *d_porter; + double2 *d_porter; // CHECK_CUDA(cudaMalloc((void**)&d_GR_index, GlobalC::wf.npwx * sizeof(int))); CHECK_CUDA(cudaMalloc((void**)&d_vr_eff1, GlobalC::pw.nrxx * sizeof(double))); - CHECK_CUDA(cudaMalloc((void**)&d_porter, GlobalC::pw.nrxx * sizeof(CUFFT_COMPLEX))); + CHECK_CUDA(cudaMalloc((void**)&d_porter, GlobalC::pw.nrxx * sizeof(double2))); CHECK_CUDA(cudaMemcpy(d_vr_eff1, GlobalC::pot.vr_eff1, GlobalC::pw.nrxx*sizeof(double), cudaMemcpyHostToDevice)); // cout<<"NSPIN = "<(d_vkb_c, 15); - CUFFT_COMPLEX ONE, ZERO; + double2 ONE, ZERO; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; // NEG_ONE.x = -1.0; @@ -878,13 +878,13 @@ void Hamilt_PW::h_psi_gpu(const CUFFT_COMPLEX *psi_in, CUFFT_COMPLEX *hpsi, cons // complex *hpsi_cpu = new complex[GlobalC::wf.npw*GlobalV::NPOL]; // complex *becp_cpu = new complex[GlobalV::NPOL*m*nkb]; - // cudaMemcpy(becp_cpu, becp, GlobalV::NPOL*m*nkb*sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToHost); + // cudaMemcpy(becp_cpu, becp, GlobalV::NPOL*m*nkb*sizeof(double2), cudaMemcpyDeviceToHost); - // cudaMemcpy(hpsi_cpu, hpsi, GlobalC::wf.npw*GlobalV::NPOL*sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToHost); + // cudaMemcpy(hpsi_cpu, hpsi, GlobalC::wf.npw*GlobalV::NPOL*sizeof(double2), cudaMemcpyDeviceToHost); // this->add_nonlocal_pp(hpsi_cpu, becp_cpu, m); - // cudaMemcpy(hpsi, hpsi_cpu, GlobalC::wf.npw*GlobalV::NPOL*sizeof(CUFFT_COMPLEX), cudaMemcpyHostToDevice); + // cudaMemcpy(hpsi, hpsi_cpu, GlobalC::wf.npw*GlobalV::NPOL*sizeof(double2), cudaMemcpyHostToDevice); // delete [] hpsi_cpu; // delete [] becp_cpu; @@ -1251,9 +1251,9 @@ void Hamilt_PW::add_nonlocal_pp_gpu( } void Hamilt_PW::add_nonlocal_pp_gpu( - CUFFT_COMPLEX *hpsi_in, - const CUFFT_COMPLEX *becp, - const CUFFT_COMPLEX *d_vkb_c, + double2 *hpsi_in, + const double2 *becp, + const double2 *d_vkb_c, const int m) { ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_gpu"); @@ -1263,9 +1263,9 @@ void Hamilt_PW::add_nonlocal_pp_gpu( // complex *ps = new complex [nkb * GlobalV::NPOL * m]; // ZEROS(ps, GlobalV::NPOL * m * nkb); - CUFFT_COMPLEX *ps; - CHECK_CUDA(cudaMalloc((void**)&ps, nkb * GlobalV::NPOL * m * sizeof(CUFFT_COMPLEX))); - CHECK_CUDA(cudaMemset(ps, 0, GlobalV::NPOL * m * sizeof(CUFFT_COMPLEX))); + double2 *ps; + CHECK_CUDA(cudaMalloc((void**)&ps, nkb * GlobalV::NPOL * m * sizeof(double2))); + CHECK_CUDA(cudaMemset(ps, 0, GlobalV::NPOL * m * sizeof(double2))); int sum = 0; int iat = 0; @@ -1315,7 +1315,7 @@ void Hamilt_PW::add_nonlocal_pp_gpu( cublasOperation_t transb = CUBLAS_OP_T; // cublasHandle_t handle; // cublasCreate(&handle); - CUFFT_COMPLEX ONE; + double2 ONE; ONE.y = 0.0; ONE.x = 1.0; if(GlobalV::NPOL==1 && m==1) diff --git a/source/src_pw/hamilt_pw_gpu.h b/source/src_pw/hamilt_pw_gpu.h index ac7c649af4..cb62690b63 100644 --- a/source/src_pw/hamilt_pw_gpu.h +++ b/source/src_pw/hamilt_pw_gpu.h @@ -6,7 +6,6 @@ #ifdef __CUDA #include "cufft.h" #include "cublas_v2.h" -typedef cufftDoubleComplex CUFFT_COMPLEX; #endif class Hamilt_PW @@ -58,9 +57,9 @@ class Hamilt_PW void h_1psi_gpu( const int npw, - const CUFFT_COMPLEX *psi1d, - CUFFT_COMPLEX *hpsi, - CUFFT_COMPLEX *spsi); + const double2 *psi1d, + double2 *hpsi, + double2 *spsi); void h_1psi( const int npw, @@ -74,8 +73,8 @@ class Hamilt_PW const int m = 1); void h_psi_gpu( - const CUFFT_COMPLEX *psi, - CUFFT_COMPLEX *hpsi, + const double2 *psi, + double2 *hpsi, const int m = 1); void s_1psi_gpu( @@ -85,8 +84,8 @@ class Hamilt_PW void s_1psi_gpu( const int npw, - const CUFFT_COMPLEX *psi, - CUFFT_COMPLEX *spsi); + const double2 *psi, + double2 *spsi); void s_1psi( const int npw, @@ -116,9 +115,9 @@ class Hamilt_PW const int m); void add_nonlocal_pp_gpu( - CUFFT_COMPLEX *hpsi_in, - const CUFFT_COMPLEX *becp, - const CUFFT_COMPLEX *d_vkb_c, + double2 *hpsi_in, + const double2 *becp, + const double2 *d_vkb_c, const int m); void add_nonlocal_pp( diff --git a/source/src_pw/use_fft.h b/source/src_pw/use_fft.h index f6404e3fe8..45e28a42b7 100644 --- a/source/src_pw/use_fft.h +++ b/source/src_pw/use_fft.h @@ -7,7 +7,6 @@ #include "cufft.h" #include "use_fft_kernel.h" -// typedef cufftDoubleComplex CUFFT_COMPLEX; #endif diff --git a/source/src_pw/use_fft_kernel.cu b/source/src_pw/use_fft_kernel.cu index 7ef03806ec..c664cff317 100644 --- a/source/src_pw/use_fft_kernel.cu +++ b/source/src_pw/use_fft_kernel.cu @@ -36,7 +36,7 @@ __global__ void kernel_normalization(int size, T2 *data, T norm) } } -__global__ void kernel_reorder(CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src, int size) +__global__ void kernel_reorder(double2 *dst, double2 *src, int size) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if(idx < size) @@ -47,7 +47,7 @@ __global__ void kernel_reorder(CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src, int size) } // Donghs fix 2021.9.8 -// void Reorder_psi_plus(CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src) +// void Reorder_psi_plus(double2 *dst, double2 *src) // { // ModuleBase::timer::tick("Use_FFT","reorder_psi_plus"); // int ii = 0; @@ -58,13 +58,13 @@ __global__ void kernel_reorder(CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src, int size) // { // int ir = GlobalC::pw.FFT_wfc.ismap[is]; // kernel_reorder<<>>(&dst[ir*size_z], &src[ii*size_z], size_z); -// // CHECK_CUDA(cudaMemcpy(&dst[ir*size_z], &src[ii*size_z], size_z*sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToDevice)); +// // CHECK_CUDA(cudaMemcpy(&dst[ir*size_z], &src[ii*size_z], size_z*sizeof(double2), cudaMemcpyDeviceToDevice)); // ii++; // } // ModuleBase::timer::tick("Use_FFT","reorder_psi_plus"); // } -// void Reorder_psi_minus(CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src) +// void Reorder_psi_minus(double2 *dst, double2 *src) // { // ModuleBase::timer::tick("Use_FFT","reorder_psi_minus"); // int ii = 0; @@ -75,7 +75,7 @@ __global__ void kernel_reorder(CUFFT_COMPLEX *dst, CUFFT_COMPLEX *src, int size) // { // int ir = GlobalC::pw.FFT_wfc.ismap[j]; // kernel_reorder<<>>(&dst[ii*size_z], &src[ir*size_z], size_z); -// // CHECK_CUDA(cudaMemcpy(&dst[ii*size_z], &src[ir*size_z], size_z*sizeof(CUFFT_COMPLEX), cudaMemcpyDeviceToDevice)); +// // CHECK_CUDA(cudaMemcpy(&dst[ii*size_z], &src[ir*size_z], size_z*sizeof(double2), cudaMemcpyDeviceToDevice)); // ii++; // } // ModuleBase::timer::tick("Use_FFT","reorder_psi_minus"); @@ -90,9 +90,9 @@ void RoundTrip_kernel(const float2 *psi, const float *vr, const int *fft_index, int block2 = (GlobalC::pw.nrxx + thread - 1) / thread; kernel_set<<>>(GlobalC::wf.npw, psic, psi, fft_index); - // CUFFT_COMPLEX *ordered_psi; - // CHECK_CUDA(cudaMalloc((void**)&ordered_psi, GlobalC::pw.nrxx*sizeof(CUFFT_COMPLEX))); - // CHECK_CUDA(cudaMemset(ordered_psi, 0, GlobalC::pw.nrxx*sizeof(CUFFT_COMPLEX))); + // double2 *ordered_psi; + // CHECK_CUDA(cudaMalloc((void**)&ordered_psi, GlobalC::pw.nrxx*sizeof(double2))); + // CHECK_CUDA(cudaMemset(ordered_psi, 0, GlobalC::pw.nrxx*sizeof(double2))); // Reorder_psi_plus(ordered_psi, psic); @@ -129,9 +129,9 @@ void RoundTrip_kernel(const double2 *psi, const double *vr, const int *fft_index int block2 = (GlobalC::pw.nrxx + thread - 1) / thread; kernel_set<<>>(GlobalC::wf.npw, psic, psi, fft_index); - // CUFFT_COMPLEX *ordered_psi; - // CHECK_CUDA(cudaMalloc((void**)&ordered_psi, GlobalC::pw.nrxx*sizeof(CUFFT_COMPLEX))); - // CHECK_CUDA(cudaMemset(ordered_psi, 0, GlobalC::pw.nrxx*sizeof(CUFFT_COMPLEX))); + // double2 *ordered_psi; + // CHECK_CUDA(cudaMalloc((void**)&ordered_psi, GlobalC::pw.nrxx*sizeof(double2))); + // CHECK_CUDA(cudaMemset(ordered_psi, 0, GlobalC::pw.nrxx*sizeof(double2))); // Reorder_psi_plus(ordered_psi, psic); diff --git a/source/src_pw/use_fft_kernel.h b/source/src_pw/use_fft_kernel.h index 2fa2aabee9..ad0f4fcbf9 100644 --- a/source/src_pw/use_fft_kernel.h +++ b/source/src_pw/use_fft_kernel.h @@ -2,8 +2,6 @@ #include "cufft.h" #include "device_launch_parameters.h" -// typedef cufftDoubleComplex CUFFT_COMPLEX; - void RoundTrip_kernel(const float2 *psi, const float *vr, const int *fft_index, float2 *psic); void RoundTrip_kernel(const double2 *psi, const double *vr, const int *fft_index, double2 *psic); From 25cfcd30c625b5e485fa7005d40e42d43bca5478 Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Fri, 24 Sep 2021 16:33:50 +0800 Subject: [PATCH 005/478] Change class name: Diago_CG_GPU -> Diago_CG_CUDA. --- source/src_pw/diago_cg_gpu.cu | 92 +++++++++++++++++------------------ source/src_pw/diago_cg_gpu.h | 6 +-- source/src_pw/hamilt.cu | 4 +- source/src_pw/hamilt_cu.bak | 4 +- source/src_pw/hamilt_pw.h | 2 +- source/src_pw/hamilt_pw_gpu.h | 2 +- 6 files changed, 55 insertions(+), 55 deletions(-) diff --git a/source/src_pw/diago_cg_gpu.cu b/source/src_pw/diago_cg_gpu.cu index 6fa0fcc317..0cd4d2ebf7 100644 --- a/source/src_pw/diago_cg_gpu.cu +++ b/source/src_pw/diago_cg_gpu.cu @@ -3,7 +3,7 @@ #include "global.h" template -int Diago_CG_GPU::moved = 0; +int Diago_CG_CUDA::moved = 0; template __global__ void kernel_normalization(T2 *data, int size, T norm) @@ -83,7 +83,7 @@ __global__ void kernel_multi_add(T2 *dst, T2 *src1, T a1, const T2 *src2, T a2, } template -Diago_CG_GPU::Diago_CG_GPU() +Diago_CG_CUDA::Diago_CG_CUDA() { test_cg=0; cublasCreate(&diag_handle); @@ -91,7 +91,7 @@ Diago_CG_GPU::Diago_CG_GPU() } template -Diago_CG_GPU::~Diago_CG_GPU() +Diago_CG_CUDA::~Diago_CG_CUDA() { cublasDestroy(diag_handle); // cublasDestroy(ddot_handle); @@ -110,7 +110,7 @@ void test_print(T *data, int size) } template -void Diago_CG_GPU::diag +void Diago_CG_CUDA::diag ( T2 *phi, // matrix nband*dim T *e, @@ -128,8 +128,8 @@ void Diago_CG_GPU::diag // cout<<"begin diago fft dim"<::diag CHECK_CUDA(cudaMalloc((void**)&lagrange, n_band * sizeof(T2))); CHECK_CUDA(cudaMalloc((void**)&phi_m, dim * sizeof(T2))); - // timer::tick("Diago_CG_GPU","diag"); + // timer::tick("Diago_CG_CUDA","diag"); // Init with ZERO ... // T em_host = 0; @@ -284,7 +284,7 @@ void Diago_CG_GPU::diag avg_iter /= n_band; - // timer::tick("Diago_CG_GPU","diag"); + // timer::tick("Diago_CG_CUDA","diag"); CHECK_CUDA(cudaFree(lagrange)); CHECK_CUDA(cudaFree(pphi)); CHECK_CUDA(cudaFree(g0)); @@ -295,19 +295,19 @@ void Diago_CG_GPU::diag CHECK_CUDA(cudaFree(sphi)); CHECK_CUDA(cudaFree(phi_m)); - ModuleBase::timer::tick("Diago_CG_GPU","diag"); + ModuleBase::timer::tick("Diago_CG_CUDA","diag"); return; } // end subroutine ccgdiagg template -void Diago_CG_GPU::calculate_gradient( +void Diago_CG_CUDA::calculate_gradient( const T* precondition, const int dim, const T2 *hpsi, const T2 *spsi, T2 *g, T2 *ppsi) { - if (test_cg==1) ModuleBase::TITLE("Diago_CG_GPU","calculate_gradient"); - ModuleBase::timer::tick("Diago_CG_GPU","calculate_grad"); + if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","calculate_gradient"); + ModuleBase::timer::tick("Diago_CG_CUDA","calculate_grad"); int thread = 512; int block = (dim + thread - 1) / thread; @@ -328,18 +328,18 @@ void Diago_CG_GPU::calculate_gradient( // Update g ! kernel_get_gredient<<>>(g, ppsi, dim, lambda); // kernel_multi_add<<>>(g, g, 1, ppsi, -lambda, dim); - ModuleBase::timer::tick("Diago_CG_GPU","calculate_grad"); + ModuleBase::timer::tick("Diago_CG_CUDA","calculate_grad"); return; } template -void Diago_CG_GPU::orthogonal_gradient( const int &dim, const int &dmx, +void Diago_CG_CUDA::orthogonal_gradient( const int &dim, const int &dmx, float2 *g, float2 *sg, float2 *lagrange, const float2 *eigenfunction, const int m) { - if (test_cg==1) ModuleBase::TITLE("Diago_CG_GPU","orthogonal_gradient"); - ModuleBase::timer::tick("Diago_CG_GPU","orth_grad"); + if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","orthogonal_gradient"); + ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); GlobalC::hm.hpw.s_1psi_gpu(dim, g, sg); @@ -381,18 +381,18 @@ void Diago_CG_GPU::orthogonal_gradient( const int &dim, const int &dmx, } }*/ - ModuleBase::timer::tick("Diago_CG_GPU","orth_grad"); + ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); // cublasDestroy(handle); return; } template -void Diago_CG_GPU::orthogonal_gradient( const int &dim, const int &dmx, +void Diago_CG_CUDA::orthogonal_gradient( const int &dim, const int &dmx, double2 *g, double2 *sg, double2 *lagrange, const double2 *eigenfunction, const int m) { - if (test_cg==1) ModuleBase::TITLE("Diago_CG_GPU","orthogonal_gradient"); - ModuleBase::timer::tick("Diago_CG_GPU","orth_grad"); + if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","orthogonal_gradient"); + ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); GlobalC::hm.hpw.s_1psi_gpu(dim, g, sg); @@ -434,13 +434,13 @@ void Diago_CG_GPU::orthogonal_gradient( const int &dim, const int &dmx, } }*/ - ModuleBase::timer::tick("Diago_CG_GPU","orth_grad"); + ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); // cublasDestroy(handle); return; } template -void Diago_CG_GPU::calculate_gamma_cg( +void Diago_CG_CUDA::calculate_gamma_cg( const int iter, const int dim, const T *precondition, @@ -453,8 +453,8 @@ void Diago_CG_GPU::calculate_gamma_cg( const T &theta, const T2 *psi_m) { - if (test_cg==1) ModuleBase::TITLE("Diago_CG_GPU","calculate_gamma_cg"); - ModuleBase::timer::tick("Diago_CG_GPU","gamma_cg"); + if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","calculate_gamma_cg"); + ModuleBase::timer::tick("Diago_CG_CUDA","gamma_cg"); T gg_inter; if (iter>0) { @@ -520,13 +520,13 @@ void Diago_CG_GPU::calculate_gamma_cg( kernel_get_normacg<<>>(dim, cg, psi_m, norma); } - ModuleBase::timer::tick("Diago_CG_GPU","gamma_cg"); + ModuleBase::timer::tick("Diago_CG_CUDA","gamma_cg"); return; } template -bool Diago_CG_GPU::update_psi( +bool Diago_CG_CUDA::update_psi( const int dim, T &cg_norm, T &theta, @@ -539,8 +539,8 @@ bool Diago_CG_GPU::update_psi( T2 *hpsi, T2 *sphi) { - if (test_cg==1) ModuleBase::TITLE("Diago_CG_GPU","update_psi"); - ModuleBase::timer::tick("Diago_CG_GPU","update_psi"); + if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","update_psi"); + ModuleBase::timer::tick("Diago_CG_CUDA","update_psi"); int thread = 512; int block = (dim + thread - 1) / thread; // pw.h_1psi(dim, cg, hcg, scg); // TODO @@ -590,7 +590,7 @@ bool Diago_CG_GPU::update_psi( if ( abs(eigenvalue-e0)< threshold) { - ModuleBase::timer::tick("Diago_CG_GPU","update_psi"); + ModuleBase::timer::tick("Diago_CG_CUDA","update_psi"); return 1; } else @@ -602,13 +602,13 @@ bool Diago_CG_GPU::update_psi( // } kernel_multi_add<<>>(sphi, sphi, cost, scg, sint_norm, dim); kernel_multi_add<<>>(hpsi, hpsi, cost, hcg, sint_norm, dim); - ModuleBase::timer::tick("Diago_CG_GPU","update_psi"); + ModuleBase::timer::tick("Diago_CG_CUDA","update_psi"); return 0; } } template -void Diago_CG_GPU::schmit_orth +void Diago_CG_CUDA::schmit_orth ( const int& dim, const int& dmx, @@ -618,7 +618,7 @@ void Diago_CG_GPU::schmit_orth float2 *psi_m ) { - ModuleBase::timer::tick("Diago_CG_GPU","schmit_orth"); + ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); assert( m >= 0 ); // cout<<"orth, dim="<::schmit_orth GlobalC::hm.hpw.s_1psi_gpu(dim, psi_m, sphi); // cublasDestroy(handle); - ModuleBase::timer::tick("Diago_CG_GPU","schmit_orth"); + ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); CHECK_CUDA(cudaFree(lagrange)); return ; } template -void Diago_CG_GPU::schmit_orth +void Diago_CG_CUDA::schmit_orth ( const int& dim, const int& dmx, @@ -668,7 +668,7 @@ void Diago_CG_GPU::schmit_orth double2 *psi_m ) { - ModuleBase::timer::tick("Diago_CG_GPU","schmit_orth"); + ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); assert( m >= 0 ); // cout<<"orth, dim="<::schmit_orth GlobalC::hm.hpw.s_1psi_gpu(dim, psi_m, sphi); // cublasDestroy(handle); - ModuleBase::timer::tick("Diago_CG_GPU","schmit_orth"); + ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); CHECK_CUDA(cudaFree(lagrange)); return ; } template -float Diago_CG_GPU::ddot_real +float Diago_CG_CUDA::ddot_real ( const int &dim, const float2* psi_L, @@ -723,7 +723,7 @@ float Diago_CG_GPU::ddot_real } template -double Diago_CG_GPU::ddot_real +double Diago_CG_CUDA::ddot_real ( const int &dim, const double2* psi_L, @@ -739,7 +739,7 @@ double Diago_CG_GPU::ddot_real template -float2 Diago_CG_GPU::ddot +float2 Diago_CG_CUDA::ddot ( const int & dim, const float2 * psi_L, @@ -752,7 +752,7 @@ float2 Diago_CG_GPU::ddot } // end of ddot template -double2 Diago_CG_GPU::ddot +double2 Diago_CG_CUDA::ddot ( const int & dim, const double2 * psi_L, @@ -766,7 +766,7 @@ double2 Diago_CG_GPU::ddot template -float2 Diago_CG_GPU::ddot +float2 Diago_CG_CUDA::ddot ( const int & dim, const float2 *psi, //complex @@ -785,7 +785,7 @@ float2 Diago_CG_GPU::ddot } // end of ddot template -double2 Diago_CG_GPU::ddot +double2 Diago_CG_CUDA::ddot ( const int & dim, const double2 *psi, //complex @@ -806,7 +806,7 @@ double2 Diago_CG_GPU::ddot // this return template -float2 Diago_CG_GPU::ddot +float2 Diago_CG_CUDA::ddot ( const int & dim, const float2 *psi_L, @@ -827,7 +827,7 @@ float2 Diago_CG_GPU::ddot } // end of ddot template -double2 Diago_CG_GPU::ddot +double2 Diago_CG_CUDA::ddot ( const int & dim, const double2 *psi_L, @@ -847,5 +847,5 @@ double2 Diago_CG_GPU::ddot return result; } // end of ddot -template class Diago_CG_GPU; -// template class Diago_CG_GPU; +template class Diago_CG_CUDA; +// template class Diago_CG_CUDA; diff --git a/source/src_pw/diago_cg_gpu.h b/source/src_pw/diago_cg_gpu.h index 60e39f365f..446bdac7bc 100644 --- a/source/src_pw/diago_cg_gpu.h +++ b/source/src_pw/diago_cg_gpu.h @@ -6,12 +6,12 @@ #include "cublas_v2.h" template -class Diago_CG_GPU +class Diago_CG_CUDA { public: - Diago_CG_GPU(); - ~Diago_CG_GPU(); + Diago_CG_CUDA(); + ~Diago_CG_CUDA(); static int moved; diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index eb13d053f8..02923acf80 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -126,8 +126,8 @@ void Hamilt::diagH_pw( avg_iter += 1.0; } - // Diago_CG_GPU f_cg_gpu; - Diago_CG_GPU d_cg_gpu; + // Diago_CG_CUDA f_cg_gpu; + Diago_CG_CUDA d_cg_gpu; bool reorder = true; diff --git a/source/src_pw/hamilt_cu.bak b/source/src_pw/hamilt_cu.bak index 6fb7d19b01..a8ed9d3a59 100644 --- a/source/src_pw/hamilt_cu.bak +++ b/source/src_pw/hamilt_cu.bak @@ -2,7 +2,7 @@ #include "global.h" #include "hamilt.h" #include "diago_cg.h" -#include "diago_cg_gpu.h" // Diago_CG_GPU +#include "diago_cg_gpu.h" // Diago_CG_CUDA #include "diago_david.h" #include "cuda_runtime.h" #include "time.h" @@ -86,7 +86,7 @@ void Hamilt::diagH_pw( avg_iter += 1.0; } // Diago_CG cg; - Diago_CG_GPU cg_gpu; + Diago_CG_CUDA cg_gpu; bool reorder = true; CUFFT_COMPLEX *d_wf_evc; diff --git a/source/src_pw/hamilt_pw.h b/source/src_pw/hamilt_pw.h index fc81f13406..8b0babba44 100644 --- a/source/src_pw/hamilt_pw.h +++ b/source/src_pw/hamilt_pw.h @@ -32,7 +32,7 @@ class Hamilt_PW friend class Diago_David; friend class Diago_CG; - // friend class Diago_CG_GPU; + // friend class Diago_CG_CUDA; friend class Exx_Lip; friend class Hamilt; friend class Stochastic_Iter; diff --git a/source/src_pw/hamilt_pw_gpu.h b/source/src_pw/hamilt_pw_gpu.h index cb62690b63..f4fc0987cc 100644 --- a/source/src_pw/hamilt_pw_gpu.h +++ b/source/src_pw/hamilt_pw_gpu.h @@ -37,7 +37,7 @@ class Hamilt_PW friend class Diago_David; // friend class Diago_CG; - template friend class Diago_CG_GPU; + template friend class Diago_CG_CUDA; friend class Exx_Lip; friend class Hamilt; friend class Stochastic_Iter; From 5043f885617f538346c8b72d29e17f84784cd41d Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Fri, 24 Sep 2021 16:44:11 +0800 Subject: [PATCH 006/478] Change file name & function name: hamilt_pw_gpu.cu -> hamilt_pw.cu hamilt_pw_gpu.h -> hamilt_pw.cuh --- source/src_pw/CMakeLists.txt | 2 +- source/src_pw/diago_cg_gpu.cu | 14 ++++---- source/src_pw/hamilt.h | 2 +- .../src_pw/{hamilt_pw_gpu.cu => hamilt_pw.cu} | 34 +++++++++---------- .../src_pw/{hamilt_pw_gpu.h => hamilt_pw.cuh} | 16 ++++----- 5 files changed, 34 insertions(+), 34 deletions(-) rename source/src_pw/{hamilt_pw_gpu.cu => hamilt_pw.cu} (97%) rename source/src_pw/{hamilt_pw_gpu.h => hamilt_pw.cuh} (94%) diff --git a/source/src_pw/CMakeLists.txt b/source/src_pw/CMakeLists.txt index e1c53923cb..b4a7fb12c0 100644 --- a/source/src_pw/CMakeLists.txt +++ b/source/src_pw/CMakeLists.txt @@ -61,7 +61,7 @@ if(USE_CUDA) list(APPEND objects diago_cg_gpu.cu hamilt.cu - hamilt_pw_gpu.cu + hamilt_pw.cu use_fft_kernel.cu ) else() diff --git a/source/src_pw/diago_cg_gpu.cu b/source/src_pw/diago_cg_gpu.cu index 0cd4d2ebf7..20123fe0c7 100644 --- a/source/src_pw/diago_cg_gpu.cu +++ b/source/src_pw/diago_cg_gpu.cu @@ -179,14 +179,14 @@ void Diago_CG_CUDA::diag CHECK_CUDA(cudaMemcpy(phi_m, &phi[m*dmx], dim*sizeof(T2), cudaMemcpyDeviceToDevice)); // CHECK_CUDA(cudaMemcpy(sphi, phi_m, dim * sizeof(T2), cudaMemcpyDeviceToDevice)); - GlobalC::hm.hpw.s_1psi_gpu(dim, phi_m, sphi); + GlobalC::hm.hpw.s_1psi_cuda(dim, phi_m, sphi); this->schmit_orth(dim, dmx, m, phi, sphi, phi_m); // cout<<"====phi_m after schmit===="<(phi_m, 15); - GlobalC::hm.hpw.h_1psi_gpu(dim, phi_m, hphi, sphi); + GlobalC::hm.hpw.h_1psi_cuda(dim, phi_m, hphi, sphi); // cout<<"====hphi after hpsi===="<(hphi, 15); @@ -341,7 +341,7 @@ void Diago_CG_CUDA::orthogonal_gradient( const int &dim, const int &dmx, if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","orthogonal_gradient"); ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); - GlobalC::hm.hpw.s_1psi_gpu(dim, g, sg); + GlobalC::hm.hpw.s_1psi_cuda(dim, g, sg); int inc=1; @@ -394,7 +394,7 @@ void Diago_CG_CUDA::orthogonal_gradient( const int &dim, const int &dmx, if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","orthogonal_gradient"); ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); - GlobalC::hm.hpw.s_1psi_gpu(dim, g, sg); + GlobalC::hm.hpw.s_1psi_cuda(dim, g, sg); int inc=1; @@ -545,7 +545,7 @@ bool Diago_CG_CUDA::update_psi( int block = (dim + thread - 1) / thread; // pw.h_1psi(dim, cg, hcg, scg); // TODO // to cpu - GlobalC::hm.hpw.h_1psi_gpu(dim, cg, hcg, scg); + GlobalC::hm.hpw.h_1psi_cuda(dim, cg, hcg, scg); // hpsi end cg_norm = sqrt( this->ddot_real(dim, cg, scg) ); @@ -649,7 +649,7 @@ void Diago_CG_CUDA::schmit_orth int block = (dim + thread - 1) / thread; kernel_normalization<<>>(psi_m, dim, psi_norm); - GlobalC::hm.hpw.s_1psi_gpu(dim, psi_m, sphi); + GlobalC::hm.hpw.s_1psi_cuda(dim, psi_m, sphi); // cublasDestroy(handle); ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); @@ -699,7 +699,7 @@ void Diago_CG_CUDA::schmit_orth int block = (dim + thread - 1) / thread; kernel_normalization<<>>(psi_m, dim, psi_norm); - GlobalC::hm.hpw.s_1psi_gpu(dim, psi_m, sphi); + GlobalC::hm.hpw.s_1psi_cuda(dim, psi_m, sphi); // cublasDestroy(handle); ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); diff --git a/source/src_pw/hamilt.h b/source/src_pw/hamilt.h index 9621f3c79a..87d9773d07 100644 --- a/source/src_pw/hamilt.h +++ b/source/src_pw/hamilt.h @@ -3,7 +3,7 @@ #include "tools.h" #ifdef __CUDA -#include "hamilt_pw_gpu.h" +#include "hamilt_pw.cuh" #else #include "hamilt_pw.h" #endif diff --git a/source/src_pw/hamilt_pw_gpu.cu b/source/src_pw/hamilt_pw.cu similarity index 97% rename from source/src_pw/hamilt_pw_gpu.cu rename to source/src_pw/hamilt_pw.cu index 3ba098d018..b6d7a80ce7 100644 --- a/source/src_pw/hamilt_pw_gpu.cu +++ b/source/src_pw/hamilt_pw.cu @@ -1,6 +1,6 @@ #include "tools.h" #include "global.h" -#include "hamilt_pw_gpu.h" +#include "hamilt_pw.cuh" #include "../module_base/blas_connector.h" #include "../src_io/optical.h" // only get judgement to calculate optical matrix or not. #include "myfunc.h" @@ -442,10 +442,10 @@ void Hamilt_PW::diagH_subspace( return; } -void Hamilt_PW::h_1psi_gpu( const int npw_in, const float2 *psi, +void Hamilt_PW::h_1psi_cuda( const int npw_in, const float2 *psi, float2 *hpsi, float2 *spsi) { - this->h_psi_gpu(psi, hpsi); + this->h_psi_cuda(psi, hpsi); int thread = 512; int block = (npw_in + thread - 1) / thread; @@ -453,10 +453,10 @@ void Hamilt_PW::h_1psi_gpu( const int npw_in, const float2 *psi, return; } -void Hamilt_PW::h_1psi_gpu( const int npw_in, const double2 *psi, +void Hamilt_PW::h_1psi_cuda( const int npw_in, const double2 *psi, double2 *hpsi, double2 *spsi) { - this->h_psi_gpu(psi, hpsi); + this->h_psi_cuda(psi, hpsi); int thread = 512; int block = (npw_in + thread - 1) / thread; @@ -464,13 +464,13 @@ void Hamilt_PW::h_1psi_gpu( const int npw_in, const double2 *psi, return; } -void Hamilt_PW::s_1psi_gpu(const int dim, const float2 *psi, float2 *spsi) +void Hamilt_PW::s_1psi_cuda(const int dim, const float2 *psi, float2 *spsi) { CHECK_CUDA(cudaMemcpy(spsi, psi, dim*sizeof(float2), cudaMemcpyDeviceToDevice)); return; } -void Hamilt_PW::s_1psi_gpu(const int dim, const double2 *psi, double2 *spsi) +void Hamilt_PW::s_1psi_cuda(const int dim, const double2 *psi, double2 *spsi) { CHECK_CUDA(cudaMemcpy(spsi, psi, dim*sizeof(double2), cudaMemcpyDeviceToDevice)); return; @@ -503,7 +503,7 @@ void Hamilt_PW::s_1psi return; } -void Hamilt_PW::h_psi_gpu(const float2 *psi_in, float2 *hpsi, const int m) +void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, const int m) { ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); // int i = 0; @@ -696,7 +696,7 @@ void Hamilt_PW::h_psi_gpu(const float2 *psi_in, float2 *hpsi, const int m) // cout<<"===== becp before add nonloaclpp ===="<(becp, 15); - this->add_nonlocal_pp_gpu(hpsi, becp, f_vkb_c, m); + this->add_nonlocal_pp_cuda(hpsi, becp, f_vkb_c, m); // cublasDestroy(handle); CHECK_CUDA(cudaFree(becp)); @@ -721,7 +721,7 @@ void Hamilt_PW::h_psi_gpu(const float2 *psi_in, float2 *hpsi, const int m) return; } -void Hamilt_PW::h_psi_gpu(const double2 *psi_in, double2 *hpsi, const int m) +void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, const int m) { ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); // int i = 0; @@ -892,7 +892,7 @@ void Hamilt_PW::h_psi_gpu(const double2 *psi_in, double2 *hpsi, const int m) // cout<<"===== becp before add nonloaclpp ===="<(becp, 15); - this->add_nonlocal_pp_gpu(hpsi, becp, d_vkb_c, m); + this->add_nonlocal_pp_cuda(hpsi, becp, d_vkb_c, m); // cublasDestroy(handle); CHECK_CUDA(cudaFree(becp)); @@ -1133,13 +1133,13 @@ void Hamilt_PW::h_psi(const std::complex *psi_in, std::complex * } -void Hamilt_PW::add_nonlocal_pp_gpu( +void Hamilt_PW::add_nonlocal_pp_cuda( float2 *hpsi_in, const float2 *becp, const float2 *f_vkb_c, const int m) { - ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_gpu"); + ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_cuda"); // number of projectors int nkb = GlobalC::ppcell.nkb; @@ -1246,17 +1246,17 @@ void Hamilt_PW::add_nonlocal_pp_gpu( // delete[] ps; CHECK_CUDA(cudaFree(ps)); // cublasDestroy(handle); - ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_gpu"); + ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_cuda"); return; } -void Hamilt_PW::add_nonlocal_pp_gpu( +void Hamilt_PW::add_nonlocal_pp_cuda( double2 *hpsi_in, const double2 *becp, const double2 *d_vkb_c, const int m) { - ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_gpu"); + ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_cuda"); // number of projectors int nkb = GlobalC::ppcell.nkb; @@ -1356,7 +1356,7 @@ void Hamilt_PW::add_nonlocal_pp_gpu( // delete[] ps; CHECK_CUDA(cudaFree(ps)); // cublasDestroy(handle); - ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_gpu"); + ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_cuda"); return; } diff --git a/source/src_pw/hamilt_pw_gpu.h b/source/src_pw/hamilt_pw.cuh similarity index 94% rename from source/src_pw/hamilt_pw_gpu.h rename to source/src_pw/hamilt_pw.cuh index f4fc0987cc..658e62d2b3 100644 --- a/source/src_pw/hamilt_pw_gpu.h +++ b/source/src_pw/hamilt_pw.cuh @@ -49,13 +49,13 @@ class Hamilt_PW ModuleBase::ComplexMatrix &evc, double *en); - void h_1psi_gpu( + void h_1psi_cuda( const int npw, const float2 *psi1d, float2 *hpsi, float2 *spsi); - void h_1psi_gpu( + void h_1psi_cuda( const int npw, const double2 *psi1d, double2 *hpsi, @@ -67,22 +67,22 @@ class Hamilt_PW std::complex *hpsi, std::complex *spsi); - void h_psi_gpu( + void h_psi_cuda( const float2 *psi, float2 *hpsi, const int m = 1); - void h_psi_gpu( + void h_psi_cuda( const double2 *psi, double2 *hpsi, const int m = 1); - void s_1psi_gpu( + void s_1psi_cuda( const int npw, const float2 *psi, float2 *spsi); - void s_1psi_gpu( + void s_1psi_cuda( const int npw, const double2 *psi, double2 *spsi); @@ -108,13 +108,13 @@ class Hamilt_PW // add contributions of h*psi from // non-local pseduopotentials - void add_nonlocal_pp_gpu( + void add_nonlocal_pp_cuda( float2 *hpsi_in, const float2 *becp, const float2 *d_vkb_c, const int m); - void add_nonlocal_pp_gpu( + void add_nonlocal_pp_cuda( double2 *hpsi_in, const double2 *becp, const double2 *d_vkb_c, From dc40b2dab47256da881b70e8357bc9d3ad483489 Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Fri, 24 Sep 2021 16:57:20 +0800 Subject: [PATCH 007/478] Change file name: diago_cg_gpu.cu -> diago_cg.cu diago_cg_gpu.h -> diago_cg.cuh --- source/src_pw/CMakeLists.txt | 2 +- .../src_pw/{diago_cg_gpu.cu => diago_cg.cu} | 2 +- .../src_pw/{diago_cg_gpu.h => diago_cg.cuh} | 6 +-- source/src_pw/hamilt.cu | 40 +++++++++---------- source/src_pw/hamilt.h | 1 - source/src_pw/hamilt_cu.bak | 30 +++++++------- source/src_pw/hamilt_pw.cuh | 4 +- 7 files changed, 41 insertions(+), 44 deletions(-) rename source/src_pw/{diago_cg_gpu.cu => diago_cg.cu} (99%) rename source/src_pw/{diago_cg_gpu.h => diago_cg.cuh} (97%) diff --git a/source/src_pw/CMakeLists.txt b/source/src_pw/CMakeLists.txt index b4a7fb12c0..5d8e0766cd 100644 --- a/source/src_pw/CMakeLists.txt +++ b/source/src_pw/CMakeLists.txt @@ -59,7 +59,7 @@ list(APPEND objects run_md_pw.cpp) if(USE_CUDA) list(APPEND objects - diago_cg_gpu.cu + diago_cg.cu hamilt.cu hamilt_pw.cu use_fft_kernel.cu diff --git a/source/src_pw/diago_cg_gpu.cu b/source/src_pw/diago_cg.cu similarity index 99% rename from source/src_pw/diago_cg_gpu.cu rename to source/src_pw/diago_cg.cu index 20123fe0c7..d893607e2b 100644 --- a/source/src_pw/diago_cg_gpu.cu +++ b/source/src_pw/diago_cg.cu @@ -1,4 +1,4 @@ -#include "diago_cg_gpu.h" +#include "diago_cg.cuh" #include "cuda_runtime.h" #include "global.h" diff --git a/source/src_pw/diago_cg_gpu.h b/source/src_pw/diago_cg.cuh similarity index 97% rename from source/src_pw/diago_cg_gpu.h rename to source/src_pw/diago_cg.cuh index 446bdac7bc..af4b4d00ef 100644 --- a/source/src_pw/diago_cg_gpu.h +++ b/source/src_pw/diago_cg.cuh @@ -1,7 +1,5 @@ -// #include "ft_gpu.h" -// #include "tools.h" -# ifndef DIAGO_CG_GPU_H -# define DIAGO_CG_GPU_H +# ifndef DIAGO_CG_CUH +# define DIAGO_CG_CUH #include "cufft.h" #include "cublas_v2.h" diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index 02923acf80..e490e52a71 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -2,7 +2,7 @@ #include "hamilt.h" #include "diago_cg.h" #include "diago_david.h" -#include "diago_cg_gpu.h" +#include "diago_cg.cuh" #include "cufft.h" @@ -126,47 +126,47 @@ void Hamilt::diagH_pw( avg_iter += 1.0; } - // Diago_CG_CUDA f_cg_gpu; - Diago_CG_CUDA d_cg_gpu; + // Diago_CG_CUDA f_cg_cuda; + Diago_CG_CUDA d_cg_cuda; bool reorder = true; double2 *d_wf_evc; double *d_wf_ekb; - int DIM_CG_GPU = GlobalC::kv.ngk[ik]; - int DIM_CG_GPU2 = GlobalC::wf.npwx * GlobalV::NPOL; + int DIM_CG_CUDA = GlobalC::kv.ngk[ik]; + int DIM_CG_CUDA2 = GlobalC::wf.npwx * GlobalV::NPOL; double *d_precondition; float2 *f_wf_evc; float *f_wf_ekb; - // int DIM_CG_GPU = GlobalC::kv.ngk[ik]; - // int DIM_CG_GPU2 = GlobalC::wf.npwx * GlobalV::NPOL; + // int DIM_CG_CUDA = GlobalC::kv.ngk[ik]; + // int DIM_CG_CUDA2 = GlobalC::wf.npwx * GlobalV::NPOL; float *f_precondition; if(GlobalV::NPOL==1) { CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2))); CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); - CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_GPU * sizeof(double))); + CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_CUDA * sizeof(double))); CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2), cudaMemcpyHostToDevice)); // CHECK_CUDA(cudaMemcpy(d_wf_ekb, wf.ekb[ik], NBANDS * sizeof(double), cudaMemcpyHostToDevice)); - CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_GPU * sizeof(double), cudaMemcpyHostToDevice)); + CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_CUDA * sizeof(double), cudaMemcpyHostToDevice)); // cast to float // if(istep < 3) // { // CHECK_CUDA(cudaMalloc((void**)&f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(float2))); // CHECK_CUDA(cudaMalloc((void**)&f_wf_ekb, GlobalV::NBANDS * sizeof(float))); - // CHECK_CUDA(cudaMalloc((void**)&f_precondition, DIM_CG_GPU * sizeof(float))); + // CHECK_CUDA(cudaMalloc((void**)&f_precondition, DIM_CG_CUDA * sizeof(float))); // int thread = 512; // int block = GlobalV::NBANDS * GlobalC::wf.npwx / thread + 1; // int block2 = GlobalV::NBANDS / thread + 1; - // int block3 = DIM_CG_GPU / thread + 1; + // int block3 = DIM_CG_CUDA / thread + 1; // hamilt_cast_d2f<<>>(f_wf_evc, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); - // hamilt_cast_d2f<<>>(f_precondition, d_precondition, DIM_CG_GPU); + // hamilt_cast_d2f<<>>(f_precondition, d_precondition, DIM_CG_CUDA); // cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); - // f_cg_gpu.diag(f_wf_evc, f_wf_ekb, DIM_CG_GPU, GlobalC::wf.npwx, + // f_cg_cuda.diag(f_wf_evc, f_wf_ekb, DIM_CG_CUDA, GlobalC::wf.npwx, // GlobalV::NBANDS, f_precondition, GlobalV::ETHR, // GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); // hamilt_cast_f2d<<>>(d_wf_evc, f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); @@ -175,7 +175,7 @@ void Hamilt::diagH_pw( // else // { cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - d_cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU, GlobalC::wf.npwx, + d_cg_cuda.diag(d_wf_evc, d_wf_ekb, DIM_CG_CUDA, GlobalC::wf.npwx, GlobalV::NBANDS, d_precondition, GlobalV::ETHR, GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); // } @@ -194,23 +194,23 @@ void Hamilt::diagH_pw( else { // to gpu - CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * DIM_CG_CUDA2 * sizeof(double2))); CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); - CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_GPU2 * sizeof(double))); + CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_CUDA2 * sizeof(double))); - CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(double2), cudaMemcpyHostToDevice)); + CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * DIM_CG_CUDA2 * sizeof(double2), cudaMemcpyHostToDevice)); // CHECK_CUDA(cudaMemcpy(d_wf_ekb, GlobalC::wf.ekb[ik], GlobalV::NBANDS * sizeof(double), cudaMemcpyHostToDevice)); - CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_GPU2 * sizeof(double), cudaMemcpyHostToDevice)); + CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_CUDA2 * sizeof(double), cudaMemcpyHostToDevice)); // do things cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - d_cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU2, DIM_CG_GPU2, + d_cg_cuda.diag(d_wf_evc, d_wf_ekb, DIM_CG_CUDA2, DIM_CG_CUDA2, GlobalV::NBANDS, d_precondition, GlobalV::ETHR, GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); cufftDestroy(GlobalC::UFFT.fft_handle); // to cpu - CHECK_CUDA(cudaMemcpy(GlobalC::wf.evc[ik0].c, d_wf_evc, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(double2), cudaMemcpyDeviceToHost)); + CHECK_CUDA(cudaMemcpy(GlobalC::wf.evc[ik0].c, d_wf_evc, GlobalV::NBANDS * DIM_CG_CUDA2 * sizeof(double2), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaMemcpy(GlobalC::wf.ekb[ik], d_wf_ekb, GlobalV::NBANDS * sizeof(double), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaFree(d_wf_evc)); diff --git a/source/src_pw/hamilt.h b/source/src_pw/hamilt.h index 87d9773d07..0b232f513e 100644 --- a/source/src_pw/hamilt.h +++ b/source/src_pw/hamilt.h @@ -48,7 +48,6 @@ class Hamilt ModuleBase::ComplexMatrix &hvec); // output: eigenvectors Hamilt_PW hpw; - // Hamilt_PW_GPU hpw_gpu; private: diff --git a/source/src_pw/hamilt_cu.bak b/source/src_pw/hamilt_cu.bak index a8ed9d3a59..d4d8ed8fa9 100644 --- a/source/src_pw/hamilt_cu.bak +++ b/source/src_pw/hamilt_cu.bak @@ -2,7 +2,7 @@ #include "global.h" #include "hamilt.h" #include "diago_cg.h" -#include "diago_cg_gpu.h" // Diago_CG_CUDA +#include "diago_cg.h" // Diago_CG_CUDA #include "diago_david.h" #include "cuda_runtime.h" #include "time.h" @@ -86,13 +86,13 @@ void Hamilt::diagH_pw( avg_iter += 1.0; } // Diago_CG cg; - Diago_CG_CUDA cg_gpu; + Diago_CG_CUDA cg_cuda; bool reorder = true; CUFFT_COMPLEX *d_wf_evc; double *d_wf_ekb; - int DIM_CG_GPU = GlobalC::kv.ngk[ik]; - int DIM_CG_GPU2 = GlobalC::wf.npwx * GlobalV::NPOL; + int DIM_CG_CUDA = GlobalC::kv.ngk[ik]; + int DIM_CG_CUDA2 = GlobalC::wf.npwx * GlobalV::NPOL; double *d_precondition; if(GlobalV::NPOL==1) @@ -103,13 +103,13 @@ void Hamilt::diagH_pw( cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(CUFFT_COMPLEX)); cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double)); - cudaMalloc((void**)&d_precondition, DIM_CG_GPU * sizeof(double)); + cudaMalloc((void**)&d_precondition, DIM_CG_CUDA * sizeof(double)); cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(CUFFT_COMPLEX), cudaMemcpyHostToDevice); // cudaMemcpy(d_wf_ekb, wf.ekb[ik], NBANDS * sizeof(double), cudaMemcpyHostToDevice); - cudaMemcpy(d_precondition, precondition, DIM_CG_GPU * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(d_precondition, precondition, DIM_CG_CUDA * sizeof(double), cudaMemcpyHostToDevice); - cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU, GlobalC::wf.npwx, + cg_cuda.diag(d_wf_evc, d_wf_ekb, DIM_CG_CUDA, GlobalC::wf.npwx, GlobalV::NBANDS, d_precondition, GlobalV::ETHR, GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); @@ -124,24 +124,24 @@ void Hamilt::diagH_pw( } else { - // int DIM_CG_GPU = kv.ngk[ik]; - // int DIM_CG_GPU2 = wf.npwx * NPOL; + // int DIM_CG_CUDA = kv.ngk[ik]; + // int DIM_CG_CUDA2 = wf.npwx * NPOL; // cg.diag(wf.evc[ik0], wf.ekb[ik], wf.npwx*NPOL, wf.npwx*NPOL, // NBANDS, precondition, ETHR, // DIAGO_CG_MAXITER, reorder, notconv, avg); // to gpu - cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(CUFFT_COMPLEX)); + cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * DIM_CG_CUDA2 * sizeof(CUFFT_COMPLEX)); cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double)); - cudaMalloc((void**)&d_precondition, DIM_CG_GPU2 * sizeof(double)); + cudaMalloc((void**)&d_precondition, DIM_CG_CUDA2 * sizeof(double)); - cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * DIM_CG_GPU2 * sizeof(CUFFT_COMPLEX), cudaMemcpyHostToDevice); + cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * DIM_CG_CUDA2 * sizeof(CUFFT_COMPLEX), cudaMemcpyHostToDevice); // cudaMemcpy(d_wf_ekb, GlobalC::wf.ekb[ik], GlobalV::NBANDS * sizeof(double), cudaMemcpyHostToDevice); - cudaMemcpy(d_precondition, precondition, DIM_CG_GPU2 * sizeof(double), cudaMemcpyHostToDevice); + cudaMemcpy(d_precondition, precondition, DIM_CG_CUDA2 * sizeof(double), cudaMemcpyHostToDevice); // do things // clock_t test_t1, test_t2; // test_t1 = clock(); - cg_gpu.diag(d_wf_evc, d_wf_ekb, DIM_CG_GPU2, DIM_CG_GPU2, + cg_cuda.diag(d_wf_evc, d_wf_ekb, DIM_CG_CUDA2, DIM_CG_CUDA2, GlobalV::NBANDS, d_precondition, GlobalV::ETHR, GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); @@ -150,7 +150,7 @@ void Hamilt::diagH_pw( // cout<<"Diago time ... "< Date: Tue, 28 Sep 2021 16:25:56 +0800 Subject: [PATCH 008/478] Add determination of mixing accuracy in hamilt.cu --- source/src_pw/diago_cg.cu | 2 +- source/src_pw/hamilt.cu | 60 +++++++++++++++++++++------------------ 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/source/src_pw/diago_cg.cu b/source/src_pw/diago_cg.cu index d893607e2b..860e466e16 100644 --- a/source/src_pw/diago_cg.cu +++ b/source/src_pw/diago_cg.cu @@ -848,4 +848,4 @@ double2 Diago_CG_CUDA::ddot } // end of ddot template class Diago_CG_CUDA; -// template class Diago_CG_CUDA; +template class Diago_CG_CUDA; diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index e490e52a71..f58abb3ead 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -1,6 +1,6 @@ #include "global.h" #include "hamilt.h" -#include "diago_cg.h" +// #include "diago_cg.h" #include "diago_david.h" #include "diago_cg.cuh" #include "cufft.h" @@ -126,7 +126,7 @@ void Hamilt::diagH_pw( avg_iter += 1.0; } - // Diago_CG_CUDA f_cg_cuda; + Diago_CG_CUDA f_cg_cuda; Diago_CG_CUDA d_cg_cuda; bool reorder = true; @@ -152,33 +152,37 @@ void Hamilt::diagH_pw( CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2), cudaMemcpyHostToDevice)); // CHECK_CUDA(cudaMemcpy(d_wf_ekb, wf.ekb[ik], NBANDS * sizeof(double), cudaMemcpyHostToDevice)); CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_CUDA * sizeof(double), cudaMemcpyHostToDevice)); - + // cout<<"ITER: "<>>(f_wf_evc, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); - // hamilt_cast_d2f<<>>(f_precondition, d_precondition, DIM_CG_CUDA); - // cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); - // f_cg_cuda.diag(f_wf_evc, f_wf_ekb, DIM_CG_CUDA, GlobalC::wf.npwx, - // GlobalV::NBANDS, f_precondition, GlobalV::ETHR, - // GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); - // hamilt_cast_f2d<<>>(d_wf_evc, f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); - // hamilt_cast_f2d<<>>(d_wf_ekb, f_wf_ekb, GlobalV::NBANDS); - // } - // else - // { - cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - d_cg_cuda.diag(d_wf_evc, d_wf_ekb, DIM_CG_CUDA, GlobalC::wf.npwx, - GlobalV::NBANDS, d_precondition, GlobalV::ETHR, - GlobalV::DIAGO_CG_MAXITER, reorder, notconv, avg); - // } + // if(iter < 100) + if(iter == 1 || GlobalV::ETHR > 5e-4) + { + CHECK_CUDA(cudaMalloc((void**)&f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(float2))); + CHECK_CUDA(cudaMalloc((void**)&f_wf_ekb, GlobalV::NBANDS * sizeof(float))); + CHECK_CUDA(cudaMalloc((void**)&f_precondition, DIM_CG_CUDA * sizeof(float))); + int thread = 512; + int block = GlobalV::NBANDS * GlobalC::wf.npwx / thread + 1; + int block2 = GlobalV::NBANDS / thread + 1; + int block3 = DIM_CG_CUDA / thread + 1; + hamilt_cast_d2f<<>>(f_wf_evc, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); + hamilt_cast_d2f<<>>(f_precondition, d_precondition, DIM_CG_CUDA); + cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); + // cout<<"Do float CG ..."<>>(d_wf_evc, f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); + hamilt_cast_f2d<<>>(d_wf_ekb, f_wf_ekb, GlobalV::NBANDS); + } + else + { + cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); + // cout<<"Do double CG ..."< Date: Fri, 8 Oct 2021 13:30:39 +0800 Subject: [PATCH 009/478] add cudaDeviceSynchronize to fix bug of NAN. --- source/src_pw/diago_cg.cu | 1 + 1 file changed, 1 insertion(+) diff --git a/source/src_pw/diago_cg.cu b/source/src_pw/diago_cg.cu index 860e466e16..9bf9cf54fa 100644 --- a/source/src_pw/diago_cg.cu +++ b/source/src_pw/diago_cg.cu @@ -175,6 +175,7 @@ void Diago_CG_CUDA::diag { if (test_cg>2) GlobalV::ofs_running << "Diagonal Band : " << m << endl; // cout<<"====band====="< Date: Tue, 12 Oct 2021 16:08:49 +0800 Subject: [PATCH 010/478] Optimize: add vkb.c to parameters and delete some cudaMalloc&cudaFree. --- source/src_pw/diago_cg.cu | 10 +- source/src_pw/diago_cg.cuh | 4 +- source/src_pw/diago_david.cu | 659 ++++++++++++++++++++++++++++++++++ source/src_pw/diago_david.cuh | 108 ++++++ source/src_pw/hamilt.cu | 29 +- source/src_pw/hamilt_pw.cu | 52 +-- source/src_pw/hamilt_pw.cuh | 8 +- 7 files changed, 833 insertions(+), 37 deletions(-) create mode 100644 source/src_pw/diago_david.cu create mode 100644 source/src_pw/diago_david.cuh diff --git a/source/src_pw/diago_cg.cu b/source/src_pw/diago_cg.cu index 9bf9cf54fa..3107128194 100644 --- a/source/src_pw/diago_cg.cu +++ b/source/src_pw/diago_cg.cu @@ -114,6 +114,7 @@ void Diago_CG_CUDA::diag ( T2 *phi, // matrix nband*dim T *e, + T2 *vkb_c, const int &dim, const int &dmx, const int &n_band, @@ -187,7 +188,7 @@ void Diago_CG_CUDA::diag // cout<<"====phi_m after schmit===="<(phi_m, 15); - GlobalC::hm.hpw.h_1psi_cuda(dim, phi_m, hphi, sphi); + GlobalC::hm.hpw.h_1psi_cuda(dim, phi_m, hphi, sphi, vkb_c); // cout<<"====hphi after hpsi===="<(hphi, 15); @@ -220,7 +221,7 @@ void Diago_CG_CUDA::diag this->calculate_gamma_cg( iter, dim, precondition, g, scg, g0, cg, gg_last, cg_norm, theta, phi_m);// scg used as sg converged = this->update_psi( dim, cg_norm, theta, pphi, cg, scg, phi_m , - em_host, eps, hphi, sphi); // pphi is used as hcg + em_host, eps, hphi, sphi, vkb_c); // pphi is used as hcg // cout<<"====hphi after update===="<(hphi, 15); @@ -538,7 +539,8 @@ bool Diago_CG_CUDA::update_psi( T &eigenvalue, const T &threshold, T2 *hpsi, - T2 *sphi) + T2 *sphi, + T2 *vkb_c) { if (test_cg==1) ModuleBase::TITLE("Diago_CG_CUDA","update_psi"); ModuleBase::timer::tick("Diago_CG_CUDA","update_psi"); @@ -546,7 +548,7 @@ bool Diago_CG_CUDA::update_psi( int block = (dim + thread - 1) / thread; // pw.h_1psi(dim, cg, hcg, scg); // TODO // to cpu - GlobalC::hm.hpw.h_1psi_cuda(dim, cg, hcg, scg); + GlobalC::hm.hpw.h_1psi_cuda(dim, cg, hcg, scg, vkb_c); // hpsi end cg_norm = sqrt( this->ddot_real(dim, cg, scg) ); diff --git a/source/src_pw/diago_cg.cuh b/source/src_pw/diago_cg.cuh index af4b4d00ef..9cee6c0e38 100644 --- a/source/src_pw/diago_cg.cuh +++ b/source/src_pw/diago_cg.cuh @@ -64,6 +64,7 @@ public: void diag( T2 *phi, // matrix T *e, + T2 *vkb_c, const int &dim, const int &dmx, const int &n_band, @@ -147,7 +148,8 @@ private: T &eigenvalue, const T &threshold, T2 *hpsi, - T2 *spsi); + T2 *spsi, + T2 *vkb_c); }; # endif diff --git a/source/src_pw/diago_david.cu b/source/src_pw/diago_david.cu new file mode 100644 index 0000000000..22564f55e6 --- /dev/null +++ b/source/src_pw/diago_david.cu @@ -0,0 +1,659 @@ +#include "diago_david.cuh" +#include "diago_cg.cuh" +#include "global.h" + + +template +__global__ void kernel_precondition_david(T2 *res, const T2 *data, const int size, const T *P) +{ + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if(idx < size) + { + res[idx].x = data[idx].x / P[idx]; + res[idx].y = data[idx].y / P[idx]; + } +} + +template +__global__ void kernel_add_respsi(T2* respsi, int nbase, int npw, T2* vc, T2* hp, T2* sp, int unconv_m, T e_unconv_m); +{ + int ig = blockDim.x * blockIdx.x + threadIdx.x; + for ( int i = 0; i < nbase; i++ ) + { + respsi[ig] += vc[i*npw + unconv_m] * (hp[i*npw + ig] - e_unconv_m * sp[i*npw + ig]); + } +} + +template +__global__ void kernel_normalization_david(T2 *data, int size, T norm) +{ + int idx = blockIdx.x * blockDim.x + threadIdx.x; + if(idx < size) + { + data[idx].x /= norm; + data[idx].y /= norm; + } +} + +Diago_David_CUDA::Diago_David_CUDA() +{ + test_david = 2; + // 1: check which function is called and which step is executed + // 2: check the eigenvalues of the result of each iteration + // 3: check the eigenvalues and errors of the last result + // default: no check +} + +Diago_David_CUDA::~Diago_David_CUDA() +{ +} + + +void Diago_David_CUDA::diag +( + double2* psi, // matrix + double* en, + const int& npw, + const int& nband, + const double* precondition, + const int order, + const double& eps, + const int& maxiter, + int& notconv, + double& avg_iter +) +{ + if (test_david==1) ModuleBase::TITLE("Diago_David_CUDA","diag"); + ModuleBase::timer::tick("Diago_David_CUDA", "diag"); + + assert( order > 1 ); + assert( order*nband < npw * GlobalV::NPROC_IN_POOL ); + //qianrui change it 2021-7-25. + //In strictly speaking, it shoule be order*nband < npw sum of all pools. We roughly estimate it here. + //However, in most cases, total number of plane waves should be much larger than nband*order + + int nbase_x = order * nband ; // maximum dimension of the reduced basis set + + // ModuleBase::ComplexMatrix basis( nbase_x, npw ); // the reduced basis set + // ModuleBase::ComplexMatrix hp( nbase_x, npw ); // the product of H and psi in the reduced basis set + // ModuleBase::ComplexMatrix sp( nbase_x, npw ); // the Product of S and psi in the reduced basis set + + double2* basis; + double2* hp; + double2* sp; + CHECK_CUDA(cudaMalloc((void**)&basis, nbase_x*npw*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&hp, nbase_x*npw*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&sp, nbase_x*npw*sizeof(double2))); + + + // ModuleBase::ComplexMatrix hc( nbase_x, nbase_x ); // Hamiltonian on the reduced basis + // ModuleBase::ComplexMatrix sc( nbase_x, nbase_x ); // Overlap on the reduced basis + // ModuleBase::ComplexMatrix vc( nbase_x, nbase_x ); // Eigenvectors of hc + // double* e = new double[nbase_x]; // the lowest N eigenvalues of hc + // assert(e != 0) ; + + double2* hc; + double2* sc; + double2* vc; + double* e; + CHECK_CUDA(cudaMalloc((void**)&hc, nbase_x*nbase_x*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&sc, nbase_x*nbase_x*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&vc, nbase_x*nbase_x*sizeof(double2))); + // CHECK_CUDA(cudaMalloc((void**)&e, nbase_x*sizeof(double))); + assert(e != 0); + + // double2* psi_m = new double2[npw] ; + // assert(psi_m != 0) ; + // double2* hpsi = new double2[npw] ; + // assert(hpsi != 0) ; + // double2* spsi = new double2[npw] ; + // assert(spsi != 0) ; + // double2* ppsi = new double2[npw] ; + // assert(ppsi != 0) ; + // double2* respsi = new double2[npw] ; + // assert(respsi != 0) ; + + double2* psi_m; + double2* hpsi; + double2* spsi; + double2* ppsi; + double2* respsi; + CHECK_CUDA(cudaMalloc((void**)&psi_m, npw*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&hpsi, npw*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&spsi, npw*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&ppsi, npw*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&respsi, npw*sizeof(double2))); + // TODO: add assert ... + + // bool* convflag = new bool[nband] ; // convflag[m] = true if the m th band is convergent + // assert(convflag != 0) ; + // int* unconv = new int[nband] ; // unconv[m] store the number of the m th unconvergent band + // assert(unconv != 0) ; + + bool* convflag = new bool[nband]; + int* unconv = new int[nband]; + // TODO: add assert + + int nbase = 0; // the dimension of the reduced basis set + notconv = nband; // the number of the unconvergent bands + // ModuleBase::GlobalFunc::ZEROS( convflag, nband ); + for ( int m = 0 ; m < nband; m++ ) unconv[m] = m; + + ModuleBase::timer::tick("Diago_David_CUDA","first"); + // orthogonalise the initial trial psi(0~nband-1) + for (int m = 0; m < nband; m++) + { + // psi_m = psi(m) + CHECK_CUDA(cudaMemcpy(psi_m, psi[npw*m], npw*sizeof(double2), cudaMemcpyDeviceToDevice)); + + this->SchmitOrth(npw, nband, m, basis, psi_m, spsi); + + GlobalC::hm.hpw.h_1psi_cuda(npw, psi_m, hpsi, spsi); + + // basis(m) = psi_m, hp(m) = H |psi_m>, sp(m) = S |psi_m> + CHECK_CUDA(cudaMemcpy(basis[npw*m], psi_m, npw*sizeof(double2), cudaMemcpyDeviceToDevice)); + CHECK_CUDA(cudaMemcpy(hp[npw*m], hpsi, npw*sizeof(double2),cudaMemcpyDeviceToDevice)); + CHECK_CUDA(cudaMemcpy(sp[npw*m], spsi, npw*sizeof(double2), cudaMemcpyDeviceToDevice)); + } + + // TODO: zero_out ... + hc.zero_out(); + sc.zero_out(); + + this->cal_elem( npw, nbase, nbase_x, notconv, basis, hp, sp, hc, sc ); + + this->diag_zhegvx( nbase, nband, hc, sc, nbase_x, e, vc ); + + for ( int m = 0; m < nband; m++ ) + { + en[m] = e[m]; + } + // (en & e is on host.) + // CHECK_CUDA(cudaMemcpy(en, e, nband*sizeof(double), cudaMemcpyHostToDevice)); + + ModuleBase::timer::tick("Diago_David_CUDA","first"); + + int dav_iter = 0; + do + { + dav_iter++; + + this->cal_grad( npw, nbase, notconv, basis, hp, sp, vc, + unconv, precondition, e, hpsi, spsi, ppsi, respsi ); + + this->cal_elem( npw, nbase, notconv, basis, hp, sp, hc, sc ); + + this->diag_zhegvx( nbase, nband, hc, sc, nbase_x, e, vc ); + + // check convergence and update eigenvalues + ModuleBase::timer::tick("Diago_David_CUDA","check_update"); + + notconv = 0; + for ( int m = 0 ; m < nband; m++ ) + { + convflag[m] = ( abs( e[m] - en[m] ) < eps ); + + if ( !convflag[m] ) + { + unconv[notconv] = m; + notconv++; + } + + en[m] = e[m]; + } + + ModuleBase::timer::tick("Diago_David_CUDA","check_update"); + /* + // test_david==2 std::cout info of each iteration + if( test_david==2 ) + { + std::cout << "iter = " << dav_iter << " notconv = " << notconv << std::endl; + out.printr1_d( "energy", en, nband ); + } + */ + if ( !notconv || ( nbase + notconv > nbase_x) || (dav_iter == maxiter) ) + { + ModuleBase::timer::tick("Diago_David_CUDA","last"); + + // updata eigenvectors of Hamiltonian + psi.zero_out(); + for ( int m = 0; m < nband; m++ ) + { + for ( int j = 0; j < nbase; j++ ) + { + for ( int ig = 0; ig < npw; ig++ ) + { + psi(m,ig) += vc(j,m) * basis(j,ig); + } + } + } + // add kernel + + if ( !notconv || (dav_iter == maxiter) ) + { + // overall convergence or last iteration: exit the iteration + + ModuleBase::timer::tick("Diago_David_CUDA","last"); + break; + } + else + { + // if the dimension of the reduced basis set is becoming too large, + // then replace the first N (=nband) basis vectors with the current + // estimate of the eigenvectors and set the basis dimension to N; + + this->refresh( npw, nband, nbase, en, psi, basis, hp, sp, hc, sc, vc ); + ModuleBase::timer::tick("Diago_David_CUDA","last"); + } + + }// end of if + + } while (1); + + avg_iter = static_cast(dav_iter); + /* + // if( test_david==3 ) std::cout info of davidson diag + if( test_david==3 ) + { + std::cout << "hamilt davidson diag output " << std::endl ; + std::cout << "dav_iter = " << dav_iter <<" notconv = " << notconv << std::endl; + this->cal_err( npw, nband, nbase, vc, hp, basis, en, respsi ); + std::cout << "hamilt davidson diag output end " << std::endl ; + } + */ + delete[] e; + delete[] psi_m; + delete[] hpsi; + delete[] spsi; + delete[] ppsi; + delete[] respsi; + delete[] convflag; + delete[] unconv; + + ModuleBase::timer::tick("Diago_David_CUDA", "diag"); + return; +} + +void Diago_David_CUDA::cal_grad +( + const int& npw, + const int& nbase, // current dimension of the reduced basis + const int& notconv, + double2* basis, // matrix + double2* hp, // matrix + double2* sp, // matrix + const double2* vc, + const int* unconv, + const double* precondition, + const double* e, + double2* hpsi, + double2* spsi, + double2* ppsi, + double2* respsi +) +{ + if ( test_david ==1 ) ModuleBase::TITLE("DIAGO_DAVID","cal_grad"); + ModuleBase::timer::tick("Diago_David_CUDA", "cal_grad" + ); + + // expand the reduced basis set with the new basis vectors P|R(psi)>... + // in which psi are the last eigenvectors + // we define |R(psi)> as (H-ES)*|Psi>, E = / + for ( int m = 0; m < notconv; m++ ) + { + // ModuleBase::GlobalFunc::ZEROS( respsi, npw ); + // TODO: zeros(respsi); + + // for ( int i = 0; i < nbase; i++ ) + // { + // for ( int ig = 0; ig < npw; ig++ ) + // { + // respsi[ig] += vc( i, unconv[m] ) * ( hp(i,ig) - e[ unconv[m] ] * sp(i,ig) ) ; + // } + // } + int thread = 512; + int block = (npw + thread - 1) / thread; + kernel_add_respsi<<>>(respsi, nbase, npw, vc, hp, sp, unconv[m], e[unconv[m]]); + + // for ( int ig = 0; ig < npw; ig++ ) + // { + // ppsi[ig] = respsi[ig] / precondition[ig] ; + // } + kernel_precondition_david<<>>(ppsi, respsi, npw, precondition); +/* + double ppsi_norm = Diago_CG::ddot_real( npw, ppsi, ppsi); + double rpsi_norm = Diago_CG::ddot_real( npw, respsi, respsi); + assert( rpsi_norm > 0.0 ); + assert( ppsi_norm > 0.0 ); +*/ + this->SchmitOrth(npw, nbase+notconv, nbase+m, basis, ppsi, spsi); + + GlobalC::hm.hpw.h_1psi(npw, ppsi, hpsi, spsi); + + // for ( int ig = 0; ig < npw; ig++ ) + // { + // basis(nbase+m,ig) = ppsi[ig]; + // hp(nbase+m,ig) = hpsi[ig]; + // sp(nbase+m,ig) = spsi[ig]; + // } + CHECK_CUDA(cudaMemcpy(basis[(nbase+m)*npw], ppsi, npw*sizeof(double2), cudaMemcpyDeviceToDevice)); + CHECK_CUDA(cudaMemcpy(hp[(nbase+m)*npw], hpsi, npw*sizeof(double2), cudaMemcpyDeviceToDevice)); + CHECK_CUDA(cudaMemcpy(sp[(nbase+m)*npw], spsi, npw*sizeof(double2), cudaMemcpyDeviceToDevice)); + } + + ModuleBase::timer::tick("Diago_David_CUDA","cal_grad"); + return; +} + +void Diago_David_CUDA::cal_elem +( + const int& npw, + int& nbase, // current dimension of the reduced basis + int& nbase_x, + const int& notconv, // number of newly added basis vectors + const double2* basis, // matrix + const double2* hp, // matrix + const double2* sp, // matrix + double2* hc, // nbase_x * nbase_x + double2* sc // nbase_x * nbase_x +) +{ + if ( test_david ==1 ) ModuleBase::TITLE("DIAGO_DAVID_CUDA","cal_elem"); + ModuleBase::timer::tick("Diago_David_CUDA","cal_elem"); + + // updat the reduced Hamiltonian + int offset_h = nbase * nbase_x ; + int offset_s = nbase * nbase_x ; +// ModuleBase::GlobalFunc::ZEROS( hc.c+offset_h, notconv*hc.nr ); +// ModuleBase::GlobalFunc::ZEROS( sc.c+offset_s, notconv*sc.nr ); + + for ( int i = nbase; i < nbase+notconv; i++ ) + { + for ( int j = 0; j <= i; j++ ) + { + hc[j*nbase_x+i] = ddot(npw, basis, j, hp, i); + sc[j*nbase_x+i] = ddot(npw, basis, j, sp, i); + } + } + + // Parallel_Reduce::reduce_complex_double_pool( hc.c+offset_h, notconv*hc.nr ); + // Parallel_Reduce::reduce_complex_double_pool( sc.c+offset_s, notconv*sc.nr ); + /* + for( int i = nbase; i < nbase+notconv; i++ ) + { + for( int j = 0; j = max(1,n) ); + int lwork ; + int info = 0; + int mm = m; + std::string name1 = "ZHETRD"; + std::string name2 = "L"; + + int nb = LapackConnector::ilaenv(1, name1.c_str(), name2.c_str(), n, -1, -1, -1); + if (nb < 1) + { + nb = max(1, n); + } + if (nb == 1 || nb >= n) + { + lwork = 2 * n; //qianrui fix a bug 2021-7-25 : lwork should be at least max(1,2*n) + } + else + { + lwork = (nb + 1) * n; + } + double2 *work = new double2[2*lwork]; + assert(work != 0); + double *rwork = new double[7*n]; + assert(rwork != 0); + int *iwork = new int [5*n]; + assert(iwork != 0); + int *ifail = new int[n]; + assert(ifail != 0); + ModuleBase::GlobalFunc::ZEROS(work,lwork); //qianrui change it, only first lwork numbers are used in zhegvx + ModuleBase::GlobalFunc::ZEROS(rwork,7*n); + ModuleBase::GlobalFunc::ZEROS(iwork,5*n); + ModuleBase::GlobalFunc::ZEROS(ifail,n); + + //ModuleBase::WARNING_QUIT("divid","open zhegvx!"); + + LapackConnector::zhegvx(1, 'V', 'I', 'L', n, hc, n, sc, n, + 0.0, 0.0, 1, m, 0.0, mm, e, vc, n, + work, lwork, rwork, iwork, ifail, info); +/* + double2 vc_norm = 0.0; + for(int ib =0; ib < n; ib++) + { + vc_norm += conj(vc(ib, 0)) * vc(ib, 0); + } + assert( vc_norm.real() > 0.0); +*/ + delete[] work; + delete[] rwork; + delete[] iwork; + delete[] ifail; + ModuleBase::timer::tick("Diago_David_CUDA","diag_zhegvx"); + return; +} + +void Diago_David_CUDA::refresh +( + const int& npw, + const int& nband, + int& nbase, + const double* en, + const ModuleBase::ComplexMatrix &psi, + ModuleBase::ComplexMatrix &basis, + ModuleBase::ComplexMatrix &hp, + ModuleBase::ComplexMatrix &sp, + ModuleBase::ComplexMatrix &hc, + ModuleBase::ComplexMatrix &sc, + ModuleBase::ComplexMatrix &vc +) +{ + if ( test_david==1 ) ModuleBase::TITLE("Diago_David_CUDA","refresh"); + ModuleBase::timer::tick("Diago_David_CUDA","refresh"); + + // update hp,sp + basis.zero_out(); + for ( int m = 0; m < nband; m++ ) + { + for ( int j = 0; j < nbase; j++ ) + { + for ( int ig = 0; ig < npw; ig++ ) + { + basis(m, ig) += vc(j,m) * hp(j,ig); + basis(m+nband, ig) +=vc(j,m) * sp(j,ig); + } + } + } + + for ( int m = 0; m < nband; m++ ) + { + for (int ig = 0; ig < npw; ig++) + { + hp(m,ig) = basis(m, ig); + sp(m,ig) = basis(m+nband, ig); + } + } + + // update basis + basis.zero_out(); + for ( int m = 0; m < nband; m++ ) + { + for ( int ig = 0; ig < npw; ig++ ) basis(m,ig) = psi(m,ig); + } + + // updata the reduced Hamiltonian + nbase = nband; + hc.zero_out(); + sc.zero_out(); + for ( int i = 0; i < nbase; i++ ) + { + hc(i,i) = en[i]; + sc(i,i) = ModuleBase::ONE; + vc(i,i) = ModuleBase::ONE; + } + + ModuleBase::timer::tick("Diago_David_CUDA","refresh"); + return; +} + +void Diago_David_CUDA::cal_err +( + const int& npw, + const int& nband, + const int& nbase, + const ModuleBase::ComplexMatrix &vc, + const ModuleBase::ComplexMatrix &hp, + const ModuleBase::ComplexMatrix &basis, + const double* en, + double2* respsi +) +{ + ModuleBase::timer::tick("Diago_David_CUDA","cal_err"); + double *err = new double[nband]; + assert(err != 0); + + for ( int m = 0; m < nband; m++ ) + { + ModuleBase::GlobalFunc::ZEROS( respsi, npw ); + for ( int j = 0; j < nbase; j++ ) + { + for ( int ig=0; ig psi(m) - \sum_{i < m} \langle psi(i)|S|psi(m) \rangle psi(i) + // so the orthogonalize is performed about S. + + // assert(psi.nr >= n_band); // TODO: Add 'nr' parameter?... + assert(m >= 0); + assert(m < n_band); + + GlobalC::hm.hpw.s_1psi_cuda(npw, psi_m, spsi); + + // double2* lagrange = new double2[m+1]; + // ModuleBase::GlobalFunc::ZEROS( lagrange, m+1 ); + + double2* lagrange; + CHECK_CUDA(cudaMalloc((void**)&lagrange, (m+1)*sizeof(double2))); + // TODO: Memset + + // replace with 'gemv'. + // TODO: Global handle ... + cublasHandle_t diag_handle; + cublasCreate(&diag_handle); + cublasOperation_t trans1 = CUBLAS_OP_C; + + double2 ONE, ZERO, NEG_ONE; + ONE.y = ZERO.x = ZERO.y = 0.0; + ONE.x = 1.0; + NEG_ONE.x = -1.0; + cublasZgemv(diag_handle, trans1, npw, m+1, &ONE, psi, npw, spsi, 1, &ZERO, lagrange, 1); + +// out.printr1_d("lagrange", lagrange, m+1 ); + + double psi_norm; + CHECK_CUDA(cudaMemcpy(&psi_norm, &lagrange[m], sizeof(double), cudaMemcpyDeviceToHost)); + assert(psi_norm > 0.0); +// std::cout << "m = " << m << std::endl; + + cublasOperation_t trans2 = CUBLAS_OP_N; + cublasZgemv(diag_handle, trans2, npw, m, &NEG_ONE, psi, npw, lagrange, 1, &ONE, psi_m, 1); + // TODO: ddot_real + psi_norm -= ddot_real(m, lagrange, lagrange); + assert(psi_norm > 0.0); + psi_norm = sqrt(psi_norm); + + if (psi_norm < 1.0e-12 ) + { + std::cout << "Diago_David_CUDA::SchmitOrth:aborted for psi_norm <1.0e-12" << std::endl; + std::cout << "n_band = " << n_band << std::endl; + std::cout << "m = " << m << std::endl; + exit(0); + } + else + { + int thread = 512; + int block = (npw + thread - 1) / thread; + kernel_normalization_david<<>>(psi_m, dim, psi_norm); + } + + GlobalC::hm.hpw.s_1psi_cuda(npw, psi_m, spsi); + + CHECK_CUDA(cudaFree(lagrange)); + ModuleBase::timer::tick("Diago_David_CUDA","SchmitOrth"); + return; +} diff --git a/source/src_pw/diago_david.cuh b/source/src_pw/diago_david.cuh new file mode 100644 index 0000000000..fe675b4a2f --- /dev/null +++ b/source/src_pw/diago_david.cuh @@ -0,0 +1,108 @@ +//========================================================== +// AUTHOR : wangjp +// Data :2009-04 +// Last Update: +// +// 09-05-10 modify SchmitOrth() diag_zhegvx() as static +// member function +//========================================================== + +#ifndef Diago_David_CUH +#define Diago_David_CUH + +#include "tools.h" + +class Diago_David_CUDA +{ +public: + + Diago_David_CUDA(); + ~Diago_David_CUDA(); + + static void SchmitOrth( + const int& npw, + const int n_band, + const int m, + const ModuleBase::ComplexMatrix &psi, + double2* psi_m, + double2* spsi); + + static void diag_zhegvx( + const int& n, + const int& m, + const ModuleBase::ComplexMatrix &hc, + const ModuleBase::ComplexMatrix &sc, + const int& ldh, + double* e, + ModuleBase::ComplexMatrix &vc); + + void diag( + ModuleBase::ComplexMatrix &psi, + double *en, + const int &npw, + const int &nband, + const double *precondition, + const int order, + const double &eps, + const int &maxiter, + int ¬conv, + double &avg_iter); + +private: + + int test_david; + + void cal_grad( + const int& npw, + const int& nbase, + const int& notconv, + ModuleBase::ComplexMatrix &basis, + ModuleBase::ComplexMatrix &hp, + ModuleBase::ComplexMatrix &sp, + const ModuleBase::ComplexMatrix &vc, + const int* unconv, + const double* precondition, + const double* en, + double2* hpsi, + double2* spsi, + double2* ppsi, + double2* respsi); + + void cal_elem( + const int& npw, + int& nbase, + int& nbase_x, + const int& notconv, + const ModuleBase::ComplexMatrix &basis, + const ModuleBase::ComplexMatrix &hp, + const ModuleBase::ComplexMatrix &sp, + ModuleBase::ComplexMatrix &hc, + ModuleBase::ComplexMatrix &sc); + + + void refresh( + const int& npw, + const int& nband, + int& nbase, + const double* en, + const ModuleBase::ComplexMatrix &psi, + ModuleBase::ComplexMatrix &basis, + ModuleBase::ComplexMatrix &hp, + ModuleBase::ComplexMatrix &sp, + ModuleBase::ComplexMatrix &hc, + ModuleBase::ComplexMatrix &sc, + ModuleBase::ComplexMatrix &vc); + + void cal_err( + const int& npw, + const int& nband, + const int& nbase, + const ModuleBase::ComplexMatrix &vc, + const ModuleBase::ComplexMatrix &hp, + const ModuleBase::ComplexMatrix &basis, + const double* en, + double2* respsi); + +}; + +#endif diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index f58abb3ead..6f27def494 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -143,11 +143,20 @@ void Hamilt::diagH_pw( // int DIM_CG_CUDA2 = GlobalC::wf.npwx * GlobalV::NPOL; float *f_precondition; + double2 *d_vkb_c; + float2 *f_vkb_c; + + int nkb = GlobalC::ppcell.nkb; + if(GlobalV::NPOL==1) { CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2))); CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_CUDA * sizeof(double))); + + // Add d_vkb_c + CHECK_CUDA(cudaMalloc((void**)&d_vkb_c, GlobalC::wf.npwx*nkb*sizeof(double2))); + CHECK_CUDA(cudaMemcpy(d_vkb_c, GlobalC::ppcell.vkb.c, GlobalC::wf.npwx*nkb*sizeof(double2), cudaMemcpyHostToDevice)); CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2), cudaMemcpyHostToDevice)); // CHECK_CUDA(cudaMemcpy(d_wf_ekb, wf.ekb[ik], NBANDS * sizeof(double), cudaMemcpyHostToDevice)); @@ -156,30 +165,41 @@ void Hamilt::diagH_pw( // cout<<"ETHR_now: "< 5e-4) + // if(iter == 1 || GlobalV::ETHR > 5e-4) + if(iter < 0) { CHECK_CUDA(cudaMalloc((void**)&f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(float2))); CHECK_CUDA(cudaMalloc((void**)&f_wf_ekb, GlobalV::NBANDS * sizeof(float))); CHECK_CUDA(cudaMalloc((void**)&f_precondition, DIM_CG_CUDA * sizeof(float))); + + // add vkb_c parameter + CHECK_CUDA(cudaMalloc((void**)&f_vkb_c, GlobalC::wf.npwx*nkb*sizeof(float2))); + int thread = 512; int block = GlobalV::NBANDS * GlobalC::wf.npwx / thread + 1; int block2 = GlobalV::NBANDS / thread + 1; int block3 = DIM_CG_CUDA / thread + 1; + int block4 = GlobalC::wf.npwx*nkb / thread + 1; + hamilt_cast_d2f<<>>(f_wf_evc, d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); hamilt_cast_d2f<<>>(f_precondition, d_precondition, DIM_CG_CUDA); + // add vkb_c parameter + hamilt_cast_d2f<<>>(f_vkb_c, d_vkb_c, GlobalC::wf.npwx*nkb); cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); // cout<<"Do float CG ..."<>>(d_wf_evc, f_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx); hamilt_cast_f2d<<>>(d_wf_ekb, f_wf_ekb, GlobalV::NBANDS); + + CHECK_CUDA(cudaFree(f_vkb_c)); } else { cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); // cout<<"Do double CG ..."<h_psi_cuda(psi, hpsi); + this->h_psi_cuda(psi, hpsi, vkb_c); int thread = 512; int block = (npw_in + thread - 1) / thread; @@ -454,9 +454,9 @@ void Hamilt_PW::h_1psi_cuda( const int npw_in, const float2 *psi, } void Hamilt_PW::h_1psi_cuda( const int npw_in, const double2 *psi, - double2 *hpsi, double2 *spsi) + double2 *hpsi, double2 *spsi, double2 *vkb_c) { - this->h_psi_cuda(psi, hpsi); + this->h_psi_cuda(psi, hpsi, vkb_c); int thread = 512; int block = (npw_in + thread - 1) / thread; @@ -503,7 +503,7 @@ void Hamilt_PW::s_1psi return; } -void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, const int m) +void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, const int m) { ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); // int i = 0; @@ -642,16 +642,16 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, const int m) { int nkb = GlobalC::ppcell.nkb; float2 *becp; - double2 *d_vkb_c; - float2 *f_vkb_c; + // double2 *d_vkb_c; + // float2 *f_vkb_c; CHECK_CUDA(cudaMalloc((void**)&becp, GlobalV::NPOL*m*nkb*sizeof(float2))); - CHECK_CUDA(cudaMalloc((void**)&d_vkb_c, GlobalC::wf.npwx*nkb*sizeof(double2))); - CHECK_CUDA(cudaMalloc((void**)&f_vkb_c, GlobalC::wf.npwx*nkb*sizeof(float2))); + // CHECK_CUDA(cudaMalloc((void**)&d_vkb_c, GlobalC::wf.npwx*nkb*sizeof(double2))); + // CHECK_CUDA(cudaMalloc((void**)&f_vkb_c, GlobalC::wf.npwx*nkb*sizeof(float2))); - CHECK_CUDA(cudaMemcpy(d_vkb_c, GlobalC::ppcell.vkb.c, GlobalC::wf.npwx*nkb*sizeof(double2), cudaMemcpyHostToDevice)); - int thread = 512; - int block = (GlobalC::wf.npwx*nkb + thread - 1) / thread; - cast_d2f<<>>(f_vkb_c, d_vkb_c, GlobalC::wf.npwx*nkb); + // CHECK_CUDA(cudaMemcpy(d_vkb_c, GlobalC::ppcell.vkb.c, GlobalC::wf.npwx*nkb*sizeof(double2), cudaMemcpyHostToDevice)); + // int thread = 512; + // int block = (GlobalC::wf.npwx*nkb + thread - 1) / thread; + // cast_d2f<<>>(f_vkb_c, d_vkb_c, GlobalC::wf.npwx*nkb); cublasOperation_t transa = CUBLAS_OP_C; cublasOperation_t transb = CUBLAS_OP_N; @@ -669,13 +669,13 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, const int m) if(m==1 && GlobalV::NPOL==1) { int inc = 1; - cublasCgemv(hpw_handle, transa, GlobalC::wf.npw, nkb, &ONE, f_vkb_c, GlobalC::wf.npwx, psi_in, inc, &ZERO, becp, inc); + cublasCgemv(hpw_handle, transa, GlobalC::wf.npw, nkb, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, inc, &ZERO, becp, inc); } else { int npm = GlobalV::NPOL * m; - cublasCgemm(hpw_handle, transa, transb, nkb, npm, GlobalC::wf.npw, &ONE, f_vkb_c, GlobalC::wf.npwx, psi_in, GlobalC::wf.npwx, &ZERO, becp, nkb); + cublasCgemm(hpw_handle, transa, transb, nkb, npm, GlobalC::wf.npw, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, GlobalC::wf.npwx, &ZERO, becp, nkb); } @@ -696,12 +696,12 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, const int m) // cout<<"===== becp before add nonloaclpp ===="<(becp, 15); - this->add_nonlocal_pp_cuda(hpsi, becp, f_vkb_c, m); + this->add_nonlocal_pp_cuda(hpsi, becp, vkb_c, m); // cublasDestroy(handle); CHECK_CUDA(cudaFree(becp)); - CHECK_CUDA(cudaFree(d_vkb_c)); - CHECK_CUDA(cudaFree(f_vkb_c)); + // CHECK_CUDA(cudaFree(d_vkb_c)); + // CHECK_CUDA(cudaFree(f_vkb_c)); // cout<<"nonlocal end"<(becp, 15); - this->add_nonlocal_pp_cuda(hpsi, becp, d_vkb_c, m); + this->add_nonlocal_pp_cuda(hpsi, becp, vkb_c, m); // cublasDestroy(handle); CHECK_CUDA(cudaFree(becp)); - CHECK_CUDA(cudaFree(d_vkb_c)); + // CHECK_CUDA(cudaFree(d_vkb_c)); // cout<<"nonlocal end"< Date: Fri, 15 Oct 2021 15:58:38 +0800 Subject: [PATCH 011/478] create planewave branch --- source/module_pw/pw_basis.cpp | 18 ++++ source/module_pw/pw_basis.h | 105 ++++++++++++++++++++ source/module_pw/pw_distribute.cpp | 25 +++++ source/module_pw/pw_init.cpp | 152 +++++++++++++++++++++++++++++ source/module_pw/pw_operation.cpp | 56 +++++++++++ source/module_pw/rg_distribute.cpp | 20 ++++ 6 files changed, 376 insertions(+) create mode 100644 source/module_pw/pw_basis.cpp create mode 100644 source/module_pw/pw_basis.h create mode 100644 source/module_pw/pw_distribute.cpp create mode 100644 source/module_pw/pw_init.cpp create mode 100644 source/module_pw/pw_operation.cpp create mode 100644 source/module_pw/rg_distribute.cpp diff --git a/source/module_pw/pw_basis.cpp b/source/module_pw/pw_basis.cpp new file mode 100644 index 0000000000..b5532c42e8 --- /dev/null +++ b/source/module_pw/pw_basis.cpp @@ -0,0 +1,18 @@ +#include "pw_basis.h" + +PW_Basis::PW_Basis() +{ + ig2fft = NULL; + is2ir = NULL; + gdirect = NULL; + gcar = NULL; + gg = NULL; +} +PW_Basis:: ~PW_Basis() +{ + if(ig2fft != NULL) delete[] ig2fft; + if(is2ir != NULL) delete[] is2ir; + if(gdirect != NULL) delete[] gdirect; + if(gcar != NULL) delete[] gcar; + if(gg != NULL) delete[] gg; +} \ No newline at end of file diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h new file mode 100644 index 0000000000..f110554324 --- /dev/null +++ b/source/module_pw/pw_basis.h @@ -0,0 +1,105 @@ +#ifndef PWBASIS_H +#define PWBASIS_H + +#include "../module_base/matrix.h" +#include "../module_base/matrix3.h" +#include "../module_base/vector3.h" +#include "../src_pw/klist.h" +#include +// +//A class which can convert a function of "r" to the corresponding linear +// superposition of plane waves (real space to reciprocal space) +// or convert a linear superposition of plane waves to the function +// of "r" (reciprocal to real). +//plane waves: =1/sqrt(V)*exp(i(k+g)r) +// +class PW_Basis +{ + +public: + PW_Basis(); + ~PW_Basis(); + + //Init the grids for FFT + void initgrids( + ModuleBase::Matrix3 latvec_in; // Unitcell lattice vectors + ModuleBase::Matrix3 G_in; // reciprocal lattice vector (2pi*inv(R) ) + double gridecut + ); + //Init the grids for FFT + void initgrids( + ModuleBase::Matrix3 latvec_in; // Unitcell lattice vectors + ModuleBase::Matrix3 G_in; // reciprocal lattice vector (2pi*inv(R) ) + int nx_in, int ny_in, int nz_in + ); + + //Init some parameters + void initparameters( + bool gamma_only_in, + double ecut_in, + int nk_in, //number of k points in this pool + ModuleBase::Vector3 *kvec_d, // Direct coordinates of k points + int poolnproc_in, // Number of processors in this pool + int poolrank_in, // Rank in this pool + int distribution_type_in, + ); + + //distribute plane waves to different processors + void distribute_g(); + + //distribute real-space grids to different processors + void distribute_r(); +//=============================================== +// distribution maps +//=============================================== +public: + //reciprocal-space + int *ig2fft; // dimension: [ngmw] + int *is2ir; + int nst; //num. of sticks in current proc. + int npw; //num. of plane waves in current proc. + //real space + int nrxx; + int *startz; //startz[ip]: starting z plane in the ip-th proc. in current POOL_WORLD + int *numz; //numz[ip]: num. of z planes in the ip-th proc. in current POOL_WORLD + + + + +private: + bool gamma_only; // only half g are used. + double ggecut; //Energy cut off for g^2 + ModuleBase::Matrix3 latvec; // Unitcell lattice vectors, unit in bohr + ModuleBase::Matrix3 G; // reciprocal lattice vector, unit in + ModuleBase::Matrix3 GT; // traspose of G + ModuleBase::Matrix3 GGT; // GGT = G*GT + int distribution_type; + int poolnproc; + int poolrank; + int nks; + ModuleBase::Vector3 *kvec_d; + + //distribute plane waves to different processors + void distribution_method1(); + + +//=============================================== +// Part 2: FFT dimensions in real space +//=============================================== +public: + // FFT dimensions for wave functions. + int nx, ny, nz, nxyz; + // FFT dimensions for charge/potential. + + int seed; + + + ModuleBase::Vector3 *gdirect; //(= *G1d) ; // ig = new Vector igc[ngmc] + ModuleBase::Vector3 *gcar; //G vectors in cartesian corrdinate + double *gg; // modulus (G^2) of G vectors [ngmc] + //gg[ng]=ig[ng]*GGT*ig[ng]/(lat0*lat0)=g[ng]*g[ng] (/lat0*lat0) + // gg_global dimension: [cutgg_num_now] (save memory skill is used) + + +}; +#endif //PlaneWave class diff --git a/source/module_pw/pw_distribute.cpp b/source/module_pw/pw_distribute.cpp new file mode 100644 index 0000000000..60b0c226dc --- /dev/null +++ b/source/module_pw/pw_distribute.cpp @@ -0,0 +1,25 @@ +#include "pw_basis.h" + +// +//distribute plane waves to different processors +//Known: G, GT, GGT, nx, ny, nz, poolnproc, poolrank, ggecut +//output: ig2fft[ig], is2ir[is], gg[ig], gcar[ig], gdirect[ig], nst +// +void PW_Basis::distribute_g() +{ + if(this->divide_type == 1) + { + this->distribution_method1(); + } + else + { + ModuleBase::WARNING_QUIT("divide", "No such division type."); + } + return; +} + +void PW_Basis::distribution_method1() +{ + return; +} + diff --git a/source/module_pw/pw_init.cpp b/source/module_pw/pw_init.cpp new file mode 100644 index 0000000000..fcfac7fe45 --- /dev/null +++ b/source/module_pw/pw_init.cpp @@ -0,0 +1,152 @@ +#include "./pw_basis.h" + +// +//Init the grids for FFT +//Input: lattice vectors of the cell, Energy cut off for G^2/2 +//Output: nx, ny, nz, nxyz, latvec, G, GT, GGT +// +void PW_Basis:: initgrids( + ModuleBase::Matrix3 latvec_in // Unitcell lattice vectors + double gridecut +) +{ + //init latice + this->latvec = latvec_in; + this->GT = latvec.Inverse(); + this->G = GT.Transpose(); + this->GGT = G * GT; + + + //------------------------------------------------------------ + //-------------------------init grids------------------------- + //------------------------------------------------------------ + ModuleBase::Vector3 lat; + int *ibox = new int[3];// ibox[i] are the minimal FFT dimensions, + + lat.x = latvec.e11; + lat.y = latvec.e12; + lat.z = latvec.e13; + ibox[0] = 2 * int(sqrt(gridecut) * sqrt(lat * lat)) + 1; + + lat.x = latvec.e21; + lat.y = latvec.e22; + lat.z = latvec.e23; + ibox[1] = 2 * int(sqrt(gridecut) * sqrt(lat * lat)) + 1; + + lat.x = latvec.e31; + lat.y = latvec.e32; + lat.z = latvec.e33; + ibox[2] = 2 * int(sqrt(gridecut) * sqrt(lat * lat)) + 1; + //lat*lat=lat.x*lat.x+lat.y*lat.y+lat.z+lat.z + + // Find the minimal FFT box size the factors into the primes (2,3,5,7). + for (int i = 0; i < 3; i++) + { + int b = 0; + int n2 = 0; + int n3 = 0; + int n5 = 0; + //int n7 = 0; + bool done_factoring = false; + + // mohan add 2011-04-22 + int s; + if(i==0) s=bx; + else if(i==1) s=by; + else if(i==2) s=bz; + int ns = 0; + // increase ibox[i] by 1 until it is totally factorizable by (2,3,5,7) + do + { + ibox[i] += 1; + b = ibox[i]; + if( ibox[i] % s != 0) + { + b = -1; // meaning less + } + else + { + //n2 = n3 = n5 = n7 = 0; + n2 = n3 = n5 = ns = 0; + done_factoring = false; + + while (!done_factoring) + { + if (b % 2 == 0) + { + n2++; + b /= 2; + continue; + } + if (b % 3 == 0) + { + n3++; + b /= 3; + continue; + } + if (b % 5 == 0) + { + n5++; + b /= 5; + continue; + } + //if (b%7==0) { n7++; b /= 7; continue; } + done_factoring = true; + } + }// + } + while (b != 1); + // b==1 means fftbox[i] is (2,3,5,7) factorizable + } + this->nx = ibox[0]; + this->ny = ibox[1]; + this->nz = ibox[2]; + this->nxyz = this->nx * this->ny * this->nz; + delete[] ibox; + + + return; +} + +// +//Init the grids for FFT +//Input: lattice vectors of the cell, nx, ny, nz +//Output: nx, ny, nz, nxyz, latvec, G, GT, GGT +// +void PW_Basis:: initgrids( + ModuleBase::Matrix3 latvec_in // Unitcell lattice vectors + int nx_in, int ny_in, int nz_in +) +{ + this->latvec = latvec_in; + this->GT = latvec.Inverse(); + this->G = GT.Transpose(); + this->GGT = G * GT; + this->nx = nx_in; + this->ny = ny_in; + this->nz = nz_in; + this->nxyz = this->nx * this->ny * this->nz; + return; +} + + +//Init some parameters +void PW_Basis:: initparameters( + bool gamma_only_in, + double ecut_in, + int nks_in, //number of k points in this pool + ModuleBase::Vector3 *kvec_d_in, // Direct coordinates of k points + int poolnproc_in, // Number of processors in this pool + int poolrank_in, // Rank in this pool + int distribution_type_in, +) +{ + this->gamma_only = gamma_only_in; + this->ggecut = ecut_in; + this->nks = nks_in; + this->kvec_d = kvec_d_in; + this->poolnproc = poolnproc_in; + this->poolrank = poolrank_in; + this->distribution_type = distribution_type_in; +} + diff --git a/source/module_pw/pw_operation.cpp b/source/module_pw/pw_operation.cpp new file mode 100644 index 0000000000..52dfe5e8b9 --- /dev/null +++ b/source/module_pw/pw_operation.cpp @@ -0,0 +1,56 @@ +ModuleBase::Vector3 get_GPlusK_cartesian(const int ik, const int ig) const { + assert(ig>=0 && igngmc && ik>=0 && iknks); + ModuleBase::Vector3 g_temp_ = Klist->kvec_c[ik] + this->gcar[ig]; + return g_temp_; +}; +double get_GPlusK_cartesian_projection(const int ik, const int ig, const int axis) const +{ + assert(ig >= 0 && ig < this->ngmc && ik >= 0 && ik < Klist->nks && axis >= 0 && axis <= 2); + ModuleBase::Vector3 g_temp_ = Klist->kvec_c[ik] + this->gcar[ig]; + if (axis == 0) + { + return g_temp_.x; + } + else if (axis == 1) + { + return g_temp_.y; + } + else if (axis == 2) + { + return g_temp_.z; + } + return 0.0; +} +double get_SquareGPlusK_cartesian(const int ik, const int ig) const +{ + assert(ig >= 0 && ig < this->ngmc && ik >= 0 && ik < Klist->nks); + ModuleBase::Vector3 g_temp_ = Klist->kvec_c[ik] + this->gcar[ig]; + return (g_temp_ * g_temp_); +}; +ModuleBase::Vector3 get_G_cartesian(const int ig) const +{ + assert(ig>=0 && igngmc); + return this->gcar[ig]; +}; +double get_G_cartesian_projection(const int ig, const int axis) const +{ + assert(ig>=0 && igngmc && axis>=0 && axis<=2); + if(axis == 0) + { + return this->gcar[ig].x; + } + else if(axis == 1) + { + return this->gcar[ig].y; + } + else if(axis == 2) + { + return this->gcar[ig].z; + } + return 0.0; +} +double get_NormG_cartesian(const int ig) const +{ + assert(ig >= 0 && ig < this->ngmc); + return (this->gcar[ig].x * this->gcar[ig].x + this->gcar[ig].y * this->gcar[ig].y + this->gcar[ig].z * this->gcar[ig].z); +} \ No newline at end of file diff --git a/source/module_pw/rg_distribute.cpp b/source/module_pw/rg_distribute.cpp new file mode 100644 index 0000000000..35533bc69a --- /dev/null +++ b/source/module_pw/rg_distribute.cpp @@ -0,0 +1,20 @@ +#include "pw_basis.h" +// +//distribute real-space grids to different processors +//Known: nx, ny, nz, poolnproc, poolrank +//output: nrxx, startz, numz +// +void PW_Basis::distribute_r() +{ + int npz = this->nz / this->poolnproc; + int modz = this->nz % this->poolnproc; + this->startz[0] = 0; + for(int ip = 0 ; ip < this->poolnproc ; ++ip) + { + this->numz[ip] = npz; + if(ip < modz) this->numz[ip]++; + if(ip < this->poolnproc - 1) this->startz[ip+1] += numz[ip]; + } + this->nrxx = this->numz[this->poolrank]; + return; +} \ No newline at end of file From 04f69a110a83245f3bcfa41851b9fb3a35612404 Mon Sep 17 00:00:00 2001 From: Asuna981002 <77267331+Asuna981002@users.noreply.github.com> Date: Sat, 16 Oct 2021 13:57:04 +0800 Subject: [PATCH 012/478] fix --- source/src_pw/hamilt_pw.cu | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/src_pw/hamilt_pw.cu b/source/src_pw/hamilt_pw.cu index 6a7fe6a91a..e45779534f 100644 --- a/source/src_pw/hamilt_pw.cu +++ b/source/src_pw/hamilt_pw.cu @@ -966,7 +966,7 @@ void Hamilt_PW::h_psi(const std::complex *psi_in, std::complex * //------------------------------------ //(2) the local potential. //----------------------------------- - // timer::tick("Hamilt_PW","vloc"); + ModuleBase::timer::tick("Hamilt_PW","vloc"); if(GlobalV::VL_IN_H) { tmhpsi = hpsi; @@ -1022,7 +1022,7 @@ void Hamilt_PW::h_psi(const std::complex *psi_in, std::complex * tmpsi_in += dmax; } } - // timer::tick("Hamilt_PW","vloc"); + ModuleBase::timer::tick("Hamilt_PW","vloc"); //------------------------------------ // (3) the nonlocal pseudopotential. @@ -1091,7 +1091,7 @@ void Hamilt_PW::h_psi(const std::complex *psi_in, std::complex * //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> } } - // timer::tick("Hamilt_PW","vnl"); + ModuleBase::timer::tick("Hamilt_PW","vnl"); //------------------------------------ // (4) the metaGGA part //------------------------------------ From 33daedbe51ba5f997ca54e30d13b1535a2db33bc Mon Sep 17 00:00:00 2001 From: Chun Cai Date: Mon, 18 Oct 2021 16:54:28 +0800 Subject: [PATCH 013/478] Fix: torch version mismatch with cxx11 abi setting. --- CMakeLists.txt | 2 +- Dockerfile.gnu | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e74b923b6c..039de03e67 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,7 +135,7 @@ if(ENABLE_DEEPKS) find_package(Torch REQUIRED) include_directories(${TORCH_INCLUDE_DIRS}) target_link_libraries(${ABACUS_BIN_NAME} ${TORCH_LIBRARIES}) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}") + add_compile_options(${TORCH_CXX_FLAGS}) find_path(libnpy_SOURCE_DIR npy.hpp diff --git a/Dockerfile.gnu b/Dockerfile.gnu index 7505d441b9..69883a36bc 100644 --- a/Dockerfile.gnu +++ b/Dockerfile.gnu @@ -39,8 +39,8 @@ RUN cd /tmp \ && cd /tmp && rm -rf fftw-3.3.9 && rm fftw-3.3.9.tar.gz RUN cd /tmp \ - && wget https://download.pytorch.org/libtorch/cpu/libtorch-shared-with-deps-1.9.0%2Bcpu.zip --no-check-certificate --quiet \ - && unzip libtorch-shared-with-deps-1.9.0+cpu.zip \ + && wget https://download.pytorch.org/libtorch/cpu/libtorch-cxx11-abi-shared-with-deps-1.9.1%2Bcpu.zip --no-check-certificate --quiet \ + && unzip libtorch-cxx11-abi-shared-with-deps-1.9.1+cpu.zip \ && cp -r libtorch/include /usr/local \ && cp -r libtorch/lib /usr/local \ && cp -r libtorch/share /usr/local \ From 958a130c9ad48dc38cd98b6d85130c9e0ab54734 Mon Sep 17 00:00:00 2001 From: Chun Cai Date: Mon, 18 Oct 2021 16:59:26 +0800 Subject: [PATCH 014/478] Add deepks to build test. --- .github/workflows/hosted_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hosted_test.yml b/.github/workflows/hosted_test.yml index 7b4fc13a46..990ffbcd4b 100644 --- a/.github/workflows/hosted_test.yml +++ b/.github/workflows/hosted_test.yml @@ -11,7 +11,7 @@ jobs: build_args: "" name: "Build with GNU compilers" - tag: gnu - build_args: "-DENABLE_LIBXC=1" + build_args: "-DENABLE_LIBXC=1 -DENABLE_DEEPKS=1" name: "Build with GNU compilers and extra components" - tag: intel build_args: "" From 936678e3d21bfa5b65a28bad6c797668249cea03 Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Tue, 19 Oct 2021 13:20:45 +0800 Subject: [PATCH 015/478] fix diagH_subspace_cuda & add CHECK_CUBLAS. --- CMakeLists.txt | 1 + source/src_pw/diago_cg.cu | 66 +++--- source/src_pw/diago_david.cu | 6 +- source/src_pw/global.h | 72 ++++++- source/src_pw/hamilt.cu | 253 ++++++++++++++++++++--- source/src_pw/hamilt.h | 20 ++ source/src_pw/hamilt_pw.cu | 356 ++++++++++++++++++++++++++------ source/src_pw/hamilt_pw.cuh | 10 + source/src_pw/use_fft_kernel.cu | 25 +++ 9 files changed, 677 insertions(+), 132 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 241a857ffe..405e55e498 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -215,6 +215,7 @@ if(USE_CUDA) -lcufft -lcublas -lcudart + -lcusolver ) set_property(TARGET ${ABACUS_BIN_NAME} PROPERTY CUDA_ARCHITECTURES diff --git a/source/src_pw/diago_cg.cu b/source/src_pw/diago_cg.cu index 3107128194..f7da011e85 100644 --- a/source/src_pw/diago_cg.cu +++ b/source/src_pw/diago_cg.cu @@ -86,22 +86,22 @@ template Diago_CG_CUDA::Diago_CG_CUDA() { test_cg=0; - cublasCreate(&diag_handle); - // cublasCreate(&ddot_handle); + CHECK_CUBLAS(cublasCreate(&diag_handle)); + // CHECK_CUBLAS(cublasCreate(&ddot_handle)); } template Diago_CG_CUDA::~Diago_CG_CUDA() { - cublasDestroy(diag_handle); - // cublasDestroy(ddot_handle); + CHECK_CUBLAS(cublasDestroy(diag_handle)); + // CHECK_CUBLAS(cublasDestroy(ddot_handle)); } template void test_print(T *data, int size) { T *h_data = (T*)malloc(size * sizeof(T)); - cudaMemcpy(h_data, data, size*sizeof(T), cudaMemcpyDeviceToHost); + CHECK_CUDA(cudaMemcpy(h_data, data, size*sizeof(T), cudaMemcpyDeviceToHost)); cout<::diag // cout<<"====hphi after update===="<(hphi, 15); - cudaMemcpy(&e[m], &em_host, sizeof(T), cudaMemcpyHostToDevice); + CHECK_CUDA(cudaMemcpy(&e[m], &em_host, sizeof(T), cudaMemcpyHostToDevice)); if ( converged ) break; }//end iter @@ -351,12 +351,12 @@ void Diago_CG_CUDA::orthogonal_gradient( const int &dim, const int &dmx, // cublasCreate(&handle); cublasOperation_t trans1 = CUBLAS_OP_C; // ONE ZERO cufftcomplex? - // cublasZgemv(handle, trans1, dim, m, ONE, eigenfunction, dmx, sg, inc, ZERO, lagrange, inc); + // CHECK_CUBLAS(cublasZgemv(handle, trans1, dim, m, ONE, eigenfunction, dmx, sg, inc, ZERO, lagrange, inc)); float2 ONE, ZERO, NEG_ONE; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; NEG_ONE.x = -1.0; - cublasCgemv(diag_handle, trans1, dim, m, &ONE, eigenfunction, dmx, sg, inc, &ZERO, lagrange, inc); + CHECK_CUBLAS(cublasCgemv(diag_handle, trans1, dim, m, &ONE, eigenfunction, dmx, sg, inc, &ZERO, lagrange, inc)); /*for (int i=0; i::orthogonal_gradient( const int &dim, const int &dmx, // (3) orthogonal |g> and |Sg> to all states (0~m-1) cublasOperation_t trans2 = CUBLAS_OP_N; - cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, g, inc); - cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, sg, inc); + CHECK_CUBLAS(cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, g, inc)); + CHECK_CUBLAS(cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, sg, inc)); /*for (int i=0; i::orthogonal_gradient( const int &dim, const int &dmx, }*/ ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); - // cublasDestroy(handle); + // CHECK_CUBLAS(cublasDestroy(handle)); return; } @@ -401,15 +401,15 @@ void Diago_CG_CUDA::orthogonal_gradient( const int &dim, const int &dmx, int inc=1; // cublasHandle_t handle; - // cublasCreate(&handle); + // CHECK_CUBLAS(cublasCreate(&handle)); cublasOperation_t trans1 = CUBLAS_OP_C; // ONE ZERO cufftcomplex? - // cublasZgemv(handle, trans1, dim, m, ONE, eigenfunction, dmx, sg, inc, ZERO, lagrange, inc); + // CHECK_CUBLAS(cublasZgemv(handle, trans1, dim, m, ONE, eigenfunction, dmx, sg, inc, ZERO, lagrange, inc)); double2 ONE, ZERO, NEG_ONE; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; NEG_ONE.x = -1.0; - cublasZgemv(diag_handle, trans1, dim, m, &ONE, eigenfunction, dmx, sg, inc, &ZERO, lagrange, inc); + CHECK_CUBLAS(cublasZgemv(diag_handle, trans1, dim, m, &ONE, eigenfunction, dmx, sg, inc, &ZERO, lagrange, inc)); /*for (int i=0; i::orthogonal_gradient( const int &dim, const int &dmx, // (3) orthogonal |g> and |Sg> to all states (0~m-1) cublasOperation_t trans2 = CUBLAS_OP_N; - cublasZgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, g, inc); - cublasZgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, sg, inc); + CHECK_CUBLAS(cublasZgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, g, inc)); + CHECK_CUBLAS(cublasZgemv(diag_handle, trans2, dim, m, &NEG_ONE, eigenfunction, dmx, lagrange, inc, &ONE, sg, inc)); /*for (int i=0; i::orthogonal_gradient( const int &dim, const int &dmx, }*/ ModuleBase::timer::tick("Diago_CG_CUDA","orth_grad"); - // cublasDestroy(handle); + // CHECK_CUBLAS(cublasDestroy(handle)); return; } @@ -631,19 +631,19 @@ void Diago_CG_CUDA::schmit_orth int mp1 = m+1; // cublasHandle_t handle; - // cublasCreate(&handle); + // CHECK_CUBLAS(cublasCreate(&handle)); cublasOperation_t trans1 = CUBLAS_OP_C; float2 ONE, ZERO, NEG_ONE; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; NEG_ONE.x = -1.0; - cublasCgemv(diag_handle, trans1, dim, mp1, &ONE, psi, dmx, sphi, inc, &ZERO, lagrange, inc); + CHECK_CUBLAS(cublasCgemv(diag_handle, trans1, dim, mp1, &ONE, psi, dmx, sphi, inc, &ZERO, lagrange, inc)); float psi_norm; CHECK_CUDA(cudaMemcpy(&psi_norm, &lagrange[m], sizeof(float), cudaMemcpyDeviceToHost)); cublasOperation_t trans2 = CUBLAS_OP_N; - cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, psi, dmx, lagrange, inc, &ONE, psi_m, inc); + CHECK_CUBLAS(cublasCgemv(diag_handle, trans2, dim, m, &NEG_ONE, psi, dmx, lagrange, inc, &ONE, psi_m, inc)); psi_norm -= ddot_real(m, lagrange, lagrange); //next psi_norm = sqrt(psi_norm); @@ -654,7 +654,7 @@ void Diago_CG_CUDA::schmit_orth GlobalC::hm.hpw.s_1psi_cuda(dim, psi_m, sphi); - // cublasDestroy(handle); + // CHECK_CUBLAS(cublasDestroy(handle)); ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); CHECK_CUDA(cudaFree(lagrange)); return ; @@ -681,19 +681,19 @@ void Diago_CG_CUDA::schmit_orth int mp1 = m+1; // cublasHandle_t handle; - // cublasCreate(&handle); + // CHECK_CUBLAS(cublasCreate(&handle)); cublasOperation_t trans1 = CUBLAS_OP_C; double2 ONE, ZERO, NEG_ONE; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; NEG_ONE.x = -1.0; - cublasZgemv(diag_handle, trans1, dim, mp1, &ONE, psi, dmx, sphi, inc, &ZERO, lagrange, inc); + CHECK_CUBLAS(cublasZgemv(diag_handle, trans1, dim, mp1, &ONE, psi, dmx, sphi, inc, &ZERO, lagrange, inc)); double psi_norm; CHECK_CUDA(cudaMemcpy(&psi_norm, &lagrange[m], sizeof(double), cudaMemcpyDeviceToHost)); cublasOperation_t trans2 = CUBLAS_OP_N; - cublasZgemv(diag_handle, trans2, dim, m, &NEG_ONE, psi, dmx, lagrange, inc, &ONE, psi_m, inc); + CHECK_CUBLAS(cublasZgemv(diag_handle, trans2, dim, m, &NEG_ONE, psi, dmx, lagrange, inc, &ONE, psi_m, inc)); psi_norm -= ddot_real(m, lagrange, lagrange); //next psi_norm = sqrt(psi_norm); @@ -704,7 +704,7 @@ void Diago_CG_CUDA::schmit_orth GlobalC::hm.hpw.s_1psi_cuda(dim, psi_m, sphi); - // cublasDestroy(handle); + // CHECK_CUBLAS(cublasDestroy(handle)); ModuleBase::timer::tick("Diago_CG_CUDA","schmit_orth"); CHECK_CUDA(cudaFree(lagrange)); return ; @@ -721,7 +721,7 @@ float Diago_CG_CUDA::ddot_real { int dim2=2*dim; float result; - cublasSdot(diag_handle, dim2, (float*)psi_L, 1, (float*)psi_R, 1, &result); + CHECK_CUBLAS(cublasSdot(diag_handle, dim2, (float*)psi_L, 1, (float*)psi_R, 1, &result)); return result; } @@ -736,7 +736,7 @@ double Diago_CG_CUDA::ddot_real { int dim2=2*dim; double result; - cublasDdot(diag_handle, dim2, (double*)psi_L, 1, (double*)psi_R, 1, &result); + CHECK_CUBLAS(cublasDdot(diag_handle, dim2, (double*)psi_L, 1, (double*)psi_R, 1, &result)); return result; } @@ -750,7 +750,7 @@ float2 Diago_CG_CUDA::ddot ) { float2 result; - cublasCdotc(diag_handle, dim, psi_L, 1, psi_R, 1, &result); + CHECK_CUBLAS(cublasCdotc(diag_handle, dim, psi_L, 1, psi_R, 1, &result)); return result; } // end of ddot @@ -763,7 +763,7 @@ double2 Diago_CG_CUDA::ddot ) { double2 result; - cublasZdotc(diag_handle, dim, psi_L, 1, psi_R, 1, &result); + CHECK_CUBLAS(cublasZdotc(diag_handle, dim, psi_L, 1, psi_R, 1, &result)); return result; } // end of ddot @@ -783,7 +783,7 @@ float2 Diago_CG_CUDA::ddot // result += conj(psi(m, i)) * psik[i] ; // } float2 result; - cublasCdotc(diag_handle, dim, &psi[m*dim], 1, psik, 1, &result); + CHECK_CUBLAS(cublasCdotc(diag_handle, dim, &psi[m*dim], 1, psik, 1, &result)); return result; } // end of ddot @@ -802,7 +802,7 @@ double2 Diago_CG_CUDA::ddot // result += conj(psi(m, i)) * psik[i] ; // } double2 result; - cublasZdotc(diag_handle, dim, &psi[m*dim], 1, psik, 1, &result); + CHECK_CUBLAS(cublasZdotc(diag_handle, dim, &psi[m*dim], 1, psik, 1, &result)); return result; } // end of ddot @@ -825,7 +825,7 @@ float2 Diago_CG_CUDA::ddot // result += conj( psi_L(m,i) ) * psi_R(n,i) ; // } float2 result; - cublasCdotc(diag_handle, dim, &psi_L[m*dim], 1, &psi_R[n*dim], 1, &result); + CHECK_CUBLAS(cublasCdotc(diag_handle, dim, &psi_L[m*dim], 1, &psi_R[n*dim], 1, &result)); return result; } // end of ddot @@ -846,7 +846,7 @@ double2 Diago_CG_CUDA::ddot // result += conj( psi_L(m,i) ) * psi_R(n,i) ; // } double2 result; - cublasZdotc(diag_handle, dim, &psi_L[m*dim], 1, &psi_R[n*dim], 1, &result); + CHECK_CUBLAS(cublasZdotc(diag_handle, dim, &psi_L[m*dim], 1, &psi_R[n*dim], 1, &result)); return result; } // end of ddot diff --git a/source/src_pw/diago_david.cu b/source/src_pw/diago_david.cu index 22564f55e6..5b1a06a591 100644 --- a/source/src_pw/diago_david.cu +++ b/source/src_pw/diago_david.cu @@ -614,14 +614,14 @@ void Diago_David_CUDA::SchmitOrth // replace with 'gemv'. // TODO: Global handle ... cublasHandle_t diag_handle; - cublasCreate(&diag_handle); + CHECK_CUBLAS(cublasCreate(&diag_handle)); cublasOperation_t trans1 = CUBLAS_OP_C; double2 ONE, ZERO, NEG_ONE; ONE.y = ZERO.x = ZERO.y = 0.0; ONE.x = 1.0; NEG_ONE.x = -1.0; - cublasZgemv(diag_handle, trans1, npw, m+1, &ONE, psi, npw, spsi, 1, &ZERO, lagrange, 1); + CHECK_CUBLAS(cublasZgemv(diag_handle, trans1, npw, m+1, &ONE, psi, npw, spsi, 1, &ZERO, lagrange, 1)); // out.printr1_d("lagrange", lagrange, m+1 ); @@ -631,7 +631,7 @@ void Diago_David_CUDA::SchmitOrth // std::cout << "m = " << m << std::endl; cublasOperation_t trans2 = CUBLAS_OP_N; - cublasZgemv(diag_handle, trans2, npw, m, &NEG_ONE, psi, npw, lagrange, 1, &ONE, psi_m, 1); + CHECK_CUBLAS(cublasZgemv(diag_handle, trans2, npw, m, &NEG_ONE, psi, npw, lagrange, 1, &ONE, psi_m, 1)); // TODO: ddot_real psi_norm -= ddot_real(m, lagrange, lagrange); assert(psi_norm > 0.0); diff --git a/source/src_pw/global.h b/source/src_pw/global.h index 7679a7636e..7fd7253cb5 100644 --- a/source/src_pw/global.h +++ b/source/src_pw/global.h @@ -27,13 +27,81 @@ #include "../src_parallel/ft.h" #ifdef __CUDA +static const char *_cublasGetErrorEnum(cublasStatus_t error) +{ + switch (error) + { + case CUBLAS_STATUS_SUCCESS: + return "CUBLAS_STATUS_SUCCESS"; + case CUBLAS_STATUS_NOT_INITIALIZED: + return "CUBLAS_STATUS_NOT_INITIALIZED"; + case CUBLAS_STATUS_ALLOC_FAILED: + return "CUBLAS_STATUS_ALLOC_FAILED"; + case CUBLAS_STATUS_INVALID_VALUE: + return "CUBLAS_STATUS_INVALID_VALUE"; + case CUBLAS_STATUS_ARCH_MISMATCH: + return "CUBLAS_STATUS_ARCH_MISMATCH"; + case CUBLAS_STATUS_MAPPING_ERROR: + return "CUBLAS_STATUS_MAPPING_ERROR"; + case CUBLAS_STATUS_EXECUTION_FAILED: + return "CUBLAS_STATUS_EXECUTION_FAILED"; + case CUBLAS_STATUS_INTERNAL_ERROR: + return "CUBLAS_STATUS_INTERNAL_ERROR"; + } + return ""; +} + +static const char *_cusolverGetErrorEnum(cusolverStatus_t error) +{ + switch (error) + { + case CUSOLVER_STATUS_SUCCESS: + return "CUSOLVER_STATUS_SUCCESS"; + case CUSOLVER_STATUS_NOT_INITIALIZED: + return "CUSOLVER_STATUS_NOT_INITIALIZED"; + case CUSOLVER_STATUS_ALLOC_FAILED: + return "CUSOLVER_STATUS_ALLOC_FAILED"; + case CUSOLVER_STATUS_INVALID_VALUE: + return "CUSOLVER_STATUS_INVALID_VALUE"; + case CUSOLVER_STATUS_ARCH_MISMATCH: + return "CUSOLVER_STATUS_ARCH_MISMATCH"; + case CUSOLVER_STATUS_MATRIX_TYPE_NOT_SUPPORTED: + return "CUSOLVER_STATUS_MATRIX_TYPE_NOT_SUPPORTED"; + case CUSOLVER_STATUS_EXECUTION_FAILED: + return "CUSOLVER_STATUS_EXECUTION_FAILED"; + case CUSOLVER_STATUS_INTERNAL_ERROR: + return "CUSOLVER_STATUS_INTERNAL_ERROR"; + } + return ""; +} + #define CHECK_CUDA(func)\ {\ cudaError_t status = (func);\ if(status != cudaSuccess)\ {\ - printf("CUDA API failed at line %d with error: %s (%d)\n",\ - __LINE__, cudaGetErrorString(status), status);\ + printf("In File %s : CUDA API failed at line %d with error: %s (%d)\n",\ + __FILE__, __LINE__, cudaGetErrorString(status), status);\ + }\ +} + +#define CHECK_CUBLAS(func)\ +{\ + cublasStatus_t status = (func);\ + if(status != CUBLAS_STATUS_SUCCESS)\ + {\ + printf("In File %s : CUBLAS API failed at line %d with error: %s (%d)\n",\ + __FILE__, __LINE__, _cublasGetErrorEnum(status), status);\ + }\ +} + +#define CHECK_CUSOLVER(func)\ +{\ + cusolverStatus_t status = (func);\ + if(status != CUSOLVER_STATUS_SUCCESS)\ + {\ + printf("In File %s : CUSOLVER API failed at line %d with error: %s (%d)\n",\ + __FILE__, __LINE__, _cusolverGetErrorEnum(status), status);\ }\ } #endif diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index 6f27def494..96e06555df 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -5,8 +5,6 @@ #include "diago_cg.cuh" #include "cufft.h" - - Hamilt::Hamilt() {} Hamilt::~Hamilt() {} @@ -113,52 +111,73 @@ void Hamilt::diagH_pw( if(GlobalV::KS_SOLVER=="cg") { // qian change it, because it has been executed in diago_PAO_in_pw_k2 + + double2 *d_wf_evc; + double *d_wf_ekb; + double2 *d_vkb_c; + + int nkb = GlobalC::ppcell.nkb; + if(iter < 0) + { + cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); + } + else + { + cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); + } + + CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * GlobalV::NPOL * sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); + + CHECK_CUDA(cudaMemcpy(d_wf_evc, + GlobalC::wf.evc[ik0].c, + GlobalV::NBANDS * GlobalC::wf.npwx * GlobalV::NPOL * sizeof(double2), cudaMemcpyHostToDevice)); + + CHECK_CUDA(cudaMalloc((void**)&d_vkb_c, GlobalC::wf.npwx*nkb*sizeof(double2))); + CHECK_CUDA(cudaMemcpy(d_vkb_c, GlobalC::ppcell.vkb.c, GlobalC::wf.npwx*nkb*sizeof(double2), cudaMemcpyHostToDevice)); + if ( iter > 1 || istep > 1 || ntry > 0) { - this->diagH_subspace( + this->diagH_subspace_cuda( ik, GlobalV::NBANDS, GlobalV::NBANDS, - GlobalC::wf.evc[ik0], - GlobalC::wf.evc[ik0], - GlobalC::wf.ekb[ik]); + d_wf_evc, + d_wf_evc, + d_wf_ekb, + d_vkb_c); avg_iter += 1.0; } + // cout<<"end subspace"< f_cg_cuda; Diago_CG_CUDA d_cg_cuda; bool reorder = true; - double2 *d_wf_evc; - double *d_wf_ekb; + int DIM_CG_CUDA = GlobalC::kv.ngk[ik]; int DIM_CG_CUDA2 = GlobalC::wf.npwx * GlobalV::NPOL; double *d_precondition; float2 *f_wf_evc; float *f_wf_ekb; - // int DIM_CG_CUDA = GlobalC::kv.ngk[ik]; - // int DIM_CG_CUDA2 = GlobalC::wf.npwx * GlobalV::NPOL; float *f_precondition; - - double2 *d_vkb_c; float2 *f_vkb_c; - int nkb = GlobalC::ppcell.nkb; - if(GlobalV::NPOL==1) { - CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2))); - CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); + // CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2))); + // CHECK_CUDA(cudaMalloc((void**)&d_wf_ekb, GlobalV::NBANDS * sizeof(double))); CHECK_CUDA(cudaMalloc((void**)&d_precondition, DIM_CG_CUDA * sizeof(double))); // Add d_vkb_c - CHECK_CUDA(cudaMalloc((void**)&d_vkb_c, GlobalC::wf.npwx*nkb*sizeof(double2))); - CHECK_CUDA(cudaMemcpy(d_vkb_c, GlobalC::ppcell.vkb.c, GlobalC::wf.npwx*nkb*sizeof(double2), cudaMemcpyHostToDevice)); + // CHECK_CUDA(cudaMalloc((void**)&d_vkb_c, GlobalC::wf.npwx*nkb*sizeof(double2))); + // CHECK_CUDA(cudaMemcpy(d_vkb_c, GlobalC::ppcell.vkb.c, GlobalC::wf.npwx*nkb*sizeof(double2), cudaMemcpyHostToDevice)); - CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2), cudaMemcpyHostToDevice)); + // CHECK_CUDA(cudaMemcpy(d_wf_evc, GlobalC::wf.evc[ik0].c, GlobalV::NBANDS * GlobalC::wf.npwx * sizeof(double2), cudaMemcpyHostToDevice)); // CHECK_CUDA(cudaMemcpy(d_wf_ekb, wf.ekb[ik], NBANDS * sizeof(double), cudaMemcpyHostToDevice)); CHECK_CUDA(cudaMemcpy(d_precondition, precondition, DIM_CG_CUDA * sizeof(double), cudaMemcpyHostToDevice)); // cout<<"ITER: "<>>(f_precondition, d_precondition, DIM_CG_CUDA); // add vkb_c parameter hamilt_cast_d2f<<>>(f_vkb_c, d_vkb_c, GlobalC::wf.npwx*nkb); - cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); + // cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); // cout<<"Do float CG ..."<hpw.diagH_subspace_cuda(ik, nstart, n_band, psi, evc, en, d_vkb_c); + } + else + { + ModuleBase::WARNING_QUIT("diagH_subspace_cuda","Check parameters: GlobalV::BASIS_TYPE. "); + } + return; +} + //==================================================================== @@ -343,15 +392,23 @@ void Hamilt::diagH_subspace( void Hamilt::diagH_LAPACK( const int nstart, const int nbands, - const ModuleBase::ComplexMatrix &hc, - const ModuleBase::ComplexMatrix &sc, + const ModuleBase::ComplexMatrix &hc, // nstart * nstart + const ModuleBase::ComplexMatrix &sc, // nstart * nstart const int ldh, // nstart double *e, - ModuleBase::ComplexMatrix &hvec) + ModuleBase::ComplexMatrix &hvec) // nstart * n_band { ModuleBase::TITLE("Hamilt","diagH_LAPACK"); ModuleBase::timer::tick("Hamilt","diagH_LAPACK"); + // cout<<"in diagH_lapack"< void print_test(T *data, int size) { T *h_data = (T*)malloc(size * sizeof(T)); - cudaMemcpy(h_data, data, size*sizeof(T), cudaMemcpyDeviceToHost); + CHECK_CUDA(cudaMemcpy(h_data, data, size*sizeof(T), cudaMemcpyDeviceToHost)); cout<[1]; #ifdef __CUDA - cublasCreate(&hpw_handle); + CHECK_CUBLAS(cublasCreate(&hpw_handle)); #endif } @@ -130,8 +152,8 @@ Hamilt_PW::~Hamilt_PW() delete[] GR_index; // delete[] Bec; #ifdef __CUDA - cudaFree(GR_index_d); - cublasDestroy(hpw_handle); + CHECK_CUDA(cudaFree(GR_index_d)); + CHECK_CUBLAS(cublasDestroy(hpw_handle)); // CHECK_CUDA(cudaFree(GR_index_d)); #endif } @@ -143,7 +165,7 @@ void Hamilt_PW::allocate( const int &nkb, const int &nrxx) { - ModuleBase::TITLE("Hamilt_PW_GPU","allocate"); + ModuleBase::TITLE("Hamilt_PW_CUDA","allocate"); assert(npwx > 0); assert(npol > 0); @@ -172,7 +194,7 @@ void Hamilt_PW::allocate( void Hamilt_PW::init_k(const int ik) { - ModuleBase::TITLE("Hamilt_PW_GPU","init_k"); + ModuleBase::TITLE("Hamilt_PW_CUDA","init_k"); // mohan add 2010-09-30 // (1) Which spin to use. if(GlobalV::NSPIN==2) @@ -233,8 +255,8 @@ void Hamilt_PW::diagH_subspace( ModuleBase::ComplexMatrix &evc, double *en) { - ModuleBase::TITLE("Hamilt_PW_GPU","diagH_subspace"); - ModuleBase::timer::tick("Hamilt_PW_GPU","diagH_subspace"); + ModuleBase::TITLE("Hamilt_PW_CUDA","diagH_subspace"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","diagH_subspace"); assert(nstart!=0); assert(n_band!=0); @@ -438,7 +460,206 @@ void Hamilt_PW::diagH_subspace( //out.printcm_norm("hvec",hvec,1.0e-8); - ModuleBase::timer::tick("Hamilt_PW_GPU","diagH_subspace"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","diagH_subspace"); + return; +} + + +void Hamilt_PW::diagH_subspace_cuda( + const int ik, + const int nstart, + const int n_band, + const double2 *psi_c, // matrix + double2 *evc, // matrix + double *en, + double2 *vkb_c) +{ + ModuleBase::TITLE("Hamilt_PW_CUDA","diagH_subspace_cuda"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","diagH_subspace_cuda"); + + assert(nstart!=0); + assert(n_band!=0); + + double2* hc; + double2* tmp_hc; + double2* sc; + double2* hvec; + CHECK_CUDA(cudaMalloc((void**)&hc, nstart*nstart*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&tmp_hc, nstart*nstart*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&sc, nstart*nstart*sizeof(double2))); + CHECK_CUDA(cudaMalloc((void**)&hvec, nstart*n_band*sizeof(double2))); + + int dmin = 0; + int dmax = 0; + const int npw = GlobalC::kv.ngk[ik]; + + // cout<<"npw:"< *aux=new std::complex [dmax*nstart]; + // std::complex *paux = aux; + // std::complex *ppsi = psi.c; + + double2* aux; + CHECK_CUDA(cudaMalloc((void**)&aux, dmax*nstart*sizeof(double2))); + double2* paux = aux; + // const double2* ppsi = psi_c; // ? + + //qianrui replace it + // cout<<"psi before hpsi"<((double2*)psi_c, 10); + this->h_psi_cuda(psi_c, aux, vkb_c, nstart); // TODO: vkb_c nstart!=1 ? + // cout<<"aux after hpsi"<(aux, 10); + + double2 ONE, ZERO; + ONE.y = ZERO.x = ZERO.y = 0.0; + ONE.x = 1.0; + + cublasOperation_t trans1 = CUBLAS_OP_C; + cublasOperation_t trans2 = CUBLAS_OP_N; + CHECK_CUBLAS(cublasZgemm(hpw_handle, trans1, trans2, nstart, nstart, dmin, &ONE, psi_c, dmax, aux, dmax, &ZERO, tmp_hc, nstart)); + // hc=transpose(hc,false); // TODO: transpose + + // use 'geam' API todo transpose. + double2 t_alpha, t_beta; + t_alpha.y = t_beta.x = t_beta.y = 0.0; + t_alpha.x = 1.0; + CHECK_CUBLAS(cublasZgeam(hpw_handle, CUBLAS_OP_T, CUBLAS_OP_T, nstart, nstart, &t_alpha, tmp_hc, nstart, &t_beta, tmp_hc, nstart, hc, nstart)); + + CHECK_CUBLAS(cublasZgemm(hpw_handle, trans1, trans2, nstart, nstart, dmin, &ONE, psi_c, dmax, psi_c, dmax, &ZERO, tmp_hc, nstart)); + // sc=transpose(sc,false); // TODO: transpose + CHECK_CUBLAS(cublasZgeam(hpw_handle, CUBLAS_OP_T, CUBLAS_OP_T, nstart, nstart, &t_alpha, tmp_hc, nstart, &t_beta, tmp_hc, nstart, sc, nstart)); + + CHECK_CUDA(cudaFree(aux)); + + // if(GlobalV::NPROC_IN_POOL>1) + // { + // Parallel_Reduce::reduce_complex_double_pool( hc.c, nstart*nstart ); + // Parallel_Reduce::reduce_complex_double_pool( sc.c, nstart*nstart ); + // } + + // after generation of H and S matrix, diag them + + ModuleBase::ComplexMatrix h_hc(nstart, nstart); + ModuleBase::ComplexMatrix h_sc(nstart, nstart); + ModuleBase::ComplexMatrix h_hvec(nstart,n_band); + + double *h_en = new double[n_band]; + + CHECK_CUDA(cudaMemcpy(h_hc.c, hc, nstart*nstart*sizeof(double2), cudaMemcpyDeviceToHost)); + CHECK_CUDA(cudaMemcpy(h_sc.c, sc, nstart*nstart*sizeof(double2), cudaMemcpyDeviceToHost)); + // CHECK_CUDA(cudaMemcpy(h_hvec.c, hvec, nstart*n_band*sizeof(double2), cudaMemcpyDeviceToHost)); + + // cout<<"hello? begin lapack"<hvec_array[ik] = hvec; + break; + } + } + #endif + */ + + std::cout << std::setprecision(5); + + if((GlobalV::BASIS_TYPE=="lcao" || GlobalV::BASIS_TYPE=="lcao_in_pw") && GlobalV::CALCULATION=="nscf" && !Optical::opt_epsilon2) + { + GlobalV::ofs_running << " Not do zgemm to get evc." << std::endl; + } + else if((GlobalV::BASIS_TYPE=="lcao" || GlobalV::BASIS_TYPE=="lcao_in_pw") + && ( GlobalV::CALCULATION == "scf" || GlobalV::CALCULATION == "md" || GlobalV::CALCULATION == "relax")) //pengfei 2014-10-13 + { + // because psi and evc are different here, + // I think if psi and evc are the same, + // there may be problems, mohan 2011-01-01 + // char transa = 'N'; + // char transb = 'T'; + // zgemm_( &transa, + // &transb, + // &dmax, // m: row of A,C + // &n_band, // n: col of B,C + // &nstart, // k: col of A, row of B + // &ModuleBase::ONE, // alpha + // psi.c, // A + // &dmax, // LDA: if(N) max(1,m) if(T) max(1,k) + // hvec.c, // B + // &n_band, // LDB: if(N) max(1,k) if(T) max(1,n) + // &ModuleBase::ZERO, // belta + // evc.c, // C + // &dmax ); // LDC: if(N) max(1, m) + cublasOperation_t transa = CUBLAS_OP_N; + cublasOperation_t transb = CUBLAS_OP_T; + double2 ONE, ZERO; + ONE.y = ZERO.x = ZERO.y = 0.0; + ONE.x = 1.0; + CHECK_CUBLAS(cublasZgemm(hpw_handle, transa, transb, dmax, n_band, nstart, &ONE, psi_c, dmax, hvec, n_band, &ZERO, evc, dmax)); + } + else + { + // As the evc and psi may refer to the same matrix, we first + // create a temporary matrix to story the result. (by wangjp) + // qianrui improve this part 2021-3-13 + // char transa = 'N'; + // char transb = 'T'; + cublasOperation_t transa = CUBLAS_OP_N; + cublasOperation_t transb = CUBLAS_OP_T; + + double2 ONE, ZERO; + ONE.y = ZERO.x = ZERO.y = 0.0; + ONE.x = 1.0; + + double2 *evctmp; + CHECK_CUDA(cudaMalloc((void**)&evctmp, n_band*dmin*sizeof(double2))); + CHECK_CUBLAS(cublasZgemm(hpw_handle, transa, transb, dmin, n_band, nstart, &ONE, psi_c, dmax, hvec, n_band, &ZERO, evctmp, dmin)); + + for(int ib=0; ib(hpsi, 15); @@ -578,7 +799,7 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, co //------------------------------------ //(2) the local potential. //----------------------------------- - ModuleBase::timer::tick("Hamilt_PW_GPU","vloc"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","vloc"); // ... if(GlobalV::VL_IN_H) { @@ -627,11 +848,11 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, co CHECK_CUDA(cudaFree(f_vr_eff1)); CHECK_CUDA(cudaFree(f_porter)); } - ModuleBase::timer::tick("Hamilt_PW_GPU","vloc"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","vloc"); //------------------------------------ // (3) the nonlocal pseudopotential. //------------------------------------ - ModuleBase::timer::tick("Hamilt_PW_GPU","vnl"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","vnl"); // cout<<"======after hpsi part II======="<(hpsi, 15); @@ -656,7 +877,7 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, co cublasOperation_t transa = CUBLAS_OP_C; cublasOperation_t transb = CUBLAS_OP_N; // cublasHandle_t handle; - // cublasCreate(&handle); + // CHECK_CUBLAS(cublasCreate(&handle)); float2 ONE, ZERO; ONE.y = ZERO.x = ZERO.y = 0.0; @@ -669,26 +890,26 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, co if(m==1 && GlobalV::NPOL==1) { int inc = 1; - cublasCgemv(hpw_handle, transa, GlobalC::wf.npw, nkb, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, inc, &ZERO, becp, inc); + CHECK_CUBLAS(cublasCgemv(hpw_handle, transa, GlobalC::wf.npw, nkb, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, inc, &ZERO, becp, inc)); } else { int npm = GlobalV::NPOL * m; - cublasCgemm(hpw_handle, transa, transb, nkb, npm, GlobalC::wf.npw, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, GlobalC::wf.npwx, &ZERO, becp, nkb); + CHECK_CUBLAS(cublasCgemm(hpw_handle, transa, transb, nkb, npm, GlobalC::wf.npw, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, GlobalC::wf.npwx, &ZERO, becp, nkb)); } // complex *hpsi_cpu = new complex[GlobalC::wf.npw*GlobalV::NPOL]; // complex *becp_cpu = new complex[GlobalV::NPOL*m*nkb]; - // cudaMemcpy(becp_cpu, becp, GlobalV::NPOL*m*nkb*sizeof(float2), cudaMemcpyDeviceToHost); + // CHECK_CUDA(cudaMemcpy(becp_cpu, becp, GlobalV::NPOL*m*nkb*sizeof(float2), cudaMemcpyDeviceToHost)); - // cudaMemcpy(hpsi_cpu, hpsi, GlobalC::wf.npw*GlobalV::NPOL*sizeof(float2), cudaMemcpyDeviceToHost); + // CHECK_CUDA(cudaMemcpy(hpsi_cpu, hpsi, GlobalC::wf.npw*GlobalV::NPOL*sizeof(float2), cudaMemcpyDeviceToHost)); // this->add_nonlocal_pp(hpsi_cpu, becp_cpu, m); - // cudaMemcpy(hpsi, hpsi_cpu, GlobalC::wf.npw*GlobalV::NPOL*sizeof(float2), cudaMemcpyHostToDevice); + // CHECK_CUDA(cudaMemcpy(hpsi, hpsi_cpu, GlobalC::wf.npw*GlobalV::NPOL*sizeof(float2), cudaMemcpyHostToDevice)); // delete [] hpsi_cpu; // delete [] becp_cpu; @@ -698,7 +919,7 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, co this->add_nonlocal_pp_cuda(hpsi, becp, vkb_c, m); - // cublasDestroy(handle); + // CHECK_CUBLAS(cublasDestroy(handle)); CHECK_CUDA(cudaFree(becp)); // CHECK_CUDA(cudaFree(d_vkb_c)); // CHECK_CUDA(cudaFree(f_vkb_c)); @@ -707,7 +928,7 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, co } } - ModuleBase::timer::tick("Hamilt_PW_GPU","vnl"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","vnl"); // cout<<"======after hpsi part III======="<(hpsi, 15); @@ -717,13 +938,13 @@ void Hamilt_PW::h_psi_cuda(const float2 *psi_in, float2 *hpsi, float2 *vkb_c, co //------------------------------------ // TODO: add metaGGA part - ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","h_psi"); return; } void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, const int m) { - ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","h_psi"); // int i = 0; // int j = 0; // int ig= 0; @@ -739,7 +960,7 @@ void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, //------------------------------------ double2 *tmhpsi; const double2 *tmpsi_in; - ModuleBase::timer::tick("Hamilt_PW_GPU","kinetic"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","kinetic"); if(GlobalV::T_IN_H) { tmhpsi = hpsi; @@ -780,15 +1001,15 @@ void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, CHECK_CUDA(cudaFree(d_g2kin)); } - ModuleBase::timer::tick("Hamilt_PW_GPU","kinetic"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","kinetic"); // cout<<"======after hpsi part I======="<(hpsi, 15); + // print_test(hpsi, 10); //------------------------------------ //(2) the local potential. //----------------------------------- - ModuleBase::timer::tick("Hamilt_PW_GPU","vloc"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","vloc"); // ... if(GlobalV::VL_IN_H) { @@ -810,9 +1031,20 @@ void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, // if(NSPIN!=4){ // ZEROS( UFFT.porter, pw.nrxx); CHECK_CUDA(cudaMemset(d_porter, 0, GlobalC::pw.nrxx * sizeof(double2))); - + // cout<<"m:"<(d_porter, 10); + // for (j = 0;j < wf.npw;j++) // { // tmhpsi[j] += UFFT.porter[ GR_index[j] ]; @@ -828,14 +1060,14 @@ void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, CHECK_CUDA(cudaFree(d_vr_eff1)); CHECK_CUDA(cudaFree(d_porter)); } - ModuleBase::timer::tick("Hamilt_PW_GPU","vloc"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","vloc"); // cout<<"======after hpsi part II======="<(hpsi, 15); + // print_test(hpsi, 10); //------------------------------------ // (3) the nonlocal pseudopotential. //------------------------------------ - ModuleBase::timer::tick("Hamilt_PW_GPU","vnl"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","vnl"); if(GlobalV::VNL_IN_H) { @@ -852,7 +1084,7 @@ void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, cublasOperation_t transa = CUBLAS_OP_C; cublasOperation_t transb = CUBLAS_OP_N; // cublasHandle_t handle; - // cublasCreate(&handle); + // CHECK_CUBLAS(cublasCreate(&handle)); // cout<<"===== vkbc ===="<(d_vkb_c, 15); @@ -865,26 +1097,26 @@ void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, if(m==1 && GlobalV::NPOL==1) { int inc = 1; - cublasZgemv(hpw_handle, transa, GlobalC::wf.npw, nkb, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, inc, &ZERO, becp, inc); + CHECK_CUBLAS(cublasZgemv(hpw_handle, transa, GlobalC::wf.npw, nkb, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, inc, &ZERO, becp, inc)); } else { int npm = GlobalV::NPOL * m; - cublasZgemm(hpw_handle, transa, transb, nkb, npm, GlobalC::wf.npw, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, GlobalC::wf.npwx, &ZERO, becp, nkb); + CHECK_CUBLAS(cublasZgemm(hpw_handle, transa, transb, nkb, npm, GlobalC::wf.npw, &ONE, vkb_c, GlobalC::wf.npwx, psi_in, GlobalC::wf.npwx, &ZERO, becp, nkb)); } // complex *hpsi_cpu = new complex[GlobalC::wf.npw*GlobalV::NPOL]; // complex *becp_cpu = new complex[GlobalV::NPOL*m*nkb]; - // cudaMemcpy(becp_cpu, becp, GlobalV::NPOL*m*nkb*sizeof(double2), cudaMemcpyDeviceToHost); + // CHECK_CUDA(cudaMemcpy(becp_cpu, becp, GlobalV::NPOL*m*nkb*sizeof(double2), cudaMemcpyDeviceToHost)); - // cudaMemcpy(hpsi_cpu, hpsi, GlobalC::wf.npw*GlobalV::NPOL*sizeof(double2), cudaMemcpyDeviceToHost); + // CHECK_CUDA(cudaMemcpy(hpsi_cpu, hpsi, GlobalC::wf.npw*GlobalV::NPOL*sizeof(double2), cudaMemcpyDeviceToHost)); // this->add_nonlocal_pp(hpsi_cpu, becp_cpu, m); - // cudaMemcpy(hpsi, hpsi_cpu, GlobalC::wf.npw*GlobalV::NPOL*sizeof(double2), cudaMemcpyHostToDevice); + // CHECK_CUDA(cudaMemcpy(hpsi, hpsi_cpu, GlobalC::wf.npw*GlobalV::NPOL*sizeof(double2), cudaMemcpyHostToDevice)); // delete [] hpsi_cpu; // delete [] becp_cpu; @@ -894,7 +1126,7 @@ void Hamilt_PW::h_psi_cuda(const double2 *psi_in, double2 *hpsi, double2 *vkb_c, this->add_nonlocal_pp_cuda(hpsi, becp, vkb_c, m); - // cublasDestroy(handle); + // CHECK_CUBLAS(cublasDestroy(handle)); CHECK_CUDA(cudaFree(becp)); // CHECK_CUDA(cudaFree(d_vkb_c)); // cout<<"nonlocal end"<(hpsi, 15); + // print_test(hpsi, 10); //------------------------------------ // (4) the metaGGA part //------------------------------------ // TODO: add metaGGA part - ModuleBase::timer::tick("Hamilt_PW_GPU","h_psi"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","h_psi"); return; } @@ -1091,7 +1323,7 @@ void Hamilt_PW::h_psi(const std::complex *psi_in, std::complex * //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> } } - // timer::tick("Hamilt_PW","vnl"); + ModuleBase::timer::tick("Hamilt_PW","vnl"); //------------------------------------ // (4) the metaGGA part //------------------------------------ @@ -1139,7 +1371,7 @@ void Hamilt_PW::add_nonlocal_pp_cuda( const float2 *f_vkb_c, const int m) { - ModuleBase::timer::tick("Hamilt_PW","add_nonlocal_pp_cuda"); + ModuleBase::timer::tick("Hamilt_PW_CUDA","add_nonlocal_pp"); // number of projectors int nkb = GlobalC::ppcell.nkb; @@ -1186,7 +1418,7 @@ void Hamilt_PW::add_nonlocal_pp_cuda( // cout<<"===== f_deeq before add pp kernel ===="<<<>>(GlobalC::wf.npw, psic, psi, fft_index); + // cout<<"In fft"<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); + // double2 *hos_psic_aft = (double2*)malloc(10*sizeof(double2)); + // CHECK_CUDA(cudaMemcpy(hos_psic_aft, psic, 10*sizeof(double2), cudaMemcpyDeviceToHost)); + // cout<<"hospsi-c after fft"<<<>>(GlobalC::pw.nrxx, psic, vr); // cufftHandle cufftplan_gpu2; From ad12cd22a29e6b26026362c1c0d64dfaa6fb604d Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Tue, 19 Oct 2021 16:33:07 +0800 Subject: [PATCH 016/478] fix cmakelist for cuda. --- CMakeLists.txt | 36 ++---------------------------------- 1 file changed, 2 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 810576b851..0bafae76ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,13 +13,8 @@ project(ABACUS option(ENABLE_DEEPKS "Enable DeePKS functionality" OFF) option(ENABLE_LIBXC "Enable LibXC functionality" OFF) -<<<<<<< HEAD option(USE_CUDA "Enable support to CUDA." ON) - -======= -option(USE_CUDA "Enable support to CUDA." OFF) option(USE_OPENMP " Enable OpenMP in abacus." ON) ->>>>>>> afc908953c78e3b486fbe98a9e5085f3ad43a664 option(ENABLE_ASAN "Enable AddressSanitizer" OFF) option(BUILD_TESTING "Build ABACUS unit tests" OFF) option(GENERATE_TEST_REPORTS "Enable test report generation" OFF) @@ -51,7 +46,7 @@ target_link_libraries(${ABACUS_BIN_NAME} Threads::Threads) if(USE_OPENMP) find_package(OpenMP REQUIRED) target_link_libraries(${ABACUS_BIN_NAME} OpenMP::OpenMP_CXX) - add_compile_options(${OpenMP_CXX_FLAGS}) + # add_compile_options(${OpenMP_CXX_FLAGS}) add_compile_definitions(__OPENMP) endif() @@ -85,6 +80,7 @@ if(USE_CUDA) -lcufft -lcublas -lcudart + -lcusolver ) set_property(TARGET ${ABACUS_BIN_NAME} PROPERTY CUDA_ARCHITECTURES @@ -211,34 +207,6 @@ if(CMAKE_COMPILER_IS_GNUCXX) target_link_libraries(${ABACUS_BIN_NAME} -lgfortran ) -<<<<<<< HEAD -# endif() - -if(ENABLE_DEEPKS) - target_link_libraries(${ABACUS_BIN_NAME} - ${TORCH_LIBRARIES} - ) -endif() - -if(USE_CUDA) - target_link_libraries(${ABACUS_BIN_NAME} - -lcufft - -lcublas - -lcudart - -lcusolver - ) - set_property(TARGET ${ABACUS_BIN_NAME} - PROPERTY CUDA_ARCHITECTURES - 60 # P100 - 70 # V100 - 75 # T4 - ) -endif() - -if(${Libxc_FOUND}) - target_link_libraries(${ABACUS_BIN_NAME} Libxc::xc) -======= ->>>>>>> afc908953c78e3b486fbe98a9e5085f3ad43a664 endif() install(PROGRAMS ${ABACUS_BIN_PATH} From 52d246fc78282e80d646e7687259f79b025cefaf Mon Sep 17 00:00:00 2001 From: maki49 <1579492865@qq.com> Date: Wed, 20 Oct 2021 11:31:54 +0800 Subject: [PATCH 017/478] fix a input_conv bug for deepks parameters --- source/input_conv.cpp | 5 +++-- source/src_io/write_input.cpp | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/source/input_conv.cpp b/source/input_conv.cpp index 17fdde8055..1755ebd37d 100644 --- a/source/input_conv.cpp +++ b/source/input_conv.cpp @@ -629,12 +629,13 @@ void Input_Conv::Convert(void) } ModuleBase::timer::tick("Input_Conv","Convert"); - return; - //----------------------------------------------- //caoyu add for DeePKS //----------------------------------------------- + #ifdef __DEEPKS GlobalV::out_descriptor = INPUT.out_descriptor; GlobalV::deepks_scf = INPUT.deepks_scf; + #endif + return; } diff --git a/source/src_io/write_input.cpp b/source/src_io/write_input.cpp index 8d8540d631..e4c2a2af8d 100644 --- a/source/src_io/write_input.cpp +++ b/source/src_io/write_input.cpp @@ -97,6 +97,9 @@ void Input::Print(const std::string &fn)const // for deepks ModuleBase::GlobalFunc::OUTP(ofs,"out_descriptor",out_descriptor,">0 compute descriptor for deepks"); ModuleBase::GlobalFunc::OUTP(ofs,"lmax_descriptor",lmax_descriptor,">0 lmax used in descriptor for deepks"); + ModuleBase::GlobalFunc::OUTP(ofs,"deepks_scf",deepks_scf,">0 load a model and mix int in SCF"); + ModuleBase::GlobalFunc::OUTP(ofs,"deepks_scf",model_file,"file dir of traced pytorch model: 'model.ptg"); + ofs << "\n#Parameters (4.LCAO)" << std::endl; ModuleBase::GlobalFunc::OUTP(ofs,"basis_type",basis_type,"PW; LCAO in pw; LCAO"); From 9df67e29f48a01528eeb5f1f30457f2ce87d2ce9 Mon Sep 17 00:00:00 2001 From: maki49 <1579492865@qq.com> Date: Wed, 20 Oct 2021 12:05:20 +0800 Subject: [PATCH 018/478] add write_input of deepks parameters --- source/src_io/write_input.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/src_io/write_input.cpp b/source/src_io/write_input.cpp index e4c2a2af8d..74a548c132 100644 --- a/source/src_io/write_input.cpp +++ b/source/src_io/write_input.cpp @@ -98,7 +98,7 @@ void Input::Print(const std::string &fn)const ModuleBase::GlobalFunc::OUTP(ofs,"out_descriptor",out_descriptor,">0 compute descriptor for deepks"); ModuleBase::GlobalFunc::OUTP(ofs,"lmax_descriptor",lmax_descriptor,">0 lmax used in descriptor for deepks"); ModuleBase::GlobalFunc::OUTP(ofs,"deepks_scf",deepks_scf,">0 load a model and mix int in SCF"); - ModuleBase::GlobalFunc::OUTP(ofs,"deepks_scf",model_file,"file dir of traced pytorch model: 'model.ptg"); + ModuleBase::GlobalFunc::OUTP(ofs,"model_file",model_file,"file dir of traced pytorch model: 'model.ptg"); ofs << "\n#Parameters (4.LCAO)" << std::endl; From 5b365ea4c4eef0dcc914d2df540fb39ecb424df4 Mon Sep 17 00:00:00 2001 From: maki49 <1579492865@qq.com> Date: Wed, 20 Oct 2021 15:14:01 +0800 Subject: [PATCH 019/478] replace 'torch::symeig' by torch::linalg::eigh' --- source/src_lcao/LCAO_descriptor.cpp | 11 +++++++---- source/src_lcao/LCAO_descriptor.h | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index ccf8ae4abe..09b2714da0 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace GlobalC { @@ -1351,7 +1352,8 @@ void LCAO_Descriptor::cal_descriptor_tensor(void) { torch::Tensor vd; std::tuple d_v(this->d_tensor[inl], vd); - d_v = torch::symeig(pdm_tensor[inl], /*eigenvalues=*/true, /*upper=*/true); + //d_v = torch::symeig(pdm_tensor[inl], /*eigenvalues=*/true, /*upper=*/true); + d_v = torch::linalg::eigh(pdm_tensor[inl], /*uplo*/"U"); d_tensor[inl] = std::get<0>(d_v); } return; @@ -1382,7 +1384,7 @@ void LCAO_Descriptor::cal_gedm(const ModuleBase::matrix &dm) //-----prepare for autograd--------- this->cal_projected_DM(dm); this->cal_descriptor(); - this->cal_descriptor_tensor(); //use torch::symeig + this->cal_descriptor_tensor(); //use torch::linalg::eigh //-----prepared----------------------- //forward std::vector inputs; @@ -1395,7 +1397,7 @@ void LCAO_Descriptor::cal_gedm(const ModuleBase::matrix &dm) //cal gedm std::vector gedm_shell; gedm_shell.push_back(torch::ones_like(ec[0])); - this->gedm_tensor = torch::autograd::grad(ec, this->pdm_tensor, gedm_shell, /*retain_grad=*/true); + this->gedm_tensor = torch::autograd::grad(ec, this->pdm_tensor, gedm_shell, /*retain_grad=*/true, /*create_graph=*/false, /*allow_unused=*/true); //gedm_tensor(Hartree) to gedm(Ry) for (int inl = 0;inl < inlmax;++inl) @@ -1428,7 +1430,8 @@ void LCAO_Descriptor::cal_gvdm() int nm = 2*this->inl_l[inl]+1; //repeat each block for nm times in an additional dimension torch::Tensor tmp_x = this->pdm_tensor[inl].reshape({nm, nm}).unsqueeze(0).repeat({nm, 1, 1}); - torch::Tensor tmp_y = std::get<0>(torch::symeig(tmp_x, true)); + //torch::Tensor tmp_y = std::get<0>(torch::symeig(tmp_x, true)); + torch::Tensor tmp_y = std::get<0>(torch::linalg::eigh(tmp_x, "U")); torch::Tensor tmp_yshell = torch::eye(nm, torch::TensorOptions().dtype(torch::kFloat64)); std::vector tmp_rpt; //repeated-pdm-tensor (x) std::vector tmp_rdt; //repeated-d-tensor (y) diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index ca7f8ceccc..7364d0218f 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -182,7 +182,7 @@ class LCAO_Descriptor //gvx:d(d)/dX, [natom][3][natom][des_per_atom] torch::Tensor gvx_tensor; - //d(d)/dD, autograd from torch::symeig + //d(d)/dD, autograd from torch::linalg::eigh std::vector gevdm_vector; //dD/dX, tensor form of gdmx From 4b90c38950e2de1de8d46ce9c6e7250f52c0b213 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 21 Oct 2021 19:57:25 +0800 Subject: [PATCH 020/478] deepks parallelization : S overlap matrix --- source/Makefile.Objects | 1 + source/src_lcao/LCAO_descriptor.cpp | 75 +++++++++----- source/src_lcao/LCAO_descriptor.h | 4 +- source/src_lcao/LCAO_matrix.cpp | 10 ++ source/src_parallel/parallel_deepks.cpp | 128 ++++++++++++++++++++++++ source/src_parallel/parallel_deepks.h | 56 +++++++++++ 6 files changed, 248 insertions(+), 26 deletions(-) create mode 100644 source/src_parallel/parallel_deepks.cpp create mode 100644 source/src_parallel/parallel_deepks.h diff --git a/source/Makefile.Objects b/source/Makefile.Objects index e7dbb91317..303f9dbd0e 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -225,6 +225,7 @@ parallel_reduce.o\ parallel_pw.o\ ft.o\ parallel_grid.o\ +parallel_deepks.o \ OBJS_FIRST_PRINCIPLES=$(OBJS_MAIN)\ $(OBJS_PW)\ diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index 09b2714da0..c34ed1841a 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -200,6 +200,12 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) { ModuleBase::TITLE("LCAO_Descriptor", "build_S_descriptor"); //array to store data + + if (!GlobalV::GAMMA_ONLY_LOCAL) + { + ModuleBase::WARNING_QUIT("LCAO_Descriptor::build_S_descriptor", "muti-kpoint method for descriptor is not implemented yet! "); + } + double olm[3] = {0.0, 0.0, 0.0}; //\sum{T} e**{ikT} <\phi_{ia}|d\phi_{k\beta}(T)> //??? @@ -234,47 +240,66 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) const int N1 = atom1->iw2n[jj0]; const int m1 = atom1->iw2m[jj0]; - for (int L2 = 0; L2 <= GlobalC::ORB.Alpha[0].getLmax(); ++L2) + int iw1_local=GlobalC::ParaD.trace_loc_orb[iw1_all]; + if(iw1_local<0) + { + ++iw1_all; + } + else { - for (int N2 = 0; N2 < GlobalC::ORB.Alpha[0].getNchi(L2); ++N2) + for (int L2 = 0; L2 <= GlobalC::ORB.Alpha[0].getLmax(); ++L2) { - for (int m2 = 0; m2 < 2 * L2 + 1; ++m2) + for (int N2 = 0; N2 < GlobalC::ORB.Alpha[0].getNchi(L2); ++N2) { - olm[0] = olm[1] = olm[2] = 0.0; - if (!calc_deri) + for (int m2 = 0; m2 < 2 * L2 + 1; ++m2) { - GlobalC::UOT.snap_psipsi(GlobalC::ORB, olm, 0, 'D', tau1, - T1, L1, m1, N1, GlobalC::GridD.getAdjacentTau(ad), - T2, L2, m2, N2, GlobalV::NSPIN); - if (GlobalV::GAMMA_ONLY_LOCAL) + olm[0] = olm[1] = olm[2] = 0.0; + if (!calc_deri) { - this->set_S_mu_alpha(iw1_all, inl_index[T2](I2,L2,N2), m2, olm[0]); + GlobalC::UOT.snap_psipsi(GlobalC::ORB, olm, 0, 'D', tau1, + T1, L1, m1, N1, GlobalC::GridD.getAdjacentTau(ad), + T2, L2, m2, N2, GlobalV::NSPIN); + if (GlobalV::GAMMA_ONLY_LOCAL) + { + this->set_S_mu_alpha(iw1_all, inl_index[T2](I2,L2,N2), m2, olm[0]); + } } - } - else - { - GlobalC::UOT.snap_psipsi(GlobalC::ORB, olm, 1, 'D', tau1, - T1, L1, m1, N1, GlobalC::GridD.getAdjacentTau(ad), - T2, L2, m2, N2, GlobalV::NSPIN); - if (GlobalV::GAMMA_ONLY_LOCAL) + else { - this->set_DS_mu_alpha(iw1_all, inl_index[T2](I2,L2,N2), m2, olm[0], olm[1], olm[2]); + GlobalC::UOT.snap_psipsi(GlobalC::ORB, olm, 1, 'D', tau1, + T1, L1, m1, N1, GlobalC::GridD.getAdjacentTau(ad), + T2, L2, m2, N2, GlobalV::NSPIN); + if (GlobalV::GAMMA_ONLY_LOCAL) + { + this->set_DS_mu_alpha(iw1_all, inl_index[T2](I2,L2,N2), m2, olm[0], olm[1], olm[2]); + } } - } - } //m2 - } //N2 - } //nw2(L2) - ++iw1_all; + } //m2 + } //N2 + } //nw2(L2) + ++iw1_all; + } } // nw1 } // distance } // ad } // I1 } // T1 - if (!GlobalV::GAMMA_ONLY_LOCAL) + +#ifdef __MPI + GlobalC::ParaD.allsum_S_mu_alpha(this->inlmax,GlobalV::NLOCAL*(2*this->lmaxd+1),this->S_mu_alpha); +#endif + + /* + for(int inl=0;inlinlmax;inl++) { - ModuleBase::WARNING_QUIT("LCAO_Descriptor::build_S_descriptor", "muti-kpoint method for descriptor is not implemented yet! "); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"inl:",inl); + for(int j=0;jlmaxd+1);j++) + { + GlobalV::ofs_running << "j,s_mu_alpha: " << j << " " << this->S_mu_alpha[inl][j] << std::endl; + } } + */ return; } diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 7364d0218f..b93ebec9ce 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -7,7 +7,9 @@ #include "../module_base/complexmatrix.h" #include #include "../src_pw/global.h" - +#ifdef __MPI +#include "../src_parallel/parallel_deepks.h" +#endif /// /// This class computes the descriptors for each atom from LCAO basis set, /// interfaces with pytorch to obtain the correction potential in LCAO basis, diff --git a/source/src_lcao/LCAO_matrix.cpp b/source/src_lcao/LCAO_matrix.cpp index 6b0121f9f8..ab741f3826 100644 --- a/source/src_lcao/LCAO_matrix.cpp +++ b/source/src_lcao/LCAO_matrix.cpp @@ -1,5 +1,8 @@ #include "LCAO_matrix.h" #include "global_fp.h" +#ifdef __DEEPKS +#include "../src_parallel/parallel_deepks.h" +#endif LCAO_Matrix::LCAO_Matrix() { @@ -61,6 +64,13 @@ void LCAO_Matrix::divide_HS_in_frag(const bool isGamma, Parallel_Orbitals &po) // for 2d: calculate po.nloc first, then trace_loc_row and trace_loc_col // for O(N): calculate the three together. po.set_trace(); +#ifdef __DEEPKS + if(GlobalV::out_descriptor) + { + GlobalC::ParaD.set_nlocal(MPI_COMM_WORLD); + GlobalC::ParaD.set_loc_orb(MPI_COMM_WORLD); + } +#endif // (3) allocate for S, H_fixed, H, and S_diag if(isGamma) diff --git a/source/src_parallel/parallel_deepks.cpp b/source/src_parallel/parallel_deepks.cpp new file mode 100644 index 0000000000..937ea2ac4d --- /dev/null +++ b/source/src_parallel/parallel_deepks.cpp @@ -0,0 +1,128 @@ +#ifdef __DEEPKS + +#include "parallel_deepks.h" + +namespace GlobalC +{ +Parallel_deepks ParaD; +} + +Parallel_deepks::Parallel_deepks() +{ + this->trace_loc_orb=new int[1]; + this->norb_local=new int[1]; +} + +Parallel_deepks::~Parallel_deepks() +{ + delete[] this->trace_loc_orb; + delete[] this->norb_local; +} + +void Parallel_deepks::set_nlocal( +#ifdef __MPI + MPI_Comm MPI_WORLD +#endif +) +{ + ModuleBase::TITLE("Parallel_deepks","cal_nlocal"); + assert(GlobalV::NLOCAL>0); + + delete[] this->norb_local; + + int size; +#ifdef __MPI + assert(GlobalV::NPROC>0); + size = GlobalV::NPROC; +#else + size = 1; +#endif + this->norb_local=new int[size]; + +#ifdef __MPI + int loc_size_base=GlobalV::NLOCAL/GlobalV::NPROC; + if(loc_size_base==0) + { + GlobalV::ofs_warning << " loc_size=0" << " in proc " << GlobalV::MY_RANK+1 << std::endl; + ModuleBase::WARNING_QUIT("Parallel_deepks::set_nlocal","NLOCAL < GlobalV::NPROC"); + } + + int sum_nlocal = 0; + for(int rank=0;ranknorb_local[rank] = loc_size; + sum_nlocal += loc_size; + //GlobalV::ofs_running << " loc_size: " << loc_size << " in proc " << rank << std::endl; + //GlobalV::ofs_running << " sum_nlocal: " << sum_nlocal << " in proc " << GlobalV::MY_RANK+1 << std::endl; + } + + //check if sum of norb_local = tot. nlocal + assert(sum_nlocal == GlobalV::NLOCAL); +#else + this->norb_local[0] = GlobalV::NLOCAL; +#endif +} + +void Parallel_deepks::set_loc_orb +( +#ifdef __MPI + MPI_Comm MPI_WORLD +#endif +) +{ + ModuleBase::TITLE("Parallel_deepks","set_loc_orb"); + assert(GlobalV::NLOCAL>0); + + delete[] this->trace_loc_orb; + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"trace_loc_orb dimension",GlobalV::NLOCAL); + + this->trace_loc_orb = new int[GlobalV::NLOCAL]; + ModuleBase::Memory::record("Parallel_deepks","trace_loc_orb",GlobalV::NLOCAL,"int"); + + for(int i=0; inorb_local[GlobalV::MY_RANK]; + + int norb_start = 0; + //this is the global index of first local orb on current processor + for(int i=0;inorb_local[i]; + } + + for (int iorb=0; iorb< norb; iorb++) + { + int global_orb = iorb + norb_start; + this->trace_loc_orb[global_orb] = iorb; + } + + //ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"norb:",norb); + //for(int i=0;itrace_loc_orb[i]); + //} +#else + for(int i=0; i Date: Mon, 25 Oct 2021 14:58:46 +0800 Subject: [PATCH 021/478] deepks parallelization : calculating pdm; update CMakelist --- source/src_lcao/LCAO_descriptor.cpp | 141 +++++++++++++++++++++++- source/src_parallel/CMakeLists.txt | 5 + source/src_parallel/parallel_deepks.cpp | 10 +- source/src_parallel/parallel_deepks.h | 8 +- 4 files changed, 151 insertions(+), 13 deletions(-) diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index c34ed1841a..6f9e7d5a60 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -287,7 +287,7 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) } // T1 #ifdef __MPI - GlobalC::ParaD.allsum_S_mu_alpha(this->inlmax,GlobalV::NLOCAL*(2*this->lmaxd+1),this->S_mu_alpha); + GlobalC::ParaD.allsum_deepks(this->inlmax,GlobalV::NLOCAL*(2*this->lmaxd+1),this->S_mu_alpha); #endif /* @@ -355,6 +355,134 @@ void LCAO_Descriptor::cal_dm_as_descriptor(const ModuleBase::matrix &dm) void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_projected_DM"); + ModuleBase::timer::tick("LCAO_Descriptor","cal_projected_DM"); + const int pdm_size = (this->lmaxd * 2 + 1) * (this->lmaxd * 2 + 1); +#ifdef __MPI + + if(GlobalV::NPROC>1) + { + //This is for first SCF iteration, when density matrix is not available yet + if(dm.nr == 0 && dm.nc ==0) + { + ModuleBase::timer::tick("LCAO_Descriptor","cal_projected_DM"); + return; + } + //step 1: get S_alpha_mu and S_nu_beta + double **ss = this->S_mu_alpha; + + //step 2 : multiply: cal A=ST*DM*S + //A(im1,im2) = sum iw1 sum iw2 S(iw1,im1) * dm(iw1,iw2) * S(iw2,im2) + // = sum iw1 S(iw1,im1) * X(iw1,im2) + // where X(iw1,im2) = sum iw2 dm(iw1,iw2) * S(iw2,im2) + for (int inl = 0;inl < inlmax;inl++) + { + ModuleBase::GlobalFunc::ZEROS(this->pdm[inl], pdm_size); + int nm = 2 * inl_l[inl] + 1; + const int tmp_pdm_size = GlobalV::NLOCAL * nm; + double* tmp_pdm = new double[tmp_pdm_size]; // saves X(iw1,im2) + + //for each pair index1=(iw1,im2) + for(int iw1 = 0; iw1 < GlobalV::NLOCAL; iw1++) + { + int iw1_local = GlobalC::ParaO.trace_loc_col[iw1]; + if(iw1_local < 0) continue; + const int ir1 = iw1; + + ModuleBase::GlobalFunc::ZEROS(tmp_pdm, tmp_pdm_size); + + for(int im2=0;im2pdm[inl][ind] += element; + } + } + } + delete[] tmp_pdm; + } + + //step 3 : gather from all ranks + GlobalC::ParaD.allsum_deepks(this->inlmax,pdm_size,this->pdm); + } + else + { + //step 1: get dm: the coefficient of wfc, not charge density + //now, dm is an input arg of this func, but needed converting to double* + this->getdm_double(dm); + + //step 2: get S_alpha_mu and S_nu_beta + double **ss = this->S_mu_alpha; + + //step 3 : multiply: cal ST*DM*S + + //init tmp_pdm* + const int tmp_pdm_size = GlobalV::NLOCAL * (lmaxd*2+1); + double* tmp_pdm = new double[tmp_pdm_size]; + ModuleBase::GlobalFunc::ZEROS(tmp_pdm, tmp_pdm_size); + for (int inl = 0;inl < inlmax;inl++) + { + int nm = 2 * inl_l[inl] + 1; //1,3,5,... + const char t = 'T'; //transpose + const char nt = 'N'; //non transpose + const double alpha = 1; + const double beta = 0; + double *a = this->dm_double; + double *b = ss[inl]; + double *c = tmp_pdm; + dgemm_(&nt, &nt, &GlobalV::NLOCAL, &nm, &GlobalV::NLOCAL, &alpha, a, &GlobalV::NLOCAL, b, &GlobalV::NLOCAL, &beta, c, &GlobalV::NLOCAL); //DM*S + a = ss[inl]; + b = c; + c = this->pdm[inl]; + dgemm_(&t, &nt, &nm, &nm, &GlobalV::NLOCAL, &alpha, a, &GlobalV::NLOCAL, b, &GlobalV::NLOCAL, &beta, c, &nm); //ST*DM*S + } + delete[] tmp_pdm; + } +#else //step 1: get dm: the coefficient of wfc, not charge density //now, dm is an input arg of this func, but needed converting to double* this->getdm_double(dm); @@ -368,7 +496,6 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) const int tmp_pdm_size = GlobalV::NLOCAL * (lmaxd*2+1); double* tmp_pdm = new double[tmp_pdm_size]; ModuleBase::GlobalFunc::ZEROS(tmp_pdm, tmp_pdm_size); - for (int inl = 0;inl < inlmax;inl++) { int nm = 2 * inl_l[inl] + 1; //1,3,5,... @@ -385,8 +512,10 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) c = this->pdm[inl]; dgemm_(&t, &nt, &nm, &nm, &GlobalV::NLOCAL, &alpha, a, &GlobalV::NLOCAL, b, &GlobalV::NLOCAL, &beta, c, &nm); //ST*DM*S } - delete[] tmp_pdm; +#endif + + ModuleBase::timer::tick("LCAO_Descriptor","cal_projected_DM"); return; } @@ -395,6 +524,7 @@ void LCAO_Descriptor::cal_descriptor(void) { ModuleBase::TITLE("LCAO_Descriptor", "cal_descriptor"); delete[] d; + d = new double[this->n_descriptor]; const int lmax = GlobalC::ORB.get_lmax_d(); int id = 0; @@ -1665,7 +1795,10 @@ void LCAO_Descriptor::save_npy_d(void) npy_des.push_back(this->d[i]); } const long unsigned dshape[] = {(long unsigned) GlobalC::ucell.nat, (long unsigned) this->des_per_atom }; - npy::SaveArrayAsNumpy("dm_eig.npy", false, 2, dshape, npy_des); + if (GlobalV::MY_RANK == 0) + { + npy::SaveArrayAsNumpy("dm_eig.npy", false, 2, dshape, npy_des); + } return; } diff --git a/source/src_parallel/CMakeLists.txt b/source/src_parallel/CMakeLists.txt index 0f6c8d295d..4547ba4b1c 100644 --- a/source/src_parallel/CMakeLists.txt +++ b/source/src_parallel/CMakeLists.txt @@ -11,3 +11,8 @@ add_library( parallel_reduce.cpp subgrid_oper.cpp ) + +if(ENABLE_DEEPKS) + target_sources(parallel PRIVATE parallel_deepks.cpp) +endif() + diff --git a/source/src_parallel/parallel_deepks.cpp b/source/src_parallel/parallel_deepks.cpp index 937ea2ac4d..49953462a9 100644 --- a/source/src_parallel/parallel_deepks.cpp +++ b/source/src_parallel/parallel_deepks.cpp @@ -115,14 +115,14 @@ void Parallel_deepks::set_loc_orb #endif } -void Parallel_deepks::allsum_S_mu_alpha( - int inlmax, //first dimension of S_mu_alpha - int ndim, //secohd dimension of S_mu_alpha - double** S_mu_alpha) +void Parallel_deepks::allsum_deepks( + int inlmax, //first dimension + int ndim, //second dimension + double** mat) { for(int inl=0;inl Date: Mon, 25 Oct 2021 20:58:39 +0800 Subject: [PATCH 022/478] deepks parallelization : gamma point energy --- source/module_orbital/ORB_gen_tables.cpp | 280 +++++++++++++++++++++++ source/module_orbital/ORB_gen_tables.h | 16 +- source/src_lcao/LCAO_descriptor.cpp | 191 +++++++++++++++- source/src_lcao/LCAO_descriptor.h | 1 + source/src_lcao/LCAO_hamilt.cpp | 14 +- 5 files changed, 491 insertions(+), 11 deletions(-) diff --git a/source/module_orbital/ORB_gen_tables.cpp b/source/module_orbital/ORB_gen_tables.cpp index 6c21ec5f88..fa7eb40141 100644 --- a/source/module_orbital/ORB_gen_tables.cpp +++ b/source/module_orbital/ORB_gen_tables.cpp @@ -1280,6 +1280,286 @@ double ORB_gen_tables::get_distance(const ModuleBase::Vector3 &R1, const } #ifdef __DEEPKS + +void ORB_gen_tables::snap_psialpha_half( + std::vector> &nlm, + const int& job, + const ModuleBase::Vector3& R1, + const int& T1, + const int& L1, + const int& m1, + const int& N1, + const ModuleBase::Vector3& R0, // The projector. + const int& T0, + const int& I0, + ModuleBase::IntArray* inl_index + ) const +{ + ModuleBase::timer::tick("ORB_gen_tables", "snap_psialpha_half"); + + const int ln_per_atom = GlobalC::ORB.Alpha[0].getTotal_nchi(); + assert(ln_per_atom > 0); + + bool *calproj = new bool[ln_per_atom]; + int *rmesh1 = new int[ln_per_atom]; + + if(job==0) + { + nlm.resize(1); //only energy + } + else if(job==1) + { + nlm.resize(4); //energy+force + } + + int nproj = 0; + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + nproj += (2 * L0 + 1); + } + } + + for(int dim=0;dim + const ModuleBase::Vector3 dRa = (R0 - R1) * this->lat0; + double distance10 = dRa.norm(); + + bool all_out = true; + for (int ip = 0; ip < ln_per_atom; ip++) + { + const double Rcut0 = GlobalC::ORB.Alpha[0].getRcut(); + if (distance10 > (Rcut1 + Rcut0)) + { + calproj[ip] = false; + } + else + { + all_out = false; + calproj[ip] = true; + //length of table for interpolation + rmesh1[ip] = talpha.get_rmesh(Rcut1, Rcut0); + } + } + + if (all_out) + { + delete[] calproj; + delete[] rmesh1; + ModuleBase::timer::tick("ORB_gen_tables", "snap_psialpha_half"); + return; + } + + //FOR INTERPOLATION + double *curr; //current pointer + + double psa = distance10 / talpha.dr; + int iqa = static_cast(psa); + double x0a = psa - static_cast(iqa); + double x1a = 1.0 - x0a; + double x2a = 2.0 - x0a; + double x3a = 3.0 - x0a; + double x123a = x1a * x2a * x3a / 6.0; + double x120a = x1a * x2a * x0a / 6.0; + double x032a = x0a * x3a * x2a / 2.0; + double x031a = x0a * x3a * x1a / 2.0; + + //UNIT VECTOR + + double unit_vec_dRa[3]; + unit_vec_dRa[0] = dRa.x; + unit_vec_dRa[1] = dRa.y; + unit_vec_dRa[2] = dRa.z; + + //special case for R = 0; + const double tiny1 = 1e-12; + const double tiny2 = 1e-10; + + if (distance10 < tiny1) + { + distance10 += tiny1; + } + + // Find three dimension of 'Table_DSR' ' + const int Tpair1 = T1; + const int T1_2Lplus1 = talpha.DS_2Lplus1[T1]; + + //gaunt index + const int gindex1 = L1 * L1 + m1; + std::vector rlya; + std::vector> grlya; + + if (job == 0) + { + ModuleBase::Ylm::rl_sph_harm(T1_2Lplus1 - 1, dRa.x, dRa.y, dRa.z, rlya); + } + else + { + ModuleBase::Ylm::grad_rl_sph_harm(T1_2Lplus1 - 1, dRa.x, dRa.y, dRa.z, rlya, grlya); + } + + ////////////////////////////////////////////////////////////////////////// + /// Formula : T1 T0 + /// \f[ + /// <\psi1_{L1,N1}|\Beta_{L0,m0}> + ///\f] + ////////////////////////////////////////////////////////////////////////// + + int ip = 0; //for L0,N0,m0 + int nb = 0; //for L0, N0 + + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + if (!calproj[nb]) + { + ip += 2*L0 + 1; + continue; + } + ++nb; + + // + const int Opair1 = talpha.DS_Opair(Tpair1, L1, L0, N1, N0); + const int inl = inl_index[T0](I0, L0, N0); + for (int m0 = 0;m0 < 2 * L0 + 1;m0++) + { + int gindex0 = L0 * L0 + m0; + double term_a = 0.0; + double term_a_gr[3] = {0,0,0}; + + for (int L = 0; L < T1_2Lplus1; L++) + { + //triangle rule for gaunt coefficients + int AL = L1 + L0; + int SL = abs(L1 - L0); + if ((L > AL) || (L < SL) || ((L - SL) % 2 == 1)) + { + continue; + } + + //prefac = (i)^{lphi - lbeta - l} + //R0-R1 ==> + double i_exp = pow(-1.0, (L1 - L0 - L) / 2); + double rl1 = pow(distance10, L); + double Interp_Vnla = 0.0; + double Interp_Vnla_gr = 0.0; + + //this part is for both deri and not deri + if (distance10 > tiny2) + { + curr = talpha.Table_DSR[0][Tpair1][Opair1][L]; + if (iqa >= rmesh1[nb] - 4) + { + Interp_Vnla = 0.0; + } + else + { + Interp_Vnla = i_exp * (x123a * curr[iqa] + + x120a * curr[iqa + 3] + + x032a * curr[iqa + 1] + - x031a * curr[iqa + 2]); + } + Interp_Vnla /= rl1; + } + else + { + Interp_Vnla = i_exp * talpha.Table_DSR[0][Tpair1][Opair1][L][0]; + } + + //this part is for deri only + if(job==1) + { + if (distance10 > tiny2) + { + curr = talpha.Table_DSR[1][Tpair1][Opair1][L]; + + if (iqa >= rmesh1[nb] - 4) + { + Interp_Vnla_gr = 0.0; + } + else + { + Interp_Vnla_gr = i_exp * (x123a * curr[iqa] + + x120a * curr[iqa + 3] + + x032a * curr[iqa + 1] + - x031a * curr[iqa + 2]); + } + Interp_Vnla_gr = Interp_Vnla_gr / pow(distance10, L) - Interp_Vnla * L / distance10; + } + else + { + Interp_Vnla_gr = 0.0; + } + + ///////////////////////////////////// + /// Overlap value = S_from_table * G * Ylm + //////////////////////////////////// + for (int m = 0; m < 2 * L + 1; m++) + { + int gindexa = L * L + m; + //double tmpGaunt = this->MGT.Get_Gaunt_SH(L1, m1, L0, m0, L, m); + double tmpGaunt, tmpGaunt1; + if(job==1) + { + tmpGaunt = this->MGT.Gaunt_Coefficients(gindex1, gindex0, gindexa); + tmpGaunt1= this->MGT.Gaunt_Coefficients(gindex0, gindex1, gindexa); + } + else + { + tmpGaunt = this->MGT.Gaunt_Coefficients(gindex0, gindex1, gindexa); + } + const int lm = MGT.get_lm_index(L, m); + + term_a += tmpGaunt * Interp_Vnla * rlya[lm]; + if(job==1) + { + double tt1 = tmpGaunt1 * Interp_Vnla_gr * rlya[lm] / distance10; + double tt2 = tmpGaunt1 * Interp_Vnla; + + for (int ir = 0; ir < 3; ir++) + { + term_a_gr[ir] += tt1 * unit_vec_dRa[ir] + tt2 * grlya[lm][ir]; + } + } + } + } + }//end L + + //=============================================== + // THIRD PART: SAVE THE VALUE FOR ALL PROJECTS. + //=============================================== + + if(job==0) + { + nlm[0][ip] = term_a; + } + else if(job==1) + { + nlm[0][ip] = term_a; + for(int dim=1;dim<4;dim++) + { + nlm[dim][ip] = term_a_gr[dim-1]; + } + } + + ip+=1; + }//end m0 + }//end N0 + }//end L0 +} //caoyu add 2021-08-30 void ORB_gen_tables::snap_psialpha( double nlm[], diff --git a/source/module_orbital/ORB_gen_tables.h b/source/module_orbital/ORB_gen_tables.h index 91a6a50c3c..6764fef7d9 100644 --- a/source/module_orbital/ORB_gen_tables.h +++ b/source/module_orbital/ORB_gen_tables.h @@ -93,7 +93,21 @@ class ORB_gen_tables const bool &calc_deri)const; // mohan add 2021-04-25); /// set as public because in hamilt_linear, #ifdef __DEEPKS - void snap_psialpha( + void snap_psialpha_half( + std::vector> &nlm, + const int& job, + const ModuleBase::Vector3& R1, + const int& T1, + const int& L1, + const int& m1, + const int& N1, + const ModuleBase::Vector3& R0, // The projector. + const int& T0, + const int& I0, + ModuleBase::IntArray* inl_index + ) const; + + void snap_psialpha( double nlm[], const int& job, const ModuleBase::Vector3& R1, diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index 6f9e7d5a60..8948b258d0 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -808,8 +808,8 @@ void LCAO_Descriptor::deepks_pre_scf(const string& model_file) //initialize the H matrix H_V_delta delete[] this->H_V_delta; - this->H_V_delta = new double[GlobalV::NLOCAL * GlobalV::NLOCAL]; - ModuleBase::GlobalFunc::ZEROS(this->H_V_delta, GlobalV::NLOCAL * GlobalV::NLOCAL); + this->H_V_delta = new double[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta, GlobalC::ParaO.nloc); //init gedm** const int pdm_size = (this->lmaxd * 2 + 1) * (this->lmaxd * 2 + 1); @@ -898,6 +898,179 @@ void LCAO_Descriptor::cal_v_delta(const ModuleBase::matrix& dm) return; } +void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) +{ + ModuleBase::TITLE("LCAO_Descriptor", "build_v_delta_alpha_new"); + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta,GlobalC::ParaO.nloc); //init before calculate + + const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); + //same for all types of atoms + int job; + if(!calc_deri) + { + job=0; + } + else + { + job=1; + } + + for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) + { + Atom* atom0 = &GlobalC::ucell.atoms[T0]; + for (int I0 =0; I0< atom0->na; I0++) + { + //======================================================= + //Step1: + //saves , where beta runs over L0,M0 on atom I0 + //and psi runs over atomic basis sets on the current core + //======================================================= + std::vector>> nlm_tot; + + //GlobalC::GridD.Find_atom( atom0->tau[I0] ); + const ModuleBase::Vector3 tau0 = atom0->tau[I0]; + GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); + + //outermost loop : all adjacent atoms + nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); + + for (int ad=0; ad tau1 = GlobalC::GridD.getAdjacentTau(ad); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + + //middle loop : atomic basis on current processor (either row or column) + nlm_tot[ad].clear(); + + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + if (dist1 > Rcut_Alpha + Rcut_AO1) + { + continue; + } + + for (int iw1=0; iw1> 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_psialpha_half( + nlm, job, tau1, T1, + atom1->iw2l[ iw1_0 ], // L1 + atom1->iw2m[ iw1_0 ], // m1 + atom1->iw2n[ iw1_0 ], // N1 + GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 + + nlm_tot[ad].insert({iw1_all,nlm[0]}); + }//end iw + }//end ad + //======================================================= + //Step2: + //calculate sum_(L0,M0) alpha + //and accumulate the value to Hloc_fixed(i,j) + //======================================================= + + for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); + + for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) + { + const int T2 = GlobalC::GridD.getType(ad2); + const int I2 = GlobalC::GridD.getNatom(ad2); + const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); + const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); + const Atom* atom2 = &GlobalC::ucell.atoms[T2]; + const int nw2_tot = atom2->nw*GlobalV::NPOL; + + const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1 + || dist2 > Rcut_Alpha + Rcut_AO2) + { + continue; + } + + for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all]; + std::vector nlm2 = nlm_tot[ad2][iw2_all]; + + assert(nlm1.size()==nlm2.size()); + + if(calc_deri) + { + + } + else + { + double nlm=0.0; + int ib = 0; + + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m01 = 0;m01 < 2 * L0 + 1;++m01) + { + for (int m02 = 0; m02 < 2 * L0 + 1; ++m02) + { + nlm += this->gedm[inl][m01*nm+m02] * nlm1[ib+m01] * nlm2[ib+m02]; + } + } + ib+=(2*L0+1); + } + } + int index = iw2_local * GlobalC::ParaO.nrow+ iw1_local; //for genelpa + this->H_V_delta[index] += nlm; + + assert(ib==nlm1.size()); + } + }//iw2 + }//iw1 + }//ad2 + }//ad1 + }//end I0 + }//end T0 + + ModuleBase::timer::tick ("LCAO_gen_fixedH","build_Nonlocal_alpha_new"); + return; + +} + //for GAMMA_ONLY, search adjacent atoms from I0 void LCAO_Descriptor::build_v_delta_alpha(const bool& calc_deri) { @@ -973,8 +1146,7 @@ void LCAO_Descriptor::build_v_delta_alpha(const bool& calc_deri) GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index, this->gedm); - //GlobalC::LM.set_HSgamma(iw1_all, iw2_all, nlm[0], 'L'); - int index = iw2_all * GlobalV::NLOCAL + iw1_all; //for genelpa + int index=iw2_local*GlobalC::ParaO.nrow+iw1_local; this->H_V_delta[index] += nlm[0]; } else // calculate force @@ -1238,7 +1410,11 @@ void LCAO_Descriptor::add_v_delta(void) { continue; } - GlobalC::LM.set_HSgamma(iw1, iw2, this->H_V_delta[iw1 * GlobalV::NLOCAL + iw2], 'L'); + + int iw1_local=GlobalC::ParaO.trace_loc_row[iw1]; + int iw2_local=GlobalC::ParaO.trace_loc_col[iw2]; + int index=iw2_local*GlobalC::ParaO.nrow+iw1_local; + GlobalC::LM.set_HSgamma(iw1, iw2, this->H_V_delta[index], 'L'); } } } @@ -1866,12 +2042,13 @@ void LCAO_Descriptor::cal_e_delta_band(const std::vector &dm { const int mu = GlobalC::ParaO.trace_loc_row[j]; const int nu = GlobalC::ParaO.trace_loc_col[i]; + if (mu >= 0 && nu >= 0) { - const int index = mu * GlobalC::ParaO.ncol + nu; + const int index=nu*GlobalC::ParaO.nrow+mu; for (int is = 0; is < GlobalV::NSPIN; ++is) { - this->e_delta_band += dm[is](nu, mu) * this->H_V_delta[i * GlobalV::NLOCAL + j]; + this->e_delta_band += dm[is](nu, mu) * this->H_V_delta[index]; } } } diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index b93ebec9ce..50e747125d 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -74,6 +74,7 @@ class LCAO_Descriptor ///calculate \f$\sum_{I}\sum_{nlmm'}\langle\phi_\mu|\alpha^I_{nlm}\rangle{\frac{dE}{dD^I_{nlmm'}}}\langle\alpha^I_{nlm'}|\phi_\nu\rangle\f$ (for gamma_only) void build_v_delta_alpha(const bool& cal_deri/**< [in] 0 for 3-center intergration, 1 for its derivation*/); + void build_v_delta_alpha_new(const bool& cal_deri/**< [in] 0 for 3-center intergration, 1 for its derivation*/); ///calculate \f$\sum_{I}\sum_{nlmm'}\langle\phi_\mu|\alpha^I_{nlm}\rangle{\frac{dE}{dD^I_{nlmm'}}}\langle\alpha^I_{nlm'}|\phi_\nu\rangle\f$ (for multi-k) void build_v_delta_mu(const bool &cal_deri/**< [in] 0 for 3-center intergration, 1 for its derivation*/); diff --git a/source/src_lcao/LCAO_hamilt.cpp b/source/src_lcao/LCAO_hamilt.cpp index 8a335a7e7d..fb1ca44f54 100644 --- a/source/src_lcao/LCAO_hamilt.cpp +++ b/source/src_lcao/LCAO_hamilt.cpp @@ -116,9 +116,18 @@ void LCAO_Hamilt::calculate_Hgamma( const int &ik ) // Peize Lin add ik 2016- //ld.cal_gedm(LOC.wfc_dm_2d.dm_gamma[0]); //ld.build_v_delta_alpha(0); GlobalC::ld.cal_gedm(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); - GlobalC::ld.build_v_delta_mu(0); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + //GlobalC::ld.build_v_delta_alpha(0); + GlobalC::ld.build_v_delta_alpha_new(0); + } + else + { + + } + //GlobalC::ld.build_v_delta_mu(0); - GlobalC::ld.add_v_delta(); + //GlobalC::ld.add_v_delta(); } #endif @@ -126,7 +135,6 @@ void LCAO_Hamilt::calculate_Hgamma( const int &ik ) // Peize Lin add ik 2016- //add T+VNL+Vl matrix. GlobalC::LM.update_Hloc(); - //test if(GlobalV::NURSE) { From c4b3ff7d105c0560f32cdea8c26acdfc62329cad Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Tue, 26 Oct 2021 10:41:32 +0800 Subject: [PATCH 023/478] Fix bug of diagH_CUSOLVER. --- source/src_pw/hamilt.cu | 49 +++++++++++++++++++++++++------------- source/src_pw/hamilt.h | 1 + source/src_pw/hamilt_pw.cu | 44 ++++++++-------------------------- 3 files changed, 44 insertions(+), 50 deletions(-) diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index 96e06555df..5634343afb 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -5,8 +5,18 @@ #include "diago_cg.cuh" #include "cufft.h" -Hamilt::Hamilt() {} -Hamilt::~Hamilt() {} +Hamilt::Hamilt() +{ +#ifdef __CUDA + CHECK_CUSOLVER(cusolverDnCreate(&cusolver_handle)); +#endif +} +Hamilt::~Hamilt() +{ +#ifdef __CUDA + CHECK_CUSOLVER(cusolverDnDestroy(cusolver_handle)); +#endif +} // in tools.h @@ -149,8 +159,6 @@ void Hamilt::diagH_pw( avg_iter += 1.0; } - // cout<<"end subspace"< f_cg_cuda; Diago_CG_CUDA d_cg_cuda; @@ -401,6 +409,7 @@ void Hamilt::diagH_LAPACK( ModuleBase::TITLE("Hamilt","diagH_LAPACK"); ModuleBase::timer::tick("Hamilt","diagH_LAPACK"); + // Print info ... // cout<<"in diagH_lapack"< *aux=new std::complex [dmax*nstart]; - std::complex *paux = aux; - std::complex *ppsi = psi.c; + // std::complex *paux = aux; + // std::complex *ppsi = psi.c; //qianrui replace it this->h_psi(psi.c, aux, nstart); @@ -514,7 +490,7 @@ void Hamilt_PW::diagH_subspace_cuda( double2* aux; CHECK_CUDA(cudaMalloc((void**)&aux, dmax*nstart*sizeof(double2))); - double2* paux = aux; + // double2* paux = aux; // const double2* ppsi = psi_c; // ? //qianrui replace it @@ -553,6 +529,8 @@ void Hamilt_PW::diagH_subspace_cuda( // after generation of H and S matrix, diag them + // Method1 : Do with diagH_LAPACK + ModuleBase::ComplexMatrix h_hc(nstart, nstart); ModuleBase::ComplexMatrix h_sc(nstart, nstart); ModuleBase::ComplexMatrix h_hvec(nstart,n_band); @@ -561,17 +539,14 @@ void Hamilt_PW::diagH_subspace_cuda( CHECK_CUDA(cudaMemcpy(h_hc.c, hc, nstart*nstart*sizeof(double2), cudaMemcpyDeviceToHost)); CHECK_CUDA(cudaMemcpy(h_sc.c, sc, nstart*nstart*sizeof(double2), cudaMemcpyDeviceToHost)); - // CHECK_CUDA(cudaMemcpy(h_hvec.c, hvec, nstart*n_band*sizeof(double2), cudaMemcpyDeviceToHost)); - // cout<<"hello? begin lapack"<(evctmp, 15); for(int ib=0; ib *psi_in, std::complex *hpsi, const int m) { ModuleBase::timer::tick("Hamilt_PW","h_psi_cpu"); - int i = 0; + // int i = 0; int j = 0; int ig= 0; From ff4699bcf49b82e484beaad6bf437112665b6330 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 27 Oct 2021 19:53:15 +0800 Subject: [PATCH 024/478] deepks parallelization : gamma point, energy and force --- source/Makefile.Objects | 2 + source/module_orbital/ORB_gen_tables.cpp | 48 ++- source/src_lcao/CMakeLists.txt | 2 + source/src_lcao/FORCE_STRESS.cpp | 2 +- source/src_lcao/FORCE_gamma.cpp | 5 +- source/src_lcao/LCAO_descriptor.cpp | 427 ++--------------------- source/src_lcao/LCAO_descriptor.h | 1 + source/src_lcao/LCAO_descriptor_new.cpp | 400 +++++++++++++++++++++ source/src_lcao/LCAO_descriptor_old.cpp | 189 ++++++++++ source/src_lcao/LCAO_hamilt.cpp | 8 +- 10 files changed, 655 insertions(+), 429 deletions(-) create mode 100644 source/src_lcao/LCAO_descriptor_new.cpp create mode 100644 source/src_lcao/LCAO_descriptor_old.cpp diff --git a/source/Makefile.Objects b/source/Makefile.Objects index 303f9dbd0e..44f062de7d 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -164,6 +164,8 @@ LCAO_nnr.o \ LCAO_diago.o\ LCAO_evolve.o\ LCAO_descriptor.o\ +LCAO_descriptor_old.o\ +LCAO_descriptor_new.o\ ylm.o\ FORCE_STRESS.o\ FORCE_gamma.o\ diff --git a/source/module_orbital/ORB_gen_tables.cpp b/source/module_orbital/ORB_gen_tables.cpp index fa7eb40141..1e2d269c9b 100644 --- a/source/module_orbital/ORB_gen_tables.cpp +++ b/source/module_orbital/ORB_gen_tables.cpp @@ -1503,36 +1503,34 @@ void ORB_gen_tables::snap_psialpha_half( { Interp_Vnla_gr = 0.0; } - + } ///////////////////////////////////// /// Overlap value = S_from_table * G * Ylm //////////////////////////////////// - for (int m = 0; m < 2 * L + 1; m++) + for (int m = 0; m < 2 * L + 1; m++) + { + int gindexa = L * L + m; + //double tmpGaunt = this->MGT.Get_Gaunt_SH(L1, m1, L0, m0, L, m); + double tmpGaunt, tmpGaunt1; + if(job==1) { - int gindexa = L * L + m; - //double tmpGaunt = this->MGT.Get_Gaunt_SH(L1, m1, L0, m0, L, m); - double tmpGaunt, tmpGaunt1; - if(job==1) - { - tmpGaunt = this->MGT.Gaunt_Coefficients(gindex1, gindex0, gindexa); - tmpGaunt1= this->MGT.Gaunt_Coefficients(gindex0, gindex1, gindexa); - } - else - { - tmpGaunt = this->MGT.Gaunt_Coefficients(gindex0, gindex1, gindexa); - } - const int lm = MGT.get_lm_index(L, m); - - term_a += tmpGaunt * Interp_Vnla * rlya[lm]; - if(job==1) + tmpGaunt = this->MGT.Gaunt_Coefficients(gindex1, gindex0, gindexa); + tmpGaunt1= this->MGT.Gaunt_Coefficients(gindex0, gindex1, gindexa); + } + else + { + tmpGaunt = this->MGT.Gaunt_Coefficients(gindex0, gindex1, gindexa); + } + const int lm = MGT.get_lm_index(L, m); + + term_a += tmpGaunt * Interp_Vnla * rlya[lm]; + if(job==1) + { + double tt1 = tmpGaunt1 * Interp_Vnla_gr * rlya[lm] / distance10; + double tt2 = tmpGaunt1 * Interp_Vnla; + for (int ir = 0; ir < 3; ir++) { - double tt1 = tmpGaunt1 * Interp_Vnla_gr * rlya[lm] / distance10; - double tt2 = tmpGaunt1 * Interp_Vnla; - - for (int ir = 0; ir < 3; ir++) - { - term_a_gr[ir] += tt1 * unit_vec_dRa[ir] + tt2 * grlya[lm][ir]; - } + term_a_gr[ir] += tt1 * unit_vec_dRa[ir] + tt2 * grlya[lm][ir]; } } } diff --git a/source/src_lcao/CMakeLists.txt b/source/src_lcao/CMakeLists.txt index 84d3ba5ea2..ec2fab15a7 100644 --- a/source/src_lcao/CMakeLists.txt +++ b/source/src_lcao/CMakeLists.txt @@ -63,4 +63,6 @@ add_library( if(ENABLE_DEEPKS) target_sources(lcao PRIVATE LCAO_descriptor.cpp) + target_sources(lcao PRIVATE LCAO_descriptor_new.cpp) + target_sources(lcao PRIVATE LCAO_descriptor_old.cpp) endif() diff --git a/source/src_lcao/FORCE_STRESS.cpp b/source/src_lcao/FORCE_STRESS.cpp index 295472c072..8f887b6003 100644 --- a/source/src_lcao/FORCE_STRESS.cpp +++ b/source/src_lcao/FORCE_STRESS.cpp @@ -294,7 +294,7 @@ void Force_Stress_LCAO::getForceStress( #ifdef __DEEPKS //DeePKS force, caoyu add 2021-06-03 - if (GlobalV::out_descriptor) + if (GlobalV::out_descriptor && GlobalV::NPROC<=1) //not parallelized yet { GlobalC::ld.save_npy_f(fcs, "f_tot.npy"); //Ty/Bohr, F_tot if (GlobalV::deepks_scf) diff --git a/source/src_lcao/FORCE_gamma.cpp b/source/src_lcao/FORCE_gamma.cpp index 4ad95fe530..e4b321f678 100644 --- a/source/src_lcao/FORCE_gamma.cpp +++ b/source/src_lcao/FORCE_gamma.cpp @@ -83,11 +83,14 @@ void Force_LCAO_gamma::ftable_gamma ( //=======method 2: snap_psialpha======== GlobalC::ld.cal_gedm(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); - GlobalC::ld.cal_f_delta_hf(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); + GlobalC::ld.cal_f_delta_hf_new(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); //ld.print_F_delta("F_delta_hf.dat"); GlobalC::ld.cal_f_delta_pulay(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); //ld.print_F_delta("F_delta_pulay.dat"); GlobalC::ld.print_F_delta("F_delta.dat"); +#ifdef __MPI + Parallel_Reduce::reduce_double_all(GlobalC::ld.F_delta.c,GlobalC::ld.F_delta.nr*GlobalC::ld.F_delta.nc); +#endif } #endif diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index 8948b258d0..a227fb267a 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -140,7 +140,6 @@ void LCAO_Descriptor::init( return; } - void LCAO_Descriptor::init_index(void) { delete[] this->alpha_index; @@ -195,7 +194,6 @@ void LCAO_Descriptor::init_index(void) return; } - void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) { ModuleBase::TITLE("LCAO_Descriptor", "build_S_descriptor"); @@ -303,7 +301,6 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) return; } - void LCAO_Descriptor::set_S_mu_alpha( const int &iw1_all, const int &inl, @@ -331,36 +328,15 @@ void LCAO_Descriptor::set_S_mu_alpha( -// compute the full projected density matrix for each atom -// save the matrix for each atom in order to minimize the usage of memory -// --mohan 2021-08-04 -void LCAO_Descriptor::cal_dm_as_descriptor(const ModuleBase::matrix &dm) -{ - ModuleBase::TITLE("LCAO_Descriptor", "cal_proj_dm"); - - for(int it=0; itlmaxd * 2 + 1) * (this->lmaxd * 2 + 1); -#ifdef __MPI if(GlobalV::NPROC>1) { +#ifdef __MPI //This is for first SCF iteration, when density matrix is not available yet if(dm.nr == 0 && dm.nc ==0) { @@ -448,8 +424,9 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) //step 3 : gather from all ranks GlobalC::ParaD.allsum_deepks(this->inlmax,pdm_size,this->pdm); +#endif } - else + else //serial; or mpi with nproc=1 { //step 1: get dm: the coefficient of wfc, not charge density //now, dm is an input arg of this func, but needed converting to double* @@ -482,38 +459,6 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) } delete[] tmp_pdm; } -#else - //step 1: get dm: the coefficient of wfc, not charge density - //now, dm is an input arg of this func, but needed converting to double* - this->getdm_double(dm); - - //step 2: get S_alpha_mu and S_nu_beta - double **ss = this->S_mu_alpha; - - //step 3 : multiply: cal ST*DM*S - - //init tmp_pdm* - const int tmp_pdm_size = GlobalV::NLOCAL * (lmaxd*2+1); - double* tmp_pdm = new double[tmp_pdm_size]; - ModuleBase::GlobalFunc::ZEROS(tmp_pdm, tmp_pdm_size); - for (int inl = 0;inl < inlmax;inl++) - { - int nm = 2 * inl_l[inl] + 1; //1,3,5,... - const char t = 'T'; //transpose - const char nt = 'N'; //non transpose - const double alpha = 1; - const double beta = 0; - double *a = this->dm_double; - double *b = ss[inl]; - double *c = tmp_pdm; - dgemm_(&nt, &nt, &GlobalV::NLOCAL, &nm, &GlobalV::NLOCAL, &alpha, a, &GlobalV::NLOCAL, b, &GlobalV::NLOCAL, &beta, c, &GlobalV::NLOCAL); //DM*S - a = ss[inl]; - b = c; - c = this->pdm[inl]; - dgemm_(&t, &nt, &nm, &nm, &GlobalV::NLOCAL, &alpha, a, &GlobalV::NLOCAL, b, &GlobalV::NLOCAL, &beta, c, &nm); //ST*DM*S - } - delete[] tmp_pdm; -#endif ModuleBase::timer::tick("LCAO_Descriptor","cal_projected_DM"); return; @@ -840,237 +785,16 @@ void LCAO_Descriptor::deepks_pre_scf(const string& model_file) delete[] DH_V_delta_x; delete[] DH_V_delta_y; delete[] DH_V_delta_z; - this->DH_V_delta_x = new double[GlobalV::NLOCAL * GlobalV::NLOCAL]; - this->DH_V_delta_y = new double [GlobalV::NLOCAL * GlobalV::NLOCAL]; - this->DH_V_delta_z = new double[GlobalV::NLOCAL * GlobalV::NLOCAL]; - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalV::NLOCAL * GlobalV::NLOCAL); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalV::NLOCAL * GlobalV::NLOCAL); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalV::NLOCAL * GlobalV::NLOCAL); - } - return; -} - - -void LCAO_Descriptor::cal_v_delta(const ModuleBase::matrix& dm) -{ - ModuleBase::TITLE("LCAO_Descriptor", "cal_v_delta"); - //1. (dE/dD) (descriptor changes in every scf iter) - this->cal_gedm(dm); - - //2. multiply overlap matrice and sum - double* tmp_v1 = new double[(2 * lmaxd + 1) * GlobalV::NLOCAL]; - double* tmp_v2 = new double[GlobalV::NLOCAL *GlobalV::NLOCAL]; - - ModuleBase::GlobalFunc::ZEROS(this->H_V_delta, GlobalV::NLOCAL * GlobalV::NLOCAL); //init before calculate - - for (int inl = 0;inl < inlmax;inl++) - { - ModuleBase::GlobalFunc::ZEROS(tmp_v1, (2 * lmaxd + 1) * GlobalV::NLOCAL); - ModuleBase::GlobalFunc::ZEROS(tmp_v2, GlobalV::NLOCAL * GlobalV::NLOCAL); - int nm = 2 * inl_l[inl] + 1; //1,3,5,... - const char t = 'T'; //transpose - const char nt = 'N'; //non transpose - const double alpha = 1; - const double beta = 0; - double* a = this->gedm[inl];//[nm][nm] - double* b = S_mu_alpha[inl];//[GlobalV::NLOCAL][nm]--trans->[nm][GlobalV::NLOCAL] - double* c = tmp_v1; - - //2.1 (dE/dD)* - dgemm_(&nt, &t, &nm, &GlobalV::NLOCAL, &nm, &alpha, a, &nm, b, &GlobalV::NLOCAL, &beta, c, &nm); - - //2.2 *(dE/dD)* - a = b; //[GlobalV::NLOCAL][nm] - b = c;//[nm][GlobalV::NLOCAL] - c = tmp_v2;//[GlobalV::NLOCAL][GlobalV::NLOCAL] - dgemm_(&nt, &nt, &GlobalV::NLOCAL, &GlobalV::NLOCAL, &nm, &alpha, a, &GlobalV::NLOCAL, b, &nm, &beta, c, &GlobalV::NLOCAL); - - //3. sum of Inl - for (int i = 0;i < GlobalV::NLOCAL * GlobalV::NLOCAL;++i) - { - this->H_V_delta[i] += c[i]; - } + this->DH_V_delta_x = new double[GlobalC::ParaO.nloc]; + this->DH_V_delta_y = new double [GlobalC::ParaO.nloc]; + this->DH_V_delta_z = new double[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); } - delete[] tmp_v1; - delete[] tmp_v2; - - GlobalV::ofs_running << " Finish calculating H_V_delta" << std::endl; return; } -void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) -{ - ModuleBase::TITLE("LCAO_Descriptor", "build_v_delta_alpha_new"); - ModuleBase::GlobalFunc::ZEROS(this->H_V_delta,GlobalC::ParaO.nloc); //init before calculate - - const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); - //same for all types of atoms - int job; - if(!calc_deri) - { - job=0; - } - else - { - job=1; - } - - for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) - { - Atom* atom0 = &GlobalC::ucell.atoms[T0]; - for (int I0 =0; I0< atom0->na; I0++) - { - //======================================================= - //Step1: - //saves , where beta runs over L0,M0 on atom I0 - //and psi runs over atomic basis sets on the current core - //======================================================= - std::vector>> nlm_tot; - - //GlobalC::GridD.Find_atom( atom0->tau[I0] ); - const ModuleBase::Vector3 tau0 = atom0->tau[I0]; - GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); - - //outermost loop : all adjacent atoms - nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); - - for (int ad=0; ad tau1 = GlobalC::GridD.getAdjacentTau(ad); - const Atom* atom1 = &GlobalC::ucell.atoms[T1]; - const int nw1_tot = atom1->nw*GlobalV::NPOL; - - //middle loop : atomic basis on current processor (either row or column) - nlm_tot[ad].clear(); - - const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; - if (dist1 > Rcut_Alpha + Rcut_AO1) - { - continue; - } - - for (int iw1=0; iw1> 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_psialpha_half( - nlm, job, tau1, T1, - atom1->iw2l[ iw1_0 ], // L1 - atom1->iw2m[ iw1_0 ], // m1 - atom1->iw2n[ iw1_0 ], // N1 - GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 - - nlm_tot[ad].insert({iw1_all,nlm[0]}); - }//end iw - }//end ad - //======================================================= - //Step2: - //calculate sum_(L0,M0) alpha - //and accumulate the value to Hloc_fixed(i,j) - //======================================================= - - for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); - const Atom* atom1 = &GlobalC::ucell.atoms[T1]; - const int nw1_tot = atom1->nw*GlobalV::NPOL; - const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); - - for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) - { - const int T2 = GlobalC::GridD.getType(ad2); - const int I2 = GlobalC::GridD.getNatom(ad2); - const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); - const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); - const Atom* atom2 = &GlobalC::ucell.atoms[T2]; - const int nw2_tot = atom2->nw*GlobalV::NPOL; - - const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); - const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; - const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; - - if (dist1 > Rcut_Alpha + Rcut_AO1 - || dist2 > Rcut_Alpha + Rcut_AO2) - { - continue; - } - - for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all]; - std::vector nlm2 = nlm_tot[ad2][iw2_all]; - - assert(nlm1.size()==nlm2.size()); - - if(calc_deri) - { - - } - else - { - double nlm=0.0; - int ib = 0; - - for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) - { - for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) - { - const int inl = this->inl_index[T0](I0, L0, N0); - const int nm = 2*L0+1; - for (int m01 = 0;m01 < 2 * L0 + 1;++m01) - { - for (int m02 = 0; m02 < 2 * L0 + 1; ++m02) - { - nlm += this->gedm[inl][m01*nm+m02] * nlm1[ib+m01] * nlm2[ib+m02]; - } - } - ib+=(2*L0+1); - } - } - int index = iw2_local * GlobalC::ParaO.nrow+ iw1_local; //for genelpa - this->H_V_delta[index] += nlm; - - assert(ib==nlm1.size()); - } - }//iw2 - }//iw1 - }//ad2 - }//ad1 - }//end I0 - }//end T0 - - ModuleBase::timer::tick ("LCAO_gen_fixedH","build_Nonlocal_alpha_new"); - return; - -} - //for GAMMA_ONLY, search adjacent atoms from I0 void LCAO_Descriptor::build_v_delta_alpha(const bool& calc_deri) { @@ -1179,6 +903,15 @@ void LCAO_Descriptor::build_v_delta_alpha(const bool& calc_deri) }//end ad1 }//end I0 }//end T0 + + for(int iw1=0;iw1H_V_delta[index], 'L'); } } @@ -1426,112 +1159,6 @@ void LCAO_Descriptor::add_v_delta(void) return; } - -void LCAO_Descriptor::cal_f_delta(const ModuleBase::matrix &dm) -{ - ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta"); - this->F_delta.zero_out(); - //1. cal gedm - this->cal_gedm(dm); - - //2. cal gdmx - this->init_gdmx(); - this->cal_gdmx(dm); - - //3.multiply and sum for each atom - //3.1 Pulay term - // \sum_{Inl}\sum_{mm'} _{mm'} - //notice: sum of multiplied corresponding element(mm') , not matrix multiplication ! - int iat = 0; //check if the index same as GlobalC::ucell.iw2iat or not !! - for (int it = 0;it < GlobalC::ucell.ntype;++it) - { - for (int ia = 0;ia < GlobalC::ucell.atoms[it].na;++ia) - { - for (int inl = 0;inl < this->inlmax;++inl) - { - int nm = 2 * inl_l[inl] + 1; - for (int m1 = 0;m1 < nm;++m1) - { - for (int m2 = 0; m2 < nm;++m2) - { - this->F_delta(iat, 0) += this->gedm[inl][m1 * nm + m2] * gdmx[iat][inl][m1 * nm + m2]; - this->F_delta(iat, 1) += this->gedm[inl][m1 * nm + m2] * gdmy[iat][inl][m1 * nm + m2]; - this->F_delta(iat, 2) += this->gedm[inl][m1 * nm + m2] * gdmz[iat][inl][m1 * nm + m2]; - } - } - }//end inl - ++iat; - } - } - this->print_F_delta("F_delta_pulay_old.dat"); - this->F_delta.zero_out(); - iat = 0; - for (int it = 0;it < GlobalC::ucell.ntype;++it) - { - for (int ia = 0;ia < GlobalC::ucell.atoms[it].na;++ia) - { - //3.2 HF term - double** ss = this->S_mu_alpha; - double** dsx = this->DS_mu_alpha_x; - double** dsy = this->DS_mu_alpha_y; - double** dsz = this->DS_mu_alpha_z; - for (int mu = 0;mu < GlobalV::NLOCAL;++mu) - { - for (int nu = 0;nu < GlobalV::NLOCAL;++nu) - { - for (int l = 0;l <= GlobalC::ORB.Alpha[0].getLmax();++l) - { - for (int n = 0;n < GlobalC::ORB.Alpha[0].getNchi(l);++n) - { - for (int m1 = 0;m1 < 2 * l + 1;++m1) - { - for (int m2 = 0;m2 < 2 * l + 1;++m2) - { - if (GlobalV::KS_SOLVER == "genelpa" || GlobalV::KS_SOLVER == "scalapack_gvx") - { - this->F_delta(iat, 0) -= 2*dm(mu, nu) * dsx[inl_index[it](ia, l, n)][m1 * GlobalV::NLOCAL + mu] - * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][m2 * GlobalV::NLOCAL + nu]; - this->F_delta(iat, 1) -= 2*dm(mu, nu) * dsy[inl_index[it](ia, l, n)][m1 * GlobalV::NLOCAL + mu] - * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][m2 * GlobalV::NLOCAL + nu]; - this->F_delta(iat, 2) -= 2*dm(mu, nu) * dsz[inl_index[it](ia, l, n)][m1 * GlobalV::NLOCAL + mu] - * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][m2 * GlobalV::NLOCAL + nu]; - } - else - { - this->F_delta(iat, 0) -= 2*dm(mu, nu) * dsx[inl_index[it](ia, l, n)][mu* (2*l+1) + m1] - * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][nu* (2*l+1) + m2]; - this->F_delta(iat, 1) -= 2*dm(mu, nu) * dsy[inl_index[it](ia, l, n)][mu* (2*l+1) + m1] - * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][nu* (2*l+1) + m2]; - this->F_delta(iat, 2) -= 2*dm(mu, nu) * dsz[inl_index[it](ia, l, n)][mu* (2*l+1) + m1] - * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][nu* (2*l+1) + m2]; - } - }//end m2 - }//end m1 - }//end n - }//end l - }//end nu - }//end mu - ++iat; - }//end ia - }//end it - this->print_F_delta("F_delta_hf_old.dat"); - //3.3 Overlap term - //somthing in NN, which not included in Hamiltonian - /* - for (int mu = 0;mu < GlobalV::NLOCAL;++mu) - { - const int iat = GlobalC::ucell.iwt2iat[mu]; - for (int nu = 0;nu < GlobalV::NLOCAL;++nu) - { - this->F_delta(iat, 0) += 2*(this->E_delta - this->e_delta_band)* dm(mu, nu) * GlobalC::LM.DSloc_x[mu * GlobalV::NLOCAL + nu]; - this->F_delta(iat, 1) += 2*(this->E_delta - this->e_delta_band) * dm(mu, nu) * GlobalC::LM.DSloc_y[mu * GlobalV::NLOCAL + nu]; - this->F_delta(iat, 2) += 2*(this->E_delta - this->e_delta_band) * dm(mu, nu) * GlobalC::LM.DSloc_z[mu * GlobalV::NLOCAL + nu]; - } - }*/ - this->del_gdmx(); - return; -} - void LCAO_Descriptor::cal_f_delta_hf(const ModuleBase::matrix& dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf"); @@ -1625,7 +1252,7 @@ void LCAO_Descriptor::cal_f_delta_pulay(const ModuleBase::matrix& dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_pulay"); //this->F_delta.zero_out(); - this->build_v_delta_alpha(1); + this->build_v_delta_alpha_new(1); //this->build_v_delta_mu(1); //, if multi-k for (int i = 0;i < GlobalV::NLOCAL;++i) //col, diff { @@ -1637,14 +1264,15 @@ void LCAO_Descriptor::cal_f_delta_pulay(const ModuleBase::matrix& dm) if (mu >= 0 && nu >= 0) { const int index = mu * GlobalC::ParaO.ncol + nu; - this->F_delta(iat, 0) += 2 * dm(mu, nu) * this->DH_V_delta_x[index]; - this->F_delta(iat, 1) += 2 * dm(mu, nu) * this->DH_V_delta_y[index]; - this->F_delta(iat, 2) += 2 * dm(mu, nu) * this->DH_V_delta_z[index]; + this->F_delta(iat, 0) += 2 * dm(nu, mu) * this->DH_V_delta_x[index]; + this->F_delta(iat, 1) += 2 * dm(nu, mu) * this->DH_V_delta_y[index]; + this->F_delta(iat, 2) += 2 * dm(nu, mu) * this->DH_V_delta_z[index]; } } } return; } + void LCAO_Descriptor::cal_descriptor_tensor(void) { ModuleBase::TITLE("LCAO_Descriptor", "cal_descriptor_tensor"); @@ -1707,7 +1335,6 @@ void LCAO_Descriptor::load_model(const string& model_file) return; } - void LCAO_Descriptor::cal_gedm(const ModuleBase::matrix &dm) { //using this->pdm_tensor @@ -2053,9 +1680,9 @@ void LCAO_Descriptor::cal_e_delta_band(const std::vector &dm } } } + Parallel_Reduce::reduce_double_all(this->e_delta_band); return; } -#endif void LCAO_Descriptor::cal_gvx(const ModuleBase::matrix &dm) { @@ -2123,4 +1750,6 @@ void LCAO_Descriptor::cal_gvx(const ModuleBase::matrix &dm) assert(this->gvx_tensor.size(3) == this->des_per_atom); return; -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 50e747125d..64f4e87e8a 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -87,6 +87,7 @@ class LCAO_Descriptor ///compute Hellmann-Feynman term of the force contribution of \f$E_\delta\f$ void cal_f_delta_hf(const ModuleBase::matrix& dm/**< [in] density matrix*/); + void cal_f_delta_hf_new(const ModuleBase::matrix& dm/**< [in] density matrix*/); ///compute Pulay term of the force contribution of \f$E_\delta\f$ void cal_f_delta_pulay(const ModuleBase::matrix& dm/**< [in] density matrix*/); diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp new file mode 100644 index 0000000000..fa438d9c91 --- /dev/null +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -0,0 +1,400 @@ +//wenfei add 2021 october +#ifdef __DEEPKS + +#include "LCAO_descriptor.h" +#include "LCAO_matrix.h" +#include "../module_base/lapack_connector.h" +#include "../module_base/intarray.h" +#include "../module_base/complexmatrix.h" +#include "global_fp.h" +#include "../src_pw/global.h" +#include "../src_io/winput.h" + +#include +#include +#include +#include + +void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) +{ + ModuleBase::TITLE("LCAO_Descriptor", "build_v_delta_alpha_new"); + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta,GlobalC::ParaO.nloc); //init before calculate + + const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); + //same for all types of atoms + int job; + if(!calc_deri) + { + job=0; + } + else + { + job=1; + } + + for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) + { + Atom* atom0 = &GlobalC::ucell.atoms[T0]; + for (int I0 =0; I0< atom0->na; I0++) + { + //======================================================= + //Step1: + //saves , where beta runs over L0,M0 on atom I0 + //and psi runs over atomic basis sets on the current core + //======================================================= + std::vector>>> nlm_tot; + + //GlobalC::GridD.Find_atom( atom0->tau[I0] ); + const ModuleBase::Vector3 tau0 = atom0->tau[I0]; + GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); + + //outermost loop : all adjacent atoms + nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); + + for (int ad=0; ad tau1 = GlobalC::GridD.getAdjacentTau(ad); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + + //middle loop : atomic basis on current processor (either row or column) + nlm_tot[ad].clear(); + + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1) + { + continue; + } + + for (int iw1=0; iw1> 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_psialpha_half( + nlm, job, tau1, T1, + atom1->iw2l[ iw1_0 ], // L1 + atom1->iw2m[ iw1_0 ], // m1 + atom1->iw2n[ iw1_0 ], // N1 + GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 + nlm_tot[ad].insert({iw1_all,nlm}); + }//end iw + }//end ad + //======================================================= + //Step2: + //calculate sum_(L0,M0) alpha + //and accumulate the value to Hloc_fixed(i,j) + //======================================================= + + for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); + + for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) + { + const int T2 = GlobalC::GridD.getType(ad2); + const int I2 = GlobalC::GridD.getNatom(ad2); + const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); + const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); + const Atom* atom2 = &GlobalC::ucell.atoms[T2]; + const int nw2_tot = atom2->nw*GlobalV::NPOL; + + const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1 + || dist2 > Rcut_Alpha + Rcut_AO2) + { + continue; + } + + for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all][0]; + std::vector> nlm2; + nlm2.resize(3); + + for(int dim=0;dim<3;dim++) + { + nlm2[dim] = nlm_tot[ad2][iw2_all][dim+1]; + } + + assert(nlm1.size()==nlm2[0].size()); + int ib=0; + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m1 = 0;m1 < 2 * L0 + 1;++m1) + { + for (int m2 = 0; m2 < 2 * L0 + 1; ++m2) + { + for(int dim=0;dim<3;dim++) + { + nlm[dim] += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[dim][ib+m2]; + } + } + } + ib+=(2*L0+1); + } + } + + assert(ib==nlm1.size()); + + int index = iw1_local * GlobalC::ParaO.ncol+ iw2_local; + this->DH_V_delta_x[index] += nlm[0]; + this->DH_V_delta_y[index] += nlm[1]; + this->DH_V_delta_z[index] += nlm[2]; + + } + else + { + std::vector nlm1 = nlm_tot[ad1][iw1_all][0]; + std::vector nlm2 = nlm_tot[ad2][iw2_all][0]; + + assert(nlm1.size()==nlm2.size()); + double nlm=0.0; + int ib = 0; + + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m01 = 0;m01 < nm;++m01) + { + for (int m02 = 0; m02 < nm; ++m02) + { + nlm += this->gedm[inl][m01*nm+m02]*nlm1[ib+m01]*nlm2[ib+m02]; + } + } + ib+=(2*L0+1); + } + } + int index = iw2_local * GlobalC::ParaO.nrow+ iw1_local; //for genelpa + this->H_V_delta[index] += nlm; + + assert(ib==nlm1.size()); + } + }//iw2 + }//iw1 + }//ad2 + }//ad1 + }//end I0 + }//end T0 +/* + for(int iw1=0;iw1F_delta.zero_out(); + + const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); + for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) + { + Atom* atom0 = &GlobalC::ucell.atoms[T0]; + for (int I0 =0; I0< atom0->na; I0++) + { + int iat = GlobalC::ucell.itia2iat(T0,I0); + const ModuleBase::Vector3 tau0 = atom0->tau[I0]; + GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); + + //======================================================= + //Step1: + //saves , where beta runs over L0,M0 on atom I0 + //and psi runs over atomic basis sets on the current core + //======================================================= + std::vector>>> nlm_tot; + + //outermost loop : all adjacent atoms + nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); + + for (int ad=0; ad tau1 = GlobalC::GridD.getAdjacentTau(ad); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + + //middle loop : atomic basis on current processor (either row or column) + nlm_tot[ad].clear(); + + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1) + { + continue; + } + + for (int iw1=0; iw1> 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_psialpha_half( + nlm, 1, tau1, T1, + atom1->iw2l[ iw1_0 ], // L1 + atom1->iw2m[ iw1_0 ], // m1 + atom1->iw2n[ iw1_0 ], // N1 + GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 + + nlm_tot[ad].insert({iw1_all,nlm}); + }//end iw + }//end ad + + //======================================================= + //Step2: + //calculate sum_(L0,M0) alpha + //and accumulate the value to Hloc_fixed(i,j) + //======================================================= + + for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); + + for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) + { + const int T2 = GlobalC::GridD.getType(ad2); + const int I2 = GlobalC::GridD.getNatom(ad2); + const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); + const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); + const Atom* atom2 = &GlobalC::ucell.atoms[T2]; + const int nw2_tot = atom2->nw*GlobalV::NPOL; + + const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1 + || dist2 > Rcut_Alpha + Rcut_AO2) + { + continue; + } + + for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all][0]; + std::vector> nlm2; + nlm2.resize(3); + + for(int dim=0;dim<3;dim++) + { + nlm2[dim] = nlm_tot[ad2][iw2_all][dim+1]; + } + + assert(nlm1.size()==nlm2[0].size()); + + int ib=0; + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m1 = 0;m1 < nm; ++m1) + { + for (int m2 = 0; m2 < nm; ++m2) + { + for(int dim=0;dim<3;dim++) + { + nlm[dim] += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[dim][ib+m2]; + } + } + } + ib+=nm; + } + } + assert(ib==nlm1.size()); + + // HF term is minus, only one projector for each atom force. + this->F_delta(iat, 0) -= 2 * dm(iw1_local, iw2_local) * nlm[0]; + this->F_delta(iat, 1) -= 2 * dm(iw1_local, iw2_local) * nlm[1]; + this->F_delta(iat, 2) -= 2 * dm(iw1_local, iw2_local) * nlm[2]; + + }//iw2 + }//iw1 + }//ad2 + }//ad1 + }//end I0 + }//end T0 +} + +#endif \ No newline at end of file diff --git a/source/src_lcao/LCAO_descriptor_old.cpp b/source/src_lcao/LCAO_descriptor_old.cpp new file mode 100644 index 0000000000..8dbbc5f9fe --- /dev/null +++ b/source/src_lcao/LCAO_descriptor_old.cpp @@ -0,0 +1,189 @@ +//keep some no longer used deepks subroutines here +#ifdef __DEEPKS + +#include "LCAO_descriptor.h" +#include "LCAO_matrix.h" +#include "../module_base/lapack_connector.h" +#include "../module_base/intarray.h" +#include "../module_base/complexmatrix.h" +#include "global_fp.h" +#include "../src_pw/global.h" +#include "../src_io/winput.h" + +#include +#include +#include +#include + +void LCAO_Descriptor::cal_v_delta(const ModuleBase::matrix& dm) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_v_delta"); + //1. (dE/dD) (descriptor changes in every scf iter) + this->cal_gedm(dm); + + //2. multiply overlap matrice and sum + double* tmp_v1 = new double[(2 * lmaxd + 1) * GlobalV::NLOCAL]; + double* tmp_v2 = new double[GlobalV::NLOCAL *GlobalV::NLOCAL]; + + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta, GlobalV::NLOCAL * GlobalV::NLOCAL); //init before calculate + + for (int inl = 0;inl < inlmax;inl++) + { + ModuleBase::GlobalFunc::ZEROS(tmp_v1, (2 * lmaxd + 1) * GlobalV::NLOCAL); + ModuleBase::GlobalFunc::ZEROS(tmp_v2, GlobalV::NLOCAL * GlobalV::NLOCAL); + int nm = 2 * inl_l[inl] + 1; //1,3,5,... + const char t = 'T'; //transpose + const char nt = 'N'; //non transpose + const double alpha = 1; + const double beta = 0; + double* a = this->gedm[inl];//[nm][nm] + double* b = S_mu_alpha[inl];//[GlobalV::NLOCAL][nm]--trans->[nm][GlobalV::NLOCAL] + double* c = tmp_v1; + + //2.1 (dE/dD)* + dgemm_(&nt, &t, &nm, &GlobalV::NLOCAL, &nm, &alpha, a, &nm, b, &GlobalV::NLOCAL, &beta, c, &nm); + + //2.2 *(dE/dD)* + a = b; //[GlobalV::NLOCAL][nm] + b = c;//[nm][GlobalV::NLOCAL] + c = tmp_v2;//[GlobalV::NLOCAL][GlobalV::NLOCAL] + dgemm_(&nt, &nt, &GlobalV::NLOCAL, &GlobalV::NLOCAL, &nm, &alpha, a, &GlobalV::NLOCAL, b, &nm, &beta, c, &GlobalV::NLOCAL); + + //3. sum of Inl + for (int i = 0;i < GlobalV::NLOCAL * GlobalV::NLOCAL;++i) + { + this->H_V_delta[i] += c[i]; + } + } + delete[] tmp_v1; + delete[] tmp_v2; + + GlobalV::ofs_running << " Finish calculating H_V_delta" << std::endl; + return; +} + +// compute the full projected density matrix for each atom +// save the matrix for each atom in order to minimize the usage of memory +// --mohan 2021-08-04 +void LCAO_Descriptor::cal_dm_as_descriptor(const ModuleBase::matrix &dm) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_proj_dm"); + + for(int it=0; itF_delta.zero_out(); + //1. cal gedm + this->cal_gedm(dm); + + //2. cal gdmx + this->init_gdmx(); + this->cal_gdmx(dm); + + //3.multiply and sum for each atom + //3.1 Pulay term + // \sum_{Inl}\sum_{mm'} _{mm'} + //notice: sum of multiplied corresponding element(mm') , not matrix multiplication ! + int iat = 0; //check if the index same as GlobalC::ucell.iw2iat or not !! + for (int it = 0;it < GlobalC::ucell.ntype;++it) + { + for (int ia = 0;ia < GlobalC::ucell.atoms[it].na;++ia) + { + for (int inl = 0;inl < this->inlmax;++inl) + { + int nm = 2 * inl_l[inl] + 1; + for (int m1 = 0;m1 < nm;++m1) + { + for (int m2 = 0; m2 < nm;++m2) + { + this->F_delta(iat, 0) += this->gedm[inl][m1 * nm + m2] * gdmx[iat][inl][m1 * nm + m2]; + this->F_delta(iat, 1) += this->gedm[inl][m1 * nm + m2] * gdmy[iat][inl][m1 * nm + m2]; + this->F_delta(iat, 2) += this->gedm[inl][m1 * nm + m2] * gdmz[iat][inl][m1 * nm + m2]; + } + } + }//end inl + ++iat; + } + } + this->print_F_delta("F_delta_pulay_old.dat"); + this->F_delta.zero_out(); + iat = 0; + for (int it = 0;it < GlobalC::ucell.ntype;++it) + { + for (int ia = 0;ia < GlobalC::ucell.atoms[it].na;++ia) + { + //3.2 HF term + double** ss = this->S_mu_alpha; + double** dsx = this->DS_mu_alpha_x; + double** dsy = this->DS_mu_alpha_y; + double** dsz = this->DS_mu_alpha_z; + for (int mu = 0;mu < GlobalV::NLOCAL;++mu) + { + for (int nu = 0;nu < GlobalV::NLOCAL;++nu) + { + for (int l = 0;l <= GlobalC::ORB.Alpha[0].getLmax();++l) + { + for (int n = 0;n < GlobalC::ORB.Alpha[0].getNchi(l);++n) + { + for (int m1 = 0;m1 < 2 * l + 1;++m1) + { + for (int m2 = 0;m2 < 2 * l + 1;++m2) + { + if (GlobalV::KS_SOLVER == "genelpa" || GlobalV::KS_SOLVER == "scalapack_gvx") + { + this->F_delta(iat, 0) -= 2*dm(mu, nu) * dsx[inl_index[it](ia, l, n)][m1 * GlobalV::NLOCAL + mu] + * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][m2 * GlobalV::NLOCAL + nu]; + this->F_delta(iat, 1) -= 2*dm(mu, nu) * dsy[inl_index[it](ia, l, n)][m1 * GlobalV::NLOCAL + mu] + * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][m2 * GlobalV::NLOCAL + nu]; + this->F_delta(iat, 2) -= 2*dm(mu, nu) * dsz[inl_index[it](ia, l, n)][m1 * GlobalV::NLOCAL + mu] + * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][m2 * GlobalV::NLOCAL + nu]; + } + else + { + this->F_delta(iat, 0) -= 2*dm(mu, nu) * dsx[inl_index[it](ia, l, n)][mu* (2*l+1) + m1] + * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][nu* (2*l+1) + m2]; + this->F_delta(iat, 1) -= 2*dm(mu, nu) * dsy[inl_index[it](ia, l, n)][mu* (2*l+1) + m1] + * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][nu* (2*l+1) + m2]; + this->F_delta(iat, 2) -= 2*dm(mu, nu) * dsz[inl_index[it](ia, l, n)][mu* (2*l+1) + m1] + * this->gedm[inl_index[it](ia, l, n)][m1 * (2 * l + 1) + m2] * ss[inl_index[it](ia, l, n)][nu* (2*l+1) + m2]; + } + }//end m2 + }//end m1 + }//end n + }//end l + }//end nu + }//end mu + ++iat; + }//end ia + }//end it + this->print_F_delta("F_delta_hf_old.dat"); + //3.3 Overlap term + //somthing in NN, which not included in Hamiltonian + /* + for (int mu = 0;mu < GlobalV::NLOCAL;++mu) + { + const int iat = GlobalC::ucell.iwt2iat[mu]; + for (int nu = 0;nu < GlobalV::NLOCAL;++nu) + { + this->F_delta(iat, 0) += 2*(this->E_delta - this->e_delta_band)* dm(mu, nu) * GlobalC::LM.DSloc_x[mu * GlobalV::NLOCAL + nu]; + this->F_delta(iat, 1) += 2*(this->E_delta - this->e_delta_band) * dm(mu, nu) * GlobalC::LM.DSloc_y[mu * GlobalV::NLOCAL + nu]; + this->F_delta(iat, 2) += 2*(this->E_delta - this->e_delta_band) * dm(mu, nu) * GlobalC::LM.DSloc_z[mu * GlobalV::NLOCAL + nu]; + } + }*/ + this->del_gdmx(); + return; +} +#endif \ No newline at end of file diff --git a/source/src_lcao/LCAO_hamilt.cpp b/source/src_lcao/LCAO_hamilt.cpp index fb1ca44f54..9e2ae92ee8 100644 --- a/source/src_lcao/LCAO_hamilt.cpp +++ b/source/src_lcao/LCAO_hamilt.cpp @@ -115,11 +115,13 @@ void LCAO_Hamilt::calculate_Hgamma( const int &ik ) // Peize Lin add ik 2016- //========method 2======== //ld.cal_gedm(LOC.wfc_dm_2d.dm_gamma[0]); //ld.build_v_delta_alpha(0); - GlobalC::ld.cal_gedm(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); + if(GlobalV::GAMMA_ONLY_LOCAL) { + GlobalC::ld.cal_gedm(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); //GlobalC::ld.build_v_delta_alpha(0); GlobalC::ld.build_v_delta_alpha_new(0); + GlobalC::ld.add_v_delta(); } else { @@ -127,7 +129,7 @@ void LCAO_Hamilt::calculate_Hgamma( const int &ik ) // Peize Lin add ik 2016- } //GlobalC::ld.build_v_delta_mu(0); - //GlobalC::ld.add_v_delta(); + } #endif @@ -878,4 +880,4 @@ void LCAO_Hamilt::calculat_HR_dftu_soc_sparse(const int ¤t_spin, const dou void LCAO_Hamilt::destroy_all_HSR_sparse(void) { GlobalC::LM.destroy_HS_R_sparse(); -} \ No newline at end of file +} From 9afacb8fe723255474d45ddc3819e415138e0ed2 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 28 Oct 2021 15:55:51 +0800 Subject: [PATCH 025/478] deepks multi-k : descriptors --- source/module_base/complexmatrix.cpp | 30 ++++++++++++++++++++++++++++ source/module_base/complexmatrix.h | 3 +++ source/src_lcao/LCAO_descriptor.cpp | 17 +++------------- source/src_lcao/LOOP_ions.cpp | 26 +++++++++++++++++++++++- 4 files changed, 61 insertions(+), 15 deletions(-) diff --git a/source/module_base/complexmatrix.cpp b/source/module_base/complexmatrix.cpp index 2ad09be443..6c8be1cb71 100644 --- a/source/module_base/complexmatrix.cpp +++ b/source/module_base/complexmatrix.cpp @@ -433,4 +433,34 @@ std::ostream & ComplexMatrix::print( std::ostream & os, const double threshold_n return os; } +ModuleBase::matrix ComplexMatrix::dble(void) +{ + ModuleBase::matrix a; + a.create(this->nr, this->nc); + for(int i=0;inr;i++) + { + for(int j=0;jnc;j++) + { + a(i,j) = std::real((*this)(i,j)); + } + } + return a; +} + +bool ComplexMatrix::checkreal(void) +{ + const double tiny = 1e-12; + for(int i=0;inr;i++) + { + for(int j=0;jnc;j++) + { + if(std::imag((*this)(i,j)) > tiny) + { + return 0; + } + } + } + return 1; +} + } \ No newline at end of file diff --git a/source/module_base/complexmatrix.h b/source/module_base/complexmatrix.h index f2a1f39b06..15d22799b0 100644 --- a/source/module_base/complexmatrix.h +++ b/source/module_base/complexmatrix.h @@ -57,6 +57,9 @@ class ComplexMatrix void set_as_identity_matrix(void); std::ostream & print( std::ostream & os, const double threshold_norm=0.0, const double threshold_imag=0.0 ) const; // Peize Lin add 2021.09.08 + + ModuleBase::matrix dble(void); + bool checkreal(void); }; ComplexMatrix operator+(const ComplexMatrix &m1, const ComplexMatrix &m2); diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index a227fb267a..e5018047e0 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -199,11 +199,6 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) ModuleBase::TITLE("LCAO_Descriptor", "build_S_descriptor"); //array to store data - if (!GlobalV::GAMMA_ONLY_LOCAL) - { - ModuleBase::WARNING_QUIT("LCAO_Descriptor::build_S_descriptor", "muti-kpoint method for descriptor is not implemented yet! "); - } - double olm[3] = {0.0, 0.0, 0.0}; //\sum{T} e**{ikT} <\phi_{ia}|d\phi_{k\beta}(T)> //??? @@ -257,20 +252,14 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) GlobalC::UOT.snap_psipsi(GlobalC::ORB, olm, 0, 'D', tau1, T1, L1, m1, N1, GlobalC::GridD.getAdjacentTau(ad), T2, L2, m2, N2, GlobalV::NSPIN); - if (GlobalV::GAMMA_ONLY_LOCAL) - { - this->set_S_mu_alpha(iw1_all, inl_index[T2](I2,L2,N2), m2, olm[0]); - } + this->set_S_mu_alpha(iw1_all, inl_index[T2](I2,L2,N2), m2, olm[0]); } else { GlobalC::UOT.snap_psipsi(GlobalC::ORB, olm, 1, 'D', tau1, T1, L1, m1, N1, GlobalC::GridD.getAdjacentTau(ad), T2, L2, m2, N2, GlobalV::NSPIN); - if (GlobalV::GAMMA_ONLY_LOCAL) - { this->set_DS_mu_alpha(iw1_all, inl_index[T2](I2,L2,N2), m2, olm[0], olm[1], olm[2]); - } } } //m2 @@ -288,7 +277,7 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) GlobalC::ParaD.allsum_deepks(this->inlmax,GlobalV::NLOCAL*(2*this->lmaxd+1),this->S_mu_alpha); #endif - /* +/* for(int inl=0;inlinlmax;inl++) { ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"inl:",inl); @@ -297,7 +286,7 @@ void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) GlobalV::ofs_running << "j,s_mu_alpha: " << j << " " << this->S_mu_alpha[inl][j] << std::endl; } } - */ +*/ return; } diff --git a/source/src_lcao/LOOP_ions.cpp b/source/src_lcao/LOOP_ions.cpp index f15b1b5e3a..150245e23d 100644 --- a/source/src_lcao/LOOP_ions.cpp +++ b/source/src_lcao/LOOP_ions.cpp @@ -180,7 +180,31 @@ void LOOP_ions::opt_ions(void) { //ld.init(ORB.get_lmax_d(), ORB.get_nchimax_d(), ucell.nat* ORB.Alpha[0].getTotal_nchi()); //ld.build_S_descriptor(0); //cal overlap, no need dm - GlobalC::ld.cal_projected_DM(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); //need dm + if(GlobalV::GAMMA_ONLY_LOCAL) + { + GlobalC::ld.cal_projected_DM(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); //need dm + } + else + { + //step 1 : collect density matrices + if(GlobalV::NPOOL!=1) + { + ModuleBase::WARNING_QUIT("opt_ions","deepks not compatible with npool>1 now"); + } + ModuleBase::ComplexMatrix dm_k_all; + dm_k_all.create(GlobalC::LOC.wfc_dm_2d.dm_k[0].nr, GlobalC::LOC.wfc_dm_2d.dm_k[0].nc); + for(int ik=0;ik Date: Thu, 28 Oct 2021 16:12:10 +0800 Subject: [PATCH 026/478] deepks : fix multiple inclusion of npy header --- source/src_lcao/LCAO_descriptor.cpp | 4 ---- source/src_lcao/LCAO_descriptor.h | 6 +++++- source/src_lcao/LCAO_descriptor_new.cpp | 5 ----- source/src_lcao/LCAO_descriptor_old.cpp | 5 ----- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index e5018047e0..83b39ab2de 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -10,10 +10,6 @@ #include "../src_pw/global.h" #include "../src_io/winput.h" -#include -#include -#include -#include namespace GlobalC { diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 64f4e87e8a..80302710c2 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -5,8 +5,12 @@ #include "../module_base/intarray.h" #include "../module_base/complexmatrix.h" -#include #include "../src_pw/global.h" + +#include +#include +#include +#include #ifdef __MPI #include "../src_parallel/parallel_deepks.h" #endif diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp index fa438d9c91..51eb0d8bff 100644 --- a/source/src_lcao/LCAO_descriptor_new.cpp +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -10,11 +10,6 @@ #include "../src_pw/global.h" #include "../src_io/winput.h" -#include -#include -#include -#include - void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) { ModuleBase::TITLE("LCAO_Descriptor", "build_v_delta_alpha_new"); diff --git a/source/src_lcao/LCAO_descriptor_old.cpp b/source/src_lcao/LCAO_descriptor_old.cpp index 8dbbc5f9fe..ab3faa5857 100644 --- a/source/src_lcao/LCAO_descriptor_old.cpp +++ b/source/src_lcao/LCAO_descriptor_old.cpp @@ -10,11 +10,6 @@ #include "../src_pw/global.h" #include "../src_io/winput.h" -#include -#include -#include -#include - void LCAO_Descriptor::cal_v_delta(const ModuleBase::matrix& dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_v_delta"); From 15f2a18735b6e626aedb0635e3da2b2f717abbb0 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Thu, 28 Oct 2021 16:45:48 +0800 Subject: [PATCH 027/478] deepks : fix small bug related to macro --- source/src_lcao/LCAO_descriptor.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 80302710c2..e2cd3be0e9 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -1,6 +1,6 @@ #ifndef LCAO_DESCRIPTOR_H #define LCAO_DESCRIPTOR_H -#endif + #ifdef __DEEPKS #include "../module_base/intarray.h" @@ -255,3 +255,4 @@ extern LCAO_Descriptor ld; } #endif +#endif \ No newline at end of file From 661930b4ea674d8fea2e19f189be2986b36838ce Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 29 Oct 2021 12:51:12 +0800 Subject: [PATCH 028/478] only first rank need dynamic space --- source/src_pw/symmetry_rho.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/source/src_pw/symmetry_rho.cpp b/source/src_pw/symmetry_rho.cpp index 26d5ae82a3..94e2e58b9f 100644 --- a/source/src_pw/symmetry_rho.cpp +++ b/source/src_pw/symmetry_rho.cpp @@ -32,12 +32,16 @@ void Symmetry_rho::psymm(double* rho_part, const PW_Basis &pw, Parallel_Grid &Pg { #ifdef __MPI // (1) reduce all rho from the first pool. - double* rhotot = new double[pw.ncxyz]; - ModuleBase::GlobalFunc::ZEROS(rhotot, pw.ncxyz); + double* rhotot; + if(GlobalV::MY_RANK == 0) + { + rhotot = new double[pw.ncxyz]; + ModuleBase::GlobalFunc::ZEROS(rhotot, pw.ncxyz); + } Pgrid.reduce_to_fullrho(rhotot, rho_part); // (2) - if(GlobalV::RANK_IN_POOL==0) + if(GlobalV::MY_RANK==0) { symm.rho_symmetry(rhotot, pw.ncx, pw.ncy, pw.ncz); /* @@ -81,7 +85,7 @@ void Symmetry_rho::psymm(double* rho_part, const PW_Basis &pw, Parallel_Grid &Pg Pgrid.zpiece_to_all(zpiece,iz, rho_part); } - delete[] rhotot; + if(GlobalV::MY_RANK==0) delete[] rhotot; delete[] zpiece; #endif return; From ee45b8d8c6f7e95350340145dff5f9fff417d319 Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 29 Oct 2021 15:38:21 +0800 Subject: [PATCH 029/478] add pw_basis_k class for wave functions when number of k-points is more than 1 --- source/module_pw/pw_basis.h | 21 +++---- source/module_pw/pw_basis_k.cpp | 95 +++++++++++++++++++++++++++++++ source/module_pw/pw_basis_k.h | 51 +++++++++++++++++ source/module_pw/pw_init.cpp | 12 ++-- source/module_pw/pw_operation.cpp | 11 +++- 5 files changed, 166 insertions(+), 24 deletions(-) create mode 100644 source/module_pw/pw_basis_k.cpp create mode 100644 source/module_pw/pw_basis_k.h diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index f110554324..8cd3200895 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -4,14 +4,13 @@ #include "../module_base/matrix.h" #include "../module_base/matrix3.h" #include "../module_base/vector3.h" -#include "../src_pw/klist.h" #include // //A class which can convert a function of "r" to the corresponding linear // superposition of plane waves (real space to reciprocal space) // or convert a linear superposition of plane waves to the function // of "r" (reciprocal to real). -//plane waves: =1/sqrt(V)*exp(i(k+g)r) +//plane waves: =1/sqrt(V)*exp(igr) // class PW_Basis { @@ -22,26 +21,24 @@ class PW_Basis //Init the grids for FFT void initgrids( - ModuleBase::Matrix3 latvec_in; // Unitcell lattice vectors - ModuleBase::Matrix3 G_in; // reciprocal lattice vector (2pi*inv(R) ) + ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors + ModuleBase::Matrix3 G_in, // reciprocal lattice vector (2pi*inv(R) ) double gridecut ); //Init the grids for FFT void initgrids( - ModuleBase::Matrix3 latvec_in; // Unitcell lattice vectors - ModuleBase::Matrix3 G_in; // reciprocal lattice vector (2pi*inv(R) ) + ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors + ModuleBase::Matrix3 G_in, // reciprocal lattice vector (2pi*inv(R) ) int nx_in, int ny_in, int nz_in ); //Init some parameters void initparameters( bool gamma_only_in, - double ecut_in, - int nk_in, //number of k points in this pool - ModuleBase::Vector3 *kvec_d, // Direct coordinates of k points + double ggecut_in, int poolnproc_in, // Number of processors in this pool int poolrank_in, // Rank in this pool - int distribution_type_in, + int distribution_type_in ); //distribute plane waves to different processors @@ -68,7 +65,7 @@ class PW_Basis private: bool gamma_only; // only half g are used. - double ggecut; //Energy cut off for g^2 + double ggecut; //Energy cut off for g^2/2 ModuleBase::Matrix3 latvec; // Unitcell lattice vectors, unit in bohr ModuleBase::Matrix3 G; // reciprocal lattice vector, unit in ModuleBase::Matrix3 GT; // traspose of G @@ -76,8 +73,6 @@ class PW_Basis int distribution_type; int poolnproc; int poolrank; - int nks; - ModuleBase::Vector3 *kvec_d; //distribute plane waves to different processors void distribution_method1(); diff --git a/source/module_pw/pw_basis_k.cpp b/source/module_pw/pw_basis_k.cpp new file mode 100644 index 0000000000..8550dc2915 --- /dev/null +++ b/source/module_pw/pw_basis_k.cpp @@ -0,0 +1,95 @@ +#include "pw_basis_k.h" +PW_Basis_K::PW_Basis_K() +{ + nks = 1; + kvec_d = NULL; + ngk = NULL; + GR_index = NULL; +} +PW_Basis_K::~PW_Basis_K() +{ + if(kvec_d != NULL) delete[] kvec_d; + if(ngk != NULL) delete[] ngk; + if(GR_index != NULL) delete[] GR_index; +} + +void PW_Basis_K:: initparameters( + bool gamma_only_in, + double ecut_in, + double gk_ecut_in, + int nks_in, //number of k points in this pool + ModuleBase::Vector3 *kvec_d_in, // Direct coordinates of k points + int poolnproc_in, // Number of processors in this pool + int poolrank_in, // Rank in this pool + int distribution_type_in, +) +{ + initparameters(gamma_only_in,ecut_in,poolnproc_in,poolrank_in,distribution_type_in); + this->nks = nks_in; + this->kvec_d = kvec_d_in; + this->gk_ecut = gk_ecut_in; + for(int ik = 0 ; ik < this->nks ; ++ik) + { + kvec_c = + } + return; +} + +void PW_Basis_K::setupIndGk() +{ + ModuleBase::TITLE("PW_Basis_K","setupIndGk"); + ModuleBase::timer::tick("PW_Basis_K","setupIndGk"); + + igk.create(nks, npw); + ModuleBase::Memory::record("PW_Basis_K","igk",nks*npw,"int"); + + //============================================= + // Done this in each cpu ( use nks,not nkstot ) + // notice : using cartesian coordinate + //============================================= + for (int ik = 0; ik < this->nks; ik++) + { + int ng = 0; + for (int ig = 0; ig < npw ; ig++) + { + const double gk2 = this->get_GPlusK_cartesian(ik, ig).norm2(); + if (gk2 <= this->gk_ecut) + { + this->igk(ik, ng) = ig; + ng++; + } + } + this->npwk[ik] = ng; + if ( this->npwk_max < ng) + { + this->npwk_max = ng; + } + } + + // bool out_gk =0; //DIY! mohan 2011-10-03 + // if(out_gk) + // { + // std::stringstream ss; + // ss << GlobalV::global_out_dir << "PW_GK" << GlobalV::MY_RANK+1 << ".dat"; + // std::ofstream ofs( ss.str().c_str() ); + // ofs << GlobalC::pw.ggpsi << " (ggpsi, Ry)" << std::endl; + // ofs << GlobalC::pw.ggwfc << " (ggwfc, Ry)" << std::endl; + // ofs << GlobalC::pw.ggwfc2 << " (ggwfc2, Ry)" << std::endl; + // ModuleBase::Vector3 f; + // for(int ik=0; ik < nks; ++ik) + // { + // ofs << ik+1 << " (Index of k)" << std::endl; + // ofs << pwb.ngmw << " (Number of plane waves)" << std::endl; + // for(int ig=0; ig < pwb.ngmw; ++ig) + // { + // f = pwb.get_GPlusK_cartesian(ik, ig); + // ofs << f.x << " " << f.y << " " << f.z << " " << f.norm() << std::endl; + // } + // } + // ofs.close(); + // } + + ModuleBase::timer::tick("PW_Basis_K","setupIndGk"); + + return; +} diff --git a/source/module_pw/pw_basis_k.h b/source/module_pw/pw_basis_k.h new file mode 100644 index 0000000000..d7ea08b4ef --- /dev/null +++ b/source/module_pw/pw_basis_k.h @@ -0,0 +1,51 @@ +#ifndef PWBASISK_H +#define PWBASISK_H + +#include "pw_basis.h" +#include "../module_base/intarray.h" + +// +//Special pw_basis class. +//It includes different k-points +//plane waves: =1/sqrt(V)*exp(i(k+g)r) +// +class PW_Basis_K : public PW_Basis +{ + +public: + PW_Basis_K(); + ~PW_Basis_K(); + void initparameters( + bool gamma_only_in, + double ecut_in, + double gk_ecut_in, + int nk_in, //number of k points in this pool + ModuleBase::Vector3 *kvec_d, // Direct coordinates of k points + int poolnproc_in, // Number of processors in this pool + int poolrank_in, // Rank in this pool + int distribution_type_in + ); + void setupIndGk(); //set up igk + + + +public: + int nks;//number of k points in this pool + ModuleBase::Vector3 *kvec_d; // Direct coordinates of k points + ModuleBase::Vector3 *kvec_c; // Cartesian coordinates of k points + ModuleBase::IntArray igk; //[nks, npw_max] map igk_local to ig_local + int *npwk; //[nks] number of plane waves of different k-points + int npwk_max; //max npwk among all nks k-points + double gk_ecut; //Energy cut off for (g+k)^2/2 + +public: + void init_k();//initialize some data for current k-points + //After inik_k() + int *GR_index; //[npw_max] map igk_local to (is,iz) of current k, used after inik_k() + +public: + //operator + ModuleBase::Vector3 get_GPlusK_cartesian(const int ik, const int ig) const; + +}; +#endif //PlaneWave_K class diff --git a/source/module_pw/pw_init.cpp b/source/module_pw/pw_init.cpp index fcfac7fe45..fb6dab205a 100644 --- a/source/module_pw/pw_init.cpp +++ b/source/module_pw/pw_init.cpp @@ -133,18 +133,14 @@ void PW_Basis:: initgrids( //Init some parameters void PW_Basis:: initparameters( bool gamma_only_in, - double ecut_in, - int nks_in, //number of k points in this pool - ModuleBase::Vector3 *kvec_d_in, // Direct coordinates of k points - int poolnproc_in, // Number of processors in this pool - int poolrank_in, // Rank in this pool + double ggecut_in, + int poolnproc_in, + int poolrank_in, int distribution_type_in, ) { this->gamma_only = gamma_only_in; - this->ggecut = ecut_in; - this->nks = nks_in; - this->kvec_d = kvec_d_in; + this->ggecut = ggecut_in; this->poolnproc = poolnproc_in; this->poolrank = poolrank_in; this->distribution_type = distribution_type_in; diff --git a/source/module_pw/pw_operation.cpp b/source/module_pw/pw_operation.cpp index 52dfe5e8b9..cac8c4a49e 100644 --- a/source/module_pw/pw_operation.cpp +++ b/source/module_pw/pw_operation.cpp @@ -1,8 +1,13 @@ -ModuleBase::Vector3 get_GPlusK_cartesian(const int ik, const int ig) const { - assert(ig>=0 && igngmc && ik>=0 && iknks); - ModuleBase::Vector3 g_temp_ = Klist->kvec_c[ik] + this->gcar[ig]; +#include "pw_basis_k.h" +#include "pw_basis.h" + +ModuleBase::Vector3 PW_Basis_K:: get_GPlusK_cartesian(const int ik, const int ig) const { + assert(ig>=0 && ignpw && ik>=0 && iknks); + ModuleBase::Vector3 g_temp_ = this->kvec_c[ik] + this->gcar[ig]; return g_temp_; }; + + double get_GPlusK_cartesian_projection(const int ik, const int ig, const int axis) const { assert(ig >= 0 && ig < this->ngmc && ik >= 0 && ik < Klist->nks && axis >= 0 && axis <= 2); From 0839b3a73a15954d4763812b214a622dcdab0333 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Fri, 29 Oct 2021 16:18:19 +0800 Subject: [PATCH 030/478] deepks multi-k : energy --- source/src_lcao/ELEC_cbands_k.cpp | 27 +- source/src_lcao/LCAO_descriptor.cpp | 389 +++++++++++------------- source/src_lcao/LCAO_descriptor.h | 7 + source/src_lcao/LCAO_descriptor_new.cpp | 40 ++- source/src_lcao/LCAO_descriptor_old.cpp | 213 +++++++++++++ source/src_lcao/LCAO_hamilt.cpp | 27 +- source/src_lcao/LOOP_elec.cpp | 5 + source/src_lcao/LOOP_ions.cpp | 17 +- source/src_pw/energy.cpp | 34 ++- 9 files changed, 518 insertions(+), 241 deletions(-) diff --git a/source/src_lcao/ELEC_cbands_k.cpp b/source/src_lcao/ELEC_cbands_k.cpp index f84a584148..1e5bc397f5 100644 --- a/source/src_lcao/ELEC_cbands_k.cpp +++ b/source/src_lcao/ELEC_cbands_k.cpp @@ -5,6 +5,7 @@ #include "../src_pw/symmetry_rho.h" #include "LCAO_evolve.h" #include "dftu.h" +#include "LCAO_descriptor.h" ELEC_cbands_k::ELEC_cbands_k(){}; ELEC_cbands_k::~ELEC_cbands_k(){}; @@ -18,7 +19,31 @@ void ELEC_cbands_k::cal_bands(const int &istep, LCAO_Hamilt &uhm) int start_spin = -1; uhm.GK.reset_spin(start_spin); uhm.GK.allocate_pvpR(); - + +#ifdef __DEEPKS + if (GlobalV::deepks_scf) + { + //step 1 : accumulate density matrix + if(GlobalV::NPOOL!=1) + { + ModuleBase::WARNING_QUIT("opt_ions","deepks not compatible with npool>1 now"); + } + ModuleBase::ComplexMatrix dm_k_all; + dm_k_all.create(GlobalC::LOC.wfc_dm_2d.dm_k[0].nr, GlobalC::LOC.wfc_dm_2d.dm_k[0].nc); + for(int ik=0;ikload_model(model_file); //initialize the H matrix H_V_delta - delete[] this->H_V_delta; - this->H_V_delta = new double[GlobalC::ParaO.nloc]; - ModuleBase::GlobalFunc::ZEROS(this->H_V_delta, GlobalC::ParaO.nloc); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + delete[] this->H_V_delta; + this->H_V_delta = new double[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta, GlobalC::ParaO.nloc); + } + else + { + H_V_delta_k = new std::complex* [GlobalC::kv.nks]; + for(int ik=0;ikH_V_delta_k[ik] = new std::complex[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta_k[ik], GlobalC::ParaO.nloc); + } + } //init gedm** const int pdm_size = (this->lmaxd * 2 + 1) * (this->lmaxd * 2 + 1); @@ -777,6 +789,10 @@ void LCAO_Descriptor::deepks_pre_scf(const string& model_file) ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); } + if(!GlobalV::GAMMA_ONLY_LOCAL) + { + this->nlm_k.resize(GlobalC::ucell.nat); + } return; } @@ -889,6 +905,7 @@ void LCAO_Descriptor::build_v_delta_alpha(const bool& calc_deri) }//end I0 }//end T0 + /* for(int iw1=0;iw1H_V_delta, GlobalV::NLOCAL * GlobalV::NLOCAL); //init before calculate - //timer::tick ("LCAO_gen_fixedH","build_Nonlocal_mu"); - - // < phi1 | beta > < beta | phi2 > - // phi1 is within the unitcell. - // while beta is in the supercell. - // while phi2 is in the supercell. - - int nnr = 0; - ModuleBase::Vector3 tau1, tau2, dtau; - ModuleBase::Vector3 dtau1, dtau2, tau0; - double distance = 0.0; - double distance1, distance2; - double rcut = 0.0; - double rcut1, rcut2; - -// Record_adj RA; -// RA.for_2d(); - - // psi1 - for (int T1 = 0; T1 < GlobalC::ucell.ntype; ++T1) - { - const Atom* atom1 = &GlobalC::ucell.atoms[T1]; - for (int I1 =0; I1< atom1->na; ++I1) - { - //GlobalC::GridD.Find_atom( atom1->tau[I1] ); - GlobalC::GridD.Find_atom(GlobalC::ucell, atom1->tau[I1] ,T1, I1); - //const int iat1 = GlobalC::ucell.itia2iat(T1, I1); - const int start1 = GlobalC::ucell.itiaiw2iwt(T1, I1, 0); - tau1 = atom1->tau[I1]; - - // psi2 - for (int ad2=0; ad2= rcut) - { - for (int ad0 = 0; ad0 < GlobalC::GridD.getAdjacentNum()+1; ++ad0) - { - const int T0 = GlobalC::GridD.getType(ad0); - //const int I0 = GlobalC::GridD.getNatom(ad0); - //const int T0 = RA.info[iat1][ad0][3]; - //const int I0 = RA.info[iat1][ad0][4]; - //const int iat0 = GlobalC::ucell.itia2iat(T0, I0); - //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); - - tau0 = GlobalC::GridD.getAdjacentTau(ad0); - dtau1 = tau0 - tau1; - dtau2 = tau0 - tau2; - - double distance1 = dtau1.norm() * GlobalC::ucell.lat0; - double distance2 = dtau2.norm() * GlobalC::ucell.lat0; - - rcut1 = GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); - rcut2 = GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); - - if( distance1 < rcut1 && distance2 < rcut2 ) - { - is_adj = true; - break; - } - } - } - - - if(is_adj) - { - // < psi1 | all projectors | psi2 > - // ----------------------------- enter the nnr increaing zone ------------------------- - for (int j=0; jnw*GlobalV::NPOL; j++) - { - const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc - const int iw1_all = start1 + j; - const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; - if(mu < 0)continue; - - // fix a serious bug: atom2[T2] -> atom2 - // mohan 2010-12-20 - for (int k=0; knw*GlobalV::NPOL; k++) - { - const int k0 = k/GlobalV::NPOL; - const int iw2_all = start2 + k; - const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; - if(nu < 0)continue; - - - //(3) run over all projectors in nonlocal pseudopotential. - for (int ad0=0; ad0 < GlobalC::GridD.getAdjacentNum()+1 ; ++ad0) - { - const int T0 = GlobalC::GridD.getType(ad0); - const int I0 = GlobalC::GridD.getNatom(ad0); - tau0 = GlobalC::GridD.getAdjacentTau(ad0); - - dtau1 = tau0 - tau1; - dtau2 = tau0 - tau2; - distance1 = dtau1.norm() * GlobalC::ucell.lat0; - distance2 = dtau2.norm() * GlobalC::ucell.lat0; - - // seems a bug here!! mohan 2011-06-17 - rcut1 = GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); - rcut2 = GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); - - if(distance1 < rcut1 && distance2 < rcut2) - { - //const Atom* atom0 = &GlobalC::ucell.atoms[T0]; - double nlm[3]={0,0,0}; - if(!calc_deri) - { - GlobalC::UOT.snap_psialpha( - nlm, 0, tau1, T1, - atom1->iw2l[ j0 ], // L1 - atom1->iw2m[ j0 ], // m1 - atom1->iw2n[ j0 ], // N1 - tau2, T2, - atom2->iw2l[ k0 ], // L2 - atom2->iw2m[ k0 ], // m2 - atom2->iw2n[ k0 ], // n2 - tau0, T0, I0, - this->inl_index, - this->gedm); - - - if(GlobalV::GAMMA_ONLY_LOCAL) - { - // mohan add 2010-12-20 - if( nlm[0]!=0.0 ) - { - //GlobalC::LM.set_HSgamma(iw1_all,iw2_all,nlm[0],'N');//N stands for nonlocal. - int index = iw2_all * GlobalV::NLOCAL + iw1_all; //for genelpa - this->H_V_delta[index] += nlm[0]; - } - } - else - { - //for multi-k, not prepared yet - } - }// calc_deri - else // calculate the derivative - { - if(GlobalV::GAMMA_ONLY_LOCAL) - { - GlobalC::UOT.snap_psialpha( - nlm, 1, tau1, T1, - atom1->iw2l[ j0 ], // L1 - atom1->iw2m[ j0 ], // m1 - atom1->iw2n[ j0 ], // N1 - tau2, T2, - atom2->iw2l[ k0 ], // L2 - atom2->iw2m[ k0 ], // m2 - atom2->iw2n[ k0 ], // n2 - tau0, T0, I0, - this->inl_index, - this->gedm); - - // sum all projectors for one atom. - //GlobalC::LM.set_force (iw1_all, iw2_all, nlm[0], nlm[1], nlm[2], 'N'); - } - else - { - // mohan change the order on 2011-06-17 - // origin: < psi1 | beta > < beta | dpsi2/dtau > - //now: < psi1/dtau | beta > < beta | psi2 > - GlobalC::UOT.snap_psialpha( - nlm, 1, tau2, T2, - atom2->iw2l[ k0 ], // L2 - atom2->iw2m[ k0 ], // m2 - atom2->iw2n[ k0 ], // n2 - tau1, T1, - atom1->iw2l[ j0 ], // L1 - atom1->iw2m[ j0 ], // m1 - atom1->iw2n[ j0 ], // N1 - tau0, T0, I0, - this->inl_index, - this->gedm); - - //GlobalC::LM.DHloc_fixedR_x[nnr] += nlm[0]; - //GlobalC::LM.DHloc_fixedR_y[nnr] += nlm[1]; - //GlobalC::LM.DHloc_fixedR_z[nnr] += nlm[2]; - } - }//!calc_deri - }// distance - } // ad0 - ++nnr; - }// k - } // j - }// end is_adj - } // ad2 - } // I1 - } // T1 - - //timer::tick ("LCAO_gen_fixedH","build_Nonlocal_mu"); - return; -} - - void LCAO_Descriptor::add_v_delta(void) { ModuleBase::TITLE("LCAO_DESCRIPTOR", "add_v_delta"); @@ -1144,6 +948,116 @@ void LCAO_Descriptor::add_v_delta(void) return; } +void LCAO_Descriptor::add_v_delta_k(const int &ik) +{ + ModuleBase::TITLE("LCAO_DESCRIPTOR", "add_v_delta_k"); + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta_k[ik], GlobalC::ParaO.nloc); + + const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); + + for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) + { + Atom* atom0 = &GlobalC::ucell.atoms[T0]; + for (int I0 =0; I0< atom0->na; I0++) + { + const int iat = GlobalC::ucell.itia2iat(T0,I0); + const ModuleBase::Vector3 tau0 = atom0->tau[I0]; + GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); + + for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); + + ModuleBase::Vector3 dR1(GlobalC::GridD.getBox(ad1).x, GlobalC::GridD.getBox(ad1).y, GlobalC::GridD.getBox(ad1).z); + + for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) + { + const int T2 = GlobalC::GridD.getType(ad2); + const int I2 = GlobalC::GridD.getNatom(ad2); + const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); + const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); + const Atom* atom2 = &GlobalC::ucell.atoms[T2]; + const int nw2_tot = atom2->nw*GlobalV::NPOL; + ModuleBase::Vector3 dR2(GlobalC::GridD.getBox(ad2).x, GlobalC::GridD.getBox(ad2).y, GlobalC::GridD.getBox(ad2).z); + + const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1 + || dist2 > Rcut_Alpha + Rcut_AO2) + { + continue; + } + + const double arg = ( GlobalC::kv.kvec_d[ik] * (dR2-dR1) ) * ModuleBase::TWO_PI; + const std::complex kphase = std::complex ( cos(arg), sin(arg) ); + + for (int iw1=0; iw1 nlm1 = this->nlm_k[iat][ad1][iw1_all][0]; + std::vector nlm2 = this->nlm_k[iat][ad2][iw2_all][0]; + + assert(nlm1.size()==nlm2.size()); + int ib=0; + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m1 = 0;m1 < 2 * L0 + 1;++m1) + { + for (int m2 = 0; m2 < 2 * L0 + 1; ++m2) + { + nlm += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[ib+m2]; + } + } + ib+=(2*L0+1); + } + } + + assert(ib==nlm1.size()); + + int iic; + + if(GlobalV::KS_SOLVER=="genelpa" || GlobalV::KS_SOLVER=="scalapack_gvx") // save the matrix as column major format + { + iic=iw1_local+iw2_local*GlobalC::ParaO.nrow; + } + else + { + iic=iw1_local*GlobalC::ParaO.ncol+iw2_local; + } + this->H_V_delta_k[ik][iic] += nlm*kphase; + GlobalC::LM.Hloc2[iic] += nlm * kphase; + + }//iw2 + }//iw1 + }//ad2 + }//ad1 + } + } +} + void LCAO_Descriptor::cal_f_delta_hf(const ModuleBase::matrix& dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf"); @@ -1656,7 +1570,7 @@ void LCAO_Descriptor::cal_e_delta_band(const std::vector &dm const int nu = GlobalC::ParaO.trace_loc_col[i]; if (mu >= 0 && nu >= 0) - { + { const int index=nu*GlobalC::ParaO.nrow+mu; for (int is = 0; is < GlobalV::NSPIN; ++is) { @@ -1669,6 +1583,45 @@ void LCAO_Descriptor::cal_e_delta_band(const std::vector &dm return; } +void LCAO_Descriptor::cal_e_delta_band_k(const std::vector &dm) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_e_delta_band"); + std::complex e_delta_band_k=std::complex(0.0,0.0); + for (int i = 0; i < GlobalV::NLOCAL; ++i) + { + for (int j = 0; j < GlobalV::NLOCAL; ++j) + { + const int mu = GlobalC::ParaO.trace_loc_row[j]; + const int nu = GlobalC::ParaO.trace_loc_col[i]; + + if (mu >= 0 && nu >= 0) + { + int iic; + if(GlobalV::KS_SOLVER=="genelpa" || GlobalV::KS_SOLVER=="scalapack_gvx") // save the matrix as column major format + { + iic=mu+nu*GlobalC::ParaO.nrow; + } + else + { + iic=mu*GlobalC::ParaO.ncol+nu; + } + for(int ik=0;ikH_V_delta_k[ik][iic]; + } + } + } + } + Parallel_Reduce::reduce_complex_double_all(e_delta_band_k); + if(e_delta_band_k.imag()>1e-12) + { + GlobalV::ofs_running << "e_delta_band_k : " << e_delta_band_k << std::endl; + ModuleBase::WARNING_QUIT("e_delta_band_k","energy should be real!"); + } + this->e_delta_band = e_delta_band_k.real(); + return; +} + void LCAO_Descriptor::cal_gvx(const ModuleBase::matrix &dm) { ModuleBase::TITLE("LCAO_Descriptor","cal_gvx"); diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index e2cd3be0e9..7494c1e3c5 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -6,6 +6,7 @@ #include "../module_base/intarray.h" #include "../module_base/complexmatrix.h" #include "../src_pw/global.h" +#include #include #include @@ -88,6 +89,7 @@ class LCAO_Descriptor ///add \f$H_{\delta, \mu\nu}\f$ to the Hamiltonian matrix void add_v_delta(void); + void add_v_delta_k(const int &ik); ///compute Hellmann-Feynman term of the force contribution of \f$E_\delta\f$ void cal_f_delta_hf(const ModuleBase::matrix& dm/**< [in] density matrix*/); @@ -127,6 +129,7 @@ class LCAO_Descriptor ///calculate \f$tr(\rho H_\delta), \rho = \sum_i{c_{i, \mu}c_{i,\nu}} \f$ (for gamma_only) void cal_e_delta_band(const std::vector& dm/**<[in] density matrix*/); + void cal_e_delta_band_k(const std::vector& dm/**<[in] density matrix*/); //------------------- // public variables //------------------- @@ -138,6 +141,7 @@ class LCAO_Descriptor double e_delta_band = 0.0; ///Correction term to the Hamiltonian matrix: \f$\langle\psi|V_\delta|\psi\rangle\f$ double* H_V_delta; + std::complex** H_V_delta_k; ///(Unit: Ry/Bohr) Total Force due to the DeePKS correction term \f$E_{\delta}\f$ ModuleBase::matrix F_delta; @@ -168,6 +172,9 @@ class LCAO_Descriptor double* DH_V_delta_y; double* DH_V_delta_z; + // saves , for k point + std::vector>>>> nlm_k; + // projected density matrix double** pdm; //[tot_Inl][2l+1][2l+1] caoyu modified 2021-05-07 std::vector pdm_tensor; diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp index 51eb0d8bff..1b3edaea01 100644 --- a/source/src_lcao/LCAO_descriptor_new.cpp +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -13,7 +13,10 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) { ModuleBase::TITLE("LCAO_Descriptor", "build_v_delta_alpha_new"); - ModuleBase::GlobalFunc::ZEROS(this->H_V_delta,GlobalC::ParaO.nloc); //init before calculate + if(GlobalV::GAMMA_ONLY_LOCAL) + { + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta,GlobalC::ParaO.nloc); //init before calculate + } const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); //same for all types of atoms @@ -32,6 +35,7 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) Atom* atom0 = &GlobalC::ucell.atoms[T0]; for (int I0 =0; I0< atom0->na; I0++) { + const int iat = GlobalC::ucell.itia2iat(T0,I0); //======================================================= //Step1: //saves , where beta runs over L0,M0 on atom I0 @@ -44,7 +48,14 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); //outermost loop : all adjacent atoms - nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); + } + else + { + this->nlm_k[iat].resize(GlobalC::GridD.getAdjacentNum()+1); + } for (int ad=0; adnw*GlobalV::NPOL; //middle loop : atomic basis on current processor (either row or column) - nlm_tot[ad].clear(); - + if(GlobalV::GAMMA_ONLY_LOCAL) + { + nlm_tot[ad].clear(); + } + else + { + this->nlm_k[iat][ad].clear(); + } const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; if (dist1 > Rcut_Alpha + Rcut_AO1) @@ -85,9 +102,22 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) atom1->iw2m[ iw1_0 ], // m1 atom1->iw2n[ iw1_0 ], // N1 GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 - nlm_tot[ad].insert({iw1_all,nlm}); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + nlm_tot[ad].insert({iw1_all,nlm}); + } + else + { + this->nlm_k[iat][ad].insert({iw1_all,nlm}); + } }//end iw }//end ad + + if(!GlobalV::GAMMA_ONLY_LOCAL) + { + //saves , to be used later + continue; + } //======================================================= //Step2: //calculate sum_(L0,M0) alpha diff --git a/source/src_lcao/LCAO_descriptor_old.cpp b/source/src_lcao/LCAO_descriptor_old.cpp index ab3faa5857..250d73b152 100644 --- a/source/src_lcao/LCAO_descriptor_old.cpp +++ b/source/src_lcao/LCAO_descriptor_old.cpp @@ -181,4 +181,217 @@ void LCAO_Descriptor::cal_f_delta(const ModuleBase::matrix &dm) this->del_gdmx(); return; } + +//for multi-k, search adjacent atoms from mu +void LCAO_Descriptor::build_v_delta_mu(const bool& calc_deri) +{ + ModuleBase::TITLE("LCAO_Descriptor", "build_v_delta_mu"); + ModuleBase::GlobalFunc::ZEROS(this->H_V_delta, GlobalV::NLOCAL * GlobalV::NLOCAL); //init before calculate + //timer::tick ("LCAO_gen_fixedH","build_Nonlocal_mu"); + + // < phi1 | beta > < beta | phi2 > + // phi1 is within the unitcell. + // while beta is in the supercell. + // while phi2 is in the supercell. + + int nnr = 0; + ModuleBase::Vector3 tau1, tau2, dtau; + ModuleBase::Vector3 dtau1, dtau2, tau0; + double distance = 0.0; + double distance1, distance2; + double rcut = 0.0; + double rcut1, rcut2; + +// Record_adj RA; +// RA.for_2d(); + + // psi1 + for (int T1 = 0; T1 < GlobalC::ucell.ntype; ++T1) + { + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + for (int I1 =0; I1< atom1->na; ++I1) + { + //GlobalC::GridD.Find_atom( atom1->tau[I1] ); + GlobalC::GridD.Find_atom(GlobalC::ucell, atom1->tau[I1] ,T1, I1); + //const int iat1 = GlobalC::ucell.itia2iat(T1, I1); + const int start1 = GlobalC::ucell.itiaiw2iwt(T1, I1, 0); + tau1 = atom1->tau[I1]; + + // psi2 + for (int ad2=0; ad2= rcut) + { + for (int ad0 = 0; ad0 < GlobalC::GridD.getAdjacentNum()+1; ++ad0) + { + const int T0 = GlobalC::GridD.getType(ad0); + //const int I0 = GlobalC::GridD.getNatom(ad0); + //const int T0 = RA.info[iat1][ad0][3]; + //const int I0 = RA.info[iat1][ad0][4]; + //const int iat0 = GlobalC::ucell.itia2iat(T0, I0); + //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); + + tau0 = GlobalC::GridD.getAdjacentTau(ad0); + dtau1 = tau0 - tau1; + dtau2 = tau0 - tau2; + + double distance1 = dtau1.norm() * GlobalC::ucell.lat0; + double distance2 = dtau2.norm() * GlobalC::ucell.lat0; + + rcut1 = GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); + rcut2 = GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); + + if( distance1 < rcut1 && distance2 < rcut2 ) + { + is_adj = true; + break; + } + } + } + + + if(is_adj) + { + // < psi1 | all projectors | psi2 > + // ----------------------------- enter the nnr increaing zone ------------------------- + for (int j=0; jnw*GlobalV::NPOL; j++) + { + const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc + const int iw1_all = start1 + j; + const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; + if(mu < 0)continue; + + // fix a serious bug: atom2[T2] -> atom2 + // mohan 2010-12-20 + for (int k=0; knw*GlobalV::NPOL; k++) + { + const int k0 = k/GlobalV::NPOL; + const int iw2_all = start2 + k; + const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; + if(nu < 0)continue; + + + //(3) run over all projectors in nonlocal pseudopotential. + for (int ad0=0; ad0 < GlobalC::GridD.getAdjacentNum()+1 ; ++ad0) + { + const int T0 = GlobalC::GridD.getType(ad0); + const int I0 = GlobalC::GridD.getNatom(ad0); + tau0 = GlobalC::GridD.getAdjacentTau(ad0); + + dtau1 = tau0 - tau1; + dtau2 = tau0 - tau2; + distance1 = dtau1.norm() * GlobalC::ucell.lat0; + distance2 = dtau2.norm() * GlobalC::ucell.lat0; + + // seems a bug here!! mohan 2011-06-17 + rcut1 = GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); + rcut2 = GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ORB.Alpha[0].getRcut(); + + if(distance1 < rcut1 && distance2 < rcut2) + { + //const Atom* atom0 = &GlobalC::ucell.atoms[T0]; + double nlm[3]={0,0,0}; + if(!calc_deri) + { + GlobalC::UOT.snap_psialpha( + nlm, 0, tau1, T1, + atom1->iw2l[ j0 ], // L1 + atom1->iw2m[ j0 ], // m1 + atom1->iw2n[ j0 ], // N1 + tau2, T2, + atom2->iw2l[ k0 ], // L2 + atom2->iw2m[ k0 ], // m2 + atom2->iw2n[ k0 ], // n2 + tau0, T0, I0, + this->inl_index, + this->gedm); + + + if(GlobalV::GAMMA_ONLY_LOCAL) + { + // mohan add 2010-12-20 + if( nlm[0]!=0.0 ) + { + //GlobalC::LM.set_HSgamma(iw1_all,iw2_all,nlm[0],'N');//N stands for nonlocal. + int index = iw2_all * GlobalV::NLOCAL + iw1_all; //for genelpa + this->H_V_delta[index] += nlm[0]; + } + } + else + { + //for multi-k, not prepared yet + } + }// calc_deri + else // calculate the derivative + { + if(GlobalV::GAMMA_ONLY_LOCAL) + { + GlobalC::UOT.snap_psialpha( + nlm, 1, tau1, T1, + atom1->iw2l[ j0 ], // L1 + atom1->iw2m[ j0 ], // m1 + atom1->iw2n[ j0 ], // N1 + tau2, T2, + atom2->iw2l[ k0 ], // L2 + atom2->iw2m[ k0 ], // m2 + atom2->iw2n[ k0 ], // n2 + tau0, T0, I0, + this->inl_index, + this->gedm); + + // sum all projectors for one atom. + //GlobalC::LM.set_force (iw1_all, iw2_all, nlm[0], nlm[1], nlm[2], 'N'); + } + else + { + // mohan change the order on 2011-06-17 + // origin: < psi1 | beta > < beta | dpsi2/dtau > + //now: < psi1/dtau | beta > < beta | psi2 > + GlobalC::UOT.snap_psialpha( + nlm, 1, tau2, T2, + atom2->iw2l[ k0 ], // L2 + atom2->iw2m[ k0 ], // m2 + atom2->iw2n[ k0 ], // n2 + tau1, T1, + atom1->iw2l[ j0 ], // L1 + atom1->iw2m[ j0 ], // m1 + atom1->iw2n[ j0 ], // N1 + tau0, T0, I0, + this->inl_index, + this->gedm); + + //GlobalC::LM.DHloc_fixedR_x[nnr] += nlm[0]; + //GlobalC::LM.DHloc_fixedR_y[nnr] += nlm[1]; + //GlobalC::LM.DHloc_fixedR_z[nnr] += nlm[2]; + } + }//!calc_deri + }// distance + } // ad0 + ++nnr; + }// k + } // j + }// end is_adj + } // ad2 + } // I1 + } // T1 + + //timer::tick ("LCAO_gen_fixedH","build_Nonlocal_mu"); + return; +} #endif \ No newline at end of file diff --git a/source/src_lcao/LCAO_hamilt.cpp b/source/src_lcao/LCAO_hamilt.cpp index 9e2ae92ee8..a43daab780 100644 --- a/source/src_lcao/LCAO_hamilt.cpp +++ b/source/src_lcao/LCAO_hamilt.cpp @@ -116,20 +116,11 @@ void LCAO_Hamilt::calculate_Hgamma( const int &ik ) // Peize Lin add ik 2016- //ld.cal_gedm(LOC.wfc_dm_2d.dm_gamma[0]); //ld.build_v_delta_alpha(0); - if(GlobalV::GAMMA_ONLY_LOCAL) - { - GlobalC::ld.cal_gedm(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); - //GlobalC::ld.build_v_delta_alpha(0); - GlobalC::ld.build_v_delta_alpha_new(0); - GlobalC::ld.add_v_delta(); - } - else - { - - } - //GlobalC::ld.build_v_delta_mu(0); - - + GlobalC::ld.cal_gedm(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); + //GlobalC::ld.build_v_delta_alpha(0); + GlobalC::ld.build_v_delta_alpha_new(0); + GlobalC::ld.add_v_delta(); + //GlobalC::ld.build_v_delta_mu(0); } #endif @@ -281,6 +272,14 @@ void LCAO_Hamilt::calculate_Hk(const int &ik) // std::cout << " Folding matrix here." << std::endl; GlobalC::LM.update_Hloc2(); +#ifdef __DEEPKS //caoyu add 2021-07-26 for DeePKS + + if (GlobalV::deepks_scf) + { + //calculate dV from saved + GlobalC::ld.add_v_delta_k(ik); + } +#endif /* if(GlobalV::NURSE) { diff --git a/source/src_lcao/LOOP_elec.cpp b/source/src_lcao/LOOP_elec.cpp index 776fc6c796..579afca43e 100644 --- a/source/src_lcao/LOOP_elec.cpp +++ b/source/src_lcao/LOOP_elec.cpp @@ -157,6 +157,11 @@ void LOOP_elec::before_solver(const int &istep) { //load a model GlobalC::ld.deepks_pre_scf(INPUT.model_file); //caoyu add 2021-07-26 + if(!GlobalV::GAMMA_ONLY_LOCAL) + { + //if multi-k, build and save at beginning + GlobalC::ld.build_v_delta_alpha_new(0); + } } } #endif diff --git a/source/src_lcao/LOOP_ions.cpp b/source/src_lcao/LOOP_ions.cpp index 150245e23d..985d4c94d4 100644 --- a/source/src_lcao/LOOP_ions.cpp +++ b/source/src_lcao/LOOP_ions.cpp @@ -210,7 +210,22 @@ void LOOP_ions::opt_ions(void) if (GlobalV::deepks_scf) { //ld.print_H_V_delta(); //final H_delta - GlobalC::ld.cal_e_delta_band(GlobalC::LOC.wfc_dm_2d.dm_gamma); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + GlobalC::ld.cal_e_delta_band(GlobalC::LOC.wfc_dm_2d.dm_gamma); + } + else + { + for(int ik=0;iketot_harris += GlobalC::ld.E_delta; //caoyu add 2021-08-10 - GlobalC::ld.cal_e_delta_band(GlobalC::LOC.wfc_dm_2d.dm_gamma); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + GlobalC::ld.cal_e_delta_band(GlobalC::LOC.wfc_dm_2d.dm_gamma); + } + else + { + for(int ik=0;iketot_harris -= GlobalC::ld.e_delta_band; } #endif @@ -119,7 +134,22 @@ void energy::calculate_etot(void) if (GlobalV::deepks_scf) { this->etot += GlobalC::ld.E_delta; - GlobalC::ld.cal_e_delta_band(GlobalC::LOC.wfc_dm_2d.dm_gamma); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + GlobalC::ld.cal_e_delta_band(GlobalC::LOC.wfc_dm_2d.dm_gamma); + } + else + { + for(int ik=0;iketot -= GlobalC::ld.e_delta_band; } #endif From 9d4de5bc50de352540cca184458fede78d29e879 Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 29 Oct 2021 22:31:07 +0800 Subject: [PATCH 031/478] setup FFT --- source/module_pw/Makefile.Objects | 5 ++ source/module_pw/fft.cpp | 109 ++++++++++++++++++++++++++++++ source/module_pw/fft.h | 62 +++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 source/module_pw/Makefile.Objects create mode 100644 source/module_pw/fft.cpp create mode 100644 source/module_pw/fft.h diff --git a/source/module_pw/Makefile.Objects b/source/module_pw/Makefile.Objects new file mode 100644 index 0000000000..6abbc52af3 --- /dev/null +++ b/source/module_pw/Makefile.Objects @@ -0,0 +1,5 @@ +OBJ=intarray.o\ +matrix.o\ +matrix3.o\ +vector3.o\ + diff --git a/source/module_pw/fft.cpp b/source/module_pw/fft.cpp new file mode 100644 index 0000000000..27ac76e10b --- /dev/null +++ b/source/module_pw/fft.cpp @@ -0,0 +1,109 @@ +#include "fft.h" + +FFT::FFT() +{ + nx = ny = nz = 2; + int ns = 1; + int nplane = 1; + int ffttype = 1; + destroyp = true; +} + +FFT::~FFT() +{ + this->cleanFFT3D(); +} + +void FFT:: initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, int ffttype_in) +{ + this->nx = nx_in; + this->ny = ny_in; + this->nz = nz_in; + this->ns = ns_in; + this->nplane = nplane_in; + this->ffttype = ffttype_in; +} + +void FFT:: setupFFT3D() +{ + fftw_complex * tmp_in; + fftw_complex * tmp_out; + double *tmp_r; + //--------------------------------------------------------- + // 1 D + //--------------------------------------------------------- + tmp_in = fftw_malloc(sizeof(fftw_complex) * nz * ns); + tmp_out = fftw_malloc(sizeof(fftw_complex) * nz * ns); + tmp_r = fftw_malloc(sizeof(double) * nz * ns); + + // fftw_plan_many_dft(int rank, const int *n, int howmany, + // fftw_complex *in, const int *inembed, int istride, int idist, + // fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); + this->plan1for = fftw_plan_many_dft( 1, &this->nz, this->ns, + tmp_in, &this->nz, 1, this->nz, + tmp_out, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); + + this->plan1bac = fftw_plan_many_dft( 1, &this->nz, this->ns, + tmp_in, &this->nz, 1, this->nz, + tmp_out, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); + + this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, + tmp_r, &this->nz, 1, this->nz, + tmp_out, &this->nz, 1, this->nz, FFTW_MEASURE); + + this->plan1c2r = fftw_plan_many_dft_c2r( 1, &this->nz, this->ns, + tmp_in, &this->nz, 1, this->nz, + tmp_r, &this->nz, 1, this->nz, FFTW_MEASURE); + fftw_free(tmp_in); + fftw_free(tmp_out); + fftw_free(tmp_r); + + //--------------------------------------------------------- + // 2 D + //--------------------------------------------------------- + int nxy = this->nx * this-> ny; + tmp_in = fftw_malloc(sizeof(fftw_complex) * nxy * nplane); + tmp_out = fftw_malloc(sizeof(fftw_complex) * nxy * nplane); + tmp_r = fftw_malloc(sizeof(double) * nz * ns); + + int * nrank = {2, 2}; + this->plan1for = fftw_plan_many_dft( 2, nrank, this->nz, + tmp_in, nrank, 1, nxy, + tmp_out, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); + + this->plan1bac = fftw_plan_many_dft( 2, nrank, this->nz, + tmp_in, nrank, 1, nxy, + tmp_out, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); + + this->plan1r2c = fftw_plan_many_dft_r2c( 2, nrank, this->nz, + tmp_r, nrank, 1, nxy, + tmp_out, nrank, 1, nxy, FFTW_MEASURE); + + this->plan1c2r = fftw_plan_many_dft_c2r( 2, nrank, this->nz, + tmp_in, nrank, 1, nxy, + tmp_r, nrank, 1, nxy, FFTW_MEASURE); + + fftw_free(tmp_in); + fftw_free(tmp_out); + fftw_free(tmp_r); + + + destroyp = false; +} + + void FFT:: cleanFFT3D() + { + if(destroyp==true) return; + fftw_destroy_plan(plan1for); + fftw_destroy_plan(plan1bac); + fftw_destroy_plan(plan1r2c); + fftw_destroy_plan(plan1c2r); + fftw_destroy_plan(plan2for); + fftw_destroy_plan(plan2bac); + fftw_destroy_plan(plan2r2c); + fftw_destroy_plan(plan2c2r); + + destroyp == true; + return; + } + diff --git a/source/module_pw/fft.h b/source/module_pw/fft.h new file mode 100644 index 0000000000..0388732164 --- /dev/null +++ b/source/module_pw/fft.h @@ -0,0 +1,62 @@ +#ifndef FFT_H +#define FFT_H + +#include "fftw3.h" +#if defined(__FFTW3_MPI) && defined(__MPI) +#include +//#include "fftw3-mpi_mkl.h" +#endif + +#ifdef __MIX_PRECISION +#include "fftw3f.h" +#if defined(__FFTW3_MPI) && defined(__MPI) +#include "fftw3f-mpi.h" +//#include "fftw3-mpi_mkl.h" +#endif +#endif + + +class FFT: public Parallel_PW +{ +public: + + FFT(); + ~FFT(); + void initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, int ffttype_in); + void setupFFT3D(); + void executeFFT3D(); + void cleanFFT3D(); + + +public: + int nx,ny,nz; + int ns; //number of sticks + int nplane; //number of x-y planes + int ffttype; // type of FFT + + +private: + bool destroyp; + fftw_plan plan1_r2c; + fftw_plan plan1_c2r; + fftw_plan plan2_r2c; + fftw_plan plan2_c2r; + fftw_plan plan1_for; + fftw_plan plan1_bac; + fftw_plan plan2_for; + fftw_plan plan2_bac; +#ifdef __MIX_PRECISION + fftwf_plan planf1_r2c; + fftwf_plan planf1_c2r; + fftwf_plan planf2_r2c; + fftwf_plan planf2_c2r; + fftwf_plan planf1_for; + fftwf_plan planf1_bac; + fftwf_plan planf2_for; + fftwf_plan planf2_bac; +#endif + +}; + +#endif + From 1476084107773d25ed6c0045305c5a1de4860326 Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 29 Oct 2021 23:43:15 +0800 Subject: [PATCH 032/478] add execute for fft --- source/module_pw/Makefile.Objects | 1 + source/module_pw/fft.cpp | 179 +++++++++++++++++++++++++++--- source/module_pw/fft.h | 21 +++- 3 files changed, 184 insertions(+), 17 deletions(-) diff --git a/source/module_pw/Makefile.Objects b/source/module_pw/Makefile.Objects index 6abbc52af3..f12bea7248 100644 --- a/source/module_pw/Makefile.Objects +++ b/source/module_pw/Makefile.Objects @@ -2,4 +2,5 @@ OBJ=intarray.o\ matrix.o\ matrix3.o\ vector3.o\ +tool_quit.o\ diff --git a/source/module_pw/fft.cpp b/source/module_pw/fft.cpp index 27ac76e10b..d19c9c305c 100644 --- a/source/module_pw/fft.cpp +++ b/source/module_pw/fft.cpp @@ -1,4 +1,5 @@ #include "fft.h" +#include "../module_base/tool_quit.h" FFT::FFT() { @@ -23,8 +24,33 @@ void FFT:: initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, i this->nplane = nplane_in; this->ffttype = ffttype_in; } + +void FFT:: setupSFFT() +{ + if(this->ffttype == 1) + { + this->initpland(); +#ifdef __MIX_PRECISION + this->initplanf(); +#endif + } +#if defined(__FFTW3_MPI) && defined(__MPI) + else if(this->ffttype == 2) + { + this->initpland_mpi(); +#ifdef __MIX_PRECISION + this->initplanf_mpi(); +#endif + } +#endif + else + { + ModuleBase::WARNING_QUIT("FFT", "No such fft type!"); + } + return; +} -void FFT:: setupFFT3D() +void FFT :: initpland() { fftw_complex * tmp_in; fftw_complex * tmp_out; @@ -91,19 +117,144 @@ void FFT:: setupFFT3D() destroyp = false; } - void FFT:: cleanFFT3D() +#ifdef __MIX_PRECISION +void FFT :: initplanf() +{ + fftwf_complex * tmp_in; + fftwf_complex * tmp_out; + float *tmp_r; + //--------------------------------------------------------- + // 1 D + //--------------------------------------------------------- + tmp_in = fftw_malloc(sizeof(fftwf_complex) * nz * ns); + tmp_out = fftw_malloc(sizeof(fftwf_complex) * nz * ns); + tmp_r = fftw_malloc(sizeof(float) * nz * ns); + + // fftwf_plan_many_dft(int rank, const int *n, int howmany, + // fftwf_complex *in, const int *inembed, int istride, int idist, + // fftwf_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); + this->planf1for = fftwf_plan_many_dft( 1, &this->nz, this->ns, + tmp_in, &this->nz, 1, this->nz, + tmp_out, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); + + this->planf1bac = fftwf_plan_many_dft( 1, &this->nz, this->ns, + tmp_in, &this->nz, 1, this->nz, + tmp_out, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); + + this->planf1r2c = fftwf_plan_many_dft_r2c( 1, &this->nz, this->ns, + tmp_r, &this->nz, 1, this->nz, + tmp_out, &this->nz, 1, this->nz, FFTW_MEASURE); + + this->planf1c2r = fftwf_plan_many_dft_c2r( 1, &this->nz, this->ns, + tmp_in, &this->nz, 1, this->nz, + tmp_r, &this->nz, 1, this->nz, FFTW_MEASURE); + fftw_free(tmp_in); + fftw_free(tmp_out); + fftw_free(tmp_r); + + //--------------------------------------------------------- + // 2 D + //--------------------------------------------------------- + int nxy = this->nx * this-> ny; + tmp_in = fftw_malloc(sizeof(fftwf_complex) * nxy * nplane); + tmp_out = fftw_malloc(sizeof(fftwf_complex) * nxy * nplane); + tmp_r = fftw_malloc(sizeof(float) * nz * ns); + + int * nrank = {2, 2}; + this->planf1for = fftwf_plan_many_dft( 2, nrank, this->nz, + tmp_in, nrank, 1, nxy, + tmp_out, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); + + this->planf1bac = fftwf_plan_many_dft( 2, nrank, this->nz, + tmp_in, nrank, 1, nxy, + tmp_out, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); + + this->planf1r2c = fftwf_plan_many_dft_r2c( 2, nrank, this->nz, + tmp_r, nrank, 1, nxy, + tmp_out, nrank, 1, nxy, FFTW_MEASURE); + + this->planf1c2r = fftwf_plan_many_dft_c2r( 2, nrank, this->nz, + tmp_in, nrank, 1, nxy, + tmp_r, nrank, 1, nxy, FFTW_MEASURE); + + fftw_free(tmp_in); + fftw_free(tmp_out); + fftw_free(tmp_r); + + + destroyp = false; +} +#endif + +void FFT :: initpland_mpi() +{ + +} + +#ifdef __MIX_PRECISION +void FFT :: initplanf_mpi() +{ + +} +#endif + +void FFT:: cleanFFT() +{ + if(destroyp==true) return; + fftw_destroy_plan(plan1for); + fftw_destroy_plan(plan1bac); + fftw_destroy_plan(plan1r2c); + fftw_destroy_plan(plan1c2r); + fftw_destroy_plan(plan2for); + fftw_destroy_plan(plan2bac); + fftw_destroy_plan(plan2r2c); + fftw_destroy_plan(plan2c2r); +#ifdef __MIX_PRECISION + fftw_destroy_plan(planf1for); + fftw_destroy_plan(planf1bac); + fftw_destroy_plan(planf1r2c); + fftw_destroy_plan(planf1c2r); + fftw_destroy_plan(planf2for); + fftw_destroy_plan(planf2bac); + fftw_destroy_plan(planf2r2c); + fftw_destroy_plan(planf2c2r); +#endif + destroyp == true; + return; +} + +void FFT:: executefor(fftw_complex *in, fftw_complex* out, int n) +{ + if(n == 1) + { + fftw_execute_dft(this->plan1for, in , out) + } + else if(n==2) + { + fftw_execute_dft(this->plan2for, in , out) + } + else + { + ModuleBase::WARNING_QUIT("FFT", "We can only calculate 1D or 2D FFT"); + } + return; +} + + +void FFT:: executebac(fftw_complex *in, fftw_complex* out, int n) +{ + if(n == 1) { - if(destroyp==true) return; - fftw_destroy_plan(plan1for); - fftw_destroy_plan(plan1bac); - fftw_destroy_plan(plan1r2c); - fftw_destroy_plan(plan1c2r); - fftw_destroy_plan(plan2for); - fftw_destroy_plan(plan2bac); - fftw_destroy_plan(plan2r2c); - fftw_destroy_plan(plan2c2r); - - destroyp == true; - return; + fftw_execute_dft(this->plan1bac, in , out) } + else if(n==2) + { + fftw_execute_dft(this->plan2bac, in , out) + } + else + { + ModuleBase::WARNING_QUIT("FFT", "We can only calculate 1D or 2D FFT"); + } + return; +} diff --git a/source/module_pw/fft.h b/source/module_pw/fft.h index 0388732164..6454ba052d 100644 --- a/source/module_pw/fft.h +++ b/source/module_pw/fft.h @@ -23,10 +23,25 @@ class FFT: public Parallel_PW FFT(); ~FFT(); void initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, int ffttype_in); - void setupFFT3D(); - void executeFFT3D(); - void cleanFFT3D(); + void setupSFFT(); + void initpland(); + void initpland_mpi(); +#ifdef __MIX_PRECISION + void initplanf(); + void initplanf_mpi(); +#endif + void cleanFFT(); + void executefor(fftw_complex *, fftw_complex*, int n); + void executebac(fftw_complex *, fftw_complex*, int n); + void executer2c(double *, fftw_complex*, int n); + void executec2r(fftw_complex *, fftw_complex*, int n); +#ifdef __MIX_PRECISION + void executeffor(fftwf_complex *, fftwf_complex*, int n); + void executefbac(fftwf_complex *, fftwf_complex*, int n); + void executefr2c(float *, fftwf_complex*, int n); + void executefc2r(fftwf_complex *, float*, int n); +#endif public: int nx,ny,nz; From a5534e9a61c784535fd58a3fd215da2f6d24f8a1 Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Mon, 1 Nov 2021 11:12:03 +0800 Subject: [PATCH 033/478] Add macro: check_cufft. --- source/src_pw/global.h | 52 +++++++++++++++++++++++++++++++++ source/src_pw/hamilt.cu | 16 +++++----- source/src_pw/use_fft_kernel.cu | 28 ++++++++++-------- 3 files changed, 76 insertions(+), 20 deletions(-) diff --git a/source/src_pw/global.h b/source/src_pw/global.h index 7fd7253cb5..9affcc506c 100644 --- a/source/src_pw/global.h +++ b/source/src_pw/global.h @@ -75,6 +75,48 @@ static const char *_cusolverGetErrorEnum(cusolverStatus_t error) return ""; } +static const char *_cufftGetErrorEnum(cufftResult_t error) +{ + switch (error) + { + case CUFFT_SUCCESS: + return "CUFFT_SUCCESS"; + case CUFFT_INVALID_PLAN: + return "CUFFT_INVALID_PLAN"; + case CUFFT_ALLOC_FAILED: + return "CUFFT_ALLOC_FAILED"; + case CUFFT_INVALID_TYPE: + return "CUFFT_INVALID_TYPE"; + case CUFFT_INVALID_VALUE: + return "CUFFT_INVALID_VALUE"; + case CUFFT_INTERNAL_ERROR: + return "CUFFT_INTERNAL_ERROR"; + case CUFFT_EXEC_FAILED: + return "CUFFT_EXEC_FAILED"; + case CUFFT_SETUP_FAILED: + return "CUFFT_SETUP_FAILED"; + case CUFFT_INVALID_SIZE: + return "CUFFT_INVALID_SIZE"; + case CUFFT_UNALIGNED_DATA: + return "CUFFT_UNALIGNED_DATA"; + case CUFFT_INCOMPLETE_PARAMETER_LIST: + return "CUFFT_INCOMPLETE_PARAMETER_LIST"; + case CUFFT_INVALID_DEVICE: + return "CUFFT_INVALID_DEVICE"; + case CUFFT_PARSE_ERROR: + return "CUFFT_PARSE_ERROR"; + case CUFFT_NO_WORKSPACE: + return "CUFFT_NO_WORKSPACE"; + case CUFFT_NOT_IMPLEMENTED: + return "CUFFT_NOT_IMPLEMENTED"; + case CUFFT_LICENSE_ERROR: + return "CUFFT_LICENSE_ERROR"; + case CUFFT_NOT_SUPPORTED: + return "CUFFT_NOT_SUPPORTED"; + } + return ""; +} + #define CHECK_CUDA(func)\ {\ cudaError_t status = (func);\ @@ -104,6 +146,16 @@ static const char *_cusolverGetErrorEnum(cusolverStatus_t error) __FILE__, __LINE__, _cusolverGetErrorEnum(status), status);\ }\ } + +#define CHECK_CUFFT(func)\ +{\ + cufftResult_t status = (func);\ + if(status != CUFFT_SUCCESS)\ + {\ + printf("In File %s : CUFFT API failed at line %d with error: %s (%d)\n",\ + __FILE__, __LINE__, _cufftGetErrorEnum(status), status);\ + }\ +} #endif diff --git a/source/src_pw/hamilt.cu b/source/src_pw/hamilt.cu index 5634343afb..8bf738cd33 100644 --- a/source/src_pw/hamilt.cu +++ b/source/src_pw/hamilt.cu @@ -129,11 +129,11 @@ void Hamilt::diagH_pw( int nkb = GlobalC::ppcell.nkb; if(iter < 0) { - cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); + CHECK_CUFFT(cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C)); } else { - cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); + CHECK_CUFFT(cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z)); } CHECK_CUDA(cudaMalloc((void**)&d_wf_evc, GlobalV::NBANDS * GlobalC::wf.npwx * GlobalV::NPOL * sizeof(double2))); @@ -212,7 +212,7 @@ void Hamilt::diagH_pw( hamilt_cast_d2f<<>>(f_precondition, d_precondition, DIM_CG_CUDA); // add vkb_c parameter hamilt_cast_d2f<<>>(f_vkb_c, d_vkb_c, GlobalC::wf.npwx*nkb); - // cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C); + // CHECK_CUFFT(cufftPlan3d(&GlobalC::UFFT.fft_handle, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_C2C)); // cout<<"Do float CG ..."<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); @@ -107,9 +108,10 @@ void RoundTrip_kernel(const float2 *psi, const float *vr, const int *fft_index, kernel_roundtrip<<>>(GlobalC::pw.nrxx, psic, vr); // cufftHandle cufftplan_gpu2; - // cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - cufftExecC2C(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_FORWARD); - // cufftDestroy(cufftplan_gpu); + // CHECK_CUFFT(cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z)); + CHECK_CUFFT(cufftExecC2C(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_FORWARD)); + cudaDeviceSynchronize(); + // CHECK_CUFFT(cufftDestroy(cufftplan_gpu)); // Reorder_psi_minus(psic, ordered_psi); @@ -153,9 +155,10 @@ void RoundTrip_kernel(const double2 *psi, const double *vr, const int *fft_index // Reorder_psi_plus(ordered_psi, psic); // cufftHandle cufftplan_gpu; - // cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - cufftExecZ2Z(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_INVERSE); - // cufftDestroy(cufftplan_gpu); + // CHECK_CUFFT(cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z)); + CHECK_CUFFT(cufftExecZ2Z(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_INVERSE)); + cudaDeviceSynchronize(); + // CHECK_CUFFT(cufftDestroy(cufftplan_gpu)); // int block3 = (GlobalC::pw.nrxx + thread - 1) / thread; // kernel_normalization<<>>(GlobalC::pw.nrxx, psic, (double)(GlobalC::pw.nrxx)); @@ -171,9 +174,10 @@ void RoundTrip_kernel(const double2 *psi, const double *vr, const int *fft_index kernel_roundtrip<<>>(GlobalC::pw.nrxx, psic, vr); // cufftHandle cufftplan_gpu2; - // cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z); - cufftExecZ2Z(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_FORWARD); - // cufftDestroy(cufftplan_gpu); + // CHECK_CUFFT(cufftPlan3d(&cufftplan_gpu, GlobalC::pw.nx, GlobalC::pw.ny, GlobalC::pw.nz, CUFFT_Z2Z)); + CHECK_CUFFT(cufftExecZ2Z(GlobalC::UFFT.fft_handle, psic, psic, CUFFT_FORWARD)); + cudaDeviceSynchronize(); + // CHECK_CUFFT(cufftDestroy(cufftplan_gpu)); // Reorder_psi_minus(psic, ordered_psi); From 61e6f7573230aab6b382b659639c7d14441a0f54 Mon Sep 17 00:00:00 2001 From: qianrui Date: Mon, 1 Nov 2021 11:57:45 +0800 Subject: [PATCH 034/478] store spaces for fft --- source/module_pw/fft.cpp | 248 +++++++++++++++++++++------------------ source/module_pw/fft.h | 27 +++-- 2 files changed, 147 insertions(+), 128 deletions(-) diff --git a/source/module_pw/fft.cpp b/source/module_pw/fft.cpp index d19c9c305c..3362f3572d 100644 --- a/source/module_pw/fft.cpp +++ b/source/module_pw/fft.cpp @@ -4,30 +4,65 @@ FFT::FFT() { nx = ny = nz = 2; - int ns = 1; - int nplane = 1; - int ffttype = 1; + ns = 1; + nplane = 1; + mpifft = false; destroyp = true; + c_rspace = c_gspace = NULL; + r_rspace = r_gspace = NULL; +#ifdef __MIX_PRECISION + destroypf = true; + cf_rspace = cf_gspace = NULL; + rf_rspace = rf_gspace = NULL; +#endif } FFT::~FFT() { - this->cleanFFT3D(); + this->cleanFFT(); + if(c_gspace!=NULL) fftw_free(c_gspace); + if(c_rspace!=NULL) fftw_free(c_rspace); + if(r_gspace!=NULL) fftw_free(r_gspace); + if(r_rspace!=NULL) fftw_free(r_rspace); +#ifdef __MIX_PRECISION + if(cf_gspace!=NULL) fftw_free(cf_gspace); + if(cf_rspace!=NULL) fftw_free(cf_rspace); + if(rf_gspace!=NULL) fftw_free(rf_gspace); + if(rf_rspace!=NULL) fftw_free(rf_rspace); +#endif } -void FFT:: initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, int ffttype_in) +void FFT:: initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, bool mpifft_in) { this->nx = nx_in; this->ny = ny_in; this->nz = nz_in; this->ns = ns_in; this->nplane = nplane_in; - this->ffttype = ffttype_in; + this->mpifft = mpifft_in; + if(!this->mpifft) + { + c_gspace = fftw_malloc(sizeof(fftw_complex) * this->nz * this->ns); + r_gspace = fftw_malloc(sizeof(double) * this->nz * this->ns); + c_rspace = fftw_malloc(sizeof(fftw_complex) * this->nx * this->ny * nplane); + r_rspace = fftw_malloc(sizeof(double) * this->nx * this->ny * nplane); +#ifdef __MIX_PRECISION + cf_gspace = fftw_malloc(sizeof(fftwf_complex) * this->nz * this->ns); + rf_gspace = fftw_malloc(sizeof(float) * this->nz * this->ns); + cf_rspace = fftw_malloc(sizeof(fftwf_complex) * this->nx * this->ny * nplane); + rf_rspace = fftw_malloc(sizeof(float) * this->nx * this->ny * nplane); +#endif + } + else + { + + } + } -void FFT:: setupSFFT() +void FFT:: setupFFT() { - if(this->ffttype == 1) + if(!this->mpifft) { this->initpland(); #ifdef __MIX_PRECISION @@ -35,7 +70,7 @@ void FFT:: setupSFFT() #endif } #if defined(__FFTW3_MPI) && defined(__MPI) - else if(this->ffttype == 2) + else { this->initpland_mpi(); #ifdef __MIX_PRECISION @@ -43,146 +78,106 @@ void FFT:: setupSFFT() #endif } #endif - else - { - ModuleBase::WARNING_QUIT("FFT", "No such fft type!"); - } return; } void FFT :: initpland() { - fftw_complex * tmp_in; - fftw_complex * tmp_out; - double *tmp_r; //--------------------------------------------------------- // 1 D //--------------------------------------------------------- - tmp_in = fftw_malloc(sizeof(fftw_complex) * nz * ns); - tmp_out = fftw_malloc(sizeof(fftw_complex) * nz * ns); - tmp_r = fftw_malloc(sizeof(double) * nz * ns); // fftw_plan_many_dft(int rank, const int *n, int howmany, // fftw_complex *in, const int *inembed, int istride, int idist, // fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); this->plan1for = fftw_plan_many_dft( 1, &this->nz, this->ns, - tmp_in, &this->nz, 1, this->nz, - tmp_out, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); + c_gspace, &this->nz, 1, this->nz, + c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); this->plan1bac = fftw_plan_many_dft( 1, &this->nz, this->ns, - tmp_in, &this->nz, 1, this->nz, - tmp_out, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); + c_gspace, &this->nz, 1, this->nz, + c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, - tmp_r, &this->nz, 1, this->nz, - tmp_out, &this->nz, 1, this->nz, FFTW_MEASURE); + r_gspace, &this->nz, 1, this->nz, + c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); this->plan1c2r = fftw_plan_many_dft_c2r( 1, &this->nz, this->ns, - tmp_in, &this->nz, 1, this->nz, - tmp_r, &this->nz, 1, this->nz, FFTW_MEASURE); - fftw_free(tmp_in); - fftw_free(tmp_out); - fftw_free(tmp_r); + c_gspace, &this->nz, 1, this->nz, + r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); //--------------------------------------------------------- // 2 D //--------------------------------------------------------- int nxy = this->nx * this-> ny; - tmp_in = fftw_malloc(sizeof(fftw_complex) * nxy * nplane); - tmp_out = fftw_malloc(sizeof(fftw_complex) * nxy * nplane); - tmp_r = fftw_malloc(sizeof(double) * nz * ns); int * nrank = {2, 2}; this->plan1for = fftw_plan_many_dft( 2, nrank, this->nz, - tmp_in, nrank, 1, nxy, - tmp_out, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); + c_rspace, nrank, 1, nxy, + c_rspace, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); this->plan1bac = fftw_plan_many_dft( 2, nrank, this->nz, - tmp_in, nrank, 1, nxy, - tmp_out, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); + c_rspace, nrank, 1, nxy, + c_rspace, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); this->plan1r2c = fftw_plan_many_dft_r2c( 2, nrank, this->nz, - tmp_r, nrank, 1, nxy, - tmp_out, nrank, 1, nxy, FFTW_MEASURE); + r_rspace, nrank, 1, nxy, + c_rspace, nrank, 1, nxy, FFTW_MEASURE); this->plan1c2r = fftw_plan_many_dft_c2r( 2, nrank, this->nz, - tmp_in, nrank, 1, nxy, - tmp_r, nrank, 1, nxy, FFTW_MEASURE); - - fftw_free(tmp_in); - fftw_free(tmp_out); - fftw_free(tmp_r); - - + c_rspace, nrank, 1, nxy, + r_rspace, nrank, 1, nxy, FFTW_MEASURE); destroyp = false; } #ifdef __MIX_PRECISION void FFT :: initplanf() { - fftwf_complex * tmp_in; - fftwf_complex * tmp_out; - float *tmp_r; //--------------------------------------------------------- // 1 D //--------------------------------------------------------- - tmp_in = fftw_malloc(sizeof(fftwf_complex) * nz * ns); - tmp_out = fftw_malloc(sizeof(fftwf_complex) * nz * ns); - tmp_r = fftw_malloc(sizeof(float) * nz * ns); - // fftwf_plan_many_dft(int rank, const int *n, int howmany, - // fftwf_complex *in, const int *inembed, int istride, int idist, - // fftwf_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); - this->planf1for = fftwf_plan_many_dft( 1, &this->nz, this->ns, - tmp_in, &this->nz, 1, this->nz, - tmp_out, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); + // fftw_plan_many_dft(int rank, const int *n, int howmany, + // fftw_complex *in, const int *inembed, int istride, int idist, + // fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); + this->plan1for = fftw_plan_many_dft( 1, &this->nz, this->ns, + c_gspace, &this->nz, 1, this->nz, + c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); - this->planf1bac = fftwf_plan_many_dft( 1, &this->nz, this->ns, - tmp_in, &this->nz, 1, this->nz, - tmp_out, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); + this->plan1bac = fftw_plan_many_dft( 1, &this->nz, this->ns, + c_gspace, &this->nz, 1, this->nz, + c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); - this->planf1r2c = fftwf_plan_many_dft_r2c( 1, &this->nz, this->ns, - tmp_r, &this->nz, 1, this->nz, - tmp_out, &this->nz, 1, this->nz, FFTW_MEASURE); + this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, + r_gspace, &this->nz, 1, this->nz, + c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); - this->planf1c2r = fftwf_plan_many_dft_c2r( 1, &this->nz, this->ns, - tmp_in, &this->nz, 1, this->nz, - tmp_r, &this->nz, 1, this->nz, FFTW_MEASURE); - fftw_free(tmp_in); - fftw_free(tmp_out); - fftw_free(tmp_r); + this->plan1c2r = fftw_plan_many_dft_c2r( 1, &this->nz, this->ns, + c_gspace, &this->nz, 1, this->nz, + r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); //--------------------------------------------------------- // 2 D //--------------------------------------------------------- int nxy = this->nx * this-> ny; - tmp_in = fftw_malloc(sizeof(fftwf_complex) * nxy * nplane); - tmp_out = fftw_malloc(sizeof(fftwf_complex) * nxy * nplane); - tmp_r = fftw_malloc(sizeof(float) * nz * ns); int * nrank = {2, 2}; - this->planf1for = fftwf_plan_many_dft( 2, nrank, this->nz, - tmp_in, nrank, 1, nxy, - tmp_out, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); + this->plan1for = fftw_plan_many_dft( 2, nrank, this->nz, + c_rspace, nrank, 1, nxy, + c_rspace, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); - this->planf1bac = fftwf_plan_many_dft( 2, nrank, this->nz, - tmp_in, nrank, 1, nxy, - tmp_out, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); + this->plan1bac = fftw_plan_many_dft( 2, nrank, this->nz, + c_rspace, nrank, 1, nxy, + c_rspace, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); - this->planf1r2c = fftwf_plan_many_dft_r2c( 2, nrank, this->nz, - tmp_r, nrank, 1, nxy, - tmp_out, nrank, 1, nxy, FFTW_MEASURE); + this->plan1r2c = fftw_plan_many_dft_r2c( 2, nrank, this->nz, + r_rspace, nrank, 1, nxy, + c_rspace, nrank, 1, nxy, FFTW_MEASURE); - this->planf1c2r = fftwf_plan_many_dft_c2r( 2, nrank, this->nz, - tmp_in, nrank, 1, nxy, - tmp_r, nrank, 1, nxy, FFTW_MEASURE); - - fftw_free(tmp_in); - fftw_free(tmp_out); - fftw_free(tmp_r); - - - destroyp = false; + this->plan1c2r = fftw_plan_many_dft_c2r( 2, nrank, this->nz, + c_rspace, nrank, 1, nxy, + r_rspace, nrank, 1, nxy, FFTW_MEASURE); + destroypf = false; } #endif @@ -209,7 +204,10 @@ void FFT:: cleanFFT() fftw_destroy_plan(plan2bac); fftw_destroy_plan(plan2r2c); fftw_destroy_plan(plan2c2r); + destroyp == true; + #ifdef __MIX_PRECISION + if(destroypf==true) return; fftw_destroy_plan(planf1for); fftw_destroy_plan(planf1bac); fftw_destroy_plan(planf1r2c); @@ -218,43 +216,59 @@ void FFT:: cleanFFT() fftw_destroy_plan(planf2bac); fftw_destroy_plan(planf2r2c); fftw_destroy_plan(planf2c2r); + destroypf == true; #endif - destroyp == true; + return; } -void FFT:: executefor(fftw_complex *in, fftw_complex* out, int n) +void executefftw(string instr); { - if(n == 1) - { - fftw_execute_dft(this->plan1for, in , out) - } - else if(n==2) - { - fftw_execute_dft(this->plan2for, in , out) - } + if(instr == "1for") + fftw_execute_dft(this->plan1for); + else if(instr == "2for") + fftw_execute_dft(this->plan2for); + else if(instr == "1bac") + fftw_execute_dft(this->plan1bac); + else if(instr == "2bac") + fftw_execute_dft(this->plan2bac); + else if(instr == "1r2c") + fftw_execute_dft(this->plan1r2c); + else if(instr == "2r2c") + fftw_execute_dft(this->plan2r2c); + else if(instr == "1c2r") + fftw_execute_dft(this->plan1c2r); + else if(instr == "2c2r") + fftw_execute_dft(this->plan2c2r); else { - ModuleBase::WARNING_QUIT("FFT", "We can only calculate 1D or 2D FFT"); + ModuleBase::WARNING_QUIT("FFT", "Wrong input for excutefftw"); } - return; } - -void FFT:: executebac(fftw_complex *in, fftw_complex* out, int n) +#ifdef __MIX_PRECISION +void executefftwf(string instr); { - if(n == 1) - { - fftw_execute_dft(this->plan1bac, in , out) - } - else if(n==2) - { - fftw_execute_dft(this->plan2bac, in , out) - } + if(instr == "1for") + fftwf_execute_dft(this->planf1for); + else if(instr == "2for") + fftwf_execute_dft(this->planf2for); + else if(instr == "1bac") + fftwf_execute_dft(this->planf1bac); + else if(instr == "2bac") + fftwf_execute_dft(this->planf2bac); + else if(instr == "1r2c") + fftwf_execute_dft(this->planf1r2c); + else if(instr == "2r2c") + fftwf_execute_dft(this->planf2r2c); + else if(instr == "1c2r") + fftwf_execute_dft(this->planf1c2r); + else if(instr == "2c2r") + fftwf_execute_dft(this->planf2c2r); else { - ModuleBase::WARNING_QUIT("FFT", "We can only calculate 1D or 2D FFT"); + ModuleBase::WARNING_QUIT("FFT", "Wrong input for excutefftwf"); } - return; } +#endif diff --git a/source/module_pw/fft.h b/source/module_pw/fft.h index 6454ba052d..3f657117be 100644 --- a/source/module_pw/fft.h +++ b/source/module_pw/fft.h @@ -22,8 +22,8 @@ class FFT: public Parallel_PW FFT(); ~FFT(); - void initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, int ffttype_in); - void setupSFFT(); + void initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, bool mpifft_in = false); + void setupFFT(); void initpland(); void initpland_mpi(); #ifdef __MIX_PRECISION @@ -32,22 +32,26 @@ class FFT: public Parallel_PW #endif void cleanFFT(); - void executefor(fftw_complex *, fftw_complex*, int n); - void executebac(fftw_complex *, fftw_complex*, int n); - void executer2c(double *, fftw_complex*, int n); - void executec2r(fftw_complex *, fftw_complex*, int n); + void executefftw(string instr); #ifdef __MIX_PRECISION - void executeffor(fftwf_complex *, fftwf_complex*, int n); - void executefbac(fftwf_complex *, fftwf_complex*, int n); - void executefr2c(float *, fftwf_complex*, int n); - void executefc2r(fftwf_complex *, float*, int n); + void executefftwf(string instr); #endif public: int nx,ny,nz; int ns; //number of sticks int nplane; //number of x-y planes - int ffttype; // type of FFT + bool mpifft; // if use mpi fft, only used when define __FFTW3_MPI + fftw_complex * c_gspace; //complex number space for g, [ns * nz] + fftw_complex * c_rspace; //complex number space for r, [nplane * nx *ny] + double *r_gspace; //real number space for g, [ns * nz] + double *r_rspace; //real number space for r, [nplane * nx *ny] +#ifdef __MIX_PRECISION + fftwf_complex * cf_gspace; //complex number space for g, [ns * nz] + fftwf_complex * cf_rspace; //complex number space for r, [nplane * nx *ny] + float *rf_gspace; //real number space for g, [ns * nz] + float *rf_rspace; //real number space for r, [nplane * nx *ny] +#endif private: @@ -61,6 +65,7 @@ class FFT: public Parallel_PW fftw_plan plan2_for; fftw_plan plan2_bac; #ifdef __MIX_PRECISION + bool destroypf; fftwf_plan planf1_r2c; fftwf_plan planf1_c2r; fftwf_plan planf2_r2c; From d7f880777e5b2d32d7c7e7e5ace2cd1e18cb58be Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 1 Nov 2021 14:19:43 +0800 Subject: [PATCH 035/478] deepks : fix cmake --- source/src_lcao/CMakeLists.txt | 18 ++++++++++++------ source/src_parallel/CMakeLists.txt | 11 +++++++---- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/source/src_lcao/CMakeLists.txt b/source/src_lcao/CMakeLists.txt index ec2fab15a7..46bd43f4df 100644 --- a/source/src_lcao/CMakeLists.txt +++ b/source/src_lcao/CMakeLists.txt @@ -1,6 +1,4 @@ -add_library( - lcao - OBJECT +list(APPEND objects DM_gamma.cpp DM_k.cpp ELEC_cbands_gamma.cpp @@ -62,7 +60,15 @@ add_library( ) if(ENABLE_DEEPKS) - target_sources(lcao PRIVATE LCAO_descriptor.cpp) - target_sources(lcao PRIVATE LCAO_descriptor_new.cpp) - target_sources(lcao PRIVATE LCAO_descriptor_old.cpp) + list(APPEND objects + LCAO_descriptor.cpp + LCAO_descriptor_new.cpp + LCAO_descriptor_old.cpp + ) endif() + +add_library( + lcao + OBJECT + ${objects} +) \ No newline at end of file diff --git a/source/src_parallel/CMakeLists.txt b/source/src_parallel/CMakeLists.txt index 4547ba4b1c..786c427e25 100644 --- a/source/src_parallel/CMakeLists.txt +++ b/source/src_parallel/CMakeLists.txt @@ -1,6 +1,4 @@ -add_library( - parallel - OBJECT +list(APPEND objects ft.cpp parallel_common.cpp parallel_global.cpp @@ -13,6 +11,11 @@ add_library( ) if(ENABLE_DEEPKS) - target_sources(parallel PRIVATE parallel_deepks.cpp) +list(APPEND objects parallel_deepks.cpp) endif() +add_library( + parallel + OBJECT + ${objects} +) \ No newline at end of file From d210767a0ec480bd7814e96e9fa9ca8d92fc7b09 Mon Sep 17 00:00:00 2001 From: Asuna981002 <2001210596@pku.edu.cn> Date: Mon, 1 Nov 2021 14:48:37 +0800 Subject: [PATCH 036/478] Replace c_bands with c_bands_cuda. --- source/src_pw/CMakeLists.txt | 5 +- source/src_pw/electrons.cu | 604 +++++++++++++++++++++++++++++++++++ 2 files changed, 608 insertions(+), 1 deletion(-) create mode 100644 source/src_pw/electrons.cu diff --git a/source/src_pw/CMakeLists.txt b/source/src_pw/CMakeLists.txt index 685892b036..a49fccca77 100644 --- a/source/src_pw/CMakeLists.txt +++ b/source/src_pw/CMakeLists.txt @@ -12,7 +12,7 @@ list(APPEND objects diago_cg.cpp diago_david.cpp efield.cpp - electrons.cpp + # electrons.cpp energy.cpp forces.cpp global.cpp @@ -61,6 +61,7 @@ list(APPEND objects if(USE_CUDA) list(APPEND objects diago_cg.cu + electrons.cu hamilt.cu hamilt_pw.cu use_fft_kernel.cu @@ -69,6 +70,8 @@ else() list(APPEND objects hamilt.cpp hamilt_pw.cpp + diago_cg.cpp + electrons.cpp ) endif() diff --git a/source/src_pw/electrons.cu b/source/src_pw/electrons.cu new file mode 100644 index 0000000000..844a3353e7 --- /dev/null +++ b/source/src_pw/electrons.cu @@ -0,0 +1,604 @@ +#include "tools.h" +#include "global.h" +#include "electrons.h" +#include "../src_pw/symmetry_rho.h" +#include "../src_io/print_info.h" +#include "../src_io/wf_io.h" +#include "../src_io/chi0_hilbert.h" +#include "../src_io/chi0_standard.h" +#include "../src_io/epsilon0_pwscf.h" +#include "../src_io/epsilon0_vasp.h" +#include "../src_io/to_wannier90.h" +#include "../src_io/berryphase.h" +// new +#include "H_Ewald_pw.h" + +__global__ void kernel_pred1(double *data, int size) +{ + int idx = blockDim.x * blockIdx.x + threadIdx.x; + if(data[idx] < 1.0 && idx < size) + { + data[idx] = 1.0; + } +} + +__global__ void kernel_pred2(double *data, int size) +{ + int idx = blockDim.x * blockIdx.x + threadIdx.x; + if(idx < size) + { + data[idx] = 1 + data[idx] + sqrt(1 + (data[idx] - 1) * (data[idx] - 1)); + } +} + +__global__ void kernel_set_ones(double* data, int size) +{ + int idx = blockDim.x * blockIdx.x + threadIdx.x; + if(idx < size) + { + data[idx] = 1.0; + } +} + +double Electrons::avg_iter = 0; + +Electrons::Electrons() +{ + iter = 0; + test = 0; + unit = 0; + delta_total_energy = 0.0; +} + +Electrons::~Electrons() +{ +} + +void Electrons::non_self_consistent(const int &istep) +{ + ModuleBase::TITLE("Electrons","non_self_consistent"); + ModuleBase::timer::tick("Electrons","non_self_consistent"); + + //======================================== + // diagonalization of the KS hamiltonian + // ======================================= + Electrons::c_bands(istep); + + GlobalV::ofs_running << "\n End of Band Structure Calculation \n" << std::endl; + + + for (int ik = 0; ik < GlobalC::kv.nks; ik++) + { + if (GlobalV::NSPIN==2) + { + if (ik == 0) GlobalV::ofs_running << " spin up :" << std::endl; + if (ik == ( GlobalC::kv.nks / 2)) GlobalV::ofs_running << " spin down :" << std::endl; + } + //out.printV3(GlobalV::ofs_running, GlobalC::kv.kvec_c[ik]); + + GlobalV::ofs_running << " k-points" << ik+1 + << "(" << GlobalC::kv.nkstot << "): " + << GlobalC::kv.kvec_c[ik].x + << " " << GlobalC::kv.kvec_c[ik].y + << " " << GlobalC::kv.kvec_c[ik].z << std::endl; + + for (int ib = 0; ib < GlobalV::NBANDS; ib++) + { + GlobalV::ofs_running << " spin" << GlobalC::kv.isk[ik]+1 + << "_final_band " << ib+1 + << " " << GlobalC::wf.ekb[ik][ib] * ModuleBase::Ry_to_eV + << " " << GlobalC::wf.wg(ik, ib)*GlobalC::kv.nks << std::endl; + } + GlobalV::ofs_running << std::endl; + } + + + // add by jingan in 2018.11.7 + if(GlobalV::CALCULATION == "nscf" && INPUT.towannier90) + { + toWannier90 myWannier(GlobalC::kv.nkstot,GlobalC::ucell.G); + myWannier.init_wannier(); + } + + //======================================================= + // Do a Berry phase polarization calculation if required + //======================================================= + + if (berryphase::berry_phase_flag && ModuleSymmetry::Symmetry::symm_flag == 0) + { + berryphase bp; + bp.Macroscopic_polarization(); + } + + ModuleBase::timer::tick("Electrons","non_self_consistent"); + return; +} + + +#include "occupy.h" +void Electrons::self_consistent(const int &istep) +{ + ModuleBase::timer::tick("Electrons","self_consistent"); + + // mohan update 2021-02-25 + H_Ewald_pw::compute_ewald(GlobalC::ucell, GlobalC::pw); + + set_ethr(); + + this->unit = 0; + + if(GlobalV::OUT_LEVEL=="ie") + { + std::cout << std::setprecision(12); + std::cout<< " " << std::setw(7)<< "ITER"; // pengfei Li added 2015-1-31 + + if(GlobalV::NSPIN==2) + { + std::cout<conv_elec = false;//mohan add 2008-05-25 + + + // mohan add 2010/3/25 + // output the charge mixing data : + // iteration && dr2. + // std::stringstream ss; + // ss << GlobalV::global_out_dir << "ChargeMixing.dat"; + // std::ofstream ofs_mix; + + // if(GlobalV::MY_RANK==0) + // { + // ofs_mix.open(ss.str().c_str()); + // } + // ### + + for (this->iter = 1;iter <= GlobalV::NITER;iter++) + { + GlobalV::ofs_running + << "\n PW ALGORITHM --------------- ION=" << std::setw(4) << istep + 1 + << " ELEC=" << std::setw(4) << iter + << "--------------------------------\n"; + + // mohan add 2010-07-16 + if(iter==1) GlobalC::CHR.set_new_e_iteration(true); + else GlobalC::CHR.set_new_e_iteration(false); + + // record the start time. + // the clock is not accurate, needs to be fixed 2021-03-15 mohan + clock_t start=std::clock(); + + //(1) set converged threshold, + // automatically updated during self consistency. + //this->update_ethr(iter); + if(GlobalV::FINAL_SCF && iter==1) GlobalV::ETHR = 1.0e-2; + else this->update_ethr(iter); + if(GlobalV::FINAL_SCF && iter==1) + { + init_mixstep_final_scf(); + //GlobalC::CHR.irstep=0; + //GlobalC::CHR.idstep=0; + //GlobalC::CHR.totstep=0; + } + + // mohan move harris functional to here, 2012-06-05 + // use 'rho(in)' and 'v_h and v_xc'(in) + GlobalC::en.calculate_harris(1); + + // first_iter_again: // Peize Lin delete 2019-05-01 + + // calculate exact-exchange +#ifdef __LCAO + switch(GlobalC::xcf.iexch_now) // Peize Lin add 2019-03-09 + { + case 5: case 6: case 9: + if( !GlobalC::exx_global.info.separate_loop ) + { + GlobalC::exx_lip.cal_exx(); + } + break; + } +#endif + //(2) save change density as previous charge, + // prepared fox mixing. + GlobalC::CHR.save_rho_before_sum_band(); + + bool onescf = false; + scf_step: + //(3) calculate band energy using cg or davidson method. + // output the new eigenvalues and wave functions. + this->c_bands(istep); + + if (check_stop_now()) + { + ModuleBase::timer::tick("Electrons","self_consistent"); + return; + } + + GlobalC::en.eband = 0.0; + GlobalC::en.demet = 0.0; + GlobalC::en.ef = 0.0; + GlobalC::en.ef_up = 0.0; + GlobalC::en.ef_dw = 0.0; + + //(4) calculate weights of each band. + Occupy::calculate_weights(); + + //(5) calculate new charge density according to + // new wave functions. + + // calculate the new eband here. + GlobalC::CHR.sum_band(); + + + // add exx +#ifdef __LCAO + GlobalC::en.set_exx(); // Peize Lin add 2019-03-09 +#endif + + //(6) calculate the delta_harris energy + // according to new charge density. + // mohan add 2009-01-23 + GlobalC::en.calculate_harris(2); + + Symmetry_rho srho; + for(int is=0; is= 0 ) GlobalC::CHR.rho = GlobalC::CHR.rho_save; + //GlobalV::ofs_running << "\n start next iterate for idum "; + } //END DO + + ModuleBase::timer::tick("Electrons","self_consistent"); + return; +} // end Electrons + + +bool Electrons::check_stop_now(void) +{ + bool check_stop_now = false; + + if (check_stop_now) + { + conv_elec = false; + } + + return check_stop_now; +} // END FUNCTION check_stop_now + + +void Electrons::c_bands(const int &istep) +{ + if (GlobalV::test_elec) ModuleBase::TITLE("Electrons_CUDA","c_bands"); + ModuleBase::timer::tick("Electrons_CUDA", "c_bands"); + + int precondition_type = 2; + + double *h_diag; + CHECK_CUDA(cudaMalloc((void**)&h_diag, GlobalC::wf.npwx * GlobalV::NPOL * sizeof(double))); + + avg_iter = 0.0; + + GlobalV::ofs_running << " " <>>(h_diag, GlobalC::wf.npw); + if(GlobalV::NPOL==2) + { + CHECK_CUDA(cudaMemcpy(&h_diag[GlobalC::wf.npwx], h_diag, GlobalC::wf.npw*sizeof(double), cudaMemcpyDeviceToDevice)); + } + cudaDeviceSynchronize(); + } + else if (precondition_type == 2) + { + CHECK_CUDA(cudaMemcpy(h_diag, &GlobalC::wf.g2kin[0], GlobalC::wf.npw*sizeof(double), cudaMemcpyHostToDevice)); + int thread = 512; + int block = (GlobalC::wf.npw + thread - 1) / thread; + kernel_pred2<<>>(h_diag, GlobalC::wf.npw); + if(GlobalV::NPOL==2) + { + CHECK_CUDA(cudaMemcpy(&h_diag[GlobalC::wf.npwx], h_diag, GlobalC::wf.npw*sizeof(double), cudaMemcpyDeviceToDevice)); + } + } + + //h_diag can't be zero! //zhengdy-soc + if(GlobalV::NPOL==2) + { + int diff_size = GlobalC::wf.npwx - GlobalC::wf.npw; + if(diff_size > 0) + { + int thread = 512; + int block = (diff_size + thread - 1) / thread; + kernel_set_ones<<>>(&h_diag[GlobalC::wf.npw], diff_size); + kernel_set_ones<<>>(&h_diag[GlobalC::wf.npw + GlobalC::wf.npwx], diff_size); + } + } + + clock_t start=clock(); + + //============================================================ + // diago the hamiltonian!! + // In plane wave method, firstly using diagH_subspace to diagnolize, + // then using cg method. + // + // In localized orbital presented in plane wave case, + // only use diagH_subspace. + //============================================================= + double avg_iter_k = 0.0; + GlobalC::hm.diagH_pw(istep, this->iter, ik, h_diag, avg_iter_k); + + avg_iter += avg_iter_k; + + GlobalC::en.print_band(ik); //mohan add 2012-04-16 + + clock_t finish=clock(); + const double duration = static_cast(finish - start) / CLOCKS_PER_SEC; + + GlobalV::ofs_running << " " << std::setw(8) + << ik+1 << std::setw(15) + << avg_iter_k << std::setw(15) << duration << std::endl; + }//End K Loop + + //if (!LOCAL_BASIS) xiaohui modify 2013-09-02 + if(GlobalV::BASIS_TYPE=="pw") //xiaohui add 2013-09-02 + { + //GlobalV::ofs_running << " avg_iteri " << avg_iter << std::endl; + Parallel_Reduce::reduce_double_allpool(avg_iter); //mohan fix bug 2012-06-05 + //GlobalV::ofs_running << " avg_iter_after " << avg_iter << std::endl; + avg_iter /= static_cast(GlobalC::kv.nkstot); + } + CHECK_CUDA(cudaFree(h_diag)); + ModuleBase::timer::tick("Electrons_CUDA","c_bands"); + return; +} // END SUBROUTINE c_bands_k + + +void Electrons::init_mixstep_final_scf(void) +{ + ModuleBase::TITLE("electrons","init_mixstep_final_scf"); + + GlobalC::CHR.irstep=0; + GlobalC::CHR.idstep=0; + GlobalC::CHR.totstep=0; + + return; +} From 5da80fa1d8081a4588059c5675333ecd392736b3 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 1 Nov 2021 16:33:07 +0800 Subject: [PATCH 037/478] deepks : still trying to fix cmake --- source/src_lcao/LCAO_descriptor.cpp | 44 +++--- source/src_lcao/LCAO_descriptor.h | 22 ++- source/src_lcao/LCAO_descriptor_new.cpp | 192 +++++++++++++++++++++++- source/src_lcao/LCAO_descriptor_old.cpp | 7 - 4 files changed, 230 insertions(+), 35 deletions(-) diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index d26acbfc4e..369816555e 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -2,14 +2,6 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" -#include "LCAO_matrix.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" -#include "global_fp.h" -#include "../src_pw/global.h" -#include "../src_io/winput.h" - namespace GlobalC { @@ -779,15 +771,33 @@ void LCAO_Descriptor::deepks_pre_scf(const string& model_file) ModuleBase::GlobalFunc::ZEROS(DS_mu_alpha_z[inl], GlobalV::NLOCAL * (2 * this->lmaxd + 1)); } //init DH_V_delta* - delete[] DH_V_delta_x; - delete[] DH_V_delta_y; - delete[] DH_V_delta_z; - this->DH_V_delta_x = new double[GlobalC::ParaO.nloc]; - this->DH_V_delta_y = new double [GlobalC::ParaO.nloc]; - this->DH_V_delta_z = new double[GlobalC::ParaO.nloc]; - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + delete[] DH_V_delta_x; + delete[] DH_V_delta_y; + delete[] DH_V_delta_z; + this->DH_V_delta_x = new double[GlobalC::ParaO.nloc]; + this->DH_V_delta_y = new double [GlobalC::ParaO.nloc]; + this->DH_V_delta_z = new double[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); + } + else + { + DH_V_delta_x_k = new std::complex* [GlobalC::kv.nks]; + DH_V_delta_y_k = new std::complex* [GlobalC::kv.nks]; + DH_V_delta_z_k = new std::complex* [GlobalC::kv.nks]; + for(int ik=0;ikDH_V_delta_x_k[ik] = new std::complex[GlobalC::ParaO.nloc]; + this->DH_V_delta_y_k[ik] = new std::complex[GlobalC::ParaO.nloc]; + this->DH_V_delta_z_k[ik] = new std::complex[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_x_k[ik], GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_y_k[ik], GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_z_k[ik], GlobalC::ParaO.nloc); + } + } } if(!GlobalV::GAMMA_ONLY_LOCAL) { diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 7494c1e3c5..b5b5805949 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -8,10 +8,18 @@ #include "../src_pw/global.h" #include -#include -#include -#include -#include +#include "torch/script.h" +#include "torch/csrc/autograd/autograd.h" +#include "npy.hpp" +#include "torch/csrc/api/include/torch/linalg.h" + +#include "LCAO_matrix.h" +#include "../module_base/lapack_connector.h" +#include "../module_base/intarray.h" +#include "../module_base/complexmatrix.h" +#include "global_fp.h" +#include "../src_pw/global.h" +#include "../src_io/winput.h" #ifdef __MPI #include "../src_parallel/parallel_deepks.h" #endif @@ -94,9 +102,11 @@ class LCAO_Descriptor ///compute Hellmann-Feynman term of the force contribution of \f$E_\delta\f$ void cal_f_delta_hf(const ModuleBase::matrix& dm/**< [in] density matrix*/); void cal_f_delta_hf_new(const ModuleBase::matrix& dm/**< [in] density matrix*/); + void cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/); ///compute Pulay term of the force contribution of \f$E_\delta\f$ void cal_f_delta_pulay(const ModuleBase::matrix& dm/**< [in] density matrix*/); + void cal_f_delta_k_pulay(const std::vector& dm/**<[in] density matrix*/); ///compute the force contribution of \f$E_\delta\f$ void cal_f_delta(const ModuleBase::matrix& dm/**< [in] density matrix*/); @@ -145,6 +155,10 @@ class LCAO_Descriptor ///(Unit: Ry/Bohr) Total Force due to the DeePKS correction term \f$E_{\delta}\f$ ModuleBase::matrix F_delta; + std::complex** DH_V_delta_x_k; + std::complex** DH_V_delta_y_k; + std::complex** DH_V_delta_z_k; + //------------------- // private variables //------------------- diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp index 1b3edaea01..8ce43750d2 100644 --- a/source/src_lcao/LCAO_descriptor_new.cpp +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -2,13 +2,6 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" -#include "LCAO_matrix.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" -#include "global_fp.h" -#include "../src_pw/global.h" -#include "../src_io/winput.h" void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) { @@ -422,4 +415,189 @@ void LCAO_Descriptor::cal_f_delta_hf_new(const ModuleBase::matrix& dm) }//end T0 } +void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf_k_new"); + this->F_delta.zero_out(); + ModuleBase::ComplexMatrix F_delta_k; + F_delta_k.create(this->F_delta.nr,this->F_delta.nc); + + const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); + for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) + { + Atom* atom0 = &GlobalC::ucell.atoms[T0]; + for (int I0 =0; I0< atom0->na; I0++) + { + int iat = GlobalC::ucell.itia2iat(T0,I0); + const ModuleBase::Vector3 tau0 = atom0->tau[I0]; + GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); + + //======================================================= + //Step1: + //saves , where beta runs over L0,M0 on atom I0 + //and psi runs over atomic basis sets on the current core + //======================================================= + std::vector>>> nlm_tot; + + //outermost loop : all adjacent atoms + nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); + + for (int ad=0; ad tau1 = GlobalC::GridD.getAdjacentTau(ad); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + + //middle loop : atomic basis on current processor (either row or column) + nlm_tot[ad].clear(); + + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1) + { + continue; + } + + for (int iw1=0; iw1> 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_psialpha_half( + nlm, 1, tau1, T1, + atom1->iw2l[ iw1_0 ], // L1 + atom1->iw2m[ iw1_0 ], // m1 + atom1->iw2n[ iw1_0 ], // N1 + GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 + + nlm_tot[ad].insert({iw1_all,nlm}); + }//end iw + }//end ad + + //======================================================= + //Step2: + //calculate sum_(L0,M0) alpha + //and accumulate the value to Hloc_fixed(i,j) + //======================================================= + + for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); + + ModuleBase::Vector3 dR1(GlobalC::GridD.getBox(ad1).x, GlobalC::GridD.getBox(ad1).y, GlobalC::GridD.getBox(ad1).z); + + for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) + { + const int T2 = GlobalC::GridD.getType(ad2); + const int I2 = GlobalC::GridD.getNatom(ad2); + const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); + const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); + const Atom* atom2 = &GlobalC::ucell.atoms[T2]; + const int nw2_tot = atom2->nw*GlobalV::NPOL; + ModuleBase::Vector3 dR2(GlobalC::GridD.getBox(ad2).x, GlobalC::GridD.getBox(ad2).y, GlobalC::GridD.getBox(ad2).z); + + const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1 + || dist2 > Rcut_Alpha + Rcut_AO2) + { + continue; + } + + for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all][0]; + std::vector> nlm2; + nlm2.resize(3); + + for(int dim=0;dim<3;dim++) + { + nlm2[dim] = nlm_tot[ad2][iw2_all][dim+1]; + } + + assert(nlm1.size()==nlm2[0].size()); + + int ib=0; + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m1 = 0;m1 < nm; ++m1) + { + for (int m2 = 0; m2 < nm; ++m2) + { + for(int dim=0;dim<3;dim++) + { + nlm[dim] += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[dim][ib+m2]; + } + } + } + ib+=nm; + } + } + assert(ib==nlm1.size()); + + // HF term is minus, only one projector for each atom force. + for(int ik=0;ik kphase = std::complex ( cos(arg), sin(arg) ); + F_delta_k(iat, 0) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[0] * kphase; + F_delta_k(iat, 1) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[1] * kphase; + F_delta_k(iat, 2) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[2] * kphase; + } + }//iw2 + }//iw1 + }//ad2 + }//ad1 + }//end I0 + }//end T0 + + if(!F_delta_k.checkreal()) + { + ModuleBase::WARNING_QUIT("cal_f_delta_hf_k","Force should be real!"); + } + this->F_delta = F_delta_k.dble(); +} + +void LCAO_Descriptor::cal_f_delta_k_pulay(const std::vector& dm/**<[in] density matrix*/) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_k_pulay"); + + +} + #endif \ No newline at end of file diff --git a/source/src_lcao/LCAO_descriptor_old.cpp b/source/src_lcao/LCAO_descriptor_old.cpp index 250d73b152..213a2387e6 100644 --- a/source/src_lcao/LCAO_descriptor_old.cpp +++ b/source/src_lcao/LCAO_descriptor_old.cpp @@ -2,13 +2,6 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" -#include "LCAO_matrix.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" -#include "global_fp.h" -#include "../src_pw/global.h" -#include "../src_io/winput.h" void LCAO_Descriptor::cal_v_delta(const ModuleBase::matrix& dm) { From 7ec44a9920e3031bcd182f1ce413b6754d1444bc Mon Sep 17 00:00:00 2001 From: wenfei-li <38569667+wenfei-li@users.noreply.github.com> Date: Mon, 1 Nov 2021 16:42:46 +0800 Subject: [PATCH 038/478] Revert "deepks : still trying to fix cmake" --- source/src_lcao/LCAO_descriptor.cpp | 44 +++--- source/src_lcao/LCAO_descriptor.h | 22 +-- source/src_lcao/LCAO_descriptor_new.cpp | 192 +----------------------- source/src_lcao/LCAO_descriptor_old.cpp | 7 + 4 files changed, 35 insertions(+), 230 deletions(-) diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index 369816555e..d26acbfc4e 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -2,6 +2,14 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" +#include "LCAO_matrix.h" +#include "../module_base/lapack_connector.h" +#include "../module_base/intarray.h" +#include "../module_base/complexmatrix.h" +#include "global_fp.h" +#include "../src_pw/global.h" +#include "../src_io/winput.h" + namespace GlobalC { @@ -771,33 +779,15 @@ void LCAO_Descriptor::deepks_pre_scf(const string& model_file) ModuleBase::GlobalFunc::ZEROS(DS_mu_alpha_z[inl], GlobalV::NLOCAL * (2 * this->lmaxd + 1)); } //init DH_V_delta* - if(GlobalV::GAMMA_ONLY_LOCAL) - { - delete[] DH_V_delta_x; - delete[] DH_V_delta_y; - delete[] DH_V_delta_z; - this->DH_V_delta_x = new double[GlobalC::ParaO.nloc]; - this->DH_V_delta_y = new double [GlobalC::ParaO.nloc]; - this->DH_V_delta_z = new double[GlobalC::ParaO.nloc]; - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); - } - else - { - DH_V_delta_x_k = new std::complex* [GlobalC::kv.nks]; - DH_V_delta_y_k = new std::complex* [GlobalC::kv.nks]; - DH_V_delta_z_k = new std::complex* [GlobalC::kv.nks]; - for(int ik=0;ikDH_V_delta_x_k[ik] = new std::complex[GlobalC::ParaO.nloc]; - this->DH_V_delta_y_k[ik] = new std::complex[GlobalC::ParaO.nloc]; - this->DH_V_delta_z_k[ik] = new std::complex[GlobalC::ParaO.nloc]; - ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_x_k[ik], GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_y_k[ik], GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_z_k[ik], GlobalC::ParaO.nloc); - } - } + delete[] DH_V_delta_x; + delete[] DH_V_delta_y; + delete[] DH_V_delta_z; + this->DH_V_delta_x = new double[GlobalC::ParaO.nloc]; + this->DH_V_delta_y = new double [GlobalC::ParaO.nloc]; + this->DH_V_delta_z = new double[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); } if(!GlobalV::GAMMA_ONLY_LOCAL) { diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index b5b5805949..7494c1e3c5 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -8,18 +8,10 @@ #include "../src_pw/global.h" #include -#include "torch/script.h" -#include "torch/csrc/autograd/autograd.h" -#include "npy.hpp" -#include "torch/csrc/api/include/torch/linalg.h" - -#include "LCAO_matrix.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" -#include "global_fp.h" -#include "../src_pw/global.h" -#include "../src_io/winput.h" +#include +#include +#include +#include #ifdef __MPI #include "../src_parallel/parallel_deepks.h" #endif @@ -102,11 +94,9 @@ class LCAO_Descriptor ///compute Hellmann-Feynman term of the force contribution of \f$E_\delta\f$ void cal_f_delta_hf(const ModuleBase::matrix& dm/**< [in] density matrix*/); void cal_f_delta_hf_new(const ModuleBase::matrix& dm/**< [in] density matrix*/); - void cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/); ///compute Pulay term of the force contribution of \f$E_\delta\f$ void cal_f_delta_pulay(const ModuleBase::matrix& dm/**< [in] density matrix*/); - void cal_f_delta_k_pulay(const std::vector& dm/**<[in] density matrix*/); ///compute the force contribution of \f$E_\delta\f$ void cal_f_delta(const ModuleBase::matrix& dm/**< [in] density matrix*/); @@ -155,10 +145,6 @@ class LCAO_Descriptor ///(Unit: Ry/Bohr) Total Force due to the DeePKS correction term \f$E_{\delta}\f$ ModuleBase::matrix F_delta; - std::complex** DH_V_delta_x_k; - std::complex** DH_V_delta_y_k; - std::complex** DH_V_delta_z_k; - //------------------- // private variables //------------------- diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp index 8ce43750d2..1b3edaea01 100644 --- a/source/src_lcao/LCAO_descriptor_new.cpp +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -2,6 +2,13 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" +#include "LCAO_matrix.h" +#include "../module_base/lapack_connector.h" +#include "../module_base/intarray.h" +#include "../module_base/complexmatrix.h" +#include "global_fp.h" +#include "../src_pw/global.h" +#include "../src_io/winput.h" void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) { @@ -415,189 +422,4 @@ void LCAO_Descriptor::cal_f_delta_hf_new(const ModuleBase::matrix& dm) }//end T0 } -void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/) -{ - ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf_k_new"); - this->F_delta.zero_out(); - ModuleBase::ComplexMatrix F_delta_k; - F_delta_k.create(this->F_delta.nr,this->F_delta.nc); - - const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); - for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) - { - Atom* atom0 = &GlobalC::ucell.atoms[T0]; - for (int I0 =0; I0< atom0->na; I0++) - { - int iat = GlobalC::ucell.itia2iat(T0,I0); - const ModuleBase::Vector3 tau0 = atom0->tau[I0]; - GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); - - //======================================================= - //Step1: - //saves , where beta runs over L0,M0 on atom I0 - //and psi runs over atomic basis sets on the current core - //======================================================= - std::vector>>> nlm_tot; - - //outermost loop : all adjacent atoms - nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); - - for (int ad=0; ad tau1 = GlobalC::GridD.getAdjacentTau(ad); - const Atom* atom1 = &GlobalC::ucell.atoms[T1]; - const int nw1_tot = atom1->nw*GlobalV::NPOL; - - //middle loop : atomic basis on current processor (either row or column) - nlm_tot[ad].clear(); - - const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; - - if (dist1 > Rcut_Alpha + Rcut_AO1) - { - continue; - } - - for (int iw1=0; iw1> 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_psialpha_half( - nlm, 1, tau1, T1, - atom1->iw2l[ iw1_0 ], // L1 - atom1->iw2m[ iw1_0 ], // m1 - atom1->iw2n[ iw1_0 ], // N1 - GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 - - nlm_tot[ad].insert({iw1_all,nlm}); - }//end iw - }//end ad - - //======================================================= - //Step2: - //calculate sum_(L0,M0) alpha - //and accumulate the value to Hloc_fixed(i,j) - //======================================================= - - for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); - const Atom* atom1 = &GlobalC::ucell.atoms[T1]; - const int nw1_tot = atom1->nw*GlobalV::NPOL; - const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); - - ModuleBase::Vector3 dR1(GlobalC::GridD.getBox(ad1).x, GlobalC::GridD.getBox(ad1).y, GlobalC::GridD.getBox(ad1).z); - - for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) - { - const int T2 = GlobalC::GridD.getType(ad2); - const int I2 = GlobalC::GridD.getNatom(ad2); - const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); - const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); - const Atom* atom2 = &GlobalC::ucell.atoms[T2]; - const int nw2_tot = atom2->nw*GlobalV::NPOL; - ModuleBase::Vector3 dR2(GlobalC::GridD.getBox(ad2).x, GlobalC::GridD.getBox(ad2).y, GlobalC::GridD.getBox(ad2).z); - - const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); - const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; - const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; - - if (dist1 > Rcut_Alpha + Rcut_AO1 - || dist2 > Rcut_Alpha + Rcut_AO2) - { - continue; - } - - for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all][0]; - std::vector> nlm2; - nlm2.resize(3); - - for(int dim=0;dim<3;dim++) - { - nlm2[dim] = nlm_tot[ad2][iw2_all][dim+1]; - } - - assert(nlm1.size()==nlm2[0].size()); - - int ib=0; - for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) - { - for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) - { - const int inl = this->inl_index[T0](I0, L0, N0); - const int nm = 2*L0+1; - for (int m1 = 0;m1 < nm; ++m1) - { - for (int m2 = 0; m2 < nm; ++m2) - { - for(int dim=0;dim<3;dim++) - { - nlm[dim] += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[dim][ib+m2]; - } - } - } - ib+=nm; - } - } - assert(ib==nlm1.size()); - - // HF term is minus, only one projector for each atom force. - for(int ik=0;ik kphase = std::complex ( cos(arg), sin(arg) ); - F_delta_k(iat, 0) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[0] * kphase; - F_delta_k(iat, 1) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[1] * kphase; - F_delta_k(iat, 2) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[2] * kphase; - } - }//iw2 - }//iw1 - }//ad2 - }//ad1 - }//end I0 - }//end T0 - - if(!F_delta_k.checkreal()) - { - ModuleBase::WARNING_QUIT("cal_f_delta_hf_k","Force should be real!"); - } - this->F_delta = F_delta_k.dble(); -} - -void LCAO_Descriptor::cal_f_delta_k_pulay(const std::vector& dm/**<[in] density matrix*/) -{ - ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_k_pulay"); - - -} - #endif \ No newline at end of file diff --git a/source/src_lcao/LCAO_descriptor_old.cpp b/source/src_lcao/LCAO_descriptor_old.cpp index 213a2387e6..250d73b152 100644 --- a/source/src_lcao/LCAO_descriptor_old.cpp +++ b/source/src_lcao/LCAO_descriptor_old.cpp @@ -2,6 +2,13 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" +#include "LCAO_matrix.h" +#include "../module_base/lapack_connector.h" +#include "../module_base/intarray.h" +#include "../module_base/complexmatrix.h" +#include "global_fp.h" +#include "../src_pw/global.h" +#include "../src_io/winput.h" void LCAO_Descriptor::cal_v_delta(const ModuleBase::matrix& dm) { From a5515de9fe995df81f6734475fc86c4ec6022189 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 1 Nov 2021 16:48:43 +0800 Subject: [PATCH 039/478] deepks : still trying to fix cmake --- source/src_lcao/LCAO_descriptor.cpp | 8 -------- source/src_lcao/LCAO_descriptor.h | 18 ++++++++++++++---- source/src_lcao/LCAO_descriptor_new.cpp | 7 ------- source/src_lcao/LCAO_descriptor_old.cpp | 7 ------- 4 files changed, 14 insertions(+), 26 deletions(-) diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index d26acbfc4e..9c0c6f19fb 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -2,14 +2,6 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" -#include "LCAO_matrix.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" -#include "global_fp.h" -#include "../src_pw/global.h" -#include "../src_io/winput.h" - namespace GlobalC { diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 7494c1e3c5..f68a4cd988 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -8,10 +8,18 @@ #include "../src_pw/global.h" #include -#include -#include -#include -#include +#include "torch/script.h" +#include "torch/csrc/autograd/autograd.h" +#include "npy.hpp" +#include "torch/csrc/api/include/torch/linalg.h" + +#include "LCAO_matrix.h" +#include "../module_base/lapack_connector.h" +#include "../module_base/intarray.h" +#include "../module_base/complexmatrix.h" +#include "global_fp.h" +#include "../src_pw/global.h" +#include "../src_io/winput.h" #ifdef __MPI #include "../src_parallel/parallel_deepks.h" #endif @@ -94,9 +102,11 @@ class LCAO_Descriptor ///compute Hellmann-Feynman term of the force contribution of \f$E_\delta\f$ void cal_f_delta_hf(const ModuleBase::matrix& dm/**< [in] density matrix*/); void cal_f_delta_hf_new(const ModuleBase::matrix& dm/**< [in] density matrix*/); + void cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/); ///compute Pulay term of the force contribution of \f$E_\delta\f$ void cal_f_delta_pulay(const ModuleBase::matrix& dm/**< [in] density matrix*/); + void cal_f_delta_k_pulay(const std::vector& dm/**<[in] density matrix*/); ///compute the force contribution of \f$E_\delta\f$ void cal_f_delta(const ModuleBase::matrix& dm/**< [in] density matrix*/); diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp index 1b3edaea01..853c449694 100644 --- a/source/src_lcao/LCAO_descriptor_new.cpp +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -2,13 +2,6 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" -#include "LCAO_matrix.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" -#include "global_fp.h" -#include "../src_pw/global.h" -#include "../src_io/winput.h" void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) { diff --git a/source/src_lcao/LCAO_descriptor_old.cpp b/source/src_lcao/LCAO_descriptor_old.cpp index 250d73b152..213a2387e6 100644 --- a/source/src_lcao/LCAO_descriptor_old.cpp +++ b/source/src_lcao/LCAO_descriptor_old.cpp @@ -2,13 +2,6 @@ #ifdef __DEEPKS #include "LCAO_descriptor.h" -#include "LCAO_matrix.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" -#include "global_fp.h" -#include "../src_pw/global.h" -#include "../src_io/winput.h" void LCAO_Descriptor::cal_v_delta(const ModuleBase::matrix& dm) { From 83d8afa0d443649268ec056ed978e55685be3406 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Mon, 1 Nov 2021 21:08:43 +0800 Subject: [PATCH 040/478] deepks : multi-k, force --- source/src_lcao/FORCE_STRESS.cpp | 8 +- source/src_lcao/FORCE_k.cpp | 38 ++++ source/src_lcao/LCAO_descriptor.cpp | 36 +++- source/src_lcao/LCAO_descriptor.h | 4 + source/src_lcao/LCAO_descriptor_new.cpp | 266 +++++++++++++++++++++++- 5 files changed, 334 insertions(+), 18 deletions(-) diff --git a/source/src_lcao/FORCE_STRESS.cpp b/source/src_lcao/FORCE_STRESS.cpp index 8f887b6003..690e389122 100644 --- a/source/src_lcao/FORCE_STRESS.cpp +++ b/source/src_lcao/FORCE_STRESS.cpp @@ -300,8 +300,12 @@ void Force_Stress_LCAO::getForceStress( if (GlobalV::deepks_scf) { GlobalC::ld.save_npy_f(fcs - GlobalC::ld.F_delta, "f_base.npy"); //Ry/Bohr, F_base - GlobalC::ld.cal_gvx(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); - GlobalC::ld.save_npy_gvx();// /Bohr, grad_vx + if(GlobalV::GAMMA_ONLY_LOCAL) + { + GlobalC::ld.cal_gvx(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); + GlobalC::ld.save_npy_gvx();// /Bohr, grad_vx + } + //multi-k not implemented yet } else { diff --git a/source/src_lcao/FORCE_k.cpp b/source/src_lcao/FORCE_k.cpp index 998c8d6d0f..7bfc2663eb 100644 --- a/source/src_lcao/FORCE_k.cpp +++ b/source/src_lcao/FORCE_k.cpp @@ -3,6 +3,10 @@ #include #include +#ifdef __DEEPKS +#include "LCAO_descriptor.h" +#endif + Force_LCAO_k::Force_LCAO_k () { } @@ -58,6 +62,40 @@ void Force_LCAO_k::ftable_k ( this->calFvnlDbeta(dm2d, isforce, isstress, fvnl_dbeta, svnl_dbeta, GlobalV::vnl_method); +#ifdef __DEEPKS + if (GlobalV::deepks_scf) + { + //step 1 : accumulate density matrix + if(GlobalV::NPOOL!=1) + { + ModuleBase::WARNING_QUIT("opt_ions","deepks not compatible with npool>1 now"); + } + ModuleBase::ComplexMatrix dm_k_all; + dm_k_all.create(GlobalC::LOC.wfc_dm_2d.dm_k[0].nr, GlobalC::LOC.wfc_dm_2d.dm_k[0].nc); + for(int ik=0;iklmaxd + 1)); } //init DH_V_delta* - delete[] DH_V_delta_x; - delete[] DH_V_delta_y; - delete[] DH_V_delta_z; - this->DH_V_delta_x = new double[GlobalC::ParaO.nloc]; - this->DH_V_delta_y = new double [GlobalC::ParaO.nloc]; - this->DH_V_delta_z = new double[GlobalC::ParaO.nloc]; - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); - ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); + if(GlobalV::GAMMA_ONLY_LOCAL) + { + delete[] DH_V_delta_x; + delete[] DH_V_delta_y; + delete[] DH_V_delta_z; + this->DH_V_delta_x = new double[GlobalC::ParaO.nloc]; + this->DH_V_delta_y = new double [GlobalC::ParaO.nloc]; + this->DH_V_delta_z = new double[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_x, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_y, GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(DH_V_delta_z, GlobalC::ParaO.nloc); + } + else + { + DH_V_delta_x_k = new std::complex* [GlobalC::kv.nks]; + DH_V_delta_y_k = new std::complex* [GlobalC::kv.nks]; + DH_V_delta_z_k = new std::complex* [GlobalC::kv.nks]; + for(int ik=0;ikDH_V_delta_x_k[ik] = new std::complex[GlobalC::ParaO.nloc]; + this->DH_V_delta_y_k[ik] = new std::complex[GlobalC::ParaO.nloc]; + this->DH_V_delta_z_k[ik] = new std::complex[GlobalC::ParaO.nloc]; + ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_x_k[ik], GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_y_k[ik], GlobalC::ParaO.nloc); + ModuleBase::GlobalFunc::ZEROS(this->DH_V_delta_z_k[ik], GlobalC::ParaO.nloc); + } + } } if(!GlobalV::GAMMA_ONLY_LOCAL) { diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index f68a4cd988..67061c94ed 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -182,6 +182,10 @@ class LCAO_Descriptor double* DH_V_delta_y; double* DH_V_delta_z; + std::complex** DH_V_delta_x_k; + std::complex** DH_V_delta_y_k; + std::complex** DH_V_delta_z_k; + // saves , for k point std::vector>>>> nlm_k; diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp index 853c449694..fda7c6346b 100644 --- a/source/src_lcao/LCAO_descriptor_new.cpp +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -106,7 +106,7 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) }//end iw }//end ad - if(!GlobalV::GAMMA_ONLY_LOCAL) + if(!GlobalV::GAMMA_ONLY_LOCAL && !calc_deri) { //saves , to be used later continue; @@ -127,6 +127,8 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) const int nw1_tot = atom1->nw*GlobalV::NPOL; const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); + ModuleBase::Vector3 dR1(GlobalC::GridD.getBox(ad1).x, GlobalC::GridD.getBox(ad1).y, GlobalC::GridD.getBox(ad1).z); + for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) { const int T2 = GlobalC::GridD.getType(ad2); @@ -140,6 +142,8 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; + ModuleBase::Vector3 dR2(GlobalC::GridD.getBox(ad2).x, GlobalC::GridD.getBox(ad2).y, GlobalC::GridD.getBox(ad2).z); + if (dist1 > Rcut_Alpha + Rcut_AO1 || dist2 > Rcut_Alpha + Rcut_AO2) { @@ -162,13 +166,28 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) if(calc_deri) { double nlm[3]={0,0,0}; - std::vector nlm1 = nlm_tot[ad1][iw1_all][0]; + std::vector nlm1; std::vector> nlm2; + if(GlobalV::GAMMA_ONLY_LOCAL) + { + nlm1 = nlm_tot[ad1][iw1_all][0]; + } + else + { + nlm1 = nlm_k[iat][ad1][iw1_all][0]; + } + nlm2.resize(3); - for(int dim=0;dim<3;dim++) { - nlm2[dim] = nlm_tot[ad2][iw2_all][dim+1]; + if(GlobalV::GAMMA_ONLY_LOCAL) + { + nlm2[dim] = nlm_tot[ad2][iw2_all][dim+1]; + } + else + { + nlm2[dim] = nlm_k[iat][ad2][iw2_all][dim+1]; + } } assert(nlm1.size()==nlm2[0].size()); @@ -196,9 +215,23 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) assert(ib==nlm1.size()); int index = iw1_local * GlobalC::ParaO.ncol+ iw2_local; - this->DH_V_delta_x[index] += nlm[0]; - this->DH_V_delta_y[index] += nlm[1]; - this->DH_V_delta_z[index] += nlm[2]; + if(GlobalV::GAMMA_ONLY_LOCAL) + { + this->DH_V_delta_x[index] += nlm[0]; + this->DH_V_delta_y[index] += nlm[1]; + this->DH_V_delta_z[index] += nlm[2]; + } + else + { + for(int ik=0;ik kphase = std::complex ( cos(arg), sin(arg) ); + this->DH_V_delta_x_k[ik][index] += nlm[0] * kphase; + this->DH_V_delta_y_k[ik][index] += nlm[1] * kphase; + this->DH_V_delta_z_k[ik][index] += nlm[2] * kphase; + } + } } else @@ -415,4 +448,223 @@ void LCAO_Descriptor::cal_f_delta_hf_new(const ModuleBase::matrix& dm) }//end T0 } +void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf_k_new"); + this->F_delta.zero_out(); + ModuleBase::ComplexMatrix F_delta_k; + F_delta_k.create(this->F_delta.nr,this->F_delta.nc); + + const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); + for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) + { + Atom* atom0 = &GlobalC::ucell.atoms[T0]; + for (int I0 =0; I0< atom0->na; I0++) + { + int iat = GlobalC::ucell.itia2iat(T0,I0); + const ModuleBase::Vector3 tau0 = atom0->tau[I0]; + GlobalC::GridD.Find_atom(GlobalC::ucell, atom0->tau[I0] ,T0, I0); + + //======================================================= + //Step1: + //saves , where beta runs over L0,M0 on atom I0 + //and psi runs over atomic basis sets on the current core + //======================================================= + std::vector>>> nlm_tot; + + //outermost loop : all adjacent atoms + nlm_tot.resize(GlobalC::GridD.getAdjacentNum()+1); + + for (int ad=0; ad tau1 = GlobalC::GridD.getAdjacentTau(ad); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + + //middle loop : atomic basis on current processor (either row or column) + nlm_tot[ad].clear(); + + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1) + { + continue; + } + + for (int iw1=0; iw1> 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_psialpha_half( + nlm, 1, tau1, T1, + atom1->iw2l[ iw1_0 ], // L1 + atom1->iw2m[ iw1_0 ], // m1 + atom1->iw2n[ iw1_0 ], // N1 + GlobalC::ucell.atoms[T0].tau[I0], T0, I0, this->inl_index); //R0,T0 + + nlm_tot[ad].insert({iw1_all,nlm}); + }//end iw + }//end ad + + //======================================================= + //Step2: + //calculate sum_(L0,M0) alpha + //and accumulate the value to Hloc_fixed(i,j) + //======================================================= + + for (int ad1=0; ad1 tau1 = GlobalC::GridD.getAdjacentTau(ad1); + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + const int nw1_tot = atom1->nw*GlobalV::NPOL; + const double Rcut_AO1 = GlobalC::ORB.Phi[T1].getRcut(); + + ModuleBase::Vector3 dR1(GlobalC::GridD.getBox(ad1).x, GlobalC::GridD.getBox(ad1).y, GlobalC::GridD.getBox(ad1).z); + + for (int ad2=0; ad2 < GlobalC::GridD.getAdjacentNum()+1 ; ad2++) + { + const int T2 = GlobalC::GridD.getType(ad2); + const int I2 = GlobalC::GridD.getNatom(ad2); + const int start2 = GlobalC::ucell.itiaiw2iwt(T2, I2, 0); + const ModuleBase::Vector3 tau2 = GlobalC::GridD.getAdjacentTau(ad2); + const Atom* atom2 = &GlobalC::ucell.atoms[T2]; + const int nw2_tot = atom2->nw*GlobalV::NPOL; + ModuleBase::Vector3 dR2(GlobalC::GridD.getBox(ad2).x, GlobalC::GridD.getBox(ad2).y, GlobalC::GridD.getBox(ad2).z); + + const double Rcut_AO2 = GlobalC::ORB.Phi[T2].getRcut(); + const double dist1 = (tau1-tau0).norm() * GlobalC::ucell.lat0; + const double dist2 = (tau2-tau0).norm() * GlobalC::ucell.lat0; + + if (dist1 > Rcut_Alpha + Rcut_AO1 + || dist2 > Rcut_Alpha + Rcut_AO2) + { + continue; + } + + for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all][0]; + std::vector> nlm2; + nlm2.resize(3); + + for(int dim=0;dim<3;dim++) + { + nlm2[dim] = nlm_tot[ad2][iw2_all][dim+1]; + } + + assert(nlm1.size()==nlm2[0].size()); + + int ib=0; + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m1 = 0;m1 < nm; ++m1) + { + for (int m2 = 0; m2 < nm; ++m2) + { + for(int dim=0;dim<3;dim++) + { + nlm[dim] += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[dim][ib+m2]; + } + } + } + ib+=nm; + } + } + assert(ib==nlm1.size()); + + // HF term is minus, only one projector for each atom force. + for(int ik=0;ik kphase = std::complex ( cos(arg), sin(arg) ); + F_delta_k(iat, 0) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[0] * kphase; + F_delta_k(iat, 1) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[1] * kphase; + F_delta_k(iat, 2) -= 2 * dm[ik](iw1_local, iw2_local) * nlm[2] * kphase; + } + }//iw2 + }//iw1 + }//ad2 + }//ad1 + }//end I0 + }//end T0 + + if(!F_delta_k.checkreal()) + { + ModuleBase::WARNING_QUIT("cal_f_delta_hf_k","Force should be real!"); + } + this->F_delta = F_delta_k.dble(); +} + +void LCAO_Descriptor::cal_f_delta_k_pulay(const std::vector& dm/**<[in] density matrix*/) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_k_pulay"); + this->build_v_delta_alpha_new(1); + //this->build_v_delta_mu(1); //, if multi-k + //GlobalV::ofs_running << "dim of dm : " << dm[0].nr << " " << dm[0].nc << std::endl; + + for (int i = 0;i < GlobalV::NLOCAL;++i) //col, diff + { + const int iat = GlobalC::ucell.iwt2iat[i];//the atom whose force being calculated + for (int j = 0;j < GlobalV::NLOCAL;++j) //row + { + const int mu = GlobalC::ParaO.trace_loc_row[j]; + const int nu = GlobalC::ParaO.trace_loc_col[i]; + if (mu >= 0 && nu >= 0) + { + const int index = mu * GlobalC::ParaO.ncol + nu; + //GlobalV::ofs_running << "mu,nu,index : " << mu << " " << nu << " " << index << std::endl; + + std::complex f[3]; + for(int ik=0;ikDH_V_delta_x_k[ik][index]; + f[1]+= 2 * dm[ik](nu, mu) * this->DH_V_delta_y_k[ik][index]; + f[2]+= 2 * dm[ik](nu, mu) * this->DH_V_delta_z_k[ik][index]; + } + if(f[0].imag()>1e-12 || f[1].imag()>1e-12 || f[2].imag()>1e-12) + { + GlobalV::ofs_running << "f_xyz : " << f[0] << " " << f[1] << " " << f[2] << std::endl; + ModuleBase::WARNING_QUIT("cal_f_delta_hf_k","Force should be real!"); + } + this->F_delta(iat, 0) += f[0].real(); + this->F_delta(iat, 1) += f[1].real(); + this->F_delta(iat, 2) += f[2].real(); + } + } + } + return; + +} + #endif \ No newline at end of file From e19db9ca14ea87c319eb136486fe348c4ddeb5a9 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 2 Nov 2021 14:20:07 +0800 Subject: [PATCH 041/478] vnl multi-k mu_new : new method 1 --- source/src_lcao/LCAO_gen_fixedH.cpp | 300 ++++++++++++++++------------ 1 file changed, 168 insertions(+), 132 deletions(-) diff --git a/source/src_lcao/LCAO_gen_fixedH.cpp b/source/src_lcao/LCAO_gen_fixedH.cpp index fe9f7dcae4..305ecebcf2 100644 --- a/source/src_lcao/LCAO_gen_fixedH.cpp +++ b/source/src_lcao/LCAO_gen_fixedH.cpp @@ -538,7 +538,7 @@ void LCAO_gen_fixedH::build_Nonlocal_mu_new(const bool &calc_deri) nlm_tot1[key_1]=nlm_cur1; } }//end ad - + } //======================================================= //Step2: //calculate sum_(L0,M0) beta @@ -625,60 +625,129 @@ void LCAO_gen_fixedH::build_Nonlocal_mu_new(const bool &calc_deri) { // < psi1 | all projectors | psi2 > // ----------------------------- enter the nnr increaing zone ------------------------- - for (int j=0; jnw*GlobalV::NPOL; j++) + for (int ad0=0; ad0 < GlobalC::GridD.getAdjacentNum()+1 ; ++ad0) { - const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc - const int iw1_all = start1 + j; - const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; - if(mu < 0)continue; + const int T0 = GlobalC::GridD.getType(ad0); + const int I0 = GlobalC::GridD.getNatom(ad0); + if(T0!=it || I0!=ia) continue; - // fix a serious bug: atom2[T2] -> atom2 - // mohan 2010-12-20 - for (int k=0; knw*GlobalV::NPOL; k++) - { - const int k0 = k/GlobalV::NPOL; - const int iw2_all = start2 + k; - const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; - if(nu < 0)continue; + // mohan add 2010-12-19 + if( GlobalC::ucell.infoNL.nproj[T0] == 0) continue; + //const int I0 = GlobalC::GridD.getNatom(ad0); + //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); + tau0 = GlobalC::GridD.getAdjacentTau(ad0); - //(3) run over all projectors in nonlocal pseudopotential. - for (int ad0=0; ad0 < GlobalC::GridD.getAdjacentNum()+1 ; ++ad0) - { - const int T0 = GlobalC::GridD.getType(ad0); - const int I0 = GlobalC::GridD.getNatom(ad0); - if(T0!=it || I0!=ia) continue; + dtau1 = tau0 - tau1; + dtau2 = tau0 - tau2; + const double distance1 = dtau1.norm2() * pow(GlobalC::ucell.lat0,2); + const double distance2 = dtau2.norm2() * pow(GlobalC::ucell.lat0,2); - // mohan add 2010-12-19 - if( GlobalC::ucell.infoNL.nproj[T0] == 0) continue; + // seems a bug here!! mohan 2011-06-17 + rcut1 = pow(GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); + rcut2 = pow(GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); - //const int I0 = GlobalC::GridD.getNatom(ad0); - //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); - tau0 = GlobalC::GridD.getAdjacentTau(ad0); + if(distance1 >= rcut1 || distance2 >= rcut2) + { + continue; + } + //const Atom* atom0 = &GlobalC::ucell.atoms[T0]; + const int rx0=GlobalC::GridD.getBox(ad0).x; + const int ry0=GlobalC::GridD.getBox(ad0).y; + const int rz0=GlobalC::GridD.getBox(ad0).z; + key_tuple key1(iat1,-rx0,-ry0,-rz0); + key_tuple key2(iat2,rx2-rx0,ry2-ry0,rz2-rz0); + + std::unordered_map> *nlm_cur1_e; //left hand side, for energy + std::unordered_map>> *nlm_cur1_f; //lhs, for force + std::unordered_map> *nlm_cur2_e; //rhs, for energy + std::unordered_map>> *nlm_cur2_f; //rhs, for force + + if(!calc_deri) + { + nlm_cur1_e = &nlm_tot[iat][key1]; + nlm_cur2_e = &nlm_tot[iat][key2]; + } + else + { + nlm_cur1_f = &nlm_tot1[key1]; + nlm_cur2_f = &nlm_tot1[key2]; + } + + int nnr_inner = 0; + + for (int j=0; jnw*GlobalV::NPOL; j++) + { + const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc + const int iw1_all = start1 + j; + const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; + if(mu < 0)continue; + + // fix a serious bug: atom2[T2] -> atom2 + // mohan 2010-12-20 + for (int k=0; knw*GlobalV::NPOL; k++) + { + const int k0 = k/GlobalV::NPOL; + const int iw2_all = start2 + k; + const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; + if(nu < 0)continue; - dtau1 = tau0 - tau1; - dtau2 = tau0 - tau2; - const double distance1 = dtau1.norm2() * pow(GlobalC::ucell.lat0,2); - const double distance2 = dtau2.norm2() * pow(GlobalC::ucell.lat0,2); + if(!calc_deri) + { + std::vector nlm_1=(*nlm_cur1_e)[iw1_all]; + std::vector nlm_2=(*nlm_cur2_e)[iw2_all]; + double nlm_tmp = 0.0; - // seems a bug here!! mohan 2011-06-17 - rcut1 = pow(GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); - rcut2 = pow(GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); + const int nproj = GlobalC::ucell.infoNL.nproj[T0]; + int ib = 0; + for (int nb = 0; nb < nproj; nb++) + { + const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); + for(int m=0;m<2*L0+1;m++) + { + if(nlm_1[ib]!=0.0 && nlm_2[ib]!=0.0) + { + nlm_tmp += nlm_1[ib]*nlm_2[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); + } + ib+=1; + } + } + assert(ib==nlm_1.size()); - if(distance1 < rcut1 && distance2 < rcut2) + if(GlobalV::GAMMA_ONLY_LOCAL) + { + // mohan add 2010-12-20 + if( nlm_tmp!=0.0 ) + { + // GlobalV::ofs_running << std::setw(10) << iw1_all << std::setw(10) + // << iw2_all << std::setw(20) << nlm[0] << std::endl; + GlobalC::LM.set_HSgamma(iw1_all,iw2_all,nlm_tmp,'N');//N stands for nonlocal. + } + } + else + { + if( nlm_tmp!=0.0 ) + { + GlobalC::LM.Hloc_fixedR[nnr+nnr_inner] += nlm_tmp; + } + } + }// calc_deri + else // calculate the derivative { - //const Atom* atom0 = &GlobalC::ucell.atoms[T0]; - const int rx0=GlobalC::GridD.getBox(ad0).x; - const int ry0=GlobalC::GridD.getBox(ad0).y; - const int rz0=GlobalC::GridD.getBox(ad0).z; - key_tuple key1(iat1,-rx0,-ry0,-rz0); - key_tuple key2(iat2,rx2-rx0,ry2-ry0,rz2-rz0); - - if(!calc_deri) + if(GlobalV::GAMMA_ONLY_LOCAL) { - std::vector nlm_1=nlm_tot[key1][iw1_all]; - std::vector nlm_2=nlm_tot[key2][iw2_all]; - double nlm_tmp = 0.0; + double nlm[3]={0,0,0}; + + // sum all projectors for one atom. + std::vector nlm_1 = (*nlm_cur1_f)[iw1_all][0]; + std::vector> nlm_2; + nlm_2.resize(3); + for(int i=0;i<3;i++) + { + nlm_2[i] = (*nlm_cur2_f)[iw2_all][i+1]; + } + + assert(nlm_1.size()==nlm_2[0].size()); const int nproj = GlobalC::ucell.infoNL.nproj[T0]; int ib = 0; @@ -687,114 +756,81 @@ void LCAO_gen_fixedH::build_Nonlocal_mu_new(const bool &calc_deri) const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); for(int m=0;m<2*L0+1;m++) { - if(nlm_1[ib]!=0.0 && nlm_2[ib]!=0.0) + for(int ir=0;ir<3;ir++) { - nlm_tmp += nlm_1[ib]*nlm_2[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); + nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); } ib+=1; } } assert(ib==nlm_1.size()); - - if(GlobalV::GAMMA_ONLY_LOCAL) - { - // mohan add 2010-12-20 - if( nlm_tmp!=0.0 ) - { - // GlobalV::ofs_running << std::setw(10) << iw1_all << std::setw(10) - // << iw2_all << std::setw(20) << nlm[0] << std::endl; - GlobalC::LM.set_HSgamma(iw1_all,iw2_all,nlm_tmp,'N');//N stands for nonlocal. - } - } - else - { - if( nlm_tmp!=0.0 ) - { - GlobalC::LM.Hloc_fixedR[nnr] += nlm_tmp; - } - } - }// calc_deri - else // calculate the derivative + GlobalC::LM.set_force (iw1_all, iw2_all, nlm[0], nlm[1], nlm[2], 'N'); + } + else { + // mohan change the order on 2011-06-17 + // origin: < psi1 | beta > < beta | dpsi2/dtau > + //now: < psi1/dtau | beta > < beta | psi2 > + double nlm[3]={0,0,0}; - if(GlobalV::GAMMA_ONLY_LOCAL) + // sum all projectors for one atom. + std::vector nlm_1 = (*nlm_cur2_f)[iw2_all][0]; + std::vector> nlm_2; + nlm_2.resize(3); + for(int i=0;i<3;i++) { - double nlm[3]={0,0,0}; - - // sum all projectors for one atom. - std::vector nlm_1 = nlm_tot1[key1][iw1_all][0]; - std::vector> nlm_2; - nlm_2.resize(3); - for(int i=0;i<3;i++) - { - nlm_2[i] = nlm_tot1[key2][iw2_all][i+1]; - } + nlm_2[i] = (*nlm_cur1_f)[iw1_all][i+1]; + } - assert(nlm_1.size()==nlm_2[0].size()); + assert(nlm_1.size()==nlm_2[0].size()); - const int nproj = GlobalC::ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const int nproj = GlobalC::ucell.infoNL.nproj[T0]; + int ib = 0; + for (int nb = 0; nb < nproj; nb++) + { + const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); + for(int m=0;m<2*L0+1;m++) { - const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); - for(int m=0;m<2*L0+1;m++) + for(int ir=0;ir<3;ir++) { - for(int ir=0;ir<3;ir++) - { - nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); - } - ib+=1; + nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); } + ib+=1; } - assert(ib==nlm_1.size()); - GlobalC::LM.set_force (iw1_all, iw2_all, nlm[0], nlm[1], nlm[2], 'N'); } - else - { - // mohan change the order on 2011-06-17 - // origin: < psi1 | beta > < beta | dpsi2/dtau > - //now: < psi1/dtau | beta > < beta | psi2 > - double nlm[3]={0,0,0}; - - // sum all projectors for one atom. - std::vector nlm_1 = nlm_tot1[key2][iw2_all][0]; - std::vector> nlm_2; - nlm_2.resize(3); - for(int i=0;i<3;i++) - { - nlm_2[i] = nlm_tot1[key1][iw1_all][i+1]; - } + assert(ib==nlm_1.size()); - assert(nlm_1.size()==nlm_2[0].size()); + GlobalC::LM.DHloc_fixedR_x[nnr+nnr_inner] += nlm[0]; + GlobalC::LM.DHloc_fixedR_y[nnr+nnr_inner] += nlm[1]; + GlobalC::LM.DHloc_fixedR_z[nnr+nnr_inner] += nlm[2]; + } + }//!calc_deri + nnr_inner++; + }// k + } // j + } // ad0 - const int nproj = GlobalC::ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) - { - const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); - for(int m=0;m<2*L0+1;m++) - { - for(int ir=0;ir<3;ir++) - { - nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); - } - ib+=1; - } - } - assert(ib==nlm_1.size()); + //outer circle : accumulate nnr + for (int j=0; jnw*GlobalV::NPOL; j++) + { + const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc + const int iw1_all = start1 + j; + const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; + if(mu < 0)continue; - GlobalC::LM.DHloc_fixedR_x[nnr] += nlm[0]; - GlobalC::LM.DHloc_fixedR_y[nnr] += nlm[1]; - GlobalC::LM.DHloc_fixedR_z[nnr] += nlm[2]; - } - }//!calc_deri - }// distance - } // ad0 - ++nnr; - }// k - } // j + // fix a serious bug: atom2[T2] -> atom2 + // mohan 2010-12-20 + for (int k=0; knw*GlobalV::NPOL; k++) + { + const int k0 = k/GlobalV::NPOL; + const int iw2_all = start2 + k; + const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; + if(nu < 0)continue; + + nnr++; + } + } }// end is_adj - //---------------------------------------------------------------------------------- } // ad2 } // I1 } // T1 From fec34adc69e834ca970910a3f6290bf055b9aa19 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 2 Nov 2021 14:33:43 +0800 Subject: [PATCH 042/478] vnl multi-k mu_new : new method 2 --- source/src_lcao/LCAO_gen_fixedH.cpp | 525 ++++++++++++++-------------- 1 file changed, 266 insertions(+), 259 deletions(-) diff --git a/source/src_lcao/LCAO_gen_fixedH.cpp b/source/src_lcao/LCAO_gen_fixedH.cpp index 305ecebcf2..756ab254a8 100644 --- a/source/src_lcao/LCAO_gen_fixedH.cpp +++ b/source/src_lcao/LCAO_gen_fixedH.cpp @@ -441,27 +441,36 @@ void LCAO_gen_fixedH::build_Nonlocal_mu_new(const bool &calc_deri) // while beta is in the supercell. // while phi2 is in the supercell. + + //Step 1 : generate + //type of atom; distance; atomic basis; projectors + std::vector>>> nlm_tot; + std::vector>>>> nlm_tot1; + + if(!calc_deri) + { + nlm_tot.resize(GlobalC::ucell.nat); + } + else + { + nlm_tot1.resize(GlobalC::ucell.nat); + } for(int iat=0;iat - //type of atom; distance; atomic basis; projectors - std::map>> nlm_tot; - std::map>>> nlm_tot1; - const double Rcut_Beta = GlobalC::ucell.infoNL.Beta[it].get_rcut_max(); const ModuleBase::Vector3 tau = GlobalC::ucell.atoms[it].tau[ia]; GlobalC::GridD.Find_atom(GlobalC::ucell, tau ,it, ia); if(!calc_deri) { - nlm_tot.clear(); + nlm_tot[iat].clear(); } else { - nlm_tot1.clear(); + nlm_tot1[iat].clear(); } for (int ad=0; ad - //and accumulate the value to Hloc_fixedR(i,j) - //======================================================= - int nnr = 0; - ModuleBase::Vector3 tau1, tau2, dtau; - ModuleBase::Vector3 dtau1, dtau2, tau0; - ModuleBase::Vector3 dtau1_f, dtau2_f; - double distance = 0.0; - double rcut = 0.0; - double rcut1, rcut2; - - // Record_adj RA; - // RA.for_2d(); + //======================================================= + //Step2: + //calculate sum_(L0,M0) beta + //and accumulate the value to Hloc_fixedR(i,j) + //======================================================= + int nnr = 0; + ModuleBase::Vector3 tau1, tau2, dtau; + ModuleBase::Vector3 dtau1, dtau2, tau0; + ModuleBase::Vector3 dtau1_f, dtau2_f; + double distance = 0.0; + double rcut = 0.0; + double rcut1, rcut2; + + // Record_adj RA; + // RA.for_2d(); - // psi1 - for (int T1 = 0; T1 < GlobalC::ucell.ntype; ++T1) + // psi1 + for (int T1 = 0; T1 < GlobalC::ucell.ntype; ++T1) + { + const Atom* atom1 = &GlobalC::ucell.atoms[T1]; + for (int I1 =0; I1< atom1->na; ++I1) { - const Atom* atom1 = &GlobalC::ucell.atoms[T1]; - for (int I1 =0; I1< atom1->na; ++I1) + //GlobalC::GridD.Find_atom( atom1->tau[I1] ); + GlobalC::GridD.Find_atom(GlobalC::ucell, atom1->tau[I1] ,T1, I1); + const int iat1 = GlobalC::ucell.itia2iat(T1, I1); + const int start1 = GlobalC::ucell.itiaiw2iwt(T1, I1, 0); + tau1 = atom1->tau[I1]; + + // psi2 + for (int ad2=0; ad2tau[I1] ); - GlobalC::GridD.Find_atom(GlobalC::ucell, atom1->tau[I1] ,T1, I1); - const int iat1 = GlobalC::ucell.itia2iat(T1, I1); - const int start1 = GlobalC::ucell.itiaiw2iwt(T1, I1, 0); - tau1 = atom1->tau[I1]; - - // psi2 - for (int ad2=0; ad2= rcut) + + dtau = tau2 - tau1; + distance = dtau.norm2() * pow(GlobalC::ucell.lat0,2); + // this rcut is in order to make nnr consistent + // with other matrix. + rcut = pow(GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ORB.Phi[T2].getRcut(),2); + if(distance < rcut) is_adj = true; + else if(distance >= rcut) + { + for (int ad0 = 0; ad0 < GlobalC::GridD.getAdjacentNum()+1; ++ad0) { - for (int ad0 = 0; ad0 < GlobalC::GridD.getAdjacentNum()+1; ++ad0) - { - const int T0 = GlobalC::GridD.getType(ad0); - //const int I0 = GlobalC::GridD.getNatom(ad0); - //const int T0 = RA.info[iat1][ad0][3]; - //const int I0 = RA.info[iat1][ad0][4]; - //const int iat0 = GlobalC::ucell.itia2iat(T0, I0); - //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); + const int T0 = GlobalC::GridD.getType(ad0); + //const int I0 = GlobalC::GridD.getNatom(ad0); + //const int T0 = RA.info[iat1][ad0][3]; + //const int I0 = RA.info[iat1][ad0][4]; + //const int iat0 = GlobalC::ucell.itia2iat(T0, I0); + //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); - tau0 = GlobalC::GridD.getAdjacentTau(ad0); - dtau1 = tau0 - tau1; - dtau2 = tau0 - tau2; + tau0 = GlobalC::GridD.getAdjacentTau(ad0); + dtau1 = tau0 - tau1; + dtau2 = tau0 - tau2; - const double distance1 = dtau1.norm2() * pow(GlobalC::ucell.lat0,2); - const double distance2 = dtau2.norm2() * pow(GlobalC::ucell.lat0,2); + const double distance1 = dtau1.norm2() * pow(GlobalC::ucell.lat0,2); + const double distance2 = dtau2.norm2() * pow(GlobalC::ucell.lat0,2); - rcut1 = pow(GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); - rcut2 = pow(GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); + rcut1 = pow(GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); + rcut2 = pow(GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); - if( distance1 < rcut1 && distance2 < rcut2 ) - { - is_adj = true; - break; - } + if( distance1 < rcut1 && distance2 < rcut2 ) + { + is_adj = true; + break; } } + } - if(is_adj) + if(is_adj) + { + // < psi1 | all projectors | psi2 > + // ----------------------------- enter the nnr increaing zone ------------------------- + for (int ad0=0; ad0 < GlobalC::GridD.getAdjacentNum()+1 ; ++ad0) { - // < psi1 | all projectors | psi2 > - // ----------------------------- enter the nnr increaing zone ------------------------- - for (int ad0=0; ad0 < GlobalC::GridD.getAdjacentNum()+1 ; ++ad0) - { - const int T0 = GlobalC::GridD.getType(ad0); - const int I0 = GlobalC::GridD.getNatom(ad0); - if(T0!=it || I0!=ia) continue; + const int T0 = GlobalC::GridD.getType(ad0); + const int I0 = GlobalC::GridD.getNatom(ad0); + const int iat = GlobalC::ucell.itia2iat(T0,I0); - // mohan add 2010-12-19 - if( GlobalC::ucell.infoNL.nproj[T0] == 0) continue; + // mohan add 2010-12-19 + if( GlobalC::ucell.infoNL.nproj[T0] == 0) continue; - //const int I0 = GlobalC::GridD.getNatom(ad0); - //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); - tau0 = GlobalC::GridD.getAdjacentTau(ad0); + //const int I0 = GlobalC::GridD.getNatom(ad0); + //const int start0 = GlobalC::ucell.itiaiw2iwt(T0, I0, 0); + tau0 = GlobalC::GridD.getAdjacentTau(ad0); - dtau1 = tau0 - tau1; - dtau2 = tau0 - tau2; - const double distance1 = dtau1.norm2() * pow(GlobalC::ucell.lat0,2); - const double distance2 = dtau2.norm2() * pow(GlobalC::ucell.lat0,2); + dtau1 = tau0 - tau1; + dtau2 = tau0 - tau2; + const double distance1 = dtau1.norm2() * pow(GlobalC::ucell.lat0,2); + const double distance2 = dtau2.norm2() * pow(GlobalC::ucell.lat0,2); - // seems a bug here!! mohan 2011-06-17 - rcut1 = pow(GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); - rcut2 = pow(GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); + // seems a bug here!! mohan 2011-06-17 + rcut1 = pow(GlobalC::ORB.Phi[T1].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); + rcut2 = pow(GlobalC::ORB.Phi[T2].getRcut() + GlobalC::ucell.infoNL.Beta[T0].get_rcut_max(),2); - if(distance1 >= rcut1 || distance2 >= rcut2) - { - continue; - } - //const Atom* atom0 = &GlobalC::ucell.atoms[T0]; - const int rx0=GlobalC::GridD.getBox(ad0).x; - const int ry0=GlobalC::GridD.getBox(ad0).y; - const int rz0=GlobalC::GridD.getBox(ad0).z; - key_tuple key1(iat1,-rx0,-ry0,-rz0); - key_tuple key2(iat2,rx2-rx0,ry2-ry0,rz2-rz0); - - std::unordered_map> *nlm_cur1_e; //left hand side, for energy - std::unordered_map>> *nlm_cur1_f; //lhs, for force - std::unordered_map> *nlm_cur2_e; //rhs, for energy - std::unordered_map>> *nlm_cur2_f; //rhs, for force + if(distance1 >= rcut1 || distance2 >= rcut2) + { + continue; + } + //const Atom* atom0 = &GlobalC::ucell.atoms[T0]; + const int rx0=GlobalC::GridD.getBox(ad0).x; + const int ry0=GlobalC::GridD.getBox(ad0).y; + const int rz0=GlobalC::GridD.getBox(ad0).z; + key_tuple key1(iat1,-rx0,-ry0,-rz0); + key_tuple key2(iat2,rx2-rx0,ry2-ry0,rz2-rz0); + + std::unordered_map> *nlm_cur1_e; //left hand side, for energy + std::unordered_map>> *nlm_cur1_f; //lhs, for force + std::unordered_map> *nlm_cur2_e; //rhs, for energy + std::unordered_map>> *nlm_cur2_f; //rhs, for force - if(!calc_deri) - { - nlm_cur1_e = &nlm_tot[iat][key1]; - nlm_cur2_e = &nlm_tot[iat][key2]; - } - else - { - nlm_cur1_f = &nlm_tot1[key1]; - nlm_cur2_f = &nlm_tot1[key2]; - } - - int nnr_inner = 0; - - for (int j=0; jnw*GlobalV::NPOL; j++) + if(!calc_deri) + { + nlm_cur1_e = &nlm_tot[iat][key1]; + nlm_cur2_e = &nlm_tot[iat][key2]; + } + else + { + nlm_cur1_f = &nlm_tot1[iat][key1]; + nlm_cur2_f = &nlm_tot1[iat][key2]; + } + + int nnr_inner = 0; + + for (int j=0; jnw*GlobalV::NPOL; j++) + { + const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc + const int iw1_all = start1 + j; + const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; + if(mu < 0)continue; + + // fix a serious bug: atom2[T2] -> atom2 + // mohan 2010-12-20 + for (int k=0; knw*GlobalV::NPOL; k++) { - const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc - const int iw1_all = start1 + j; - const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; - if(mu < 0)continue; - - // fix a serious bug: atom2[T2] -> atom2 - // mohan 2010-12-20 - for (int k=0; knw*GlobalV::NPOL; k++) + const int k0 = k/GlobalV::NPOL; + const int iw2_all = start2 + k; + const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; + if(nu < 0)continue; + + if(!calc_deri) { - const int k0 = k/GlobalV::NPOL; - const int iw2_all = start2 + k; - const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; - if(nu < 0)continue; + std::vector nlm_1=(*nlm_cur1_e)[iw1_all]; + std::vector nlm_2=(*nlm_cur2_e)[iw2_all]; + double nlm_tmp = 0.0; - if(!calc_deri) + const int nproj = GlobalC::ucell.infoNL.nproj[T0]; + int ib = 0; + for (int nb = 0; nb < nproj; nb++) { - std::vector nlm_1=(*nlm_cur1_e)[iw1_all]; - std::vector nlm_2=(*nlm_cur2_e)[iw2_all]; - double nlm_tmp = 0.0; - - const int nproj = GlobalC::ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); + for(int m=0;m<2*L0+1;m++) { - const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); - for(int m=0;m<2*L0+1;m++) + if(nlm_1[ib]!=0.0 && nlm_2[ib]!=0.0) { - if(nlm_1[ib]!=0.0 && nlm_2[ib]!=0.0) - { - nlm_tmp += nlm_1[ib]*nlm_2[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); - } - ib+=1; + nlm_tmp += nlm_1[ib]*nlm_2[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); } + ib+=1; } - assert(ib==nlm_1.size()); + } + assert(ib==nlm_1.size()); - if(GlobalV::GAMMA_ONLY_LOCAL) + if(GlobalV::GAMMA_ONLY_LOCAL) + { + // mohan add 2010-12-20 + if( nlm_tmp!=0.0 ) { - // mohan add 2010-12-20 - if( nlm_tmp!=0.0 ) - { - // GlobalV::ofs_running << std::setw(10) << iw1_all << std::setw(10) - // << iw2_all << std::setw(20) << nlm[0] << std::endl; - GlobalC::LM.set_HSgamma(iw1_all,iw2_all,nlm_tmp,'N');//N stands for nonlocal. - } + // GlobalV::ofs_running << std::setw(10) << iw1_all << std::setw(10) + // << iw2_all << std::setw(20) << nlm[0] << std::endl; + GlobalC::LM.set_HSgamma(iw1_all,iw2_all,nlm_tmp,'N');//N stands for nonlocal. } - else + } + else + { + if( nlm_tmp!=0.0 ) { - if( nlm_tmp!=0.0 ) - { - GlobalC::LM.Hloc_fixedR[nnr+nnr_inner] += nlm_tmp; - } + GlobalC::LM.Hloc_fixedR[nnr+nnr_inner] += nlm_tmp; } - }// calc_deri - else // calculate the derivative + } + }// calc_deri + else // calculate the derivative + { + if(GlobalV::GAMMA_ONLY_LOCAL) { - if(GlobalV::GAMMA_ONLY_LOCAL) - { - double nlm[3]={0,0,0}; + double nlm[3]={0,0,0}; - // sum all projectors for one atom. - std::vector nlm_1 = (*nlm_cur1_f)[iw1_all][0]; - std::vector> nlm_2; - nlm_2.resize(3); - for(int i=0;i<3;i++) - { - nlm_2[i] = (*nlm_cur2_f)[iw2_all][i+1]; - } + // sum all projectors for one atom. + std::vector nlm_1 = (*nlm_cur1_f)[iw1_all][0]; + std::vector> nlm_2; + nlm_2.resize(3); + for(int i=0;i<3;i++) + { + nlm_2[i] = (*nlm_cur2_f)[iw2_all][i+1]; + } - assert(nlm_1.size()==nlm_2[0].size()); + assert(nlm_1.size()==nlm_2[0].size()); - const int nproj = GlobalC::ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const int nproj = GlobalC::ucell.infoNL.nproj[T0]; + int ib = 0; + for (int nb = 0; nb < nproj; nb++) + { + const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); + for(int m=0;m<2*L0+1;m++) { - const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); - for(int m=0;m<2*L0+1;m++) + for(int ir=0;ir<3;ir++) { - for(int ir=0;ir<3;ir++) - { - nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); - } - ib+=1; + nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); } + ib+=1; } - assert(ib==nlm_1.size()); - GlobalC::LM.set_force (iw1_all, iw2_all, nlm[0], nlm[1], nlm[2], 'N'); } - else + assert(ib==nlm_1.size()); + GlobalC::LM.set_force (iw1_all, iw2_all, nlm[0], nlm[1], nlm[2], 'N'); + } + else + { + // mohan change the order on 2011-06-17 + // origin: < psi1 | beta > < beta | dpsi2/dtau > + //now: < psi1/dtau | beta > < beta | psi2 > + double nlm[3]={0,0,0}; + + // sum all projectors for one atom. + std::vector nlm_1 = (*nlm_cur2_f)[iw2_all][0]; + std::vector> nlm_2; + nlm_2.resize(3); + for(int i=0;i<3;i++) { - // mohan change the order on 2011-06-17 - // origin: < psi1 | beta > < beta | dpsi2/dtau > - //now: < psi1/dtau | beta > < beta | psi2 > - double nlm[3]={0,0,0}; - - // sum all projectors for one atom. - std::vector nlm_1 = (*nlm_cur2_f)[iw2_all][0]; - std::vector> nlm_2; - nlm_2.resize(3); - for(int i=0;i<3;i++) - { - nlm_2[i] = (*nlm_cur1_f)[iw1_all][i+1]; - } + nlm_2[i] = (*nlm_cur1_f)[iw1_all][i+1]; + } - assert(nlm_1.size()==nlm_2[0].size()); + assert(nlm_1.size()==nlm_2[0].size()); - const int nproj = GlobalC::ucell.infoNL.nproj[T0]; - int ib = 0; - for (int nb = 0; nb < nproj; nb++) + const int nproj = GlobalC::ucell.infoNL.nproj[T0]; + int ib = 0; + for (int nb = 0; nb < nproj; nb++) + { + const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); + for(int m=0;m<2*L0+1;m++) { - const int L0 = GlobalC::ucell.infoNL.Beta[T0].Proj[nb].getL(); - for(int m=0;m<2*L0+1;m++) + for(int ir=0;ir<3;ir++) { - for(int ir=0;ir<3;ir++) - { - nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); - } - ib+=1; + nlm[ir] += nlm_2[ir][ib]*nlm_1[ib]*GlobalC::ucell.atoms[T0].dion(nb,nb); } + ib+=1; } - assert(ib==nlm_1.size()); - - GlobalC::LM.DHloc_fixedR_x[nnr+nnr_inner] += nlm[0]; - GlobalC::LM.DHloc_fixedR_y[nnr+nnr_inner] += nlm[1]; - GlobalC::LM.DHloc_fixedR_z[nnr+nnr_inner] += nlm[2]; } - }//!calc_deri - nnr_inner++; - }// k - } // j - } // ad0 + assert(ib==nlm_1.size()); - //outer circle : accumulate nnr - for (int j=0; jnw*GlobalV::NPOL; j++) - { - const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc - const int iw1_all = start1 + j; - const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; - if(mu < 0)continue; + GlobalC::LM.DHloc_fixedR_x[nnr+nnr_inner] += nlm[0]; + GlobalC::LM.DHloc_fixedR_y[nnr+nnr_inner] += nlm[1]; + GlobalC::LM.DHloc_fixedR_z[nnr+nnr_inner] += nlm[2]; + } + }//!calc_deri + nnr_inner++; + }// k + } // j + } // ad0 - // fix a serious bug: atom2[T2] -> atom2 - // mohan 2010-12-20 - for (int k=0; knw*GlobalV::NPOL; k++) - { - const int k0 = k/GlobalV::NPOL; - const int iw2_all = start2 + k; - const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; - if(nu < 0)continue; + //outer circle : accumulate nnr + for (int j=0; jnw*GlobalV::NPOL; j++) + { + const int j0 = j/GlobalV::NPOL;//added by zhengdy-soc + const int iw1_all = start1 + j; + const int mu = GlobalC::ParaO.trace_loc_row[iw1_all]; + if(mu < 0)continue; - nnr++; - } - } - }// end is_adj - } // ad2 - } // I1 - } // T1 + // fix a serious bug: atom2[T2] -> atom2 + // mohan 2010-12-20 + for (int k=0; knw*GlobalV::NPOL; k++) + { + const int k0 = k/GlobalV::NPOL; + const int iw2_all = start2 + k; + const int nu = GlobalC::ParaO.trace_loc_col[iw2_all]; + if(nu < 0)continue; + nnr++; + } + } + }// end is_adj + } // ad2 + } // I1 + } // T1 - if(!GlobalV::GAMMA_ONLY_LOCAL) + if(!GlobalV::GAMMA_ONLY_LOCAL) + { + // std::cout << " nr=" << nnr << std::endl; + // std::cout << " GlobalC::LNNR.nnr=" << GlobalC::LNNR.nnr << std::endl; + // GlobalV::ofs_running << " nr=" << nnr << std::endl; + // GlobalV::ofs_running << " GlobalC::LNNR.nnr=" << GlobalC::LNNR.nnr << std::endl; + if( nnr!=GlobalC::LNNR.nnr) { - // std::cout << " nr=" << nnr << std::endl; - // std::cout << " GlobalC::LNNR.nnr=" << GlobalC::LNNR.nnr << std::endl; - // GlobalV::ofs_running << " nr=" << nnr << std::endl; - // GlobalV::ofs_running << " GlobalC::LNNR.nnr=" << GlobalC::LNNR.nnr << std::endl; - if( nnr!=GlobalC::LNNR.nnr) - { - ModuleBase::WARNING_QUIT("LCAO_gen_fixedH::build_Nonlocal_mu_new","nnr!=GlobalC::LNNR.nnr"); - } + ModuleBase::WARNING_QUIT("LCAO_gen_fixedH::build_Nonlocal_mu_new","nnr!=GlobalC::LNNR.nnr"); } - }//iat + } // std::cout << " build_Nonlocal_mu done" << std::endl; From b0c0539df469fcfb69feba1f31ddbf220b80c284 Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Tue, 2 Nov 2021 15:32:59 +0800 Subject: [PATCH 043/478] add distribution_method_1 in pw_distribute.cpp --- source/module_pw/pw_basis.h | 45 +++ source/module_pw/pw_distribute.cpp | 434 ++++++++++++++++++++++++++++- 2 files changed, 478 insertions(+), 1 deletion(-) diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index f110554324..cf816def41 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -81,6 +81,51 @@ class PW_Basis //distribute plane waves to different processors void distribution_method1(); + void count_pw_st( + int &tot_npw, // total number of planewaves. + int &tot_nst, // total number of sticks. + int* st_length2D, // the number of planewaves that belong to the stick located on (x, y). + int* st_bottom2D // the z-coordinate of the bottom of stick on (x, y). + ); + void collect_pw_st( + const int tot_npw, // total number of planewaves. + const int tot_nst, // total number of sticks. + int* st_length2D, // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. + int* st_bottom2D, // the z-coordinate of the bottom of stick on (x, y), stored in 2d x-y plane. + double* gg_global, // the modulus of all planewaves. + ModuleBase::Vector3 *gdirect_global, // direct coordinates of planewaves. + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* st_length, // number of planewaves in stick, stored in 1d array with tot_nst elements. + int* st_bottom // minimum z of stick, stored in 1d array with tot_nst elements. + ); + void divide_sticks( + const int tot_npw, // total number of planewaves. + const int tot_nst, // total number of sticks. + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. + int* npw_per, // number of planewaves on each core. + int* nst_per, // number of sticks on each core. + int* is2ip, // ip of core containing is^th stick, map is to ip. + int* ir2ip // store the ip of proc which contains stick on (x, y). + ); + void divide_pw( + const int tot_npw, // total number of planewaves. + double* gg_global, // the modulus of all planewaves. + ModuleBase::Vector3*gdirect_global, // direct coordinates of planewaves. + int* ir2ip, // store the ip of proc which contains stick on (x, y). + double* gg2D, // the i^th row contains the modulus of planewaves that belong to the i^th core. + ModuleBase::Vector3*gdirect2D // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. + ); + void get_ig2fft_is2ir( + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* st_bottom, // minimum z of stick, stored in 1d array with tot_nst elements. + int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. + int* is2ip, // ip of core containing is^th stick, map is to ip. + int* nst_per // number of sticks on each core. + ); //=============================================== diff --git a/source/module_pw/pw_distribute.cpp b/source/module_pw/pw_distribute.cpp index 60b0c226dc..71643e066a 100644 --- a/source/module_pw/pw_distribute.cpp +++ b/source/module_pw/pw_distribute.cpp @@ -1,7 +1,7 @@ #include "pw_basis.h" // -//distribute plane waves to different processors +//distribute plane waves to different coreors //Known: G, GT, GGT, nx, ny, nz, poolnproc, poolrank, ggecut //output: ig2fft[ig], is2ir[is], gg[ig], gcar[ig], gdirect[ig], nst // @@ -20,6 +20,438 @@ void PW_Basis::distribute_g() void PW_Basis::distribution_method1() { + if (poolrank == 0) + { + // (1) Count the total number of planewaves (tot_npw) and sticks (tot_nst). + const int nxy = this->nx * this->ny; // number of points in x-y plane. + int tot_npw = 0; // total number of planewaves. + int tot_nst = 0; // total number of sticks. + + // Actually we will scan [(2 * ibox[0] + 1) * (2 * ibox[1] + 1)] points on x-y plane, + // but we define st_length2D with (nx * ny) points here, because we assume that the diameter + // of the sphere is shorter than the sides of the cube. + int *st_length2D = new int[nxy]; // the number of planewaves that belong to the stick located on (x, y). + int *st_bottom2D = new int[nxy]; // the z-coordinate of the bottom of stick on (x, y). + ModuleBase::GlobalFunc::ZEROS(st_length2D, nxy); + ModuleBase::GlobalFunc::ZEROS(st_bottom2D, nxy); + + this->count_pw_st(tot_npw, tot_nst, st_length2D, st_bottom2D); + + // (2) Collect all planewaves and the x, y indexs, length, bottom of the sticks. + double *gg_global = new double[tot_npw]; // the modulus of all planewaves. + ModuleBase::Vector3* gdirect_global = new ModuleBase::Vector3[tot_npw]; // direct coordinates of planewaves. + int *st_i = new int[tot_nst]; // x or x + nx (if x < 0) of stick. + int *st_j = new int[tot_nst]; // y or y + ny (if y < 0) of stick. + int *st_bottom = new int[tot_nst]; // minimum z of stick. + int *st_length = new int[tot_nst]; // number of planewaves in stick. + + this->collect_pw_st(tot_npw, tot_nst, st_length2D, st_bottom2D, gg_global, gdirect_global, st_i, st_j, st_length, st_bottom); + + delete[] st_length2D; + delete[] st_bottom2D; + + // (3) Distribute sticks to cores. + int *npw_per = new int[this->poolnproc]; // number of planewaves on each core. + int *nst_per = new int[this->poolnproc]; // number of sticks on each core. + ModuleBase::GlobalFunc::ZEROS(npw_per, poolnproc); + ModuleBase::GlobalFunc::ZEROS(nst_per, poolnproc); + int *is2ip = new int[tot_nst]; // ip of core that contains is^th stick, map is to ip. + for (int i = 0; i < tot_nst; i++) + { + is2ip[i] = -1; // meaning this stick has not been distributed. + } + int *ir2ip = new int[nxy]; // ip of core which contains stick on (x, y). + for (int i = 0; i < nx * ny; i++) + { + ir2ip[i] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). + } + + this->divide_sticks(tot_npw, tot_nst, st_i, st_j, st_length, npw_per, nst_per, is2ip, ir2ip); + + // (4) Divide planewaves to each core, construct gg2D and gdirect2D. + + double **gg2D = new double*[poolnproc]; // the i^th row contains the modulus of planewaves that belong to the i^th core. + ModuleBase::Vector3 **gdirect2D = new ModuleBase::Vector3*[poolnproc]; // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. + for (int ip = 0; ip < poolnproc; ip++) + { + gg2D[ip] = new double[npw_per[ip]]; + gdirect2D[ip] = new ModuleBase::Vector3[npw_per[ip]]; + } + + this->divide_pw(tot_npw, gg_global, gdirect_global, ir2ip, gg2D, gdirect2D); + + delete[] gg_global; + delete[] gdirect_global; + delete[] ir2ip; + + // (5) Send gg, gdirect, npw_per, nst[poolrank], st_* to all cores. + this->npw = npw_per[0]; + this->nst = nst_per[0]; + this->gg = gg2D[0]; + this->gdirect = gdirect2D[0]; + for (int ip = 1; ip < this->poolnproc; ip++) + { + MPI_Send(&tot_npw, 1, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&tot_nst, 1, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&npw_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&nst_per, poolnproc, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&gg2D[ip], npw_per[ip], MPI_DOUBLE, ip, 0, POOL_WORLD); + MPI_Send(&gdirect2D[ip], npw_per[ip]*3, MPI_DOUBLE, ip, 0, POOL_WORLD); // I'm not sure about the send size and type here. + MPI_Send(&st_i, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&st_j, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&st_length, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&st_bottom, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&is2ip, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + } + for (int ip = 0; i) + { + delete[] gg2D[ip]; + delete[] gdirect2D[ip]; + } + delete[] gg2D; + delete[] gdirect2D; + delete[] npw_per; + } + else + { + int nxy = this->nx * this->ny; + MPI_Recv(&tot_npw, 1, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&tot_nst, 1, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&npw, 1, MPI_INT, 0, 0, POOL_WORLD); // number of planewaves in current proc. + MPI_Recv(&nst_per, poolnproc, MPI_INT, 0, 0, POOL_WORLD); + this->nst = nst_per[poolrank]; + MPI_Recv(&gg, npw, MPI_DOUBLE, 0, 0, POOL_WORLD); + MPI_Recv(&gdirect, npw*3, MPI_DOUBLE, 0, 0, POOL_WORLD); // I'm not sure about the send size and type here. + MPI_Recv(&st_i, tot_nst, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&st_j, tot_nst, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&st_length, tot_nst, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&st_bottom, tot_nst, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&is2ip, tot_nst, MPI_INT, 0, 0, POOL_WORLD); + } + + this->gcar = new ModuleBase::Vector3[this->npw]; + for (int i = 0; i < this->npw; i++) + { + gcar[i] = gdirect[i] * this->G; + } + + // (6) Construct ig2fft and is2ir. + + this->get_ig2fft_is2ir(st_i, st_j, st_bottom, st_leghth, is2ip, nst_per); + + delete[] st_i; + delete[] st_j; + delete[] st_bottom; + delete[] st_length; + delete[] is2ip; + delete[] nst_per; + return; } +// +// (1) We count the total number of planewaves (tot_npw) and sticks (tot_nst) here. +// Meanwhile, we record the number of planewaves on (x, y) in st_length2D, and store the smallest z-coordinate of each stick in st_bottom2D, +// so that we can scan a much smaller area in step(2). +// known: nx, ny, nz, ggecut, GGT +// output: tot_npw, tot_nst, st_length2D, st_bottom2D +// +void PW_Basis::count_pw_st( + int &tot_npw, // total number of planewaves. + int &tot_nst, // total number of sticks. + int* st_length2D, // the number of planewaves that belong to the stick located on (x, y). + int* st_bottom2D // the z-coordinate of the bottom of stick on (x, y). +) +{ + int ibox[3] = {0, 0, 0}; // an auxiliary vector, determine the boundary of the scanning area. + ibox[0] = int(this->nx / 2) + 1; // scan x from -ibox[0] to ibox[0]. + ibox[1] = int(this->ny / 2) + 1; // scan y from -ibox[1] to ibox[1]. + ibox[2] = int(this->nz / 2) + 1; // scan z from -ibox[2] to ibox[2]. + + ModuleBase::Vector3 f; + for (int ix = -ibox[0]; ix <= ibox[0]; ix++) + { + for (int iy = -ibox[1]; iy <= ibox[1]; iy++) + { + // we shift all sticks to the first quadrant in x-y plane here. + // (ix, iy, iz) is the direct coordinates of planewaves. + // x and y is the coordinates of shifted sticks in x-y plane. + // for example, if nx = ny = 10, we will shift the stick on (-1, 2) to (9, 2), + // so that its index in st_length and st_bottom is 9 * 10 + 2 = 20. + int x = ix; + int y = iy; + if (x < 0) x += this->nx; + if (y < 0) y += this->ny; + int index = x * this->ny + y; + + int length = 0; // number of planewave in stick (x, y). + for (int iz = -ibox[2]; iz <= ibox[2]; iz++) + { + f.x = ix; + f.y = iy; + f.z = iz; + double modulus = f * (this->GGT * f); + if (modulus <= this->ggecut) + { + if (length == 0) st_bottom[index] = iz; // length == 0 means this point is the bottom of stick (x, y). + ++tot_npw; + ++length; + } + } + if (length > 0) + { + st_length[index] = length; + ++tot_nst; + } + } + } + return; +} + +// +// (2) Collect all planewaves and the x, y indexs, length, z_start of the sticks. +// Firstly, we collect the modulus of planewaves to gg_global, direct coordinates to gdirect_global, +// and construct temp_st_* simultaneously. +// Then, we will sort gg_global from lagest to smallest, and rearrange gdirect_global in the same order, +// that's why we define "temp"_gdirect. +// We define "temp"_st_* because we will rearrange them in the order of length decreasing, too. +// known: tot_npw, tot_nst, st_length2D, st_bottom2D +// output: gg_global, gdirect_global, st_i, st_j, st_length, st_bottom +// +void PW_Basis::collect_pw_st( + const int tot_npw, // total number of planewaves. + const int tot_nst, // total number of sticks. + int* st_length2D, // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. + int* st_bottom2D, // the z-coordinate of the bottom of stick on (x, y), stored in 2d x-y plane. + double* gg_global, // the modulus of all planewaves. + ModuleBase::Vector3 *gdirect_global, // direct coordinates of planewaves. + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* st_length, // number of planewaves in stick, stored in 1d array with tot_nst elements. + int* st_bottom // minimum z of stick, stored in 1d array with tot_nst elements. +) +{ + ModuleBase::Vector3 *temp_gdirect = new ModuleBase::Vector3[tot_npw]; // direct coordinates of all planewaves, in the order of (x * ny * nz + y * nx + z). + int *temp_st_i = new int[tot_nst]; // x or x + nx (if x < 0) of stick. + int *temp_st_j = new int[tot_nst]; // y or y + ny (if y < 0) of stick. + int *temp_st_bottom = new int[tot_nst]; // minimum z of stick. + ModuleBase::GlobalFunc::ZEROS(st_length, tot_nst); + + int ibox[3] = {0, 0, 0}; // an auxiliary vector, determine the boundary of the scanning area. + ibox[0] = int(this->nx / 2) + 1; // scan x from -ibox[0] to ibox[0]. + ibox[1] = int(this->ny / 2) + 1; // scan y from -ibox[1] to ibox[1]. + ibox[2] = int(this->nz / 2) + 1; // scan z from -ibox[2] to ibox[2]. + + ModuleBase::Vector3 f; + int ig = 0; // index of planewave. + int is = 0; // index of stick. + for (int ix = -ibox[0]; ix <= ibox[0]; ix++) + { + for (int iy = -ibox[1]; iy <= ibox[1]; iy++) + { + // we have shifted all sticks to the first quadrant in x-y plane before. + // (ix, iy, iz) is the direct coordinates of planewaves. + // x and y is the coordinates of shifted sticks in x-y plane. + // for example, if nx = ny = 10, we will shift the stick on (-1, 2) to (9, 2), + // so that its index in st_length and st_bottom is 9 * 10 + 2 = 20. + int x = ix; + int y = iy; + if (x < 0) x += nx; + if (y < 0) y += ny; + int index = x * ny + y; + if (st_length[index] > 0) // meaning there is a stick on (x, y) point. + { + for (int iz = st_bottom2D[index]; iz < st_bottom2D[index] + st_length2D[index]; iz++) + { + f.x = ix; + f.y = iy; + f.z = iz; + double modulus = f * (GGT * f); + assert (modulus <= ggecut); + gg_global[ig] = modulus; + temp_gdirect[ig] = f; + ig++; + } + + temp_st_i[is] = x; + temp_st_j[is] = y; + st_length[is] = st_length2D[index]; + temp_st_bottom[is] = st_bottom2D[index]; + is++; + } + } + } + assert(ig == tot_npw); + assert(is == tot_nst); + + // Rearrange gg_global and gdirect in the order of modulus decreasing, and sort st_* from longest to shortest. + // Firstly, we sort gg_global from lagest to smallest here, and get gdirect by rearranging gdirect_global in the same order. + // Next, as we will distribute the longest sticks preferentially in Step(3), we rearrange st_* in the order of length decreasing. + + int *gg_sorted_index = new int[tot_npw]; + gg_sorted_index[0] = 0; + ModuleBase::heapsort(tot_npw, gg_global, gg_sorted_index); // sort gg_global in the order of modulus decreasing. + for (int i = 0; i < tot_npw; i++) + { + gdirect_global[i] = temp_gdirect[gg_sorted_index[i]]; // rearrange gdirect_global in the same order of gg_global. + } + + int *st_sorted_index = new int[tot_nst]; + st_sorted_index[0] = 0; + ModuleBase::heapsort(tot_nst, st_length, st_sorted_index); // sort st_* in the order of length decreasing. + + for (int i = 0; i < tot_nst; i++) + { + st_i[i] = temp_st_i[st_sorted_index[i]]; + st_j[i] = temp_st_j[st_sorted_index[i]]; + st_bottom[i] = temp_st_bottom[st_sorted_index[i]]; + } + + delete[] temp_gdirect; + delete[] temp_st_i; + delete[] temp_st_j; + delete[] temp_st_bottom; + delete[] gg_sorted_index; + delete[] st_sorted_index; + return; +} + +// +// (3) Distribute sticks to cores. +// We have rearranged sticks in the order of length decreasing, so that we will distribute the longest stick preferentially here. +// For each stick, we find the core that contains the least planewaves firstly, and distribute the stick to it, +// then update npw_per, nst_per, is2ip and ir2ip. +// known: tot_npw, tot_nst, st_i, st_j, st_length +// output: npw_per, nst_per, is2ip, ir2ip +// +void PW_Basis::divide_sticks( + const int tot_npw, // total number of planewaves. + const int tot_nst, // total number of sticks. + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. + int* npw_per, // number of planewaves on each core. + int* nst_per, // number of sticks on each core. + int* is2ip, // ip of core containing is^th stick, map is to ip. + int* ir2ip // store the ip of proc which contains stick on (x, y). +) +{ + int ipmin = 0; // The ip of core containing least number of planewaves. + for (int is = 0; is < tot_nst; is++) + { + // find the ip of core containing the least planewaves. + for (int ip = 0; ip < this->poolnproc; ip++) + { + const int ngrid = this->nx * this->ny * this->nrxx[ip]; // number of real space planewaves on this core. + const int non_zero_grid = nst_per[ip] * this->nz; // number of reciprocal planewaves on this core. + const int npwmin = npw_per[ipmin]; + const int npw_ip = npw_per[ip]; + const int nstmin = nst_per[ipmin]; + const int nst_ip = nst_per[ip]; + + if (npw_ip == 0 || npw_ip < npwmin) + { + if (non_zero_grid + nz < ngrid) // assert reciprocal planewaves is less than real space planewaves. + { + ipmin = ip; + } + } + else if (npw_ip == npwmin && nst_ip < nstmin) + { + if (non_zero_grid + nz < ngrid) + { + ipmin = ip; + } + } + } + nst_per[ipmin]++; + npw_per[ipmin] += st_length[is]; + is2ip[is] = ipmin; + ir2ip[st_i[is] * this->ny + st_j[is]] = ipmin; + } + return; +} +// +// (4) Divide planewaves to each core, construct gg2D and gdirect2D. +// gg2D is a 2D array, the i^th row contains the planewaves that belong to the i^th core, and so is gdirect2D. +// Hence, we can send i^th row of gg2D and gdirect2D to i^th core instead of sending whole gg_global and gdirect_global. +// For each planewave, we map its x, y coordinates to the ip of core that contains it with ir2ip. +// known: tot_npw, gg_global, gdirect_global, ir2ip +// output: gg2D, gdirect2D +// +void PW_Basis::divide_pw( + const int tot_npw, // total number of planewaves. + double* gg_global, // the modulus of all planewaves. + ModuleBase::Vector3*gdirect_global, // direct coordinates of planewaves. + int* ir2ip, // store the ip of proc which contains stick on (x, y). + double* gg2D, // the i^th row contains the modulus of planewaves that belong to the i^th core. + ModuleBase::Vector3*gdirect2D // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. +) +{ + int* pw_found = new int[this->poolnproc]; // how many planewaves have been found. + ModuleBase::GlobalFunc::ZEROS(this->poolnproc, pw_found); + for (int ig = 0; ig < tot_npw; ig++) + { + int x = gdirect_global[ig].x; + int y = gdirect_global[ig].y; + if (x < 0) x += nx; + if (y < 0) y += ny; + int ip = ir2ip[x * ny + y]; + gg2D[ip][pw_found[ip]] = gg_global[ig]; + gdirect2D[ip][pw_found[ip]] = gdirect2D[ig]; + pw_found[ip]++; + } + delete[] pw_found; + return; +} +// +// (6) Construct ig2fft and is2ir. +// is2ir contains the x-coordinate and y-coordinate of sticks on current core. +// ig2fft contains the z-coordinate of planewaves on current core. +// +void PW_Basis::get_ig2fft_is2ir( + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* st_bottom, // minimum z of stick, stored in 1d array with tot_nst elements. + int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. + int* is2ip, // ip of core containing is^th stick, map is to ip. + int* nst_per // number of sticks on each core. +) +{ + // we will rearrange sticks in the order of the ip of core increasing next. + // (st_start + st_move) is the new index of sticks. + int st_start = 0; // index of the first stick belong to this core. + for (int ip = 0; ip < this->poolrank - 1; ip++) + { + st_start += nst_per[ip]; + } + + this->ig2fft = new int[this->npw]; // map ig to the z coordinate of this planewave. + ModuleBase::GlobalFunc::ZEROS(ig2fft, npw); + this->is2ir = new int[this->nst]; // map is (index of sticks) to ir (x * ny + y). + for (int i = 0; i < nst; i++) + { + is2ir[i] = -1; // meaning this stick doesn't belong to current core. + } + + int st_move = 0; // this is the st_move^th stick on current core. + int pw_filled = 0; // how many current core's planewaves have been found. + for (int is = 0; is < tot_nst; is++) + { + if (is2ip[is] == poolrank) + { + int zstart = st_bottom; + for (int ig = 0; ig < st_length[is]; ig++) + { + int z = ig + zstart; // z-coordinate of this planewave. + if (z < 0) z += nz; + this->ig2fft[pw_filled] = st_move * nz + z; + this->is2ir[st_start + st_move] = st_i[is] * ny + st_j[is]; + pw_filled++; + } + st_move++; + } + if (st_move == this->nst && pw_filled == this->npw) break; + } + return; +} \ No newline at end of file From 4c396020861a471d2c44e2eeceaaaf0b8ae295e2 Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Tue, 2 Nov 2021 16:00:21 +0800 Subject: [PATCH 044/478] add declaration of variables and functions about distribution_method_1 into pw_basis.h and pw_basis.cpp. --- source/module_pw/pw_basis.cpp | 16 ++++++++++++---- source/module_pw/pw_basis.h | 12 +++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/source/module_pw/pw_basis.cpp b/source/module_pw/pw_basis.cpp index b5532c42e8..b2ea359e97 100644 --- a/source/module_pw/pw_basis.cpp +++ b/source/module_pw/pw_basis.cpp @@ -2,16 +2,24 @@ PW_Basis::PW_Basis() { - ig2fft = NULL; - is2ir = NULL; + ig2isz = NULL; + istot2ixy = NULL; + is2ixy = NULL; + ixy2ip = NULL; + startis = NULL; + nst_per = NULL; gdirect = NULL; gcar = NULL; gg = NULL; } PW_Basis:: ~PW_Basis() { - if(ig2fft != NULL) delete[] ig2fft; - if(is2ir != NULL) delete[] is2ir; + if(ig2isz != NULL) delete[] ig2isz; + if(istot2ixy != NULL) delete[] istot2ixy; + if(is2ixy != NULL) delete[] is2ixy; + if(ixy2ip != NULL) delete[] ixy2ip; + if(startis != NULL) delete[] startis; + if(nst_per != NULL) delete[] nst_per; if(gdirect != NULL) delete[] gdirect; if(gcar != NULL) delete[] gcar; if(gg != NULL) delete[] gg; diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 1b68ed649d..84047c6eb3 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -51,8 +51,12 @@ class PW_Basis //=============================================== public: //reciprocal-space - int *ig2fft; // dimension: [ngmw] - int *is2ir; + int *ig2isz; // map ig to (is, iz). + int *istot2ixy; // istot2ixy[is]: ix + iy * nx of is^th stick among all sticks. + int *is2ixy; // is2ixy[is]: ix + iy * nx of is^th stick among sticks on current proc. + int *ixy2ip; // store the ip of proc which contains stick on (x, y). + int *startis; // startis[ip]: starting is stick in the ip^th proc. + int *nst_per; // number of sticks on each core. int nst; //num. of sticks in current proc. int npw; //num. of plane waves in current proc. //real space @@ -102,14 +106,12 @@ class PW_Basis int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. int* npw_per, // number of planewaves on each core. int* nst_per, // number of sticks on each core. - int* is2ip, // ip of core containing is^th stick, map is to ip. - int* ir2ip // store the ip of proc which contains stick on (x, y). + int* is2ip // ip of core containing is^th stick, map is to ip. ); void divide_pw( const int tot_npw, // total number of planewaves. double* gg_global, // the modulus of all planewaves. ModuleBase::Vector3*gdirect_global, // direct coordinates of planewaves. - int* ir2ip, // store the ip of proc which contains stick on (x, y). double* gg2D, // the i^th row contains the modulus of planewaves that belong to the i^th core. ModuleBase::Vector3*gdirect2D // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. ); From ee70072f81f0dcb6cfecb7ba97dc7d407b03b953 Mon Sep 17 00:00:00 2001 From: qianrui Date: Tue, 2 Nov 2021 16:07:14 +0800 Subject: [PATCH 045/478] save temporarily --- source/module_pw/fft.cpp | 124 +++++++++--------- source/module_pw/fft.h | 28 ++-- source/module_pw/pw_basis.cpp | 4 +- source/module_pw/pw_basis.h | 60 +++++---- source/module_pw/pw_convert.cpp | 122 +++++++++++++++++ .../{pw_distribute.cpp => pw_distributeg.cpp} | 0 .../{rg_distribute.cpp => pw_distributer.cpp} | 5 + source/module_pw/pw_init.cpp | 1 + source/module_pw/pw_operation.cpp | 1 + 9 files changed, 250 insertions(+), 95 deletions(-) create mode 100644 source/module_pw/pw_convert.cpp rename source/module_pw/{pw_distribute.cpp => pw_distributeg.cpp} (100%) rename source/module_pw/{rg_distribute.cpp => pw_distributer.cpp} (93%) diff --git a/source/module_pw/fft.cpp b/source/module_pw/fft.cpp index 3362f3572d..7b739e9284 100644 --- a/source/module_pw/fft.cpp +++ b/source/module_pw/fft.cpp @@ -4,6 +4,8 @@ FFT::FFT() { nx = ny = nz = 2; + nxy = 4; + nxyz = 8; ns = 1; nplane = 1; mpifft = false; @@ -40,17 +42,19 @@ void FFT:: initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, b this->ns = ns_in; this->nplane = nplane_in; this->mpifft = mpifft_in; + this->nxy = this->nx * this-> ny; + this->nxyz = this->nxy * this->nz; if(!this->mpifft) { - c_gspace = fftw_malloc(sizeof(fftw_complex) * this->nz * this->ns); - r_gspace = fftw_malloc(sizeof(double) * this->nz * this->ns); - c_rspace = fftw_malloc(sizeof(fftw_complex) * this->nx * this->ny * nplane); - r_rspace = fftw_malloc(sizeof(double) * this->nx * this->ny * nplane); + c_gspace = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * this->nz * this->ns); + r_gspace = (fftw_complex*)fftw_malloc(sizeof(double) * this->nz * this->ns); + c_rspace = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * this->nx * this->ny * nplane); + r_rspace = (fftw_complex*)fftw_malloc(sizeof(double) * this->nx * this->ny * nplane); #ifdef __MIX_PRECISION - cf_gspace = fftw_malloc(sizeof(fftwf_complex) * this->nz * this->ns); - rf_gspace = fftw_malloc(sizeof(float) * this->nz * this->ns); - cf_rspace = fftw_malloc(sizeof(fftwf_complex) * this->nx * this->ny * nplane); - rf_rspace = fftw_malloc(sizeof(float) * this->nx * this->ny * nplane); + cf_gspace = (fftwf_complex*)fftw_malloc(sizeof(fftwf_complex) * this->nz * this->ns); + rf_gspace = (fftwf_complex*)fftw_malloc(sizeof(float) * this->nz * this->ns); + cf_rspace = (fftwf_complex*)fftw_malloc(sizeof(fftwf_complex) * this->nx * this->ny * nplane); + rf_rspace = (fftwf_complex*)fftw_malloc(sizeof(float) * this->nx * this->ny * nplane); #endif } else @@ -87,46 +91,45 @@ void FFT :: initpland() // 1 D //--------------------------------------------------------- - // fftw_plan_many_dft(int rank, const int *n, int howmany, + // fftw_plan_many_dft(int rank, const int *n, int howmany, // fftw_complex *in, const int *inembed, int istride, int idist, // fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); - this->plan1for = fftw_plan_many_dft( 1, &this->nz, this->ns, - c_gspace, &this->nz, 1, this->nz, - c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); + this->plan1for = fftw_plan_many_dft( 1, &this->nz, this->ns, + (fftw_complex*) c_gspace, &this->nz, 1, this->nz, + (fftw_complex*) c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); - this->plan1bac = fftw_plan_many_dft( 1, &this->nz, this->ns, - c_gspace, &this->nz, 1, this->nz, - c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); + this->plan1bac = fftw_plan_many_dft( 1, &this->nz, this->ns, + (fftw_complex*) c_gspace, &this->nz, 1, this->nz, + (fftw_complex*) c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); - this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, - r_gspace, &this->nz, 1, this->nz, - c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, + r_gspace, &this->nz, 1, this->nz, + (fftw_complex*) c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); this->plan1c2r = fftw_plan_many_dft_c2r( 1, &this->nz, this->ns, - c_gspace, &this->nz, 1, this->nz, - r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + (fftw_complex*) c_gspace, &this->nz, 1, this->nz, + r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); //--------------------------------------------------------- // 2 D //--------------------------------------------------------- - int nxy = this->nx * this-> ny; - int * nrank = {2, 2}; - this->plan1for = fftw_plan_many_dft( 2, nrank, this->nz, - c_rspace, nrank, 1, nxy, - c_rspace, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); - - this->plan1bac = fftw_plan_many_dft( 2, nrank, this->nz, - c_rspace, nrank, 1, nxy, - c_rspace, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); + int * nrank = {this->nx, this->ny}; + this->plan2for = fftw_plan_many_dft( 2, nrank, this->nz, + (fftw_complex*) c_rspace, nrank, this->nz, 1, + (fftw_complex*) c_rspace, nrank, this->nz, 1, FFTW_FORWARD, FFTW_MEASURE); + + this->plan2bac = fftw_plan_many_dft( 2, nrank, this->nz, + (fftw_complex*) c_rspace, nrank, this->nz, 1, + (fftw_complex*) c_rspace, nrank, this->nz, 1, FFTW_BACKWARD, FFTW_MEASURE); - this->plan1r2c = fftw_plan_many_dft_r2c( 2, nrank, this->nz, - r_rspace, nrank, 1, nxy, - c_rspace, nrank, 1, nxy, FFTW_MEASURE); + this->plan2r2c = fftw_plan_many_dft_r2c( 2, nrank, this->nz, + r_rspace, nrank, this->nz, 1, + (fftw_complex*) c_rspace, nrank, this->nz, 1, FFTW_MEASURE); - this->plan1c2r = fftw_plan_many_dft_c2r( 2, nrank, this->nz, - c_rspace, nrank, 1, nxy, - r_rspace, nrank, 1, nxy, FFTW_MEASURE); + this->plan2c2r = fftw_plan_many_dft_c2r( 2, nrank, this->nz, + (fftw_complex*) c_rspace, nrank, this->nz, 1, + r_rspace, nrank, this->nz, 1, FFTW_MEASURE); destroyp = false; } @@ -137,46 +140,45 @@ void FFT :: initplanf() // 1 D //--------------------------------------------------------- - // fftw_plan_many_dft(int rank, const int *n, int howmany, + // fftwf_plan_many_dft(int rank, const int *n, int howmany, // fftw_complex *in, const int *inembed, int istride, int idist, // fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); - this->plan1for = fftw_plan_many_dft( 1, &this->nz, this->ns, - c_gspace, &this->nz, 1, this->nz, - c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); + this->planf1for = fftwf_plan_many_dft( 1, &this->nz, this->ns, + (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, + (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); - this->plan1bac = fftw_plan_many_dft( 1, &this->nz, this->ns, - c_gspace, &this->nz, 1, this->nz, - c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); + this->planf1bac = fftwf_plan_many_dft( 1, &this->nz, this->ns, + (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, + (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); - this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, - r_gspace, &this->nz, 1, this->nz, - c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + this->planf1r2c = fftwf_plan_many_dft_r2c( 1, &this->nz, this->ns, + r_gspace, &this->nz, 1, this->nz, + (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); - this->plan1c2r = fftw_plan_many_dft_c2r( 1, &this->nz, this->ns, - c_gspace, &this->nz, 1, this->nz, - r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + this->planf1c2r = fftwf_plan_many_dft_c2r( 1, &this->nz, this->ns, + (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, + r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); //--------------------------------------------------------- // 2 D //--------------------------------------------------------- - int nxy = this->nx * this-> ny; int * nrank = {2, 2}; - this->plan1for = fftw_plan_many_dft( 2, nrank, this->nz, - c_rspace, nrank, 1, nxy, - c_rspace, nrank, 1, nxy, FFTW_FORWARD, FFTW_MEASURE); + this->planf2for = fftwf_plan_many_dft( 2, nrank, this->nz, + (fftwf_complex*)c_rspace, nrank, this->nz, 1, + (fftwf_complex*)c_rspace, nrank, this->nz, 1, FFTW_FORWARD, FFTW_MEASURE); - this->plan1bac = fftw_plan_many_dft( 2, nrank, this->nz, - c_rspace, nrank, 1, nxy, - c_rspace, nrank, 1, nxy, FFTW_BACKWARD, FFTW_MEASURE); + this->planf2bac = fftwf_plan_many_dft( 2, nrank, this->nz, + (fftwf_complex*)c_rspace, nrank, this->nz, 1, + (fftwf_complex*)c_rspace, nrank, this->nz, 1, FFTW_BACKWARD, FFTW_MEASURE); - this->plan1r2c = fftw_plan_many_dft_r2c( 2, nrank, this->nz, - r_rspace, nrank, 1, nxy, - c_rspace, nrank, 1, nxy, FFTW_MEASURE); + this->planf2r2c = fftwf_plan_many_dft_r2c( 2, nrank, this->nz, + r_rspace, nrank, this->nz, 1, + (fftwf_complex*)c_rspace, nrank, this->nz, 1, FFTW_MEASURE); - this->plan1c2r = fftw_plan_many_dft_c2r( 2, nrank, this->nz, - c_rspace, nrank, 1, nxy, - r_rspace, nrank, 1, nxy, FFTW_MEASURE); + this->planf2c2r = fftwf_plan_many_dft_c2r( 2, nrank, this->nz, + (fftwf_complex*)c_rspace, nrank, this->nz, 1, + r_rspace, nrank, this->nz, 1, FFTW_MEASURE); destroypf = false; } #endif diff --git a/source/module_pw/fft.h b/source/module_pw/fft.h index 3f657117be..3d6dfd710b 100644 --- a/source/module_pw/fft.h +++ b/source/module_pw/fft.h @@ -1,6 +1,8 @@ #ifndef FFT_H #define FFT_H +#include + #include "fftw3.h" #if defined(__FFTW3_MPI) && defined(__MPI) #include @@ -16,7 +18,8 @@ #endif -class FFT: public Parallel_PW + +class FFT { public: @@ -24,12 +27,6 @@ class FFT: public Parallel_PW ~FFT(); void initfft(int nx_in, int ny_in , int nz_in, int ns_in, int nplane_in, bool mpifft_in = false); void setupFFT(); - void initpland(); - void initpland_mpi(); -#ifdef __MIX_PRECISION - void initplanf(); - void initplanf_mpi(); -#endif void cleanFFT(); void executefftw(string instr); @@ -37,18 +34,27 @@ class FFT: public Parallel_PW void executefftwf(string instr); #endif +private: + void initpland(); + void initpland_mpi(); +#ifdef __MIX_PRECISION + void initplanf(); + void initplanf_mpi(); +#endif + public: int nx,ny,nz; + int nxy,nxyz; int ns; //number of sticks int nplane; //number of x-y planes bool mpifft; // if use mpi fft, only used when define __FFTW3_MPI - fftw_complex * c_gspace; //complex number space for g, [ns * nz] - fftw_complex * c_rspace; //complex number space for r, [nplane * nx *ny] + complex * c_gspace; //complex number space for g, [ns * nz] + complex * c_rspace; //complex number space for r, [nplane * nx *ny] double *r_gspace; //real number space for g, [ns * nz] double *r_rspace; //real number space for r, [nplane * nx *ny] #ifdef __MIX_PRECISION - fftwf_complex * cf_gspace; //complex number space for g, [ns * nz] - fftwf_complex * cf_rspace; //complex number space for r, [nplane * nx *ny] + complex * cf_gspace; //complex number space for g, [ns * nz] + complex * cf_rspace; //complex number space for r, [nplane * nx *ny] float *rf_gspace; //real number space for g, [ns * nz] float *rf_rspace; //real number space for r, [nplane * nx *ny] #endif diff --git a/source/module_pw/pw_basis.cpp b/source/module_pw/pw_basis.cpp index b5532c42e8..2b46bd217d 100644 --- a/source/module_pw/pw_basis.cpp +++ b/source/module_pw/pw_basis.cpp @@ -6,7 +6,9 @@ PW_Basis::PW_Basis() is2ir = NULL; gdirect = NULL; gcar = NULL; - gg = NULL; + gg = NULL; + startz = NULL; + numz = NULL; } PW_Basis:: ~PW_Basis() { diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 8cd3200895..323657966c 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -4,7 +4,9 @@ #include "../module_base/matrix.h" #include "../module_base/matrix3.h" #include "../module_base/vector3.h" -#include +#include +#include "fft.h" + // //A class which can convert a function of "r" to the corresponding linear // superposition of plane waves (real space to reciprocal space) @@ -41,25 +43,35 @@ class PW_Basis int distribution_type_in ); - //distribute plane waves to different processors - void distribute_g(); - - //distribute real-space grids to different processors - void distribute_r(); //=============================================== -// distribution maps +// distribution maps //=============================================== public: //reciprocal-space - int *ig2fft; // dimension: [ngmw] - int *is2ir; + int *ig2fft; // dimension: [ngmw] map ig to (is,iz) + int *is2ixy; //map is(index of sticks) to (ix,iy) int nst; //num. of sticks in current proc. int npw; //num. of plane waves in current proc. //real space - int nrxx; + int nrxx; //num. of real space grids int *startz; //startz[ip]: starting z plane in the ip-th proc. in current POOL_WORLD int *numz; //numz[ip]: num. of z planes in the ip-th proc. in current POOL_WORLD + ModuleBase::Vector3 *gdirect; //(= *G1d) ; // ig = new Vector igc[ngmc] + ModuleBase::Vector3 *gcar; //G vectors in cartesian corrdinate + double *gg; // modulus (G^2) of G vectors [ngmc] + //gg[ng]=ig[ng]*GGT*ig[ng]/(lat0*lat0)=g[ng]*g[ng] (/lat0*lat0) + // gg_global dimension: [cutgg_num_now] (save memory skill is used) + + //distribute plane waves to different processors + void distribute_g(); + + //distribute real-space grids to different processors + void distribute_r(); + + //distribute plane waves to different processors + void distribution_method1(); + @@ -73,27 +85,31 @@ class PW_Basis int distribution_type; int poolnproc; int poolrank; + - //distribute plane waves to different processors - void distribution_method1(); + //=============================================== -// Part 2: FFT dimensions in real space +// FFT //=============================================== public: // FFT dimensions for wave functions. - int nx, ny, nz, nxyz; - // FFT dimensions for charge/potential. - - int seed; + int nx, ny, nz, nxyz,nxy; + FFT ft; + + void real2recip(double * in, complex * out); //in:(nplane,nx*ny) ; out(nz, ns) + void real2recip(complex * in, complex * out); //in:(nplane,nx*ny) ; out(nz, ns) + void recip2real(complex * in, double *out); //in:(nz, ns) ; out(nplane,nx*ny) + void recip2real(complex * in, complex * out); //in:(nz, ns) ; out(nplane,nx*ny) + + void gatherplane(); + void gatherstick(); + void distributeplane(); + void distributestick(); - ModuleBase::Vector3 *gdirect; //(= *G1d) ; // ig = new Vector igc[ngmc] - ModuleBase::Vector3 *gcar; //G vectors in cartesian corrdinate - double *gg; // modulus (G^2) of G vectors [ngmc] - //gg[ng]=ig[ng]*GGT*ig[ng]/(lat0*lat0)=g[ng]*g[ng] (/lat0*lat0) - // gg_global dimension: [cutgg_num_now] (save memory skill is used) + }; diff --git a/source/module_pw/pw_convert.cpp b/source/module_pw/pw_convert.cpp new file mode 100644 index 0000000000..6984a04702 --- /dev/null +++ b/source/module_pw/pw_convert.cpp @@ -0,0 +1,122 @@ +#include "fft.h" +#include +#include "pw_basis.h" +#include "../module_base/global_function.h" + +void PW_Basis:: real2recip(complex * in, complex * out) +{ + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + this->ft.c_rspace[ir] = in[ir]; + } + this->ft.executefftw("2for"); + + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + this->ft.c_gspace[is*nz+iz] = this->ft.c_rspace[ixy*nz+iz]; + } + } + this->ft.executefftw("1for"); + + for(int ig = 0 ; ig < this->npw ; ++ig) + { + out[ig] = this->ft.c_gspace[this->ig2fft[ig]]; + } +} + +void PW_Basis:: real2recip(double * in, complex * out) +{ + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + this->ft.r_rspace[ir] = in[ir]; + } + this->ft.executefftw("2r2c"); + + int hx = int ((nx + 2)/2); + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + int ix = ixy % this->ny; + int iy = int( ixy / this->ny); + int ihxy = ix + iy * hx; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + this->ft.c_gspace[is*nz+iz] = this->ft.c_rspace[ihxy*nz+iz]; + } + } + this->ft.executefftw("1for"); + + for(int ig = 0 ; ig < this->npw ; ++ig) + { + out[ig] = this->ft.c_gspace[this->ig2fft[ig]]; + } +} + +void PW_Basis:: recip2real(complex * in, complex * out) +{ + for(int igg = 0 ; igg < this->ns * this->nz ; ++igg) + { + this->ft.c_gspace[igg] = 0.0; + } + for(int ig = 0 ; ig < this->npw ; ++ig) + { + this->ft.c_gspace[this->ig2fft[ig]] = in[ig]; + } + this->ft.executefftw("1bac"); + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + this->ft.c_rspace[ir] = 0.0; + } + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + this->ft.c_rspace[ixy*nz+iz] = this->ft.c_gspace[is*nz+iz]; + } + } + this->ft.executefftw("2bac"); + + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + out[ir] = this->ft.c_rspace[ir]; + } +} + +void PW_Basis:: recip2real(complex * in, double * out) +{ + for(int igg = 0 ; igg < this->ns * this->nz ; ++igg) + { + this->ft.c_gspace[igg] = 0.0; + } + for(int ig = 0 ; ig < this->npw ; ++ig) + { + this->ft.c_gspace[this->ig2fft[ig]] = in[ig]; + } + this->ft.executefftw("1bac"); + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + this->ft.c_rspace[ir] = 0.0; + } + int hx = int ((nx + 2)/2); + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + int ix = ixy % this->ny; + int iy = int( ixy / this->ny); + int ihxy = ix + iy * hx; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + this->ft.c_rspace[ihxy*nz+iz] = this->ft.c_gspace[is*nz+iz]; + } + } + this->ft.executefftw("2c2r"); + + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + out[ir] = this->ft.r_rspace[ir]; + } +} \ No newline at end of file diff --git a/source/module_pw/pw_distribute.cpp b/source/module_pw/pw_distributeg.cpp similarity index 100% rename from source/module_pw/pw_distribute.cpp rename to source/module_pw/pw_distributeg.cpp diff --git a/source/module_pw/rg_distribute.cpp b/source/module_pw/pw_distributer.cpp similarity index 93% rename from source/module_pw/rg_distribute.cpp rename to source/module_pw/pw_distributer.cpp index 35533bc69a..7d229924bf 100644 --- a/source/module_pw/rg_distribute.cpp +++ b/source/module_pw/pw_distributer.cpp @@ -17,4 +17,9 @@ void PW_Basis::distribute_r() } this->nrxx = this->numz[this->poolrank]; return; +} + +void PW_Basis::gatherplane() +{ + } \ No newline at end of file diff --git a/source/module_pw/pw_init.cpp b/source/module_pw/pw_init.cpp index fb6dab205a..0d790412e5 100644 --- a/source/module_pw/pw_init.cpp +++ b/source/module_pw/pw_init.cpp @@ -102,6 +102,7 @@ void PW_Basis:: initgrids( this->ny = ibox[1]; this->nz = ibox[2]; this->nxyz = this->nx * this->ny * this->nz; + this->nxy = this->nx * this->ny; delete[] ibox; diff --git a/source/module_pw/pw_operation.cpp b/source/module_pw/pw_operation.cpp index cac8c4a49e..c73d326599 100644 --- a/source/module_pw/pw_operation.cpp +++ b/source/module_pw/pw_operation.cpp @@ -1,5 +1,6 @@ #include "pw_basis_k.h" #include "pw_basis.h" +#include ModuleBase::Vector3 PW_Basis_K:: get_GPlusK_cartesian(const int ik, const int ig) const { assert(ig>=0 && ignpw && ik>=0 && iknks); From 51255fb61ae6fe17e92039baf308bb9ff241625e Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Tue, 2 Nov 2021 18:16:06 +0800 Subject: [PATCH 046/478] Update distribution_method1 in pw_distribute.cpp and corresponding declarations of functions in pw_basis.h. --- source/module_pw/pw_basis.h | 19 +-- source/module_pw/pw_distribute.cpp | 184 +++++++++++++++++------------ 2 files changed, 121 insertions(+), 82 deletions(-) diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 84047c6eb3..6b89f66b30 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -54,7 +54,7 @@ class PW_Basis int *ig2isz; // map ig to (is, iz). int *istot2ixy; // istot2ixy[is]: ix + iy * nx of is^th stick among all sticks. int *is2ixy; // is2ixy[is]: ix + iy * nx of is^th stick among sticks on current proc. - int *ixy2ip; // store the ip of proc which contains stick on (x, y). + int *ixy2ip; // ixy2ip[ix + iy * nx]: ip of proc which contains stick on (ix, iy). int *startis; // startis[ip]: starting is stick in the ip^th proc. int *nst_per; // number of sticks on each core. int nst; //num. of sticks in current proc. @@ -112,18 +112,23 @@ class PW_Basis const int tot_npw, // total number of planewaves. double* gg_global, // the modulus of all planewaves. ModuleBase::Vector3*gdirect_global, // direct coordinates of planewaves. - double* gg2D, // the i^th row contains the modulus of planewaves that belong to the i^th core. - ModuleBase::Vector3*gdirect2D // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. + double** gg2D, // the i^th row contains the modulus of planewaves that belong to the i^th core. + ModuleBase::Vector3**gdirect2D // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. ); - void get_ig2fft_is2ir( + void get_ig2isz_is2ixy( + const int tot_nst, // total number of sticks. int* st_i, // x or x + nx (if x < 0) of stick. int* st_j, // y or y + ny (if y < 0) of stick. int* st_bottom, // minimum z of stick, stored in 1d array with tot_nst elements. int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. - int* is2ip, // ip of core containing is^th stick, map is to ip. - int* nst_per // number of sticks on each core. + int* is2ip // ip of core containing is^th stick, map is to ip. + ); + void get_istot2ixy( + const int tot_nst, // total number of sticks. + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* is2ip // ip of core containing is^th stick, map is to ip. ); - //=============================================== // Part 2: FFT dimensions in real space diff --git a/source/module_pw/pw_distribute.cpp b/source/module_pw/pw_distribute.cpp index 71643e066a..d5e1d13dc5 100644 --- a/source/module_pw/pw_distribute.cpp +++ b/source/module_pw/pw_distribute.cpp @@ -3,11 +3,11 @@ // //distribute plane waves to different coreors //Known: G, GT, GGT, nx, ny, nz, poolnproc, poolrank, ggecut -//output: ig2fft[ig], is2ir[is], gg[ig], gcar[ig], gdirect[ig], nst +//output: ig2isz[ig], istot2ixy[is], is2ixy[is], ixy2ip[ixy], startis[ip], nst_per[ip], gg[ig], gcar[ig], gdirect[ig], nst // void PW_Basis::distribute_g() { - if(this->divide_type == 1) + if(this->distribution_type == 1) { this->distribution_method1(); } @@ -20,12 +20,20 @@ void PW_Basis::distribute_g() void PW_Basis::distribution_method1() { + // initial the variables needed by all proc. + const int nxy = this->nx * this->ny; // number of points in x-y plane. + int tot_npw = 0; // total number of planewaves. + int tot_nst = 0; // total number of sticks. + int st_start = 0; // index of the first stick on current proc. + int *st_i = NULL; // x or x + nx (if x < 0) of stick. + int *st_j = NULL; // y or y + ny (if y < 0) of stick. + int *st_bottom = NULL; // minimum z of stick. + int *st_length = NULL; // number of planewaves in stick. + int *is2ip = NULL; // ip of core that contains is^th stick, map is to ip. + if (poolrank == 0) { - // (1) Count the total number of planewaves (tot_npw) and sticks (tot_nst). - const int nxy = this->nx * this->ny; // number of points in x-y plane. - int tot_npw = 0; // total number of planewaves. - int tot_nst = 0; // total number of sticks. + // (1) Count the total number of planewaves (tot_npw) and sticks (tot_nst). // Actually we will scan [(2 * ibox[0] + 1) * (2 * ibox[1] + 1)] points on x-y plane, // but we define st_length2D with (nx * ny) points here, because we assume that the diameter @@ -40,10 +48,10 @@ void PW_Basis::distribution_method1() // (2) Collect all planewaves and the x, y indexs, length, bottom of the sticks. double *gg_global = new double[tot_npw]; // the modulus of all planewaves. ModuleBase::Vector3* gdirect_global = new ModuleBase::Vector3[tot_npw]; // direct coordinates of planewaves. - int *st_i = new int[tot_nst]; // x or x + nx (if x < 0) of stick. - int *st_j = new int[tot_nst]; // y or y + ny (if y < 0) of stick. - int *st_bottom = new int[tot_nst]; // minimum z of stick. - int *st_length = new int[tot_nst]; // number of planewaves in stick. + st_i = new int[tot_nst]; // x or x + nx (if x < 0) of stick. + st_j = new int[tot_nst]; // y or y + ny (if y < 0) of stick. + st_bottom = new int[tot_nst]; // minimum z of stick. + st_length = new int[tot_nst]; // number of planewaves in stick. this->collect_pw_st(tot_npw, tot_nst, st_length2D, st_bottom2D, gg_global, gdirect_global, st_i, st_j, st_length, st_bottom); @@ -51,25 +59,27 @@ void PW_Basis::distribution_method1() delete[] st_bottom2D; // (3) Distribute sticks to cores. - int *npw_per = new int[this->poolnproc]; // number of planewaves on each core. - int *nst_per = new int[this->poolnproc]; // number of sticks on each core. + int *npw_per = new int[this->poolnproc]; // number of planewaves on each core. + this->nst_per = new int[this->poolnproc]; // number of sticks on each core. ModuleBase::GlobalFunc::ZEROS(npw_per, poolnproc); - ModuleBase::GlobalFunc::ZEROS(nst_per, poolnproc); - int *is2ip = new int[tot_nst]; // ip of core that contains is^th stick, map is to ip. + ModuleBase::GlobalFunc::ZEROS(this->nst_per, poolnproc); + is2ip = new int[tot_nst]; // ip of core that contains is^th stick, map is to ip. for (int i = 0; i < tot_nst; i++) { - is2ip[i] = -1; // meaning this stick has not been distributed. + is2ip[i] = -1; // meaning this stick has not been distributed. } - int *ir2ip = new int[nxy]; // ip of core which contains stick on (x, y). + this->ixy2ip = new int[nxy]; // ip of core which contains stick on (x, y). for (int i = 0; i < nx * ny; i++) { - ir2ip[i] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). + this->ixy2ip[i] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). } + this->startis = new int[poolnproc]; + ModuleBase::GlobalFunc::ZEROS(startis, poolnproc); - this->divide_sticks(tot_npw, tot_nst, st_i, st_j, st_length, npw_per, nst_per, is2ip, ir2ip); + this->divide_sticks(tot_npw, tot_nst, st_i, st_j, st_length, npw_per, this->nst_per, is2ip); + this->get_istot2ixy(tot_nst, st_i, st_j, is2ip); // (4) Divide planewaves to each core, construct gg2D and gdirect2D. - double **gg2D = new double*[poolnproc]; // the i^th row contains the modulus of planewaves that belong to the i^th core. ModuleBase::Vector3 **gdirect2D = new ModuleBase::Vector3*[poolnproc]; // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. for (int ip = 0; ip < poolnproc; ip++) @@ -78,15 +88,14 @@ void PW_Basis::distribution_method1() gdirect2D[ip] = new ModuleBase::Vector3[npw_per[ip]]; } - this->divide_pw(tot_npw, gg_global, gdirect_global, ir2ip, gg2D, gdirect2D); + this->divide_pw(tot_npw, gg_global, gdirect_global, gg2D, gdirect2D); delete[] gg_global; delete[] gdirect_global; - delete[] ir2ip; // (5) Send gg, gdirect, npw_per, nst[poolrank], st_* to all cores. this->npw = npw_per[0]; - this->nst = nst_per[0]; + this->nst = this->nst_per[0]; this->gg = gg2D[0]; this->gdirect = gdirect2D[0]; for (int ip = 1; ip < this->poolnproc; ip++) @@ -94,7 +103,7 @@ void PW_Basis::distribution_method1() MPI_Send(&tot_npw, 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&tot_nst, 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&npw_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&nst_per, poolnproc, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&this->nst_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&gg2D[ip], npw_per[ip], MPI_DOUBLE, ip, 0, POOL_WORLD); MPI_Send(&gdirect2D[ip], npw_per[ip]*3, MPI_DOUBLE, ip, 0, POOL_WORLD); // I'm not sure about the send size and type here. MPI_Send(&st_i, tot_nst, MPI_INT, ip, 0, POOL_WORLD); @@ -103,7 +112,7 @@ void PW_Basis::distribution_method1() MPI_Send(&st_bottom, tot_nst, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&is2ip, tot_nst, MPI_INT, ip, 0, POOL_WORLD); } - for (int ip = 0; i) + for (int ip = 0; ip < this->poolnproc; ip++) { delete[] gg2D[ip]; delete[] gdirect2D[ip]; @@ -114,14 +123,17 @@ void PW_Basis::distribution_method1() } else { - int nxy = this->nx * this->ny; MPI_Recv(&tot_npw, 1, MPI_INT, 0, 0, POOL_WORLD); MPI_Recv(&tot_nst, 1, MPI_INT, 0, 0, POOL_WORLD); MPI_Recv(&npw, 1, MPI_INT, 0, 0, POOL_WORLD); // number of planewaves in current proc. - MPI_Recv(&nst_per, poolnproc, MPI_INT, 0, 0, POOL_WORLD); - this->nst = nst_per[poolrank]; + MPI_Recv(&nst, 1, MPI_INT, 0, 0, POOL_WORLD); MPI_Recv(&gg, npw, MPI_DOUBLE, 0, 0, POOL_WORLD); MPI_Recv(&gdirect, npw*3, MPI_DOUBLE, 0, 0, POOL_WORLD); // I'm not sure about the send size and type here. + st_i = new int[tot_nst]; + st_j = new int[tot_nst]; + st_length = new int[tot_nst]; + st_bottom = new int[tot_nst]; + is2ip = new int [tot_nst]; MPI_Recv(&st_i, tot_nst, MPI_INT, 0, 0, POOL_WORLD); MPI_Recv(&st_j, tot_nst, MPI_INT, 0, 0, POOL_WORLD); MPI_Recv(&st_length, tot_nst, MPI_INT, 0, 0, POOL_WORLD); @@ -135,16 +147,14 @@ void PW_Basis::distribution_method1() gcar[i] = gdirect[i] * this->G; } - // (6) Construct ig2fft and is2ir. - - this->get_ig2fft_is2ir(st_i, st_j, st_bottom, st_leghth, is2ip, nst_per); + // (6) Construct ig2isz and is2ixy. + this->get_ig2isz_is2ixy(tot_nst, st_i, st_j, st_bottom, st_length, is2ip); - delete[] st_i; - delete[] st_j; - delete[] st_bottom; - delete[] st_length; - delete[] is2ip; - delete[] nst_per; + if (st_i != NULL) delete[] st_i; + if (st_j != NULL) delete[] st_j; + if (st_bottom != NULL) delete[] st_bottom; + if (st_length != NULL) delete[] st_length; + if (is2ip != NULL) delete[] is2ip; return; } @@ -193,14 +203,14 @@ void PW_Basis::count_pw_st( double modulus = f * (this->GGT * f); if (modulus <= this->ggecut) { - if (length == 0) st_bottom[index] = iz; // length == 0 means this point is the bottom of stick (x, y). + if (length == 0) st_bottom2D[index] = iz; // length == 0 means this point is the bottom of stick (x, y). ++tot_npw; ++length; } } if (length > 0) { - st_length[index] = length; + st_length2D[index] = length; ++tot_nst; } } @@ -317,12 +327,12 @@ void PW_Basis::collect_pw_st( } // -// (3) Distribute sticks to cores. +// (3-1) Distribute sticks to cores. // We have rearranged sticks in the order of length decreasing, so that we will distribute the longest stick preferentially here. // For each stick, we find the core that contains the least planewaves firstly, and distribute the stick to it, -// then update npw_per, nst_per, is2ip and ir2ip. +// then update npw_per, this->nst_per, is2ip and this->ixy2ip. // known: tot_npw, tot_nst, st_i, st_j, st_length -// output: npw_per, nst_per, is2ip, ir2ip +// output: npw_per, this->nst_per, is2ip, this->ixy2ip // void PW_Basis::divide_sticks( const int tot_npw, // total number of planewaves. @@ -332,8 +342,7 @@ void PW_Basis::divide_sticks( int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. int* npw_per, // number of planewaves on each core. int* nst_per, // number of sticks on each core. - int* is2ip, // ip of core containing is^th stick, map is to ip. - int* ir2ip // store the ip of proc which contains stick on (x, y). + int* is2ip // ip of core containing is^th stick, map is to ip. ) { int ipmin = 0; // The ip of core containing least number of planewaves. @@ -342,7 +351,7 @@ void PW_Basis::divide_sticks( // find the ip of core containing the least planewaves. for (int ip = 0; ip < this->poolnproc; ip++) { - const int ngrid = this->nx * this->ny * this->nrxx[ip]; // number of real space planewaves on this core. + const int ngrid = this->nx * this->ny * this->nrxx; // number of real space planewaves on this core. const int non_zero_grid = nst_per[ip] * this->nz; // number of reciprocal planewaves on this core. const int npwmin = npw_per[ipmin]; const int npw_ip = npw_per[ip]; @@ -367,71 +376,96 @@ void PW_Basis::divide_sticks( nst_per[ipmin]++; npw_per[ipmin] += st_length[is]; is2ip[is] = ipmin; - ir2ip[st_i[is] * this->ny + st_j[is]] = ipmin; + this->ixy2ip[st_j[is] * this->nx + st_i[is]] = ipmin; + } + for (int ip = 1; ip < poolnproc; ip++) + { + this->startis[ip] = this->startis[ip - 1] + nst_per[ip - 1]; } return; } + +// +// (3-2) Rearrange sticks in the order of the ip of core increasing, (st_start + st_move) is the new index of sticks. +// Then get istot2ixy (istot2ixy[is]: ix + iy * nx of is^th stick among all sticks) on the first core. +// known: tot_nst, st_i, st_j, is2ip, this->startis +// output: istot2ixy +// +void PW_Basis::get_istot2ixy( + const int tot_nst, // total number of sticks. + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* is2ip // ip of core containing is^th stick, map is to ip. +) +{ + assert(this->poolrank == 0); + this->istot2ixy = new int[tot_nst]; + ModuleBase::GlobalFunc::ZEROS(this->istot2ixy, poolnproc); + + int* st_move = new int[this->poolnproc]; // st_move[ip]: this is the st_move^th stick on ip^th core. + ModuleBase::GlobalFunc::ZEROS(st_move, poolnproc); + + for (int is = 0; is < tot_nst; is++) + { + int ip = is2ip[is]; + this->istot2ixy[this->startis[ip] + st_move[ip]] = st_j[is] * nx + st_i[is]; + st_move[ip]++; + } + delete[] st_move; + return; +} // // (4) Divide planewaves to each core, construct gg2D and gdirect2D. // gg2D is a 2D array, the i^th row contains the planewaves that belong to the i^th core, and so is gdirect2D. // Hence, we can send i^th row of gg2D and gdirect2D to i^th core instead of sending whole gg_global and gdirect_global. -// For each planewave, we map its x, y coordinates to the ip of core that contains it with ir2ip. -// known: tot_npw, gg_global, gdirect_global, ir2ip +// For each planewave, we map its x, y coordinates to the ip of core that contains it with this->ixy2ip. +// known: tot_npw, gg_global, gdirect_global, this->ixy2ip // output: gg2D, gdirect2D // void PW_Basis::divide_pw( const int tot_npw, // total number of planewaves. double* gg_global, // the modulus of all planewaves. ModuleBase::Vector3*gdirect_global, // direct coordinates of planewaves. - int* ir2ip, // store the ip of proc which contains stick on (x, y). - double* gg2D, // the i^th row contains the modulus of planewaves that belong to the i^th core. - ModuleBase::Vector3*gdirect2D // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. + double** gg2D, // the i^th row contains the modulus of planewaves that belong to the i^th core. + ModuleBase::Vector3**gdirect2D // the i^th row contains the direct coordinates of planewaves that belong to the i^th core. ) { int* pw_found = new int[this->poolnproc]; // how many planewaves have been found. - ModuleBase::GlobalFunc::ZEROS(this->poolnproc, pw_found); + ModuleBase::GlobalFunc::ZEROS(pw_found, this->poolnproc); for (int ig = 0; ig < tot_npw; ig++) { int x = gdirect_global[ig].x; int y = gdirect_global[ig].y; if (x < 0) x += nx; if (y < 0) y += ny; - int ip = ir2ip[x * ny + y]; + int ip = this->ixy2ip[y * nx + x]; gg2D[ip][pw_found[ip]] = gg_global[ig]; - gdirect2D[ip][pw_found[ip]] = gdirect2D[ig]; + gdirect2D[ip][pw_found[ip]] = gdirect_global[ig]; pw_found[ip]++; } delete[] pw_found; return; } // -// (6) Construct ig2fft and is2ir. -// is2ir contains the x-coordinate and y-coordinate of sticks on current core. -// ig2fft contains the z-coordinate of planewaves on current core. +// (6) Construct ig2isz and is2ixy. +// is2ixy contains the x-coordinate and y-coordinate of sticks on current core. +// ig2isz contains the z-coordinate of planewaves on current core. // -void PW_Basis::get_ig2fft_is2ir( +void PW_Basis::get_ig2isz_is2ixy( + const int tot_nst, // total number of sticks. int* st_i, // x or x + nx (if x < 0) of stick. int* st_j, // y or y + ny (if y < 0) of stick. int* st_bottom, // minimum z of stick, stored in 1d array with tot_nst elements. int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. - int* is2ip, // ip of core containing is^th stick, map is to ip. - int* nst_per // number of sticks on each core. + int* is2ip // ip of core containing is^th stick, map is to ip. ) { - // we will rearrange sticks in the order of the ip of core increasing next. - // (st_start + st_move) is the new index of sticks. - int st_start = 0; // index of the first stick belong to this core. - for (int ip = 0; ip < this->poolrank - 1; ip++) - { - st_start += nst_per[ip]; - } - - this->ig2fft = new int[this->npw]; // map ig to the z coordinate of this planewave. - ModuleBase::GlobalFunc::ZEROS(ig2fft, npw); - this->is2ir = new int[this->nst]; // map is (index of sticks) to ir (x * ny + y). + this->ig2isz = new int[this->npw]; // map ig to the z coordinate of this planewave. + ModuleBase::GlobalFunc::ZEROS(ig2isz, npw); + this->is2ixy = new int[this->nst]; // map is (index of sticks) to ixy (ix + iy * nx). for (int i = 0; i < nst; i++) { - is2ir[i] = -1; // meaning this stick doesn't belong to current core. + is2ixy[i] = -1; } int st_move = 0; // this is the st_move^th stick on current core. @@ -440,18 +474,18 @@ void PW_Basis::get_ig2fft_is2ir( { if (is2ip[is] == poolrank) { - int zstart = st_bottom; + int zstart = st_bottom[is]; for (int ig = 0; ig < st_length[is]; ig++) { int z = ig + zstart; // z-coordinate of this planewave. if (z < 0) z += nz; - this->ig2fft[pw_filled] = st_move * nz + z; - this->is2ir[st_start + st_move] = st_i[is] * ny + st_j[is]; + this->ig2isz[pw_filled] = st_move * nz + z; pw_filled++; } + this->is2ixy[st_move] = st_j[is] * nx + st_i[is]; st_move++; } if (st_move == this->nst && pw_filled == this->npw) break; } return; -} \ No newline at end of file +} From c04c3e6fb62fdbfaad39931f1332596351142de2 Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Tue, 2 Nov 2021 18:23:49 +0800 Subject: [PATCH 047/478] Update annotaion. --- source/module_pw/pw_basis.h | 12 ++++++------ source/module_pw/pw_distribute.cpp | 7 +++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 6b89f66b30..bb53d35e56 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -108,6 +108,12 @@ class PW_Basis int* nst_per, // number of sticks on each core. int* is2ip // ip of core containing is^th stick, map is to ip. ); + void get_istot2ixy( + const int tot_nst, // total number of sticks. + int* st_i, // x or x + nx (if x < 0) of stick. + int* st_j, // y or y + ny (if y < 0) of stick. + int* is2ip // ip of core containing is^th stick, map is to ip. + ); void divide_pw( const int tot_npw, // total number of planewaves. double* gg_global, // the modulus of all planewaves. @@ -123,12 +129,6 @@ class PW_Basis int* st_length, // the stick on (x, y) consists of st_length[x*ny+y] planewaves. int* is2ip // ip of core containing is^th stick, map is to ip. ); - void get_istot2ixy( - const int tot_nst, // total number of sticks. - int* st_i, // x or x + nx (if x < 0) of stick. - int* st_j, // y or y + ny (if y < 0) of stick. - int* is2ip // ip of core containing is^th stick, map is to ip. - ); //=============================================== // Part 2: FFT dimensions in real space diff --git a/source/module_pw/pw_distribute.cpp b/source/module_pw/pw_distribute.cpp index d5e1d13dc5..6a5c068990 100644 --- a/source/module_pw/pw_distribute.cpp +++ b/source/module_pw/pw_distribute.cpp @@ -18,6 +18,13 @@ void PW_Basis::distribute_g() return; } +// +// Distribute planewaves in reciprocal space to coreors. +// Firstly, divide the sphere in reciprocal space into sticks, which are vertical to x-y plane. +// Secondly, distribute these sticks to coreors. +//Known: G, GT, GGT, nx, ny, nz, poolnproc, poolrank, ggecut +//output: ig2isz[ig], istot2ixy[is], is2ixy[is], ixy2ip[ixy], startis[ip], nst_per[ip], gg[ig], gcar[ig], gdirect[ig], nst +// void PW_Basis::distribution_method1() { // initial the variables needed by all proc. From f878b0444c6260af2269c92d0f4dc443672694b2 Mon Sep 17 00:00:00 2001 From: qianrui Date: Tue, 2 Nov 2021 20:25:19 +0800 Subject: [PATCH 048/478] add gatherscatter.cpp --- source/module_pw/Makefile.Objects | 2 +- source/module_pw/pw_basis.cpp | 2 + source/module_pw/pw_basis.h | 15 ++++---- source/module_pw/pw_distributer.cpp | 5 --- source/module_pw/pw_gatherscatter.cpp | 53 +++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 source/module_pw/pw_gatherscatter.cpp diff --git a/source/module_pw/Makefile.Objects b/source/module_pw/Makefile.Objects index f12bea7248..392f0d6622 100644 --- a/source/module_pw/Makefile.Objects +++ b/source/module_pw/Makefile.Objects @@ -3,4 +3,4 @@ matrix.o\ matrix3.o\ vector3.o\ tool_quit.o\ - +parallel_global.o diff --git a/source/module_pw/pw_basis.cpp b/source/module_pw/pw_basis.cpp index 30f90609f1..c5606721ec 100644 --- a/source/module_pw/pw_basis.cpp +++ b/source/module_pw/pw_basis.cpp @@ -13,6 +13,8 @@ PW_Basis::PW_Basis() gg = NULL; startz = NULL; numz = NULL; + poolnproc = 1; + poolrank = 0; } PW_Basis:: ~PW_Basis() { diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 4bcf57cb63..34a1cf729b 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -49,12 +49,14 @@ class PW_Basis public: //reciprocal-space int *ig2isz; // map ig to (is, iz). - int *istot2ixy; // istot2ixy[is]: ix + iy * nx of is^th stick among all sticks. + int *ixy2is; //map ixy to is + int *istot2ixy; // istot2ixy[istot]: ix + iy * nx of is^th stick among all sticks. int *is2ixy; // is2ixy[is]: ix + iy * nx of is^th stick among sticks on current proc. int *ixy2ip; // store the ip of proc which contains stick on (x, y). int *startis; // startis[ip]: starting is stick in the ip^th proc. int *nst_per; // number of sticks on each core. int nst; //num. of sticks in current proc. + int nstot; //num. of sticks in total. int npw; //num. of plane waves in current proc. //real space int nrxx; //num. of real space grids @@ -143,18 +145,17 @@ class PW_Basis //=============================================== public: // FFT dimensions for wave functions. - int nx, ny, nz, nxyz,nxy; + int nx, ny, nz, nxyz, nxy; FFT ft; void real2recip(double * in, complex * out); //in:(nplane,nx*ny) ; out(nz, ns) void real2recip(complex * in, complex * out); //in:(nplane,nx*ny) ; out(nz, ns) void recip2real(complex * in, double *out); //in:(nz, ns) ; out(nplane,nx*ny) void recip2real(complex * in, complex * out); //in:(nz, ns) ; out(nplane,nx*ny) - - void gatherplane(); - void gatherstick(); - void distributeplane(); - void distributestick(); +#ifdef __MPI + void gatherp_scatters(complex *in, complex *out); //gather planes and scatter sticks of all processors + void gathers_scatterp(complex *in, complex *out); //gather sticks of and scatter planes of all processors +#endif diff --git a/source/module_pw/pw_distributer.cpp b/source/module_pw/pw_distributer.cpp index 7d229924bf..fb26bc9975 100644 --- a/source/module_pw/pw_distributer.cpp +++ b/source/module_pw/pw_distributer.cpp @@ -18,8 +18,3 @@ void PW_Basis::distribute_r() this->nrxx = this->numz[this->poolrank]; return; } - -void PW_Basis::gatherplane() -{ - -} \ No newline at end of file diff --git a/source/module_pw/pw_gatherscatter.cpp b/source/module_pw/pw_gatherscatter.cpp new file mode 100644 index 0000000000..4d184a4a78 --- /dev/null +++ b/source/module_pw/pw_gatherscatter.cpp @@ -0,0 +1,53 @@ +#include "pw_basis.h" + +//#ifdef __MPI +#include "mpi.h" +#include "../src_parallel/parallel_global.h" + +//in: (nplane,nxy) out:(nz,ns) +void PW_Basis:: gatherp_scatters(complex *in, complex *out) +{ + if(this->poolnproc == 1) return; + + complex * tmp; + if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; + + //gather planes of different processors + for(int ixy = 0 ; ixy < this->nxy ; ++ixy) + { + if(this->ixy2ip[ixy] == -1) continue; + int istot = 0; + if(this->poolrank == 0) istot = this->ixy2istot[ixy]; + MPI_Gatherv(&in[ixy*this->nplane], this->nplane, mpicomplex, &tmp[istot*this->nz], + this->numz,this->startz,mpicomplex,0,POOL_WORLD); + } + + //scatter sticks to different processors + MPI_Scatterv(tmp, this->npw_per, this->startnpw,mpicomplex,out, + this->npw,mpicomplex,0, POOL_WORLD); + delete[] tmp; + return; +} + +////in: (nz,ns) out:(nplane,nxy) +void gathers_scatterp(complex *in, complex *out) +{ + if(this->poolnproc == 1) return; + complex * tmp; + if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; + + //scatter sticks to different processors + MPI_Gatherv(in, this->npw, mpicomplex, tmp, + this->npw_per, this->startnpw, mpicomplex, 0, POOL_WORLD); + + for(int ir = 0 ; ir < this->nrxx ; ++ir) out[ir] = 0.0; + for(int istot = 0 ; istot < this->nstot ; ++istot) + { + int ixy = this->istot2ixy[istot]; + MPI_Scatterv(&tmp[istot*this->nz], this->numz,this->startz, mpicomplex, &out[ixy*this->nplane], + mpicomplex,0,POOL_WORLD); + } + + return; +} +//#endif \ No newline at end of file From 1a477ab7d697c5baa75f550444a170fc03cc0083 Mon Sep 17 00:00:00 2001 From: qianrui Date: Tue, 2 Nov 2021 21:38:06 +0800 Subject: [PATCH 049/478] finish creating FFT --- source/module_pw/pw_basis.h | 6 +- source/module_pw/pw_convert.cpp | 82 +++++++--------- source/module_pw/pw_gatherscatter.cpp | 133 ++++++++++++++++++++++++-- 3 files changed, 161 insertions(+), 60 deletions(-) diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 120297f001..53a2d4e1c6 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -157,10 +157,12 @@ class PW_Basis void real2recip(complex * in, complex * out); //in:(nplane,nx*ny) ; out(nz, ns) void recip2real(complex * in, double *out); //in:(nz, ns) ; out(nplane,nx*ny) void recip2real(complex * in, complex * out); //in:(nz, ns) ; out(nplane,nx*ny) -#ifdef __MPI + void gatherp_scatters(complex *in, complex *out); //gather planes and scatter sticks of all processors void gathers_scatterp(complex *in, complex *out); //gather sticks of and scatter planes of all processors -#endif + void gatherp_scatters_gamma(complex *in, complex *out); //gather planes and scatter sticks of all processors, used when gamma_only + void gathers_scatterp_gamma(complex *in, complex *out); //gather sticks of and scatter planes of all processors, used when gamma only + diff --git a/source/module_pw/pw_convert.cpp b/source/module_pw/pw_convert.cpp index 6984a04702..2111a989c4 100644 --- a/source/module_pw/pw_convert.cpp +++ b/source/module_pw/pw_convert.cpp @@ -3,6 +3,11 @@ #include "pw_basis.h" #include "../module_base/global_function.h" +// +//transform real space to reciprocal space +//in: (nplane,nx,ny) +//out: (nz, ns) +// void PW_Basis:: real2recip(complex * in, complex * out) { for(int ir = 0 ; ir < this->nrxx ; ++ir) @@ -11,22 +16,22 @@ void PW_Basis:: real2recip(complex * in, complex * out) } this->ft.executefftw("2for"); - for(int is = 0 ; is < this->ns ; ++is) - { - int ixy = is2ixy[is]; - for(int iz = 0 ; iz < this->nz ; ++iz) - { - this->ft.c_gspace[is*nz+iz] = this->ft.c_rspace[ixy*nz+iz]; - } - } + this->gatherp_scatters(this->ft.c_rspace, this->ft.c_gspace); + this->ft.executefftw("1for"); for(int ig = 0 ; ig < this->npw ; ++ig) { out[ig] = this->ft.c_gspace[this->ig2fft[ig]]; } + return; } +// +//transform real space to reciprocal space +//in: (nplane,nx,ny) +//out: (nz, ns) +// void PW_Basis:: real2recip(double * in, complex * out) { for(int ir = 0 ; ir < this->nrxx ; ++ir) @@ -35,26 +40,22 @@ void PW_Basis:: real2recip(double * in, complex * out) } this->ft.executefftw("2r2c"); - int hx = int ((nx + 2)/2); - for(int is = 0 ; is < this->ns ; ++is) - { - int ixy = is2ixy[is]; - int ix = ixy % this->ny; - int iy = int( ixy / this->ny); - int ihxy = ix + iy * hx; - for(int iz = 0 ; iz < this->nz ; ++iz) - { - this->ft.c_gspace[is*nz+iz] = this->ft.c_rspace[ihxy*nz+iz]; - } - } + this->gatherp_scatters(this->ft.c_rspace, this->ft.c_gspace) + this->ft.executefftw("1for"); for(int ig = 0 ; ig < this->npw ; ++ig) { out[ig] = this->ft.c_gspace[this->ig2fft[ig]]; } + return; } +// +//transform real space to reciprocal space +//in: (nz,ns) +//out: (nplane, nx, ny) +// void PW_Basis:: recip2real(complex * in, complex * out) { for(int igg = 0 ; igg < this->ns * this->nz ; ++igg) @@ -66,26 +67,23 @@ void PW_Basis:: recip2real(complex * in, complex * out) this->ft.c_gspace[this->ig2fft[ig]] = in[ig]; } this->ft.executefftw("1bac"); - for(int ir = 0 ; ir < this->nrxx ; ++ir) - { - this->ft.c_rspace[ir] = 0.0; - } - for(int is = 0 ; is < this->ns ; ++is) - { - int ixy = is2ixy[is]; - for(int iz = 0 ; iz < this->nz ; ++iz) - { - this->ft.c_rspace[ixy*nz+iz] = this->ft.c_gspace[is*nz+iz]; - } - } + + this->gathers_scatterp(this->ft.c_gspace,this->ft.c_rspace); + this->ft.executefftw("2bac"); for(int ir = 0 ; ir < this->nrxx ; ++ir) { out[ir] = this->ft.c_rspace[ir]; } + return; } +// +//transform real space to reciprocal space +//in: (nz,ns) +//out: (nplane, nx, ny) +// void PW_Basis:: recip2real(complex * in, double * out) { for(int igg = 0 ; igg < this->ns * this->nz ; ++igg) @@ -97,26 +95,14 @@ void PW_Basis:: recip2real(complex * in, double * out) this->ft.c_gspace[this->ig2fft[ig]] = in[ig]; } this->ft.executefftw("1bac"); - for(int ir = 0 ; ir < this->nrxx ; ++ir) - { - this->ft.c_rspace[ir] = 0.0; - } - int hx = int ((nx + 2)/2); - for(int is = 0 ; is < this->ns ; ++is) - { - int ixy = is2ixy[is]; - int ix = ixy % this->ny; - int iy = int( ixy / this->ny); - int ihxy = ix + iy * hx; - for(int iz = 0 ; iz < this->nz ; ++iz) - { - this->ft.c_rspace[ihxy*nz+iz] = this->ft.c_gspace[is*nz+iz]; - } - } + + this->gathers_scatterp(this->ft.c_gspace, this->ft.c_rspace) + this->ft.executefftw("2c2r"); for(int ir = 0 ; ir < this->nrxx ; ++ir) { out[ir] = this->ft.r_rspace[ir]; } + return; } \ No newline at end of file diff --git a/source/module_pw/pw_gatherscatter.cpp b/source/module_pw/pw_gatherscatter.cpp index 4d184a4a78..2a9626f922 100644 --- a/source/module_pw/pw_gatherscatter.cpp +++ b/source/module_pw/pw_gatherscatter.cpp @@ -1,14 +1,26 @@ #include "pw_basis.h" -//#ifdef __MPI +#ifdef __MPI #include "mpi.h" #include "../src_parallel/parallel_global.h" +#endif //in: (nplane,nxy) out:(nz,ns) void PW_Basis:: gatherp_scatters(complex *in, complex *out) { - if(this->poolnproc == 1) return; - + if(this->poolnproc == 1) //In this case ns=nstot, nz = nplane, + { + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + out[is*nz+iz] = in[ixy*nz+iz]; + } + } + return; + } +#ifdef __MPI complex * tmp; if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; @@ -23,22 +35,81 @@ void PW_Basis:: gatherp_scatters(complex *in, complex *out) } //scatter sticks to different processors - MPI_Scatterv(tmp, this->npw_per, this->startnpw,mpicomplex,out, - this->npw,mpicomplex,0, POOL_WORLD); + MPI_Scatterv(tmp, this->nstnz_per, this->startng_per,mpicomplex,out, + this->nsz,mpicomplex,0, POOL_WORLD); delete[] tmp; +#endif return; } -////in: (nz,ns) out:(nplane,nxy) -void gathers_scatterp(complex *in, complex *out) +//in: (nplane,nxy) out:(nz,ns) +void PW_Basis:: gatherp_scatters_gamma(complex *in, complex *out) { + int hx = int ((this->nx + 2)/2); + if(this->poolnproc == 1) //In this case ns=nstot, nz = nplane, + { + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + int ix = ixy % this->ny; + int iy = int( ixy / this->ny); + int ihxy = ix + iy * hx; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + out[is*nz+iz] = in[ihxy*nz+iz]; + } + } + return; + } +#ifdef __MPI + complex * tmp; + if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; + + //gather planes of different processors + for(int ixy = 0 ; ixy < this->ny * hx ; ++ixy) + { + if(this->ixy2ip[ixy] == -1) continue; + int istot = 0; + if(this->poolrank == 0) istot = this->ixy2istot[ixy]; + MPI_Gatherv(&in[ixy*this->nplane], this->nplane, mpicomplex, &tmp[istot*this->nz], + this->numz,this->startz,mpicomplex,0,POOL_WORLD); + } + + //scatter sticks to different processors + MPI_Scatterv(tmp, this->nstnz_per, this->startng_per,mpicomplex,out, + this->nsz,mpicomplex,0, POOL_WORLD); + delete[] tmp; +#endif + return; +} + +//in: (nz,ns) out:(nplane,nxy) +void PW_Basis:: gathers_scatterp(complex *in, complex *out) +{ + if(this->poolnproc == 1) //In this case nrxx=nx*ny*nz, ns = nstot, + { + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + out[ir] = 0.0; + } + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + out[ixy*nz+iz] = this->in[is*nz+iz]; + } + } + return; + } +#ifdef __MPI if(this->poolnproc == 1) return; complex * tmp; if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; //scatter sticks to different processors - MPI_Gatherv(in, this->npw, mpicomplex, tmp, - this->npw_per, this->startnpw, mpicomplex, 0, POOL_WORLD); + MPI_Gatherv(in, this->nsz, mpicomplex, tmp, + this->nszip, this->startnsz, mpicomplex, 0, POOL_WORLD); for(int ir = 0 ; ir < this->nrxx ; ++ir) out[ir] = 0.0; for(int istot = 0 ; istot < this->nstot ; ++istot) @@ -47,7 +118,49 @@ void gathers_scatterp(complex *in, complex *out) MPI_Scatterv(&tmp[istot*this->nz], this->numz,this->startz, mpicomplex, &out[ixy*this->nplane], mpicomplex,0,POOL_WORLD); } +#endif + return; +} + +//in: (nz,ns) out:(nplane,nxy) +void PW_Basis:: gathers_scatterp_gamma(complex *in, complex *out) +{ + int hx = int ((nx + 2)/2); + if(this->poolnproc == 1) //In this case nrxx=nx*ny*nz, ns = nstot, + { + for(int ir = 0 ; ir < this->nrxx ; ++ir) + { + out[ir] = 0.0; + } + for(int is = 0 ; is < this->ns ; ++is) + { + int ixy = is2ixy[is]; + int ix = ixy % this->ny; + int iy = int( ixy / this->ny); + int ihxy = ix + iy * hx; + for(int iz = 0 ; iz < this->nz ; ++iz) + { + out[ihxy*nz+iz] = in[is*nz+iz]; + } + } + return; + } +#ifdef __MPI + if(this->poolnproc == 1) return; + complex * tmp; + if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; + + //scatter sticks to different processors + MPI_Gatherv(in, this->nsz, mpicomplex, tmp, + this->nszip, this->startnsz, mpicomplex, 0, POOL_WORLD); + for(int ir = 0 ; ir < this->nrxx ; ++ir) out[ir] = 0.0; + for(int istot = 0 ; istot < this->nstot ; ++istot) + { + int ixy = this->istot2ixy[istot]; + MPI_Scatterv(&tmp[istot*this->nz], this->numz,this->startz, mpicomplex, &out[ixy*this->nplane], + mpicomplex,0,POOL_WORLD); + } +#endif return; } -//#endif \ No newline at end of file From 7aba45b6bd91f1fe11b37ca8bee5ff5aea5f0525 Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Tue, 2 Nov 2021 21:41:43 +0800 Subject: [PATCH 050/478] Update distribution method1 --- source/module_pw/pw_basis.cpp | 14 +++++--- source/module_pw/pw_basis.h | 5 +-- source/module_pw/pw_distributeg.cpp | 51 +++++++++++++++++++---------- 3 files changed, 46 insertions(+), 24 deletions(-) diff --git a/source/module_pw/pw_basis.cpp b/source/module_pw/pw_basis.cpp index 30f90609f1..9518c29caf 100644 --- a/source/module_pw/pw_basis.cpp +++ b/source/module_pw/pw_basis.cpp @@ -4,25 +4,29 @@ PW_Basis::PW_Basis() { ig2isz = NULL; istot2ixy = NULL; + ixy2istot = NULL; is2ixy = NULL; ixy2ip = NULL; - startis = NULL; - nst_per = NULL; + startnsz_per = NULL; + nstnz_per = NULL; gdirect = NULL; gcar = NULL; gg = NULL; startz = NULL; - numz = NULL; + numz = NULL; } PW_Basis:: ~PW_Basis() { if(ig2isz != NULL) delete[] ig2isz; if(istot2ixy != NULL) delete[] istot2ixy; + if(ixy2istot != NULL) delete[] ixy2istot; if(is2ixy != NULL) delete[] is2ixy; if(ixy2ip != NULL) delete[] ixy2ip; - if(startis != NULL) delete[] startis; - if(nst_per != NULL) delete[] nst_per; + if(startnsz_per != NULL) delete[] startnsz_per; + if(nstnz_per != NULL) delete[] nstnz_per; if(gdirect != NULL) delete[] gdirect; if(gcar != NULL) delete[] gcar; if(gg != NULL) delete[] gg; + if(startz != NULL) delete[] startz; + if(numz != NULL) delete[] numz; } \ No newline at end of file diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index d915eb583d..7a8a09c539 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -50,10 +50,11 @@ class PW_Basis //reciprocal-space int *ig2isz; // map ig to (is, iz). int *istot2ixy; // istot2ixy[is]: ix + iy * nx of is^th stick among all sticks. + int *ixy2istot; // ixy2istot[ix + iy * nx]: is of stick on (ix, iy) among all sticks. int *is2ixy; // is2ixy[is]: ix + iy * nx of is^th stick among sticks on current proc. int *ixy2ip; // ixy2ip[ix + iy * nx]: ip of proc which contains stick on (ix, iy). - int *startis; // startis[ip]: starting is stick in the ip^th proc. - int *nst_per; // number of sticks on each core. + int *startnsz_per; // startnsz_per[ip]: starting is * nz stick in the ip^th proc. + int *nstnz_per; // nz * nst(number of sticks) on each core. int nst; //num. of sticks in current proc. int npw; //num. of plane waves in current proc. //real space diff --git a/source/module_pw/pw_distributeg.cpp b/source/module_pw/pw_distributeg.cpp index 779d5c676e..32af83ecdc 100644 --- a/source/module_pw/pw_distributeg.cpp +++ b/source/module_pw/pw_distributeg.cpp @@ -3,7 +3,7 @@ // //distribute plane waves to different cores //Known: G, GT, GGT, nx, ny, nz, poolnproc, poolrank, ggecut -//output: ig2isz[ig], istot2ixy[is], is2ixy[is], ixy2ip[ixy], startis[ip], nst_per[ip], gg[ig], gcar[ig], gdirect[ig], nst +//output: ig2isz[ig], istot2ixy[is], ixy2istot[ixy], is2ixy[is], ixy2ip[ixy], startnsz_per[ip], nstnz_per[ip], gg[ig], gcar[ig], gdirect[ig], nst // void PW_Basis::distribute_g() { @@ -23,7 +23,7 @@ void PW_Basis::distribute_g() // Firstly, divide the sphere in reciprocal space into sticks, which are vertical to x-y plane. // Secondly, distribute these sticks to coreors. //Known: G, GT, GGT, nx, ny, nz, poolnproc, poolrank, ggecut -//output: ig2isz[ig], istot2ixy[is], is2ixy[is], ixy2ip[ixy], startis[ip], nst_per[ip], gg[ig], gcar[ig], gdirect[ig], nst +//output: ig2isz[ig], istot2ixy[is], ixy2istot[nxy], is2ixy[is], ixy2ip[ixy], startnsz_per[ip], nst_per[ip], gg[ig], gcar[ig], gdirect[ig], nst // void PW_Basis::distribution_method1() { @@ -67,9 +67,11 @@ void PW_Basis::distribution_method1() // (3) Distribute sticks to cores. int *npw_per = new int[this->poolnproc]; // number of planewaves on each core. - this->nst_per = new int[this->poolnproc]; // number of sticks on each core. + int *nst_per = new int[this->poolnproc]; // number of sticks on each core. + this->nstnz_per = new int[this->poolnproc]; // nz * nst(number of sticks) on each core. ModuleBase::GlobalFunc::ZEROS(npw_per, poolnproc); - ModuleBase::GlobalFunc::ZEROS(this->nst_per, poolnproc); + ModuleBase::GlobalFunc::ZEROS(nst_per, poolnproc); + ModuleBase::GlobalFunc::ZEROS(this->nstnz_per, poolnproc); is2ip = new int[tot_nst]; // ip of core that contains is^th stick, map is to ip. for (int i = 0; i < tot_nst; i++) { @@ -80,10 +82,10 @@ void PW_Basis::distribution_method1() { this->ixy2ip[i] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). } - this->startis = new int[poolnproc]; - ModuleBase::GlobalFunc::ZEROS(startis, poolnproc); + this->startnsz_per = new int[poolnproc]; + ModuleBase::GlobalFunc::ZEROS(startnsz_per, poolnproc); - this->divide_sticks(tot_npw, tot_nst, st_i, st_j, st_length, npw_per, this->nst_per, is2ip); + this->divide_sticks(tot_npw, tot_nst, st_i, st_j, st_length, npw_per, nst_per, is2ip); this->get_istot2ixy(tot_nst, st_i, st_j, is2ip); // (4) Divide planewaves to each core, construct gg2D and gdirect2D. @@ -102,7 +104,7 @@ void PW_Basis::distribution_method1() // (5) Send gg, gdirect, npw_per, nst[poolrank], st_* to all cores. this->npw = npw_per[0]; - this->nst = this->nst_per[0]; + this->nst = nst_per[0]; this->gg = gg2D[0]; this->gdirect = gdirect2D[0]; for (int ip = 1; ip < this->poolnproc; ip++) @@ -110,7 +112,7 @@ void PW_Basis::distribution_method1() MPI_Send(&tot_npw, 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&tot_nst, 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&npw_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&this->nst_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&nst_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&gg2D[ip], npw_per[ip], MPI_DOUBLE, ip, 0, POOL_WORLD); MPI_Send(&gdirect2D[ip], npw_per[ip]*3, MPI_DOUBLE, ip, 0, POOL_WORLD); // I'm not sure about the send size and type here. MPI_Send(&st_i, tot_nst, MPI_INT, ip, 0, POOL_WORLD); @@ -118,6 +120,9 @@ void PW_Basis::distribution_method1() MPI_Send(&st_length, tot_nst, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&st_bottom, tot_nst, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&is2ip, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&ixy2ip, nxy, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&istot2ixy, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + MPI_Send(&ixy2istot, nxy, MPI_INT, ip, 0, POOL_WORLD); } for (int ip = 0; ip < this->poolnproc; ip++) { @@ -127,6 +132,7 @@ void PW_Basis::distribution_method1() delete[] gg2D; delete[] gdirect2D; delete[] npw_per; + delete[] nst_per; } else { @@ -146,6 +152,9 @@ void PW_Basis::distribution_method1() MPI_Recv(&st_length, tot_nst, MPI_INT, 0, 0, POOL_WORLD); MPI_Recv(&st_bottom, tot_nst, MPI_INT, 0, 0, POOL_WORLD); MPI_Recv(&is2ip, tot_nst, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&ixy2ip, nxy, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&istot2ixy, tot_nst, MPI_INT, 0, 0, POOL_WORLD); + MPI_Recv(&ixy2istot, tot_nst, MPI_INT, 0, 0, POOL_WORLD); } this->gcar = new ModuleBase::Vector3[this->npw]; @@ -337,9 +346,9 @@ void PW_Basis::collect_pw_st( // (3-1) Distribute sticks to cores. // We have rearranged sticks in the order of length decreasing, so that we will distribute the longest stick preferentially here. // For each stick, we find the core that contains the least planewaves firstly, and distribute the stick to it, -// then update npw_per, this->nst_per, is2ip and this->ixy2ip. +// then update npw_per, this->nstnz_per, is2ip this->ixy2ip and this->startnsz_per. // known: tot_npw, tot_nst, st_i, st_j, st_length -// output: npw_per, this->nst_per, is2ip, this->ixy2ip +// output: npw_per, nst_per, this->nstnz_per, is2ip, this->ixy2ip, this->startnsz_per // void PW_Basis::divide_sticks( const int tot_npw, // total number of planewaves. @@ -381,22 +390,24 @@ void PW_Basis::divide_sticks( } } nst_per[ipmin]++; + this->nstnz_per[ipmin] += this->nz; npw_per[ipmin] += st_length[is]; is2ip[is] = ipmin; this->ixy2ip[st_j[is] * this->nx + st_i[is]] = ipmin; } for (int ip = 1; ip < poolnproc; ip++) { - this->startis[ip] = this->startis[ip - 1] + nst_per[ip - 1]; + this->startnsz_per[ip] = this->startnsz_per[ip - 1] + this->nstnz_per[ip - 1]; } return; } // // (3-2) Rearrange sticks in the order of the ip of core increasing, (st_start + st_move) is the new index of sticks. -// Then get istot2ixy (istot2ixy[is]: ix + iy * nx of is^th stick among all sticks) on the first core. -// known: tot_nst, st_i, st_j, is2ip, this->startis -// output: istot2ixy +// Then get istot2ixy (istot2ixy[is]: ix + iy * nx of is^th stick among all sticks) on the first core +// and ixy2istot (ixy2istot[ix + iy * nx]: is of stick on (ix, iy) among all sticks). +// known: tot_nst, st_i, st_j, is2ip, this->startnsz_per +// output: istot2ixy, ixy2istot // void PW_Basis::get_istot2ixy( const int tot_nst, // total number of sticks. @@ -405,9 +416,14 @@ void PW_Basis::get_istot2ixy( int* is2ip // ip of core containing is^th stick, map is to ip. ) { - assert(this->poolrank == 0); + assert(this->poolrank == 0); // because other core has no this->startnsz_per. this->istot2ixy = new int[tot_nst]; ModuleBase::GlobalFunc::ZEROS(this->istot2ixy, poolnproc); + this->ixy2istot = new int[this->nx * this->ny]; + for (int i = 0; i < this->nx * this->ny; i++) + { + this->ixy2istot[i] = -1; + } int* st_move = new int[this->poolnproc]; // st_move[ip]: this is the st_move^th stick on ip^th core. ModuleBase::GlobalFunc::ZEROS(st_move, poolnproc); @@ -415,7 +431,8 @@ void PW_Basis::get_istot2ixy( for (int is = 0; is < tot_nst; is++) { int ip = is2ip[is]; - this->istot2ixy[this->startis[ip] + st_move[ip]] = st_j[is] * nx + st_i[is]; + this->istot2ixy[this->startnsz_per[ip] / this->nz + st_move[ip]] = st_j[is] * nx + st_i[is]; + this->ixy2istot[st_j[is] * nx + st_i[is]] = is; st_move[ip]++; } delete[] st_move; From 328ab812602663fc51a2ff1a65b222cf5ea8940c Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Tue, 2 Nov 2021 21:50:12 +0800 Subject: [PATCH 051/478] modify the order of declarations --- source/module_pw/pw_basis.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 7a8a09c539..d0432dac35 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -48,13 +48,15 @@ class PW_Basis //=============================================== public: //reciprocal-space + // only on first proc. + int *startnsz_per; // startnsz_per[ip]: starting is * nz stick in the ip^th proc. + int *nstnz_per; // nz * nst(number of sticks) on each core. + // on all proc. int *ig2isz; // map ig to (is, iz). int *istot2ixy; // istot2ixy[is]: ix + iy * nx of is^th stick among all sticks. int *ixy2istot; // ixy2istot[ix + iy * nx]: is of stick on (ix, iy) among all sticks. int *is2ixy; // is2ixy[is]: ix + iy * nx of is^th stick among sticks on current proc. int *ixy2ip; // ixy2ip[ix + iy * nx]: ip of proc which contains stick on (ix, iy). - int *startnsz_per; // startnsz_per[ip]: starting is * nz stick in the ip^th proc. - int *nstnz_per; // nz * nst(number of sticks) on each core. int nst; //num. of sticks in current proc. int npw; //num. of plane waves in current proc. //real space From 20de90181574a044f5b4e104cfe6b4805962b853 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 3 Nov 2021 14:35:02 +0800 Subject: [PATCH 052/478] deepks : stress --- source/src_lcao/FORCE_STRESS.cpp | 44 ++++++- source/src_lcao/FORCE_STRESS.h | 7 +- source/src_lcao/FORCE_gamma.cpp | 7 +- source/src_lcao/FORCE_gamma.h | 5 + source/src_lcao/FORCE_k.cpp | 7 +- source/src_lcao/FORCE_k.h | 5 + source/src_lcao/LCAO_descriptor.h | 4 +- source/src_lcao/LCAO_descriptor_new.cpp | 145 +++++++++++++++++++++++- 8 files changed, 213 insertions(+), 11 deletions(-) diff --git a/source/src_lcao/FORCE_STRESS.cpp b/source/src_lcao/FORCE_STRESS.cpp index 690e389122..7339650b4f 100644 --- a/source/src_lcao/FORCE_STRESS.cpp +++ b/source/src_lcao/FORCE_STRESS.cpp @@ -97,7 +97,10 @@ void Force_Stress_LCAO::getForceStress( ModuleBase::matrix soverlap; ModuleBase::matrix stvnl_dphi; ModuleBase::matrix svnl_dbeta; - ModuleBase::matrix svl_dphi; + ModuleBase::matrix svl_dphi; +#ifdef __DEEPKS + ModuleBase::matrix svnl_dalpha; //deepks +#endif if(isstress) { @@ -112,6 +115,9 @@ void Force_Stress_LCAO::getForceStress( stvnl_dphi.create(3,3); svnl_dbeta.create(3,3); svl_dphi.create(3,3); +#ifdef __DEEPKS + svnl_dalpha.create(3,3); +#endif //calculate basic terms in Stress, similar method with PW base this->calStressPwPart( sigmadvl, @@ -135,8 +141,12 @@ void Force_Stress_LCAO::getForceStress( soverlap, stvnl_dphi, svnl_dbeta, +#ifdef __DEEPKS + svl_dphi, + svnl_dalpha); +#else svl_dphi); - +#endif //implement vdw force or stress here // Peize Lin add 2014-04-04, update 2021-03-09 ModuleBase::matrix force_vdw; @@ -422,7 +432,13 @@ void Force_Stress_LCAO::getForceStress( + sigmacc(i,j) //nonlinear core correction stress (pw) + sigmaxc(i,j)//exchange corretion stress + sigmahar(i,j);// hartree stress - +#ifdef __DEEPKS + // wenfei add 2021/11/2 + if (GlobalV::deepks_scf) + { + scs(i,j) += svnl_dalpha(i,j); + } +#endif //VDW stress from linpz and jiyy if(GlobalC::vdwd2_para.flag_vdwd2||GlobalC::vdwd3_para.flag_vdwd3) { @@ -436,6 +452,13 @@ void Force_Stress_LCAO::getForceStress( } } +#ifdef __DEEPKS + for(int i=0;i<3;i++) + { + scs(i,i) -= GlobalC::ld.e_delta_band / GlobalC::ucell.omega; + } +#endif + if(ModuleSymmetry::Symmetry::symm_flag) { @@ -686,7 +709,12 @@ void Force_Stress_LCAO::calForceStressIntegralPart( ModuleBase::matrix& soverlap, ModuleBase::matrix& stvnl_dphi, ModuleBase::matrix& svnl_dbeta, +#if __DEEPKS + ModuleBase::matrix& svl_dphi, + ModuleBase::matrix& svnl_dalpha) +#else ModuleBase::matrix& svl_dphi) +#endif { if(isGammaOnly) { @@ -700,7 +728,12 @@ void Force_Stress_LCAO::calForceStressIntegralPart( soverlap, stvnl_dphi, svnl_dbeta, +#if __DEEPKS + svl_dphi, + svnl_dalpha); +#else svl_dphi); +#endif } else { @@ -714,7 +747,12 @@ void Force_Stress_LCAO::calForceStressIntegralPart( soverlap, stvnl_dphi, svnl_dbeta, +#if __DEEPKS + svl_dphi, + svnl_dalpha); +#else svl_dphi); +#endif } return; } diff --git a/source/src_lcao/FORCE_STRESS.h b/source/src_lcao/FORCE_STRESS.h index 620c2785fe..185ea66674 100644 --- a/source/src_lcao/FORCE_STRESS.h +++ b/source/src_lcao/FORCE_STRESS.h @@ -63,7 +63,12 @@ class Force_Stress_LCAO ModuleBase::matrix &soverlap, ModuleBase::matrix &stvnl_dphi, ModuleBase::matrix &svnl_dbeta, - ModuleBase::matrix &svl_dphi); +#if __DEEPKS + ModuleBase::matrix& svl_dphi, + ModuleBase::matrix& svnl_dalpha); +#else + ModuleBase::matrix& svl_dphi); +#endif void calStressPwPart( ModuleBase::matrix &sigmadvl, diff --git a/source/src_lcao/FORCE_gamma.cpp b/source/src_lcao/FORCE_gamma.cpp index e4b321f678..e7fb19070f 100644 --- a/source/src_lcao/FORCE_gamma.cpp +++ b/source/src_lcao/FORCE_gamma.cpp @@ -21,7 +21,12 @@ void Force_LCAO_gamma::ftable_gamma ( ModuleBase::matrix& soverlap, ModuleBase::matrix& stvnl_dphi, ModuleBase::matrix& svnl_dbeta, +#ifdef __DEEPKS + ModuleBase::matrix& svl_dphi, + ModuleBase::matrix& svnl_dalpha) +#else ModuleBase::matrix& svl_dphi) +#endif { ModuleBase::TITLE("Force_LCAO_gamma", "ftable"); ModuleBase::timer::tick("Force_LCAO_gamma","ftable_gamma"); @@ -83,7 +88,7 @@ void Force_LCAO_gamma::ftable_gamma ( //=======method 2: snap_psialpha======== GlobalC::ld.cal_gedm(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); - GlobalC::ld.cal_f_delta_hf_new(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); + GlobalC::ld.cal_f_delta_hf_new(GlobalC::LOC.wfc_dm_2d.dm_gamma[0],isstress, svnl_dalpha); //ld.print_F_delta("F_delta_hf.dat"); GlobalC::ld.cal_f_delta_pulay(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); //ld.print_F_delta("F_delta_pulay.dat"); diff --git a/source/src_lcao/FORCE_gamma.h b/source/src_lcao/FORCE_gamma.h index c5df397561..6ab5e0f0dd 100644 --- a/source/src_lcao/FORCE_gamma.h +++ b/source/src_lcao/FORCE_gamma.h @@ -26,7 +26,12 @@ class Force_LCAO_gamma ModuleBase::matrix& soverlap, ModuleBase::matrix& stvnl_dphi, ModuleBase::matrix& svnl_dbeta, +#ifdef __DEEPKS + ModuleBase::matrix& svl_dphi, + ModuleBase::matrix& svnl_dalpha +#else ModuleBase::matrix& svl_dphi +#endif ); // get the ds, dt, dvnl. diff --git a/source/src_lcao/FORCE_k.cpp b/source/src_lcao/FORCE_k.cpp index 7bfc2663eb..dcd6aae6c1 100644 --- a/source/src_lcao/FORCE_k.cpp +++ b/source/src_lcao/FORCE_k.cpp @@ -27,7 +27,12 @@ void Force_LCAO_k::ftable_k ( ModuleBase::matrix& soverlap, ModuleBase::matrix& stvnl_dphi, ModuleBase::matrix& svnl_dbeta, +#ifdef __DEEPKS + ModuleBase::matrix& svl_dphi, + ModuleBase::matrix& svnl_dalpha +#else ModuleBase::matrix& svl_dphi +#endif ) { ModuleBase::TITLE("Force_LCAO_k", "ftable_k"); @@ -84,7 +89,7 @@ void Force_LCAO_k::ftable_k ( //step 2 : obtain density matrix; calculate dE/dD GlobalC::ld.cal_gedm(dm_k_all.dble()); - GlobalC::ld.cal_f_delta_hf_k_new(GlobalC::LOC.wfc_dm_2d.dm_k); + GlobalC::ld.cal_f_delta_hf_k_new(GlobalC::LOC.wfc_dm_2d.dm_k,isstress,svnl_dalpha); //ld.print_F_delta("F_delta_hf.dat"); GlobalC::ld.cal_f_delta_k_pulay(GlobalC::LOC.wfc_dm_2d.dm_k); //ld.print_F_delta("F_delta_pulay.dat"); diff --git a/source/src_lcao/FORCE_k.h b/source/src_lcao/FORCE_k.h index 2c67247cec..8dcea58bd1 100644 --- a/source/src_lcao/FORCE_k.h +++ b/source/src_lcao/FORCE_k.h @@ -27,7 +27,12 @@ class Force_LCAO_k : public Force_LCAO_gamma ModuleBase::matrix& soverlap, ModuleBase::matrix& stvnl_dphi, ModuleBase::matrix& svnl_dbeta, +#ifdef __DEEPKS + ModuleBase::matrix& svl_dphi, + ModuleBase::matrix& svnl_dalpha +#else ModuleBase::matrix& svl_dphi +#endif ); // get the ds, dt, dvnl. diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 67061c94ed..862d2f771d 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -101,8 +101,8 @@ class LCAO_Descriptor ///compute Hellmann-Feynman term of the force contribution of \f$E_\delta\f$ void cal_f_delta_hf(const ModuleBase::matrix& dm/**< [in] density matrix*/); - void cal_f_delta_hf_new(const ModuleBase::matrix& dm/**< [in] density matrix*/); - void cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/); + void cal_f_delta_hf_new(const ModuleBase::matrix& dm/**< [in] density matrix*/, const bool isstress, ModuleBase::matrix& svnl_dalpha); + void cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/, const bool isstress, ModuleBase::matrix& svnl_dalpha); ///compute Pulay term of the force contribution of \f$E_\delta\f$ void cal_f_delta_pulay(const ModuleBase::matrix& dm/**< [in] density matrix*/); diff --git a/source/src_lcao/LCAO_descriptor_new.cpp b/source/src_lcao/LCAO_descriptor_new.cpp index fda7c6346b..9086ec9e2b 100644 --- a/source/src_lcao/LCAO_descriptor_new.cpp +++ b/source/src_lcao/LCAO_descriptor_new.cpp @@ -285,7 +285,7 @@ void LCAO_Descriptor::build_v_delta_alpha_new(const bool& calc_deri) } -void LCAO_Descriptor::cal_f_delta_hf_new(const ModuleBase::matrix& dm) +void LCAO_Descriptor::cal_f_delta_hf_new(const ModuleBase::matrix& dm, const bool isstress, ModuleBase::matrix& svnl_dalpha) { ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf_new"); this->F_delta.zero_out(); @@ -389,6 +389,18 @@ void LCAO_Descriptor::cal_f_delta_hf_new(const ModuleBase::matrix& dm) continue; } + double r0[3]; + double r1[3]; + if(isstress) + { + r1[0] = ( tau1.x - tau0.x) ; + r1[1] = ( tau1.y - tau0.y) ; + r1[2] = ( tau1.z - tau0.z) ; + r0[0] = ( tau2.x - tau0.x) ; + r0[1] = ( tau2.y - tau0.y) ; + r0[2] = ( tau2.z - tau0.z) ; + } + for (int iw1=0; iw1 nlm1 = nlm_tot[ad1][iw1_all][0]; std::vector> nlm2; nlm2.resize(3); @@ -440,21 +453,74 @@ void LCAO_Descriptor::cal_f_delta_hf_new(const ModuleBase::matrix& dm) this->F_delta(iat, 1) -= 2 * dm(iw1_local, iw2_local) * nlm[1]; this->F_delta(iat, 2) -= 2 * dm(iw1_local, iw2_local) * nlm[2]; + if(isstress) + { + nlm1 = nlm_tot[ad2][iw2_all][0]; + for(int i=0;i<3;i++) + { + nlm2[i] = nlm_tot[ad1][iw1_all][i+1]; + } + + assert(nlm1.size()==nlm2[0].size()); + + int ib=0; + for (int L0 = 0; L0 <= GlobalC::ORB.Alpha[0].getLmax();++L0) + { + for (int N0 = 0;N0 < GlobalC::ORB.Alpha[0].getNchi(L0);++N0) + { + const int inl = this->inl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m1 = 0;m1 < nm; ++m1) + { + for (int m2 = 0; m2 < nm; ++m2) + { + for(int dim=0;dim<3;dim++) + { + nlm_t[dim] += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[dim][ib+m2]; + } + } + } + ib+=nm; + } + } + assert(ib==nlm1.size()); + + for(int ipol=0;ipol<3;ipol++) + { + svnl_dalpha(0,ipol) -= dm(iw1_local, iw2_local) * (nlm[0] * r0[ipol] + nlm_t[0] * r1[ipol])* -1; + svnl_dalpha(1,ipol) -= dm(iw1_local, iw2_local) * (nlm[1] * r0[ipol] + nlm_t[1] * r1[ipol])* -1; + svnl_dalpha(2,ipol) -= dm(iw1_local, iw2_local) * (nlm[2] * r0[ipol] + nlm_t[2] * r1[ipol])* -1; + } + } }//iw2 }//iw1 }//ad2 }//ad1 }//end I0 }//end T0 + + if(isstress) + { + for(int i=0;i<3;i++) + { + for(int j=0;j<3;j++) + { + svnl_dalpha(i,j) *= GlobalC::ucell.lat0 / GlobalC::ucell.omega; + } + } + } } -void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/) +void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vector& dm/**<[in] density matrix*/, const bool isstress, ModuleBase::matrix& svnl_dalpha) { ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf_k_new"); this->F_delta.zero_out(); ModuleBase::ComplexMatrix F_delta_k; F_delta_k.create(this->F_delta.nr,this->F_delta.nc); + ModuleBase::ComplexMatrix svnl_dalpha_k; + svnl_dalpha_k.create(3,3); + const double Rcut_Alpha = GlobalC::ORB.Alpha[0].getRcut(); for (int T0 = 0; T0 < GlobalC::ucell.ntype; T0++) { @@ -556,7 +622,19 @@ void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vector nlm1 = nlm_tot[ad1][iw1_all][0]; std::vector> nlm2; nlm2.resize(3); @@ -612,6 +691,50 @@ void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vectorinl_index[T0](I0, L0, N0); + const int nm = 2*L0+1; + for (int m1 = 0;m1 < nm; ++m1) + { + for (int m2 = 0; m2 < nm; ++m2) + { + for(int dim=0;dim<3;dim++) + { + nlm_t[dim] += this->gedm[inl][m1*nm+m2]*nlm1[ib+m1]*nlm2[dim][ib+m2]; + } + } + } + ib+=nm; + } + } + assert(ib==nlm1.size()); + for(int ik=0;ik kphase = std::complex ( cos(arg), sin(arg) ); + for(int ipol=0;ipol<3;ipol++) + { + svnl_dalpha_k(0,ipol) -= dm[ik](iw1_local, iw2_local) * kphase * (nlm[0] * r0[ipol] + nlm_t[0] * r1[ipol])* -1; + svnl_dalpha_k(1,ipol) -= dm[ik](iw1_local, iw2_local) * kphase * (nlm[1] * r0[ipol] + nlm_t[1] * r1[ipol])* -1; + svnl_dalpha_k(2,ipol) -= dm[ik](iw1_local, iw2_local) * kphase * (nlm[2] * r0[ipol] + nlm_t[2] * r1[ipol])* -1; + } + } + } }//iw2 }//iw1 }//ad2 @@ -624,6 +747,22 @@ void LCAO_Descriptor::cal_f_delta_hf_k_new(const std::vectorF_delta = F_delta_k.dble(); + + if(isstress) + { + if(!svnl_dalpha_k.checkreal()) + { + ModuleBase::WARNING_QUIT("cal_f_delta_hf_k","Stress should be real!"); + } + + for(int i=0;i<3;i++) + { + for(int j=0;j<3;j++) + { + svnl_dalpha(i,j) = svnl_dalpha_k(i,j).real() * GlobalC::ucell.lat0 / GlobalC::ucell.omega; + } + } + } } void LCAO_Descriptor::cal_f_delta_k_pulay(const std::vector& dm/**<[in] density matrix*/) From 29fbf0334deb1ac1fe9df1a02b3503aba7a881a0 Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 5 Nov 2021 11:16:07 +0800 Subject: [PATCH 053/478] create cudafft --- source/module_pw/cudafft.cu | 0 source/module_pw/cudafft.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/module_pw/cudafft.cu create mode 100644 source/module_pw/cudafft.h diff --git a/source/module_pw/cudafft.cu b/source/module_pw/cudafft.cu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/source/module_pw/cudafft.h b/source/module_pw/cudafft.h new file mode 100644 index 0000000000..e69de29bb2 From 259e7cf30a29996fe4e99b0652612a0b4c6101a0 Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 5 Nov 2021 11:25:40 +0800 Subject: [PATCH 054/478] change name --- source/module_pw/fft.cpp | 8 ++++---- source/module_pw/fft.h | 4 ++-- source/module_pw/pw_basis.h | 2 -- source/module_pw/pw_init.cpp | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/source/module_pw/fft.cpp b/source/module_pw/fft.cpp index 7b739e9284..75f8fd6743 100644 --- a/source/module_pw/fft.cpp +++ b/source/module_pw/fft.cpp @@ -68,7 +68,7 @@ void FFT:: setupFFT() { if(!this->mpifft) { - this->initpland(); + this->initplan(); #ifdef __MIX_PRECISION this->initplanf(); #endif @@ -76,7 +76,7 @@ void FFT:: setupFFT() #if defined(__FFTW3_MPI) && defined(__MPI) else { - this->initpland_mpi(); + this->initplan_mpi(); #ifdef __MIX_PRECISION this->initplanf_mpi(); #endif @@ -85,7 +85,7 @@ void FFT:: setupFFT() return; } -void FFT :: initpland() +void FFT :: initplan() { //--------------------------------------------------------- // 1 D @@ -183,7 +183,7 @@ void FFT :: initplanf() } #endif -void FFT :: initpland_mpi() +void FFT :: initplan_mpi() { } diff --git a/source/module_pw/fft.h b/source/module_pw/fft.h index 3d6dfd710b..cbff60a1d9 100644 --- a/source/module_pw/fft.h +++ b/source/module_pw/fft.h @@ -35,8 +35,8 @@ class FFT #endif private: - void initpland(); - void initpland_mpi(); + void initplan(); + void initplan_mpi(); #ifdef __MIX_PRECISION void initplanf(); void initplanf_mpi(); diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 53a2d4e1c6..a48a7ef448 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -24,13 +24,11 @@ class PW_Basis //Init the grids for FFT void initgrids( ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors - ModuleBase::Matrix3 G_in, // reciprocal lattice vector (2pi*inv(R) ) double gridecut ); //Init the grids for FFT void initgrids( ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors - ModuleBase::Matrix3 G_in, // reciprocal lattice vector (2pi*inv(R) ) int nx_in, int ny_in, int nz_in ); diff --git a/source/module_pw/pw_init.cpp b/source/module_pw/pw_init.cpp index 0d790412e5..6ca79255da 100644 --- a/source/module_pw/pw_init.cpp +++ b/source/module_pw/pw_init.cpp @@ -6,7 +6,7 @@ //Output: nx, ny, nz, nxyz, latvec, G, GT, GGT // void PW_Basis:: initgrids( - ModuleBase::Matrix3 latvec_in // Unitcell lattice vectors + ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors double gridecut ) { @@ -115,7 +115,7 @@ void PW_Basis:: initgrids( //Output: nx, ny, nz, nxyz, latvec, G, GT, GGT // void PW_Basis:: initgrids( - ModuleBase::Matrix3 latvec_in // Unitcell lattice vectors + ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors int nx_in, int ny_in, int nz_in ) { From 15c780bc438ac1a19ba2f87c2122cd231900382d Mon Sep 17 00:00:00 2001 From: dyzheng Date: Fri, 5 Nov 2021 14:14:07 +0800 Subject: [PATCH 055/478] modified test.yml and hosted_test.yml --- .github/workflows/hosted_test.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/hosted_test.yml b/.github/workflows/hosted_test.yml index 990ffbcd4b..7b4fc13a46 100644 --- a/.github/workflows/hosted_test.yml +++ b/.github/workflows/hosted_test.yml @@ -11,7 +11,7 @@ jobs: build_args: "" name: "Build with GNU compilers" - tag: gnu - build_args: "-DENABLE_LIBXC=1 -DENABLE_DEEPKS=1" + build_args: "-DENABLE_LIBXC=1" name: "Build with GNU compilers and extra components" - tag: intel build_args: "" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7bcc4d3655..30ec8f2619 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,7 +4,7 @@ on: pull_request_target: branches: - develop - - ABACUS_2.2.0_beta + - update_MD jobs: start-runner: From 5246ae2671c543945d39ba4468069f4851f6f9a5 Mon Sep 17 00:00:00 2001 From: dyzheng Date: Fri, 5 Nov 2021 14:17:52 +0800 Subject: [PATCH 056/478] added all branch to test.yml --- .github/workflows/test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 30ec8f2619..4edc572311 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,6 +5,9 @@ on: branches: - develop - update_MD + - ABACUS_2.2.0_beta + - deepks + - planewave jobs: start-runner: From ce0f1756e57d5ef83069c5969554f8f8c896b394 Mon Sep 17 00:00:00 2001 From: maki49 <1579492865@qq.com> Date: Fri, 5 Nov 2021 17:52:27 +0800 Subject: [PATCH 057/478] fix a bug in saving e_base --- source/src_lcao/ELEC_scf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/src_lcao/ELEC_scf.cpp b/source/src_lcao/ELEC_scf.cpp index 4eee0ad897..f3d53dc8e3 100644 --- a/source/src_lcao/ELEC_scf.cpp +++ b/source/src_lcao/ELEC_scf.cpp @@ -556,7 +556,7 @@ void ELEC_scf::scf(const int &istep) { GlobalC::ld.save_npy_e(GlobalC::en.etot, "e_tot.npy"); if (GlobalV::deepks_scf) { - GlobalC::ld.save_npy_e(GlobalC::en.etot - GlobalC::ld.E_delta + GlobalC::ld.e_delta_band, "e_base.npy");//ebase :no deepks E_delta including + GlobalC::ld.save_npy_e(GlobalC::en.etot - GlobalC::ld.E_delta, "e_base.npy");//ebase :no deepks E_delta including } else { From 0790ba0652ee35b2358b4d81ef894ecd44fff03c Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Tue, 9 Nov 2021 15:30:59 +0800 Subject: [PATCH 058/478] fix libnpy in CmakeList --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 039de03e67..ba9af1b893 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -149,7 +149,7 @@ if(ENABLE_DEEPKS) ) FetchContent_MakeAvailable(libnpy) endif() - include_directories(${libnpy_SOURCE_DIR}) + include_directories(${libnpy_SOURCE_DIR}/include) add_compile_definitions(__DEEPKS) endif() From 7a2cfcba1e4e5375ed36c04fb572b0ebde64c7e1 Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Tue, 9 Nov 2021 16:43:44 +0800 Subject: [PATCH 059/478] Add halp planewave method to gamma_only case, update the MPI functions in pw_distribution_method1.cpp. --- source/module_pw/pw_distributeg.cpp | 99 +++++++++++++++++++---------- 1 file changed, 66 insertions(+), 33 deletions(-) diff --git a/source/module_pw/pw_distributeg.cpp b/source/module_pw/pw_distributeg.cpp index 4689681130..bc0884b307 100644 --- a/source/module_pw/pw_distributeg.cpp +++ b/source/module_pw/pw_distributeg.cpp @@ -27,6 +27,10 @@ void PW_Basis::distribute_g() // void PW_Basis::distribution_method1() { + // if use gamma point only, when convert real function f(r) to F(k) = FFT(f), + // we have F(-k) = F(k)*, so that only half of planewaves are needed. + if (this->gamma_only) this->nx = int(this->nx / 2) + 1; + // initial the variables needed by all proc. const int nxy = this->nx * this->ny; // number of points in x-y plane. int tot_npw = 0; // total number of planewaves. @@ -60,7 +64,7 @@ void PW_Basis::distribution_method1() st_bottom = new int[tot_nst]; // minimum z of stick. st_length = new int[tot_nst]; // number of planewaves in stick. - this->collect_pw_st(tot_npw, tot_nst, st_length2D, st_bottom2D, gg_global, gdirect_global, st_i, st_j, st_length, st_bottom); + this->collect_pw_st(&tot_npw, &tot_nst, st_length2D, st_bottom2D, gg_global, gdirect_global, st_i, st_j, st_length, st_bottom); delete[] st_length2D; delete[] st_bottom2D; @@ -107,22 +111,34 @@ void PW_Basis::distribution_method1() this->nst = nst_per[0]; this->gg = gg2D[0]; this->gdirect = gdirect2D[0]; + + MPI_Bcast(&tot_npw, 1, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&tot_nst, 1, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&st_i, tot_nst, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&st_j, tot_nst, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&st_length, tot_nst, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&st_bottom, tot_nst, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&is2ip, tot_nst, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&ixy2ip, nxy, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&istot2ixy, tot_nst, MPI_INT, 0, POOL_WORLD); + MPI_Bcast(&ixy2istot, nxy, MPI_INT, 0, POOL_WORLD); + for (int ip = 1; ip < this->poolnproc; ip++) { - MPI_Send(&tot_npw, 1, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&tot_nst, 1, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&tot_npw, 1, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&tot_nst, 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&npw_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&nst_per[ip], 1, MPI_INT, ip, 0, POOL_WORLD); MPI_Send(&gg2D[ip], npw_per[ip], MPI_DOUBLE, ip, 0, POOL_WORLD); MPI_Send(&gdirect2D[ip], npw_per[ip]*3, MPI_DOUBLE, ip, 0, POOL_WORLD); // I'm not sure about the send size and type here. - MPI_Send(&st_i, tot_nst, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&st_j, tot_nst, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&st_length, tot_nst, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&st_bottom, tot_nst, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&is2ip, tot_nst, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&ixy2ip, nxy, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&istot2ixy, tot_nst, MPI_INT, ip, 0, POOL_WORLD); - MPI_Send(&ixy2istot, nxy, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&st_i, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&st_j, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&st_length, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&st_bottom, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&is2ip, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&ixy2ip, nxy, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&istot2ixy, tot_nst, MPI_INT, ip, 0, POOL_WORLD); + // MPI_Send(&ixy2istot, nxy, MPI_INT, ip, 0, POOL_WORLD); } for (int ip = 0; ip < this->poolnproc; ip++) { @@ -136,25 +152,26 @@ void PW_Basis::distribution_method1() } else { - MPI_Recv(&tot_npw, 1, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&tot_nst, 1, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&npw, 1, MPI_INT, 0, 0, POOL_WORLD); // number of planewaves in current proc. - MPI_Recv(&nst, 1, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&gg, npw, MPI_DOUBLE, 0, 0, POOL_WORLD); - MPI_Recv(&gdirect, npw*3, MPI_DOUBLE, 0, 0, POOL_WORLD); // I'm not sure about the send size and type here. - st_i = new int[tot_nst]; - st_j = new int[tot_nst]; - st_length = new int[tot_nst]; - st_bottom = new int[tot_nst]; - is2ip = new int [tot_nst]; - MPI_Recv(&st_i, tot_nst, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&st_j, tot_nst, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&st_length, tot_nst, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&st_bottom, tot_nst, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&is2ip, tot_nst, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&ixy2ip, nxy, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&istot2ixy, tot_nst, MPI_INT, 0, 0, POOL_WORLD); - MPI_Recv(&ixy2istot, nxy, MPI_INT, 0, 0, POOL_WORLD); + MPI_Status ierror; + // MPI_Recv(&tot_npw, 1, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&tot_nst, 1, MPI_INT, 0, 0, POOL_WORLD, &ierror); + MPI_Recv(&npw, 1, MPI_INT, 0, 0, POOL_WORLD, &ierror); // number of planewaves in current proc. + MPI_Recv(&nst, 1, MPI_INT, 0, 0, POOL_WORLD, &ierror); + MPI_Recv(&gg, npw, MPI_DOUBLE, 0, 0, POOL_WORLD, &ierror); + MPI_Recv(&gdirect, npw*3, MPI_DOUBLE, 0, 0, POOL_WORLD, &ierror); // I'm not sure about the send size and type here. + // st_i = new int[tot_nst]; + // st_j = new int[tot_nst]; + // st_length = new int[tot_nst]; + // st_bottom = new int[tot_nst]; + // is2ip = new int [tot_nst]; + // MPI_Recv(&st_i, tot_nst, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&st_j, tot_nst, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&st_length, tot_nst, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&st_bottom, tot_nst, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&is2ip, tot_nst, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&ixy2ip, nxy, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&istot2ixy, tot_nst, MPI_INT, 0, 0, POOL_WORLD, &ierror); + // MPI_Recv(&ixy2istot, nxy, MPI_INT, 0, 0, POOL_WORLD, &ierror); } this->gcar = new ModuleBase::Vector3[this->npw]; @@ -195,7 +212,15 @@ void PW_Basis::count_pw_st( ibox[2] = int(this->nz / 2) + 1; // scan z from -ibox[2] to ibox[2]. ModuleBase::Vector3 f; - for (int ix = -ibox[0]; ix <= ibox[0]; ix++) + + int ix_start = -ibox[0]; // determine the scaning area along x-direct, if gamma-only, only positive axis is used. + int ix_end = ibos[0]; + if (this->gamma_only) + { + ix_start = 0; + ix_end = this->nx; + } + for (int ix = ix_start; ix <= ix_end; ix++) { for (int iy = -ibox[1]; iy <= ibox[1]; iy++) { @@ -271,7 +296,15 @@ void PW_Basis::collect_pw_st( ModuleBase::Vector3 f; int ig = 0; // index of planewave. int is = 0; // index of stick. - for (int ix = -ibox[0]; ix <= ibox[0]; ix++) + + int ix_start = -ibox[0]; // determine the scaning area along x-direct, if gamma-only, only positive axis is used. + int ix_end = ibos[0]; + if (this->gamma_only) + { + ix_start = 0; + ix_end = this->nx; + } + for (int ix = ix_start; ix <= ix_end; ix++) { for (int iy = -ibox[1]; iy <= ibox[1]; iy++) { @@ -416,7 +449,7 @@ void PW_Basis::get_istot2ixy( int* is2ip // ip of core containing is^th stick, map is to ip. ) { - assert(this->poolrank == 0); // because other core has no this->startnsz_per. + assert(this->poolrank == 0); this->istot2ixy = new int[tot_nst]; ModuleBase::GlobalFunc::ZEROS(this->istot2ixy, poolnproc); this->ixy2istot = new int[this->nx * this->ny]; From 3528268482262ff3510b24558acc321530504140 Mon Sep 17 00:00:00 2001 From: YuLiu98 Date: Fri, 12 Nov 2021 14:00:50 +0800 Subject: [PATCH 060/478] delete useless variables in run_md_classic.h --- source/module_md/driver_classic.cpp | 6 ++--- source/module_md/driver_classic.h | 8 +++--- source/module_md/main.cpp | 3 +-- source/module_md/run_md_classic.cpp | 41 ++--------------------------- source/module_md/run_md_classic.h | 9 ------- 5 files changed, 10 insertions(+), 57 deletions(-) diff --git a/source/module_md/driver_classic.cpp b/source/module_md/driver_classic.cpp index 0b1e2f9b3a..0271a523e1 100644 --- a/source/module_md/driver_classic.cpp +++ b/source/module_md/driver_classic.cpp @@ -18,10 +18,10 @@ void Driver_classic::init() ModuleBase::timer::start(); // (1) read the input parameters. - this->reading(); + Driver_classic::reading(); // (2) welcome to the classic MD! - this->classic_world(); + Driver_classic::classic_world(); // (3) output information time_t time_finish= std::time(NULL); @@ -82,7 +82,7 @@ void Driver_classic::classic_world(void) Run_MD_CLASSIC run_md_classic; - this->convert(run_md_classic.ucell_c); + Driver_classic::convert(run_md_classic.ucell_c); if(GlobalV::CALCULATION != "md") { diff --git a/source/module_md/driver_classic.h b/source/module_md/driver_classic.h index 4bd9ed2109..b274bae771 100644 --- a/source/module_md/driver_classic.h +++ b/source/module_md/driver_classic.h @@ -10,18 +10,18 @@ class Driver_classic Driver_classic(); ~Driver_classic(); - void init(); + static void init(); private: // reading the parameters - void reading(); + static void reading(); // convert INPUT parameters for classic MD - void convert(UnitCell_pseudo &ucell_c); + static void convert(UnitCell_pseudo &ucell_c); // classic MD - void classic_world(); + static void classic_world(); }; diff --git a/source/module_md/main.cpp b/source/module_md/main.cpp index 04195590e7..0aeae58bfd 100644 --- a/source/module_md/main.cpp +++ b/source/module_md/main.cpp @@ -14,8 +14,7 @@ int main(int argc, char **argv) //---------------------------------------------------------- // main program for doing CMD calculations //---------------------------------------------------------- - Driver_classic DD; - DD.init(); + Driver_classic::init(); #ifdef __MPI MPI_Finalize(); diff --git a/source/module_md/run_md_classic.cpp b/source/module_md/run_md_classic.cpp index 4b2927edb4..c55d2555c5 100644 --- a/source/module_md/run_md_classic.cpp +++ b/source/module_md/run_md_classic.cpp @@ -10,20 +10,12 @@ Run_MD_CLASSIC::Run_MD_CLASSIC() { - pos_old1 = new double[1]; - pos_old2 = new double[1]; - pos_now = new double[1]; - pos_next = new double[1]; force = new ModuleBase::Vector3[1]; stress.create(3,3); } Run_MD_CLASSIC::~Run_MD_CLASSIC() { - delete[] pos_old1; - delete[] pos_old2; - delete[] pos_now; - delete[] pos_next; delete[] force; } @@ -45,7 +37,7 @@ void Run_MD_CLASSIC::classic_md_line(void) MD_basic mdb(INPUT.mdp, ucell_c); int mdtype = INPUT.mdp.mdtype; - this->istep = 1; + int istep = 1; bool stop = false; double potential; @@ -57,8 +49,6 @@ void Run_MD_CLASSIC::classic_md_line(void) this->md_force_stress(potential); - this->update_pos_classic(); - if (mdtype == 1 || mdtype == 2) { mdb.runNVT(istep, potential, force, stress); @@ -78,8 +68,6 @@ void Run_MD_CLASSIC::classic_md_line(void) time_t fend = time(NULL); - ucell_c.save_cartesian_position(this->pos_next); - ++istep; } @@ -169,33 +157,8 @@ void Run_MD_CLASSIC::md_force_stress(double &potential) void Run_MD_CLASSIC::md_allocate_ions(void) { - pos_dim = ucell_c.nat * 3; + int pos_dim = ucell_c.nat * 3; - delete[] this->pos_old1; - delete[] this->pos_old2; - delete[] this->pos_now; - delete[] this->pos_next; delete[] this->force; - - this->pos_old1 = new double[pos_dim]; - this->pos_old2 = new double[pos_dim]; - this->pos_now = new double[pos_dim]; - this->pos_next = new double[pos_dim]; this->force = new ModuleBase::Vector3[ucell_c.nat]; - - ModuleBase::GlobalFunc::ZEROS(pos_old1, pos_dim); - ModuleBase::GlobalFunc::ZEROS(pos_old2, pos_dim); - ModuleBase::GlobalFunc::ZEROS(pos_now, pos_dim); - ModuleBase::GlobalFunc::ZEROS(pos_next, pos_dim); -} - -void Run_MD_CLASSIC::update_pos_classic(void) -{ - for(int i=0;ipos_old2[i] = this->pos_old1[i]; - this->pos_old1[i] = this->pos_now[i]; - } - this->ucell_c.save_cartesian_position(this->pos_now); - return; } diff --git a/source/module_md/run_md_classic.h b/source/module_md/run_md_classic.h index 0f79ddfabb..cdbb1648e9 100644 --- a/source/module_md/run_md_classic.h +++ b/source/module_md/run_md_classic.h @@ -16,18 +16,9 @@ class Run_MD_CLASSIC void classic_md_line(void); void md_force_stress(double &potential); void md_allocate_ions(void); - void update_pos_classic(void); ModuleBase::Vector3 *force; //force of each atom ModuleBase::matrix stress; //stress for this lattice - -private: - int istep; - double* pos_old1; - double* pos_old2; - double* pos_now; - double* pos_next; - int pos_dim; }; #endif \ No newline at end of file From f820c60effdaef375e9b527b7601d3a874cbd7a4 Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 12 Nov 2021 14:12:49 +0800 Subject: [PATCH 061/478] delete 1dr2c and 1dc2r --- source/module_pw/fft.cpp | 50 ++++++++++--------- source/module_pw/fft.h | 8 +-- .../{pw_convert.cpp => pw_transform.cpp} | 4 +- 3 files changed, 32 insertions(+), 30 deletions(-) rename source/module_pw/{pw_convert.cpp => pw_transform.cpp} (95%) diff --git a/source/module_pw/fft.cpp b/source/module_pw/fft.cpp index 75f8fd6743..f1ac9ab41a 100644 --- a/source/module_pw/fft.cpp +++ b/source/module_pw/fft.cpp @@ -94,6 +94,7 @@ void FFT :: initplan() // fftw_plan_many_dft(int rank, const int *n, int howmany, // fftw_complex *in, const int *inembed, int istride, int idist, // fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); + this->plan1for = fftw_plan_many_dft( 1, &this->nz, this->ns, (fftw_complex*) c_gspace, &this->nz, 1, this->nz, (fftw_complex*) c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); @@ -102,13 +103,13 @@ void FFT :: initplan() (fftw_complex*) c_gspace, &this->nz, 1, this->nz, (fftw_complex*) c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); - this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, - r_gspace, &this->nz, 1, this->nz, - (fftw_complex*) c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + // this->plan1r2c = fftw_plan_many_dft_r2c( 1, &this->nz, this->ns, + // r_gspace, &this->nz, 1, this->nz, + // (fftw_complex*) c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); - this->plan1c2r = fftw_plan_many_dft_c2r( 1, &this->nz, this->ns, - (fftw_complex*) c_gspace, &this->nz, 1, this->nz, - r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + // this->plan1c2r = fftw_plan_many_dft_c2r( 1, &this->nz, this->ns, + // (fftw_complex*) c_gspace, &this->nz, 1, this->nz, + // r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); //--------------------------------------------------------- // 2 D @@ -143,6 +144,7 @@ void FFT :: initplanf() // fftwf_plan_many_dft(int rank, const int *n, int howmany, // fftw_complex *in, const int *inembed, int istride, int idist, // fftw_complex *out, const int *onembed, int ostride, int odist, int sign, unsigned flags); + this->planf1for = fftwf_plan_many_dft( 1, &this->nz, this->ns, (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, FFTW_FORWARD, FFTW_MEASURE); @@ -151,13 +153,13 @@ void FFT :: initplanf() (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, FFTW_BACKWARD, FFTW_MEASURE); - this->planf1r2c = fftwf_plan_many_dft_r2c( 1, &this->nz, this->ns, - r_gspace, &this->nz, 1, this->nz, - (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + // this->planf1r2c = fftwf_plan_many_dft_r2c( 1, &this->nz, this->ns, + // r_gspace, &this->nz, 1, this->nz, + // (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); - this->planf1c2r = fftwf_plan_many_dft_c2r( 1, &this->nz, this->ns, - (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, - r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); + // this->planf1c2r = fftwf_plan_many_dft_c2r( 1, &this->nz, this->ns, + // (fftwf_complex*)c_gspace, &this->nz, 1, this->nz, + // r_gspace, &this->nz, 1, this->nz, FFTW_MEASURE); //--------------------------------------------------------- // 2 D @@ -200,8 +202,8 @@ void FFT:: cleanFFT() if(destroyp==true) return; fftw_destroy_plan(plan1for); fftw_destroy_plan(plan1bac); - fftw_destroy_plan(plan1r2c); - fftw_destroy_plan(plan1c2r); + // fftw_destroy_plan(plan1r2c); + // fftw_destroy_plan(plan1c2r); fftw_destroy_plan(plan2for); fftw_destroy_plan(plan2bac); fftw_destroy_plan(plan2r2c); @@ -212,8 +214,8 @@ void FFT:: cleanFFT() if(destroypf==true) return; fftw_destroy_plan(planf1for); fftw_destroy_plan(planf1bac); - fftw_destroy_plan(planf1r2c); - fftw_destroy_plan(planf1c2r); + // fftw_destroy_plan(planf1r2c); + // fftw_destroy_plan(planf1c2r); fftw_destroy_plan(planf2for); fftw_destroy_plan(planf2bac); fftw_destroy_plan(planf2r2c); @@ -234,12 +236,12 @@ void executefftw(string instr); fftw_execute_dft(this->plan1bac); else if(instr == "2bac") fftw_execute_dft(this->plan2bac); - else if(instr == "1r2c") - fftw_execute_dft(this->plan1r2c); + // else if(instr == "1r2c") + // fftw_execute_dft(this->plan1r2c); else if(instr == "2r2c") fftw_execute_dft(this->plan2r2c); - else if(instr == "1c2r") - fftw_execute_dft(this->plan1c2r); + // else if(instr == "1c2r") + // fftw_execute_dft(this->plan1c2r); else if(instr == "2c2r") fftw_execute_dft(this->plan2c2r); else @@ -259,12 +261,12 @@ void executefftwf(string instr); fftwf_execute_dft(this->planf1bac); else if(instr == "2bac") fftwf_execute_dft(this->planf2bac); - else if(instr == "1r2c") - fftwf_execute_dft(this->planf1r2c); + // else if(instr == "1r2c") + // fftwf_execute_dft(this->planf1r2c); else if(instr == "2r2c") fftwf_execute_dft(this->planf2r2c); - else if(instr == "1c2r") - fftwf_execute_dft(this->planf1c2r); + // else if(instr == "1c2r") + // fftwf_execute_dft(this->planf1c2r); else if(instr == "2c2r") fftwf_execute_dft(this->planf2c2r); else diff --git a/source/module_pw/fft.h b/source/module_pw/fft.h index cbff60a1d9..a24e64a19d 100644 --- a/source/module_pw/fft.h +++ b/source/module_pw/fft.h @@ -62,8 +62,8 @@ class FFT private: bool destroyp; - fftw_plan plan1_r2c; - fftw_plan plan1_c2r; + //fftw_plan plan1_r2c; + //fftw_plan plan1_c2r; fftw_plan plan2_r2c; fftw_plan plan2_c2r; fftw_plan plan1_for; @@ -72,8 +72,8 @@ class FFT fftw_plan plan2_bac; #ifdef __MIX_PRECISION bool destroypf; - fftwf_plan planf1_r2c; - fftwf_plan planf1_c2r; + //fftwf_plan planf1_r2c; + //fftwf_plan planf1_c2r; fftwf_plan planf2_r2c; fftwf_plan planf2_c2r; fftwf_plan planf1_for; diff --git a/source/module_pw/pw_convert.cpp b/source/module_pw/pw_transform.cpp similarity index 95% rename from source/module_pw/pw_convert.cpp rename to source/module_pw/pw_transform.cpp index 2111a989c4..00fe8b9498 100644 --- a/source/module_pw/pw_convert.cpp +++ b/source/module_pw/pw_transform.cpp @@ -74,7 +74,7 @@ void PW_Basis:: recip2real(complex * in, complex * out) for(int ir = 0 ; ir < this->nrxx ; ++ir) { - out[ir] = this->ft.c_rspace[ir]; + out[ir] = this->ft.c_rspace[ir] / this->nxyz; } return; } @@ -102,7 +102,7 @@ void PW_Basis:: recip2real(complex * in, double * out) for(int ir = 0 ; ir < this->nrxx ; ++ir) { - out[ir] = this->ft.r_rspace[ir]; + out[ir] = this->ft.r_rspace[ir] / this->nxyz; } return; } \ No newline at end of file From 17a924d8daad2f85277c1659191091115de7635d Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Fri, 12 Nov 2021 15:13:44 +0800 Subject: [PATCH 062/478] Add serial line in pw_distributiong.cpp --- source/module_pw/pw_distributeg.cpp | 38 ++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/source/module_pw/pw_distributeg.cpp b/source/module_pw/pw_distributeg.cpp index bc0884b307..97a8fd9f75 100644 --- a/source/module_pw/pw_distributeg.cpp +++ b/source/module_pw/pw_distributeg.cpp @@ -3,7 +3,7 @@ // //distribute plane waves to different cores //Known: G, GT, GGT, nx, ny, nz, poolnproc, poolrank, ggecut -//output: ig2isz[ig], istot2ixy[is], ixy2istot[ixy], is2ixy[is], ixy2ip[ixy], startnsz_per[ip], nstnz_per[ip], gg[ig], gcar[ig], gdirect[ig], nst +//output: ig2isz[ig], istot2ixy[is], ixy2istot[ixy], is2ixy[is], ixy2ip[ixy], startnsz_per[ip], nstnz_per[ip], gg[ig], gcar[ig], gdirect[ig], nst, nstot // void PW_Basis::distribute_g() { @@ -55,6 +55,7 @@ void PW_Basis::distribution_method1() ModuleBase::GlobalFunc::ZEROS(st_bottom2D, nxy); this->count_pw_st(tot_npw, tot_nst, st_length2D, st_bottom2D); + this->nstot = tot_nst; // (2) Collect all planewaves and the x, y indexs, length, bottom of the sticks. double *gg_global = new double[tot_npw]; // the modulus of all planewaves. @@ -69,6 +70,8 @@ void PW_Basis::distribution_method1() delete[] st_length2D; delete[] st_bottom2D; +#ifdef __MPI + // Parallel line // (3) Distribute sticks to cores. int *npw_per = new int[this->poolnproc]; // number of planewaves on each core. int *nst_per = new int[this->poolnproc]; // number of sticks on each core. @@ -149,9 +152,41 @@ void PW_Basis::distribution_method1() delete[] gdirect2D; delete[] npw_per; delete[] nst_per; +#else + // Serial line + this->npw = tot_npw; + this->nst = tot_nst; + this->gg = gg_global; + this->gdirect = gdirect_global; + delete[] gg_global; + delete[] gdirect_global; + + this->nstnz_per = new int[1]{0}; + this->startnsz_per = new int[1]{0}; + + this->ixy2istot = new int[nxy]; + this->istot2ixy = new int[tot_nst]; + this->ixy2ip = new int[nxy]; // ip of core which contains stick on (x, y). + for (int i = 0; i < nxy; i++) + { + ixy2istot[i] = -1; + ixy2ip[i] = -1; + } + for (int is = 0; is < tot_nst; is++) + { + int index = st_i[is] + st_j[is] * nx; + ixy2istot[index] = is; + istot2ixy[is] = index; + ixy2ip[index] = 0; + } + + is2ip = new int[tot_nst]; + ModuleBase::GlobalFunc::ZEROS(is2ip, tot_nst); +#endif } else { +#ifdef __MPI MPI_Status ierror; // MPI_Recv(&tot_npw, 1, MPI_INT, 0, 0, POOL_WORLD, &ierror); // MPI_Recv(&tot_nst, 1, MPI_INT, 0, 0, POOL_WORLD, &ierror); @@ -172,6 +207,7 @@ void PW_Basis::distribution_method1() // MPI_Recv(&ixy2ip, nxy, MPI_INT, 0, 0, POOL_WORLD, &ierror); // MPI_Recv(&istot2ixy, tot_nst, MPI_INT, 0, 0, POOL_WORLD, &ierror); // MPI_Recv(&ixy2istot, nxy, MPI_INT, 0, 0, POOL_WORLD, &ierror); +#endif } this->gcar = new ModuleBase::Vector3[this->npw]; From 0711c144bf198f514c4b455887341d747a612140 Mon Sep 17 00:00:00 2001 From: sunliang98 <1700011430@pku.edu.cn> Date: Fri, 12 Nov 2021 15:53:47 +0800 Subject: [PATCH 063/478] Add nstnz to pw_basis.h and pw_distributeg.cpp --- source/module_pw/pw_basis.h | 1 + source/module_pw/pw_distributeg.cpp | 2 ++ 2 files changed, 3 insertions(+) diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 0be1b47e65..5c6b889279 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -56,6 +56,7 @@ class PW_Basis int *is2ixy; // is2ixy[is]: ix + iy * nx of is^th stick among sticks on current proc. int *ixy2ip; // ixy2ip[ix + iy * nx]: ip of proc which contains stick on (ix, iy). int nst; //num. of sticks in current proc. + int nstnz; // nst * nz int nstot; //num. of sticks in total. int npw; //num. of plane waves in current proc. //real space diff --git a/source/module_pw/pw_distributeg.cpp b/source/module_pw/pw_distributeg.cpp index 97a8fd9f75..d538a36790 100644 --- a/source/module_pw/pw_distributeg.cpp +++ b/source/module_pw/pw_distributeg.cpp @@ -209,6 +209,8 @@ void PW_Basis::distribution_method1() // MPI_Recv(&ixy2istot, nxy, MPI_INT, 0, 0, POOL_WORLD, &ierror); #endif } + + this->nstnz = this->nst * this->nz; this->gcar = new ModuleBase::Vector3[this->npw]; for (int i = 0; i < this->npw; i++) From 1323aa4fe8ed51b5f11f2491792844eb2100ea15 Mon Sep 17 00:00:00 2001 From: YuLiu98 Date: Fri, 12 Nov 2021 15:53:48 +0800 Subject: [PATCH 064/478] update some functions in MD --- source/module_base/constants.h | 2 +- source/module_md/MD_basic.cpp | 78 ++++++++++++++--------------- source/module_md/MD_basic.h | 3 +- source/module_md/MD_func.cpp | 3 +- source/module_md/MD_func.h | 30 +++++------ source/module_md/run_md_classic.cpp | 12 +---- source/module_md/run_md_classic.h | 1 - 7 files changed, 56 insertions(+), 73 deletions(-) diff --git a/source/module_base/constants.h b/source/module_base/constants.h index d863028e56..86e10f44e6 100644 --- a/source/module_base/constants.h +++ b/source/module_base/constants.h @@ -72,7 +72,7 @@ const double ANGSTROM_AU = 1.8897270; // au //const double AU_TERAHERTZ = 2.418e-5; // THz //const double TERAHERTZ = 2.418e-5; // from au to THz //const double AU_SEC = 2.4189e-17; // sec -//const double AU_PS = 2.4189e-5; // sec +const double AU_to_FS = 2.418884326505e-2; // from a.u. to fs //const double rhothr = 1.0e-5; // tolerance //const double gsmall = 1.0e-12; const double e2 = 2.0; // the square of the electron charge diff --git a/source/module_md/MD_basic.cpp b/source/module_md/MD_basic.cpp index 7e2da0f094..2c178aa677 100644 --- a/source/module_md/MD_basic.cpp +++ b/source/module_md/MD_basic.cpp @@ -4,13 +4,11 @@ //define in MD_basic.h //class MD_basic -const double MD_basic::fundamentalTime = 2.418884326505e-17; - MD_basic::MD_basic(MD_parameters& MD_para_in, UnitCell_pseudo &unit_in): mdp(MD_para_in), ucell(unit_in) { - mdp.dt=mdp.dt/fundamentalTime/1e15; + mdp.dt=mdp.dt/ModuleBase::AU_to_FS; temperature_=mdp.tfirst/ModuleBase::Hartree_to_K; @@ -31,8 +29,8 @@ MD_basic::MD_basic(MD_parameters& MD_para_in, UnitCell_pseudo &unit_in): allmass=new double[ucell.nat]; ionmbl=new ModuleBase::Vector3[ucell.nat]; - frozen_freedom_ = mdf.getMassMbl(ucell, mdp, allmass, ionmbl); - mdf.InitVel(ucell, temperature_, allmass, frozen_freedom_, ionmbl, vel); + frozen_freedom_ = MD_func::getMassMbl(ucell, mdp, allmass, ionmbl); + MD_func::InitVel(ucell, temperature_, allmass, frozen_freedom_, ionmbl, vel); // if (ucell.set_vel) // Yuanbo Li 2021-08-01 // { // int iat=0; //initialize velocity of atoms from STRU liuyu 2021-07-14 @@ -48,31 +46,31 @@ MD_basic::MD_basic(MD_parameters& MD_para_in, UnitCell_pseudo &unit_in): // } // else // { - // mdf.InitVelocity(ucell.nat, temperature_, fundamentalTime, allmass, vel); + // MD_func::InitVelocity(ucell.nat, temperature_, fundamentalTime, allmass, vel); // } //MD starting setup if(mdp.rstMD) { - if(!mdf.RestartMD(ucell.nat, vel, step_rst_)) + if(!MD_func::RestartMD(ucell.nat, vel, step_rst_)) { std::cout<<"error in restart MD!"< * //the real MD step //change target temperature -// if (step_!=1)mdf.ReadNewTemp( step_ ); +// if (step_!=1)MD_func::ReadNewTemp( step_ ); std::cout << " ------------------------------------------------------------" << std::endl; std::cout << " Target temperature : " << temperature_*ModuleBase::Hartree_to_K << " (K)"<< std::endl; @@ -154,11 +152,11 @@ void MD_basic::runNVT(int step1, double potential, ModuleBase::Vector3 * if(ionmbl[k].y==0)vel[k].y=0; if(ionmbl[k].z==0)vel[k].z=0; } - mdf.scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass); + MD_func::scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass); } // get the kinetic energy - double twiceKE = mdf.GetAtomKE(ucell.nat, vel, allmass); + double twiceKE = MD_func::GetAtomKE(ucell.nat, vel, allmass); twiceKE = twiceKE * 2; //print total stress + stress_MD @@ -172,7 +170,7 @@ void MD_basic::runNVT(int step1, double potential, ModuleBase::Vector3 * if(ionmbl[k].y==0)force[k].y=0; if(ionmbl[k].z==0)force[k].z=0; } - double maxForce = mdf.MAXVALF(ucell.nat, force); + double maxForce = MD_func::MAXVALF(ucell.nat, force); energy_=potential; @@ -208,14 +206,14 @@ void MD_basic::runNVT(int step1, double potential, ModuleBase::Vector3 * temperature_, frozen_freedom_); } - else hamiltonian = mdf.Conserved(twiceKE/2, energy_, 3*ucell.nat-frozen_freedom_); + else hamiltonian = MD_func::Conserved(twiceKE/2, energy_, 3*ucell.nat-frozen_freedom_); this->update_half_velocity(force); } else { this->update_half_velocity(force); - twiceKE=mdf.GetAtomKE(ucell.nat, vel, allmass); + twiceKE=MD_func::GetAtomKE(ucell.nat, vel, allmass); twiceKE = 2 * twiceKE; if(mdp.NVT_control==1) { @@ -225,19 +223,19 @@ void MD_basic::runNVT(int step1, double potential, ModuleBase::Vector3 * temperature_, frozen_freedom_); } - else hamiltonian = mdf.Conserved(twiceKE/2, energy_, ucell.nat-frozen_freedom_); + else hamiltonian = MD_func::Conserved(twiceKE/2, energy_, ucell.nat-frozen_freedom_); //Note: side scheme position before //Now turn to middle scheme. this->update_half_velocity(force); } // Update the Non-Wrapped cartesion coordinates - if(mdp.mdtype==2) mdf.scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass);//choose velocity scaling method + if(mdp.mdtype==2) MD_func::scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass);//choose velocity scaling method update_half_direct(1); mdt.Integrator(mdp.NVT_control, temperature_, vel, allmass);//thermostat interact with velocity - twiceKE=mdf.GetAtomKE(ucell.nat, vel, allmass); + twiceKE=MD_func::GetAtomKE(ucell.nat, vel, allmass); twiceKE = 2 * twiceKE; update_half_direct(0); @@ -267,7 +265,7 @@ void MD_basic::runNVT(int step1, double potential, ModuleBase::Vector3 * } oldEtot_=energy_; //output basic restart info - mdf.mdRestartOut(step_, mdp.recordFreq, ucell.nat, vel); + MD_func::mdRestartOut(step_, mdp.recordFreq, ucell.nat, vel); //output NHC thermo restart info if(mdp.NVT_control==1) mdt.NHC_info_out(step_, mdp.recordFreq, ucell.nat); @@ -308,10 +306,10 @@ void MD_basic::runNVE(int step1, double potential, ModuleBase::Vector3 * } if (ucell.set_vel==false) // Yuanbo Li 2021/8/20 { - mdf.scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass); + MD_func::scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass); } } - double twiceKE=mdf.GetAtomKE(ucell.nat, vel, allmass); + double twiceKE=MD_func::GetAtomKE(ucell.nat, vel, allmass); twiceKE = twiceKE * 2; double tempNow = twiceKE/(double(3*ucell.nat-frozen_freedom_))/ModuleBase::K_BOLTZMAN_AU; @@ -330,12 +328,12 @@ void MD_basic::runNVE(int step1, double potential, ModuleBase::Vector3 * } //std::cout<<"begin maxForce"< * this->update_half_velocity(force); // (2) 2nd step of Verlet-Velocity // Update the Non-Wrapped cartesion coordinate - twiceKE = mdf.GetAtomKE(ucell.nat, vel, allmass); + twiceKE = MD_func::GetAtomKE(ucell.nat, vel, allmass); twiceKE = 2 * twiceKE; if(step_!=1||mdp.rstMD==1)this->update_half_velocity(force); update_half_direct(1); @@ -369,7 +367,7 @@ void MD_basic::runNVE(int step1, double potential, ModuleBase::Vector3 * // calculate the conserved quantity during MD - double hamiltonian = mdf.Conserved(twiceKE/2, energy_, 3*ucell.nat-frozen_freedom_); + double hamiltonian = MD_func::Conserved(twiceKE/2, energy_, 3*ucell.nat-frozen_freedom_); //std::cout<< std::setprecision (9)< * std::cout << " ------------------------------------------------------------" << std::endl; oldEtot_=energy_; - mdf.mdRestartOut(step_, mdp.recordFreq, ucell.nat, vel); + MD_func::mdRestartOut(step_, mdp.recordFreq, ucell.nat, vel); //std::cout<<"(NVE): this step finished."< if(ionmbl[k].z==0)vel[k].z=0; } // if(frozen_freedom_==0)RemoveMovementOfCenterOfMass(); - mdf.scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass); + MD_func::scalevel(ucell.nat, frozen_freedom_, temperature_, vel, allmass); } - double twiceKE=mdf.GetAtomKE(ucell.nat, vel, allmass); + double twiceKE=MD_func::GetAtomKE(ucell.nat, vel, allmass); twiceKE = twiceKE * 2; double tempNow = twiceKE/(double(3*ucell.nat-frozen_freedom_))/ModuleBase::K_BOLTZMAN_AU; @@ -457,12 +455,12 @@ bool MD_basic::runFIRE(int step1, double potential, ModuleBase::Vector3 } //std::cout<<"begin maxForce"< // (2) 2nd step of Verlet-Velocity // Update the Non-Wrapped cartesion coordinate - twiceKE = mdf.GetAtomKE(ucell.nat, vel, allmass); + twiceKE = MD_func::GetAtomKE(ucell.nat, vel, allmass); twiceKE = 2 * twiceKE; if(step_!=1)this->update_half_velocity(force); @@ -535,7 +533,7 @@ bool MD_basic::runFIRE(int step1, double potential, ModuleBase::Vector3 save_output_position(); maxStep = sqrt(maxStep)*mdp.dt; - double hamiltonian = mdf.Conserved(twiceKE/2, energy_, 3 * ucell.nat - frozen_freedom_); + double hamiltonian = MD_func::Conserved(twiceKE/2, energy_, 3 * ucell.nat - frozen_freedom_); // Output the message to the screen. if (!GlobalV::MY_RANK) @@ -600,9 +598,9 @@ void MD_basic::update_half_direct(const bool is_restart) void MD_basic::save_output_position() { std::string posOutName("md_pos_"); - posOutName=mdf.intTurnTostring(step_,posOutName); + posOutName=MD_func::intTurnTostring(step_,posOutName); ucell.update_pos_taud(tauDirectChange); - mdf.printpos(posOutName, step_, mdp.recordFreq, ucell); + MD_func::printpos(posOutName, step_, mdp.recordFreq, ucell); } int MD_basic::getRealStep() diff --git a/source/module_md/MD_basic.h b/source/module_md/MD_basic.h index 672a739a1d..3811d7574b 100644 --- a/source/module_md/MD_basic.h +++ b/source/module_md/MD_basic.h @@ -21,14 +21,13 @@ class MD_basic int getRealStep(); private: - MD_func mdf; + //MD_func mdf; MD_thermo mdt; MD_parameters &mdp; UnitCell_pseudo &ucell; MD_fire fire; double temperature_; - const static double fundamentalTime; int outputstressperiod_; int step_rst_; int step_; diff --git a/source/module_md/MD_func.cpp b/source/module_md/MD_func.cpp index 6c6ec2b43f..d00fc98587 100644 --- a/source/module_md/MD_func.cpp +++ b/source/module_md/MD_func.cpp @@ -222,6 +222,7 @@ void MD_func::InitVel( } } +/* void MD_func::InitVelocity( const int& numIon, const double& temperature, @@ -284,7 +285,7 @@ void MD_func::InitVelocity( MPI_Bcast(vel,numIon*3,MPI_DOUBLE,0,MPI_COMM_WORLD); #endif return; -} +}*/ /*void MD_func::ReadNewTemp(int step ) { diff --git a/source/module_md/MD_func.h b/source/module_md/MD_func.h index 3d89f5e0ef..11f0043c70 100644 --- a/source/module_md/MD_func.h +++ b/source/module_md/MD_func.h @@ -11,17 +11,11 @@ class MD_func MD_func(){}; ~MD_func(){}; - bool RestartMD(const int& numIon, ModuleBase::Vector3* vel, int& step_rst); - void mdRestartOut(const int& step, const int& recordFreq, const int& numIon, ModuleBase::Vector3* vel); - double GetAtomKE(const int& numIon, const ModuleBase::Vector3* vel, const double* allmass); - void InitVelocity( - const int& numIon, - const double& temperature, - const double& fundamentalTime, - const double* allmass, - ModuleBase::Vector3* vel); + static bool RestartMD(const int& numIon, ModuleBase::Vector3* vel, int& step_rst); + static void mdRestartOut(const int& step, const int& recordFreq, const int& numIon, ModuleBase::Vector3* vel); + static double GetAtomKE(const int& numIon, const ModuleBase::Vector3* vel, const double* allmass); - void InitVel( + static void InitVel( const UnitCell_pseudo &unit_in, const double& temperature, double* allmass, @@ -29,11 +23,11 @@ class MD_func ModuleBase::Vector3* ionmbl, ModuleBase::Vector3* vel); - void ReadVel( + static void ReadVel( const UnitCell_pseudo &unit_in, ModuleBase::Vector3* vel); - void RandomVel( + static void RandomVel( const int& numIon, const double& temperature, const double* allmass, @@ -42,19 +36,19 @@ class MD_func ModuleBase::Vector3* vel); // void ReadNewTemp(int step); - std::string intTurnTostring(long int iter,std::string path); - int getMassMbl(const UnitCell_pseudo &unit_in, + static std::string intTurnTostring(long int iter,std::string path); + static int getMassMbl(const UnitCell_pseudo &unit_in, const MD_parameters &mdp, double* allmass, ModuleBase::Vector3* ionmbl); - void printpos(const std::string& file, const int& iter, const int& recordFreq, const UnitCell_pseudo& unit_in); - void scalevel( + static void printpos(const std::string& file, const int& iter, const int& recordFreq, const UnitCell_pseudo& unit_in); + static void scalevel( const int& numIon, const int& nfrozen, const double& temperature, ModuleBase::Vector3* vel, const double* allmass); - double MAXVALF(const int numIon, const ModuleBase::Vector3* force); - double Conserved(const double KE, const double PE, const int number); + static double MAXVALF(const int numIon, const ModuleBase::Vector3* force); + static double Conserved(const double KE, const double PE, const int number); }; #endif diff --git a/source/module_md/run_md_classic.cpp b/source/module_md/run_md_classic.cpp index c55d2555c5..5f24eae764 100644 --- a/source/module_md/run_md_classic.cpp +++ b/source/module_md/run_md_classic.cpp @@ -32,7 +32,8 @@ void Run_MD_CLASSIC::classic_md_line(void) #endif ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "SETUP UNITCELL"); - this->md_allocate_ions(); + delete[] this->force; + this->force = new ModuleBase::Vector3[ucell_c.nat]; MD_basic mdb(INPUT.mdp, ucell_c); int mdtype = INPUT.mdp.mdtype; @@ -153,12 +154,3 @@ void Run_MD_CLASSIC::md_force_stress(double &potential) ModuleBase::timer::tick("Run_MD_CLASSIC", "md_force_stress"); } - - -void Run_MD_CLASSIC::md_allocate_ions(void) -{ - int pos_dim = ucell_c.nat * 3; - - delete[] this->force; - this->force = new ModuleBase::Vector3[ucell_c.nat]; -} diff --git a/source/module_md/run_md_classic.h b/source/module_md/run_md_classic.h index cdbb1648e9..345ab5fddb 100644 --- a/source/module_md/run_md_classic.h +++ b/source/module_md/run_md_classic.h @@ -15,7 +15,6 @@ class Run_MD_CLASSIC void classic_md_line(void); void md_force_stress(double &potential); - void md_allocate_ions(void); ModuleBase::Vector3 *force; //force of each atom ModuleBase::matrix stress; //stress for this lattice From 23ef4807466a3fbf35f7f31dde837fea4f578321 Mon Sep 17 00:00:00 2001 From: qianrui Date: Fri, 12 Nov 2021 16:06:43 +0800 Subject: [PATCH 065/478] files can be compiled --- source/module_pw/Makefile | 91 +++++++++++++++++++++++++++ source/module_pw/Makefile.Objects | 6 -- source/module_pw/fft.h | 17 ++--- source/module_pw/pw_basis.cpp | 6 ++ source/module_pw/pw_basis.h | 25 +++++--- source/module_pw/pw_distributer.cpp | 5 ++ source/module_pw/pw_gatherscatter.cpp | 50 ++++++++------- source/module_pw/pw_init.cpp | 65 +++++++++---------- source/module_pw/pw_transform.cpp | 29 +++++---- source/module_pw/test1.cpp | 6 ++ 10 files changed, 205 insertions(+), 95 deletions(-) create mode 100644 source/module_pw/Makefile delete mode 100644 source/module_pw/Makefile.Objects create mode 100644 source/module_pw/test1.cpp diff --git a/source/module_pw/Makefile b/source/module_pw/Makefile new file mode 100644 index 0000000000..1b5c9c51ec --- /dev/null +++ b/source/module_pw/Makefile @@ -0,0 +1,91 @@ + +#========================== +# Compiler information +#========================== +CPLUSPLUS = icpc +CPLUSPLUS_MPI = mpiicpc +CUDA_COMPILE = nvcc +OBJ_DIR = pw_obj +NP = 12 + +#========================== +# Options +#========================== +#Only MPI +HONG = -D__MPI + +#Mix Precision +#HONG = -D__MIX_PRECISION + +#Cuda +#HONG = -D__MPI -D__CUDA + +#Cuda & Mix Precision +#HONG = -D__MPI -D__CUDA -D__MIX_PRECISION + +#========================== +# Objects +#========================== +VPATH=../src_parallel\ +:../module_base + +PW_OBJS_0=intarray.o\ +matrix.o\ +matrix3.o\ +tool_quit.o\ +parallel_global.o\ +pw_basis.o\ +pw_distributer.o\ +pw_gatherscatter.o\ +pw_init.o\ +pw_transform.o + +PW_OBJS=$(patsubst %.o, ${OBJ_DIR}/%.o, ${PW_OBJS_0}) + +##========================== +## FFTW package needed +##========================== +#Use fftw package +#FFTW_DIR = /home/qianrui/intelcompile/impi_fftw +#FFTW_LIB_DIR = ${FFTW_DIR}/lib +#FFTW_INCLUDE_DIR = ${FFTW_DIR}/lib +#FFTW_LIB = -L${FFTW_LIB_DIR} -lfftw3 -Wl,-rpath=${FFTW_LIB_DIR} + +#Use mkl_fftw +FFTW_INCLUDE_DIR = ${MKLROOT}/include/fftw +FFTW_LIB = -Wl,--start-group -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -Wl,--end-group + + +##========================== +## CUDA needed +##========================== +# CUDA_DIR = /usr/local/cuda-11.0 +# CUDA_INCLUDE_DIR = ${CUDA_DIR}/include +# CUDA_LIB_DIR = ${CUDA_DIR}/lib64 +# CUDA_LIB = -L${CUDA_LIB_DIR} -lcufft -lcublas -lcudart + +LIBS = ${FFTW_LIB} ${CUDA_LIB} +OPTS = -I${FFTW_INCLUDE_DIR} ${HONG} -Ofast -std=c++11 -simd -m64 -qopenmp -Wall -pedantic -g + +#========================== +# MAKING OPTIONS +#========================== +pw : + @ make init + @ make -j $(NP) parallel + +init : + @ if [ ! -d $(OBJ_DIR) ]; then mkdir $(OBJ_DIR); fi + @ if [ ! -d $(OBJ_DIR)/README ]; then echo "This directory contains all of the .o files" > $(OBJ_DIR)/README; fi + +parallel : ${PW_OBJS} + ${CPLUSPLUS_MPI} ${OPTS} test1.cpp ${LIBS} -o test1.exe +# ${CPLUSPLUS_MPI} ${OPTS} $(PW_OBJS) ${OBJ_DIR}/test2.o ${LIBS} -o test2.exe + +${OBJ_DIR}/%.o:%.cpp + ${CPLUSPLUS_MPI} ${OPTS} -c ${HONG} $< -o $@ + +.PHONY:clean +clean: + @ if [ -d $(OBJ_DIR) ]; then rm -rf $(OBJ_DIR); fi + @ if [ -e test1.exe ]; then rm -f test1.exe; fi diff --git a/source/module_pw/Makefile.Objects b/source/module_pw/Makefile.Objects deleted file mode 100644 index 392f0d6622..0000000000 --- a/source/module_pw/Makefile.Objects +++ /dev/null @@ -1,6 +0,0 @@ -OBJ=intarray.o\ -matrix.o\ -matrix3.o\ -vector3.o\ -tool_quit.o\ -parallel_global.o diff --git a/source/module_pw/fft.h b/source/module_pw/fft.h index a24e64a19d..aa8f1035b3 100644 --- a/source/module_pw/fft.h +++ b/source/module_pw/fft.h @@ -2,6 +2,7 @@ #define FFT_H #include +#include #include "fftw3.h" #if defined(__FFTW3_MPI) && defined(__MPI) @@ -17,7 +18,8 @@ #endif #endif - +namespace ModulePW +{ class FFT { @@ -29,9 +31,9 @@ class FFT void setupFFT(); void cleanFFT(); - void executefftw(string instr); + void executefftw(std::string instr); #ifdef __MIX_PRECISION - void executefftwf(string instr); + void executefftwf(std::string instr); #endif private: @@ -48,13 +50,13 @@ class FFT int ns; //number of sticks int nplane; //number of x-y planes bool mpifft; // if use mpi fft, only used when define __FFTW3_MPI - complex * c_gspace; //complex number space for g, [ns * nz] - complex * c_rspace; //complex number space for r, [nplane * nx *ny] + std::complex * c_gspace; //complex number space for g, [ns * nz] + std::complex * c_rspace; //complex number space for r, [nplane * nx *ny] double *r_gspace; //real number space for g, [ns * nz] double *r_rspace; //real number space for r, [nplane * nx *ny] #ifdef __MIX_PRECISION - complex * cf_gspace; //complex number space for g, [ns * nz] - complex * cf_rspace; //complex number space for r, [nplane * nx *ny] + std::complex * cf_gspace; //complex number space for g, [ns * nz] + std::complex * cf_rspace; //complex number space for r, [nplane * nx *ny] float *rf_gspace; //real number space for g, [ns * nz] float *rf_rspace; //real number space for r, [nplane * nx *ny] #endif @@ -83,6 +85,7 @@ class FFT #endif }; +} #endif diff --git a/source/module_pw/pw_basis.cpp b/source/module_pw/pw_basis.cpp index 6b6b523472..feb14ed374 100644 --- a/source/module_pw/pw_basis.cpp +++ b/source/module_pw/pw_basis.cpp @@ -1,5 +1,8 @@ #include "pw_basis.h" +namespace ModulePW +{ + PW_Basis::PW_Basis() { ig2isz = NULL; @@ -17,6 +20,7 @@ PW_Basis::PW_Basis() poolnproc = 1; poolrank = 0; } + PW_Basis:: ~PW_Basis() { if(ig2isz != NULL) delete[] ig2isz; @@ -31,4 +35,6 @@ PW_Basis:: ~PW_Basis() if(gg != NULL) delete[] gg; if(startz != NULL) delete[] startz; if(numz != NULL) delete[] numz; +} + } \ No newline at end of file diff --git a/source/module_pw/pw_basis.h b/source/module_pw/pw_basis.h index 0be1b47e65..2fb000e15b 100644 --- a/source/module_pw/pw_basis.h +++ b/source/module_pw/pw_basis.h @@ -7,6 +7,9 @@ #include #include "fft.h" +namespace ModulePW +{ + // //A class which can convert a function of "r" to the corresponding linear // superposition of plane waves (real space to reciprocal space) @@ -56,12 +59,14 @@ class PW_Basis int *is2ixy; // is2ixy[is]: ix + iy * nx of is^th stick among sticks on current proc. int *ixy2ip; // ixy2ip[ix + iy * nx]: ip of proc which contains stick on (ix, iy). int nst; //num. of sticks in current proc. + int nstnz; int nstot; //num. of sticks in total. int npw; //num. of plane waves in current proc. //real space int nrxx; //num. of real space grids int *startz; //startz[ip]: starting z plane in the ip-th proc. in current POOL_WORLD int *numz; //numz[ip]: num. of z planes in the ip-th proc. in current POOL_WORLD + int nplane; //num. of planes in current proc. ModuleBase::Vector3 *gdirect; //(= *G1d) ; // ig = new Vector igc[ngmc] ModuleBase::Vector3 *gcar; //G vectors in cartesian corrdinate @@ -93,8 +98,6 @@ class PW_Basis int poolrank; - //distribute plane waves to different processors - void distribution_method1(); void count_pw_st( int &tot_npw, // total number of planewaves. int &tot_nst, // total number of sticks. @@ -153,15 +156,15 @@ class PW_Basis int nx, ny, nz, nxyz, nxy; FFT ft; - void real2recip(double * in, complex * out); //in:(nplane,nx*ny) ; out(nz, ns) - void real2recip(complex * in, complex * out); //in:(nplane,nx*ny) ; out(nz, ns) - void recip2real(complex * in, double *out); //in:(nz, ns) ; out(nplane,nx*ny) - void recip2real(complex * in, complex * out); //in:(nz, ns) ; out(nplane,nx*ny) + void real2recip(double * in, std::complex * out); //in:(nplane,nx*ny) ; out(nz, ns) + void real2recip(std::complex * in, std::complex * out); //in:(nplane,nx*ny) ; out(nz, ns) + void recip2real(std::complex * in, double *out); //in:(nz, ns) ; out(nplane,nx*ny) + void recip2real(std::complex * in, std::complex * out); //in:(nz, ns) ; out(nplane,nx*ny) - void gatherp_scatters(complex *in, complex *out); //gather planes and scatter sticks of all processors - void gathers_scatterp(complex *in, complex *out); //gather sticks of and scatter planes of all processors - void gatherp_scatters_gamma(complex *in, complex *out); //gather planes and scatter sticks of all processors, used when gamma_only - void gathers_scatterp_gamma(complex *in, complex *out); //gather sticks of and scatter planes of all processors, used when gamma only + void gatherp_scatters(std::complex *in, std::complex *out); //gather planes and scatter sticks of all processors + void gathers_scatterp(std::complex *in, std::complex *out); //gather sticks of and scatter planes of all processors + void gatherp_scatters_gamma(std::complex *in, std::complex *out); //gather planes and scatter sticks of all processors, used when gamma_only + void gathers_scatterp_gamma(std::complex *in, std::complex *out); //gather sticks of and scatter planes of all processors, used when gamma only @@ -169,4 +172,6 @@ class PW_Basis }; + +} #endif //PlaneWave class diff --git a/source/module_pw/pw_distributer.cpp b/source/module_pw/pw_distributer.cpp index fb26bc9975..a0ef36b135 100644 --- a/source/module_pw/pw_distributer.cpp +++ b/source/module_pw/pw_distributer.cpp @@ -1,4 +1,6 @@ #include "pw_basis.h" +namespace ModulePW +{ // //distribute real-space grids to different processors //Known: nx, ny, nz, poolnproc, poolrank @@ -14,7 +16,10 @@ void PW_Basis::distribute_r() this->numz[ip] = npz; if(ip < modz) this->numz[ip]++; if(ip < this->poolnproc - 1) this->startz[ip+1] += numz[ip]; + if(ip == this->poolrank) this->nplane = numz[ip]; } this->nrxx = this->numz[this->poolrank]; return; } + +} \ No newline at end of file diff --git a/source/module_pw/pw_gatherscatter.cpp b/source/module_pw/pw_gatherscatter.cpp index 2a9626f922..4f7d40ab26 100644 --- a/source/module_pw/pw_gatherscatter.cpp +++ b/source/module_pw/pw_gatherscatter.cpp @@ -4,13 +4,15 @@ #include "mpi.h" #include "../src_parallel/parallel_global.h" #endif +namespace ModulePW +{ -//in: (nplane,nxy) out:(nz,ns) +//in: (nplane,nxy) out:(nz,nst) void PW_Basis:: gatherp_scatters(complex *in, complex *out) { - if(this->poolnproc == 1) //In this case ns=nstot, nz = nplane, + if(this->poolnproc == 1) //In this case nst=nstot, nz = nplane, { - for(int is = 0 ; is < this->ns ; ++is) + for(int is = 0 ; is < this->nst ; ++is) { int ixy = is2ixy[is]; for(int iz = 0 ; iz < this->nz ; ++iz) @@ -35,20 +37,20 @@ void PW_Basis:: gatherp_scatters(complex *in, complex *out) } //scatter sticks to different processors - MPI_Scatterv(tmp, this->nstnz_per, this->startng_per,mpicomplex,out, - this->nsz,mpicomplex,0, POOL_WORLD); + MPI_Scatterv(tmp, this->nstnz_per, this->startnsz_per,mpicomplex,out, + this->nstnz,mpicomplex,0, POOL_WORLD); delete[] tmp; #endif return; } -//in: (nplane,nxy) out:(nz,ns) +//in: (nplane,nxy) out:(nz,nst) void PW_Basis:: gatherp_scatters_gamma(complex *in, complex *out) { int hx = int ((this->nx + 2)/2); - if(this->poolnproc == 1) //In this case ns=nstot, nz = nplane, + if(this->poolnproc == 1) //In this case nst=nstot, nz = nplane, { - for(int is = 0 ; is < this->ns ; ++is) + for(int is = 0 ; is < this->nst ; ++is) { int ixy = is2ixy[is]; int ix = ixy % this->ny; @@ -76,28 +78,28 @@ void PW_Basis:: gatherp_scatters_gamma(complex *in, complex *out } //scatter sticks to different processors - MPI_Scatterv(tmp, this->nstnz_per, this->startng_per,mpicomplex,out, - this->nsz,mpicomplex,0, POOL_WORLD); + MPI_Scatterv(tmp, this->nstnz_per, this->startnsz_per,mpicomplex,out, + this->nstnz,mpicomplex,0, POOL_WORLD); delete[] tmp; #endif return; } -//in: (nz,ns) out:(nplane,nxy) +//in: (nz,nst) out:(nplane,nxy) void PW_Basis:: gathers_scatterp(complex *in, complex *out) { - if(this->poolnproc == 1) //In this case nrxx=nx*ny*nz, ns = nstot, + if(this->poolnproc == 1) //In this case nrxx=nx*ny*nz, nst = nstot, { for(int ir = 0 ; ir < this->nrxx ; ++ir) { out[ir] = 0.0; } - for(int is = 0 ; is < this->ns ; ++is) + for(int is = 0 ; is < this->nst ; ++is) { int ixy = is2ixy[is]; for(int iz = 0 ; iz < this->nz ; ++iz) { - out[ixy*nz+iz] = this->in[is*nz+iz]; + out[ixy*nz+iz] = in[is*nz+iz]; } } return; @@ -108,31 +110,31 @@ void PW_Basis:: gathers_scatterp(complex *in, complex *out) if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; //scatter sticks to different processors - MPI_Gatherv(in, this->nsz, mpicomplex, tmp, - this->nszip, this->startnsz, mpicomplex, 0, POOL_WORLD); + MPI_Gatherv(in, this->nstnz, mpicomplex, tmp, + this->nstnz_per, this->startnsz_per, mpicomplex, 0, POOL_WORLD); for(int ir = 0 ; ir < this->nrxx ; ++ir) out[ir] = 0.0; for(int istot = 0 ; istot < this->nstot ; ++istot) { int ixy = this->istot2ixy[istot]; MPI_Scatterv(&tmp[istot*this->nz], this->numz,this->startz, mpicomplex, &out[ixy*this->nplane], - mpicomplex,0,POOL_WORLD); + this->nplane,mpicomplex,0,POOL_WORLD); } #endif return; } -//in: (nz,ns) out:(nplane,nxy) +//in: (nz,nst) out:(nplane,nxy) void PW_Basis:: gathers_scatterp_gamma(complex *in, complex *out) { int hx = int ((nx + 2)/2); - if(this->poolnproc == 1) //In this case nrxx=nx*ny*nz, ns = nstot, + if(this->poolnproc == 1) //In this case nrxx=nx*ny*nz, nst = nstot, { for(int ir = 0 ; ir < this->nrxx ; ++ir) { out[ir] = 0.0; } - for(int is = 0 ; is < this->ns ; ++is) + for(int is = 0 ; is < this->nst ; ++is) { int ixy = is2ixy[is]; int ix = ixy % this->ny; @@ -151,16 +153,18 @@ void PW_Basis:: gathers_scatterp_gamma(complex *in, complex *out if(this->poolrank == 0) tmp = new complex [this->nz * this->nstot]; //scatter sticks to different processors - MPI_Gatherv(in, this->nsz, mpicomplex, tmp, - this->nszip, this->startnsz, mpicomplex, 0, POOL_WORLD); + MPI_Gatherv(in, this->nstnz, mpicomplex, tmp, + this->nstnz_per, this->startnsz_per, mpicomplex, 0, POOL_WORLD); for(int ir = 0 ; ir < this->nrxx ; ++ir) out[ir] = 0.0; for(int istot = 0 ; istot < this->nstot ; ++istot) { int ixy = this->istot2ixy[istot]; MPI_Scatterv(&tmp[istot*this->nz], this->numz,this->startz, mpicomplex, &out[ixy*this->nplane], - mpicomplex,0,POOL_WORLD); + this->nplane,mpicomplex,0,POOL_WORLD); } #endif return; } + +} \ No newline at end of file diff --git a/source/module_pw/pw_init.cpp b/source/module_pw/pw_init.cpp index 6ca79255da..3c45a7c2f3 100644 --- a/source/module_pw/pw_init.cpp +++ b/source/module_pw/pw_init.cpp @@ -1,5 +1,7 @@ #include "./pw_basis.h" +namespace ModulePW +{ // //Init the grids for FFT //Input: lattice vectors of the cell, Energy cut off for G^2/2 @@ -49,51 +51,39 @@ void PW_Basis:: initgrids( //int n7 = 0; bool done_factoring = false; - // mohan add 2011-04-22 - int s; - if(i==0) s=bx; - else if(i==1) s=by; - else if(i==2) s=bz; int ns = 0; // increase ibox[i] by 1 until it is totally factorizable by (2,3,5,7) do { ibox[i] += 1; b = ibox[i]; - if( ibox[i] % s != 0) - { - b = -1; // meaning less - } - else - { - //n2 = n3 = n5 = n7 = 0; - n2 = n3 = n5 = ns = 0; - done_factoring = false; - while (!done_factoring) + //n2 = n3 = n5 = n7 = 0; + n2 = n3 = n5 = ns = 0; + done_factoring = false; + while (!done_factoring) + { + if (b % 2 == 0) { - if (b % 2 == 0) - { - n2++; - b /= 2; - continue; - } - if (b % 3 == 0) - { - n3++; - b /= 3; - continue; - } - if (b % 5 == 0) - { - n5++; - b /= 5; - continue; - } - //if (b%7==0) { n7++; b /= 7; continue; } - done_factoring = true; + n2++; + b /= 2; + continue; } - }// + if (b % 3 == 0) + { + n3++; + b /= 3; + continue; + } + if (b % 5 == 0) + { + n5++; + b /= 5; + continue; + } + //if (b%7==0) { n7++; b /= 7; continue; } + done_factoring = true; + } } while (b != 1); // b==1 means fftbox[i] is (2,3,5,7) factorizable @@ -137,7 +127,7 @@ void PW_Basis:: initparameters( double ggecut_in, int poolnproc_in, int poolrank_in, - int distribution_type_in, + int distribution_type_in ) { this->gamma_only = gamma_only_in; @@ -147,3 +137,4 @@ void PW_Basis:: initparameters( this->distribution_type = distribution_type_in; } +} \ No newline at end of file diff --git a/source/module_pw/pw_transform.cpp b/source/module_pw/pw_transform.cpp index 00fe8b9498..a348b43660 100644 --- a/source/module_pw/pw_transform.cpp +++ b/source/module_pw/pw_transform.cpp @@ -3,12 +3,15 @@ #include "pw_basis.h" #include "../module_base/global_function.h" +namespace ModulePW +{ + // //transform real space to reciprocal space //in: (nplane,nx,ny) //out: (nz, ns) // -void PW_Basis:: real2recip(complex * in, complex * out) +void PW_Basis:: real2recip(std::complex * in, std::complex * out) { for(int ir = 0 ; ir < this->nrxx ; ++ir) { @@ -22,7 +25,7 @@ void PW_Basis:: real2recip(complex * in, complex * out) for(int ig = 0 ; ig < this->npw ; ++ig) { - out[ig] = this->ft.c_gspace[this->ig2fft[ig]]; + out[ig] = this->ft.c_gspace[this->ig2isz[ig]]; } return; } @@ -32,7 +35,7 @@ void PW_Basis:: real2recip(complex * in, complex * out) //in: (nplane,nx,ny) //out: (nz, ns) // -void PW_Basis:: real2recip(double * in, complex * out) +void PW_Basis:: real2recip(double * in, std::complex * out) { for(int ir = 0 ; ir < this->nrxx ; ++ir) { @@ -40,13 +43,13 @@ void PW_Basis:: real2recip(double * in, complex * out) } this->ft.executefftw("2r2c"); - this->gatherp_scatters(this->ft.c_rspace, this->ft.c_gspace) + this->gatherp_scatters(this->ft.c_rspace, this->ft.c_gspace); this->ft.executefftw("1for"); for(int ig = 0 ; ig < this->npw ; ++ig) { - out[ig] = this->ft.c_gspace[this->ig2fft[ig]]; + out[ig] = this->ft.c_gspace[this->ig2isz[ig]]; } return; } @@ -56,15 +59,15 @@ void PW_Basis:: real2recip(double * in, complex * out) //in: (nz,ns) //out: (nplane, nx, ny) // -void PW_Basis:: recip2real(complex * in, complex * out) +void PW_Basis:: recip2real(std::complex * in, std::complex * out) { - for(int igg = 0 ; igg < this->ns * this->nz ; ++igg) + for(int igg = 0 ; igg < this->nst * this->nz ; ++igg) { this->ft.c_gspace[igg] = 0.0; } for(int ig = 0 ; ig < this->npw ; ++ig) { - this->ft.c_gspace[this->ig2fft[ig]] = in[ig]; + this->ft.c_gspace[this->ig2isz[ig]] = in[ig]; } this->ft.executefftw("1bac"); @@ -84,19 +87,19 @@ void PW_Basis:: recip2real(complex * in, complex * out) //in: (nz,ns) //out: (nplane, nx, ny) // -void PW_Basis:: recip2real(complex * in, double * out) +void PW_Basis:: recip2real(std::complex * in, double * out) { - for(int igg = 0 ; igg < this->ns * this->nz ; ++igg) + for(int igg = 0 ; igg < this->nst * this->nz ; ++igg) { this->ft.c_gspace[igg] = 0.0; } for(int ig = 0 ; ig < this->npw ; ++ig) { - this->ft.c_gspace[this->ig2fft[ig]] = in[ig]; + this->ft.c_gspace[this->ig2isz[ig]] = in[ig]; } this->ft.executefftw("1bac"); - this->gathers_scatterp(this->ft.c_gspace, this->ft.c_rspace) + this->gathers_scatterp(this->ft.c_gspace, this->ft.c_rspace); this->ft.executefftw("2c2r"); @@ -105,4 +108,6 @@ void PW_Basis:: recip2real(complex * in, double * out) out[ir] = this->ft.r_rspace[ir] / this->nxyz; } return; +} + } \ No newline at end of file diff --git a/source/module_pw/test1.cpp b/source/module_pw/test1.cpp new file mode 100644 index 0000000000..ac2a2985fe --- /dev/null +++ b/source/module_pw/test1.cpp @@ -0,0 +1,6 @@ +#include "pw_basis.h" + +int main() +{ + return 0; +} \ No newline at end of file From ca6aa2dd8da727f3dfe00cb5bc55a4bd68ae0a64 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Nov 2021 14:54:33 +0800 Subject: [PATCH 066/478] deepks : fix a bug on grad_vx --- source/src_lcao/FORCE_STRESS.cpp | 19 ++++-- source/src_lcao/LCAO_descriptor.cpp | 96 +++++++++++++++++++++++++++-- 2 files changed, 104 insertions(+), 11 deletions(-) diff --git a/source/src_lcao/FORCE_STRESS.cpp b/source/src_lcao/FORCE_STRESS.cpp index 7339650b4f..a71b4b23f6 100644 --- a/source/src_lcao/FORCE_STRESS.cpp +++ b/source/src_lcao/FORCE_STRESS.cpp @@ -304,13 +304,19 @@ void Force_Stress_LCAO::getForceStress( #ifdef __DEEPKS //DeePKS force, caoyu add 2021-06-03 - if (GlobalV::out_descriptor && GlobalV::NPROC<=1) //not parallelized yet + if (GlobalV::out_descriptor) //not parallelized yet { - GlobalC::ld.save_npy_f(fcs, "f_tot.npy"); //Ty/Bohr, F_tot + if(GlobalV::MY_RANK==0) + { + GlobalC::ld.save_npy_f(fcs, "f_tot.npy"); //Ty/Bohr, F_tot + } if (GlobalV::deepks_scf) { - GlobalC::ld.save_npy_f(fcs - GlobalC::ld.F_delta, "f_base.npy"); //Ry/Bohr, F_base - if(GlobalV::GAMMA_ONLY_LOCAL) + if(GlobalV::MY_RANK==0) + { + GlobalC::ld.save_npy_f(fcs - GlobalC::ld.F_delta, "f_base.npy"); //Ry/Bohr, F_base + } + if(GlobalV::GAMMA_ONLY_LOCAL && GlobalV::NPROC<=1) { GlobalC::ld.cal_gvx(GlobalC::LOC.wfc_dm_2d.dm_gamma[0]); GlobalC::ld.save_npy_gvx();// /Bohr, grad_vx @@ -319,7 +325,10 @@ void Force_Stress_LCAO::getForceStress( } else { - GlobalC::ld.save_npy_f(fcs, "f_base.npy"); //no scf, F_base=F_tot + if(GlobalV::MY_RANK==0) + { + GlobalC::ld.save_npy_f(fcs, "f_base.npy"); //no scf, F_base=F_tot + } } } diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index ee7c7f23c8..a4f05b254c 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -311,6 +311,11 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) ModuleBase::timer::tick("LCAO_Descriptor","cal_projected_DM"); const int pdm_size = (this->lmaxd * 2 + 1) * (this->lmaxd * 2 + 1); +/* for checking purpose + std::ifstream ifs("dm"); + ModuleBase::matrix dm1(dm.nr,dm.nc); +*/ + if(GlobalV::NPROC>1) { #ifdef __MPI @@ -405,6 +410,20 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) } else //serial; or mpi with nproc=1 { +/* for checking purpose + if(dm.nc>0) + { + for (int mu=0;mu> c; + dm1(mu,nu)=c; + } + } + } +*/ //step 1: get dm: the coefficient of wfc, not charge density //now, dm is an input arg of this func, but needed converting to double* this->getdm_double(dm); @@ -437,6 +456,21 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) delete[] tmp_pdm; } +/* for checking purpose + for(int inl=0;inl> c; + dm1(mu,nu)=c; + } + } +*/ double** ss = this->S_mu_alpha; double** dsx = this->DS_mu_alpha_x; double** dsy = this->DS_mu_alpha_y; @@ -650,20 +699,34 @@ void LCAO_Descriptor::cal_gdmx(const ModuleBase::matrix &dm) if (GlobalV::KS_SOLVER == "genelpa" || GlobalV::KS_SOLVER == "scalapack_gvx") { gdmx[iat][inl][m1*nm + m2] += - 2 * dsx[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; + dsx[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; gdmy[iat][inl][m1*nm + m2] += - 2 * dsy[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; + dsy[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; gdmz[iat][inl][m1*nm + m2] += - 2 * dsz[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; + dsz[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; + + gdmx[iat][inl][m2*nm + m1] += + dsx[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; + gdmy[iat][inl][m2*nm + m1] += + dsy[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; + gdmz[iat][inl][m2*nm + m1] += + dsz[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; } else { gdmx[iat][inl][m1*nm + m2] += - 2 * dsx[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; + dsx[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; gdmy[iat][inl][m1*nm + m2] += - 2 * dsy[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; + dsy[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; gdmz[iat][inl][m1*nm + m2] += - 2 * dsz[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; + dsz[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; + + gdmx[iat][inl][m2*nm + m1] += + dsx[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; + gdmy[iat][inl][m2*nm + m1] += + dsy[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; + gdmz[iat][inl][m2*nm + m1] += + dsz[inl][mu*nm + m1] * dm(mu, nu) * ss[inl][nu*nm + m2]; } } }//end m2 @@ -672,6 +735,27 @@ void LCAO_Descriptor::cal_gdmx(const ModuleBase::matrix &dm) }//end nu }//end mu }//end inl + +/* for checking purpose + GlobalV::ofs_running << "gdmx" << std::endl; + for(int iat=0;iat Date: Wed, 17 Nov 2021 16:08:43 +0800 Subject: [PATCH 067/478] googletest in CMakelist for test --- tests/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f6e04b37ad..ba9336146b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -14,6 +14,7 @@ include(FetchContent) FetchContent_Declare( googletest GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG "origin/main" ) FetchContent_MakeAvailable(googletest) include_directories(${ABACUS_SOURCE_DIR}) From 8eec11431d11f00f011477d4ae5f421c28ad361e Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Nov 2021 17:17:14 +0800 Subject: [PATCH 068/478] deepks : add some comment/rearrange the code a bit to make it more available --- source/src_lcao/LCAO_descriptor.cpp | 301 +++++++++++++++------------- source/src_lcao/LCAO_descriptor.h | 14 +- 2 files changed, 172 insertions(+), 143 deletions(-) diff --git a/source/src_lcao/LCAO_descriptor.cpp b/source/src_lcao/LCAO_descriptor.cpp index a777a010d7..44083232d9 100644 --- a/source/src_lcao/LCAO_descriptor.cpp +++ b/source/src_lcao/LCAO_descriptor.cpp @@ -71,6 +71,9 @@ LCAO_Descriptor::~LCAO_Descriptor() } } +//=============================== +//Part 1. deals with generation of descriptors as well as labels +//=============================== void LCAO_Descriptor::init( const int lm, // max L for descriptor @@ -182,14 +185,15 @@ void LCAO_Descriptor::init_index(void) return; } +//this subroutine calculates the inner product between projectors and atomic basis +// as well as its derivative d/dX +//the former is recorded in array S_mu_alpha; the latter in arrays DS_mu_alpha_x,y,z void LCAO_Descriptor::build_S_descriptor(const bool& calc_deri) { ModuleBase::TITLE("LCAO_Descriptor", "build_S_descriptor"); //array to store data double olm[3] = {0.0, 0.0, 0.0}; - - //\sum{T} e**{ikT} <\phi_{ia}|d\phi_{k\beta}(T)> //??? ModuleBase::Vector3 tau1, tau2, dtau; ModuleBase::Vector3 dtau1, dtau2, tau0; for (int T1 = 0; T1 < GlobalC::ucell.ntype; ++T1) @@ -304,7 +308,8 @@ void LCAO_Descriptor::set_S_mu_alpha( } - +//this subroutine performs the calculation of projected density matrices +//pdm_m,m'=\sum_{mu,nu} rho_{mu,nu} void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_projected_DM"); @@ -475,7 +480,7 @@ void LCAO_Descriptor::cal_projected_DM(const ModuleBase::matrix &dm) return; } - +//the eigenvalues of pdm are descriptors void LCAO_Descriptor::cal_descriptor(void) { ModuleBase::TITLE("LCAO_Descriptor", "cal_descriptor"); @@ -555,7 +560,7 @@ void LCAO_Descriptor::cal_descriptor(void) } - +//for checking purpose void LCAO_Descriptor::print_projected_DM( ofstream& ofs, ModuleBase::ComplexMatrix& des, @@ -652,7 +657,8 @@ void LCAO_Descriptor::getdm_double(const ModuleBase::matrix &dm) return; } - +//this subroutine calculates the gradient of projected density matrices +//gdmx_m,m = d/dX sum_{mu,nu} rho_{mu,nu} void LCAO_Descriptor::cal_gdmx(const ModuleBase::matrix &dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_gdmx"); @@ -698,13 +704,15 @@ void LCAO_Descriptor::cal_gdmx(const ModuleBase::matrix &dm) // save the matrix as column major format if (GlobalV::KS_SOLVER == "genelpa" || GlobalV::KS_SOLVER == "scalapack_gvx") { + //(d/dX) gdmx[iat][inl][m1*nm + m2] += dsx[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; gdmy[iat][inl][m1*nm + m2] += dsy[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; gdmz[iat][inl][m1*nm + m2] += dsz[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; - + + //(d/dX) gdmx[iat][inl][m2*nm + m1] += dsx[inl][m1*GlobalV::NLOCAL + mu] * dm(mu, nu) * ss[inl][m2*GlobalV::NLOCAL + nu]; gdmy[iat][inl][m2*nm + m1] += @@ -804,6 +812,9 @@ void LCAO_Descriptor::del_gdmx(void) return; } +//=============================== +//Part 2. deals with application of correction dV to Hamiltonian and force +//=============================== void LCAO_Descriptor::deepks_pre_scf(const string& model_file) { @@ -1036,7 +1047,7 @@ void LCAO_Descriptor::add_v_delta(void) } else { - ModuleBase::WARNING_QUIT("add_v_delta","not implemented yet."); + ModuleBase::WARNING_QUIT("add_v_delta","should not be used for multi-k; use add_v_delta_k instead"); //call set_HSk, complex Matrix } return; @@ -1152,6 +1163,7 @@ void LCAO_Descriptor::add_v_delta_k(const int &ik) } } +//The hellmann-feynmann term in force void LCAO_Descriptor::cal_f_delta_hf(const ModuleBase::matrix& dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_hf"); @@ -1241,6 +1253,8 @@ void LCAO_Descriptor::cal_f_delta_hf(const ModuleBase::matrix& dm) }//!iat return; } + +//the pulay term in force void LCAO_Descriptor::cal_f_delta_pulay(const ModuleBase::matrix& dm) { ModuleBase::TITLE("LCAO_Descriptor", "cal_f_delta_pulay"); @@ -1266,6 +1280,75 @@ void LCAO_Descriptor::cal_f_delta_pulay(const ModuleBase::matrix& dm) return; } +void LCAO_Descriptor::cal_e_delta_band(const std::vector &dm) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_e_delta_band"); + this->e_delta_band = 0; + for (int i = 0; i < GlobalV::NLOCAL; ++i) + { + for (int j = 0; j < GlobalV::NLOCAL; ++j) + { + const int mu = GlobalC::ParaO.trace_loc_row[j]; + const int nu = GlobalC::ParaO.trace_loc_col[i]; + + if (mu >= 0 && nu >= 0) + { + const int index=nu*GlobalC::ParaO.nrow+mu; + for (int is = 0; is < GlobalV::NSPIN; ++is) + { + this->e_delta_band += dm[is](nu, mu) * this->H_V_delta[index]; + } + } + } + } + Parallel_Reduce::reduce_double_all(this->e_delta_band); + return; +} + +void LCAO_Descriptor::cal_e_delta_band_k(const std::vector &dm) +{ + ModuleBase::TITLE("LCAO_Descriptor", "cal_e_delta_band"); + std::complex e_delta_band_k=std::complex(0.0,0.0); + for (int i = 0; i < GlobalV::NLOCAL; ++i) + { + for (int j = 0; j < GlobalV::NLOCAL; ++j) + { + const int mu = GlobalC::ParaO.trace_loc_row[j]; + const int nu = GlobalC::ParaO.trace_loc_col[i]; + + if (mu >= 0 && nu >= 0) + { + int iic; + if(GlobalV::KS_SOLVER=="genelpa" || GlobalV::KS_SOLVER=="scalapack_gvx") // save the matrix as column major format + { + iic=mu+nu*GlobalC::ParaO.nrow; + } + else + { + iic=mu*GlobalC::ParaO.ncol+nu; + } + for(int ik=0;ikH_V_delta_k[ik][iic]; + } + } + } + } + Parallel_Reduce::reduce_complex_double_all(e_delta_band_k); + if(e_delta_band_k.imag()>1e-12) + { + GlobalV::ofs_running << "e_delta_band_k : " << e_delta_band_k << std::endl; + ModuleBase::WARNING_QUIT("e_delta_band_k","energy should be real!"); + } + this->e_delta_band = e_delta_band_k.real(); + return; +} + +//============================ +//Part 3. deals with io as well as interface with libtorch +//============================ + +//calculates descriptors from projected density matrices void LCAO_Descriptor::cal_descriptor_tensor(void) { ModuleBase::TITLE("LCAO_Descriptor", "cal_descriptor_tensor"); @@ -1311,6 +1394,75 @@ void LCAO_Descriptor::cal_descriptor_tensor(void) return; } +//calculates gradient of descriptors from gradient of projected density matrices +void LCAO_Descriptor::cal_gvx(const ModuleBase::matrix &dm) +{ + ModuleBase::TITLE("LCAO_Descriptor","cal_gvx"); + //preconditions + this->cal_gvdm(); + + this->build_S_descriptor(1); + this->init_gdmx(); + this->cal_gdmx(dm); //checked + + //make gdmx as tensor + int nlmax = this->inlmax/GlobalC::ucell.nat; + for (int nl=0;nl bmmv; + for (int ibt=0;ibt xmmv; + for (int i=0;i<3;++i) + { + std::vector ammv; + for (int iat=0; iatinl_l[inl]+1; + std::vector mmv; + for (int m1=0;m1gdmx[ibt][inl][m1*nm+m2]); + if(i==1) mmv.push_back(this->gdmy[ibt][inl][m1*nm+m2]); + if(i==2) mmv.push_back(this->gdmz[ibt][inl][m1*nm+m2]); + } + }//nm^2 + torch::Tensor mm = torch::tensor(mmv, torch::TensorOptions().dtype(torch::kFloat64) ).reshape({nm, nm}); //nm*nm + ammv.push_back(mm); + } + torch::Tensor amm = torch::stack(ammv, 0); //nat*nm*nm + xmmv.push_back(amm); + } + torch::Tensor bmm = torch::stack(xmmv, 0); //3*nat*nm*nm + bmmv.push_back(bmm); + } + this->gdmr_vector.push_back(torch::stack(bmmv, 0)); //nbt*3*nat*nm*nm + } + assert(this->gdmr_vector.size()==nlmax); + + std::cout<<"gdmr-ok"<gdmr_vector.size()<<" "<gevdm_vector.size()< gvx_vector; + for (int nl = 0;nlbxav", {this->gdmr_vector[nl], this->gevdm_vector[nl]})); + }// + + // cat nv-> \sum_nl(nv) = \sum_nl(nm_nl)=des_per_atom + this->gvx_tensor = torch::cat(gvx_vector, -1); + + assert(this->gvx_tensor.size(0) == GlobalC::ucell.nat); + assert(this->gvx_tensor.size(1) == 3); + assert(this->gvx_tensor.size(2) == GlobalC::ucell.nat); + assert(this->gvx_tensor.size(3) == this->des_per_atom); + + return; +} + void LCAO_Descriptor::load_model(const string& model_file) { ModuleBase::TITLE("LCAO_Descriptor", "load_model"); @@ -1328,6 +1480,7 @@ void LCAO_Descriptor::load_model(const string& model_file) return; } +//obtain from the machine learning model dE_delta/dDescriptor void LCAO_Descriptor::cal_gedm(const ModuleBase::matrix &dm) { //using this->pdm_tensor @@ -1367,6 +1520,7 @@ void LCAO_Descriptor::cal_gedm(const ModuleBase::matrix &dm) return; } +//dE_delta/dDescriptor * dDescriptor / dprojected density matrix void LCAO_Descriptor::cal_gvdm() { ModuleBase::TITLE("LCAO_Descriptor", "cal_gvdm"); @@ -1652,135 +1806,4 @@ void LCAO_Descriptor::save_npy_gvx(void) return; } -void LCAO_Descriptor::cal_e_delta_band(const std::vector &dm) -{ - ModuleBase::TITLE("LCAO_Descriptor", "cal_e_delta_band"); - this->e_delta_band = 0; - for (int i = 0; i < GlobalV::NLOCAL; ++i) - { - for (int j = 0; j < GlobalV::NLOCAL; ++j) - { - const int mu = GlobalC::ParaO.trace_loc_row[j]; - const int nu = GlobalC::ParaO.trace_loc_col[i]; - - if (mu >= 0 && nu >= 0) - { - const int index=nu*GlobalC::ParaO.nrow+mu; - for (int is = 0; is < GlobalV::NSPIN; ++is) - { - this->e_delta_band += dm[is](nu, mu) * this->H_V_delta[index]; - } - } - } - } - Parallel_Reduce::reduce_double_all(this->e_delta_band); - return; -} - -void LCAO_Descriptor::cal_e_delta_band_k(const std::vector &dm) -{ - ModuleBase::TITLE("LCAO_Descriptor", "cal_e_delta_band"); - std::complex e_delta_band_k=std::complex(0.0,0.0); - for (int i = 0; i < GlobalV::NLOCAL; ++i) - { - for (int j = 0; j < GlobalV::NLOCAL; ++j) - { - const int mu = GlobalC::ParaO.trace_loc_row[j]; - const int nu = GlobalC::ParaO.trace_loc_col[i]; - - if (mu >= 0 && nu >= 0) - { - int iic; - if(GlobalV::KS_SOLVER=="genelpa" || GlobalV::KS_SOLVER=="scalapack_gvx") // save the matrix as column major format - { - iic=mu+nu*GlobalC::ParaO.nrow; - } - else - { - iic=mu*GlobalC::ParaO.ncol+nu; - } - for(int ik=0;ikH_V_delta_k[ik][iic]; - } - } - } - } - Parallel_Reduce::reduce_complex_double_all(e_delta_band_k); - if(e_delta_band_k.imag()>1e-12) - { - GlobalV::ofs_running << "e_delta_band_k : " << e_delta_band_k << std::endl; - ModuleBase::WARNING_QUIT("e_delta_band_k","energy should be real!"); - } - this->e_delta_band = e_delta_band_k.real(); - return; -} - -void LCAO_Descriptor::cal_gvx(const ModuleBase::matrix &dm) -{ - ModuleBase::TITLE("LCAO_Descriptor","cal_gvx"); - //preconditions - this->cal_gvdm(); - - this->build_S_descriptor(1); - this->init_gdmx(); - this->cal_gdmx(dm); //checked - - //make gdmx as tensor - int nlmax = this->inlmax/GlobalC::ucell.nat; - for (int nl=0;nl bmmv; - for (int ibt=0;ibt xmmv; - for (int i=0;i<3;++i) - { - std::vector ammv; - for (int iat=0; iatinl_l[inl]+1; - std::vector mmv; - for (int m1=0;m1gdmx[ibt][inl][m1*nm+m2]); - if(i==1) mmv.push_back(this->gdmy[ibt][inl][m1*nm+m2]); - if(i==2) mmv.push_back(this->gdmz[ibt][inl][m1*nm+m2]); - } - }//nm^2 - torch::Tensor mm = torch::tensor(mmv, torch::TensorOptions().dtype(torch::kFloat64) ).reshape({nm, nm}); //nm*nm - ammv.push_back(mm); - } - torch::Tensor amm = torch::stack(ammv, 0); //nat*nm*nm - xmmv.push_back(amm); - } - torch::Tensor bmm = torch::stack(xmmv, 0); //3*nat*nm*nm - bmmv.push_back(bmm); - } - this->gdmr_vector.push_back(torch::stack(bmmv, 0)); //nbt*3*nat*nm*nm - } - assert(this->gdmr_vector.size()==nlmax); - - std::cout<<"gdmr-ok"<gdmr_vector.size()<<" "<gevdm_vector.size()< gvx_vector; - for (int nl = 0;nlbxav", {this->gdmr_vector[nl], this->gevdm_vector[nl]})); - }// - - // cat nv-> \sum_nl(nv) = \sum_nl(nm_nl)=des_per_atom - this->gvx_tensor = torch::cat(gvx_vector, -1); - - assert(this->gvx_tensor.size(0) == GlobalC::ucell.nat); - assert(this->gvx_tensor.size(1) == 3); - assert(this->gvx_tensor.size(2) == GlobalC::ucell.nat); - assert(this->gvx_tensor.size(3) == this->des_per_atom); - - return; -} #endif diff --git a/source/src_lcao/LCAO_descriptor.h b/source/src_lcao/LCAO_descriptor.h index 862d2f771d..c50e00c7d2 100644 --- a/source/src_lcao/LCAO_descriptor.h +++ b/source/src_lcao/LCAO_descriptor.h @@ -24,14 +24,21 @@ #include "../src_parallel/parallel_deepks.h" #endif /// -/// This class computes the descriptors for each atom from LCAO basis set, -/// interfaces with pytorch to obtain the correction potential in LCAO basis, -/// and computes the forces according to the correction potential. +/// This class contains subroutines for realization of the DeePKS method +/// In essential, it is a machine-learned correction term to the XC potential +/// in the form of delta_V=|alpha> V(D) +/// and then descriptors D=eig(pdm) +/// as well as their gradients with regard to atomic position, dD/dX +/// 2. loading the model, which requires interfaces with pytorch +/// 3. apply the correction potential, delta_V, in Kohn-Sham Hamiltonian and calculation of force, stress /// /// For details of DeePKS method, you can refer to [DeePKS paper](https://pubs.acs.org/doi/10.1021/acs.jctc.0c00872). /// // // caoyu add 2021-03-29 +// wenfei modified 2021-11-17 // class LCAO_Descriptor { @@ -59,7 +66,6 @@ class LCAO_Descriptor /// 3. If FORCE, initialize the matrces for force void deepks_pre_scf(const std::string& model_file/**< [in] path of a traced model file, provided by deepks-kit*/); - //S_alpha_mu * DM * S_nu_beta ///calculate projected density matrix: ///\f[D^ I_{ nlmm'} = \sum_{i}\sum_{\mu, \nu}\langle\alpha^I_{nlm}|\phi_\mu\rangle c_{i,\mu}c_{i,\nu} \langle\phi_\nu|\alpha^I_{nlm' }\rangle\f] From eb7399d4ccbed956259eb9dab95b28000b890b18 Mon Sep 17 00:00:00 2001 From: wenfei-li Date: Wed, 17 Nov 2021 21:47:01 +0800 Subject: [PATCH 069/478] deepks autotest : add test for descriptor; remove ill-behaving examples, add one for ch4 --- tests/deepks/602_NO_deepks_d_H2O/INPUT | 32 - tests/deepks/602_NO_deepks_d_H2O/STRU | 32 - .../602_NO_deepks_d_H2O/descriptor.dat.ref | 14 - tests/deepks/602_NO_deepks_d_H2O/model.ptg | Bin 191935 -> 0 bytes tests/deepks/602_NO_deepks_d_H2O/result.ref | 4 - .../F_delta.dat | 10 + .../INPUT | 0 .../KPT | 0 .../STRU | 0 .../descriptor.dat | 15 + .../dm_eig.npy | Bin 0 -> 512 bytes .../f_base.npy | Bin 0 -> 152 bytes .../602_NO_deepks_d_H2O_scf_lda2pbe/f_tot.npy | Bin 0 -> 152 bytes .../grad_vx.npy | Bin 0 -> 3968 bytes .../jle.orb | 0 .../model_lda_pbe_18.ptg | Bin .../result.ref | 0 tests/deepks/602_NO_deepks_p_H2O/INPUT | 32 - tests/deepks/602_NO_deepks_p_H2O/STRU | 32 - .../deepks/602_NO_deepks_p_H2O/descriptor.dat | 9 - tests/deepks/602_NO_deepks_p_H2O/jle.orb | 227 - tests/deepks/602_NO_deepks_p_H2O/model.ptg | Bin 191935 -> 0 bytes tests/deepks/602_NO_deepks_s_H2O/INPUT | 32 - tests/deepks/602_NO_deepks_s_H2O/KPT | 4 - tests/deepks/602_NO_deepks_s_H2O/STRU | 32 - tests/deepks/602_NO_deepks_s_H2O/jle.orb | 118 - tests/deepks/602_NO_deepks_s_H2O/model.ptg | Bin 191935 -> 0 bytes tests/deepks/603_NO_deepks_CH4/F_delta.dat | 14 + tests/deepks/603_NO_deepks_CH4/INPUT | 33 + .../KPT | 0 tests/deepks/603_NO_deepks_CH4/README | 2 + tests/deepks/603_NO_deepks_CH4/STRU | 33 + tests/deepks/603_NO_deepks_CH4/descriptor.dat | 85 + tests/deepks/603_NO_deepks_CH4/dm_eig.npy | Bin 0 -> 4760 bytes tests/deepks/603_NO_deepks_CH4/e_base.npy | Bin 0 -> 88 bytes tests/deepks/603_NO_deepks_CH4/e_tot.npy | Bin 0 -> 88 bytes tests/deepks/603_NO_deepks_CH4/f_base.npy | Bin 0 -> 200 bytes tests/deepks/603_NO_deepks_CH4/f_tot.npy | Bin 0 -> 200 bytes tests/deepks/603_NO_deepks_CH4/grad_vx.npy | Bin 0 -> 70280 bytes tests/deepks/603_NO_deepks_CH4/jle.orb | 6018 +++++++++++++++++ tests/deepks/603_NO_deepks_CH4/model.ptg | Bin 0 -> 273023 bytes tests/deepks/603_NO_deepks_CH4/result.ref | 5 + .../603_NO_deepks_d_H2O_scf_lda2pbe/KPT | 4 - .../603_NO_deepks_d_H2O_scf_lda2pbe/jle.orb | 336 - tests/deepks/CASES | 6 +- tests/integrate/tools/catch_properties.sh | 13 +- 46 files changed, 6229 insertions(+), 913 deletions(-) delete mode 100644 tests/deepks/602_NO_deepks_d_H2O/INPUT delete mode 100644 tests/deepks/602_NO_deepks_d_H2O/STRU delete mode 100644 tests/deepks/602_NO_deepks_d_H2O/descriptor.dat.ref delete mode 100644 tests/deepks/602_NO_deepks_d_H2O/model.ptg delete mode 100644 tests/deepks/602_NO_deepks_d_H2O/result.ref create mode 100644 tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/F_delta.dat rename tests/deepks/{603_NO_deepks_d_H2O_scf_lda2pbe => 602_NO_deepks_d_H2O_scf_lda2pbe}/INPUT (100%) rename tests/deepks/{602_NO_deepks_d_H2O => 602_NO_deepks_d_H2O_scf_lda2pbe}/KPT (100%) rename tests/deepks/{603_NO_deepks_d_H2O_scf_lda2pbe => 602_NO_deepks_d_H2O_scf_lda2pbe}/STRU (100%) create mode 100644 tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/descriptor.dat create mode 100644 tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/dm_eig.npy create mode 100644 tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/f_base.npy create mode 100644 tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/f_tot.npy create mode 100644 tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/grad_vx.npy rename tests/deepks/{602_NO_deepks_d_H2O => 602_NO_deepks_d_H2O_scf_lda2pbe}/jle.orb (100%) rename tests/deepks/{603_NO_deepks_d_H2O_scf_lda2pbe => 602_NO_deepks_d_H2O_scf_lda2pbe}/model_lda_pbe_18.ptg (100%) rename tests/deepks/{603_NO_deepks_d_H2O_scf_lda2pbe => 602_NO_deepks_d_H2O_scf_lda2pbe}/result.ref (100%) delete mode 100644 tests/deepks/602_NO_deepks_p_H2O/INPUT delete mode 100644 tests/deepks/602_NO_deepks_p_H2O/STRU delete mode 100644 tests/deepks/602_NO_deepks_p_H2O/descriptor.dat delete mode 100644 tests/deepks/602_NO_deepks_p_H2O/jle.orb delete mode 100644 tests/deepks/602_NO_deepks_p_H2O/model.ptg delete mode 100644 tests/deepks/602_NO_deepks_s_H2O/INPUT delete mode 100644 tests/deepks/602_NO_deepks_s_H2O/KPT delete mode 100644 tests/deepks/602_NO_deepks_s_H2O/STRU delete mode 100644 tests/deepks/602_NO_deepks_s_H2O/jle.orb delete mode 100644 tests/deepks/602_NO_deepks_s_H2O/model.ptg create mode 100644 tests/deepks/603_NO_deepks_CH4/F_delta.dat create mode 100644 tests/deepks/603_NO_deepks_CH4/INPUT rename tests/deepks/{602_NO_deepks_p_H2O => 603_NO_deepks_CH4}/KPT (100%) create mode 100644 tests/deepks/603_NO_deepks_CH4/README create mode 100644 tests/deepks/603_NO_deepks_CH4/STRU create mode 100644 tests/deepks/603_NO_deepks_CH4/descriptor.dat create mode 100644 tests/deepks/603_NO_deepks_CH4/dm_eig.npy create mode 100644 tests/deepks/603_NO_deepks_CH4/e_base.npy create mode 100644 tests/deepks/603_NO_deepks_CH4/e_tot.npy create mode 100644 tests/deepks/603_NO_deepks_CH4/f_base.npy create mode 100644 tests/deepks/603_NO_deepks_CH4/f_tot.npy create mode 100644 tests/deepks/603_NO_deepks_CH4/grad_vx.npy create mode 100644 tests/deepks/603_NO_deepks_CH4/jle.orb create mode 100644 tests/deepks/603_NO_deepks_CH4/model.ptg create mode 100644 tests/deepks/603_NO_deepks_CH4/result.ref delete mode 100644 tests/deepks/603_NO_deepks_d_H2O_scf_lda2pbe/KPT delete mode 100644 tests/deepks/603_NO_deepks_d_H2O_scf_lda2pbe/jle.orb diff --git a/tests/deepks/602_NO_deepks_d_H2O/INPUT b/tests/deepks/602_NO_deepks_d_H2O/INPUT deleted file mode 100644 index 84d0a656b9..0000000000 --- a/tests/deepks/602_NO_deepks_d_H2O/INPUT +++ /dev/null @@ -1,32 +0,0 @@ -INPUT_PARAMETERS -#Parameters (1.General) -suffix autotest -calculation scf -pseudo_dir ../../integrate/tools/PP_ORB -ntype 2 -nbands 6 -symmetry 0 - -#Parameters (2.Iteration) -ecutwfc 20 -dr2 1e-8 -niter 50 - -#Parameters (3.Basis) -basis_type lcao -gamma_only 1 - -#Parameters (4.Smearing) -smearing gaussian -sigma 0.02 - -#Parameters (5.Mixing) -mixing_type pulay -mixing_beta 0.4 - -#Parameters (6.Deepks) -out_descriptor 1 -lmax_descriptor 2 -newdm 1 -deepks_scf 1 -model_file model.ptg diff --git a/tests/deepks/602_NO_deepks_d_H2O/STRU b/tests/deepks/602_NO_deepks_d_H2O/STRU deleted file mode 100644 index 3032f750b9..0000000000 --- a/tests/deepks/602_NO_deepks_d_H2O/STRU +++ /dev/null @@ -1,32 +0,0 @@ -ATOMIC_SPECIES -H 1.008 H_ONCV_PBE-1.0.upf -O 15.9994 O_ONCV_PBE-1.0.upf - -NUMERICAL_ORBITAL -../../integrate/tools/PP_ORB/H_gga_6au_60Ry_2s1p.orb -../../integrate/tools/PP_ORB/O_gga_6au_60Ry_2s2p1d.orb - -NUMERICAL_DESCRIPTOR -jle.orb - - -LATTICE_CONSTANT -1 - -LATTICE_VECTORS -28 0 0 -0 28 0 -0 0 28 - -ATOMIC_POSITIONS -Cartesian - -H -0 -2 --12.046787058887078 18.76558614676448 8.395247471328744 1 1 1 --14.228868795885418 20.61549300274637 7.611989524516571 1 1 1 -O -0 -1 --13.486789117423204 19.684192208418636 8.958321352749174 1 1 1 diff --git a/tests/deepks/602_NO_deepks_d_H2O/descriptor.dat.ref b/tests/deepks/602_NO_deepks_d_H2O/descriptor.dat.ref deleted file mode 100644 index dffad16dab..0000000000 --- a/tests/deepks/602_NO_deepks_d_H2O/descriptor.dat.ref +++ /dev/null @@ -1,14 +0,0 @@ -H atom_index 1 n_descriptor 18 -1.28088 0.0274075 0.105862 0.138579 0.301279 0.0236289 0.028595 0.028874 -2.02503e-17 7.13285e-05 0.108648 0.129036 0.157433 -2.92953e-18 1.20003e-06 0.0124797 -0.0296176 0.0348618 - -H atom_index 2 n_descriptor 18 -1.28163 0.0273376 0.106152 0.139035 0.301562 0.0236673 0.0285576 0.0289343 -2.56229e-17 7.19118e-05 0.10861 0.129352 0.157954 1.22892e-18 1.18037e-06 0.0125457 -0.0296351 0.0348889 - -O atom_index 1 n_descriptor 18 -1.59372 0.0294595 1.38357 1.54593 1.64662 0.0187907 0.041366 0.0606361 --3.76129e-18 0.00213905 0.0026193 0.0140243 0.0422767 1.41455e-19 3.75538e-06 6.78513e-06 -0.00196832 0.00484656 \ No newline at end of file diff --git a/tests/deepks/602_NO_deepks_d_H2O/model.ptg b/tests/deepks/602_NO_deepks_d_H2O/model.ptg deleted file mode 100644 index d83fc960b6c4b246b6e2dee5c522baa21c8bfcd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191935 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 CT4hoI diff --git a/tests/deepks/602_NO_deepks_d_H2O/result.ref b/tests/deepks/602_NO_deepks_d_H2O/result.ref deleted file mode 100644 index 3b90b2304e..0000000000 --- a/tests/deepks/602_NO_deepks_d_H2O/result.ref +++ /dev/null @@ -1,4 +0,0 @@ -etotref -489.3616375475118 -etotperatomref -163.1205458492 -descriptor 1 -totaltimeref 1 diff --git a/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/F_delta.dat b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/F_delta.dat new file mode 100644 index 0000000000..8f4c4429b4 --- /dev/null +++ b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/F_delta.dat @@ -0,0 +1,10 @@ +F_delta(Hatree/Bohr) from deepks model: + type atom dF_x dF_y dF_z + H 0 -0.00454723 0.0061632 0.000533779 + H 1 -0.00490493 -0.00602689 0.00187857 + O 0 0.0094654 -0.00014059 -0.00241083 +F_delta(eV/Angstrom) from deepks model: + type atom dF_x dF_y dF_z + H 0 -0.233828 0.316925 0.027448 + H 1 -0.252222 -0.309915 0.0966002 + O 0 0.486731 -0.00722944 -0.12397 diff --git a/tests/deepks/603_NO_deepks_d_H2O_scf_lda2pbe/INPUT b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/INPUT similarity index 100% rename from tests/deepks/603_NO_deepks_d_H2O_scf_lda2pbe/INPUT rename to tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/INPUT diff --git a/tests/deepks/602_NO_deepks_d_H2O/KPT b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/KPT similarity index 100% rename from tests/deepks/602_NO_deepks_d_H2O/KPT rename to tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/KPT diff --git a/tests/deepks/603_NO_deepks_d_H2O_scf_lda2pbe/STRU b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/STRU similarity index 100% rename from tests/deepks/603_NO_deepks_d_H2O_scf_lda2pbe/STRU rename to tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/STRU diff --git a/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/descriptor.dat b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/descriptor.dat new file mode 100644 index 0000000000..8f3e39e9b9 --- /dev/null +++ b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/descriptor.dat @@ -0,0 +1,15 @@ +H atom_index 1 n_descriptor 18 +1.24927 0.034658 0.109717 0.149338 0.321315 0.0228196 0.028221 0.0376498 +1.59815e-17 5.07059e-05 0.102974 0.114935 0.128809 2.31757e-18 3.74417e-06 0.0132908 +0.0268168 0.0308332 + +H atom_index 2 n_descriptor 18 +1.26443 0.0341423 0.11518 0.156583 0.326223 0.0235562 0.0291087 0.0372227 +-3.77692e-18 5.22334e-05 0.105945 0.116377 0.135064 6.01473e-18 2.85833e-06 0.0132448 +0.0273651 0.0315078 + +O atom_index 1 n_descriptor 18 +1.75155 0.0128991 1.27885 1.36198 1.4728 0.00902622 0.0175445 0.0398156 +3.46537e-19 0.00101691 0.00279026 0.0130637 0.0471705 -1.16467e-21 2.42735e-06 6.81394e-06 +0.0015982 0.00606846 + diff --git a/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/dm_eig.npy b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/dm_eig.npy new file mode 100644 index 0000000000000000000000000000000000000000..21c38e2be4e6a2a408e68015dc85048c33c0661b GIT binary patch literal 512 zcmV+b0{{J!PE}1%Spfh>0DC87WpiV4CpsV}JZ3m2EFdRlZ*p{UVQybEm_^Kk9m78e&uvj{kkmikt*%@JUY9>Si~T)IC@rLlZpY`s6{4Hy{He84{dU=g@8U`0IA%%VVzXwN>K zd+wApIEz1sS1SbEb(=qLm1IM|lAk|!R1xqQJM=#=;eGuVd!avsF`a*Be7!%%Wu9{8 z3dBDJMXCCBmrYf-#w2J23wVhcaP z^~_Z_AG<%~*tqQ8%Dq26!3nC!Nx?ri12zBeyjwhCV&Eh<`o}&2my9nNAd5fIXFUv; z1)M(@2uz2K+xh2s-H3YKlLei?-V*cJx1G7`ncu%Jn~NjeKX8koP|l zwrRswe1boZ76d9R_mMy4SrEduVx&I+007J7kr_PyEu2?4sZc++niap7+h#wb<6b-; z!HPdP5us`ItsN4aKM$hBJkddZLRhkZ{Po3E46UH)=fVZr{#|JCVRF_P5Cy{ v{)W^>24?w{_OaYK$|_tP`=2rObA{$C+J8msltVV#g#C-|?5Y=g*Jcj@me4l# literal 0 HcmV?d00001 diff --git a/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/f_tot.npy b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/f_tot.npy new file mode 100644 index 0000000000000000000000000000000000000000..a78db5e9d491c1d189a4b13a405314c2d2963517 GIT binary patch literal 152 zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%oIts>`ItsN4aKLr6_f|~QmI(W<16RBSr%m0TQ$69ES74NV?4?PG)35g1 uzxmoBBl&reeL#m>MnFWver}=ZVS;57_xozwzEudAu>a`C7eanARrUbTC^y3Z literal 0 HcmV?d00001 diff --git a/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/grad_vx.npy b/tests/deepks/602_NO_deepks_d_H2O_scf_lda2pbe/grad_vx.npy new file mode 100644 index 0000000000000000000000000000000000000000..731d0902c29d9f46dda2ac3cc3b3e85c71b96024 GIT binary patch literal 3968 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 2 -Number of Porbitals--> 2 ---------------------------------------------------------------------------- -SUMMARY END - -Mesh 205 -dr 0.01 - Type L N - 0 0 0 -1.000000000000e+00 9.999588771557e-01 9.998355147105e-01 9.996299309272e-01 -9.993421562398e-01 9.989722332485e-01 9.985202167122e-01 9.979861735385e-01 -9.973701827725e-01 9.966723355824e-01 9.958927352436e-01 9.950314971204e-01 -9.940887486459e-01 9.930646292992e-01 9.919592905814e-01 9.907728959881e-01 -9.895056209813e-01 9.881576529582e-01 9.867291912182e-01 9.852204469278e-01 -9.836316430835e-01 9.819630144724e-01 9.802148076310e-01 9.783872808018e-01 -9.764807038877e-01 9.744953584044e-01 9.724315374315e-01 9.702895455599e-01 -9.680696988392e-01 9.657723247216e-01 9.633977620041e-01 9.609463607696e-01 -9.584184823246e-01 9.558144991363e-01 9.531347947667e-01 9.503797638053e-01 -9.475498118000e-01 9.446453551854e-01 9.416668212101e-01 9.386146478614e-01 -9.354892837887e-01 9.322911882241e-01 9.290208309025e-01 9.256786919789e-01 -9.222652619442e-01 9.187810415390e-01 9.152265416659e-01 9.116022833003e-01 -9.079087973984e-01 9.041466248047e-01 9.003163161571e-01 8.964184317906e-01 -8.924535416387e-01 8.884222251345e-01 8.843250711084e-01 8.801626776859e-01 -8.759356521824e-01 8.716446109973e-01 8.672901795064e-01 8.628729919524e-01 -8.583936913342e-01 8.538529292946e-01 8.492513660070e-01 8.445896700594e-01 -8.398685183386e-01 8.350885959117e-01 8.302505959068e-01 8.253552193925e-01 -8.204031752555e-01 8.153951800774e-01 8.103319580098e-01 8.052142406487e-01 -8.000427669069e-01 7.948182828860e-01 7.895415417463e-01 7.842133035766e-01 -7.788343352618e-01 7.734054103501e-01 7.679273089189e-01 7.624008174394e-01 -7.568267286407e-01 7.512058413722e-01 7.455389604655e-01 7.398268965953e-01 -7.340704661391e-01 7.282704910361e-01 7.224277986456e-01 7.165432216037e-01 -7.106175976801e-01 7.046517696336e-01 6.986465850665e-01 6.926028962792e-01 -6.865215601233e-01 6.804034378540e-01 6.742493949824e-01 6.680603011269e-01 -6.618370298634e-01 6.555804585759e-01 6.492914683061e-01 6.429709436022e-01 -6.366197723676e-01 6.302388457091e-01 6.238290577843e-01 6.173913056492e-01 -6.109264891046e-01 6.044355105434e-01 5.979192747958e-01 5.913786889759e-01 -5.848146623272e-01 5.782281060680e-01 5.716199332362e-01 5.649910585351e-01 -5.583423981773e-01 5.516748697303e-01 5.449893919607e-01 5.382868846789e-01 -5.315682685835e-01 5.248344651061e-01 5.180863962557e-01 5.113249844635e-01 -5.045511524272e-01 4.977658229563e-01 4.909699188170e-01 4.841643625769e-01 -4.773500764508e-01 4.705279821460e-01 4.636990007082e-01 4.568640523676e-01 -4.500240563852e-01 4.431799308997e-01 4.363325927746e-01 4.294829574454e-01 -4.226319387680e-01 4.157804488670e-01 4.089293979840e-01 4.020796943279e-01 -3.952322439241e-01 3.883879504654e-01 3.815477151626e-01 3.747124365970e-01 -3.678830105719e-01 3.610603299660e-01 3.542452845872e-01 3.474387610270e-01 -3.406416425155e-01 3.338548087775e-01 3.270791358895e-01 3.203154961370e-01 -3.135647578731e-01 3.068277853781e-01 3.001054387191e-01 2.933985736122e-01 -2.867080412838e-01 2.800346883342e-01 2.733793566016e-01 2.667428830275e-01 -2.601260995228e-01 2.535298328351e-01 2.469549044172e-01 2.404021302969e-01 -2.338723209473e-01 2.273662811591e-01 2.208848099136e-01 2.144287002569e-01 -2.079987391757e-01 2.015957074739e-01 1.952203796511e-01 1.888735237815e-01 -1.825559013953e-01 1.762682673602e-01 1.700113697655e-01 1.637859498067e-01 -1.575927416716e-01 1.514324724285e-01 1.453058619151e-01 1.392136226293e-01 -1.331564596211e-01 1.271350703868e-01 1.211501447635e-01 1.152023648265e-01 -1.092924047871e-01 1.034209308931e-01 9.758860132936e-02 9.179606612189e-02 -8.604396704195e-02 8.033293751264e-02 7.466360251697e-02 6.903657850753e-02 -6.345247331791e-02 5.791188607588e-02 5.241540711817e-02 4.696361790712e-02 -4.155709094895e-02 3.619638971392e-02 3.088206855820e-02 2.561467264749e-02 -2.039473788254e-02 1.522279082639e-02 1.009934863353e-02 5.024918980770e-03 -8.824636488425e-14 -4.974919786756e-03 -9.899361531700e-03 -1.477285612199e-02 --1.959494423991e-02 - Type L N - 0 0 1 -1.000000000000e+00 9.998355147105e-01 9.993421562398e-01 9.985202167122e-01 -9.973701827725e-01 9.958927352436e-01 9.940887486459e-01 9.919592905814e-01 -9.895056209813e-01 9.867291912182e-01 9.836316430835e-01 9.802148076310e-01 -9.764807038877e-01 9.724315374315e-01 9.680696988392e-01 9.633977620041e-01 -9.584184823246e-01 9.531347947667e-01 9.475498117999e-01 9.416668212101e-01 -9.354892837886e-01 9.290208309025e-01 9.222652619442e-01 9.152265416659e-01 -9.079087973984e-01 9.003163161571e-01 8.924535416387e-01 8.843250711084e-01 -8.759356521824e-01 8.672901795064e-01 8.583936913341e-01 8.492513660070e-01 -8.398685183386e-01 8.302505959068e-01 8.204031752555e-01 8.103319580098e-01 -8.000427669069e-01 7.895415417463e-01 7.788343352617e-01 7.679273089188e-01 -7.568267286407e-01 7.455389604655e-01 7.340704661390e-01 7.224277986455e-01 -7.106175976801e-01 6.986465850664e-01 6.865215601232e-01 6.742493949824e-01 -6.618370298633e-01 6.492914683061e-01 6.366197723676e-01 6.238290577843e-01 -6.109264891046e-01 5.979192747957e-01 5.848146623272e-01 5.716199332362e-01 -5.583423981772e-01 5.449893919607e-01 5.315682685834e-01 5.180863962557e-01 -5.045511524271e-01 4.909699188170e-01 4.773500764508e-01 4.636990007081e-01 -4.500240563851e-01 4.363325927745e-01 4.226319387680e-01 4.089293979839e-01 -3.952322439241e-01 3.815477151626e-01 3.678830105718e-01 3.542452845871e-01 -3.406416425154e-01 3.270791358894e-01 3.135647578731e-01 3.001054387191e-01 -2.867080412837e-01 2.733793566015e-01 2.601260995227e-01 2.469549044171e-01 -2.338723209472e-01 2.208848099135e-01 2.079987391756e-01 1.952203796510e-01 -1.825559013952e-01 1.700113697655e-01 1.575927416715e-01 1.453058619151e-01 -1.331564596211e-01 1.211501447634e-01 1.092924047871e-01 9.758860132929e-02 -8.604396704188e-02 7.466360251690e-02 6.345247331784e-02 5.241540711810e-02 -4.155709094888e-02 3.088206855813e-02 2.039473788247e-02 1.009934863346e-02 -2.180811153812e-14 -9.899361531766e-03 -1.959494423998e-02 -2.908311310810e-02 --3.836039164508e-02 -4.742346358301e-02 -5.626917445163e-02 -6.489453302867e-02 --7.329671266526e-02 -8.147305248589e-02 -8.942105846211e-02 -9.713840435981e-02 --1.046229325594e-01 -1.118726547487e-01 -1.188857524890e-01 -1.256605776527e-01 --1.321956527344e-01 -1.384896710345e-01 -1.445414967152e-01 -1.503501647310e-01 --1.559148806314e-01 -1.612350202393e-01 -1.663101292030e-01 -1.711399224253e-01 --1.757242833674e-01 -1.800632632314e-01 -1.841570800207e-01 -1.880061174797e-01 --1.916109239149e-01 -1.949722108968e-01 -1.980908518463e-01 -2.009678805055e-01 --2.036044892942e-01 -2.060020275558e-01 -2.081619996917e-01 -2.100860631877e-01 --2.117760265342e-01 -2.132338470410e-01 -2.144616285503e-01 -2.154616190492e-01 --2.162362081830e-01 -2.167879246744e-01 -2.171194336468e-01 -2.172335338584e-01 --2.171331548467e-01 -2.168213539861e-01 -2.163013134635e-01 -2.155763371712e-01 --2.146498475232e-01 -2.135253821946e-01 -2.122065907892e-01 -2.106972314371e-01 --2.090011673253e-01 -2.071223631645e-01 -2.050648815953e-01 -2.028328795354e-01 --2.004306044739e-01 -1.978623907118e-01 -1.951326555560e-01 -1.922458954659e-01 --1.892066821602e-01 -1.860196586822e-01 -1.826895354318e-01 -1.792210861633e-01 --1.756191439552e-01 -1.718885971536e-01 -1.680343852933e-01 -1.640614949996e-01 --1.599749558740e-01 -1.557798363682e-01 -1.514812396472e-01 -1.470842994485e-01 --1.425941759367e-01 -1.380160515603e-01 -1.333551269115e-01 -1.286166165939e-01 --1.238057450998e-01 -1.189277427024e-01 -1.139878413639e-01 -1.089912706646e-01 --1.039432537543e-01 -9.884900333146e-02 -9.371371765056e-02 -8.854257656305e-02 --8.334073759347e-02 -7.811333205441e-02 -7.286546120297e-02 -6.760219244178e-02 --6.232855556732e-02 -5.704953906849e-02 -5.177008647810e-02 -4.649509277994e-02 --4.122940087424e-02 -3.597779810401e-02 -3.074501284474e-02 -2.553571116011e-02 --2.035449352599e-02 -1.520589162508e-02 -1.009436521457e-02 -5.024299068919e-03 --2.180811153812e-14 4.974306043314e-03 9.894476794432e-03 1.475645640459e-02 -1.955627809356e-02 - Type L N - 0 1 0 -0.000000000000e+00 7.488637748270e-03 1.497500757073e-02 2.245684235920e-02 -2.993187664049e-02 3.739784739318e-02 4.485249486326e-02 5.229356337864e-02 -5.971880216197e-02 6.712596614162e-02 7.451281676032e-02 8.187712278134e-02 -8.921666109172e-02 9.652921750236e-02 1.038125875446e-01 1.110645772630e-01 -1.182830040039e-01 1.254656971996e-01 1.326104991481e-01 1.397152657871e-01 -1.467778674633e-01 1.537961896959e-01 1.607681339337e-01 1.676916183067e-01 -1.745645783707e-01 1.813849678449e-01 1.881507593431e-01 1.948599450964e-01 -2.015105376695e-01 2.081005706678e-01 2.146280994373e-01 2.210912017554e-01 -2.274879785128e-01 2.338165543868e-01 2.400750785054e-01 2.462617251009e-01 -2.523746941547e-01 2.584122120318e-01 2.643725321043e-01 2.702539353656e-01 -2.760547310324e-01 2.817732571367e-01 2.874078811063e-01 2.929570003335e-01 -2.984190427326e-01 3.037924672851e-01 3.090757645728e-01 3.142674572991e-01 -3.193661007968e-01 3.243702835244e-01 3.292786275485e-01 3.340897890136e-01 -3.388024585987e-01 3.434153619598e-01 3.479272601599e-01 3.523369500844e-01 -3.566432648428e-01 3.608450741561e-01 3.649412847309e-01 3.689308406179e-01 -3.728127235570e-01 3.765859533068e-01 3.802495879603e-01 3.838027242452e-01 -3.872444978093e-01 3.905740834913e-01 3.937906955755e-01 3.968935880325e-01 -3.998820547434e-01 4.027554297095e-01 4.055130872460e-01 4.081544421604e-01 -4.106789499151e-01 4.130861067746e-01 4.153754499369e-01 4.175465576492e-01 -4.195990493076e-01 4.215325855415e-01 4.233468682816e-01 4.250416408125e-01 -4.266166878097e-01 4.280718353596e-01 4.294069509652e-01 4.306219435350e-01 -4.317167633563e-01 4.326914020530e-01 4.335458925272e-01 4.342803088856e-01 -4.348947663497e-01 4.353894211511e-01 4.357644704103e-01 4.360201520010e-01 -4.361567443983e-01 4.361745665118e-01 4.360739775033e-01 4.358553765897e-01 -4.355192028303e-01 4.350659348995e-01 4.344960908441e-01 4.338102278270e-01 -4.330089418547e-01 4.320928674913e-01 4.310626775581e-01 4.299190828181e-01 -4.286628316477e-01 4.272947096929e-01 4.258155395130e-01 4.242261802101e-01 -4.225275270446e-01 4.207205110385e-01 4.188060985641e-01 4.167852909214e-01 -4.146591239012e-01 4.124286673363e-01 4.100950246402e-01 4.076593323337e-01 -4.051227595591e-01 4.024865075830e-01 3.997518092873e-01 3.969199286487e-01 -3.939921602073e-01 3.909698285243e-01 3.878542876288e-01 3.846469204537e-01 -3.813491382626e-01 3.779623800657e-01 3.744881120259e-01 3.709278268561e-01 -3.672830432068e-01 3.635553050448e-01 3.597461810232e-01 3.558572638428e-01 -3.518901696056e-01 3.478465371601e-01 3.437280274391e-01 3.395363227902e-01 -3.352731262987e-01 3.309401611045e-01 3.265391697118e-01 3.220719132928e-01 -3.175401709852e-01 3.129457391848e-01 3.082904308316e-01 3.035760746916e-01 -2.988045146335e-01 2.939776089012e-01 2.890972293815e-01 2.841652608687e-01 -2.791836003246e-01 2.741541561365e-01 2.690788473710e-01 2.639596030257e-01 -2.587983612786e-01 2.535970687348e-01 2.483576796724e-01 2.430821552860e-01 -2.377724629297e-01 2.324305753586e-01 2.270584699704e-01 2.216581280466e-01 -2.162315339932e-01 2.107806745824e-01 2.053075381949e-01 1.998141140629e-01 -1.943023915144e-01 1.887743592194e-01 1.832320044375e-01 1.776773122682e-01 -1.721122649033e-01 1.665388408820e-01 1.609590143496e-01 1.553747543190e-01 -1.497880239360e-01 1.442007797487e-01 1.386149709812e-01 1.330325388114e-01 -1.274554156537e-01 1.218855244475e-01 1.163247779500e-01 1.107750780353e-01 -1.052383149992e-01 9.971636687013e-02 9.421109872690e-02 8.872436202246e-02 -8.325799391531e-02 7.781381660774e-02 7.239363669171e-02 6.699924450243e-02 -6.163241347987e-02 5.629489953858e-02 5.098844044591e-02 4.571475520896e-02 -4.047554347042e-02 3.527248491362e-02 3.010723867693e-02 2.498144277778e-02 -1.989671354647e-02 1.485464507002e-02 9.856808646282e-03 4.904752248416e-03 -8.084377910810e-14 -4.855948338613e-03 -9.661617874115e-03 -1.441555907126e-02 --1.911634823371e-02 - Type L N - 0 1 1 -0.000000000000e+00 1.287349883354e-02 2.573547475531e-02 3.857441713205e-02 -5.137883987341e-02 6.413729366771e-02 7.683837817512e-02 8.947075416401e-02 -1.020231555764e-01 1.144844015086e-01 1.268434080930e-01 1.390892002673e-01 -1.512109234179e-01 1.631978548831e-01 1.750394153042e-01 1.867251798097e-01 -1.982448890213e-01 2.095884598674e-01 2.207459961937e-01 2.317077991564e-01 -2.424643773877e-01 2.530064569210e-01 2.633249908654e-01 2.734111688171e-01 -2.832564259984e-01 2.928524521123e-01 3.021911999042e-01 3.112648934202e-01 -3.200660359520e-01 3.285874176609e-01 3.368221228716e-01 3.447635370265e-01 -3.524053532954e-01 3.597415788301e-01 3.667665406600e-01 3.734748912194e-01 -3.798616135028e-01 3.859220258413e-01 3.916517862950e-01 3.970468966577e-01 -4.021037060685e-01 4.068189142273e-01 4.111895742108e-01 4.152130948861e-01 -4.188872429201e-01 4.222101443820e-01 4.251802859385e-01 4.277965156404e-01 -4.300580433007e-01 4.319644404634e-01 4.335156399653e-01 4.347119350899e-01 -4.355539783170e-01 4.360427796690e-01 4.361797046561e-01 4.359664718249e-01 -4.354051499131e-01 4.344981546136e-01 4.332482449540e-01 4.316585192952e-01 -4.297324109555e-01 4.274736834644e-01 4.248864254548e-01 4.219750451979e-01 -4.187442647891e-01 4.151991139927e-01 4.113449237518e-01 4.071873193743e-01 -4.027322134004e-01 3.979857981635e-01 3.929545380524e-01 3.876451614846e-01 -3.820646526015e-01 3.762202426951e-01 3.701194013774e-01 3.637698275033e-01 -3.571794398579e-01 3.503563676209e-01 3.433089406181e-01 3.360456793733e-01 -3.285752849731e-01 3.209066287553e-01 3.130487418352e-01 3.050108044820e-01 -2.968021353580e-01 2.884321806341e-01 2.799105029940e-01 2.712467705418e-01 -2.624507456248e-01 2.535322735859e-01 2.445012714596e-01 2.353677166230e-01 -2.261416354183e-01 2.168330917584e-01 2.074521757289e-01 1.980089922025e-01 -1.885136494756e-01 1.789762479447e-01 1.694068688318e-01 1.598155629754e-01 -1.502123396984e-01 1.406071557664e-01 1.310099044496e-01 1.214304047005e-01 -1.118783904600e-01 1.023635001051e-01 9.289526604868e-02 8.348310450536e-02 -7.413630543331e-02 6.486402266461e-02 5.567526423484e-02 4.657888292306e-02 -3.758356701260e-02 2.869783128319e-02 1.993000824438e-02 1.128823961984e-02 -2.780468092110e-03 -5.585570683343e-03 -1.380235578603e-02 -2.186258845205e-02 --2.975919920140e-02 -3.748535466356e-02 -4.503446409415e-02 -5.240018557589e-02 --5.957643189757e-02 -6.655737610510e-02 -7.333745671913e-02 -7.991138261421e-02 --8.627413755471e-02 -9.242098438353e-02 -9.834746885961e-02 -1.040494231411e-01 --1.095229689111e-01 -1.147645201439e-01 -1.197707855094e-01 -1.245387704143e-01 --1.290657786791e-01 -1.333494138503e-01 -1.373875801476e-01 -1.411784830461e-01 --1.447206294949e-01 -1.480128277725e-01 -1.510541869820e-01 -1.538441161856e-01 --1.563823231847e-01 -1.586688129443e-01 -1.607038856690e-01 -1.624881345314e-01 --1.640224430593e-01 -1.653079821847e-01 -1.663462069605e-01 -1.671388529506e-01 --1.676879322986e-01 -1.679957294811e-01 -1.680647967533e-01 -1.678979492927e-01 --1.674982600487e-01 -1.668690543061e-01 -1.660139039692e-01 -1.649366215765e-01 --1.636412540531e-01 -1.621320762106e-01 -1.604135840036e-01 -1.584904875512e-01 --1.563677039349e-01 -1.540503497817e-01 -1.515437336425e-01 -1.488533481770e-01 --1.459848621550e-01 -1.429441122854e-01 -1.397370948832e-01 -1.363699573865e-01 --1.328489897337e-01 -1.291806156141e-01 -1.253713836005e-01 -1.214279581791e-01 --1.173571106849e-01 -1.131657101573e-01 -1.088607141251e-01 -1.044491593355e-01 --9.993815243651e-02 -9.533486062644e-02 -9.064650228155e-02 -8.588033757396e-02 --8.104365909172e-02 -7.614378247274e-02 -7.118803706450e-02 -6.618375662098e-02 --6.113827004858e-02 -5.605889221235e-02 -5.095291481399e-02 -4.582759735266e-02 --4.069015817980e-02 -3.554776565875e-02 -3.040752943992e-02 -2.527649186198e-02 --2.016161948939e-02 -1.506979479638e-02 -1.000780800721e-02 -4.982349102379e-03 --6.437579797176e-15 4.932773078295e-03 9.809627048423e-03 1.462434920303e-02 -1.937086424077e-02 diff --git a/tests/deepks/602_NO_deepks_p_H2O/model.ptg b/tests/deepks/602_NO_deepks_p_H2O/model.ptg deleted file mode 100644 index d83fc960b6c4b246b6e2dee5c522baa21c8bfcd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191935 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 CT4hoI diff --git a/tests/deepks/602_NO_deepks_s_H2O/INPUT b/tests/deepks/602_NO_deepks_s_H2O/INPUT deleted file mode 100644 index ae730e88dd..0000000000 --- a/tests/deepks/602_NO_deepks_s_H2O/INPUT +++ /dev/null @@ -1,32 +0,0 @@ -INPUT_PARAMETERS -#Parameters (1.General) -suffix autotest -calculation scf -pseudo_dir ../../integrate/tools/PP_ORB -ntype 2 -nbands 6 -symmetry 0 - -#Parameters (2.Iteration) -ecutwfc 20 -dr2 1e-8 -niter 50 - -#Parameters (3.Basis) -basis_type lcao -gamma_only 1 - -#Parameters (4.Smearing) -smearing gaussian -sigma 0.02 - -#Parameters (5.Mixing) -mixing_type pulay -mixing_beta 0.4 - -#Parameters (6.Deepks) -out_descriptor 1 -lmax_descriptor 0 -newdm 1 -deepks_scf 1 -model_file model.ptg diff --git a/tests/deepks/602_NO_deepks_s_H2O/KPT b/tests/deepks/602_NO_deepks_s_H2O/KPT deleted file mode 100644 index c289c0158a..0000000000 --- a/tests/deepks/602_NO_deepks_s_H2O/KPT +++ /dev/null @@ -1,4 +0,0 @@ -K_POINTS -0 -Gamma -1 1 1 0 0 0 diff --git a/tests/deepks/602_NO_deepks_s_H2O/STRU b/tests/deepks/602_NO_deepks_s_H2O/STRU deleted file mode 100644 index bfea0d43d9..0000000000 --- a/tests/deepks/602_NO_deepks_s_H2O/STRU +++ /dev/null @@ -1,32 +0,0 @@ -ATOMIC_SPECIES -H 1.008 H_ONCV_PBE-1.0.upf -O 15.9994 O_ONCV_PBE-1.0.upf - -NUMERICAL_ORBITAL -../../integrate/tools/PP_ORB/H_gga_8au_60Ry_2s1p.orb -../../integrate/tools/PP_ORB/O_gga_6au_60Ry_2s2p1d.orb - -NUMERICAL_DESCRIPTOR -jle.orb - - -LATTICE_CONSTANT -1 - -LATTICE_VECTORS -28 0 0 -0 28 0 -0 0 28 - -ATOMIC_POSITIONS -Cartesian - -H -0 -2 --12.046787058887078 18.76558614676448 8.395247471328744 1 1 1 --14.228868795885418 20.61549300274637 7.611989524516571 1 1 1 -O -0 -1 --13.486789117423204 19.684192208418636 8.958321352749174 1 1 1 diff --git a/tests/deepks/602_NO_deepks_s_H2O/jle.orb b/tests/deepks/602_NO_deepks_s_H2O/jle.orb deleted file mode 100644 index f06c08eabd..0000000000 --- a/tests/deepks/602_NO_deepks_s_H2O/jle.orb +++ /dev/null @@ -1,118 +0,0 @@ ---------------------------------------------------------------------------- -Energy Cutoff(Ry) 20 -Radius Cutoff(a.u.) 2 -Lmax 0 -Number of Sorbitals--> 2 ---------------------------------------------------------------------------- -SUMMARY END - -Mesh 205 -dr 0.01 - Type L N - 0 0 0 -1.000000000000e+00 9.999588771557e-01 9.998355147105e-01 9.996299309272e-01 -9.993421562398e-01 9.989722332485e-01 9.985202167122e-01 9.979861735385e-01 -9.973701827725e-01 9.966723355824e-01 9.958927352436e-01 9.950314971204e-01 -9.940887486459e-01 9.930646292992e-01 9.919592905814e-01 9.907728959881e-01 -9.895056209813e-01 9.881576529582e-01 9.867291912182e-01 9.852204469278e-01 -9.836316430835e-01 9.819630144724e-01 9.802148076310e-01 9.783872808018e-01 -9.764807038877e-01 9.744953584044e-01 9.724315374315e-01 9.702895455599e-01 -9.680696988392e-01 9.657723247216e-01 9.633977620041e-01 9.609463607696e-01 -9.584184823246e-01 9.558144991363e-01 9.531347947667e-01 9.503797638053e-01 -9.475498118000e-01 9.446453551854e-01 9.416668212101e-01 9.386146478614e-01 -9.354892837887e-01 9.322911882241e-01 9.290208309025e-01 9.256786919789e-01 -9.222652619442e-01 9.187810415390e-01 9.152265416659e-01 9.116022833003e-01 -9.079087973984e-01 9.041466248047e-01 9.003163161571e-01 8.964184317906e-01 -8.924535416387e-01 8.884222251345e-01 8.843250711084e-01 8.801626776859e-01 -8.759356521824e-01 8.716446109973e-01 8.672901795064e-01 8.628729919524e-01 -8.583936913342e-01 8.538529292946e-01 8.492513660070e-01 8.445896700594e-01 -8.398685183386e-01 8.350885959117e-01 8.302505959068e-01 8.253552193925e-01 -8.204031752555e-01 8.153951800774e-01 8.103319580098e-01 8.052142406487e-01 -8.000427669069e-01 7.948182828860e-01 7.895415417463e-01 7.842133035766e-01 -7.788343352618e-01 7.734054103501e-01 7.679273089189e-01 7.624008174394e-01 -7.568267286407e-01 7.512058413722e-01 7.455389604655e-01 7.398268965953e-01 -7.340704661391e-01 7.282704910361e-01 7.224277986456e-01 7.165432216037e-01 -7.106175976801e-01 7.046517696336e-01 6.986465850665e-01 6.926028962792e-01 -6.865215601233e-01 6.804034378540e-01 6.742493949824e-01 6.680603011269e-01 -6.618370298634e-01 6.555804585759e-01 6.492914683061e-01 6.429709436022e-01 -6.366197723676e-01 6.302388457091e-01 6.238290577843e-01 6.173913056492e-01 -6.109264891046e-01 6.044355105434e-01 5.979192747958e-01 5.913786889759e-01 -5.848146623272e-01 5.782281060680e-01 5.716199332362e-01 5.649910585351e-01 -5.583423981773e-01 5.516748697303e-01 5.449893919607e-01 5.382868846789e-01 -5.315682685835e-01 5.248344651061e-01 5.180863962557e-01 5.113249844635e-01 -5.045511524272e-01 4.977658229563e-01 4.909699188170e-01 4.841643625769e-01 -4.773500764508e-01 4.705279821460e-01 4.636990007082e-01 4.568640523676e-01 -4.500240563852e-01 4.431799308997e-01 4.363325927746e-01 4.294829574454e-01 -4.226319387680e-01 4.157804488670e-01 4.089293979840e-01 4.020796943279e-01 -3.952322439241e-01 3.883879504654e-01 3.815477151626e-01 3.747124365970e-01 -3.678830105719e-01 3.610603299660e-01 3.542452845872e-01 3.474387610270e-01 -3.406416425155e-01 3.338548087775e-01 3.270791358895e-01 3.203154961370e-01 -3.135647578731e-01 3.068277853781e-01 3.001054387191e-01 2.933985736122e-01 -2.867080412838e-01 2.800346883342e-01 2.733793566016e-01 2.667428830275e-01 -2.601260995228e-01 2.535298328351e-01 2.469549044172e-01 2.404021302969e-01 -2.338723209473e-01 2.273662811591e-01 2.208848099136e-01 2.144287002569e-01 -2.079987391757e-01 2.015957074739e-01 1.952203796511e-01 1.888735237815e-01 -1.825559013953e-01 1.762682673602e-01 1.700113697655e-01 1.637859498067e-01 -1.575927416716e-01 1.514324724285e-01 1.453058619151e-01 1.392136226293e-01 -1.331564596211e-01 1.271350703868e-01 1.211501447635e-01 1.152023648265e-01 -1.092924047871e-01 1.034209308931e-01 9.758860132936e-02 9.179606612189e-02 -8.604396704195e-02 8.033293751264e-02 7.466360251697e-02 6.903657850753e-02 -6.345247331791e-02 5.791188607588e-02 5.241540711817e-02 4.696361790712e-02 -4.155709094895e-02 3.619638971392e-02 3.088206855820e-02 2.561467264749e-02 -2.039473788254e-02 1.522279082639e-02 1.009934863353e-02 5.024918980770e-03 -8.824636488425e-14 -4.974919786756e-03 -9.899361531700e-03 -1.477285612199e-02 --1.959494423991e-02 - Type L N - 0 0 1 -1.000000000000e+00 9.998355147105e-01 9.993421562398e-01 9.985202167122e-01 -9.973701827725e-01 9.958927352436e-01 9.940887486459e-01 9.919592905814e-01 -9.895056209813e-01 9.867291912182e-01 9.836316430835e-01 9.802148076310e-01 -9.764807038877e-01 9.724315374315e-01 9.680696988392e-01 9.633977620041e-01 -9.584184823246e-01 9.531347947667e-01 9.475498117999e-01 9.416668212101e-01 -9.354892837886e-01 9.290208309025e-01 9.222652619442e-01 9.152265416659e-01 -9.079087973984e-01 9.003163161571e-01 8.924535416387e-01 8.843250711084e-01 -8.759356521824e-01 8.672901795064e-01 8.583936913341e-01 8.492513660070e-01 -8.398685183386e-01 8.302505959068e-01 8.204031752555e-01 8.103319580098e-01 -8.000427669069e-01 7.895415417463e-01 7.788343352617e-01 7.679273089188e-01 -7.568267286407e-01 7.455389604655e-01 7.340704661390e-01 7.224277986455e-01 -7.106175976801e-01 6.986465850664e-01 6.865215601232e-01 6.742493949824e-01 -6.618370298633e-01 6.492914683061e-01 6.366197723676e-01 6.238290577843e-01 -6.109264891046e-01 5.979192747957e-01 5.848146623272e-01 5.716199332362e-01 -5.583423981772e-01 5.449893919607e-01 5.315682685834e-01 5.180863962557e-01 -5.045511524271e-01 4.909699188170e-01 4.773500764508e-01 4.636990007081e-01 -4.500240563851e-01 4.363325927745e-01 4.226319387680e-01 4.089293979839e-01 -3.952322439241e-01 3.815477151626e-01 3.678830105718e-01 3.542452845871e-01 -3.406416425154e-01 3.270791358894e-01 3.135647578731e-01 3.001054387191e-01 -2.867080412837e-01 2.733793566015e-01 2.601260995227e-01 2.469549044171e-01 -2.338723209472e-01 2.208848099135e-01 2.079987391756e-01 1.952203796510e-01 -1.825559013952e-01 1.700113697655e-01 1.575927416715e-01 1.453058619151e-01 -1.331564596211e-01 1.211501447634e-01 1.092924047871e-01 9.758860132929e-02 -8.604396704188e-02 7.466360251690e-02 6.345247331784e-02 5.241540711810e-02 -4.155709094888e-02 3.088206855813e-02 2.039473788247e-02 1.009934863346e-02 -2.180811153812e-14 -9.899361531766e-03 -1.959494423998e-02 -2.908311310810e-02 --3.836039164508e-02 -4.742346358301e-02 -5.626917445163e-02 -6.489453302867e-02 --7.329671266526e-02 -8.147305248589e-02 -8.942105846211e-02 -9.713840435981e-02 --1.046229325594e-01 -1.118726547487e-01 -1.188857524890e-01 -1.256605776527e-01 --1.321956527344e-01 -1.384896710345e-01 -1.445414967152e-01 -1.503501647310e-01 --1.559148806314e-01 -1.612350202393e-01 -1.663101292030e-01 -1.711399224253e-01 --1.757242833674e-01 -1.800632632314e-01 -1.841570800207e-01 -1.880061174797e-01 --1.916109239149e-01 -1.949722108968e-01 -1.980908518463e-01 -2.009678805055e-01 --2.036044892942e-01 -2.060020275558e-01 -2.081619996917e-01 -2.100860631877e-01 --2.117760265342e-01 -2.132338470410e-01 -2.144616285503e-01 -2.154616190492e-01 --2.162362081830e-01 -2.167879246744e-01 -2.171194336468e-01 -2.172335338584e-01 --2.171331548467e-01 -2.168213539861e-01 -2.163013134635e-01 -2.155763371712e-01 --2.146498475232e-01 -2.135253821946e-01 -2.122065907892e-01 -2.106972314371e-01 --2.090011673253e-01 -2.071223631645e-01 -2.050648815953e-01 -2.028328795354e-01 --2.004306044739e-01 -1.978623907118e-01 -1.951326555560e-01 -1.922458954659e-01 --1.892066821602e-01 -1.860196586822e-01 -1.826895354318e-01 -1.792210861633e-01 --1.756191439552e-01 -1.718885971536e-01 -1.680343852933e-01 -1.640614949996e-01 --1.599749558740e-01 -1.557798363682e-01 -1.514812396472e-01 -1.470842994485e-01 --1.425941759367e-01 -1.380160515603e-01 -1.333551269115e-01 -1.286166165939e-01 --1.238057450998e-01 -1.189277427024e-01 -1.139878413639e-01 -1.089912706646e-01 --1.039432537543e-01 -9.884900333146e-02 -9.371371765056e-02 -8.854257656305e-02 --8.334073759347e-02 -7.811333205441e-02 -7.286546120297e-02 -6.760219244178e-02 --6.232855556732e-02 -5.704953906849e-02 -5.177008647810e-02 -4.649509277994e-02 --4.122940087424e-02 -3.597779810401e-02 -3.074501284474e-02 -2.553571116011e-02 --2.035449352599e-02 -1.520589162508e-02 -1.009436521457e-02 -5.024299068919e-03 --2.180811153812e-14 4.974306043314e-03 9.894476794432e-03 1.475645640459e-02 -1.955627809356e-02 diff --git a/tests/deepks/602_NO_deepks_s_H2O/model.ptg b/tests/deepks/602_NO_deepks_s_H2O/model.ptg deleted file mode 100644 index d83fc960b6c4b246b6e2dee5c522baa21c8bfcd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191935 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 CT4hoI diff --git a/tests/deepks/603_NO_deepks_CH4/F_delta.dat b/tests/deepks/603_NO_deepks_CH4/F_delta.dat new file mode 100644 index 0000000000..9c0885dcb2 --- /dev/null +++ b/tests/deepks/603_NO_deepks_CH4/F_delta.dat @@ -0,0 +1,14 @@ +F_delta(Hatree/Bohr) from deepks model: + type atom dF_x dF_y dF_z + C 0 -0.000656038 0.000262695 0.00197939 + H 0 4.71026e-05 3.99769e-05 -0.00495014 + H 1 -0.00224392 8.16928e-06 0.000735989 + H 2 0.00133665 0.00247291 0.00103619 + H 3 0.0015162 -0.00278375 0.00119857 +F_delta(eV/Angstrom) from deepks model: + type atom dF_x dF_y dF_z + C 0 -0.0337349 0.0135083 0.101785 + H 0 0.00242212 0.0020557 -0.254547 + H 1 -0.115387 0.000420082 0.0378461 + H 2 0.0687336 0.127162 0.053283 + H 3 0.0779663 -0.143146 0.0616329 diff --git a/tests/deepks/603_NO_deepks_CH4/INPUT b/tests/deepks/603_NO_deepks_CH4/INPUT new file mode 100644 index 0000000000..cb72bf49cf --- /dev/null +++ b/tests/deepks/603_NO_deepks_CH4/INPUT @@ -0,0 +1,33 @@ +INPUT_PARAMETERS +#Parameters (1.General) +suffix autotest +calculation scf +dft_functional lda +ntype 2 +nbands 6 +symmetry 0 + +#Parameters (2.Iteration) +ecutwfc 50 +dr2 1e-7 +niter 50 + +#Parameters (3.Basis) +basis_type lcao +gamma_only 1 +force 1 + +out_descriptor 1 +lmax_descriptor 2 +newdm 1 + +#Parameters (4.Smearing) +smearing gaussian +sigma 0.02 + +#Parameters (5.Mixing) +mixing_type pulay +mixing_beta 0.4 + +deepks_scf 1 +model_file model.ptg diff --git a/tests/deepks/602_NO_deepks_p_H2O/KPT b/tests/deepks/603_NO_deepks_CH4/KPT similarity index 100% rename from tests/deepks/602_NO_deepks_p_H2O/KPT rename to tests/deepks/603_NO_deepks_CH4/KPT diff --git a/tests/deepks/603_NO_deepks_CH4/README b/tests/deepks/603_NO_deepks_CH4/README new file mode 100644 index 0000000000..8987fb3722 --- /dev/null +++ b/tests/deepks/603_NO_deepks_CH4/README @@ -0,0 +1,2 @@ +This is test for deepks model +with 117 descriptors diff --git a/tests/deepks/603_NO_deepks_CH4/STRU b/tests/deepks/603_NO_deepks_CH4/STRU new file mode 100644 index 0000000000..ccd91e0913 --- /dev/null +++ b/tests/deepks/603_NO_deepks_CH4/STRU @@ -0,0 +1,33 @@ +ATOMIC_SPECIES +C 12.000 ../tools/PP_ORB/C_ONCV_PBE-1.0.upf #Element, Mass, Pseudopotential +H 1.008 ../tools/PP_ORB/H_ONCV_PBE-1.0.upf + +NUMERICAL_ORBITAL +../tools/PP_ORB/C_gga_8au_100Ry_2s2p1d.orb +../tools/PP_ORB/H_gga_8au_100Ry_2s1p.orb + +NUMERICAL_DESCRIPTOR +jle.orb + +LATTICE_CONSTANT +47.24314972 #Lattice constant + +LATTICE_VECTORS +1 0 0 +0 1 0 +0 0 1 + +ATOMIC_POSITIONS +Cartesian #Cartesian(Unit is LATTICE_CONSTANT) +C #Name of element +0.0 #Magnetic for this element. +1 #Number of atoms +0.999619 0.000169648 0.00131031 + +H +0.0 +4 +0.998911 6.75673e-05 0.0374835 +0.0418908 0.000157703 0.987531 +0.980183 0.965348 0.9869 +0.98072 0.0340401 0.987153 diff --git a/tests/deepks/603_NO_deepks_CH4/descriptor.dat b/tests/deepks/603_NO_deepks_CH4/descriptor.dat new file mode 100644 index 0000000000..7181d8c43e --- /dev/null +++ b/tests/deepks/603_NO_deepks_CH4/descriptor.dat @@ -0,0 +1,85 @@ +C atom_index 1 n_descriptor 117 +1.13051 0.703698 0.103621 0.00191325 0.00181794 0.00257326 0.00140769 0.000915016 +0.000475128 0.000286721 6.99655e-05 2.65678e-05 2.65416e-06 0.716349 0.813836 0.856087 +0.605557 0.629426 0.659044 0.226116 0.249569 0.300868 0.0526797 0.0612733 +0.0870913 0.0236786 0.0249165 0.0316881 0.00990581 0.00997727 0.0110956 0.00762497 +0.00837003 0.00873899 0.00334517 0.00350533 0.00355485 0.00245104 0.00260351 0.00268705 +0.000528059 0.000631882 0.000870208 0.00050941 0.00051543 0.000592504 6.95549e-05 7.58405e-05 +0.000113063 6.12229e-05 7.27688e-05 8.16014e-05 7.89308e-18 1.4457e-06 0.0439428 0.0600377 +0.0706762 -2.21309e-18 1.73707e-06 0.0550274 0.0597299 0.0615888 -7.47043e-20 6.23967e-07 +0.0194631 0.0225784 0.0286836 1.22996e-20 2.97364e-07 0.000969512 0.002006 0.00599035 +-3.23766e-21 1.46987e-06 6.02269e-06 4.1775e-05 0.000649169 -1.4503e-20 2.23698e-09 6.22751e-05 +0.000228213 0.000242996 3.55488e-21 3.81829e-09 2.53295e-06 1.48281e-05 4.44442e-05 -1.17073e-21 +9.69318e-12 4.87239e-07 2.23597e-06 3.01673e-05 5.24091e-21 4.45538e-10 6.92516e-06 3.09454e-05 +3.51322e-05 3.11939e-23 3.17195e-10 2.91717e-07 7.84752e-07 1.00031e-06 -7.29675e-22 5.22578e-11 +1.61953e-06 2.88157e-06 7.14421e-06 1.38386e-22 9.26581e-12 7.27536e-07 3.36917e-06 4.41974e-06 +8.35905e-24 2.71724e-11 8.82162e-07 1.47173e-06 2.0922e-06 + +H atom_index 1 n_descriptor 117 +0.891346 0.802892 0.383388 0.0978287 0.0136916 0.00265989 0.000434148 0.00058073 +0.000365413 0.000621313 0.000120631 0.000105901 1.76642e-05 0.514179 0.537069 0.833201 +0.110767 0.120793 0.167919 0.00768367 0.00819791 0.0734966 4.07558e-06 1.57946e-05 +0.0589017 0.000328562 0.000438976 0.00771848 0.000115872 0.000170311 0.000930763 6.33063e-06 +8.90979e-06 0.00098513 7.04298e-05 7.19713e-05 0.000228878 9.13378e-05 0.000108967 0.000355001 +1.60989e-05 2.42866e-05 9.30242e-05 3.53289e-06 3.00943e-05 3.57695e-05 2.67306e-05 3.06656e-05 +9.68166e-05 2.09597e-05 2.46954e-05 3.23526e-05 1.1336e-17 1.24364e-07 0.304761 0.47904 +0.49954 -1.945e-19 2.57666e-07 0.109572 0.190674 0.205656 -3.35365e-20 2.30287e-06 +0.00462852 0.027016 0.0302531 4.02561e-19 3.26176e-07 0.00079857 0.000838802 0.0206806 +4.91703e-19 1.60467e-07 0.00071726 0.00097507 0.0104902 4.87763e-20 1.63295e-07 5.23944e-05 +8.04796e-05 0.00368284 2.08191e-22 6.58954e-08 8.00097e-06 9.82118e-06 0.000175522 -6.75346e-20 +2.93897e-10 0.000104796 0.000243882 0.000247266 -1.45656e-20 1.37035e-09 4.31265e-05 6.32552e-05 +0.00043417 -6.13225e-22 2.00807e-10 1.27349e-05 1.85798e-05 2.12783e-05 -1.53156e-21 2.10226e-11 +8.24544e-06 4.01646e-05 4.26073e-05 -2.24077e-21 6.64943e-11 2.7887e-05 3.20734e-05 4.051e-05 +2.72161e-21 9.68214e-11 8.5201e-06 2.2255e-05 2.70415e-05 + +H atom_index 2 n_descriptor 117 +0.924425 0.78336 0.258635 0.0327822 0.00480918 0.00156963 0.00128878 0.00180535 +0.000580856 0.00028706 4.99281e-05 5.28288e-05 1.53285e-05 0.377784 0.418674 0.806691 +0.0458857 0.0561087 0.159165 0.000347613 0.000425921 0.0973756 0.000497007 0.000752978 +0.0256184 0.000118598 0.000218615 0.00196201 6.79379e-05 0.000158449 0.000881659 6.22042e-05 +9.43489e-05 0.00103191 1.32317e-05 1.60077e-05 0.000205953 1.86148e-05 6.91623e-05 8.4565e-05 +3.08074e-05 5.51926e-05 0.00022585 1.61561e-05 3.13712e-05 7.95448e-05 1.41021e-05 2.5131e-05 +2.87446e-05 1.76295e-05 2.72155e-05 5.90907e-05 5.58478e-17 8.98598e-08 0.429661 0.483814 +0.529051 -2.97475e-19 2.5513e-08 0.0829462 0.126411 0.154793 -8.91328e-20 5.3681e-06 +0.0065206 0.00884286 0.0280742 -3.73745e-19 5.33708e-07 0.00054867 0.000831367 0.0302314 +-3.16057e-20 3.74817e-06 5.26096e-05 0.000184148 0.0020652 -4.29274e-20 7.98894e-09 0.000231799 +0.000274402 0.000427108 2.4447e-20 9.41723e-11 8.98453e-06 1.17556e-05 0.00129902 6.07151e-21 +2.42025e-09 4.71186e-05 5.01122e-05 9.30046e-05 1.5954e-21 1.78944e-08 8.75828e-06 0.000112731 +0.000149764 1.59902e-20 1.22423e-08 3.01432e-05 6.08699e-05 0.000181709 2.78522e-21 1.54994e-12 +7.42869e-06 2.42504e-05 3.49112e-05 5.76948e-23 1.26031e-09 1.56917e-05 3.39258e-05 4.17693e-05 +2.4308e-21 2.04486e-09 2.00941e-05 2.95792e-05 3.57373e-05 + +H atom_index 3 n_descriptor 117 +0.913363 0.792095 0.289227 0.0443309 0.00572723 0.00142781 0.000869978 0.00159605 +0.000641642 0.000403263 5.95182e-05 4.77901e-05 1.58301e-05 0.399651 0.452123 0.816422 +0.0554405 0.0704457 0.161031 0.00114326 0.00139087 0.0961849 0.000327752 0.000610508 +0.0353852 9.00281e-05 0.00023077 0.00126538 8.09637e-05 0.000213089 0.000691751 4.46964e-05 +7.77427e-05 0.00144531 1.61419e-05 2.01496e-05 8.0661e-05 6.54162e-06 7.78339e-05 0.000103328 +2.36278e-05 5.25856e-05 0.000283829 1.29363e-05 2.84719e-05 4.91395e-05 1.67304e-05 2.59762e-05 +3.6231e-05 1.64487e-05 2.83872e-05 6.22486e-05 2.49823e-17 3.03251e-07 0.402117 0.477663 +0.533717 -1.25935e-17 1.57464e-07 0.0874666 0.138226 0.175615 1.35259e-18 1.04788e-05 +0.00992896 0.0140802 0.0203642 5.1125e-19 2.74283e-06 0.000204529 0.000395892 0.0313834 +1.28917e-19 2.38772e-06 6.84929e-05 0.000293667 0.00418605 -1.1806e-20 1.10382e-06 0.000215612 +0.000294955 0.000467863 -2.80361e-20 3.15436e-08 1.03603e-06 2.90338e-06 0.00110046 -2.26426e-20 +1.34107e-09 7.23877e-05 7.56314e-05 0.000189078 -3.64857e-21 4.25449e-08 6.30008e-05 0.000109865 +0.000156141 -1.77039e-21 6.4174e-09 1.79563e-05 4.97805e-05 0.0001378 -1.61074e-21 4.52801e-09 +3.46533e-06 2.50743e-05 3.95219e-05 -4.12587e-21 2.02981e-09 2.57048e-05 3.41355e-05 4.41075e-05 +9.10941e-22 2.02151e-09 1.63737e-05 2.6027e-05 3.66866e-05 + +H atom_index 4 n_descriptor 117 +0.908126 0.795827 0.306024 0.0518045 0.00645375 0.00146376 0.000691842 0.00142702 +0.000643485 0.000471253 6.65418e-05 4.90339e-05 1.65665e-05 0.412988 0.470767 0.82111 +0.0627147 0.077482 0.162377 0.0017557 0.00221076 0.0941865 0.000245354 0.000489416 +0.040625 9.29584e-05 0.000255847 0.00144692 9.40768e-05 0.00023005 0.000527568 3.71795e-05 +6.15587e-05 0.00158019 1.96797e-05 2.34767e-05 6.24226e-05 1.13818e-05 8.48051e-05 0.000112119 +2.06064e-05 4.99636e-05 0.000290372 9.95038e-06 2.86137e-05 3.88044e-05 1.86499e-05 3.03491e-05 +3.90665e-05 1.58437e-05 2.92033e-05 6.03776e-05 -1.584e-16 8.60644e-08 0.386338 0.475062 +0.533869 3.09596e-17 2.85971e-07 0.0912914 0.144742 0.184983 4.08794e-18 1.30113e-05 +0.0120264 0.0160859 0.0176062 -4.57381e-18 5.37623e-06 0.000134322 0.00022678 0.03097 +3.00811e-20 8.62361e-07 9.91043e-05 0.000379767 0.00556346 1.6712e-20 1.43247e-06 0.00022473 +0.000413201 0.000522188 3.18003e-20 1.79391e-07 7.96388e-07 1.38494e-06 0.000893815 3.22801e-22 +2.80217e-09 9.29917e-05 9.42385e-05 0.000238544 -2.77247e-20 5.71683e-08 8.23789e-05 0.000145079 +0.000154979 -4.18033e-21 3.52963e-09 1.40291e-05 4.34038e-05 9.94006e-05 -4.99076e-22 6.25148e-09 +3.51916e-06 2.80089e-05 3.97737e-05 8.54115e-21 2.91066e-09 2.9276e-05 3.76923e-05 4.33201e-05 +-1.2099e-21 2.34623e-09 1.43844e-05 2.5408e-05 3.54167e-05 + diff --git a/tests/deepks/603_NO_deepks_CH4/dm_eig.npy b/tests/deepks/603_NO_deepks_CH4/dm_eig.npy new file mode 100644 index 0000000000000000000000000000000000000000..3d14f05f4d32024730f25891c4fc2a04234ba016 GIT binary patch literal 4760 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 literal 0 HcmV?d00001 diff --git a/tests/deepks/603_NO_deepks_CH4/e_base.npy b/tests/deepks/603_NO_deepks_CH4/e_base.npy new file mode 100644 index 0000000000000000000000000000000000000000..de6dc5d170aa66f9fda688801892082c039a6004 GIT binary patch literal 88 zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= eXCxM+0{I$-I+{8PwF*dp>+mh9Eemew9{>Ptjv4*{ literal 0 HcmV?d00001 diff --git a/tests/deepks/603_NO_deepks_CH4/e_tot.npy b/tests/deepks/603_NO_deepks_CH4/e_tot.npy new file mode 100644 index 0000000000000000000000000000000000000000..ac1b17f3999d3988214b465c3fa8e51c6d6614cc GIT binary patch literal 88 zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= dXCxM+0{I$-I+{8PwF*dp>y%NrueY$l0RUw97#aWo literal 0 HcmV?d00001 diff --git a/tests/deepks/603_NO_deepks_CH4/f_base.npy b/tests/deepks/603_NO_deepks_CH4/f_base.npy new file mode 100644 index 0000000000000000000000000000000000000000..0803004871c705fae130429ec9913136cb5b8325 GIT binary patch literal 200 zcmbR27wQ`j$;jZwP_3SlTAW;@Zl$1ZlV+i=qoAIaUsO_*m=~X4l#&V(cT3DEP6dh= zXCxM+0{I%IIts>`ItsN4aKN?iROpdkJGR?%aLdeAxV&ip`ItsN4aKLprYwxkYN!#uBhItn__buArbv)%yM!}8!J7rfa3S_I? zZ{w^w{flPU{(EfEUtcf3V{fnU=(P|e*Cb{R(qGVs_VOrm+l7u(iT<5 literal 0 HcmV?d00001 diff --git a/tests/deepks/603_NO_deepks_CH4/grad_vx.npy b/tests/deepks/603_NO_deepks_CH4/grad_vx.npy new file mode 100644 index 0000000000000000000000000000000000000000..90c37a0e16f400cb5a798d278d85648f125472d1 GIT binary patch literal 70280 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

@%U$sv+j0g#max)YJG$w*g&T+%)P8IEk&g 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%0Aj zlr7A8bE}-m%MR|%kRy}A|6M?&tE$4F4u9HMRM%a-j|Vyi!_)wmMJu0M1zs& zy?#!6F#|_4v~Mod$pTu1TI}kuMbL87ec{vl6(C-8O&tlH!0xoR4i+f-5z_4WlSQwQ zpti@KW`hGYJNy0Fz(MD1B~ z6}t6-?Gc@3qwPL`bxA=Bi$Gj<{;~<1cR`J)o@eXCdKbcun>^6C-;Ew8WZg*h=>y#_ zn68PanB$7avC{QUXKAqlx6EVK=^*d(iR;+K5>)o!6&ih=7<|9t4_=?u4xouJfovmNgT70bq1YuZikx9KxbvUFh!sB{Y&dxKDIt#z#tb+9 z4dO0A@%K6tjIB1%1&)1fx};L%oiwQ%QQ-v${xR1o&wK>#CQCa6qR&#_mRj$nk_N1s zw4pUr_y~3U8J!Y+9>BD1T1!@gXxKQ_?p(W-4wLz+FN!fQg0*wg>y)mlko?pXe=NTm zX6W^Ya@~~*zC99ubnBctbb0-^$4}N3UbvQ2u_P#rwZzb70snJPdhhu76 z!t{JtTuX1C>Df7y*0FlsI`A;Oj5`TvNPpu#ih>XLtsVNT?OvUf^K z5Pmg^<^!?MH0Dq|LeV&jp4V7@k{e4!x9Q6A_ZwS~`G13-TK{!|n@SDSW526VQ>1{> za%2TkKnKm}%RG_|k#}$DO-8DB6Ryu%HK3MDCz&tBmEd_V_V?Z`{){+D+iwNaq(Pi) z(JSMj8m!~9=9?=!y6}R8^}3LP6Mp|2y_M^)CxD&-ck(~=5O`5oa-UDz8itMk-j;t^ z0!L5WL6yXwJG1<+`g>k9@HR8sW9m!7kWKUAuOpq;Fmmzp#a^mM7*}ILlcI_zhLbq^*>R+SzgwmOv zgOfT&fN8Qdq@cDC-0aW&q{zPq4ldPQR_omco@>@TDo$^3-@cBRcz*T*8W|=xKZnet z`fU0#3q4K@l=qCCQ7=W`QWZ=&@Wq71qP3TqCRX6`T+mSBS!yir^w|&JS_+Uz>8BF< zo;8$w=>(m8cNd`{0lm4~IA0^nZhaeUb_1EL21k|DMkMV{5%A_+2+Fr;sTdrRBkU%K zCZAa$2RC{bjn$pofih?Gy+yt6NPqb5Lnz>j@;xfPGU&MzSgNPxjpIeZRGFh6zx5(I zc%65Um)(sj(yXFC%tRpNmx8m2AObR=V1d=-aO~Djfj{|cZ}=lkud%_y0pjm#{A%Lk zz@FXr|0$;?3@6TK%X#`S!Fb9C{HK!HVFjVIth#~#zAcZH(+K}V6|SVAE{zQ!vDL-( z?e)*#(!4%qqihPIo;y8`-^<6!?0LQxB1s4+51f7$q{AG~D!cZ2J!nAV)qc`85=wiD zvjtIohJ8kt@2|!E1#RR8N0wx!FpJ;c@Myyt+h)PrS#zC$$}{Zbv<9lM?fablK(HtD zy&A)AxGjb;pB8)m;O;td&~jQ%`Xzzo_r5>hlfZ-R|Ld6br=3OR=(|R@xiXZ&`+Lqr zQ4;&Ow#O_tdq7CzKfZhldZ@20@^h+oS z>4)C&W~IwP@#hIyr=uIe+vDUaN;`!p*N;wjP`L=X4oSVLm;8nB=iE3FZswwUb$3r~ zylg=%$ur!!!-;r1H?6oJi*M-fQ_1V+J|)9lLt##eh#Jh=G+4+eOC7V{UORQkD+uqt zF2=>a5saQqJCOw^hCrd2Nv==yE|7QY{;t=5rLZv~X^`co1m66jNv>@kBfK0iVR+kC z4xYB|(7sm{0>7W;>2$BZjoo~|JZi2_h5y|AT~`1<3|uC~Pm1bq0R8hDn|=M)APc#2 z^~Z@PP--Z$Sb2`2T6yr=YSu*}=McF7$JDQ5ikit5Z{7Bg>P_O1*slm5Ct-8#3Ihb) zD9!o&v^wz5b}wVYn;W|aIX)aCrH4^m@fIs(lW3$dJm4KUW%aq&b>X2haiA*jzA0DF z05If^_D`AF1wSuv_wqg$gc@e6Av*nixMKg!vy*z7V1V9g!(!1N*gUuGAiQiv3uC{& zSv;9WA!M9C$&3CFf(tqBzOat~n<2yO+KSAWxTjjF`6vTck~bKe*4Kncyw>Bq6Iux3 zi~ZteGk3w8aR-pYPqdnryWy-GYtY+K`(C4iN%YSuR4jC^oDf-ccdKaYCQ$D`kg=BP z0JQ5T80n@4L3$PQNF{9qh!048?nzrrm<^bGcqc{_NZ>HjEblt><$kp`8^aWmSvDnA z@5@5mHB~Z>ta$_pH*S)Qd=Y^4Tix6BnL*4~}V2uL&L z$&@!9h8f^~=WTrVfVLlQlKw1of=5#_T4WK#-~DJRQ*mD$(wLW7tAbm4SP^OKen;gIh2=dnP6LMVgi+)hdyfjd>SmXAcO;m6wU zQy(8c#_nH;(vPVmftnsdjRy`&Fvabk2X~nl?A)k(z-cOm-47o6_ugX_r8j)O$hChR z``yjyOcuk94RERl$v+-J3ap~@7iJYaYS9B=0tYEn;r{uY$zm>0SAD|!rMv0CBUou+~ z#ehUP8#BvaBr0A=Xz5djWJ}YC8=FNk5O^xx6IX7VAwUXBHml?Q8 z_1#0pL}RdYNOIqXVgt1h$-f7iGpMm6VS8xm7ZSAA3k>X9BBU-nz2PMp1Gb;!b%~4f zW04n2`HWcoK&sS@s;69^kZ(Ja%c3jf)13PA<1^Sr_7Z zb9DWc24ulCL5iT}^xvrE(>>Xii3;NXj+~9ZA_g@FW}Pu3QzHzz+_mR15(VV^riwda zlSt@(K1+<$D2kTkRoaOQN4)kt1%_k=P(|+avJD9VUTHH@H~$z9(+brVNq42;4YvjI zp~~BEKwm+>JNF)x-FwnL`s6&kqqV`p5+RDwdQY@Wtn*+FwsRBydMoIPhp^dV{x+x` z{`f{Y;X9yKIo;MoABl2Ga#!ag-oeF4yowT!87BT8fx}1PD^@Ia{oECuT3DS4bG->Z zu-xh4^>-4{(17H;Tyj(`Nw6!qgF|WBWoYK*+CQt8?E0!`Lbv; zb44`ddg@Zz%EW*rXY&=S;MFjbu&;e##-@0o#Wo6LJA!^`4_SF-J%z88DSFYzlW_Qm z&alc>09I9K;MJwK2*#~(wMv7PDD-h&C-_o?fI+zqsfHZ(#oNen#)J~<;k|ruij%ea zD$RL{`g3YXWI^e(n9nG3)SKQC@+SJi?$wDK>z#)uZEjk*KkdYcb99K7I%xvER^LX> zhAp&4um1f)QxG^QLw%Xts}$t^iR+3zK8mvn6j!@#*e*R3aF(RrIu%`>Yk6-|M~WFg zUT<9$eUF^XOv1Vi+zHey;-0N#yuk0>Jf7d$3Dtz!%k1_p)Yzjlh!xQxlqajt{T29Ei9h?fVmHjM# z3Cg>C;bQBShBP(W^;{N|@Utc>8&&WK;QlYLNFv(>9#!>5e3d4mb*x{xgQZM-1CxLR@x($uN3^COqG$=`lNQO;k~0u9rVE{|7-&DaL|rF&#PkYZycpbuL>l<)F5v*<>Z&AryD#bPhEj`p@Rwf6`WW;6;5bxB#zI1nH8zR)|~v;`xhB_K+g*|HX%{%D3I{6<>_8quY8~B`Y z@E3tRazXn6@jF@KYMCb+D=kKTAlqSYuZWo|^zL6aHitBwzU#j_O!4qLdSDeN?pEJ;zH} z&iesPHYkWK2hNMziBA!>PR(6c*(Bc6qpNybdc6b%G8+6nG}%X*42_8+OVt6ZOnKBMO(%vY%s)_}abbiJJ_1?(yi-6m6BCw!~@n%;G!gGRqt z)0I1ZMgGTPO-~Wg-|*&#+uY*o=#%OD#EsG!0;sC6iZO&phtx%Rmp2=Y(gYG$sl>j% zo$9zZ>mE9|opj$x@Hfu=M{bbf$KD#n`mvVZnYExE{gv&S@k6I|nAJIZdeFOLZqIY* z2653(g~P)UJ(BWCB<47#j3*yVqZ4iUIh6+^pj1;mb8NB)*R}d)Cz0w5qQw6& z78NQ0R3pqU0+ZsAfam8bg6IbF>rZ>4PA-E*q}yldetL^l#lIGB|L2DdzbK~_AfU;rPl^5<@^~)D(DOG_Rb+FC^VE;sHlbJ!!JSR%mh#nC>~SKya~^k z>pRbuW)r`c_aB{E{0q$De96))p92FsoOR+86YTctEnGn>6)axAm&u-54Q^elU=aW5 zgf+ihyI?s)0k!k?LrgE$0JRDtA}{b1)BZ}$RUzzz45&2a+<+HiIDJZ_=)yg?bk5@* z-;xmIN|%V1pdoq?lw+B6Dl$PmPwxUIsh5CiJ;?z8_5xeI?*X+C1&9tOqD zp@zJJRjBruxj9#s2u5LD!*q&s4@gumCy(xt!z0o;-NJfuSe=wAU13)XNJwf4)+Fyx zw?FUa^M_|J`tT^OkdWZ&cFo~+d+OIfb%1wpPMrmM<^BxbEpdb)n@d4-XPk+BhXzlX z5P3YqLwhmRadk9gM|||VY@i4?!=+fgr%-*G{Qij7Q`r84Q$IYNp;|J%w~@v*4&Zon zXe<~tp%NUrF!ERzt`_i~?g)JhpRVlhTvuDd2|eTr+FJewmJfRg^flsGn2kH{g=kUi z7dQRA)Tsa9W&JJ~r`>@QF^Qjg&+#3lJeBch79fWO3=#}|=I0?^zA(*lKm~>en7pI0 ztiXl!ceLS#>;bp#P}_14HTGq{aPq$XF1i=}>D1Hg^VmMMqe6uHS^QoZSxcD>Gs?%s zyrd6Y1f}nzo~^2`0?5OCckF@yX7VCbcP-V9P$m`rUq<6aP~Ypf*JQqlz{(W|O%_a!3SGAot zF(P<#5JqgXZ-5K0ZIuLN`;n?fQvz?`Ph`H_k+evJGB3 z?6RW6(xSE8Qqp_C)*Z^j0;U-x89&HK)wzefc$=Si6tAGhfS$Fvci&L_`tr*=s$S6C zpt?q0>H}5|Z?vA?&4*N0-@EqknNZ6?ig%KD7xj)k%ai1Heo%K__ivv{FLL4D`sb{9 z8S71GW)d=e3LBXBcgKD2!dpHH@82{C!0ua~5AH@ify6@r{p3XMNj)IQ;z8gZVpFK3 z%YMNN$zK%eCY&O{Lge&bt-X=Ns5#?iD#^~mFw;1-NQWV`>BPWL6~>9ZZjC80Ccby> zjmgd~h^K%bUw125k{3bGZpUoy6dA0UI=d`i*bfG^5-xvyN%X*7raVdrSp)e8z7_^# zHArnd`Sn*{a_sY!J2q?6beNGhJnd`k4W2F?qqlk4g}9=*KR_=gj3u;COUhLrb&pk) zBpqg=f{O;_x90z$_g2@UAdEnj)h+kzC8kjQSZllC%UKj$`QfxxOYvfIFP4%Bo3Yb}AJ~CEA5hr4E;HzH8Zk^a% z_&q6YY(K#V&ieh9d*`H9{ki8{LAN^%wv>7_cTVOR{DW@nN2&Xx(V%SthZN}9|Kcs zkv}`u6qpLH_(~O}ELQbQz9xo)0kb&a{a00K5BIW`dh1$NHio)v7b7oyoP7%Z(Ac2vRb= z4Zq^lN7SxOdE7_w+pHf5Y0NMdM`K3q&;?9-gmgK?mQZn-*2-<22prk@-7JanSLjA` zW6!p4IiN@yIl7lH1g_kQVd0lKM5_*jq;>NK+^w4Oe%>uz6#8Lrz4CcC+Ff~VJ^z6L z^QihwzUf5lO))tCc0L_O*px{v{JLs}WV{Nz7VZ=x+UMWw-Otvcca=9Ma34-#9h2$p zmg>(564Afgn{GkkK4(JhLUTCS*x&aK_~`?RMEqX)m98U2qj{I@U_I zLHQRgb@tcTN-Q83Z03Nws~ROd_z+;f?gjr{|0`M7or0yIq8n`A^PtqB{M`>qnedjY znNzJrFnm30_U(yBApA9W|D+Q?kv|Kc>^H6C#Wa^TPo(iWz*B3Pb_QaK5H+`vOECz+ zI2%oFuD8zcpB1~o3H>P`d^_wKK9U(*pAaOW3_p$C|5B^I=SGcvP&lbxX(owr{E4%l zTRR8a-{n;N_5O)?6pxP@u(M!MS3gu#MhjzW^3s;J&JEzfu^ZPNtu_Infjc{h+8p9K;3);VkyN5CBt8?|2NX7s?8oU4-qZW;!G z=eS|GFpu2mfGs4MaFw()=)^tw@n*!)GY}X)Ri(T3js-jY-ao-o@HUqDGSKNinRT!d zKXs~r<5W^-8U&|%$lH!>Z?&bLv zygAi2n{h8O(QMwOSN9f-z#_M zqIOT6tUi@Z^y;MTXu0VeA~}|-<)X9zG}3&OdCNBpe!)sQ^hQ@0R;=Gyvw$Sep3X2L4|! zEThE7SSL9Rr%l5rsQFPVEUzIOv**>zZJ>@gYa?3em}*Ip%9mb|}l{_H(W<2z@S-!2nOJ_cM92j$>D=Q~f< zFUey+X9I6`dLDwt`^!Ty&Htn5Jp8fz-Z*ZgWN$?!itLOep2xYZvS&$%GPAOkY}v^u zBP$`ZD0@AeV`ikp7a`d@BfDh$p5Nbazh37)=ejn|u3SR42el7XhxC{>mF>1IO+Y)A=TFOtR$%xHIQ7pw6p4hBw}-z<7IYEwf)VL#J>AgPQ)!ARGaS$zFM80|9uL!V3{0lYT0!g7 zqT%^l&G3Y{2Maxbc)QR@`IhjLXueg2#CA;$E5G+ZvoOsc-7_hfVMy@B@&jnS!_u1Y zZlBIyt+ilA7i%x>$VKR4Bd)E*_MBeG?(yNnZGI0-V_YTLV=ohbYkKNm?r937r$47{ ze##1ab>_h*bp{)Biia(qr}iSopx~AxDPUgz_IHt}#IrF-RrInx7Iy|KQP)Y$9zT!T zl(`4!0w=&w%`J|r&tDNJRD~|zT&w~6W>50#nWuoFG1K;~H~p|hI%nlwe-5Cijy*+L zAcdzGxX=*u)E^4m?4Fw6i)ZeMEM3HWF{R+wAj=q-k?t?myyyySnT5`7um%w*9JCmM9eLpJ z#f$f*%Ywo4CBKH?Z;|l7;Huw~CuJ%g%#wL11W;UM%j$nCQSLu+atMm^Wf$SrdM1pMUeiIu7FQ^CYZ>561f&@ z1Sbl-8YG1u0v#uNyKk)WppYq&Bt5_jCS^vZYCYEn!c~W)EUVl=tfz8u^u=XBeKU#4 z=*t^SoGx;bj`%;lZBa$uZ+H)TWzoZ)maKzzl_?6ifFX89Qxx)02%?&(@Uw4(6tFpb zK*qaH1@w_CaW7?h05+0;nA44Df}>v3HeVM%14jo}`J)%}AfrCCiGPX`c9ZbmzkA)(JeTR3~4J)9vx@X5VA*s3GslU2-)oJ6 zsZX5iK)H0@r30ZBNNU<@5;2kjwo}Y$ChBbA`xm~cU$kmK@4b=vru-VX&`9kaH`oYd z+RZ-gWi`W+;i8B~uR=k;Uo8Xdr~__oAF4iHYlZKxj=nv8kPik}MtXt43jVI-P{t#n zUiki6&@_puEYf{lZ_SQN#pHeaQypeg(9lG_h49e3dX`R2o-2~CL1WmZr*?k;CLYdr zCpg?4IbNT%eKzQZF>1QGcPZSdx2l_x&1~#}xW{6-1UFYm{_1hVWP}1X`k7_XenlST zxBMwNcX&uZuScpYFL{I3=&|Pn%>`gg*KMXBxebp!N^kt$ngt?;y<4h>?CYacLIa&t zGhwrC!svOvJjf>8zk=Ka3v{T#8ZB6znh=y0rJ1Bj**=cyUoZodySgHbpPM=W85~NjyO>O;7kWCG6GwiAoR>nuGhcPys6!$^x=wn_4%2Ns~-sWkaa-`|kk!|t8yf2Xl~ zRb_o1e9S0eWk*TFdka#&{H_1*HzT&9zMS%2krrj9A4uxaTLVr*-)ybrR_GC6`(e?g z7qqi@+R{7r!|f~oF+N}#fz(>G!_QsjfKB_ZfBfbkFy>@1Kcn;y1_oZD>=@et!6(nZ z=6TlvrOM+|hE)Fm8h^uEaosymms36AU0xjwBjpG&l<7F8v>7!|GV>lr ziCZmaOWK2*#Cvyd^-008Hb%s}=Nz0A zPKQ~(h)s4Q+^LUABotg@iicMZ1;RYbk7G{{Plpj!#(^ZRLxPu%9=&X!6sG*<}HIqLO#qQ|~O$pnTfP#Cr~IE5?~ybuEL&AV-_+ zhytP?o6o1+fxZ5gg{{CtE(0k4xm(ui#eZPAHO{#qY#REf|8sW?_y!tJUZWfTdZK%9EofeujnKYIQ54{is=(BE&TL-gF_McU+R52K0OPdOA*c~N=M{`Mcw_x zB^nQaK3-t-@jR}+RgPQ^mNjk%l|RmY7-19qEoocBt#Vkqz+R_Yf8QVN0^_|0fv zgFv7<7KJ}9n1rcyez~x$6Nj>I4SHT`e~MjX{mG&JO%dB^pQ@IMlf*tA;8hx&$k5gY zu|!J4L1G@6!KXNj97#XCvoG!b2?&t*oIP1L0_!Z8{t!}DVbkKmb<3kkDE!|QE)AYK zA|Khr2+#(g6)h6^)6N8}AZg|fcS16n+V=Qxk}3_GvFA{{W95q32_wPJQ*M}UQfyIg znHrLRigF6YC{cM^gH3scG4|PUi(3vUVlDU0`?B>oFb;;E*U-R;GL4whn&Cez_q_vj!N1pPZxnP!6g|9Mnl%YoP8p?K15I z1(sRkkT;x5%ps{2bh2dU09K(N;ZOe3Ae|G6bYX7c09Vb|d$+L{EJm13^AWk<3c5Q^ zbXOvPQ_M%h*yjzvbW%PL>sp2tgMMDtM1GT~bn|(|{Q)4D@!bEU#v;TuAM(En^26IR z?rh$>@E=^AqEotl;~l#0bW7@!c_#Y86FO14`vKc-(|j7MNT~m^d!gl?djQy@qcK|y zeStaq`YP33$irST2h>;UyJFRB!%{XZvi0Ng|J|=9n*lEr`lr^|jIiQw->qdm^s&&g z4AW->T@+Wk{w$}(5HI!~dzCBO5AP~I*y=M-#)9RO$+CG_u+Lw49shH`iG`QtcohhC z64Ka04LWwJ;owY5^y1Y+*lXr)@_6tp+Owpr0h#Bqt77aL6&=L{^Y=fK@#U3Jz8`*b zSa}MXWfNqLQu;tcm6Ua@ks@M$K_ToByH8jYSWIA3FoB;`0`^}Hy@Ou|p88M=^g}oK zc3P_AbcowZZSjonFiw!E$^7=bHE=hotV?bnda{`($^t%Qf!|Cs>HKt^z;FQSEuT-v zwf^T@Zt!0?FtsyywX@OyjqqFP;$Ca;hvxn2Yh3GqRKzQF+olKS^;csmeoq^S*2-Gi z+IPUfY+Xx}s$Do@7^1-LPJ{f6HE&q{O(XP1GMM-69=vSb4zue& z42YZU!B*|c$kdD^0%dr8#@rJ%;=Qfm@vKx8^k@9LD!|eUOM}lgJ=kuAGk+6=u2H@q ztP`5XR!=JeoM_cz%l1_>kmj6g}gu*YT%%K<9{q;Xiky%zBr zTb<|PkL*fA9CkA8BmsWt%)6MTC+UyTM@-9P6Q_xJ2Ace~c|<%~a@Hct<+af_r!0+X z4S5vREiHCe|2*3MTYE&kXoD2WT3NOBCV;VL?#FEYSj-o9#yE^0>-gA!-wg5q3HV*BkNLZB zqs{6@s@OWzetA*f z3|N!Zjnn3`~q{G zcGcnJ*U$|wpiqcAjhyu<)B2rsk$mxq0M*fQ!V<}Ti;5T;w&)aQ!Z2D2nM=^Z? zjGtV*g0@Qxv8>hgtuT+`TzTbw-HmPpWb9=hcWzN*jgyy0vJxdQx=&GWH|RvLu7T_e z)%!I2L^nC=R*fwNeZ~X%U_K8oo?Dq)2vQ0$`yWOBx zAf4gKhjhpwI(o|K+7^r{wothhPysXNsV)s&j3&sZ%>9zyiG;&cei!$j`oOT(g<}NX z4lq?B7Jtm;50GbE$Yd=jCs5SNoVS>ghlU>o1A;m_fNJ9hs`{~AkT+6FD(P_&)6q%z z@PV~};1hCnKJmFFoZcU}#CR_OkRIyA?3(q0FkKlge*O*Ms{CVY_Fp{l-SE4ygIpgr z$=OztoXLhIi)XGs>=_`Q=c4J{bP?cG{9kt^i)h@~7|W-ld?lznvHwJNo!C>p)8NlF zJOa*^3VIFwHw<1>h(?4DowgDs#Yco zizt^w3!=dz7UEQ>E4#-@^N0hh=%kw&wmgB6?Vg@pV;le^lydQPaX+Ei>&Cj`)n=If zwro#)HxzWcWX}79lwc-FiMDMtX4o@NlBmLkB&3o>pVFmUjyek~uFI&aqON}z=*xOj zF+o0-T8~qO2&z>lzhALHrsXW(wKc3U?!tf_jjk{hcg0BORH_Q59sCqQ^mPV5J^nP|$|)39CAl+$l>rJDi{Fdneb7BUS-!MO64{7#QPx)$ z!M~4gi;BIQ0H=Dk*q`;Y6YsB7*Eo+2z~rA=q5~6uV6xT0phLfw``Fctm`qG>>Dh3tcm;lNJ;Z;p zo(ubZV9M}n?-|mRT3j~byop5?e>_TZBA!Ivp^1NDGx5AW2RJ^pV;Jl~#=|zQXo4Z~ zXdEwv$+q{NL+zKeQucGD;w|R>)rYeEvalDG4&dvm-UNcT&m&l16_Ws`>-Sm zvl0pxcG)K+q8~m&2Jb;`#kq5D&b9z`-c!dZiiNS^?PfQUgFQg0G_u1Xs8D|voe7=B zdBXm(OFk7&w1_>ATTJ?6FKAq{7m)1lM5YP5- z^xFJWa5cC#J8!KDMs0Q(?eq2#D&;pm33!qM#VJHvCm0GS@J;Hsr4~RVMs1K}9uG*P zM8jPbQwY9UUB}pFRRCGzW3MknZXnH<=dRH(0V=JhO$6xW!YZw~3-OKRIG&H^Z@kjF z3Rv>F4k9ZvfU`%aryB>6E6I}-tszqZF3T_3e}7Sln|XZZWNp`UgGNRq zA$jd7%=9dteO&kghTeDm^KCr)>#tEaTaV>~ zVXhtytvf-4cT@_09q3PkM=N;!=Z}IQ|L0KWmcQ3P8IgYHK~)D{-a2Eu*Yg(r5#Zd9 zc6x!)S{ZEOpM;{tS2la}nr`Uro7bAkj#60cMt_@d3>lhBnL6;*JApm}b&w9UarN_KI^o}P!$%aqaNBqrym4T2BpR%l$dca!rR_bE0CzAC4A?s#e zgH*J4R8H`|!KRx2TjeMzM@63gq0MX7D9Di^nT_a?;Z*D&+cLY2dbe2?AOE#u@J0D(4YN zS8tf)&^&N6xYDbcDTSTgqB7jwzJxtE1IWF3qrv$vF*#N6JMoLr*T(O60NoYMC0?=> zD9-a)&pd?@y{G&o9=os$F2p9j%{wRuJ!e+NYtL?g_v{ywTG?o^J9kfCJghAMn+7{V z8q~WWsfdBvgNzxw5O6Ne`EMgA*kzE5+R6r+r}Zxyh)e-4ZzGOdrA}Zg?b49{*eE>k zY(H%N_7xC9nmJp;BVjDby;>H(CfL{ISQ4YZ1>RkPg++GFc)3@-o4@y4z@5|KCs-Oj zVChq(oWFhaFo(yKaVY`Mu}mxKvO5EgcmwgH%6P3x(582Rhut>^hVxt(#eA>eJQ`|UykU`YLHYv=F`F6$>GO3HRZZ}pbhO~e0i zA;Q@njY~A}9b?6G8Ir|RhSXT7=iTgnV;n!wy zqj4v==SQD1cJvYmXS1i(Nd5-w9@Cg4Gm(odmswem=Z19|l6~$Z=4Edg#n2aU8e_eD zJtMJD5&O$AMtenG8dGgI9mu+U4s(_8=Wv=lgQe<6uxi(nVa6<07auHc0yiUjhr_w| zV5^m|NtyWtNC!)*nQg}dx8>giD-tt|G^gifiwgsGIhe##Qz;%}yYVJe?=*%H@gnj(1R&voWgSJ*Jh>V(qltz5M5R=tdxX&cxVa8cy#>R_|+ z_cu(#ULgM4Ia2v4?ARma$B0cn7tHsD?5$WSVtr1IPY<}aX*zawKFtn8+Tt>nKc@YQAdFeJ+Wb9MbRceU<0obV5wYUD_V@s0$sUK&YskAsEG zXXqkwxMY00*PIqpFxCq58ZQKw?SCmbzh*-@o(Dr!o%OJ1aYxATh!^$$ImRtWMvMKq z=2RG9Pz}tp=PxRF9{~kAYPFgadSu-o!Sw3&I(Xo9?>+wZD!Bjk;8O+FZy>T|@`xfX z0c@sSk=LbO0Ox&V2B%rG>T|;X9j6~m28nt-+6xocunW9Khax4`NW?F4`#pmyy2Y>I0oRAruB$UC4)PE99K=|uGsGA)Fa&VkAWyz($?oAHu^zU6k?JM$z zhm>msd|@5d)#D0TjPBoNk^2XWw?E3-#4!@{#Y>l{AUPI&VRmi4LJBY3NzT{UFAlAo zN&gy4|A4JCYP*r*9Zjh0fF5w&Rg3zQod@WxM|)CT-vWF)9DJ)-1v!^rxNvs%6I^X%!%Mr@8pLEv zc}JP8fQNBp;7%Tdv}wjg)!b?DvQ~zU9*QIM=Q5|zv&n$m`x=WLuZv;H^VUjbl@`$a z_AclP$^@hhCoG|kCxPvG+2~aw*WW9o^vkx$8%X;>GI03nJJ2Q#Vj}`VK?J_GtGY)9 zqlo@oTH~ybd_`3?oaU7<)~$0BR3&T}q4cf}z2P9(=M^#9Ch~te?=mM3Pn!8GKJ1tYnYFmf+zBkP<1rTx{T7&MG+lL9 zr9q5NZ-^|Y9l-ZpxwN@v5nLun^O2Blfcq9LCt+(dXp&qBHQ8(fs{@gLUC=hnc=6$f zgIXDwaE?>b6X^qG3>%Uh+@Im4X6`*9vpP6Vk@4BcZHCzIQmYiV9t3M4Q+(DL{Xog_ ziwgZvD=@1SPw4wI1?!4DcjO8yz(I7dv0rBj)ai`jJH?a>7^;3-ubX}Z9;7{YTH{jS zvLAJHS5*VxHkgvj8*Tvxp~)NMmr6jKdgdcY(gcH59(^{Tovi;-y#HJ3Uk4~zeb3lJ z+&de|2l2DLEFk(DM{h(2N@Jmw)*KeE;_9FI)t&DAR1Rb4t~D<&xu8Sd`8u+fx>#*$ zFtlLx#57xf$^3D@hS%;cEBF{X4Si1=SQ;oOV5b9FE5envQD6UI4;je~bfMqodCZ-g z^#yIC!rqyaP{iV%ZSeokLEC{vUWFr&$al-#m$)C=860!!CGW+pi>O6$&Q^l&kJ{1e zLK3WlQ_E_E*c;@!&40Pyl>>_qEj`?0`wu4~<$b(pNy z#bo>LJCNjo7!x?wLO5~uSzcbZHDKge|1_Nt2!>J+Wkn>t9U2K@E!v;fQ2cMIP|!l6LpYKZ$e0`4h{+wV$|f}5pLLQE$! z;5b_+TPAfGNPRl-teG_n9^_VwBwQB5&X7L%z4c2M-M{(Ti20oYM#r>}y(V`C)4Tei zJ(?^QXvt)MJY@!9Yta=Ynywab>Uiw*-f}54SS~lbyBr1D?McXrg7cwq61ijGx(9Un z6gjq(91Rg$-Qgkg1Ndc_rT$@6K31B!>S(X^3}crLvctKjBkM=ed;|G9Snz;$osPBv zmRjX@-9AH&=%LMxiLaW6i_CI)rbr3lNqOJbZz-dP{h zIW37ckWsjM!AiXh1l(i!>Yls-6_O$Z;(UpG?DM2Fw>Z0j8r|tJ=?w&HX>RF~v3Ed~ z^j+q5%_X4g+)C2X{}~K%L{@eW4}eOi5FDFD8MrAJ|G@az6x<0~a)`IP1^L#~O@;g7 zAUDMT|2p?4;5_;92iJ25at>v>rg8Dm5=Jz5YZQPerXQjA^4oyY@7d*>J}F@9@)qsT z0s>!Ht*`1NFzI8|%2cyTRkaxcd~B3Xy%&epH4|5$3bKFO>Hv0Bx*bmuc5;;Xj`B z4b{8z9;&tz`L7?`kwk2?gsGhps&Mgwdjme07>|c{g@aDLv_^aOqTm|5z_`PcLw*Bu zdHb&*;`ML91MT0^;7t&n9H$c!yaT7)wW-CjXb7E2p_a>q*5qZAHth&`Y z>FAKsMm3&WpjKJa9(vk9%nrcsnl4n zJlLHCo{PRAQ#nHfolL_f>;0$jJGJ$f?CM3p8Q)0wE0PU4=%=o(*Uv-6#XtJqwEcvT z0ERa^?-XE5rUGYtRX0$Yg1$_6A{X0IWZA4>23}MVyFwla3DmwyN>4qEp~r6*?+p)E zsELdvm`giAUG)Yt<;NS4BBDO|@2N3@*fX9PG6NfSV-t@5s-Y3Rm7<^!fXO^%Pz!;#s;DGmpcZ+?N1Q<6yBv{vKU3&d>%No z8j5zKi6&iKFk0777M?wPh8}vDpVnk^L~q!|(?TLG5V=bzH3zzc&TALxm=|9{gN^~% zlQwfKN_o)sQ4=$|t^WAhc8VjZ1>?aF`AREB%O*0h<;4I zJoN&}eA)lRIFw)Cwod-(u6qrfAM@Os*9}4X?oSyXt5{(UM-|gLGg7GWMHE9o?-jh{ z+0v^+f*UU1Onl=KI6cNnNkSx zj_4e~w2XuHZSrBlW7gX3XF4vRZ|JIhk;@Kb(P@~IG$BVeEz4~OX_L?$H4AaGpgDD680;?0fELb;m>w)%ZCcq`Zd{kmCmESq5X)u`NYe=l%_{Ta=9 zGkbVIC9M~sTSj;@ck@+101t?u?&PLg?1Za)4=q2?cfvo%i(>7!iedN0&32g=orLAQ z-FEwnI}P@0;;(mSlYsw^S%v!QP9P%SMJFbn1bzdl!U~2g+{l?0sk#JecuZ^Td$U^* z&|F=iG9mI+6SZn$zx+^x5BvnUuJb=fFV@3jZohQH1W)zF#6Gh{R>9iUcGmaMUT_Py ztH4Ff*jfJ?gCPS-$>RAY;8FnFqK2ccm#@RrcH650%();*)niqG;tvQVe;Aj0whl5k z`q8hy`~cORjKuiYi-G!${PfDAT-5K&pkKO2>%3@nX5c)tgiO zK#uDBQt$;b?92Pi1PaezU?J>&)>7qXaOr*cjU<_6Fn>y$Tm0rcc#=)z%%{GB!Z(!? z-mWx3GVa@C0}qD*|Jeb>Xx9#Sx^dpl`SmC$Tdo*j%K8l53-V&GGJk|~p|Q8}e$0V7 z-vd?!N1~U;k^t$7R_c=+i$%4oTA*oZ>|2-X=_ou?rSbFY45a4nMkys-i80av<1FVl zcu`2BR(8D=ex_=?uUHg^!XA}I`8By=vvYlObjoj#gZiK%N&9`g1%qKs{(}|fMGARQ zyp!awx`irPW#^8Ho$=M$r^Q%>-+>Ewf0oC;uVR&K&&q`}uVE#_Ry@YUUS!I@vubaj zoX4NHy=-YH{uTx~vgmGRkzo-k5q>3*J&hOiHQ>(?sDOlt4dL=c@GUXGC?zg2OaHLT~t9t;Hhnq~8>`;w5?! zo=P=S50GH}jJ}MSn`?yYHJ@^sTr7YKmLo<2i2wPP2I>pu2S7r*$=@?*4shm@6uT!c z5$ITL$=ytpCrJb(S)6DwQ-QA zbeDutxDCowrHNOuHsRkgbx(yN`u6gnVo%m}6v5tdg|>(V%O5Dv@Tg@$`fSvx z%dAWoM`VUvy8k4+0~vFfW5$3hsYj^;_zT|Dk2KFvtb#$Y2qUGDI?$M%9B}@EG`cY) z%4Nb+hIX{{)r+h{(Pokc=?;Gu%1O%(p!yYzWOkUNg71f;Y#Jlc4=1l;QNOz`RU~m@ zi3cYU$$<-MlcQ(p&e22TZPb)jN8idk~uIrz(g!pGS_=#)scW zFCm_{&i-eYsIjHRu9EA6VpzvEtKdMW7+U&Uv7l=B8$9#^id6g@*wd@{ornt(OcMG!*112DA@@ z8;2A#vBzB*dzZeXVoR}JQf=20P$6khlR}4c{o$bDXcJ{KIBs=u^`>eT3Y~qev&CPE z@b01U-5*2H$a$Rrv7c)7cRhnD7p!Ig^^u4Jxs)x+Inde9Og2EHKg!?8Ro%u+8vUS} zpJctBn&9@bayj%#S;g1VnV_4UzY=+Zq|x)iH}vKn_J}R_9G^V(3XbGw)El0~Uf{go zd{1Hg7&i80l^_x!ik(Q)q;dJmhRrR@Os%<1;+`iND+h{SgwMCnoHnI9jwCKm4P5X3 z4QYLC^6&7fV>h0w=_XS%)|a#^-Hv5G1u$CIB%`Yd;K%8UKLQ(ffkKnykndLx%=BH7 znC(y_&h>8VObfF){7%Gq-K%Csf6mHCCcT}7+wY{nfm*VnncaGa#9F!Bw!oN&w`2yZ*YjQ>~&4RhNRdbhiDKL@_ z+VZu~aoJmTWsF-tMB!y-`nZ27ZJsR1pG97l^JC60_V6My7JsY z95PbBXAS2x(-%_(0f- z;Yf+?^S++D9+IS#?a5IpMwml3L)a~HtXJio&^_i!7%ZlLD%Q6IeTvgJjEln|KclHp zvO+rajAJ34S~49)ObOJ}d+&fwJiE=cU?x91%ILPFl$^7wx6FJ)1*)pivVAZLG!Q_hZ@If!|33xLFb?y#5_K97B ztD_FOq=Fmp=Imt)50e7;z}d;7U#$&jzHIrD+*1Z*^L|)s6W?X${)G8$N691i^MQb@ z<`ZaHO<>A;M24PK9n&~Cc@E=Swt6x@{vEcUD(&0eyMS$vM!IvH1xZ91Xzy%zg2a0x zHF3n;-CS4k-jCC?SZvwRdG1pc_2sdx@0mSPVO6K`Ga3$dVQmd*w_3>@RNtgu8v&y3ex<0$dz279$r zN?l-J$o*qsk_tLXDXQ0+)j=V^tKMtP6d|_62uNYZ8C z=($ZmMs6!|vepm@h^16lMhVr&9GuVIH*5!A%N2AKM`oZg|IeN_J027x^+cszToH9w z;spLN{UXF!9PwSbOx!;y-8q+&HVf)<`p;0&HG;aL<#Z0qBVg_Ng7a+=Ek026cgI^7 z8MtXIRJ6>g1sKOT+Nll(p=jXg?#*@yCd5bUbKk}t;Ps15V zbL-3f=MNTeZan+>^>)Ph(C6`lfm>DJI&WCY4EJ|%c}_Hd+MMWnXOV%O!mkNNEKIVr z{9>?;Y9GftnNQ?`J-PCltrUu>Yo++$TA^G$&xlZO4dKCuo7zVY#35%J@|;t94UHqh zGHb+2z>Dt(tXwn@yhx%`3c8s{=;V@gu4Uwaew8%)bE$@)@$TRDOY_f(d=R1Kh4@TB zrxwP|^Zg3iM#XhLy0?(arOCMuLUP2t*HM2z1vf@>tjXrJ(Pvos33}aECHk<1C#D~y z*8}Z|9evrIOc23oO}nQ49Xg%VLs zm#Ed9(T)K|cQT|7Gq(K89o+s74SOs$F#WN|8s;0*N6F;S)k$9|_49^EF=U4VDzR9-c@eJIjADw+QN9+gEp9-tK{{zygFFto? zzldEPjNY`ySkUf1_NJ+z4Qh9)zWcRJfn}F+nJGQp0afNcuZhzUI7z!uhlux4ajP`? z@r^Yo`LtQ-uj4b2m&fM2{dWR9!X*UUYH5Yss%87R;*BtBUrX)3tbRyquBIUOX&>Bc zyG|q^r9*p5pX%E?Yal6K7HqHnf`gVGF9cj|;AB~sS+H9tP$}WSRxY#v-f*=A?CcXj zN%Mo-g?|(%>2@o~*|)*vj(NxEBX9UeIbqk^auRUIv+iv_8i2zqI%^%;aLLh!c}o$X?L)v|8Lp;zc!$dB$jK$`5XAI@ZFt6OJIUK)a2884Nj2DC9DC& z0ui0EnUKb2AUGwc7s9v;S>^sPpPt+U4}bg@`_8x=N1E{9Ed{eWkZsW7ndV6bqHIBb zD?+EiwPs0?tAUHqhF->4bN?gGWWg|Z?2QA+l5a1p%6bIfrd{}X<%r0QwHKWYiTMeR zaCX0nCmV5Q^a`(^eZL7tBj}dM$4QX9us9lf;vJzngd<__ zwhFL2?1+zI&w}12HPTv4{cu`2aQJz`7|61&%VJP0KnCSnp?%V|NP>aUa`D@1lu*g2 z`CvgEh5Wc6LEoZ+9F*b<%A54ihJdc|>orNFctYW`x*sn#5kFnORKbHW{i3_J<4cX5 z{oeG)$ax)31T1hL3nI?_6HiL<7zG2*%RMARJ1@~+ZKG^izg8?$|J)6WCxK|;d{;t9 zSus)+6!8~GOh854?c-q;S?H_v>d(5gd{i~gWt^~3f(AAflTJ(}A^z^)2OAsDk*Ap# zX^wUp(s<|mR_d}B>Wmh&N#(kYGVYMxQ{=Tr=_%=38BK!dqpRh8hI~6L;VcWAHi5YJ zSzy#Mlvcs+{KGwav_RxbWc?aAn6<&~`%``Fx@?HGJc|(RaiGVZ#Zei>24BS_)`lKO z(D7hZGyWNy5*N^!l?BXS`WlkQ)eo>#o>vm5dRs!gtM04;Of0$8uNr9*!x57L_^^$NUW)fq@s7 z-X4)6VQ!K?`!tgEk!tzwr}Ay#&!K!5d*)-<>kdsH(yNQ`N_o_H3+@88x4ZYu^D)9L z^euHfO?QV;o@8U;>PL{T9X}{1#fn;HojAL#f5EEeK)!cF<2X7j)BKkvv9DH4@}Hqy zCaA2Fh|j+930RkWI~Alq2)%@tiF=()oRETqfZqiipc@@+X{YN4r~I?Xc*Lf`o%WL< zRE~RKg2QI;iBAn7o+OpDIF=tE#)VgEgdQlVeH+wUCV);I(Mz&b-cX9_CzroaHLhxG z;MH&A6F`6Mz)jPw56+$=ZJWy-g;cvANi|ezAiGAW_aoOl93^>pBIUu3+^>^P1)Z@4 zz*G@!snLES&LazzZ|`@5P`#+tqExS&QyeWo9(m0gD}>-&xan}k5D9M-ImOmhe$EgRCf2h1a?1=nf{N;S>$xw zE8aD-6v|LrpX+%@f(H5c6+GQ5z)1UzN10Z~u{bK4#Z!UpP?XKlq}7`McRKWVn#=0J zx9eXiElH}d7*fLOn=wDced63L>cc{0&ggSZ`D`#si1*O?aU~h~y~%2myp)A*kl**m znHnIqXdglAd$#E5e~E>wx;X4P|7WCJOpfxT{{497asqi|FxD^admy>B)@2L)Zxz)gMEcQur|u<%6%_m7l+;K*6yrOw`Q?8y!9Z_DAkz`0lA zk(T)(SY}We^8LO7?6X619_%fF8zW>JRpEbtdQ9b0D~n<%|IIVltatnn|^pYV@CdTIG$dXfN|AZ~p#aU<{XCc7R)zIZW*DY>dSG||yirr7@WpS$U)(vV)CjT} zLr>G6PeuPa#%7sbWuYhA{f+bBB{2^;p?&+dJ^n?X5t-S!1*mD$#xa?%j)b#*PRTSr zMx_sCX&gC1&}hmz!L#>!acQ?&$4*leg4$!JQsodUMgu1JYQwK$H)Jl|Y0|VnGRyab zapd0kdh`FzD-ieR!x{M;xiuQtA6BPjZSTbxWAy39EkPmAWJbOvqiKLz-F-$Da$OV4li2lT|H3xDy_{^4< ze*xWnN!coYO2pD*HwuYu5~DrY0>*4<&};hi2CwN35L)0c`9<8zieKh9Yx1lGE}jpL z=29T5kD|%^vHD&gKD=5SvdKi8Cvr{g`_hqO@cpf)4okaW$n7~b(q1R*e*i!5Pl)}~ z_y=$2;3AmZSN&nH(hb09DXVr`Gno1#FPLt=gB$q!^i9a+!-gc`sql%D?T|9zy<-G_ z5wv?H(k{8$3&#_Lo``Ks$UzC(4sDFMyc2d#R#kC zGLJ@ZA0@-cJT9|ACEj;yVdQy`TvZ%TeQOpBTw^7#68!=MN|TtL`@|#tk?j50_9%=} z;f;-7Mj+A;dKoLFD1vO9*Gm<4rO{S4nH1LyIYt^Ve!b+uF?6x)9#gR(IreSgOhNj~ zJ{TqK-C}X;GZ3XH%1a_&2Fu2R0xCii;N?%xYWt7xfsgS;pTVY3M3py_QQ26Ioyi+p zn(_RA)RaHr$(>&y29t}kf|QTZtqq*B@RI=4VbGx#CVv_I>(^dJ9?V#{@@M;V4vwfM zK-Z;{RUX}QYNI$wehG1grFqbvvOr~?@$`9y|teh7?p6?lED1a@@*vZgXR*SMOH9>jX&9QTWHe zQ3qYO`Yzg+kf7jk%etk;cBrq5lW}C9hQ~LRGecD;!DGAKcdqw}0pqx)hKD){7I{pu zBA$5{cv-p@9aG2vbZeLKw5i*~$jrCK0m42wmfRDwN)`&T=Y$3$-xmP>So+$SuHRt7 zBQunIT@j4Bil^Lfm;uEx(@&C}D?y~(yV#VRdOXc-4YLE4M#w88_E9u24?QJ(jB~pA z8VQ;@u2_Al!v-v#h>;*){H=e!t3NH?fbb7myi`jJoj+Iw4MSsJLVD$I{YZH-mw!xfR0r5(^C^6)9w1>KGE`aqN4 zCqD=G>u7o6*RRYO5#%7rbI;k@3N_S4U~D&ca2BirC7&moA>K8D@l`%4<}WW^$aX;j zo0O^)lvifOj`3(Xy(pT+6@$>7JO4QVz1HZI)rU)PeW+ZUXK)@~6<&K8M=FoCn4NU` zICLEU*C(3eXYznt+~lvX;@U4k467@}#oQG@k?i;%&De2F{Wyhq##j;I>4_k(J41FL zGZ{UdQQwDm0qV`GpM=J-KD+GC`(VjV-7ofJ148w0syT0>r`Jv2B;k8nH{^BBSh{|E z1kxmF{_2$=#flnP|XMakvWSHoFy3i|_Fz^e6mpry#8c4(yTSg@FtE+QFG;B$cl}gIUsFV>E zlFBACWJE^xy4N|P%!+WeP%ZtRVLZ*_0eyaj&(@}OR===&FtZ$r1cv9ZT2*Z?}(=Jpb{a4yF^CaDg2y)TY;4vw;=icCN>4D>!V> zN>PYbQA^|VPR?a2eETWiX@}en6yL1;_h0;HR6PNWd%lqUP}M~gv?umZ<&Sh{iJuoS zv4e(LZ{R06Kg;``EOv*!RPMGuRBTY1_le5R#3C{?^HA+0vfzm8W6WmyTS!^OLRem{BMaey$I{H}{YU5_7SUV{XJJ`doExmTYF{f@P zi~n-Q`l`L!BbhHqu>Voqc`f@jZNWVkB)?<|4`1hqY8p`vr}b62(IZk zv2r(3A2(WsywZKwPe=}|m7jkU3(DmlxPP;yC+}|#-F>4dfKT2YA)E;khWcUE4Xh7n zN%|pl%Fo1-!1P%;r9*$)P}v$_>pxJ3OzR#R(hdqhK;Y$UBoK+OX}p~F^`AqcrIn>F z3M=4pj9;|csWsqLAabov?*P1CPHj8L(?SpjFV2!4$^s?-y9$1K!@%D4`%x|RF4Wrg z%yRkqGWu@kV_8uAlSosTzJJzF4*Yy|$b-_Q1)TEvEh8Y@1#G+Ptm-94kX!#d3w6FQ z!aCzqhKyV(G}Cv)>zHC{nWteARx2D+ZkCl_}NZ zR$PF7-(vLYb1nn#eqN$ItI!G%+e)O{e}M#^!~u= zit$U6hXsIVfZ~s^Wf~r}>e=VD5f43rq7O}LhGK=IFU58VT4pB!&v_~QjO9(h?(aD5wevn;$vg>W{eO{I zj{2#6^ zA5))vr-miZ{~Mw0ISE;VzPV9Ot)jPFf;a!&Sw+Iig5&x6ba?QUK)dVY7bGu0ILbuk z=GYV#3s{%dqF0;ACzxzT0Z%2*+^RAiJluU{RV9ZD+N@jWfq_CGsZ>XD^WP6W-gnch z{8xZVi+*(ow!9)+&U*Jt{3GWXmWx7;x_<#~Yz)cr#4J!GuE_C&{GLwNKP}T|JPuMA zm9>59;#4xXn5AB-hoEtq!3F8s7f|bm7WvW`1$Ez4Nt2a9@XhE~EjiLtmHIcSGg5Er z(ET4q@6m-Me8cv>!fW$ld@B2_4Aod9CJhN5x>|Qjh2k?uo;l4XnE2Tur1j1Vhu=Bv z6!hgf&WM)1_)y&#i=9bW?-vXt?GJFD^lvBgqkqY~yU?zTRSlmpYfdWR^2_ZNF;AVa z~M9_>=3-qoL%7{vjX-X+PhJ_&_Z~`yfqX# zssNl7$1Lcs{Q-}&y_j;s*x`46KNC(JdiYT@V*`n05F+VXN|I!h0o9|ueAR*&FhhBu ze%#?NsBvR`DDS-pF2A-m;q6T!vOLl?xE{m=J*31oh|byvvKigQJP z)@!pX^>iZ9#gd$~Id=eD8J2X69C`<;ZgU_1Pv$RZb)CNYif0m#OWapqa7AE_JOTLN zXDU8>(tt2#9)Q*Fc~M?WkjLLQ0u001<*>^iU9tTeD)^~MaD9j(Kb`|L{YqP`P)8=< z@vn`8kTK54Vj8Rip2K11-RlO>#D40j`TkZE^*EyDzlVN6aG32Zmp~~5mlo4}WPQnK zEtL}iPvh{%jQc9j8&hyu(}YT}MJDF^cu`|9B^@qBhc-X?5QQU4Xuu-edle=&DEFOJp%S zFU^?2wZ9>^zyCb}eIj`On5m26A1Vf&rFL>~?(L88+)oCO-;dp4MN18awH3~gist}@ zWvHGi*$+5y3mAGFC4YpT33NzCBBO`wCUukWHMrCHec2AY+NtUg58VH%7jNub^~i_IK+z zZdMy^J$S4%L~>fn2yZFAac*(+z_D*y4VTW@lG<-L zX{I%PLFGrcUozjki0>r6Ef&u<#*IO5p9f{>U{f8xx{7W}6`!#hL7#RqU%jAA!7^YT z%;Uigeclxi_WRNR+jJ}Fbbavio~fG3?ulogHJF{y0Vc_Pj0_AoKWuJS>nAO|>TPz) zXn@?4EU`Eub$5dR^CE*)r)>e>Uak=9r%9yqLbh`1@g55FPR|kEnnsQTakU$ce+gqR z>3p)e_(9Nb7UeJfA;62>kUC*FAILk%(mffgMJ(ir7|ZKyVr|?wPnL>2I$~oQCfw49 zCW;9XjS-{3URbTvlk9Q-zW=#=WO_0&Qk@9|S1O_|D$lmVrz=pV>5s9>MK|E5^hzR% z`ZUOznWQMOFC?Bx))}Ob;zO^jPYeGPt3;Ldj-B@fzM+PkOFV|wg@~XyEhsYAN|5-Z z;l#tdTq#NMw_2Mj0{P+JBQ-n-@a4C(TUn8SS#V(3al=F+V{KwM>rWOGBN0|R#{V2` zM|iV7_satBJhxrN&Lx3{w`T?a?MuN=Ge`b<_yxoMf4{?Z3D5E5;<>`u0XKYOoaZPi zCBW=PnS0-^31M#YA^R$&A|#`rbJuQpA6`|NW2vnrzn8Dya;s)$g?c}jnLf*RqLMJ@ z(|R{5QFL%cu2*?2P@0yon~VK~yZGCs4VY4~_cK~c7qKMxxJaza(jo-!uIy;8vuESe zak1=A1yeDVd2E7+(^YKdx}B$R!wlab>9!C1-6rSy;_bEVS@4^ro}u7wK^*nHoylL?HlWFMa} z&%qgVzt%YC_r@WdIe&Q@h#+X(mFQaJ_G)FTyWn)1Q|4RX3VDG=s$qc z?|)zj*#QMm^f_A{8Bw}ZTPdyU5%w^-{a`FE4HvrboY}L_#R*XgY$eoADgnB=l6O?do~Ee!c0*cY zToI+hI+pev`)gCnCRPVx)i>JTWKva0H#PX4c`r91CZ3n=kqb(YqW5py)H?xKXjjLx z^G=!U4uY-qBc3Y$<53^h*=*3aUAkM;yJUYfAJvdq+j;n(WAC;V!&Mx-#A$TGTVF*v zb|f?kM4<^S|9frs*&+8OhiX-peNcNJrw~YP^pvc|j;`DbW98z3VdhNG3Y4wtQ)-$OK=!Ro|>4~Os4Uc{oV(ec~(yvm2*H7ewTN)&r66* zt;jRU|L>WCdx?3Is((Pl*~~`v_d~!|28uj|#b~f+X8lp%2{Y3-{M=z;OkeS^F|(A>c1_k(fG#8>rN^Q#$@Xe0It+mv||plBXr^{ne6_e25% zbOw4s{YQ427~^6h?|RKn^JHA5KwB@ZwMrYfbT{_Y`F|r|YIWb%W@lZo47N&^L z2dJbEW^3R^hmGqKdU8;t^h1|4B@67DF`#G?Z$lSK&oNKm`GU&IEn7f44q59+9Sl#;eyJe7LHJ z!)`_R)Z3gV@9nEO%@#($qN`wOjR6CEekdcs|MntaAl_>*HaZCHI`e-OA07gyO^{$> z`XStSsIJW3c?%rv&y^O}8v0DL=0XGG7x3<&$%QU7jJ? z2xiV(5cewq&yA+0e+xaR3r(5fQmnQv#1o4mH@6w@7pO+~ghi}UOpn8T5B zkeBT1#SFZ~m-2d^1!0c&>Ict}2A8P{&91beo!1eAySfap%-M0qEr=WPeXvcO>r=rypOg;0c)3N~J3W3!yQ>>K zaMhsbruqjyN;|&Ucuogj%w`T|j*$7P8>%Vm#w;phub6z@2sh9r&bYG&DE2^@UDeN7 z_$)=wiTIZ@5G*Hq(tCSb_f>rutO(7+>k z6|r-J#9*c`-%+O{YSU4(`FEiNjI^)GJ~ZnEKSDBlr_OxYunFZOCGhAyLa&_WN)}rBQ`H)hSi~r~uhcyD-Z0;P+|Iz?! z-;247?;eD(1!a$rfAR?9&?`41YEYH%h9p-}2e8j1{Z~bA0!qg<^0xQa5M=etHlC3n zDpA;)eLfflgh%V?lEn*v?SU5S0mU$MaO|5yF}o0?X8(O;-RB`>4F4N^jl~JROYDdq zNwR_(ZU@Bw?Px+R3jfXgtkbab%i3Tf;D)A8KgCb+9)rv&a<(gBv~bzAp(-O`3o!7H zE51}K0b2Q+A~%iNfYONuN84-1(5MIBH+MEy7{KwPg4nG9&5Ki#BWT~jvXJn*2A6KY zKcR&OeVe0T#8AljWw!zxI3*n=$5{({|I<&WV5Ne7&jOdTyfW~Y3DKyr2h7mlz5W;z zIVY8n`aDFSISSYJ@mk2`sNz2+EN{NuT1A{tny~MiKJNd{^t^XUh&-1TJhJv5D`W`Y z)o&irhe7;nkJF7gp{58&OkywvtjvE?AVFacx2fM7ebuT!)lWF*tod8P7FUlW#o8!h zu2GOWdG#N0dm-m@5{_IIPzMU8RfN z8;;2{xP_5?0~xOiok;=em^Yp7x&d}+?YNj#eg%^Gg?`R&Up^z;Gwo53=toC7+?K}Sx&97`>+T9^n$zOEUAu$af$IRAxOLSi7hT0pRD9MqNTb%V* z3UYg{vCD7%7P(4_2l9LNqWL*>I%53+c+%#3`~B;PQ2$ct#zm_uAk@Y_NpY?jxM-+! z#b^Biie?*kHG?<6kWx#R!)PvXyr-OCnt2o9jt7?=tY^TqJ{fswvVewcoa%i#o6z|d zWyyrRCxrLJkoR1Ymw@%`@Q+-Dc<_af@`?dVH1PYZ@tf8#8L-h-W)=(?=#2v;!?ohmfivQ_+uoIWVTT~3Q55-bFr5^TS(D`iC@Cl^6Wk3AzRtS(j zIrRJ8f)Eb&j}5aXW-Wlrr7Aefr!%S!x!evhaNuf+ubiUB=?^A_Hy_ePe?SlCq*ruJ{= z^Th&~_9@&ydDRaGb{V}0@rc8FFM|U1a)mMT?>-v`=6kTG=)MVWl`+11!%=(v^I!C- zsMh`d2~B+YLWloKgck0hd3o@(ZY`2^7yi0WhYRZ0u+`3g-$t&b^Wq~MoY1EB=One+ zZ?yZf!GX4v2EY4Tz4JJD53rql7Gb$Oh-%btf7|h21xH?{85)JQfXl6dLC0Sak@`O& zN3PTf)DA^|88r`s?T%Z^F68s7cYKo{+9V-L#TLPGy(ZM!WdH9+zzW#jmd@zruS5Uj z`-B5I@8W zuvMi4&x-HbUIWv`*yJPV6=OXuNlgJgQqOPweuVPSYq z-wIzlP;RXir$f?HOn`?=HxO^E&@KCTZs_q%H$eJ7diZ>eZZlH#0^Y5kv1Y{fs}N&^XWeXlGm&ktg#hhv>#jL}DALEfyyG z?9#SOxCX|N_HVUNpxcRxExyTf$Cna3nq?iCu002nyOC$;o!)}eQZ%;=lFy+>M30{) z>b2+==)E!Q!a;Icd6jx<(GiU*>PNZbcJg;P~BxLHJQO;c=bm zpf<%TwA}iHe#h!Busu7nT1Y*IC^PBeeW?n7UXf|*Vof7~LEmLup6?p3Mh`HC>etD~ zadf12>cWI;FX3KOw}Rn>0a6v5O}7iE2ZKBF-<~v7qO4DfV+}Y35d!2h^eC%{K7vF$ z#)@-@x&C+u?OSrLD+@h_I^RIQ<@S@#g=|#Dc3UCOBnF4|oJ#3q%fXa^jnwXoVVFN# zK%Ays6JJy{aYsSQIIIjzRrzV+iXmr>l@V$D_}dZpqR0E8*Vh*oCaoM$?Nh}-CN~Yd z^O~9 z{<;}~t#ZF|TxfQ~Ec?$3)Q4%~#ssdP@Y5Z9RygBocllZTZ{Uj9im(aPk6?GUID8b= z>$=~*@cBRJwOZQD&94TVR!`*XNm;=4AB2^!Z{(nfZ0N^geTL@Qvatf#%9gxXL_w zUl`ffN3niQ>K~b-{+RvsHBrjnD0}6d@h7sMFAGNMvkv!y9yYE=>c1+0hQ>^lI$-=zZ{}|G}^Al{Lh=TWREoD|E-(o${4Js9t+a#gs z(V7CO{n*Ytr)|;eAyy=AuX^7y!08_>(p8!jagfu}+wdeulFtj3R7ve}l+yB({?!Lf z%;_)&pNQMy{#d5&ir1RhOx^B4i3;6XwTy76rP7wG>!q>(3v7 zr_6Y~(fHXf7j>1US#z6(iR*~sLkWu5rh+CF4Ck9ah(PMh?OF$2jP`3!)o+LN5t`+} zd8cGskX+oM-WuCS&bLMP6%{h!{Mc)J+)O*DdXw$e`F)9mp@b>h9%W8695`2CHa&(u zopj;zV{1pul!0=_i38}|Mcc@!%|61SL{r)aFBKH+g;W?9yTR&;e~ipwD#-7fp>?So zBihC4N|6wEBDMap@$RfM$amYL|CU-F8gF?s@mY$T8?7VtWs2mWiJEQ5ElFOxz4=KE zKMEl00M~8p!cQpu+unkj%}=D*D*oEjRHYx?_zocwxXM;bT zq=~cYon+4Y?{%Z60ciEHO4-HAK;mET>!sWD9O%^XfcvATB0<85{}{e}$ODrf%6iYm z`JmjH;sqX&KrH3be({B;6MW$FqA}y-ZCocrvmQl#1MlpX<-K1LhM`i{yT5;NV(CD> z{Q2yk=!?8vuw(c#YE>9ImzLmy!mWubmDOt?eVrvj>K_T&%YCadQ7%AS!PS#wX%;9> zys?~c*A^~#AReXnnUH2LdL4Qu;hl6kx#J7>;H^@7TE*rN9L9P|b9^WY%X&#E@sC}? z)&IO5?&X@{J<8^n$=^>yNPo;(q~1;zMD3<9d-v7I-Fir>^=@D>&5mC zKjVT13Fn7mm$8SL|?%=L!GDAL=|(-PbU@o5dK75odJBC3No>ds%l z?0#+GvBfAjcA@htmgSFPEa@bfnP&@;$&;mpRZ+ zUlR;7M=M+Tv;q1P_GHmWE%Jya36IM4gR5=Vg%9}G0=4)ZQ}bbSq;->flj>8aif!<& zMuX`vvMX$l^{j};+^_%23ah<@z5;<~%$}x0ErG3}+3_@z(jPg=R&#`yE>QXQ<^|!Q z=6$p$$9$k%kezjiO)}oCN}@e~(t^a_=)k1CI*1m9#E;0S1FS0{QOgl|9dr9?JTjW| z!ne03F0l_DQ~8M7ImVLM7LrWw&I_<}v-^ycz?lJ}z^ zS;mx9L;=O)iAHDPY^fHWiyH1-B6H*~G z;6L;VXSj z)j_be%^JxeNC~wk+xYJ0P69ufYiG&HS8zp*r=zxRoAA7!=gxk4VQ^mBx76)jJFt#E zbS(IEGzdMEFxkug1>B2fWaGX`Nh;PwcF_+x5I5EP%|_Qslu$lRd4cjLI$G4<8f@7J zdgW&N<+f*uAtIrHH@nzT-Asn#kF<91h^o?drJ)rx$VigoiB-sZO7MKh)+jL`J&E|N zVfG9I)@Tb7_d`ED+27`DwF3G6kcw|U4d8}~Z;h)<5*9TeNY_ZmK@Eylu9=EpEPK68 z;l+$LzQ29)<@%*_Sm$imwI&x1Xw`A`=8EMpJj=jcD3nMGIRdzutto$?ja@mz!|Hzk zG024G1G%Tgz8XDEdujrh^q=B)&;J0{fA>ck#JOTEEw%WS$9Y&mVeQew5HBo3pb106 z(fG|-{$p3k{Ia9xcA}REAvm(^uPX>X1&h_zjvgu~0ly+mZ9N8Uu~2VSUk`&Wruf8W zUiCr^GfJ&hojUA_3nP01i)S-I>$_)xxyI}`j&oIiJbVQOsC(+25#@&Oqh4D*m63#{ z6~`{xNGaoa|2MZTukQh~JAR~p~o+|D>__Vgc}pbP$W3J9qqY+7O^~ySmaLtlh;ornr?!_S1+D(*kOggS8t1c ze^(7kwCLRB%-4ZDmBwcEZF;y=Bwb~CI2z1Fc!u9*p9RhbBZgL`v(VL;f{>;YS>*ZA zMfR3~au8eA6Sei|H?U%uxIrmdLQ;?^di+`?6X1$~wvR`XVRL}g=d16NAT3AI!VmLz zScOU=kHDWuN)M1o(m0TV&RB7JUFMF)cm3Xse*0X2-FF2$ZCyk0+l@z|-YnNu_VW^Y zC*F2|=_7Y@dH302HiGLx4KnB4G2DHzd)gcp8_>wl_e!XEdA|t%L7so{zx>n}_r?fw zoq}RNc(ri&rwZp9V|$$EvCw}-h=SyN^Zsc^rCz`qop9tA<6(H_=+}atj+0PV^5f;w z&Vx{5*4szAZ-Hp+?(X(CTM8&_rJE#7x1;y(>cw(hxgj0nktM-eRcN-jd10SSH-Xi+ z7kuht1L=O^;tQ!Qp!&`B{jWJBaP}exd*!u*aNBrohb1PK7}uI%Yd3ZS8HiO(nZDVN zW4{k~O&p`asmGF^%Lq-Qq#c)qiaclfe!u+MraB8u{dpqK#c*v@u9<70Sh2~Lgj>+mMQUrzB|oJb{X`jGJNu> zb`|J6@*kk#Am;!Bh6tx66HwX}@4wA^e#AGOrJ*FXQ|QQtFX`0+&k?tI&6gKGOF;Mj z`@0`^I)OWNeK4<-JWR^EeC~Ch8O~FJt=zijArs?3l&hXFw9abt=j!bSL4{`fvuA!G ziJa`}$7KEof6KQfw`a*{CAeN~Bqk6zzb;=fT`NYqmkxi`u!=<8UMAxAJl`R)Vo<`< z?~c|TT`vBN)PULo#&_iF%V4VI#Sco%nV5<)`@|5rFY{9M+fo1Vv#|E3`eBmNWqh=c zi#6Z>0@ zx`E*4L{2PNLJoh89_MH-u@k6QZ1k7^&;zbA>M;fF$H>{~ zi$w>)0VFt4*jp4fg72+No}v5mL2M7%AP3H&zp9bv3krrnK)2Vg?=)TLi0#}UmFZWN zF={^h{d7GjgEcZT+9w-#Y;q0$(M!aRYk%ByKpBKgPiZ(^BT1Iedezd^uc7lUAJ=%A98B5oKTvFWn$(l^$_Q6)fa(0Ux2FhKu=nT-lCuy~=GfqA`UW1^P96N`xZM4_PMyTr zLd)aVoyySN*^y)gxp5G2ygoS3fg9es`|oyst0)vR<+>l?OP8hLzWb-+~TcmNbR6Gn_kv1Xv{sd?l74| ze8P-94!4~H@(Hg*CKW@`g{#KpbR!+e3%WI@Wc>uSzQMGEG19OXN3Ji@dceyJ=Vr|m zAH#5%ofqI{2laP*WMkM2VUgfiszca+aFRKx`O;kp$n$`8u|Gi&w!0_ZZSH1)rCY>H zsa!k2LStK}YjyzKxCPIoZ!`jG0%J%!_pJ8uL&dW^x%hddxGmRdVf+?$~ z5;*@Rb;FVBy}dw?;uW&{sdH=j>*_jKt}^ZvJ_H z6wb#V`1;jy4xPV}!dB>Y4U1mV7kcC+tCAzps2Ar`4$7acb5tDOLsiV&7cYAV;nzX( zi+{Y%VUfY#AzgPmiTiHUzpd1GfesH3uWe}VhrY#LX3|{3@M+;(e=ze2?38iA!D1h~ zO61>kVcz5z@MZP($(N?7;G5V!vBw*(plOd7E7HpXeL`1Vw^9~}BsO_try>>9ld0z0 z8ovwNMb^21SK@FyM0GfxQ3{lmDTRXXaY{;=!~$Edl&5y?2Yp-Z761T z#@&m|J!=9<5A*Mi5za*r9^2}xB5T8x`Ni2{fJ#fE!ad-MUjt) zgAaz=JRcrGk*cCc|9~7M&_~Ao@E0MSdX8heB43ea6qB#+_eMh45~sKFpbX*@bok;j z{Rw18sWWlCaYo5OMsL!ri^0U9aOQh$nZ(=Wqk0*y4kHUKo>756}pTMTLvRglIzb39TFvUL%+o zw)5shJOPHOHPy2gbKxiP=Pn7S3u1kn6=`cWHe7LMP;}0C0<69&Rk+?g2KIPPrw;Lc z1ht;~ju(Ulz?1rN_N+H+v1r-v4<`y^pa@^&bGx1oP}PanwkDgruOGSW5$})%9k29T zCqImUX`fermRl9UWnNV&qe~y4=FzvuXwSLAh#T7K?%zMa644)zI;H$zBgI7rtbH7= z{keWzQ``embUzc~X4Qr6U9yv>#;#x!f}%T3m??g~MlnYM8hBCX`Bs*wKHm116J8s! z!_(()8F7iIV2!!JgIVWU@O5>At9QC8QAMDIehRlP&W|#QWF|7gY{~uNW1PGY_kXo2 z+7yFS*&olnfRvCu|NWuw^a}8)2yFbouTQu=ZmVilZ0=H66VQEw87+iat$1PT^Sg!l`6gtL))Uh9I+Mt7e5@$&lMu=q8S(tn z@&(-gcj7Y7%{K7%NqLHK5fMB+m{cklm`~hwul;m;v#V zVsc-Pk^40gctWhMh}h?5>RwX2TKVz)S0V>T1>$bfkqJCEh!nF^ih5RZ5m34Kj`^oO zf$i)=Z^e`YNNYYcrT%LwqHEBpmEkEwnu~Hg9S>tsUU$+Gi(NF_`SOP10lB9Vt3ySv zKj;b{Ch+`sY~(&1?0)d>ey|*#h|<(tqZNi4^cK_MKGR_PPu9g(`c$xf`}DHFfCo^i z91S+IpvBbmLN3vt8iDXvqG45X6`60TW$WgM5dC>YdG_LR%(~T6?v27>zgK3wv`8j& zs~R_av-AKui3^>H)d_Pbq~c311&tHng}Ph*yPJ z6vj&_Fkhcw-2TQ5a9hWQL4`O8SOypT5q}eKSJn=cy>Sc<=1yO~cyk6&?pa;%b|iwE zFWD#_jBO(p--e^3O{|!LQM0e?vD#w zizt!NT->ON2}V7Hi1O-IgE9_fm>F(q99Di2;0(o}2*2V*{~ zsXP8f-*-(n1zH2py(cELnx!96U|XhD=14z@5*MjR{v-QkY_8~)re{DlGqFL%eI$I7 z>ocEcUI0|8SUMs}>qt8Kx3A-JS{0fm?SC5eDH?W~)fBBHhQe+XFSS288EQRy*nf1* zQl&DF;oQ>RI_Ro-6dM}U|^lTh2CH|#mY#h(AfJRh^7fzG+b95JII&BSi ziHw~eaxd%WgW(WvvpnG?v}??y$lKC~l%!qwB(n}cPk}j0u?Ag|HBXVXpE?hkJXUb> zU&a!WWQX$AGqkwQA@(|7PZ`SXZg}6EGEUHud=#3KegjBz9}Y>iX2bg_&-peH$55tr zdO5%6Hj=(;+ASN_PADJw9;AK|f}JO~8F{vUBX*lwduP4tU`rrB<*#o(64Q34z2C4# z3^VnCaj(}Z^KEw&AL}*(i?4xEk|;0<>-rveZ0Sj#c`(wxQ7HlxaRpE ziY~M0-iIm63ie>&<3IC}vZ4kE#sc$W`ui-9T{-y}BUdkr>?o8edeTP^?DwY-NOta8qVGk0id8z9 zOu?u!j~-2-)-VM4Z$s!zVq*Ma=Gv^!;c?c||CLd8ga$}QN!cPi{yS=3ThfR!d?nPgeo^4_>Ze4hX*W@oCDBl8qYxeMOnY{Pw2qFwYdzL)xrDA< z{-JQn;}t5o_i6an-`~iQD3Y=Mtr)$zN5OahaWtZGb~b5$I*xX$4{t4ay+Y&1#9BnR z>Ped#=RPhPmVk37+ot3{r^B)x7mCVvQSi1%J>|gd3e0otWf+6B1F8Dbho*S5RIr`q z>uly64L?8h`TONo9DMpam$B{I3z$877ULNx%-&!3Mc)QKh@7i7 zv7u2RUUML;crfT$3K_lD!G@iL7`@n@%ivUH5f(##PF!T#GTiRJK{)OreAV689=*&p zIhwrp6J@!M_mM^!u#xJ>E#0^BSj6;~$2lC}9#|NF8pD7tCjkIwrl zv=E?Z_lJEGMcI5?`?^s`SeVjxd4J3f3BS~UuHkbaeU^40HGkw>`@d8$c#hL^IB5)Bx_zst z&Fwv*H1&?Qb;~)#=d#>zfA|GDsPgzh^+Y{dwX-8xuS}vV20Y_$3sc~)5Jv_c=>)73 z@4ooaI23Li-DWr`a|3d|HCa9w58ytg4>z5SThXg$ek;G0J?jIcj}FYycn}SZmbdgAeoDf2Hg_duIeK!R@9MC4jTK~0 zD;SkBy#Pr#VXAOa6P7hRObM6vgj``4KSVIiqC27PdA?yBc+_Dt&ZbxjGgbF5O-0!VtgGdro!Sv#d_ZNr7+EtZpW{8Ho!Vh$X50- z@;+uEM#;d11sge1Mi$- z3bU{@QQ7v&JpGpZJmt?C9KB)m1gfD9=G_WsIB#zfb11dZ#ZQ&ZbeRk7P%{Yl?D~Zp{ zP0rx`lQSRYJtg52MUm;Tye;BZ&*MWm2O5zdG1qeLG8>+Lete$VSqZ!5?4ufeu83XV z$;)eaP^!EcwkTrri$^{iu_j5;Eg)`~fsvl!Ay6|cYraRn0vi3VK31CVAQnk+mF_8C z0Cma-;?@-R!39;7)sNk5kp922|^6eQ5bk1iZT$@;e`Y+5M zEzw}YYd=_ST&-cmQ&CDsOtMCa)N(HNey7zCHJ#YDm+dODU)XT|tp6j`)O}bb z`I*D9=sbedquUxXmzYreMV22$b;YPhlxOHU%@R6d{rYsD`xKIT8L}YrAd>hX-PEAu z&BmFnXu3%I>wX~Iq2PeeULMLlcD4T_OFj}g5=apK9!j{Exqo-%5FHX`)H5+u3qXbE zU)FgZTt;6sg=2{#gUI~i;_`K$)40u?Eod+?09!b7s+hg-!-@YfmbF?u#+KhJQcv<& z;ozj5#>buKan42aZS7eFJi{e>4D3IJ1zU(BFKu|SuEYJ8OI}QvM@;^FFPcCCLnfX( zhX;`U1)Bd9YcNXVOgArOHi7i_1ddA=sAGkROfPQgLLA$bT1U#ihc`6u`Tocbfp}U+ zG5<;hGzx8Mc2uW=Jb_8nPUXYkV02XpQ$r=J68gTh_L&b~J~;%7*-yjQ%fe#qU$daF z_u5fCx)V5{?~X`v03S^L!^SHjb z2Z%Q^{O7fH5Q}o{*~Vz{-l#4gbh34zt)id9u6<*u;L8im`?kus+-_&`)}LcoaEKyr z$e$V~3D)gKlle9_y3f`H8Q0LQ`JJ%p^d-QHCo3GTU4oAiJHAy_FCq;^9kHX%^!QVT z@7AGflSo-NTt2|58~A!~|L%6(2cIUrX&i(c(C7D>OlWU4X!V;`XHz5h=1#8Mq1|M| zHeyTT7CP~yuU`Z6Wy$=HYHK?0?1O4pu6QWRkkJuBof+QuAucd%Qz+%%S7Xve`xsxr z&#@r)(GT&oS7y-rI|$vKbb)Hpqx~u4uF!x}B-^k`oTOJ6<65H84E8gq{fs(j3LWpe zHl0qig+UTkJOaj6rqAFLp8Tzpfg|>QLtlj2>9_F1C#c2|7=r;QnOM)Tn(&C->Yi=i!mX$Zg zqdp=QB?*b2?mXmW#oU?oZRo>49JE<|r!14JlVa#50w zeRBA_LUR7#`)=DqUQDIQUz#;MPJAq2daR{K3+VBzuv+o1kk2Dr^ft6RsC+UirJC#q zxqgQGOdM+-@vq$n!q5H_=+H*tn&sX&P@d|iElOWRA8$O)Qy5+V1yL!=zfSZJ1`|<5 zUoIa~_cI`@Bll^{+1$HYW#4nvOoSprJd`|0g1Db6p zH+Vjdk2;CS*`RpECWsb`(BEjLZ&=Ax=7#TBSQHT=%1Uw0%4ab?KnQ5&k z4I3Q&ag2B7HI^{^cVo~JV)q+?a8_0pAJ;kfuIr5|)~D2yJd!DjwYQwgXr^dkO91O8 z+bL!!kIx>M`?(8na*N{8mmSDwH{*>xIlnE;_$$*P%MV2dab5CxQVHJ$JZEAs$;ADK z5{xIa{P63h+~C~oaEuF-wlpJ4FlTK|%A3S|s2H-BbSB^#KIV{cY=HyLU`;eUJur+3Ai2rNoJp8F{-#Cs`igb#~E+L!nSe@hk8c9aK z94my%h{$70LMfxHc#IHP;V3JcbKJLxh%%48Gb8Juko^1+*Xwny&-;B3^2G_8p8~uT z3UgQ%2|kHDwF8`Nd_#(Fj{~({Q8shL zJiOMIzURq3d$m`-PIp!9`oRz^B7Uf|0N4+VRSVq-0cwvw{!!3f^4C~U&2XjN8M$KE z_2ZD8U@{I%{kBM}X{W-@KO9#Z{%L>)=f8*!dN%`n|EZ-XpbUw#nJ6zi2BQ9$#b2Q& z=@{-D|D!II$EfH{+|rBmcPQp~e8^nRd$d~k&xwc2O6W|%@2dHb`^Y5h4MSak6NY1B zN|6!#4TX7iOr5MHP`6lbek$z|n)7aT)@3AMQgwC-uA*!hg||`qjldNot8u1dP)GuM zqmp+0!0Hj~{ni0NiSy$?Lphrk_;3Sat{LnuYhAGYoR=e`ln|oXgeLY$oIv~1y7v)} zBOvY8-ekc(KU{V5{P|ElBk)9c(^^a`eVea7!#9v>=+*# zgGEG|sSnRPV2#?Eeiqa?0{6A6rtgn^fK|MaOKg_+(eb(@S<-GKVk+>Z+^1Hc$aDji z5m^VyMA%+VY3eqdSg^xQsGFb}N?WzoK_|o+=NkAWFMfZRx<-RH1PIsf*xGpXbwHE* z=Cd0IWHG0=k)^%&&threvZ6o5#L?z!IlbTAUX(DwzhNC8>*1D z8O$i>N_M)1IXcK2Z~iCYGDT9aI;{ClDJ0w*46iE3VRNlN^@uGiAgK1+tp8;}%)PkQ zXx~3Tz$wXRxk3EwIs14yBg2$VwUmc>g48wQIGSQ2v?Kn9z+gm~{L|D9Ts? zTG3Afb|121NB+BLuPE?=yuu-q_0ahcSekxPuAMvwbY&KDkEx`BDdvuK*$xEBO8(6^ zRaeN5u04A4<1;S^ihrdw8W#d79C>fo#n<2q2@P{W_yxN4Ueu_4ltg~b89eOmegdqS zl{=hXp9Y$4ht$kF>wwwGuW}0Jy#P-`0mPw4WINeAa-2Rim0nM@I3m^!WVh|4n?HO9 z7A5*^y^EzlxjM?j{(u;gdmH#A+)fwe@kgkCGgQQAl`(x+pR!@KO2mMpapkb%SDVQ} zT+2S6T!|>{-3i(iJBe?rNswkxd{c)I1Vs25HY&oCAZrI3XL(c*DABZ>Ka#f3GnYOX z^Hu0PkZsPxRp}RFr$gebw*np`aWS8|`D;li)o5(dLgN%#X4^WmEo^~JE%j*Js34-P zchjGq4zi*P&kHA>v0p?@sX>+s!P@9az}yJq%^^sb_Wa3xngg5qkKXoIDh*V*tcP>! zoy7Po)tr_{qp*HXGrc9`G>U&8v*%g<7d&|6zkSJO5FY0%3Z#?X1sWYt7jE@{yV$}N z%3>`n3VSp2_1+}BoE?Qly`+K`+r)yeM=IfxwEgW0HhDI+8{!Twe^+X31BX)vmF^zRgF{lqJl^L@ z;B2Vj$y*}25XWYgN}tmV7_vjs4qZxud%aVWQqteR$p83#9){(@59A>6?;&N7J4848 z>(4@h>LS0Ra8@&TKp)0PJn{}rJ3Mk8ku1YB>XJ)ptm4p=R8`)JJ4X2zd79T676DN% zf=XuczsMzGhwHM4E3(dh!XzX33^OxjlkUW>w*@O49zD$?;OQw0BVl3h(t?C;Tuku8eH)zCQOT^{|j zJNQq-$5el}^aIA{*mTX}0Zg40j(XD3fT@?bMc?EeV8~Tr|G{&VvaYSz#HoE3%E{-4 zBi{|c?bWWx`D+wpefPL%p*9I!V*+dVbPrQtSy3j7hY*Og$hhQfR{$!nFsLjAr$M_{ z0oqA(U9j5G_u1-&DZI2wYOc7JJv7)ld)b592x)P3I;Zqzfnjvs(tW-dXf;k}Mk{Z{ z(`PvETqSzKagJ}=4X$5d1C2?eEp-zlFqLFxPgCKEdXtYV@)P7H&?}?+KU=7zqC+Yg z9S16eH0<4OBRrD{hpAnYa3CtK!q8v~&tf&5!$KNXX|J&~CfQU&tH3m^w)6XZ7S&*3 z2F-G)LH67JoREm`KE!?Z3xg7L61ZluxAqAtl*T>Uu^a@SU8(zhF$Id^zni>UuP2{X zEe<9Hs>7MeKi8B(6G68xk-Ftv1B~2vWks?I;YP)~Cp_8bv6bl|d`_exx0 z-)7SgL*znHM!$7ujQUsdrD?tqdg|wLQkZ~4g=V8qM4eR;pI+Hv@i0B~d7x7C)=(c* z^b)QXjy{L&$OS?|-vKPhqcAGb_awHgVpM`8SD?qjm6oP#W|SA1Z?rSJ1AMl{)A-R0 z^qT)OXvR*5vGRJ;ZU?pk!m6%Q@_Yj{zP(?Zva@g^Df;|J+88Jj^xMt))Cd)omlYgu zHo+>(&NEbY1SfvGisC%hL63W^_KD7Ku=!UOSCY;cpldGQt!He4b}{Kv466h1#9aM$ zk7xyOE4_h1kvMQ_%XpNq77VTovHB8;IUwf0H5~!xI&jaLsnz(&GgwspBBao@9kk7g zjAVWprJ`OU6-QMzPG!$ zumPoy@|`mX(#AY*UKjFXH$j7Im!2PerH#V>u_*gX6(JD(@D*JB%dlNocjQAgD<<)3 z{O9t+2=P5QCoFyf|2WD>uFX=Ty4l!n2mJ|gVcnKw+Zs>>dj+Rel5Bww(c~tPw z#SmCD?kdNcMgxUVu5}e^Ftc zYs7Yh&>%kTp#0gCH516iu^4-n(g(Uavw3OU9q=~2K1oe+1STF&Eb7cFC%gEM#KTK> zp@`g0 za6Mpx{#0d|L?vtrVqqDHN+)wk4xI>&ybPo4Y^_sdG9aTg^=69YN1*TjS>MVrA2!YZ zm2)MY$Cw#(C3ZQyF_*;-hlz7;SXz&)#A!imOzoJ^u6zE~{lB#4tUsItEd7jtQss{` z7^PLMb$f#cV}Ie3@`88}^Sz_w74EkS*ke-a44;z0W@K>srgA4JbCB2U&fWKAbZX#- z{Jb%p&6UFIe7qR@&}7WRx34hUU*XEm6dkOTXfIi}lf2K3NDWANSc0y7v8#PJTG^l{GA$WZ2#XN4Eu-%X>7i^&6_f&kWcx7<5lvG#Wj>?K$TZyx=b(({>3SyTnc1;$BnHyiRgM9 z|7b;z3Ht6Z_w-D^HA-F5s)m`|1V^0$>%86}5c)W&Pj&w;ea3kC(dMKAD%XrRaA&xQ z#Il8&etpoQxbt?7iIme}a=G`sBr^CBwS5>diO681eQw&CwMHo5=-Aeg>#T$-=GQEL z*9zdv8K&SM#lz^USZa1X%L*udn`xOYtByYHT`>7%*nqEf__3xaT@C+e?bIH=xCi4t z%2RXK=`a!8PNLICDohSr99CJ{Alpv0iQ`N^!b*ixuNMY7z;ngFqpQyS@Mh%kM*4&! z*w~?$b@}rR!0cf&VAf2U!g8u_)x2{S6 literal 0 HcmV?d00001 diff --git a/tests/deepks/603_NO_deepks_CH4/jle.orb b/tests/deepks/603_NO_deepks_CH4/jle.orb new file mode 100644 index 0000000000..abbf2b6dc8 --- /dev/null +++ b/tests/deepks/603_NO_deepks_CH4/jle.orb @@ -0,0 +1,6018 @@ +--------------------------------------------------------------------------- +Energy Cutoff(Ry) 50 +Radius Cutoff(a.u.) 6 +Lmax 2 +Number of Sorbitals--> 13 +Number of Porbitals--> 13 +Number of Dorbitals--> 13 +--------------------------------------------------------------------------- +SUMMARY END + +Mesh 605 +dr 0.01 + Type L N + 0 0 0 +1.000000000000e+00 9.999954307450e-01 9.999817230550e-01 9.999588771557e-01 +9.999268934227e-01 9.998857723822e-01 9.998355147105e-01 9.997761212345e-01 +9.997075929310e-01 9.996299309272e-01 9.995431365007e-01 9.994472110789e-01 +9.993421562398e-01 9.992279737114e-01 9.991046653715e-01 9.989722332485e-01 +9.988306795205e-01 9.986800065157e-01 9.985202167122e-01 9.983513127379e-01 +9.981732973708e-01 9.979861735385e-01 9.977899443184e-01 9.975846129375e-01 +9.973701827725e-01 9.971466573496e-01 9.969140403446e-01 9.966723355824e-01 +9.964215470375e-01 9.961616788336e-01 9.958927352436e-01 9.956147206892e-01 +9.953276397415e-01 9.950314971204e-01 9.947262976943e-01 9.944120464808e-01 +9.940887486459e-01 9.937564095039e-01 9.934150345180e-01 9.930646292992e-01 +9.927051996072e-01 9.923367513494e-01 9.919592905814e-01 9.915728235065e-01 +9.911773564758e-01 9.907728959881e-01 9.903594486895e-01 9.899370213737e-01 +9.895056209813e-01 9.890652546003e-01 9.886159294654e-01 9.881576529582e-01 +9.876904326070e-01 9.872142760867e-01 9.867291912182e-01 9.862351859690e-01 +9.857322684524e-01 9.852204469278e-01 9.846997298001e-01 9.841701256200e-01 +9.836316430835e-01 9.830842910317e-01 9.825280784509e-01 9.819630144724e-01 +9.813891083719e-01 9.808063695699e-01 9.802148076310e-01 9.796144322642e-01 +9.790052533223e-01 9.783872808018e-01 9.777605248430e-01 9.771249957294e-01 +9.764807038877e-01 9.758276598875e-01 9.751658744415e-01 9.744953584044e-01 +9.738161227738e-01 9.731281786890e-01 9.724315374315e-01 9.717262104242e-01 +9.710122092318e-01 9.702895455599e-01 9.695582312554e-01 9.688182783058e-01 +9.680696988392e-01 9.673125051241e-01 9.665467095687e-01 9.657723247216e-01 +9.649893632704e-01 9.641978380425e-01 9.633977620041e-01 9.625891482603e-01 +9.617720100548e-01 9.609463607696e-01 9.601122139247e-01 9.592695831779e-01 +9.584184823246e-01 9.575589252974e-01 9.566909261659e-01 9.558144991363e-01 +9.549296585514e-01 9.540364188899e-01 9.531347947667e-01 9.522248009319e-01 +9.513064522713e-01 9.503797638053e-01 9.494447506893e-01 9.485014282129e-01 +9.475498117999e-01 9.465899170081e-01 9.456217595285e-01 9.446453551853e-01 +9.436607199360e-01 9.426678698702e-01 9.416668212101e-01 9.406575903096e-01 +9.396401936544e-01 9.386146478614e-01 9.375809696787e-01 9.365391759848e-01 +9.354892837886e-01 9.344313102292e-01 9.333652725750e-01 9.322911882240e-01 +9.312090747032e-01 9.301189496681e-01 9.290208309025e-01 9.279147363183e-01 +9.268006839549e-01 9.256786919789e-01 9.245487786841e-01 9.234109624904e-01 +9.222652619442e-01 9.211116957177e-01 9.199502826083e-01 9.187810415390e-01 +9.176039915569e-01 9.164191518340e-01 9.152265416659e-01 9.140261804721e-01 +9.128180877951e-01 9.116022833003e-01 9.103787867756e-01 9.091476181311e-01 +9.079087973984e-01 9.066623447304e-01 9.054082804010e-01 9.041466248047e-01 +9.028773984559e-01 9.016006219888e-01 9.003163161571e-01 8.990245018332e-01 +8.977252000079e-01 8.964184317905e-01 8.951042184077e-01 8.937825812035e-01 +8.924535416387e-01 8.911171212908e-01 8.897733418530e-01 8.884222251345e-01 +8.870637930592e-01 8.856980676661e-01 8.843250711084e-01 8.829448256533e-01 +8.815573536812e-01 8.801626776859e-01 8.787608202735e-01 8.773518041623e-01 +8.759356521824e-01 8.745123872751e-01 8.730820324926e-01 8.716446109973e-01 +8.702001460618e-01 8.687486610678e-01 8.672901795064e-01 8.658247249770e-01 +8.643523211873e-01 8.628729919524e-01 8.613867611947e-01 8.598936529435e-01 +8.583936913341e-01 8.568869006077e-01 8.553733051108e-01 8.538529292946e-01 +8.523257977150e-01 8.507919350314e-01 8.492513660070e-01 8.477041155076e-01 +8.461502085016e-01 8.445896700594e-01 8.430225253529e-01 8.414487996548e-01 +8.398685183386e-01 8.382817068775e-01 8.366883908446e-01 8.350885959116e-01 +8.334823478491e-01 8.318696725255e-01 8.302505959068e-01 8.286251440560e-01 +8.269933431327e-01 8.253552193925e-01 8.237107991864e-01 8.220601089605e-01 +8.204031752555e-01 8.187400247058e-01 8.170706840394e-01 8.153951800773e-01 +8.137135397330e-01 8.120257900115e-01 8.103319580098e-01 8.086320709151e-01 +8.069261560055e-01 8.052142406486e-01 8.034963523014e-01 8.017725185095e-01 +8.000427669069e-01 7.983071252151e-01 7.965656212430e-01 7.948182828859e-01 +7.930651381253e-01 7.913062150281e-01 7.895415417463e-01 7.877711465163e-01 +7.859950576585e-01 7.842133035765e-01 7.824259127570e-01 7.806329137685e-01 +7.788343352617e-01 7.770302059682e-01 7.752205547002e-01 7.734054103500e-01 +7.715848018895e-01 7.697587583694e-01 7.679273089188e-01 7.660904827447e-01 +7.642483091312e-01 7.624008174394e-01 7.605480371061e-01 7.586899976440e-01 +7.568267286407e-01 7.549582597581e-01 7.530846207322e-01 7.512058413721e-01 +7.493219515597e-01 7.474329812490e-01 7.455389604655e-01 7.436399193057e-01 +7.417358879367e-01 7.398268965953e-01 7.379129755873e-01 7.359941552877e-01 +7.340704661390e-01 7.321419386517e-01 7.302086034029e-01 7.282704910361e-01 +7.263276322605e-01 7.243800578507e-01 7.224277986455e-01 7.204708855480e-01 +7.185093495243e-01 7.165432216036e-01 7.145725328773e-01 7.125973144982e-01 +7.106175976801e-01 7.086334136974e-01 7.066447938841e-01 7.046517696335e-01 +7.026543723976e-01 7.006526336861e-01 6.986465850664e-01 6.966362581626e-01 +6.946216846549e-01 6.926028962792e-01 6.905799248262e-01 6.885528021412e-01 +6.865215601232e-01 6.844862307242e-01 6.824468459489e-01 6.804034378539e-01 +6.783560385471e-01 6.763046801870e-01 6.742493949824e-01 6.721902151914e-01 +6.701271731211e-01 6.680603011268e-01 6.659896316114e-01 6.639151970248e-01 +6.618370298633e-01 6.597551626691e-01 6.576696280293e-01 6.555804585759e-01 +6.534876869844e-01 6.513913459739e-01 6.492914683061e-01 6.471880867846e-01 +6.450812342547e-01 6.429709436022e-01 6.408572477532e-01 6.387401796735e-01 +6.366197723676e-01 6.344960588783e-01 6.323690722863e-01 6.302388457091e-01 +6.281054123006e-01 6.259688052507e-01 6.238290577843e-01 6.216862031607e-01 +6.195402746735e-01 6.173913056491e-01 6.152393294468e-01 6.130843794577e-01 +6.109264891046e-01 6.087656918406e-01 6.066020211492e-01 6.044355105433e-01 +6.022661935646e-01 6.000941037829e-01 5.979192747957e-01 5.957417402274e-01 +5.935615337287e-01 5.913786889758e-01 5.891932396702e-01 5.870052195375e-01 +5.848146623272e-01 5.826216018118e-01 5.804260717865e-01 5.782281060679e-01 +5.760277384943e-01 5.738250029242e-01 5.716199332362e-01 5.694125633280e-01 +5.672029271161e-01 5.649910585350e-01 5.627769915364e-01 5.605607600890e-01 +5.583423981772e-01 5.561219398012e-01 5.538994189759e-01 5.516748697302e-01 +5.494483261068e-01 5.472198221611e-01 5.449893919607e-01 5.427570695849e-01 +5.405228891241e-01 5.382868846788e-01 5.360490903593e-01 5.338095402850e-01 +5.315682685834e-01 5.293253093903e-01 5.270806968481e-01 5.248344651060e-01 +5.225866483191e-01 5.203372806474e-01 5.180863962557e-01 5.158340293127e-01 +5.135802139904e-01 5.113249844634e-01 5.090683749084e-01 5.068104195034e-01 +5.045511524271e-01 5.022906078585e-01 5.000288199758e-01 4.977658229563e-01 +4.955016509752e-01 4.932363382055e-01 4.909699188170e-01 4.887024269757e-01 +4.864338968434e-01 4.841643625769e-01 4.818938583272e-01 4.796224182391e-01 +4.773500764507e-01 4.750768670924e-01 4.728028242863e-01 4.705279821459e-01 +4.682523747753e-01 4.659760362683e-01 4.636990007081e-01 4.614213021668e-01 +4.591429747041e-01 4.568640523675e-01 4.545845691911e-01 4.523045591950e-01 +4.500240563851e-01 4.477430947521e-01 4.454617082707e-01 4.431799308996e-01 +4.408977965804e-01 4.386153392368e-01 4.363325927745e-01 4.340495910803e-01 +4.317663680216e-01 4.294829574453e-01 4.271993931780e-01 4.249157090245e-01 +4.226319387680e-01 4.203481161687e-01 4.180642749639e-01 4.157804488669e-01 +4.134966715664e-01 4.112129767260e-01 4.089293979839e-01 4.066459689517e-01 +4.043627232139e-01 4.020796943278e-01 3.997969158223e-01 3.975144211975e-01 +3.952322439240e-01 3.929504174427e-01 3.906689751635e-01 3.883879504653e-01 +3.861073766949e-01 3.838272871669e-01 3.815477151626e-01 3.792686939297e-01 +3.769902566816e-01 3.747124365969e-01 3.724352668186e-01 3.701587804535e-01 +3.678830105718e-01 3.656079902064e-01 3.633337523523e-01 3.610603299659e-01 +3.587877559645e-01 3.565160632258e-01 3.542452845871e-01 3.519754528448e-01 +3.497066007538e-01 3.474387610269e-01 3.451719663343e-01 3.429062493028e-01 +3.406416425154e-01 3.383781785106e-01 3.361158897820e-01 3.338548087774e-01 +3.315949678985e-01 3.293363995000e-01 3.270791358894e-01 3.248232093263e-01 +3.225686520215e-01 3.203154961369e-01 3.180637737846e-01 3.158135170263e-01 +3.135647578731e-01 3.113175282844e-01 3.090718601677e-01 3.068277853780e-01 +3.045853357170e-01 3.023445429328e-01 3.001054387190e-01 2.978680547147e-01 +2.956324225033e-01 2.933985736121e-01 2.911665395122e-01 2.889363516174e-01 +2.867080412837e-01 2.844816398091e-01 2.822571784326e-01 2.800346883341e-01 +2.778142006333e-01 2.755957463896e-01 2.733793566015e-01 2.711650622057e-01 +2.689528940770e-01 2.667428830274e-01 2.645350598058e-01 2.623294550973e-01 +2.601260995227e-01 2.579250236380e-01 2.557262579339e-01 2.535298328350e-01 +2.513357786996e-01 2.491441258191e-01 2.469549044171e-01 2.447681446495e-01 +2.425838766034e-01 2.404021302968e-01 2.382229356781e-01 2.360463226257e-01 +2.338723209472e-01 2.317009603788e-01 2.295322705852e-01 2.273662811590e-01 +2.252030216196e-01 2.230425214136e-01 2.208848099135e-01 2.187299164175e-01 +2.165778701493e-01 2.144287002568e-01 2.122824358125e-01 2.101391058124e-01 +2.079987391756e-01 2.058613647440e-01 2.037270112815e-01 2.015957074739e-01 +1.994674819279e-01 1.973423631710e-01 1.952203796510e-01 1.931015597352e-01 +1.909859317103e-01 1.888735237814e-01 1.867643640722e-01 1.846584806240e-01 +1.825559013952e-01 1.804566542612e-01 1.783607670137e-01 1.762682673601e-01 +1.741791829233e-01 1.720935412410e-01 1.700113697654e-01 1.679326958626e-01 +1.658575468121e-01 1.637859498066e-01 1.617179319512e-01 1.596535202632e-01 +1.575927416715e-01 1.555356230162e-01 1.534821910482e-01 1.514324724284e-01 +1.493864937280e-01 1.473442814271e-01 1.453058619151e-01 1.432712614896e-01 +1.412405063565e-01 1.392136226292e-01 1.371906363283e-01 1.351715733810e-01 +1.331564596211e-01 1.311453207879e-01 1.291381825264e-01 1.271350703867e-01 +1.251360098232e-01 1.231410261946e-01 1.211501447634e-01 1.191633906954e-01 +1.171807890593e-01 1.152023648264e-01 1.132281428698e-01 1.112581479646e-01 +1.092924047871e-01 1.073309379142e-01 1.053737718236e-01 1.034209308930e-01 +1.014724393995e-01 9.952832151981e-02 9.758860132928e-02 9.565330280182e-02 +9.372244980944e-02 9.179606612181e-02 8.987417540595e-02 8.795680122580e-02 +8.604396704186e-02 8.413569621079e-02 8.223201198506e-02 8.033293751256e-02 +7.843849583622e-02 7.654870989369e-02 7.466360251689e-02 7.278319643172e-02 +7.090751425767e-02 6.903657850744e-02 6.717041158663e-02 6.530903579334e-02 +6.345247331783e-02 6.160074624218e-02 5.975387653995e-02 5.791188607580e-02 +5.607479660517e-02 5.424262977394e-02 5.241540711809e-02 5.059315006336e-02 +4.877587992492e-02 4.696361790703e-02 4.515638510272e-02 4.335420249347e-02 +4.155709094886e-02 3.976507122629e-02 3.797816397060e-02 3.619638971384e-02 +3.441976887486e-02 3.264832175908e-02 3.088206855812e-02 2.912102934952e-02 +2.736522409646e-02 2.561467264741e-02 2.386939473585e-02 2.212940997999e-02 +2.039473788245e-02 1.866539783001e-02 1.694140909324e-02 1.522279082631e-02 +1.350956206664e-02 1.180174173465e-02 1.009934863345e-02 8.402401448598e-03 +6.710918747811e-03 5.024918980690e-03 3.344420478453e-03 1.669441453672e-03 +7.672312953838e-15 -1.663885908054e-03 -3.322198415458e-03 -4.974919786836e-03 +-6.622032406765e-03 + Type L N + 0 0 1 +1.000000000000e+00 9.999817230550e-01 9.999268934227e-01 9.998355147105e-01 +9.997075929310e-01 9.995431365007e-01 9.993421562398e-01 9.991046653715e-01 +9.988306795205e-01 9.985202167122e-01 9.981732973708e-01 9.977899443184e-01 +9.973701827725e-01 9.969140403446e-01 9.964215470375e-01 9.958927352436e-01 +9.953276397415e-01 9.947262976943e-01 9.940887486459e-01 9.934150345180e-01 +9.927051996072e-01 9.919592905814e-01 9.911773564758e-01 9.903594486895e-01 +9.895056209813e-01 9.886159294654e-01 9.876904326070e-01 9.867291912182e-01 +9.857322684524e-01 9.846997298001e-01 9.836316430835e-01 9.825280784509e-01 +9.813891083719e-01 9.802148076310e-01 9.790052533223e-01 9.777605248430e-01 +9.764807038877e-01 9.751658744415e-01 9.738161227738e-01 9.724315374315e-01 +9.710122092318e-01 9.695582312554e-01 9.680696988392e-01 9.665467095687e-01 +9.649893632704e-01 9.633977620041e-01 9.617720100548e-01 9.601122139247e-01 +9.584184823246e-01 9.566909261659e-01 9.549296585514e-01 9.531347947667e-01 +9.513064522713e-01 9.494447506893e-01 9.475498117999e-01 9.456217595284e-01 +9.436607199360e-01 9.416668212101e-01 9.396401936544e-01 9.375809696787e-01 +9.354892837886e-01 9.333652725750e-01 9.312090747032e-01 9.290208309025e-01 +9.268006839549e-01 9.245487786841e-01 9.222652619442e-01 9.199502826083e-01 +9.176039915569e-01 9.152265416659e-01 9.128180877950e-01 9.103787867756e-01 +9.079087973983e-01 9.054082804010e-01 9.028773984559e-01 9.003163161571e-01 +8.977252000079e-01 8.951042184077e-01 8.924535416387e-01 8.897733418530e-01 +8.870637930592e-01 8.843250711084e-01 8.815573536812e-01 8.787608202735e-01 +8.759356521824e-01 8.730820324926e-01 8.702001460617e-01 8.672901795064e-01 +8.643523211873e-01 8.613867611947e-01 8.583936913341e-01 8.553733051108e-01 +8.523257977150e-01 8.492513660070e-01 8.461502085016e-01 8.430225253528e-01 +8.398685183386e-01 8.366883908446e-01 8.334823478491e-01 8.302505959068e-01 +8.269933431327e-01 8.237107991864e-01 8.204031752555e-01 8.170706840394e-01 +8.137135397329e-01 8.103319580097e-01 8.069261560055e-01 8.034963523014e-01 +8.000427669069e-01 7.965656212430e-01 7.930651381253e-01 7.895415417462e-01 +7.859950576585e-01 7.824259127570e-01 7.788343352617e-01 7.752205547002e-01 +7.715848018895e-01 7.679273089188e-01 7.642483091312e-01 7.605480371061e-01 +7.568267286406e-01 7.530846207322e-01 7.493219515597e-01 7.455389604655e-01 +7.417358879367e-01 7.379129755873e-01 7.340704661390e-01 7.302086034029e-01 +7.263276322605e-01 7.224277986455e-01 7.185093495243e-01 7.145725328773e-01 +7.106175976801e-01 7.066447938841e-01 7.026543723976e-01 6.986465850664e-01 +6.946216846549e-01 6.905799248262e-01 6.865215601232e-01 6.824468459489e-01 +6.783560385470e-01 6.742493949824e-01 6.701271731211e-01 6.659896316114e-01 +6.618370298633e-01 6.576696280293e-01 6.534876869844e-01 6.492914683060e-01 +6.450812342546e-01 6.408572477532e-01 6.366197723676e-01 6.323690722863e-01 +6.281054123006e-01 6.238290577842e-01 6.195402746735e-01 6.152393294468e-01 +6.109264891046e-01 6.066020211492e-01 6.022661935645e-01 5.979192747957e-01 +5.935615337287e-01 5.891932396702e-01 5.848146623272e-01 5.804260717864e-01 +5.760277384943e-01 5.716199332362e-01 5.672029271161e-01 5.627769915364e-01 +5.583423981772e-01 5.538994189759e-01 5.494483261068e-01 5.449893919606e-01 +5.405228891241e-01 5.360490903593e-01 5.315682685834e-01 5.270806968481e-01 +5.225866483190e-01 5.180863962556e-01 5.135802139904e-01 5.090683749084e-01 +5.045511524271e-01 5.000288199758e-01 4.955016509752e-01 4.909699188169e-01 +4.864338968434e-01 4.818938583271e-01 4.773500764507e-01 4.728028242863e-01 +4.682523747752e-01 4.636990007081e-01 4.591429747041e-01 4.545845691910e-01 +4.500240563851e-01 4.454617082707e-01 4.408977965803e-01 4.363325927745e-01 +4.317663680215e-01 4.271993931779e-01 4.226319387679e-01 4.180642749639e-01 +4.134966715663e-01 4.089293979839e-01 4.043627232139e-01 3.997969158223e-01 +3.952322439240e-01 3.906689751635e-01 3.861073766949e-01 3.815477151625e-01 +3.769902566816e-01 3.724352668185e-01 3.678830105718e-01 3.633337523523e-01 +3.587877559645e-01 3.542452845871e-01 3.497066007538e-01 3.451719663342e-01 +3.406416425153e-01 3.361158897820e-01 3.315949678984e-01 3.270791358894e-01 +3.225686520215e-01 3.180637737845e-01 3.135647578730e-01 3.090718601677e-01 +3.045853357170e-01 3.001054387190e-01 2.956324225032e-01 2.911665395122e-01 +2.867080412837e-01 2.822571784326e-01 2.778142006333e-01 2.733793566015e-01 +2.689528940770e-01 2.645350598058e-01 2.601260995227e-01 2.557262579339e-01 +2.513357786996e-01 2.469549044171e-01 2.425838766033e-01 2.382229356781e-01 +2.338723209471e-01 2.295322705852e-01 2.252030216196e-01 2.208848099134e-01 +2.165778701492e-01 2.122824358125e-01 2.079987391756e-01 2.037270112815e-01 +1.994674819278e-01 1.952203796510e-01 1.909859317102e-01 1.867643640722e-01 +1.825559013951e-01 1.783607670136e-01 1.741791829233e-01 1.700113697654e-01 +1.658575468121e-01 1.617179319512e-01 1.575927416715e-01 1.534821910481e-01 +1.493864937279e-01 1.453058619150e-01 1.412405063565e-01 1.371906363282e-01 +1.331564596210e-01 1.291381825264e-01 1.251360098231e-01 1.211501447634e-01 +1.171807890593e-01 1.132281428698e-01 1.092924047870e-01 1.053737718236e-01 +1.014724393995e-01 9.758860132924e-02 9.372244980940e-02 8.987417540592e-02 +8.604396704183e-02 8.223201198502e-02 7.843849583619e-02 7.466360251685e-02 +7.090751425763e-02 6.717041158660e-02 6.345247331779e-02 5.975387653992e-02 +5.607479660513e-02 5.241540711806e-02 4.877587992489e-02 4.515638510269e-02 +4.155709094883e-02 3.797816397057e-02 3.441976887483e-02 3.088206855808e-02 +2.736522409643e-02 2.386939473581e-02 2.039473788242e-02 1.694140909321e-02 +1.350956206661e-02 1.009934863341e-02 6.710918747778e-03 3.344420478420e-03 +-2.512273976170e-14 -3.322198415490e-03 -6.622032406798e-03 -9.899361531813e-03 +-1.315404727543e-02 -1.638595305741e-02 -1.959494424002e-02 -2.278088813553e-02 +-2.594365401354e-02 -2.908311310815e-02 -3.219913862489e-02 -3.529160574762e-02 +-3.836039164512e-02 -4.140537547759e-02 -4.442643840297e-02 -4.742346358305e-02 +-5.039633618947e-02 -5.334494340950e-02 -5.626917445168e-02 -5.916892055125e-02 +-6.204407497547e-02 -6.489453302871e-02 -6.772019205738e-02 -7.052095145470e-02 +-7.329671266530e-02 -7.604737918967e-02 -7.877285658831e-02 -8.147305248593e-02 +-8.414787657523e-02 -8.679724062070e-02 -8.942105846215e-02 -9.201924601808e-02 +-9.459172128888e-02 -9.713840435985e-02 -9.965921740409e-02 -1.021540846851e-01 +-1.046229325594e-01 -1.070656894788e-01 -1.094822859923e-01 -1.118726547488e-01 +-1.142367304979e-01 -1.165744500923e-01 -1.188857524890e-01 -1.211705787506e-01 +-1.234288720462e-01 -1.256605776527e-01 -1.278656429553e-01 -1.300440174480e-01 +-1.321956527344e-01 -1.343205025276e-01 -1.364185226502e-01 -1.384896710345e-01 +-1.405339077219e-01 -1.425511948627e-01 -1.445414967153e-01 -1.465047796453e-01 +-1.484410121248e-01 -1.503501647310e-01 -1.522322101451e-01 -1.540871231506e-01 +-1.559148806315e-01 -1.577154615709e-01 -1.594888470486e-01 -1.612350202393e-01 +-1.629539664097e-01 -1.646456729164e-01 -1.663101292031e-01 -1.679473267977e-01 +-1.695572593094e-01 -1.711399224253e-01 -1.726953139072e-01 -1.742234335878e-01 +-1.757242833674e-01 -1.771978672099e-01 -1.786441911383e-01 -1.800632632314e-01 +-1.814550936186e-01 -1.828196944759e-01 -1.841570800207e-01 -1.854672665076e-01 +-1.867502722230e-01 -1.880061174798e-01 -1.892348246122e-01 -1.904364179705e-01 +-1.916109239149e-01 -1.927583708101e-01 -1.938787890190e-01 -1.949722108968e-01 +-1.960386707848e-01 -1.970782050034e-01 -1.980908518463e-01 -1.990766515731e-01 +-2.000356464025e-01 -2.009678805055e-01 -2.018733999978e-01 -2.027522529330e-01 +-2.036044892942e-01 -2.044301609872e-01 -2.052293218322e-01 -2.060020275558e-01 +-2.067483357832e-01 -2.074683060295e-01 -2.081619996917e-01 -2.088294800398e-01 +-2.094708122085e-01 -2.100860631877e-01 -2.106753018143e-01 -2.112385987623e-01 +-2.117760265342e-01 -2.122876594511e-01 -2.127735736434e-01 -2.132338470410e-01 +-2.136685593635e-01 -2.140777921103e-01 -2.144616285503e-01 -2.148201537121e-01 +-2.151534543730e-01 -2.154616190492e-01 -2.157447379844e-01 -2.160029031399e-01 +-2.162362081830e-01 -2.164447484765e-01 -2.166286210670e-01 -2.167879246744e-01 +-2.169227596796e-01 -2.170332281139e-01 -2.171194336468e-01 -2.171814815742e-01 +-2.172194788069e-01 -2.172335338584e-01 -2.172237568329e-01 -2.171902594128e-01 +-2.171331548467e-01 -2.170525579367e-01 -2.169485850260e-01 -2.168213539861e-01 +-2.166709842043e-01 -2.164975965702e-01 -2.163013134635e-01 -2.160822587401e-01 +-2.158405577195e-01 -2.155763371712e-01 -2.152897253014e-01 -2.149808517391e-01 +-2.146498475232e-01 -2.142968450882e-01 -2.139219782505e-01 -2.135253821946e-01 +-2.131071934591e-01 -2.126675499226e-01 -2.122065907892e-01 -2.117244565748e-01 +-2.112212890922e-01 -2.106972314371e-01 -2.101524279729e-01 -2.095870243170e-01 +-2.090011673252e-01 -2.083950050775e-01 -2.077686868629e-01 -2.071223631645e-01 +-2.064561856448e-01 -2.057703071299e-01 -2.050648815952e-01 -2.043400641494e-01 +-2.035960110195e-01 -2.028328795354e-01 -2.020508281143e-01 -2.012500162453e-01 +-2.004306044739e-01 -1.995927543858e-01 -1.987366285918e-01 -1.978623907118e-01 +-1.969702053588e-01 -1.960602381230e-01 -1.951326555559e-01 -1.941876251546e-01 +-1.932253153449e-01 -1.922458954659e-01 -1.912495357537e-01 -1.902364073248e-01 +-1.892066821602e-01 -1.881605330886e-01 -1.870981337707e-01 -1.860196586822e-01 +-1.849252830975e-01 -1.838151830732e-01 -1.826895354317e-01 -1.815485177444e-01 +-1.803923083150e-01 -1.792210861632e-01 -1.780350310077e-01 -1.768343232495e-01 +-1.756191439552e-01 -1.743896748402e-01 -1.731460982522e-01 -1.718885971536e-01 +-1.706173551053e-01 -1.693325562496e-01 -1.680343852933e-01 -1.667230274906e-01 +-1.653986686265e-01 -1.640614949995e-01 -1.627116934048e-01 -1.613494511171e-01 +-1.599749558740e-01 -1.585883958584e-01 -1.571899596821e-01 -1.557798363681e-01 +-1.543582153342e-01 -1.529252863754e-01 -1.514812396472e-01 -1.500262656484e-01 +-1.485605552040e-01 -1.470842994484e-01 -1.455976898080e-01 -1.441009179842e-01 +-1.425941759366e-01 -1.410776558659e-01 -1.395515501966e-01 -1.380160515603e-01 +-1.364713527783e-01 -1.349176468453e-01 -1.333551269115e-01 -1.317839862665e-01 +-1.302044183217e-01 -1.286166165939e-01 -1.270207746877e-01 -1.254170862794e-01 +-1.238057450998e-01 -1.221869449169e-01 -1.205608795201e-01 -1.189277427023e-01 +-1.172877282441e-01 -1.156410298963e-01 -1.139878413639e-01 -1.123283562887e-01 +-1.106627682334e-01 -1.089912706645e-01 -1.073140569360e-01 -1.056313202728e-01 +-1.039432537543e-01 -1.022500502977e-01 -1.005519026420e-01 -9.884900333142e-02 +-9.714154469927e-02 -9.542971885147e-02 -9.371371765052e-02 -9.199373269930e-02 +-9.026995532499e-02 -8.854257656300e-02 -8.681178714101e-02 -8.507777746301e-02 +-8.334073759342e-02 -8.160085724131e-02 -7.985832574460e-02 -7.811333205436e-02 +-7.636606471922e-02 -7.461671186973e-02 -7.286546120293e-02 -7.111249996683e-02 +-6.935801494510e-02 -6.760219244173e-02 -6.584521826582e-02 -6.408727771638e-02 +-6.232855556727e-02 -6.056923605220e-02 -5.880950284972e-02 -5.704953906845e-02 +-5.528952723219e-02 -5.352964926532e-02 -5.177008647805e-02 -5.001101955200e-02 +-4.825262852562e-02 -4.649509277989e-02 -4.473859102399e-02 -4.298330128108e-02 +-4.122940087420e-02 -3.947706641221e-02 -3.772647377587e-02 -3.597779810396e-02 +-3.423121377953e-02 -3.248689441622e-02 -3.074501284469e-02 -2.900574109912e-02 +-2.726925040385e-02 -2.553571116007e-02 -2.380529293261e-02 -2.207816443691e-02 +-2.035449352594e-02 -1.863444717740e-02 -1.691819148084e-02 -1.520589162503e-02 +-1.349771188539e-02 -1.179381561144e-02 -1.009436521452e-02 -8.399522155443e-03 +-6.709446932398e-03 -5.024299068872e-03 -3.344237101723e-03 -1.669418569349e-03 +2.512273976170e-14 1.663863099950e-03 3.322016257243e-03 4.974306043361e-03 +6.620580085661e-03 + Type L N + 0 0 2 +1.000000000000e+00 9.999588771557e-01 9.998355147105e-01 9.996299309272e-01 +9.993421562398e-01 9.989722332485e-01 9.985202167122e-01 9.979861735385e-01 +9.973701827725e-01 9.966723355824e-01 9.958927352436e-01 9.950314971204e-01 +9.940887486459e-01 9.930646292992e-01 9.919592905814e-01 9.907728959881e-01 +9.895056209813e-01 9.881576529582e-01 9.867291912182e-01 9.852204469278e-01 +9.836316430835e-01 9.819630144724e-01 9.802148076310e-01 9.783872808018e-01 +9.764807038877e-01 9.744953584044e-01 9.724315374315e-01 9.702895455599e-01 +9.680696988392e-01 9.657723247216e-01 9.633977620041e-01 9.609463607696e-01 +9.584184823246e-01 9.558144991363e-01 9.531347947667e-01 9.503797638053e-01 +9.475498117999e-01 9.446453551853e-01 9.416668212101e-01 9.386146478614e-01 +9.354892837886e-01 9.322911882240e-01 9.290208309025e-01 9.256786919789e-01 +9.222652619442e-01 9.187810415390e-01 9.152265416659e-01 9.116022833003e-01 +9.079087973984e-01 9.041466248047e-01 9.003163161571e-01 8.964184317905e-01 +8.924535416387e-01 8.884222251345e-01 8.843250711084e-01 8.801626776859e-01 +8.759356521824e-01 8.716446109973e-01 8.672901795064e-01 8.628729919524e-01 +8.583936913341e-01 8.538529292946e-01 8.492513660070e-01 8.445896700594e-01 +8.398685183386e-01 8.350885959116e-01 8.302505959068e-01 8.253552193925e-01 +8.204031752555e-01 8.153951800773e-01 8.103319580098e-01 8.052142406486e-01 +8.000427669069e-01 7.948182828859e-01 7.895415417463e-01 7.842133035765e-01 +7.788343352617e-01 7.734054103500e-01 7.679273089188e-01 7.624008174394e-01 +7.568267286407e-01 7.512058413721e-01 7.455389604655e-01 7.398268965953e-01 +7.340704661390e-01 7.282704910361e-01 7.224277986455e-01 7.165432216036e-01 +7.106175976801e-01 7.046517696335e-01 6.986465850664e-01 6.926028962792e-01 +6.865215601232e-01 6.804034378539e-01 6.742493949824e-01 6.680603011268e-01 +6.618370298633e-01 6.555804585759e-01 6.492914683061e-01 6.429709436022e-01 +6.366197723676e-01 6.302388457091e-01 6.238290577843e-01 6.173913056491e-01 +6.109264891046e-01 6.044355105433e-01 5.979192747957e-01 5.913786889758e-01 +5.848146623272e-01 5.782281060679e-01 5.716199332362e-01 5.649910585350e-01 +5.583423981772e-01 5.516748697302e-01 5.449893919607e-01 5.382868846788e-01 +5.315682685834e-01 5.248344651060e-01 5.180863962557e-01 5.113249844634e-01 +5.045511524271e-01 4.977658229563e-01 4.909699188170e-01 4.841643625769e-01 +4.773500764507e-01 4.705279821459e-01 4.636990007081e-01 4.568640523675e-01 +4.500240563851e-01 4.431799308996e-01 4.363325927745e-01 4.294829574453e-01 +4.226319387680e-01 4.157804488669e-01 4.089293979839e-01 4.020796943278e-01 +3.952322439240e-01 3.883879504653e-01 3.815477151626e-01 3.747124365969e-01 +3.678830105718e-01 3.610603299659e-01 3.542452845871e-01 3.474387610269e-01 +3.406416425154e-01 3.338548087774e-01 3.270791358894e-01 3.203154961369e-01 +3.135647578731e-01 3.068277853780e-01 3.001054387190e-01 2.933985736121e-01 +2.867080412837e-01 2.800346883341e-01 2.733793566015e-01 2.667428830274e-01 +2.601260995227e-01 2.535298328350e-01 2.469549044171e-01 2.404021302968e-01 +2.338723209472e-01 2.273662811590e-01 2.208848099135e-01 2.144287002568e-01 +2.079987391756e-01 2.015957074739e-01 1.952203796510e-01 1.888735237814e-01 +1.825559013952e-01 1.762682673601e-01 1.700113697654e-01 1.637859498066e-01 +1.575927416715e-01 1.514324724284e-01 1.453058619151e-01 1.392136226292e-01 +1.331564596211e-01 1.271350703867e-01 1.211501447634e-01 1.152023648264e-01 +1.092924047871e-01 1.034209308930e-01 9.758860132928e-02 9.179606612181e-02 +8.604396704186e-02 8.033293751256e-02 7.466360251689e-02 6.903657850744e-02 +6.345247331783e-02 5.791188607580e-02 5.241540711809e-02 4.696361790703e-02 +4.155709094886e-02 3.619638971384e-02 3.088206855812e-02 2.561467264741e-02 +2.039473788245e-02 1.522279082631e-02 1.009934863345e-02 5.024918980689e-03 +7.389596982152e-15 -4.974919786837e-03 -9.899361531780e-03 -1.477285612207e-02 +-1.959494423999e-02 -2.436517642069e-02 -2.908311310811e-02 -3.374832470902e-02 +-3.836039164509e-02 -4.291890440306e-02 -4.742346358302e-02 -5.187367994466e-02 +-5.626917445165e-02 -6.060957831403e-02 -6.489453302868e-02 -6.912369041777e-02 +-7.329671266528e-02 -7.741327235156e-02 -8.147305248590e-02 -8.547574653711e-02 +-8.942105846213e-02 -9.330870273266e-02 -9.713840435983e-02 -1.009098989168e-01 +-1.046229325594e-01 -1.082772620449e-01 -1.118726547487e-01 -1.154088886789e-01 +-1.188857524890e-01 -1.223030454888e-01 -1.256605776527e-01 -1.289581696271e-01 +-1.321956527344e-01 -1.353728689764e-01 -1.384896710345e-01 -1.415459222689e-01 +-1.445414967152e-01 -1.474762790796e-01 -1.503501647310e-01 -1.531630596929e-01 +-1.559148806314e-01 -1.586055548431e-01 -1.612350202393e-01 -1.638032253296e-01 +-1.663101292030e-01 -1.687557015072e-01 -1.711399224253e-01 -1.734627826523e-01 +-1.757242833674e-01 -1.779244362065e-01 -1.800632632314e-01 -1.821407968977e-01 +-1.841570800207e-01 -1.861121657396e-01 -1.880061174797e-01 -1.898390089126e-01 +-1.916109239149e-01 -1.933219565247e-01 -1.949722108968e-01 -1.965618012556e-01 +-1.980908518463e-01 -1.995594968849e-01 -2.009678805055e-01 -2.023161567062e-01 +-2.036044892942e-01 -2.048330518274e-01 -2.060020275558e-01 -2.071116093607e-01 +-2.081619996917e-01 -2.091534105031e-01 -2.100860631877e-01 -2.109601885094e-01 +-2.117760265342e-01 -2.125338265592e-01 -2.132338470410e-01 -2.138763555209e-01 +-2.144616285503e-01 -2.149899516135e-01 -2.154616190492e-01 -2.158769339703e-01 +-2.162362081830e-01 -2.165397621037e-01 -2.167879246744e-01 -2.169810332771e-01 +-2.171194336468e-01 -2.172034797827e-01 -2.172335338584e-01 -2.172099661307e-01 +-2.171331548467e-01 -2.170034861501e-01 -2.168213539861e-01 -2.165871600048e-01 +-2.163013134635e-01 -2.159642311277e-01 -2.155763371712e-01 -2.151380630747e-01 +-2.146498475232e-01 -2.141121363026e-01 -2.135253821946e-01 -2.128900448716e-01 +-2.122065907892e-01 -2.114754930785e-01 -2.106972314371e-01 -2.098722920193e-01 +-2.090011673253e-01 -2.080843560887e-01 -2.071223631645e-01 -2.061156994150e-01 +-2.050648815952e-01 -2.039704322376e-01 -2.028328795354e-01 -2.016527572263e-01 +-2.004306044739e-01 -1.991669657493e-01 -1.978623907118e-01 -1.965174340891e-01 +-1.951326555559e-01 -1.937086196133e-01 -1.922458954659e-01 -1.907450569001e-01 +-1.892066821602e-01 -1.876313538246e-01 -1.860196586822e-01 -1.843721876067e-01 +-1.826895354318e-01 -1.809723008254e-01 -1.792210861633e-01 -1.774364974027e-01 +-1.756191439552e-01 -1.737696385594e-01 -1.718885971536e-01 -1.699766387472e-01 +-1.680343852933e-01 -1.660624615594e-01 -1.640614949995e-01 -1.620321156246e-01 +-1.599749558740e-01 -1.578906504859e-01 -1.557798363681e-01 -1.536431524689e-01 +-1.514812396472e-01 -1.492947405431e-01 -1.470842994485e-01 -1.448505621774e-01 +-1.425941759367e-01 -1.403157891963e-01 -1.380160515603e-01 -1.356956136373e-01 +-1.333551269115e-01 -1.309952436141e-01 -1.286166165939e-01 -1.262198991893e-01 +-1.238057450998e-01 -1.213748082581e-01 -1.189277427024e-01 -1.164652024486e-01 +-1.139878413639e-01 -1.114963130395e-01 -1.089912706645e-01 -1.064733669002e-01 +-1.039432537543e-01 -1.014015824560e-01 -9.884900333145e-02 -9.628616568006e-02 +-9.371371765055e-02 -9.113230611832e-02 -8.854257656303e-02 -8.594517294687e-02 +-8.334073759345e-02 -8.072991106737e-02 -7.811333205439e-02 -7.549163724239e-02 +-7.286546120296e-02 -7.023543627378e-02 -6.760219244177e-02 -6.496635722697e-02 +-6.232855556730e-02 -5.968940970410e-02 -5.704953906848e-02 -5.440956016866e-02 +-5.177008647808e-02 -4.913172832449e-02 -4.649509277992e-02 -4.386078355168e-02 +-4.122940087423e-02 -3.860154140214e-02 -3.597779810400e-02 -3.335876015735e-02 +-3.074501284472e-02 -2.813713745071e-02 -2.553571116010e-02 -2.294130695715e-02 +-2.035449352598e-02 -1.777583515209e-02 -1.520589162507e-02 -1.264521814239e-02 +-1.009436521455e-02 -7.553878571246e-03 -5.024299068905e-03 -2.506162599395e-03 +-7.389596982152e-15 2.493663035294e-03 4.974306043329e-03 7.441413877863e-03 +9.894476794447e-03 1.233299053393e-02 1.475645640461e-02 1.716438136306e-02 +1.955627809357e-02 2.193166508616e-02 2.429006671325e-02 2.663101330492e-02 +2.895404122269e-02 3.125869293193e-02 3.354451707279e-02 3.581106852968e-02 +3.805790849927e-02 4.028460455704e-02 4.249073072231e-02 4.467586752178e-02 +4.683960205159e-02 4.898152803781e-02 5.110124589545e-02 5.319836278591e-02 +5.527249267288e-02 5.732325637672e-02 5.935028162727e-02 6.135320311502e-02 +6.333166254088e-02 6.528530866416e-02 6.721379734912e-02 6.911679160987e-02 +7.099396165367e-02 7.284498492262e-02 7.466954613379e-02 7.646733731766e-02 +7.823805785504e-02 7.998141451225e-02 8.169712147484e-02 8.338490037948e-02 +8.504448034442e-02 8.667559799815e-02 8.827799750657e-02 8.985143059840e-02 +9.139565658906e-02 9.291044240281e-02 9.439556259334e-02 9.585079936266e-02 +9.727594257839e-02 9.867078978937e-02 1.000351462397e-01 1.013688248810e-01 +1.026716463832e-01 1.039434391438e-01 1.051840392948e-01 1.063932907093e-01 +1.075710450048e-01 1.087171615467e-01 1.098315074484e-01 1.109139575712e-01 +1.119643945218e-01 1.129827086485e-01 1.139687980356e-01 1.149225684962e-01 +1.158439335639e-01 1.167328144823e-01 1.175891401928e-01 1.184128473218e-01 +1.192038801653e-01 1.199621906724e-01 1.206877384270e-01 1.213804906286e-01 +1.220404220705e-01 1.226675151177e-01 1.232617596819e-01 1.238231531963e-01 +1.243517005880e-01 1.248474142494e-01 1.253103140077e-01 1.257404270933e-01 +1.261377881068e-01 1.265024389837e-01 1.268344289589e-01 1.271338145288e-01 +1.274006594126e-01 1.276350345115e-01 1.278370178673e-01 1.280066946191e-01 +1.281441569587e-01 1.282495040846e-01 1.283228421551e-01 1.283642842391e-01 +1.283739502669e-01 1.283519669785e-01 1.282984678711e-01 1.282135931456e-01 +1.280974896510e-01 1.279503108287e-01 1.277722166546e-01 1.275633735804e-01 +1.273239544735e-01 1.270541385561e-01 1.267541113426e-01 1.264240645763e-01 +1.260641961644e-01 1.256747101130e-01 1.252558164592e-01 1.248077312040e-01 +1.243306762428e-01 1.238248792955e-01 1.232905738353e-01 1.227279990164e-01 +1.221373996013e-01 1.215190258860e-01 1.208731336255e-01 1.201999839574e-01 +1.194998433250e-01 1.187729833992e-01 1.180196810003e-01 1.172402180176e-01 +1.164348813293e-01 1.156039627211e-01 1.147477588040e-01 1.138665709311e-01 +1.129607051143e-01 1.120304719395e-01 1.110761864814e-01 1.100981682176e-01 +1.090967409418e-01 1.080722326769e-01 1.070249755862e-01 1.059553058858e-01 +1.048635637545e-01 1.037500932445e-01 1.026152421907e-01 1.014593621201e-01 +1.002828081598e-01 9.908593894552e-02 9.786911652869e-02 9.663270628381e-02 +9.537707681491e-02 9.410259986172e-02 9.280965020549e-02 9.149860557431e-02 +9.016984654819e-02 8.882375646372e-02 8.746072131842e-02 8.608112967483e-02 +8.468537256426e-02 8.327384339038e-02 8.184693783247e-02 8.040505374852e-02 +7.894859107812e-02 7.747795174524e-02 7.599353956071e-02 7.449576012479e-02 +7.298502072940e-02 7.146173026050e-02 6.992629910019e-02 6.837913902896e-02 +6.682066312777e-02 6.525128568021e-02 6.367142207471e-02 6.208148870668e-02 +6.048190288085e-02 5.887308271361e-02 5.725544703546e-02 5.562941529365e-02 +5.399540745492e-02 5.235384390837e-02 5.070514536864e-02 4.904973277921e-02 +4.738802721591e-02 4.572044979079e-02 4.404742155614e-02 4.236936340890e-02 +4.068669599533e-02 3.899983961602e-02 3.730921413129e-02 3.561523886688e-02 +3.391833252013e-02 3.221891306649e-02 3.051739766655e-02 2.881420257340e-02 +2.710974304059e-02 2.540443323047e-02 2.369868612311e-02 2.199291342571e-02 +2.028752548258e-02 1.858293118562e-02 1.687953788549e-02 1.517775130329e-02 +1.347797544288e-02 1.178061250383e-02 1.008606279508e-02 8.394724649155e-03 +6.706994337188e-03 5.023265984567e-03 3.343931487334e-03 1.669380429316e-03 +7.389596982152e-15 -1.663825086774e-03 -3.321712673450e-03 -4.973283238437e-03 +-6.618159975091e-03 + Type L N + 0 0 3 +1.000000000000e+00 9.999268934227e-01 9.997075929310e-01 9.993421562398e-01 +9.988306795205e-01 9.981732973708e-01 9.973701827725e-01 9.964215470375e-01 +9.953276397415e-01 9.940887486459e-01 9.927051996072e-01 9.911773564758e-01 +9.895056209813e-01 9.876904326070e-01 9.857322684524e-01 9.836316430835e-01 +9.813891083719e-01 9.790052533223e-01 9.764807038877e-01 9.738161227738e-01 +9.710122092318e-01 9.680696988392e-01 9.649893632704e-01 9.617720100548e-01 +9.584184823246e-01 9.549296585514e-01 9.513064522713e-01 9.475498117999e-01 +9.436607199360e-01 9.396401936544e-01 9.354892837886e-01 9.312090747032e-01 +9.268006839549e-01 9.222652619442e-01 9.176039915569e-01 9.128180877951e-01 +9.079087973983e-01 9.028773984559e-01 8.977252000079e-01 8.924535416387e-01 +8.870637930592e-01 8.815573536812e-01 8.759356521824e-01 8.702001460618e-01 +8.643523211873e-01 8.583936913341e-01 8.523257977150e-01 8.461502085016e-01 +8.398685183386e-01 8.334823478491e-01 8.269933431327e-01 8.204031752555e-01 +8.137135397329e-01 8.069261560055e-01 8.000427669069e-01 7.930651381253e-01 +7.859950576585e-01 7.788343352617e-01 7.715848018895e-01 7.642483091312e-01 +7.568267286407e-01 7.493219515597e-01 7.417358879367e-01 7.340704661390e-01 +7.263276322605e-01 7.185093495243e-01 7.106175976801e-01 7.026543723976e-01 +6.946216846549e-01 6.865215601232e-01 6.783560385471e-01 6.701271731211e-01 +6.618370298633e-01 6.534876869844e-01 6.450812342547e-01 6.366197723676e-01 +6.281054123006e-01 6.195402746735e-01 6.109264891046e-01 6.022661935646e-01 +5.935615337287e-01 5.848146623272e-01 5.760277384943e-01 5.672029271161e-01 +5.583423981772e-01 5.494483261068e-01 5.405228891241e-01 5.315682685834e-01 +5.225866483191e-01 5.135802139904e-01 5.045511524271e-01 4.955016509752e-01 +4.864338968434e-01 4.773500764507e-01 4.682523747753e-01 4.591429747041e-01 +4.500240563851e-01 4.408977965803e-01 4.317663680216e-01 4.226319387680e-01 +4.134966715663e-01 4.043627232139e-01 3.952322439240e-01 3.861073766949e-01 +3.769902566816e-01 3.678830105718e-01 3.587877559645e-01 3.497066007538e-01 +3.406416425154e-01 3.315949678984e-01 3.225686520215e-01 3.135647578731e-01 +3.045853357170e-01 2.956324225032e-01 2.867080412837e-01 2.778142006333e-01 +2.689528940770e-01 2.601260995227e-01 2.513357786996e-01 2.425838766033e-01 +2.338723209472e-01 2.252030216196e-01 2.165778701492e-01 2.079987391756e-01 +1.994674819278e-01 1.909859317103e-01 1.825559013952e-01 1.741791829233e-01 +1.658575468121e-01 1.575927416715e-01 1.493864937280e-01 1.412405063565e-01 +1.331564596210e-01 1.251360098231e-01 1.171807890593e-01 1.092924047870e-01 +1.014724393995e-01 9.372244980942e-02 8.604396704184e-02 7.843849583621e-02 +7.090751425765e-02 6.345247331781e-02 5.607479660515e-02 4.877587992491e-02 +4.155709094885e-02 3.441976887485e-02 2.736522409644e-02 2.039473788244e-02 +1.350956206663e-02 6.710918747795e-03 -8.583855418087e-15 -6.622032406781e-03 +-1.315404727542e-02 -1.959494424001e-02 -2.594365401353e-02 -3.219913862487e-02 +-3.836039164510e-02 -4.442643840296e-02 -5.039633618945e-02 -5.626917445166e-02 +-6.204407497546e-02 -6.772019205736e-02 -7.329671266529e-02 -7.877285658830e-02 +-8.414787657521e-02 -8.942105846214e-02 -9.459172128887e-02 -9.965921740407e-02 +-1.046229325594e-01 -1.094822859923e-01 -1.142367304979e-01 -1.188857524890e-01 +-1.234288720462e-01 -1.278656429553e-01 -1.321956527344e-01 -1.364185226502e-01 +-1.405339077219e-01 -1.445414967153e-01 -1.484410121248e-01 -1.522322101451e-01 +-1.559148806314e-01 -1.594888470486e-01 -1.629539664097e-01 -1.663101292031e-01 +-1.695572593094e-01 -1.726953139072e-01 -1.757242833674e-01 -1.786441911383e-01 +-1.814550936186e-01 -1.841570800207e-01 -1.867502722230e-01 -1.892348246122e-01 +-1.916109239149e-01 -1.938787890189e-01 -1.960386707847e-01 -1.980908518463e-01 +-2.000356464025e-01 -2.018733999978e-01 -2.036044892942e-01 -2.052293218322e-01 +-2.067483357832e-01 -2.081619996917e-01 -2.094708122085e-01 -2.106753018143e-01 +-2.117760265342e-01 -2.127735736434e-01 -2.136685593635e-01 -2.144616285503e-01 +-2.151534543730e-01 -2.157447379844e-01 -2.162362081830e-01 -2.166286210670e-01 +-2.169227596796e-01 -2.171194336468e-01 -2.172194788069e-01 -2.172237568329e-01 +-2.171331548467e-01 -2.169485850260e-01 -2.166709842043e-01 -2.163013134635e-01 +-2.158405577195e-01 -2.152897253014e-01 -2.146498475232e-01 -2.139219782505e-01 +-2.131071934591e-01 -2.122065907892e-01 -2.112212890922e-01 -2.101524279729e-01 +-2.090011673253e-01 -2.077686868629e-01 -2.064561856448e-01 -2.050648815952e-01 +-2.035960110195e-01 -2.020508281143e-01 -2.004306044739e-01 -1.987366285918e-01 +-1.969702053588e-01 -1.951326555559e-01 -1.932253153449e-01 -1.912495357537e-01 +-1.892066821602e-01 -1.870981337707e-01 -1.849252830975e-01 -1.826895354318e-01 +-1.803923083151e-01 -1.780350310077e-01 -1.756191439552e-01 -1.731460982522e-01 +-1.706173551053e-01 -1.680343852933e-01 -1.653986686265e-01 -1.627116934048e-01 +-1.599749558740e-01 -1.571899596821e-01 -1.543582153342e-01 -1.514812396472e-01 +-1.485605552041e-01 -1.455976898080e-01 -1.425941759367e-01 -1.395515501966e-01 +-1.364713527783e-01 -1.333551269115e-01 -1.302044183218e-01 -1.270207746877e-01 +-1.238057450998e-01 -1.205608795201e-01 -1.172877282441e-01 -1.139878413639e-01 +-1.106627682334e-01 -1.073140569360e-01 -1.039432537543e-01 -1.005519026420e-01 +-9.714154469929e-02 -9.371371765054e-02 -9.026995532500e-02 -8.681178714103e-02 +-8.334073759344e-02 -7.985832574462e-02 -7.636606471923e-02 -7.286546120294e-02 +-6.935801494512e-02 -6.584521826584e-02 -6.232855556729e-02 -5.880950284974e-02 +-5.528952723221e-02 -5.177008647807e-02 -4.825262852563e-02 -4.473859102400e-02 +-4.122940087421e-02 -3.772647377589e-02 -3.423121377955e-02 -3.074501284471e-02 +-2.726925040387e-02 -2.380529293263e-02 -2.035449352596e-02 -1.691819148085e-02 +-1.349771188540e-02 -1.009436521454e-02 -6.709446932414e-03 -3.344237101739e-03 +8.583855418087e-15 3.322016257227e-03 6.620580085644e-03 9.894476794462e-03 +1.314250894107e-02 1.636349667822e-02 1.955627809359e-02 2.271970954158e-02 +2.585266596732e-02 2.895404122270e-02 3.202274837443e-02 3.505772000398e-02 +3.805790849929e-02 4.102228633832e-02 4.394984636413e-02 4.683960205160e-02 +4.969058776567e-02 5.250185901098e-02 5.527249267289e-02 5.800158724986e-02 +6.068826307699e-02 6.333166254089e-02 6.593095028556e-02 6.848531340948e-02 +7.099396165368e-02 7.345612758088e-02 7.587106674557e-02 7.823805785505e-02 +8.055640292137e-02 8.282542740419e-02 8.504448034443e-02 8.721293448883e-02 +8.933018640529e-02 9.139565658907e-02 9.340878955969e-02 9.536905394874e-02 +9.727594257840e-02 9.912897253077e-02 1.009276852080e-01 1.026716463832e-01 +1.043604462423e-01 1.059936994162e-01 1.075710450049e-01 1.090921465908e-01 +1.105566922449e-01 1.119643945218e-01 1.133149904477e-01 1.146082414973e-01 +1.158439335639e-01 1.170218769186e-01 1.181419061618e-01 1.192038801653e-01 +1.202076820060e-01 1.211532188904e-01 1.220404220705e-01 1.228692467518e-01 +1.236396719912e-01 1.243517005880e-01 1.250053589653e-01 1.256006970439e-01 +1.261377881068e-01 1.266167286569e-01 1.270376382654e-01 1.274006594126e-01 +1.277059573205e-01 1.279537197783e-01 1.281441569587e-01 1.282775012279e-01 +1.283540069471e-01 1.283739502669e-01 1.283376289143e-01 1.282453619720e-01 +1.280974896510e-01 1.278943730559e-01 1.276363939434e-01 1.273239544735e-01 +1.269574769544e-01 1.265374035805e-01 1.260641961644e-01 1.255383358617e-01 +1.249603228902e-01 1.243306762428e-01 1.236499333941e-01 1.229186500017e-01 +1.221373996013e-01 1.213067732963e-01 1.204273794422e-01 1.194998433250e-01 +1.185248068352e-01 1.175029281366e-01 1.164348813293e-01 1.153213561093e-01 +1.141630574224e-01 1.129607051143e-01 1.117150335758e-01 1.104267913845e-01 +1.090967409418e-01 1.077256581065e-01 1.063143318244e-01 1.048635637545e-01 +1.033741678916e-01 1.018469701860e-01 1.002828081598e-01 9.868253052003e-02 +9.704699676952e-02 9.537707681490e-02 9.367365057201e-02 9.193760756917e-02 +9.016984654818e-02 8.837127506339e-02 8.654280907894e-02 8.468537256425e-02 +8.279989708810e-02 8.088732141129e-02 7.894859107811e-02 7.698465800680e-02 +7.499648007916e-02 7.298502072939e-02 7.095124853242e-02 6.889613679188e-02 +6.682066312775e-02 6.472580906407e-02 6.261255961660e-02 6.048190288084e-02 +5.833482962040e-02 5.617233285596e-02 5.399540745490e-02 5.180504972191e-02 +4.960225699053e-02 4.738802721590e-02 4.516335856891e-02 4.292924903178e-02 +4.068669599531e-02 3.843669585791e-02 3.618024362661e-02 3.391833252011e-02 +3.165195357415e-02 2.938209524917e-02 2.710974304058e-02 2.483587909164e-02 +2.256148180925e-02 2.028752548256e-02 1.801497990482e-02 1.574480999833e-02 +1.347797544286e-02 1.121543030753e-02 8.958122686274e-03 6.706994337172e-03 +4.462980325576e-03 2.227008671311e-03 -8.630974746701e-15 -2.217132801389e-03 +-4.423484924482e-03 -6.618159975107e-03 -8.800270304154e-03 -1.096893733375e-02 +-1.312329187859e-02 -1.526247446229e-02 -1.738563562868e-02 -1.949193624797e-02 +-2.158054781756e-02 -2.365065275757e-02 -2.570144470082e-02 -2.773212877731e-02 +-2.974192189297e-02 -3.173005300270e-02 -3.369576337758e-02 -3.563830686613e-02 +-3.755695014953e-02 -3.945097299084e-02 -4.131966847795e-02 -4.316234326036e-02 +-4.497831777956e-02 -4.676692649316e-02 -4.852751809239e-02 -5.025945571324e-02 +-5.196211714088e-02 -5.363489500755e-02 -5.527719698371e-02 -5.688844596238e-02 +-5.846808023680e-02 -6.001555367111e-02 -6.153033586423e-02 -6.301191230675e-02 +-6.445978453086e-02 -6.587347025326e-02 -6.725250351099e-02 -6.859643479029e-02 +-6.990483114816e-02 -7.117727632702e-02 -7.241337086198e-02 -7.361273218113e-02 +-7.477499469850e-02 -7.589980989991e-02 -7.698684642154e-02 -7.803579012129e-02 +-7.904634414293e-02 -8.001822897299e-02 -8.095118249047e-02 -8.184496000923e-02 +-8.269933431327e-02 -8.351409568469e-02 -8.428905192453e-02 -8.502402836639e-02 +-8.571886788288e-02 -8.637343088493e-02 -8.698759531398e-02 -8.756125662706e-02 +-8.809432777479e-02 -8.858673917239e-02 -8.903843866361e-02 -8.944939147778e-02 +-8.981958017984e-02 -9.014900461357e-02 -9.043768183789e-02 -9.068564605646e-02 +-9.089294854048e-02 -9.105965754475e-02 -9.118585821725e-02 -9.127165250193e-02 +-9.131715903518e-02 -9.132251303570e-02 -9.128786618804e-02 -9.121338651981e-02 +-9.109925827260e-02 -9.094568176680e-02 -9.075287326016e-02 -9.052106480049e-02 +-9.025050407227e-02 -8.994145423743e-02 -8.959419377037e-02 -8.920901628719e-02 +-8.878623036942e-02 -8.832615938206e-02 -8.782914128630e-02 -8.729552844687e-02 +-8.672568743409e-02 -8.611999882078e-02 -8.547885697412e-02 -8.480266984256e-02 +-8.409185873785e-02 -8.334685811228e-02 -8.256811533135e-02 -8.175609044183e-02 +-8.091125593543e-02 -8.003409650805e-02 -7.912510881496e-02 -7.818480122174e-02 +-7.721369355130e-02 -7.621231682701e-02 -7.518121301206e-02 -7.412093474520e-02 +-7.303204507291e-02 -7.191511717825e-02 -7.077073410629e-02 -6.959948848655e-02 +-6.840198225222e-02 -6.717882635665e-02 -6.593064048684e-02 -6.465805277447e-02 +-6.336169950422e-02 -6.204222481980e-02 -6.070028042758e-02 -5.933652529816e-02 +-5.795162536585e-02 -5.654625322624e-02 -5.512108783203e-02 -5.367681418722e-02 +-5.221412303970e-02 -5.073371057258e-02 -4.923627809413e-02 -4.772253172675e-02 +-4.619318209476e-02 -4.464894401151e-02 -4.309053616559e-02 -4.151868080657e-02 +-3.993410343018e-02 -3.833753246318e-02 -3.672969894800e-02 -3.511133622732e-02 +-3.348317962867e-02 -3.184596614922e-02 -3.020043414085e-02 -2.854732299567e-02 +-2.688737283210e-02 -2.522132418162e-02 -2.354991767633e-02 -2.187389373746e-02 +-2.019399226492e-02 -1.851095232806e-02 -1.682551185774e-02 -1.513840733978e-02 +-1.345037351001e-02 -1.176214305102e-02 -1.007444629062e-02 -8.388010902267e-03 +-6.703561607512e-03 -5.021819880594e-03 -3.343503655279e-03 -1.669327034086e-03 +8.583855418087e-15 1.663771869264e-03 3.321287684165e-03 4.971851523590e-03 +6.614772712065e-03 + Type L N + 0 0 4 +1.000000000000e+00 9.998857723822e-01 9.995431365007e-01 9.989722332485e-01 +9.981732973708e-01 9.971466573496e-01 9.958927352436e-01 9.944120464808e-01 +9.927051996072e-01 9.907728959881e-01 9.886159294654e-01 9.862351859690e-01 +9.836316430835e-01 9.808063695699e-01 9.777605248430e-01 9.744953584044e-01 +9.710122092318e-01 9.673125051241e-01 9.633977620041e-01 9.592695831779e-01 +9.549296585514e-01 9.503797638053e-01 9.456217595285e-01 9.406575903096e-01 +9.354892837886e-01 9.301189496681e-01 9.245487786841e-01 9.187810415390e-01 +9.128180877951e-01 9.066623447304e-01 9.003163161571e-01 8.937825812035e-01 +8.870637930592e-01 8.801626776859e-01 8.730820324926e-01 8.658247249770e-01 +8.583936913341e-01 8.507919350314e-01 8.430225253529e-01 8.350885959116e-01 +8.269933431327e-01 8.187400247058e-01 8.103319580098e-01 8.017725185095e-01 +7.930651381253e-01 7.842133035765e-01 7.752205547002e-01 7.660904827447e-01 +7.568267286407e-01 7.474329812490e-01 7.379129755873e-01 7.282704910361e-01 +7.185093495243e-01 7.086334136974e-01 6.986465850664e-01 6.885528021412e-01 +6.783560385471e-01 6.680603011268e-01 6.576696280293e-01 6.471880867846e-01 +6.366197723676e-01 6.259688052507e-01 6.152393294468e-01 6.044355105433e-01 +5.935615337287e-01 5.826216018118e-01 5.716199332362e-01 5.605607600890e-01 +5.494483261068e-01 5.382868846788e-01 5.270806968481e-01 5.158340293127e-01 +5.045511524271e-01 4.932363382055e-01 4.818938583272e-01 4.705279821459e-01 +4.591429747041e-01 4.477430947521e-01 4.363325927745e-01 4.249157090245e-01 +4.134966715664e-01 4.020796943278e-01 3.906689751635e-01 3.792686939297e-01 +3.678830105718e-01 3.565160632258e-01 3.451719663343e-01 3.338548087774e-01 +3.225686520215e-01 3.113175282844e-01 3.001054387190e-01 2.889363516174e-01 +2.778142006333e-01 2.667428830274e-01 2.557262579339e-01 2.447681446495e-01 +2.338723209472e-01 2.230425214136e-01 2.122824358125e-01 2.015957074739e-01 +1.909859317103e-01 1.804566542612e-01 1.700113697654e-01 1.596535202632e-01 +1.493864937280e-01 1.392136226292e-01 1.291381825264e-01 1.191633906954e-01 +1.092924047871e-01 9.952832151981e-02 8.987417540595e-02 8.033293751256e-02 +7.090751425767e-02 6.160074624218e-02 5.241540711809e-02 4.335420249347e-02 +3.441976887486e-02 2.561467264741e-02 1.694140909324e-02 8.402401448597e-03 +7.672312953838e-15 -8.263518780010e-03 -1.638595305738e-02 -2.436517642069e-02 +-3.219913862486e-02 -3.988586629398e-02 -4.742346358302e-02 -5.481011279815e-02 +-6.204407497544e-02 -6.912369041777e-02 -7.604737918964e-02 -8.281364156991e-02 +-8.942105846213e-02 -9.586829176246e-02 -1.021540846851e-01 -1.082772620449e-01 +-1.142367304978e-01 -1.200314787380e-01 -1.256605776527e-01 -1.311231804344e-01 +-1.364185226502e-01 -1.415459222689e-01 -1.465047796452e-01 -1.512945774624e-01 +-1.559148806314e-01 -1.603653361497e-01 -1.646456729163e-01 -1.687557015072e-01 +-1.726953139072e-01 -1.764644832025e-01 -1.800632632314e-01 -1.834917881941e-01 +-1.867502722230e-01 -1.898390089126e-01 -1.927583708100e-01 -1.955088088658e-01 +-1.980908518463e-01 -2.005051057080e-01 -2.027522529330e-01 -2.048330518274e-01 +-2.067483357832e-01 -2.084990125027e-01 -2.100860631877e-01 -2.115105416927e-01 +-2.127735736434e-01 -2.138763555209e-01 -2.148201537121e-01 -2.156063035269e-01 +-2.162362081830e-01 -2.167113377586e-01 -2.170332281139e-01 -2.172034797827e-01 +-2.172237568329e-01 -2.170957856992e-01 -2.168213539861e-01 -2.164023092444e-01 +-2.158405577195e-01 -2.151380630747e-01 -2.142968450882e-01 -2.133189783257e-01 +-2.122065907892e-01 -2.109618625430e-01 -2.095870243170e-01 -2.080843560887e-01 +-2.064561856448e-01 -2.047048871231e-01 -2.028328795354e-01 -2.008426252725e-01 +-1.987366285918e-01 -1.965174340891e-01 -1.941876251546e-01 -1.917498224147e-01 +-1.892066821602e-01 -1.865608947617e-01 -1.838151830732e-01 -1.809723008254e-01 +-1.780350310077e-01 -1.750061842432e-01 -1.718885971536e-01 -1.686851307183e-01 +-1.653986686265e-01 -1.620321156246e-01 -1.585883958585e-01 -1.550704512126e-01 +-1.514812396472e-01 -1.478237335327e-01 -1.441009179842e-01 -1.403157891963e-01 +-1.364713527783e-01 -1.325706220924e-01 -1.286166165939e-01 -1.246123601762e-01 +-1.205608795201e-01 -1.164652024486e-01 -1.123283562887e-01 -1.081533662405e-01 +-1.039432537543e-01 -9.970103491761e-02 -9.542971885150e-02 -9.113230611832e-02 +-8.681178714104e-02 -8.247114063521e-02 -7.811333205440e-02 -7.374131204982e-02 +-6.935801494513e-02 -6.496635722697e-02 -6.056923605223e-02 -5.616952777273e-02 +-5.177008647808e-02 -4.737374255747e-02 -4.298330128111e-02 -3.860154140214e-02 +-3.423121377957e-02 -2.987504002304e-02 -2.553571116010e-02 -2.121588632660e-02 +-1.691819148087e-02 -1.264521814239e-02 -8.399522155476e-03 -4.183622478594e-03 +-7.672312953838e-15 4.148903619835e-03 8.260687078510e-03 1.233299053393e-02 +1.636349667820e-02 2.034993178264e-02 2.429006671325e-02 2.818171791645e-02 +3.202274837442e-02 3.581106852968e-02 3.954463717861e-02 4.322146233329e-02 +4.683960205159e-02 5.039716523481e-02 5.389231239291e-02 5.732325637672e-02 +6.068826307698e-02 6.398565208991e-02 6.721379734912e-02 7.037112772347e-02 +7.345612758087e-02 7.646733731766e-02 7.940335385353e-02 8.226283109171e-02 +8.504448034442e-02 8.774707072340e-02 9.036942949543e-02 9.291044240281e-02 +9.536905394873e-02 9.774426764751e-02 1.000351462397e-01 1.022408118720e-01 +1.043604462423e-01 1.063932907093e-01 1.083386463677e-01 1.101958740880e-01 +1.119643945218e-01 1.136436880728e-01 1.152332948324e-01 1.167328144823e-01 +1.181419061618e-01 1.194602883023e-01 1.206877384270e-01 1.218240929184e-01 +1.228692467518e-01 1.238231531963e-01 1.246858234832e-01 1.254573264425e-01 +1.261377881068e-01 1.267273912844e-01 1.272263751013e-01 1.276350345115e-01 +1.279537197783e-01 1.281828359248e-01 1.283228421551e-01 1.283742512467e-01 +1.283376289143e-01 1.282135931456e-01 1.280028135091e-01 1.277060104358e-01 +1.273239544735e-01 1.268574655159e-01 1.263074120056e-01 1.256747101130e-01 +1.249603228903e-01 1.241652594025e-01 1.232905738353e-01 1.223373645797e-01 +1.213067732963e-01 1.201999839574e-01 1.190182218689e-01 1.177627526727e-01 +1.164348813293e-01 1.150359510831e-01 1.135673424083e-01 1.120304719395e-01 +1.104267913845e-01 1.087577864224e-01 1.070249755862e-01 1.052299091315e-01 +1.033741678916e-01 1.014593621201e-01 9.948713032115e-02 9.745913806862e-02 +9.537707681491e-02 9.324266268984e-02 9.105763529064e-02 8.882375646372e-02 +8.654280907895e-02 8.421659579729e-02 8.184693783247e-02 7.943567370750e-02 +7.698465800682e-02 7.449576012479e-02 7.197086301134e-02 6.941186191553e-02 +6.682066312777e-02 6.419918272143e-02 6.154934529476e-02 5.887308271361e-02 +5.617233285597e-02 5.344903835889e-02 5.070514536864e-02 4.794260229479e-02 +4.516335856893e-02 4.236936340890e-02 3.956256458903e-02 3.674490721732e-02 +3.391833252013e-02 3.108477663513e-02 2.824616941330e-02 2.540443323047e-02 +2.256148180926e-02 1.971921905204e-02 1.687953788549e-02 1.404431911761e-02 +1.121543030754e-02 8.394724649155e-03 5.584039868727e-03 2.785197137562e-03 +7.578074296609e-15 -2.769766682491e-03 -5.522337770715e-03 -8.255968869815e-03 +-1.096893733374e-02 -1.365954325136e-02 -1.632611041382e-02 -1.896698726257e-02 +-2.158054781754e-02 -2.416519258507e-02 -2.671934944500e-02 -2.924147451659e-02 +-3.173005300269e-02 -3.418360001181e-02 -3.660066135775e-02 -3.897981433617e-02 +-4.131966847794e-02 -4.361886627880e-02 -4.587608390495e-02 -4.809003187435e-02 +-5.025945571322e-02 -5.238313658769e-02 -5.445989191001e-02 -5.648857591937e-02 +-5.846808023678e-02 -6.039733439402e-02 -6.227530633623e-02 -6.410100289806e-02 +-6.587347025325e-02 -6.759179433722e-02 -6.925510124285e-02 -7.086255758902e-02 +-7.241337086197e-02 -7.390678972935e-02 -7.534210432677e-02 -7.671864651695e-02 +-7.803579012128e-02 -7.929295112383e-02 -8.048958784776e-02 -8.162520110414e-02 +-8.269933431327e-02 -8.371157359834e-02 -8.466154785176e-02 -8.554892877396e-02 +-8.637343088493e-02 -8.713481150850e-02 -8.783287072958e-02 -8.846745132432e-02 +-8.903843866361e-02 -8.954576058973e-02 -8.998938726675e-02 -9.036933100447e-02 +-9.068564605646e-02 -9.093842839216e-02 -9.112781544345e-02 -9.125398582595e-02 +-9.131715903518e-02 -9.131759511805e-02 -9.125559431986e-02 -9.113149670714e-02 +-9.094568176680e-02 -9.069856798169e-02 -9.039061238318e-02 -9.002231008092e-02 +-8.959419377037e-02 -8.910683321828e-02 -8.856083472673e-02 -8.795684057602e-02 +-8.729552844688e-02 -8.657761082247e-02 -8.580383437062e-02 -8.497497930673e-02 +-8.409185873785e-02 -8.315531798846e-02 -8.216623390832e-02 -8.112551416309e-02 +-8.003409650806e-02 -7.889294804556e-02 -7.770306446669e-02 -7.646546927776e-02 +-7.518121301207e-02 -7.385137242756e-02 -7.247704969097e-02 -7.105937154890e-02 +-6.959948848656e-02 -6.809857387460e-02 -6.655782310482e-02 -6.497845271507e-02 +-6.336169950423e-02 -6.170881963766e-02 -6.002108774381e-02 -5.829979600262e-02 +-5.654625322625e-02 -5.476178393279e-02 -5.294772741363e-02 -5.110543679496e-02 +-4.923627809415e-02 -4.734162927160e-02 -4.542287927867e-02 -4.348142710221e-02 +-4.151868080659e-02 -3.953605657350e-02 -3.753497774043e-02 -3.551687383826e-02 +-3.348317962869e-02 -3.143533414209e-02 -2.937477971632e-02 -2.730296103728e-02 +-2.522132418163e-02 -2.313131566239e-02 -2.103438147799e-02 -1.893196616539e-02 +-1.682551185776e-02 -1.471645734750e-02 -1.260623715499e-02 -1.049628060369e-02 +-8.388010902283e-03 -6.282844234275e-03 -4.182188855659e-03 -2.087444201223e-03 +-7.672312953838e-15 2.078764599540e-03 4.147481894186e-03 6.204796479797e-03 +8.249366093966e-03 1.027986244690e-02 1.229497204004e-02 1.429339697200e-02 +1.627385573126e-02 1.823508397523e-02 2.017583529520e-02 2.209488196671e-02 +2.399101568496e-02 2.586304828480e-02 2.770981244494e-02 2.953016237589e-02 +3.132297449134e-02 3.308714806259e-02 3.482160585556e-02 3.652529475025e-02 +3.819718634205e-02 3.983627752477e-02 4.144159105503e-02 4.301217609765e-02 +4.454710875183e-02 4.604549255782e-02 4.750645898376e-02 4.892916789260e-02 +5.031280798870e-02 5.165659724396e-02 5.295978330335e-02 5.422164386948e-02 +5.544148706619e-02 5.661865178096e-02 5.775250798589e-02 5.884245703727e-02 +5.988793195354e-02 6.088839767149e-02 6.184335128071e-02 6.275232223613e-02 +6.361487254867e-02 6.443059695381e-02 6.519912305825e-02 6.592011146445e-02 +6.659325587311e-02 6.721828316370e-02 6.779495345287e-02 6.832306013093e-02 +6.880242987642e-02 6.923292264877e-02 6.961443165918e-02 6.994688331985e-02 +7.023023717155e-02 7.046448578979e-02 7.064965466964e-02 7.078580208929e-02 +7.087301895268e-02 7.091142861123e-02 7.090118666487e-02 7.084248074266e-02 +7.073553026307e-02 7.058058617429e-02 7.037793067472e-02 7.012787691387e-02 +6.983076867396e-02 6.948698003260e-02 6.909691500657e-02 6.866100717726e-02 +6.817971929793e-02 6.765354288313e-02 6.708299778067e-02 6.646863172632e-02 +6.581101988180e-02 6.511076435624e-02 6.436849371157e-02 6.358486245216e-02 +6.276055049913e-02 6.189626264975e-02 6.099272802224e-02 6.005069948647e-02 +5.907095308091e-02 5.805428741632e-02 5.700152306657e-02 5.591350194701e-02 +5.479108668091e-02 5.363515995433e-02 5.244662385998e-02 5.122639923040e-02 +4.997542496109e-02 4.869465732392e-02 4.738506927143e-02 4.604764973237e-02 +4.468340289906e-02 4.329334750708e-02 4.187851610765e-02 4.043995433340e-02 +3.897872015787e-02 3.749588314926e-02 3.599252371908e-02 3.446973236600e-02 +3.292860891557e-02 3.137026175626e-02 2.979580707230e-02 2.820636807395e-02 +2.660307422553e-02 2.498706047192e-02 2.335946646383e-02 2.172143578265e-02 +2.007411516498e-02 1.841865372778e-02 1.675620219434e-02 1.508791212165e-02 +1.341493512983e-02 1.173842213385e-02 1.005952257823e-02 8.379383675215e-03 +6.699149646791e-03 5.019960971106e-03 3.342953633789e-03 1.669258384619e-03 +7.615769759501e-15 -1.663703448216e-03 -3.320741317270e-03 -4.970011110682e-03 +-6.610419187879e-03 + Type L N + 0 0 5 +1.000000000000e+00 9.998355147105e-01 9.993421562398e-01 9.985202167122e-01 +9.973701827725e-01 9.958927352436e-01 9.940887486459e-01 9.919592905814e-01 +9.895056209813e-01 9.867291912182e-01 9.836316430835e-01 9.802148076310e-01 +9.764807038877e-01 9.724315374315e-01 9.680696988392e-01 9.633977620041e-01 +9.584184823246e-01 9.531347947667e-01 9.475498117999e-01 9.416668212101e-01 +9.354892837886e-01 9.290208309025e-01 9.222652619442e-01 9.152265416659e-01 +9.079087973984e-01 9.003163161571e-01 8.924535416387e-01 8.843250711084e-01 +8.759356521824e-01 8.672901795064e-01 8.583936913341e-01 8.492513660070e-01 +8.398685183386e-01 8.302505959068e-01 8.204031752555e-01 8.103319580098e-01 +8.000427669069e-01 7.895415417463e-01 7.788343352617e-01 7.679273089188e-01 +7.568267286407e-01 7.455389604655e-01 7.340704661390e-01 7.224277986455e-01 +7.106175976801e-01 6.986465850664e-01 6.865215601232e-01 6.742493949824e-01 +6.618370298633e-01 6.492914683061e-01 6.366197723676e-01 6.238290577842e-01 +6.109264891046e-01 5.979192747957e-01 5.848146623272e-01 5.716199332362e-01 +5.583423981772e-01 5.449893919607e-01 5.315682685834e-01 5.180863962557e-01 +5.045511524271e-01 4.909699188169e-01 4.773500764507e-01 4.636990007081e-01 +4.500240563851e-01 4.363325927745e-01 4.226319387680e-01 4.089293979839e-01 +3.952322439240e-01 3.815477151625e-01 3.678830105718e-01 3.542452845871e-01 +3.406416425154e-01 3.270791358894e-01 3.135647578731e-01 3.001054387190e-01 +2.867080412837e-01 2.733793566015e-01 2.601260995227e-01 2.469549044171e-01 +2.338723209472e-01 2.208848099135e-01 2.079987391756e-01 1.952203796510e-01 +1.825559013952e-01 1.700113697654e-01 1.575927416715e-01 1.453058619150e-01 +1.331564596210e-01 1.211501447634e-01 1.092924047870e-01 9.758860132927e-02 +8.604396704185e-02 7.466360251687e-02 6.345247331782e-02 5.241540711808e-02 +4.155709094885e-02 3.088206855810e-02 2.039473788244e-02 1.009934863344e-02 +-3.353609941903e-15 -9.899361531791e-03 -1.959494424000e-02 -2.908311310812e-02 +-3.836039164510e-02 -4.742346358303e-02 -5.626917445166e-02 -6.489453302869e-02 +-7.329671266529e-02 -8.147305248591e-02 -8.942105846214e-02 -9.713840435983e-02 +-1.046229325594e-01 -1.118726547488e-01 -1.188857524890e-01 -1.256605776527e-01 +-1.321956527344e-01 -1.384896710345e-01 -1.445414967152e-01 -1.503501647310e-01 +-1.559148806314e-01 -1.612350202393e-01 -1.663101292031e-01 -1.711399224253e-01 +-1.757242833674e-01 -1.800632632314e-01 -1.841570800207e-01 -1.880061174797e-01 +-1.916109239149e-01 -1.949722108968e-01 -1.980908518463e-01 -2.009678805055e-01 +-2.036044892942e-01 -2.060020275558e-01 -2.081619996917e-01 -2.100860631877e-01 +-2.117760265342e-01 -2.132338470410e-01 -2.144616285503e-01 -2.154616190492e-01 +-2.162362081830e-01 -2.167879246744e-01 -2.171194336468e-01 -2.172335338584e-01 +-2.171331548467e-01 -2.168213539861e-01 -2.163013134635e-01 -2.155763371712e-01 +-2.146498475232e-01 -2.135253821946e-01 -2.122065907892e-01 -2.106972314371e-01 +-2.090011673253e-01 -2.071223631645e-01 -2.050648815952e-01 -2.028328795354e-01 +-2.004306044739e-01 -1.978623907118e-01 -1.951326555559e-01 -1.922458954659e-01 +-1.892066821602e-01 -1.860196586822e-01 -1.826895354318e-01 -1.792210861633e-01 +-1.756191439552e-01 -1.718885971536e-01 -1.680343852933e-01 -1.640614949995e-01 +-1.599749558740e-01 -1.557798363681e-01 -1.514812396472e-01 -1.470842994485e-01 +-1.425941759367e-01 -1.380160515603e-01 -1.333551269115e-01 -1.286166165939e-01 +-1.238057450998e-01 -1.189277427023e-01 -1.139878413639e-01 -1.089912706645e-01 +-1.039432537543e-01 -9.884900333144e-02 -9.371371765054e-02 -8.854257656302e-02 +-8.334073759344e-02 -7.811333205438e-02 -7.286546120295e-02 -6.760219244176e-02 +-6.232855556729e-02 -5.704953906847e-02 -5.177008647807e-02 -4.649509277991e-02 +-4.122940087422e-02 -3.597779810398e-02 -3.074501284471e-02 -2.553571116009e-02 +-2.035449352597e-02 -1.520589162505e-02 -1.009436521454e-02 -5.024299068894e-03 +3.353609941903e-15 4.974306043339e-03 9.894476794457e-03 1.475645640462e-02 +1.955627809358e-02 2.429006671326e-02 2.895404122270e-02 3.354451707280e-02 +3.805790849928e-02 4.249073072232e-02 4.683960205160e-02 5.110124589546e-02 +5.527249267289e-02 5.935028162727e-02 6.333166254089e-02 6.721379734913e-02 +7.099396165368e-02 7.466954613380e-02 7.823805785504e-02 8.169712147485e-02 +8.504448034442e-02 8.827799750657e-02 9.139565658907e-02 9.439556259335e-02 +9.727594257840e-02 1.000351462397e-01 1.026716463832e-01 1.051840392948e-01 +1.075710450049e-01 1.098315074484e-01 1.119643945218e-01 1.139687980356e-01 +1.158439335639e-01 1.175891401928e-01 1.192038801653e-01 1.206877384270e-01 +1.220404220705e-01 1.232617596819e-01 1.243517005880e-01 1.253103140077e-01 +1.261377881068e-01 1.268344289589e-01 1.274006594126e-01 1.278370178673e-01 +1.281441569587e-01 1.283228421551e-01 1.283739502669e-01 1.282984678711e-01 +1.280974896510e-01 1.277722166546e-01 1.273239544735e-01 1.267541113426e-01 +1.260641961644e-01 1.252558164592e-01 1.243306762428e-01 1.232905738353e-01 +1.221373996013e-01 1.208731336255e-01 1.194998433250e-01 1.180196810003e-01 +1.164348813293e-01 1.147477588040e-01 1.129607051143e-01 1.110761864814e-01 +1.090967409418e-01 1.070249755862e-01 1.048635637545e-01 1.026152421907e-01 +1.002828081598e-01 9.786911652868e-02 9.537707681490e-02 9.280965020548e-02 +9.016984654818e-02 8.746072131841e-02 8.468537256425e-02 8.184693783246e-02 +7.894859107811e-02 7.599353956071e-02 7.298502072939e-02 6.992629910018e-02 +6.682066312776e-02 6.367142207470e-02 6.048190288084e-02 5.725544703545e-02 +5.399540745491e-02 5.070514536863e-02 4.738802721590e-02 4.404742155613e-02 +4.068669599532e-02 3.730921413128e-02 3.391833252012e-02 3.051739766654e-02 +2.710974304058e-02 2.369868612310e-02 2.028752548257e-02 1.687953788548e-02 +1.347797544287e-02 1.008606279507e-02 6.706994337177e-03 3.343931487323e-03 +-3.353609941903e-15 -3.321712673460e-03 -6.618159975102e-03 -9.886338779332e-03 +-1.312329187859e-02 -1.632611041383e-02 -1.949193624796e-02 -2.261796428036e-02 +-2.570144470082e-02 -2.873968518112e-02 -3.173005300270e-02 -3.466997711879e-02 +-3.755695014953e-02 -4.038853030866e-02 -4.316234326035e-02 -4.587608390496e-02 +-4.852751809239e-02 -5.111448426194e-02 -5.363489500755e-02 -5.608673856737e-02 +-5.846808023679e-02 -6.077706370390e-02 -6.301191230675e-02 -6.517093021151e-02 +-6.725250351099e-02 -6.925510124286e-02 -7.117727632702e-02 -7.301766642180e-02 +-7.477499469850e-02 -7.644807053400e-02 -7.803579012129e-02 -7.953713699763e-02 +-8.095118249047e-02 -8.227708608085e-02 -8.351409568469e-02 -8.466154785177e-02 +-8.571886788288e-02 -8.668556986532e-02 -8.756125662706e-02 -8.834561961013e-02 +-8.903843866361e-02 -8.963958175685e-02 -9.014900461357e-02 -9.056675026752e-02 +-9.089294854048e-02 -9.112781544345e-02 -9.127165250193e-02 -9.132484600626e-02 +-9.128786618804e-02 -9.116126632377e-02 -9.094568176680e-02 -9.064182890882e-02 +-9.025050407227e-02 -8.977258233476e-02 -8.920901628720e-02 -8.856083472673e-02 +-8.782914128630e-02 -8.701511300212e-02 -8.611999882078e-02 -8.514511804759e-02 +-8.409185873785e-02 -8.296167603278e-02 -8.175609044184e-02 -8.047668607331e-02 +-7.912510881496e-02 -7.770306446669e-02 -7.621231682701e-02 -7.465468573548e-02 +-7.303204507292e-02 -7.134632072145e-02 -6.959948848655e-02 -6.779357198298e-02 +-6.593064048684e-02 -6.401280675583e-02 -6.204222481980e-02 -6.002108774380e-02 +-5.795162536585e-02 -5.583610201145e-02 -5.367681418723e-02 -5.147608825581e-02 +-4.923627809414e-02 -4.695976273751e-02 -4.464894401151e-02 -4.230624415413e-02 +-3.993410343019e-02 -3.753497774042e-02 -3.511133622733e-02 -3.266565888012e-02 +-3.020043414085e-02 -2.771815651398e-02 -2.522132418162e-02 -2.271243662650e-02 +-2.019399226492e-02 -1.766848609178e-02 -1.513840733978e-02 -1.260623715498e-02 +-1.007444629063e-02 -7.545492821499e-03 -5.021819880599e-03 -2.505853420324e-03 +3.353609941903e-15 2.493355398284e-03 4.971851523585e-03 7.433152978010e-03 +9.874952304682e-03 1.229497204005e-02 1.469096672876e-02 1.706072489944e-02 +1.940207099964e-02 2.171286728842e-02 2.399101568497e-02 2.623445957164e-02 +2.844118555013e-02 3.060922514918e-02 3.273665648249e-02 3.482160585557e-02 +3.686224932018e-02 3.885681417514e-02 4.080358041244e-02 4.270088210738e-02 +4.454710875184e-02 4.634070652958e-02 4.808017953264e-02 4.976409091801e-02 +5.139106400368e-02 5.295978330336e-02 5.446899549908e-02 5.591751035112e-02 +5.730420154464e-02 5.862800747246e-02 5.988793195355e-02 6.108304488681e-02 +6.221248283990e-02 6.327544957257e-02 6.427121649467e-02 6.519912305826e-02 +6.605857708405e-02 6.684905502200e-02 6.757010214600e-02 6.822133268299e-02 +6.880242987642e-02 6.931314598432e-02 6.975330221231e-02 7.012278858185e-02 +7.042156373406e-02 7.064965466964e-02 7.080715642526e-02 7.089423168719e-02 +7.091111034250e-02 7.085808896881e-02 7.073553026306e-02 7.054386241019e-02 +7.028357839256e-02 6.995523524100e-02 6.955945322834e-02 6.909691500657e-02 +6.856836468843e-02 6.797460687474e-02 6.731650562847e-02 6.659498339670e-02 +6.581101988179e-02 6.496565086298e-02 6.405996696958e-02 6.309511240737e-02 +6.207228363932e-02 6.099272802224e-02 5.985774240061e-02 5.866867165936e-02 +5.742690723682e-02 5.613388559961e-02 5.479108668090e-02 5.340003228383e-02 +5.196228445149e-02 5.047944380534e-02 4.895314785360e-02 4.738506927142e-02 +4.577691415454e-02 4.413042024804e-02 4.244735515224e-02 4.072951450720e-02 +3.897872015786e-02 3.719681830143e-02 3.538567761908e-02 3.354718739344e-02 +3.168325561403e-02 2.979580707229e-02 2.788678144804e-02 2.595813138934e-02 +2.401182058740e-02 2.204982184855e-02 2.007411516497e-02 1.808668578607e-02 +1.608952229238e-02 1.408461467357e-02 1.207395241270e-02 1.005952257821e-02 +8.043307925581e-03 6.027285010332e-03 4.013422314213e-03 2.003678386190e-03 +-3.353609941903e-15 -1.995679670084e-03 -3.981442853549e-03 -5.955388966477e-03 +-7.915636371214e-03 -9.860324111326e-03 -1.178761362031e-02 -1.369569040251e-02 +-1.558276568475e-02 -1.744707803726e-02 -1.928689496242e-02 -2.110051444999e-02 +-2.288626649737e-02 -2.464251459378e-02 -2.636765716683e-02 -2.806012899041e-02 +-2.971840255270e-02 -3.134098938305e-02 -3.292644133668e-02 -3.447335183621e-02 +-3.598035706880e-02 -3.744613713811e-02 -3.886941717006e-02 -4.024896837154e-02 +-4.158360904115e-02 -4.287220553129e-02 -4.411367316085e-02 -4.530697707766e-02 +-4.645113307028e-02 -4.754520832833e-02 -4.858832215099e-02 -4.957964660305e-02 +-5.051840711811e-02 -5.140388304864e-02 -5.223540816233e-02 -5.301237108475e-02 +-5.373421568778e-02 -5.440044142386e-02 -5.501060360585e-02 -5.556431363235e-02 +-5.606123915857e-02 -5.650110421273e-02 -5.688368925801e-02 -5.720883120029e-02 +-5.747642334177e-02 -5.768641528072e-02 -5.783881275763e-02 -5.793367744821e-02 +-5.797112670335e-02 -5.795133323679e-02 -5.787452476069e-02 -5.774098356987e-02 +-5.755104607507e-02 -5.730510228602e-02 -5.700359524489e-02 -5.664702041079e-02 +-5.623592499626e-02 -5.577090725630e-02 -5.525261573089e-02 -5.468174844201e-02 +-5.405905204576e-02 -5.338532094088e-02 -5.266139633442e-02 -5.188816526574e-02 +-5.106655958980e-02 -5.019755492096e-02 -4.928216953831e-02 -4.832146325383e-02 +-4.731653624442e-02 -4.626852784924e-02 -4.517861533337e-02 -4.404801261941e-02 +-4.287796898795e-02 -4.166976774856e-02 -4.042472488259e-02 -3.914418765900e-02 +-3.782953322493e-02 -3.648216717212e-02 -3.510352208092e-02 -3.369505604309e-02 +-3.225825116512e-02 -3.079461205334e-02 -2.930566428247e-02 -2.779295284911e-02 +-2.625804061163e-02 -2.470250671805e-02 -2.312794502346e-02 -2.153596249848e-02 +-1.992817763036e-02 -1.830621881823e-02 -1.667172276412e-02 -1.502633286119e-02 +-1.337169758083e-02 -1.170946886015e-02 -1.004130049137e-02 -8.368846514648e-03 +-6.693759615919e-03 -5.017689531214e-03 -3.342281458993e-03 -1.669174481984e-03 +3.353609941903e-15 1.663619824813e-03 3.320073608774e-03 4.967762272203e-03 +6.605100548166e-03 + Type L N + 0 0 6 +1.000000000000e+00 9.997761212345e-01 9.991046653715e-01 9.979861735385e-01 +9.964215470375e-01 9.944120464808e-01 9.919592905814e-01 9.890652546003e-01 +9.857322684524e-01 9.819630144724e-01 9.777605248430e-01 9.731281786890e-01 +9.680696988392e-01 9.625891482603e-01 9.566909261659e-01 9.503797638053e-01 +9.436607199360e-01 9.365391759848e-01 9.290208309025e-01 9.211116957177e-01 +9.128180877951e-01 9.041466248047e-01 8.951042184077e-01 8.856980676661e-01 +8.759356521824e-01 8.658247249770e-01 8.553733051108e-01 8.445896700594e-01 +8.334823478491e-01 8.220601089605e-01 8.103319580098e-01 7.983071252151e-01 +7.859950576585e-01 7.734054103500e-01 7.605480371061e-01 7.474329812490e-01 +7.340704661390e-01 7.204708855480e-01 7.066447938841e-01 6.926028962792e-01 +6.783560385471e-01 6.639151970248e-01 6.492914683061e-01 6.344960588783e-01 +6.195402746735e-01 6.044355105433e-01 5.891932396702e-01 5.738250029242e-01 +5.583423981772e-01 5.427570695849e-01 5.270806968481e-01 5.113249844634e-01 +4.955016509752e-01 4.796224182391e-01 4.636990007081e-01 4.477430947521e-01 +4.317663680216e-01 4.157804488669e-01 3.997969158223e-01 3.838272871669e-01 +3.678830105718e-01 3.519754528448e-01 3.361158897820e-01 3.203154961369e-01 +3.045853357170e-01 2.889363516174e-01 2.733793566015e-01 2.579250236380e-01 +2.425838766034e-01 2.273662811590e-01 2.122824358125e-01 1.973423631710e-01 +1.825559013952e-01 1.679326958626e-01 1.534821910482e-01 1.392136226292e-01 +1.251360098232e-01 1.112581479646e-01 9.758860132928e-02 8.413569621079e-02 +7.090751425767e-02 5.791188607580e-02 4.515638510272e-02 3.264832175908e-02 +2.039473788245e-02 8.402401448597e-03 -3.322198415458e-03 -1.477285612207e-02 +-2.594365401351e-02 -3.682896644873e-02 -4.742346358302e-02 -5.772211483774e-02 +-6.772019205735e-02 -7.741327235156e-02 -8.679724062067e-02 -9.586829176246e-02 +-1.046229325594e-01 -1.130579832452e-01 -1.211705787506e-01 -1.289581696271e-01 +-1.364185226502e-01 -1.435497211015e-01 -1.503501647310e-01 -1.568185694005e-01 +-1.629539664096e-01 -1.687557015072e-01 -1.742234335878e-01 -1.793571330792e-01 +-1.841570800207e-01 -1.886238618368e-01 -1.927583708100e-01 -1.965618012556e-01 +-2.000356464025e-01 -2.031816949862e-01 -2.060020275558e-01 -2.084990125027e-01 +-2.106753018143e-01 -2.125338265592e-01 -2.140777921103e-01 -2.153106731093e-01 +-2.162362081830e-01 -2.168583944138e-01 -2.171814815742e-01 -2.172099661307e-01 +-2.169485850260e-01 -2.164023092444e-01 -2.155763371712e-01 -2.144760877518e-01 +-2.131071934591e-01 -2.114754930785e-01 -2.095870243170e-01 -2.074480162477e-01 +-2.050648815952e-01 -2.024442088739e-01 -1.995927543858e-01 -1.965174340891e-01 +-1.932253153449e-01 -1.897236085524e-01 -1.860196586822e-01 -1.821209367168e-01 +-1.780350310077e-01 -1.737696385594e-01 -1.693325562496e-01 -1.647316719951e-01 +-1.599749558740e-01 -1.550704512126e-01 -1.500262656484e-01 -1.448505621774e-01 +-1.395515501966e-01 -1.341374765510e-01 -1.286166165939e-01 -1.229972652722e-01 +-1.172877282441e-01 -1.114963130395e-01 -1.056313202729e-01 -9.970103491761e-02 +-9.371371765055e-02 -8.767759627652e-02 -8.160085724134e-02 -7.549163724239e-02 +-6.935801494513e-02 -6.320800281437e-02 -5.704953906848e-02 -5.089047976476e-02 +-4.473859102402e-02 -3.860154140214e-02 -3.248689441626e-02 -2.640210123300e-02 +-2.035449352598e-02 -1.435127650953e-02 -8.399522155475e-03 -2.506162599395e-03 +3.322016257211e-03 9.078380942906e-03 1.475645640461e-02 2.034993178264e-02 +2.585266596731e-02 3.125869293193e-02 3.656222683765e-02 4.175766690549e-02 +4.683960205159e-02 5.180281528153e-02 5.664228784039e-02 6.135320311502e-02 +6.593095028555e-02 7.037112772347e-02 7.466954613379e-02 7.882223143917e-02 +8.282542740418e-02 8.667559799815e-02 9.036942949543e-02 9.390383231208e-02 +9.727594257839e-02 1.004831234469e-01 1.035229661361e-01 1.063932907093e-01 +1.090921465908e-01 1.116178128186e-01 1.139687980356e-01 1.161438402206e-01 +1.181419061618e-01 1.199621906724e-01 1.216041155534e-01 1.230673283049e-01 +1.243517005880e-01 1.254573264425e-01 1.263845202616e-01 1.271338145288e-01 +1.277059573205e-01 1.281019095783e-01 1.283228421551e-01 1.283701326409e-01 +1.282453619720e-01 1.279503108287e-01 1.274869558281e-01 1.268574655159e-01 +1.260641961644e-01 1.251096873815e-01 1.239966575376e-01 1.227279990164e-01 +1.213067732963e-01 1.197362058687e-01 1.180196810003e-01 1.161607363465e-01 +1.141630574224e-01 1.120304719395e-01 1.097669440145e-01 1.073765682587e-01 +1.048635637545e-01 1.022322679273e-01 9.948713032115e-02 9.663270628381e-02 +9.367365057202e-02 9.061471088259e-02 8.746072131842e-02 8.421659579729e-02 +8.088732141131e-02 7.747795174524e-02 7.399360016178e-02 7.043943306182e-02 +6.682066312777e-02 6.314254255800e-02 5.941035630052e-02 5.562941529365e-02 +5.180504972193e-02 4.794260229479e-02 4.404742155614e-02 4.012485523239e-02 +3.618024362662e-02 3.221891306649e-02 2.824616941330e-02 2.426729163961e-02 +2.028752548258e-02 1.631207718023e-02 1.234610729754e-02 8.394724649155e-03 +4.462980325592e-03 5.558618292154e-04 -3.321712673450e-03 -7.164899976963e-03 +-1.096893733374e-02 -1.472914781648e-02 -1.844094554067e-02 -2.209984074161e-02 +-2.570144470081e-02 -2.924147451659e-02 -3.271575771426e-02 -3.612023669091e-02 +-3.945097299083e-02 -4.270415140699e-02 -4.587608390495e-02 -4.896321336523e-02 +-5.196211714086e-02 -5.486951042677e-02 -5.768224943800e-02 -6.039733439402e-02 +-6.301191230674e-02 -6.552327956968e-02 -6.792888434663e-02 -7.022632875778e-02 +-7.241337086197e-02 -7.448792643370e-02 -7.644807053400e-02 -7.829203887430e-02 +-8.001822897298e-02 -8.162520110414e-02 -8.311167903878e-02 -8.447655057860e-02 +-8.571886788288e-02 -8.683784758929e-02 -8.783287072958e-02 -8.870348244140e-02 +-8.944939147777e-02 -9.007046951594e-02 -9.056675026751e-02 -9.093842839216e-02 +-9.118585821725e-02 -9.130955226611e-02 -9.131017959773e-02 -9.118856396099e-02 +-9.094568176680e-02 -9.058265988151e-02 -9.010077324544e-02 -8.950144232025e-02 +-8.878623036943e-02 -8.795684057602e-02 -8.701511300212e-02 -8.596302139470e-02 +-8.480266984257e-02 -8.353628928948e-02 -8.216623390832e-02 -8.069497734182e-02 +-7.912510881497e-02 -7.745932912479e-02 -7.570044651304e-02 -7.385137242756e-02 +-7.191511717826e-02 -6.989478549347e-02 -6.779357198299e-02 -6.561475651371e-02 +-6.336169950423e-02 -6.103783714462e-02 -5.864667654772e-02 -5.619179083840e-02 +-5.367681418723e-02 -5.110543679496e-02 -4.848139983440e-02 -4.580849035631e-02 +-4.309053616561e-02 -4.033140067471e-02 -3.753497774043e-02 -3.470518649089e-02 +-3.184596614924e-02 -2.896127086029e-02 -2.605506452694e-02 -2.313131566239e-02 +-2.019399226493e-02 -1.724705672121e-02 -1.429446074456e-02 -1.134014035430e-02 +-8.388010902283e-03 -5.441962152604e-03 -2.505853420335e-03 4.164912247927e-04 +3.321287684149e-03 6.204796479797e-03 9.063327322455e-03 1.189324359249e-02 +1.469096672875e-02 1.745298052016e-02 2.017583529520e-02 2.285615200442e-02 +2.549062619147e-02 2.807603184815e-02 3.060922514917e-02 3.308714806259e-02 +3.550683183187e-02 3.786540032592e-02 4.016007325341e-02 4.238816923809e-02 +4.454710875183e-02 4.663441690242e-02 4.864772607321e-02 5.058477841217e-02 +5.244342816776e-02 5.422164386948e-02 5.591751035111e-02 5.752923061482e-02 +5.905512753453e-02 6.049364539718e-02 6.184335128071e-02 6.310293626781e-02 +6.427121649466e-02 6.534713403412e-02 6.632975761305e-02 6.721828316370e-02 +6.801203420910e-02 6.871046208295e-02 6.931314598432e-02 6.981979286803e-02 +7.023023717155e-02 7.054444037951e-02 7.076249042722e-02 7.088460094463e-02 +7.091111034250e-02 7.084248074266e-02 7.067929675443e-02 7.042226409951e-02 +7.007220808778e-02 6.963007194661e-02 6.909691500657e-02 6.847391074645e-02 +6.776234470069e-02 6.696361223272e-02 6.607921617738e-02 6.511076435624e-02 +6.405996696958e-02 6.292863386873e-02 6.171867171303e-02 6.043208101540e-02 +5.907095308091e-02 5.763746684267e-02 5.613388559961e-02 5.456255366073e-02 +5.292589290051e-02 5.122639923040e-02 4.946663899113e-02 4.764924527091e-02 +4.577691415454e-02 4.385240090858e-02 4.187851610765e-02 3.985812170719e-02 +3.779412706793e-02 3.568948493736e-02 3.354718739345e-02 3.137026175625e-02 +2.916176647247e-02 2.692478697855e-02 2.466243154774e-02 2.237782712640e-02 +2.007411516498e-02 1.775444744914e-02 1.542198193627e-02 1.307987860273e-02 +1.073129530719e-02 8.379383675215e-03 6.027285010342e-03 3.678126236832e-03 +1.335015879076e-03 -9.989599172310e-04 -3.320741317271e-03 -5.627298677741e-03 +-7.915636371203e-03 -1.018279654944e-02 -1.242586284123e-02 -1.464196398011e-02 +-1.682827735765e-02 -1.898203249806e-02 -2.110051444998e-02 -2.318106709137e-02 +-2.522109634368e-02 -2.721807329147e-02 -2.916953720391e-02 -3.107309845465e-02 +-3.292644133667e-02 -3.472732676905e-02 -3.647359489242e-02 -3.816316755042e-02 +-3.979405065425e-02 -4.136433642785e-02 -4.287220553129e-02 -4.431592906007e-02 +-4.569387041837e-02 -4.700448706418e-02 -4.824633212481e-02 -4.941805588094e-02 +-5.051840711811e-02 -5.154623434421e-02 -5.250048687215e-02 -5.338021576662e-02 +-5.418457465452e-02 -5.491282039834e-02 -5.556431363234e-02 -5.613851916128e-02 +-5.663500622177e-02 -5.705344860651e-02 -5.739362465170e-02 -5.765541708827e-02 +-5.783881275763e-02 -5.794390219286e-02 -5.797087906641e-02 -5.792003950556e-02 +-5.779178127705e-02 -5.758660284245e-02 -5.730510228603e-02 -5.694797611695e-02 +-5.651601794795e-02 -5.601011705258e-02 -5.543125680345e-02 -5.478051299389e-02 +-5.405905204576e-02 -5.326812910605e-02 -5.240908603529e-02 -5.148334929075e-02 +-5.049242770755e-02 -4.943791018106e-02 -4.832146325384e-02 -4.714482861076e-02 +-4.590982048582e-02 -4.461832298440e-02 -4.327228732471e-02 -4.187372900247e-02 +-4.042472488259e-02 -3.892741022207e-02 -3.738397562815e-02 -3.579666395607e-02 +-3.416776715042e-02 -3.249962303471e-02 -3.079461205335e-02 -2.905515397046e-02 +-2.728370453005e-02 -2.548275208201e-02 -2.365481417841e-02 -2.180243414471e-02 +-1.992817763037e-02 -1.803462914344e-02 -1.612438857381e-02 -1.420006770947e-02 +-1.226428675055e-02 -1.031967082562e-02 -8.368846514659e-03 -6.414438383447e-03 +-4.459065533581e-03 -2.505338172758e-03 -5.558542095990e-04 1.386804122575e-03 +3.320073608763e-03 5.241413357832e-03 7.148308066446e-03 9.038271237255e-03 +1.090884834732e-02 1.275761996286e-02 1.458220479632e-02 1.638026270224e-02 +1.814949760793e-02 1.988766037559e-02 2.159255159232e-02 2.326202428457e-02 +2.489398655388e-02 2.648640413070e-02 2.803730284316e-02 2.954477099805e-02 +3.100696167110e-02 3.242209490384e-02 3.378845980468e-02 3.510441655164e-02 +3.636839829456e-02 3.757891295461e-02 3.873454491911e-02 3.983395662993e-02 +4.087589006353e-02 4.185916810137e-02 4.278269578910e-02 4.364546148326e-02 +4.444653788457e-02 4.518508295663e-02 4.586034072937e-02 4.647164198660e-02 +4.701840483706e-02 4.750013516873e-02 4.791642698619e-02 4.826696263096e-02 +4.855151288497e-02 4.876993695739e-02 4.892218235529e-02 4.900828463865e-02 +4.902836706049e-02 4.898264009294e-02 4.887140084024e-02 4.869503233992e-02 +4.845400275336e-02 4.814886444722e-02 4.778025296725e-02 4.734888590635e-02 +4.685556166845e-02 4.630115813047e-02 4.568663120425e-02 4.501301330080e-02 +4.428141169907e-02 4.349300682192e-02 4.264905042157e-02 4.175086367751e-02 +4.079983520940e-02 3.979741900804e-02 3.874513228725e-02 3.764455325988e-02 +3.649731884094e-02 3.530512228132e-02 3.406971073525e-02 3.279288276494e-02 +3.147648578604e-02 3.012241345721e-02 2.873260301761e-02 2.730903257589e-02 +2.585371835442e-02 2.436871189245e-02 2.285609721216e-02 2.131798795126e-02 +1.975652446611e-02 1.817387090931e-02 1.657221228548e-02 1.495375148943e-02 +1.332070633045e-02 1.167530654672e-02 1.001979081396e-02 8.356403751947e-03 +6.687392933145e-03 5.015005897186e-03 3.341487175163e-03 1.669075327611e-03 +7.470372974062e-15 -1.663521000383e-03 -3.319284602556e-03 -4.965105340980e-03 +-6.598818192294e-03 + Type L N + 0 0 7 +1.000000000000e+00 9.997075929310e-01 9.988306795205e-01 9.973701827725e-01 +9.953276397415e-01 9.927051996072e-01 9.895056209813e-01 9.857322684524e-01 +9.813891083719e-01 9.764807038877e-01 9.710122092318e-01 9.649893632704e-01 +9.584184823246e-01 9.513064522713e-01 9.436607199360e-01 9.354892837886e-01 +9.268006839549e-01 9.176039915569e-01 9.079087973984e-01 8.977252000079e-01 +8.870637930592e-01 8.759356521824e-01 8.643523211873e-01 8.523257977150e-01 +8.398685183386e-01 8.269933431327e-01 8.137135397329e-01 8.000427669069e-01 +7.859950576585e-01 7.715848018895e-01 7.568267286407e-01 7.417358879367e-01 +7.263276322605e-01 7.106175976801e-01 6.946216846549e-01 6.783560385471e-01 +6.618370298633e-01 6.450812342547e-01 6.281054123006e-01 6.109264891046e-01 +5.935615337287e-01 5.760277384943e-01 5.583423981772e-01 5.405228891241e-01 +5.225866483191e-01 5.045511524271e-01 4.864338968434e-01 4.682523747753e-01 +4.500240563851e-01 4.317663680216e-01 4.134966715663e-01 3.952322439240e-01 +3.769902566816e-01 3.587877559645e-01 3.406416425154e-01 3.225686520215e-01 +3.045853357170e-01 2.867080412837e-01 2.689528940770e-01 2.513357786996e-01 +2.338723209472e-01 2.165778701492e-01 1.994674819279e-01 1.825559013952e-01 +1.658575468121e-01 1.493864937280e-01 1.331564596210e-01 1.171807890593e-01 +1.014724393995e-01 8.604396704185e-02 7.090751425766e-02 5.607479660516e-02 +4.155709094885e-02 2.736522409645e-02 1.350956206663e-02 -8.091661967317e-16 +-1.315404727541e-02 -2.594365401352e-02 -3.836039164510e-02 -5.039633618945e-02 +-6.204407497545e-02 -7.329671266528e-02 -8.414787657521e-02 -9.459172128886e-02 +-1.046229325594e-01 -1.142367304979e-01 -1.234288720462e-01 -1.321956527344e-01 +-1.405339077219e-01 -1.484410121248e-01 -1.559148806314e-01 -1.629539664096e-01 +-1.695572593094e-01 -1.757242833674e-01 -1.814550936186e-01 -1.867502722230e-01 +-1.916109239149e-01 -1.960386707847e-01 -2.000356464025e-01 -2.036044892942e-01 +-2.067483357832e-01 -2.094708122085e-01 -2.117760265342e-01 -2.136685593635e-01 +-2.151534543730e-01 -2.162362081830e-01 -2.169227596796e-01 -2.172194788069e-01 +-2.171331548467e-01 -2.166709842043e-01 -2.158405577195e-01 -2.146498475232e-01 +-2.131071934591e-01 -2.112212890922e-01 -2.090011673253e-01 -2.064561856448e-01 +-2.035960110195e-01 -2.004306044739e-01 -1.969702053588e-01 -1.932253153449e-01 +-1.892066821602e-01 -1.849252830975e-01 -1.803923083151e-01 -1.756191439552e-01 +-1.706173551053e-01 -1.653986686265e-01 -1.599749558740e-01 -1.543582153342e-01 +-1.485605552041e-01 -1.425941759367e-01 -1.364713527783e-01 -1.302044183218e-01 +-1.238057450998e-01 -1.172877282441e-01 -1.106627682334e-01 -1.039432537543e-01 +-9.714154469929e-02 -9.026995532501e-02 -8.334073759344e-02 -7.636606471924e-02 +-6.935801494513e-02 -6.232855556730e-02 -5.528952723222e-02 -4.825262852564e-02 +-4.122940087422e-02 -3.423121377956e-02 -2.726925040388e-02 -2.035449352597e-02 +-1.349771188541e-02 -6.709446932422e-03 8.091661967317e-16 6.620580085637e-03 +1.314250894106e-02 1.955627809358e-02 2.585266596731e-02 3.202274837443e-02 +3.805790849928e-02 4.394984636412e-02 4.969058776567e-02 5.527249267289e-02 +6.068826307699e-02 6.593095028556e-02 7.099396165368e-02 7.587106674556e-02 +8.055640292137e-02 8.504448034442e-02 8.933018640529e-02 9.340878955969e-02 +9.727594257840e-02 1.009276852080e-01 1.043604462423e-01 1.075710450049e-01 +1.105566922449e-01 1.133149904477e-01 1.158439335639e-01 1.181419061618e-01 +1.202076820060e-01 1.220404220705e-01 1.236396719912e-01 1.250053589653e-01 +1.261377881068e-01 1.270376382654e-01 1.277059573205e-01 1.281441569587e-01 +1.283540069471e-01 1.283376289143e-01 1.280974896510e-01 1.276363939434e-01 +1.269574769544e-01 1.260641961644e-01 1.249603228902e-01 1.236499333941e-01 +1.221373996013e-01 1.204273794422e-01 1.185248068353e-01 1.164348813293e-01 +1.141630574224e-01 1.117150335758e-01 1.090967409418e-01 1.063143318244e-01 +1.033741678916e-01 1.002828081598e-01 9.704699676953e-02 9.367365057202e-02 +9.016984654819e-02 8.654280907894e-02 8.279989708811e-02 7.894859107812e-02 +7.499648007917e-02 7.095124853243e-02 6.682066312776e-02 6.261255961661e-02 +5.833482962041e-02 5.399540745491e-02 4.960225699054e-02 4.516335856892e-02 +4.068669599532e-02 3.618024362661e-02 3.165195357416e-02 2.710974304058e-02 +2.256148180925e-02 1.801497990482e-02 1.347797544287e-02 8.958122686282e-03 +4.462980325584e-03 -7.149275395032e-16 -4.423484924474e-03 -8.800270304146e-03 +-1.312329187859e-02 -1.738563562867e-02 -2.158054781755e-02 -2.570144470081e-02 +-2.974192189296e-02 -3.369576337758e-02 -3.755695014953e-02 -4.131966847795e-02 +-4.497831777955e-02 -4.852751809239e-02 -5.196211714087e-02 -5.527719698370e-02 +-5.846808023679e-02 -6.153033586422e-02 -6.445978453086e-02 -6.725250351099e-02 +-6.990483114816e-02 -7.241337086197e-02 -7.477499469850e-02 -7.698684642154e-02 +-7.904634414292e-02 -8.095118249046e-02 -8.269933431327e-02 -8.428905192453e-02 +-8.571886788288e-02 -8.698759531398e-02 -8.809432777479e-02 -8.903843866361e-02 +-8.981958017984e-02 -9.043768183789e-02 -9.089294854048e-02 -9.118585821725e-02 +-9.131715903518e-02 -9.128786618804e-02 -9.109925827260e-02 -9.075287326016e-02 +-9.025050407227e-02 -8.959419377037e-02 -8.878623036942e-02 -8.782914128630e-02 +-8.672568743409e-02 -8.547885697412e-02 -8.409185873785e-02 -8.256811533135e-02 +-8.091125593543e-02 -7.912510881496e-02 -7.721369355130e-02 -7.518121301206e-02 +-7.303204507292e-02 -7.077073410630e-02 -6.840198225223e-02 -6.593064048684e-02 +-6.336169950423e-02 -6.070028042758e-02 -5.795162536585e-02 -5.512108783204e-02 +-5.221412303971e-02 -4.923627809414e-02 -4.619318209477e-02 -4.309053616560e-02 +-3.993410343019e-02 -3.672969894801e-02 -3.348317962868e-02 -3.020043414085e-02 +-2.688737283211e-02 -2.354991767634e-02 -2.019399226492e-02 -1.682551185775e-02 +-1.345037351002e-02 -1.007444629063e-02 -6.703561607520e-03 -3.343503655287e-03 +8.091661967317e-16 3.321287684157e-03 6.614772712057e-03 9.874952304679e-03 +1.309641631239e-02 1.627385573127e-02 1.940207099963e-02 2.247598006243e-02 +2.549062619148e-02 2.844118555013e-02 3.132297449135e-02 3.413145657870e-02 +3.686224932018e-02 3.951113060552e-02 4.207404483791e-02 4.454710875184e-02 +4.692661690911e-02 4.920904686583e-02 5.139106400368e-02 5.346952601928e-02 +5.544148706620e-02 5.730420154464e-02 5.905512753453e-02 6.069192986825e-02 +6.221248283989e-02 6.361487254867e-02 6.489739887441e-02 6.605857708405e-02 +6.709713906841e-02 6.801203420911e-02 6.880242987642e-02 6.946771155903e-02 +7.000748262752e-02 7.042156373406e-02 7.070999185110e-02 7.087301895268e-02 +7.091111034250e-02 7.082494263330e-02 7.061540138291e-02 7.028357839256e-02 +6.983076867396e-02 6.925846709169e-02 6.856836468843e-02 6.776234470069e-02 +6.684247827337e-02 6.581101988180e-02 6.467040247051e-02 6.342323231826e-02 +6.207228363933e-02 6.062049293139e-02 5.907095308091e-02 5.742690723682e-02 +5.569174246433e-02 5.386898319014e-02 5.196228445150e-02 4.997542496108e-02 +4.791230000042e-02 4.577691415454e-02 4.357337390075e-02 4.130588006484e-02 +3.897872015786e-02 3.659626060694e-02 3.416293889372e-02 3.168325561404e-02 +2.916176647246e-02 2.660307422553e-02 2.401182058740e-02 2.139267811165e-02 +1.875034206295e-02 1.608952229238e-02 1.341493512983e-02 1.073129530719e-02 +8.043307925584e-03 5.355660480002e-03 2.673014954360e-03 -7.526230023946e-16 +-2.658796789711e-03 -5.298836496131e-03 -7.915636371211e-03 -1.050477720044e-02 +-1.306191052115e-02 -1.558276568475e-02 -1.806315675175e-02 -2.049898920881e-02 +-2.288626649737e-02 -2.522109634368e-02 -2.749969688076e-02 -2.971840255270e-02 +-3.187366979260e-02 -3.396208246556e-02 -3.598035706879e-02 -3.792534768102e-02 +-3.979405065425e-02 -4.158360904115e-02 -4.329131675165e-02 -4.491462243338e-02 +-4.645113307028e-02 -4.789861729501e-02 -4.925500841066e-02 -5.051840711811e-02 +-5.168708394579e-02 -5.275948137919e-02 -5.373421568778e-02 -5.461007844774e-02 +-5.538603775940e-02 -5.606123915857e-02 -5.663500622177e-02 -5.710684086569e-02 +-5.747642334177e-02 -5.774361192730e-02 -5.790844231499e-02 -5.797112670335e-02 +-5.793205259083e-02 -5.779178127705e-02 -5.755104607507e-02 -5.721075023891e-02 +-5.677196461122e-02 -5.623592499627e-02 -5.560402926396e-02 -5.487783419102e-02 +-5.405905204576e-02 -5.314954692351e-02 -5.215133083990e-02 -5.106655958980e-02 +-4.989752837985e-02 -4.864666724310e-02 -4.731653624443e-02 -4.590982048582e-02 +-4.442932492084e-02 -4.287796898795e-02 -4.125878107252e-02 -3.957489280777e-02 +-3.782953322493e-02 -3.602602276320e-02 -3.416776715041e-02 -3.225825116512e-02 +-3.030103229152e-02 -2.829973427809e-02 -2.625804061163e-02 -2.417968791794e-02 +-2.206845930072e-02 -1.992817763036e-02 -1.776269879406e-02 -1.557590491911e-02 +-1.337169758083e-02 -1.115399100682e-02 -8.926705289161e-03 -6.693759615922e-03 +-4.459065533573e-03 -2.226520251516e-03 7.149275395032e-16 2.216646547520e-03 +4.419604776640e-03 6.605100548163e-03 8.769406517547e-03 1.090884834733e-02 +1.301981080239e-02 1.509874371809e-02 1.714216783182e-02 1.914668046839e-02 +2.110896107026e-02 2.302577656394e-02 2.489398655389e-02 2.671054833591e-02 +2.847252172221e-02 3.017707367060e-02 3.182148271090e-02 3.340314316160e-02 +3.491956913071e-02 3.636839829457e-02 3.774739544933e-02 3.905445582979e-02 +4.028760819093e-02 4.144501764787e-02 4.252498827031e-02 4.352596542804e-02 +4.444653788457e-02 4.528543963624e-02 4.604155149464e-02 4.671390241085e-02 +4.730167054004e-02 4.780418404582e-02 4.822092164385e-02 4.855151288497e-02 +4.879573817824e-02 4.895352855494e-02 4.902496517506e-02 4.901027857787e-02 +4.890984767914e-02 4.872419851754e-02 4.845400275336e-02 4.810007592315e-02 +4.766337545415e-02 4.714499844287e-02 4.654617920251e-02 4.586828658428e-02 +4.511282107822e-02 4.428141169907e-02 4.337581266363e-02 4.239789986584e-02 +4.134966715663e-02 4.023322243538e-02 3.905078356065e-02 3.780467408771e-02 +3.649731884093e-02 3.513123932908e-02 3.370904901216e-02 3.223344842834e-02 +3.070722018990e-02 2.913322385713e-02 2.751439069967e-02 2.585371835441e-02 +2.415426538970e-02 2.241914578537e-02 2.065152333847e-02 1.885460600450e-02 +1.703164018409e-02 1.518590496514e-02 1.332070633044e-02 1.143937134082e-02 +9.545242303915e-03 7.641670938514e-03 5.732012544669e-03 3.819620189370e-03 +1.907838917807e-03 -7.687782007767e-16 -1.900584777436e-03 -3.790628764785e-03 +-5.666876038481e-03 -7.526106916761e-03 -9.365143392521e-03 -1.118085447437e-02 +-1.297016142701e-02 -1.473004290239e-02 -1.645753995316e-02 -1.814976092022e-02 +-1.980388618652e-02 -2.141717278938e-02 -2.298695888388e-02 -2.451066805029e-02 +-2.598581343857e-02 -2.741000174358e-02 -2.878093700455e-02 -3.009642422315e-02 +-3.135437279440e-02 -3.255279974529e-02 -3.368983277625e-02 -3.476371310077e-02 +-3.577279807928e-02 -3.671556364322e-02 -3.759060650603e-02 -3.839664615800e-02 +-3.913252664218e-02 -3.979721810929e-02 -4.038981814945e-02 -4.090955289950e-02 +-4.135577792453e-02 -4.172797887314e-02 -4.202577190581e-02 -4.224890389672e-02 +-4.239725240919e-02 -4.247082544577e-02 -4.246976097406e-02 -4.239432622988e-02 +-4.224491679979e-02 -4.202205548522e-02 -4.172639095100e-02 -4.135869616127e-02 +-4.091986660623e-02 -4.041091832344e-02 -3.983298571793e-02 -3.918731918528e-02 +-3.847528254272e-02 -3.769835027310e-02 -3.685810458721e-02 -3.595623231012e-02 +-3.499452159744e-02 -3.397485848777e-02 -3.289922329778e-02 -3.176968686672e-02 +-3.058840665721e-02 -2.935762271971e-02 -2.807965352778e-02 -2.675689169205e-02 +-2.539179956041e-02 -2.398690471253e-02 -2.254479535683e-02 -2.106811563803e-02 +-1.955956086377e-02 -1.802187265870e-02 -1.645783405477e-02 -1.487026452621e-02 +-1.326201497800e-02 -1.163596269674e-02 -9.995006272538e-03 -8.342060500900e-03 +-6.680051273433e-03 -5.011910466193e-03 -3.340570834516e-03 -1.668960923089e-03 +8.091661967317e-16 1.663406976591e-03 3.318374350567e-03 4.962040710312e-03 +6.591573773124e-03 + Type L N + 0 0 8 +1.000000000000e+00 9.996299309272e-01 9.985202167122e-01 9.966723355824e-01 +9.940887486459e-01 9.907728959881e-01 9.867291912182e-01 9.819630144724e-01 +9.764807038877e-01 9.702895455599e-01 9.633977620041e-01 9.558144991363e-01 +9.475498117999e-01 9.386146478614e-01 9.290208309025e-01 9.187810415390e-01 +9.079087973983e-01 8.964184317905e-01 8.843250711084e-01 8.716446109973e-01 +8.583936913341e-01 8.445896700594e-01 8.302505959068e-01 8.153951800773e-01 +8.000427669069e-01 7.842133035765e-01 7.679273089188e-01 7.512058413721e-01 +7.340704661390e-01 7.165432216036e-01 6.986465850664e-01 6.804034378539e-01 +6.618370298633e-01 6.429709436022e-01 6.238290577842e-01 6.044355105433e-01 +5.848146623272e-01 5.649910585350e-01 5.449893919607e-01 5.248344651060e-01 +5.045511524271e-01 4.841643625768e-01 4.636990007081e-01 4.431799308996e-01 +4.226319387680e-01 4.020796943278e-01 3.815477151625e-01 3.610603299659e-01 +3.406416425154e-01 3.203154961369e-01 3.001054387190e-01 2.800346883341e-01 +2.601260995227e-01 2.404021302968e-01 2.208848099135e-01 2.015957074738e-01 +1.825559013952e-01 1.637859498066e-01 1.453058619150e-01 1.271350703867e-01 +1.092924047870e-01 9.179606612179e-02 7.466360251687e-02 5.791188607578e-02 +4.155709094885e-02 2.561467264739e-02 1.009934863343e-02 -4.974919786851e-03 +-1.959494424000e-02 -3.374832470904e-02 -4.742346358303e-02 -6.060957831404e-02 +-7.329671266529e-02 -8.547574653712e-02 -9.713840435984e-02 -1.082772620449e-01 +-1.188857524890e-01 -1.289581696271e-01 -1.384896710345e-01 -1.474762790796e-01 +-1.559148806314e-01 -1.638032253296e-01 -1.711399224253e-01 -1.779244362065e-01 +-1.841570800207e-01 -1.898390089126e-01 -1.949722108968e-01 -1.995594968850e-01 +-2.036044892942e-01 -2.071116093607e-01 -2.100860631877e-01 -2.125338265592e-01 +-2.144616285503e-01 -2.158769339703e-01 -2.167879246744e-01 -2.172034797827e-01 +-2.171331548467e-01 -2.165871600048e-01 -2.155763371712e-01 -2.141121363025e-01 +-2.122065907892e-01 -2.098722920193e-01 -2.071223631645e-01 -2.039704322375e-01 +-2.004306044739e-01 -1.965174340891e-01 -1.922458954659e-01 -1.876313538246e-01 +-1.826895354318e-01 -1.774364974027e-01 -1.718885971536e-01 -1.660624615594e-01 +-1.599749558740e-01 -1.536431524689e-01 -1.470842994484e-01 -1.403157891963e-01 +-1.333551269115e-01 -1.262198991892e-01 -1.189277427023e-01 -1.114963130395e-01 +-1.039432537543e-01 -9.628616568004e-02 -8.854257656302e-02 -8.072991106736e-02 +-7.286546120295e-02 -6.496635722696e-02 -5.704953906847e-02 -4.913172832448e-02 +-4.122940087421e-02 -3.335876015733e-02 -2.553571116008e-02 -1.777583515208e-02 +-1.009436521454e-02 -2.506162599381e-03 4.974306043343e-03 1.233299053394e-02 +1.955627809359e-02 2.663101330493e-02 3.354451707281e-02 4.028460455706e-02 +4.683960205160e-02 5.319836278592e-02 5.935028162728e-02 6.528530866417e-02 +7.099396165368e-02 7.646733731767e-02 8.169712147485e-02 8.667559799816e-02 +9.139565658907e-02 9.585079936267e-02 1.000351462397e-01 1.039434391438e-01 +1.075710450049e-01 1.109139575712e-01 1.139687980356e-01 1.167328144823e-01 +1.192038801653e-01 1.213804906286e-01 1.232617596819e-01 1.248474142494e-01 +1.261377881068e-01 1.271338145288e-01 1.278370178673e-01 1.282495040846e-01 +1.283739502669e-01 1.282135931456e-01 1.277722166546e-01 1.270541385561e-01 +1.260641961644e-01 1.248077312040e-01 1.232905738353e-01 1.215190258860e-01 +1.194998433250e-01 1.172402180176e-01 1.147477588040e-01 1.120304719395e-01 +1.090967409418e-01 1.059553058858e-01 1.026152421907e-01 9.908593894551e-02 +9.537707681490e-02 9.149860557430e-02 8.746072131841e-02 8.327384339037e-02 +7.894859107811e-02 7.449576012477e-02 6.992629910018e-02 6.525128568020e-02 +6.048190288084e-02 5.562941529364e-02 5.070514536863e-02 4.572044979077e-02 +4.068669599531e-02 3.561523886687e-02 3.051739766654e-02 2.540443323046e-02 +2.028752548256e-02 1.517775130328e-02 1.008606279507e-02 5.023265984552e-03 +-6.934678916587e-15 -4.973283238451e-03 -9.886338779335e-03 -1.472914781650e-02 +-1.949193624796e-02 -2.416519258508e-02 -2.873968518112e-02 -3.320647875028e-02 +-3.755695014953e-02 -4.178280339732e-02 -4.587608390496e-02 -4.982919189811e-02 +-5.363489500755e-02 -5.728634001033e-02 -6.077706370391e-02 -6.410100289807e-02 +-6.725250351099e-02 -7.022632875779e-02 -7.301766642180e-02 -7.562213520068e-02 +-7.803579012129e-02 -8.025512701922e-02 -8.227708608085e-02 -8.409905444744e-02 +-8.571886788288e-02 -8.713481150851e-02 -8.834561961013e-02 -8.935047452444e-02 +-9.014900461357e-02 -9.074128133845e-02 -9.112781544345e-02 -9.130955226611e-02 +-9.128786618804e-02 -9.106455424408e-02 -9.064182890882e-02 -9.002231008092e-02 +-8.920901628720e-02 -8.820535512993e-02 -8.701511300212e-02 -8.564244409680e-02 +-8.409185873785e-02 -8.236821106079e-02 -8.047668607331e-02 -7.842278612627e-02 +-7.621231682701e-02 -7.385137242755e-02 -7.134632072145e-02 -6.870378748338e-02 +-6.593064048684e-02 -6.303397313537e-02 -6.002108774380e-02 -5.689947850612e-02 +-5.367681418722e-02 -5.036092057600e-02 -4.695976273750e-02 -4.348142710220e-02 +-3.993410343019e-02 -3.632606668861e-02 -3.266565888012e-02 -2.896127086028e-02 +-2.522132418162e-02 -2.145425300164e-02 -1.766848609177e-02 -1.387242898393e-02 +-1.007444629062e-02 -6.282844234261e-03 -2.505853420320e-03 1.248388111312e-03 +4.971851523588e-03 8.656633475558e-03 1.229497204005e-02 1.587926221512e-02 +1.940207099964e-02 2.285615200444e-02 2.623445957164e-02 2.953016237590e-02 +3.273665648249e-02 3.584757783858e-02 3.885681417515e-02 4.175851629852e-02 +4.454710875185e-02 4.721729982811e-02 4.976409091801e-02 5.218278517719e-02 +5.446899549908e-02 5.661865178097e-02 5.862800747246e-02 6.049364539718e-02 +6.221248283990e-02 6.378177589308e-02 6.519912305826e-02 6.646246809928e-02 +6.757010214600e-02 6.852066504859e-02 6.931314598432e-02 6.994688331985e-02 +7.042156373406e-02 7.073722060764e-02 7.089423168719e-02 7.089331603329e-02 +7.073553026306e-02 7.042226409951e-02 6.995523524100e-02 6.933648356590e-02 +6.856836468843e-02 6.765354288313e-02 6.659498339669e-02 6.539594416689e-02 +6.405996696958e-02 6.259086801582e-02 6.099272802224e-02 5.926988177845e-02 +5.742690723682e-02 5.546861415013e-02 5.340003228383e-02 5.122639923039e-02 +4.895314785359e-02 4.658589339161e-02 4.413042024804e-02 4.159266850061e-02 +3.897872015785e-02 3.629478519403e-02 3.354718739344e-02 3.074235003493e-02 +2.788678144804e-02 2.498706047190e-02 2.204982184854e-02 1.908174158167e-02 +1.608952229237e-02 1.307987860272e-02 1.005952257821e-02 7.035149259580e-03 +4.013422314209e-03 1.000959836986e-03 -1.995679670088e-03 -4.970011110696e-03 +-7.915636371217e-03 -1.082625763435e-02 -1.369569040251e-02 -1.651787620481e-02 +-1.928689496243e-02 -2.199697698773e-02 -2.464251459379e-02 -2.721807329148e-02 +-2.971840255271e-02 -3.213844611903e-02 -3.447335183621e-02 -3.671848099634e-02 +-3.886941717007e-02 -4.092197451301e-02 -4.287220553130e-02 -4.471640829262e-02 +-4.645113307028e-02 -4.807318840906e-02 -4.957964660305e-02 -5.096784857677e-02 +-5.223540816234e-02 -5.338021576663e-02 -5.440044142386e-02 -5.529453723023e-02 +-5.606123915857e-02 -5.669956825245e-02 -5.720883120029e-02 -5.758862029145e-02 +-5.783881275763e-02 -5.795956950415e-02 -5.795133323679e-02 -5.781482599147e-02 +-5.755104607507e-02 -5.716126442675e-02 -5.664702041079e-02 -5.601011705257e-02 +-5.525261573089e-02 -5.437683034061e-02 -5.338532094088e-02 -5.228088690510e-02 +-5.106655958980e-02 -4.974559454052e-02 -4.832146325383e-02 -4.679784451516e-02 +-4.517861533337e-02 -4.346784149330e-02 -4.166976774856e-02 -3.978880767738e-02 +-3.782953322493e-02 -3.579666395606e-02 -3.369505604309e-02 -3.152969101343e-02 +-2.930566428247e-02 -2.702817349742e-02 -2.470250671805e-02 -2.233403046045e-02 +-1.992817763035e-02 -1.749043537227e-02 -1.502633286118e-02 -1.254142906313e-02 +-1.004130049137e-02 -7.531528984243e-03 -5.017689531210e-03 -2.505338172743e-03 +6.934678916587e-15 2.492842720524e-03 4.967762272207e-03 7.419397039082e-03 +9.842462857887e-03 1.223176414801e-02 1.458220479633e-02 1.688879877472e-02 +1.914668046839e-02 2.135111469448e-02 2.349750639035e-02 2.558140995256e-02 +2.759853820777e-02 2.954477099806e-02 3.141616336386e-02 3.320895330864e-02 +3.491956913071e-02 3.654463630801e-02 3.808098392333e-02 3.952565061802e-02 +4.087589006353e-02 4.212917594121e-02 4.328320642168e-02 4.433590813660e-02 +4.528543963624e-02 4.613019432803e-02 4.686880289176e-02 4.750013516873e-02 +4.802330152312e-02 4.843765367484e-02 4.874278500464e-02 4.893853033288e-02 +4.902496517506e-02 4.900240447776e-02 4.887140084024e-02 4.863274222762e-02 +4.828744918298e-02 4.783677154644e-02 4.728218469065e-02 4.662538528277e-02 +4.586828658428e-02 4.501301330079e-02 4.406189599489e-02 4.301746507603e-02 +4.188244438241e-02 4.065974437023e-02 3.935245492708e-02 3.796383782639e-02 +3.649731884093e-02 3.495647953387e-02 3.334504874655e-02 3.166689380274e-02 +2.992601144951e-02 2.812651855569e-02 2.627264258882e-02 2.436871189244e-02 +2.241914578537e-02 2.042844450541e-02 1.840117901980e-02 1.634198072508e-02 +1.425553105917e-02 1.214655104865e-02 1.001979081395e-02 7.880019055662e-03 +5.732012544663e-03 3.580545638877e-03 1.430379849364e-03 -7.137465218882e-04 +-2.847128650263e-03 -4.965105340994e-03 -7.063069044287e-03 -9.136475711889e-03 +-1.118085447437e-02 -1.319181711884e-02 -1.516506734732e-02 -1.709640979658e-02 +-1.898175880078e-02 -2.081714687901e-02 -2.259873293032e-02 -2.432281011960e-02 +-2.598581343858e-02 -2.758432692661e-02 -2.911509053710e-02 -3.057500663591e-02 +-3.196114611930e-02 -3.327075413933e-02 -3.450125542618e-02 -3.565025919711e-02 +-3.671556364322e-02 -3.769515998589e-02 -3.858723609571e-02 -3.939017966780e-02 +-4.010258094844e-02 -4.072323500860e-02 -4.125114356152e-02 -4.168551632193e-02 +-4.202577190581e-02 -4.227153827056e-02 -4.242265269635e-02 -4.247916131053e-02 +-4.244131815784e-02 -4.230958382026e-02 -4.208462359120e-02 -4.176730520968e-02 +-4.135869616127e-02 -4.086006055318e-02 -4.027285557191e-02 -3.959872753301e-02 +-3.883950753273e-02 -3.799720671295e-02 -3.707401115077e-02 -3.607227638571e-02 +-3.499452159744e-02 -3.384342344832e-02 -3.262180960529e-02 -3.133265195645e-02 +-2.997905953825e-02 -2.856427118983e-02 -2.709164795150e-02 -2.556466522485e-02 +-2.398690471252e-02 -2.236204615601e-02 -2.069385889020e-02 -1.898619323381e-02 +-1.724297173504e-02 -1.546818029213e-02 -1.366585916849e-02 -1.184009392259e-02 +-9.995006272532e-03 -8.134744915488e-03 -6.263476322280e-03 -4.385375527155e-03 +-2.504616932925e-03 -6.253651514349e-04 1.248234100769e-03 3.112063031934e-03 +4.962040710318e-03 6.794131885993e-03 8.604355680390e-03 1.038879412511e-02 +1.214360053190e-02 1.386500767619e-02 1.554933577689e-02 1.719300025595e-02 +1.879251926127e-02 2.034452093773e-02 2.184575043101e-02 2.329307661011e-02 +2.468349849486e-02 2.601415137530e-02 2.728231261083e-02 2.848540709748e-02 +2.962101239264e-02 3.068686348716e-02 3.168085721567e-02 3.260105629685e-02 +3.344569299603e-02 3.421317240339e-02 3.490207532212e-02 3.551116076145e-02 +3.603936803051e-02 3.648581842983e-02 3.684981653827e-02 3.713085109377e-02 +3.732859546769e-02 3.744290773277e-02 3.747383032626e-02 3.742158931018e-02 +3.728659323173e-02 3.706943158782e-02 3.677087289823e-02 3.639186239318e-02 +3.593351932149e-02 3.539713388664e-02 3.478416381862e-02 3.409623059028e-02 +3.333511528778e-02 3.250275414519e-02 3.160123375423e-02 3.063278596070e-02 +2.959978245979e-02 2.850472910318e-02 2.735025993118e-02 2.613913094414e-02 +2.487421362735e-02 2.355848824458e-02 2.219503691575e-02 2.078703649437e-02 +1.933775126122e-02 1.785052545076e-02 1.632877562718e-02 1.477598292730e-02 +1.319568518766e-02 1.159146897353e-02 9.966961527450e-03 8.325822655355e-03 +6.671736568086e-03 5.008403696387e-03 3.339532497358e-03 1.668831270322e-03 +-6.871853145102e-15 -1.663277755294e-03 -3.317342912672e-03 -4.958568833750e-03 +-6.583369196337e-03 + Type L N + 0 0 9 +1.000000000000e+00 9.995431365007e-01 9.981732973708e-01 9.958927352436e-01 +9.927051996072e-01 9.886159294654e-01 9.836316430835e-01 9.777605248430e-01 +9.710122092318e-01 9.633977620041e-01 9.549296585514e-01 9.456217595285e-01 +9.354892837886e-01 9.245487786841e-01 9.128180877951e-01 9.003163161571e-01 +8.870637930592e-01 8.730820324926e-01 8.583936913341e-01 8.430225253529e-01 +8.269933431327e-01 8.103319580098e-01 7.930651381253e-01 7.752205547002e-01 +7.568267286407e-01 7.379129755873e-01 7.185093495243e-01 6.986465850664e-01 +6.783560385471e-01 6.576696280293e-01 6.366197723676e-01 6.152393294468e-01 +5.935615337287e-01 5.716199332362e-01 5.494483261068e-01 5.270806968481e-01 +5.045511524271e-01 4.818938583271e-01 4.591429747041e-01 4.363325927745e-01 +4.134966715663e-01 3.906689751635e-01 3.678830105718e-01 3.451719663343e-01 +3.225686520215e-01 3.001054387190e-01 2.778142006333e-01 2.557262579339e-01 +2.338723209472e-01 2.122824358125e-01 1.909859317103e-01 1.700113697654e-01 +1.493864937280e-01 1.291381825264e-01 1.092924047871e-01 8.987417540594e-02 +7.090751425766e-02 5.241540711808e-02 3.441976887486e-02 1.694140909323e-02 +1.028487619225e-15 -1.638595305739e-02 -3.219913862486e-02 -4.742346358303e-02 +-6.204407497545e-02 -7.604737918964e-02 -8.942105846213e-02 -1.021540846851e-01 +-1.142367304979e-01 -1.256605776527e-01 -1.364185226502e-01 -1.465047796453e-01 +-1.559148806314e-01 -1.646456729163e-01 -1.726953139072e-01 -1.800632632314e-01 +-1.867502722230e-01 -1.927583708100e-01 -1.980908518463e-01 -2.027522529330e-01 +-2.067483357832e-01 -2.100860631877e-01 -2.127735736434e-01 -2.148201537121e-01 +-2.162362081830e-01 -2.170332281139e-01 -2.172237568329e-01 -2.168213539861e-01 +-2.158405577195e-01 -2.142968450882e-01 -2.122065907892e-01 -2.095870243170e-01 +-2.064561856448e-01 -2.028328795354e-01 -1.987366285918e-01 -1.941876251546e-01 +-1.892066821602e-01 -1.838151830732e-01 -1.780350310077e-01 -1.718885971536e-01 +-1.653986686265e-01 -1.585883958585e-01 -1.514812396472e-01 -1.441009179842e-01 +-1.364713527783e-01 -1.286166165939e-01 -1.205608795201e-01 -1.123283562887e-01 +-1.039432537543e-01 -9.542971885150e-02 -8.681178714103e-02 -7.811333205439e-02 +-6.935801494513e-02 -6.056923605222e-02 -5.177008647808e-02 -4.298330128110e-02 +-3.423121377956e-02 -2.553571116009e-02 -1.691819148086e-02 -8.399522155469e-03 +-1.028487619225e-15 8.260687078517e-03 1.636349667821e-02 2.429006671326e-02 +3.202274837443e-02 3.954463717861e-02 4.683960205159e-02 5.389231239292e-02 +6.068826307698e-02 6.721379734912e-02 7.345612758087e-02 7.940335385353e-02 +8.504448034442e-02 9.036942949543e-02 9.536905394874e-02 1.000351462397e-01 +1.043604462423e-01 1.083386463677e-01 1.119643945218e-01 1.152332948324e-01 +1.181419061618e-01 1.206877384270e-01 1.228692467518e-01 1.246858234832e-01 +1.261377881068e-01 1.272263751013e-01 1.279537197783e-01 1.283228421551e-01 +1.283376289143e-01 1.280028135091e-01 1.273239544735e-01 1.263074120056e-01 +1.249603228902e-01 1.232905738353e-01 1.213067732963e-01 1.190182218689e-01 +1.164348813293e-01 1.135673424083e-01 1.104267913845e-01 1.070249755862e-01 +1.033741678916e-01 9.948713032114e-02 9.537707681491e-02 9.105763529064e-02 +8.654280907895e-02 8.184693783246e-02 7.698465800681e-02 7.197086301133e-02 +6.682066312776e-02 6.154934529475e-02 5.617233285596e-02 5.070514536864e-02 +4.516335856892e-02 3.956256458902e-02 3.391833252012e-02 2.824616941330e-02 +2.256148180926e-02 1.687953788548e-02 1.121543030754e-02 5.584039868720e-03 +9.813682906107e-16 -5.522337770721e-03 -1.096893733374e-02 -1.632611041383e-02 +-2.158054781755e-02 -2.671934944501e-02 -3.173005300269e-02 -3.660066135776e-02 +-4.131966847795e-02 -4.587608390496e-02 -5.025945571323e-02 -5.445989191001e-02 +-5.846808023679e-02 -6.227530633623e-02 -6.587347025325e-02 -6.925510124285e-02 +-7.241337086197e-02 -7.534210432677e-02 -7.803579012128e-02 -8.048958784776e-02 +-8.269933431327e-02 -8.466154785177e-02 -8.637343088493e-02 -8.783287072958e-02 +-8.903843866361e-02 -8.998938726675e-02 -9.068564605646e-02 -9.112781544345e-02 +-9.131715903518e-02 -9.125559431986e-02 -9.094568176680e-02 -9.039061238318e-02 +-8.959419377037e-02 -8.856083472673e-02 -8.729552844688e-02 -8.580383437062e-02 +-8.409185873785e-02 -8.216623390832e-02 -8.003409650806e-02 -7.770306446669e-02 +-7.518121301206e-02 -7.247704969097e-02 -6.959948848655e-02 -6.655782310482e-02 +-6.336169950423e-02 -6.002108774381e-02 -5.654625322624e-02 -5.294772741363e-02 +-4.923627809414e-02 -4.542287927866e-02 -4.151868080658e-02 -3.753497774042e-02 +-3.348317962868e-02 -2.937477971631e-02 -2.522132418163e-02 -2.103438147799e-02 +-1.682551185775e-02 -1.260623715498e-02 -8.388010902277e-03 -4.182188855652e-03 +-1.028487619225e-15 4.147481894193e-03 8.249366093973e-03 1.229497204004e-02 +1.627385573126e-02 2.017583529521e-02 2.399101568496e-02 2.770981244494e-02 +3.132297449135e-02 3.482160585557e-02 3.819718634205e-02 4.144159105503e-02 +4.454710875184e-02 4.750645898377e-02 5.031280798870e-02 5.295978330336e-02 +5.544148706620e-02 5.775250798589e-02 5.988793195354e-02 6.184335128071e-02 +6.361487254867e-02 6.519912305826e-02 6.659325587311e-02 6.779495345287e-02 +6.880242987642e-02 6.961443165918e-02 7.023023717155e-02 7.064965466964e-02 +7.087301895268e-02 7.090118666487e-02 7.073553026306e-02 7.037793067472e-02 +6.983076867396e-02 6.909691500657e-02 6.817971929793e-02 6.708299778067e-02 +6.581101988180e-02 6.436849371157e-02 6.276055049912e-02 6.099272802224e-02 +5.907095308091e-02 5.700152306656e-02 5.479108668090e-02 5.244662385998e-02 +4.997542496108e-02 4.738506927143e-02 4.468340289906e-02 4.187851610764e-02 +3.897872015786e-02 3.599252371908e-02 3.292860891557e-02 2.979580707229e-02 +2.660307422553e-02 2.335946646383e-02 2.007411516497e-02 1.675620219433e-02 +1.341493512983e-02 1.005952257822e-02 6.699149646785e-03 3.342953633782e-03 +9.436728277193e-16 -3.320741317277e-03 -6.610419187885e-03 -9.860324111322e-03 +-1.306191052115e-02 -1.620681851582e-02 -1.928689496242e-02 -2.229421392150e-02 +-2.522109634368e-02 -2.806012899041e-02 -3.080418253391e-02 -3.344642879361e-02 +-3.598035706879e-02 -3.839978953001e-02 -4.069889563417e-02 -4.287220553129e-02 +-4.491462243338e-02 -4.682143391916e-02 -4.858832215099e-02 -5.021137298340e-02 +-5.168708394579e-02 -5.301237108475e-02 -5.418457465452e-02 -5.520146364738e-02 +-5.606123915857e-02 -5.676253658364e-02 -5.730442664918e-02 -5.768641528071e-02 +-5.790844231499e-02 -5.797087906641e-02 -5.787452476069e-02 -5.762060185151e-02 +-5.721075023891e-02 -5.664702041079e-02 -5.593186553183e-02 -5.506813250652e-02 +-5.405905204576e-02 -5.290822776886e-02 -5.161962437502e-02 -5.019755492096e-02 +-4.864666724310e-02 -4.697192956512e-02 -4.517861533338e-02 -4.327228732471e-02 +-4.125878107252e-02 -3.914418765901e-02 -3.693483592234e-02 -3.463727412937e-02 +-3.225825116513e-02 -2.980469729173e-02 -2.728370453004e-02 -2.470250671806e-02 +-2.206845930072e-02 -1.938901890624e-02 -1.667172276413e-02 -1.392416802064e-02 +-1.115399100682e-02 -8.368846514653e-03 -5.576387136151e-03 -2.784242720059e-03 +-9.813682906107e-16 2.768817552632e-03 5.514769598733e-03 8.230518473086e-03 +1.090884834733e-02 1.354268396528e-02 1.612510890301e-02 1.864938330763e-02 +2.110896107025e-02 2.349750639034e-02 2.580890969058e-02 2.803730284316e-02 +3.017707367060e-02 3.222287968604e-02 3.416966104046e-02 3.601265264628e-02 +3.774739544933e-02 3.936974682327e-02 4.087589006353e-02 4.226234295964e-02 +4.352596542804e-02 4.466396618951e-02 4.567390847842e-02 4.655371477312e-02 +4.730167054004e-02 4.791642698619e-02 4.839700281770e-02 4.874278500463e-02 +4.895352855494e-02 4.902935530296e-02 4.897075172058e-02 4.877856576176e-02 +4.845400275336e-02 4.799862034808e-02 4.741432255744e-02 4.670335288527e-02 +4.586828658428e-02 4.491202206072e-02 4.383777145416e-02 4.264905042157e-02 +4.134966715663e-02 3.994371067757e-02 3.843553841795e-02 3.682976315726e-02 +3.513123932908e-02 3.334504874656e-02 3.147648578604e-02 2.953104207099e-02 +2.751439069967e-02 2.543237006067e-02 2.329096728174e-02 2.109630135776e-02 +1.885460600450e-02 1.657221228548e-02 1.425553105918e-02 1.191103529476e-02 +9.545242303916e-03 7.164695937005e-03 4.775948791249e-03 2.385544478523e-03 +1.008293621247e-15 -2.374211725654e-03 -4.730679134458e-03 -7.063069044280e-03 +-9.365143392520e-03 -1.163077564077e-02 -1.385396680399e-02 -1.602886106300e-02 +-1.814976092022e-02 -2.021114186023e-02 -2.220766647794e-02 -2.413419803901e-02 +-2.598581343857e-02 -2.775781552631e-02 -2.944574476758e-02 -3.104539021231e-02 +-3.255279974529e-02 -3.396428959353e-02 -3.527645306853e-02 -3.648616852324e-02 +-3.759060650603e-02 -3.858723609570e-02 -3.947383040443e-02 -4.024847123726e-02 +-4.090955289949e-02 -4.145578514536e-02 -4.188619526375e-02 -4.220012929931e-02 +-4.239725240919e-02 -4.247754835824e-02 -4.244131815784e-02 -4.228917785554e-02 +-4.202205548522e-02 -4.164118718939e-02 -4.114811252782e-02 -4.054466898832e-02 +-3.983298571793e-02 -3.901547649476e-02 -3.809483196235e-02 -3.707401115077e-02 +-3.595623231012e-02 -3.474496308396e-02 -3.344391005198e-02 -3.205700767251e-02 +-3.058840665721e-02 -2.904246181152e-02 -2.742371937582e-02 -2.573690390341e-02 +-2.398690471253e-02 -2.217876195056e-02 -2.031765230960e-02 -1.840887443320e-02 +-1.645783405478e-02 -1.447002890888e-02 -1.245103345675e-02 -1.040648346806e-02 +-8.342060500902e-03 -6.263476322287e-03 -4.176457311176e-03 -2.086728886224e-03 +-1.028487619225e-15 2.078052258836e-03 4.141797914401e-03 6.185669163003e-03 +8.204175203364e-03 1.019191679861e-02 1.214360053189e-02 1.405405271848e-02 +1.591823293822e-02 1.773124715345e-02 1.948836037860e-02 2.118500886927e-02 +2.281681179972e-02 2.437958239938e-02 2.586933852051e-02 2.728231261082e-02 +2.861496106642e-02 2.986397294240e-02 3.102627800003e-02 3.209905407155e-02 +3.307973372531e-02 3.396601021598e-02 3.475584270669e-02 3.544746075170e-02 +3.603936803051e-02 3.653034532611e-02 3.691945274235e-02 3.720603115738e-02 +3.738970291204e-02 3.747037173448e-02 3.744822190398e-02 3.732371665920e-02 +3.709759585804e-02 3.677087289823e-02 3.634483090979e-02 3.582101823240e-02 +3.520124319259e-02 3.448756819749e-02 3.368230316362e-02 3.278799830097e-02 +3.180743627433e-02 3.074362376527e-02 2.959978245980e-02 2.837933948829e-02 +2.708591734532e-02 2.572332331878e-02 2.429553845842e-02 2.280670611555e-02 +2.126112008611e-02 1.966321239095e-02 1.801754072739e-02 1.632877562719e-02 +1.460168735687e-02 1.284113259644e-02 1.105204093352e-02 9.239401209958e-03 +7.408247758264e-03 5.563646565607e-03 3.710681402866e-03 1.854439956403e-03 +9.185425191250e-16 -1.847584355823e-03 -3.683296300260e-03 -5.502169807974e-03 +-7.299302938287e-03 -9.069870912525e-03 -1.080913893498e-02 -1.251247472377e-02 +-1.417536071871e-02 -1.579340593449e-02 -1.736235742821e-02 -1.887811135175e-02 +-2.033672356062e-02 -2.173441975207e-02 -2.306760510673e-02 -2.433287340965e-02 +-2.552701562760e-02 -2.664702792168e-02 -2.769011907529e-02 -2.865371731968e-02 +-2.953547654045e-02 -3.033328185063e-02 -3.104525451736e-02 -3.166975623109e-02 +-3.220539270811e-02 -3.265101661891e-02 -3.300572983680e-02 -3.326888500316e-02 +-3.344008640725e-02 -3.351919018076e-02 -3.350630380882e-02 -3.340178496121e-02 +-3.320623964916e-02 -3.292051971517e-02 -3.254571966486e-02 -3.208317285162e-02 +-3.153444702669e-02 -3.090133926881e-02 -3.018587030927e-02 -2.939027826978e-02 +-2.851701183216e-02 -2.756872286008e-02 -2.654825849487e-02 -2.545865274850e-02 +-2.430311761806e-02 -2.308503374762e-02 -2.180794066405e-02 -2.047552661481e-02 +-1.909161803650e-02 -1.766016868389e-02 -1.618524845002e-02 -1.467103190869e-02 +-1.312178661124e-02 -1.154186117015e-02 -9.935673162460e-03 -8.307696886265e-03 +-6.662451004076e-03 -5.004486106753e-03 -3.338372232010e-03 -1.668686371455e-03 +-9.436728277193e-16 1.663133338602e-03 3.316190356713e-03 4.954690225091e-03 +6.574206619914e-03 + Type L N + 0 0 10 +1.000000000000e+00 9.994472110789e-01 9.977899443184e-01 9.950314971204e-01 +9.911773564758e-01 9.862351859690e-01 9.802148076310e-01 9.731281786890e-01 +9.649893632704e-01 9.558144991363e-01 9.456217595285e-01 9.344313102292e-01 +9.222652619442e-01 9.091476181311e-01 8.951042184077e-01 8.801626776859e-01 +8.643523211873e-01 8.477041155076e-01 8.302505959068e-01 8.120257900115e-01 +7.930651381253e-01 7.734054103500e-01 7.530846207322e-01 7.321419386517e-01 +7.106175976801e-01 6.885528021412e-01 6.659896316114e-01 6.429709436022e-01 +6.195402746735e-01 5.957417402274e-01 5.716199332362e-01 5.472198221610e-01 +5.225866483191e-01 4.977658229563e-01 4.728028242863e-01 4.477430947521e-01 +4.226319387680e-01 3.975144211975e-01 3.724352668186e-01 3.474387610269e-01 +3.225686520215e-01 2.978680547147e-01 2.733793566015e-01 2.491441258191e-01 +2.252030216196e-01 2.015957074738e-01 1.783607670137e-01 1.555356230162e-01 +1.331564596210e-01 1.112581479646e-01 8.987417540594e-02 6.903657850743e-02 +4.877587992491e-02 2.912102934951e-02 1.009934863344e-02 -8.263518780022e-03 +-2.594365401352e-02 -4.291890440307e-02 -5.916892055123e-02 -7.467518871405e-02 +-8.942105846214e-02 -1.033917655690e-01 -1.165744500923e-01 -1.289581696271e-01 +-1.405339077219e-01 -1.512945774624e-01 -1.612350202393e-01 -1.703519997303e-01 +-1.786441911383e-01 -1.861121657396e-01 -1.927583708100e-01 -1.985871050064e-01 +-2.036044892942e-01 -2.078184335230e-01 -2.112385987623e-01 -2.138763555209e-01 +-2.157447379844e-01 -2.168583944138e-01 -2.172335338584e-01 -2.168878693459e-01 +-2.158405577195e-01 -2.141121363025e-01 -2.117244565748e-01 -2.087006150560e-01 +-2.050648815952e-01 -2.008426252725e-01 -1.960602381230e-01 -1.907450569001e-01 +-1.849252830975e-01 -1.786299014517e-01 -1.718885971536e-01 -1.647316719951e-01 +-1.571899596821e-01 -1.492947405431e-01 -1.410776558659e-01 -1.325706220924e-01 +-1.238057450998e-01 -1.148152347989e-01 -1.056313202729e-01 -9.628616568005e-02 +-8.681178714103e-02 -7.723997082428e-02 -6.760219244175e-02 -5.792953835984e-02 +-4.825262852564e-02 -3.860154140213e-02 -2.900574109914e-02 -1.949400687983e-02 +-1.009436521454e-02 -8.340245460715e-04 8.260687078522e-03 1.716438136307e-02 +2.585266596732e-02 3.430219743426e-02 4.249073072232e-02 5.039716523482e-02 +5.800158724985e-02 6.528530866417e-02 7.223090197555e-02 7.882223143918e-02 +8.504448034442e-02 9.088417436983e-02 9.632920098520e-02 1.013688248810e-01 +1.059936994162e-01 1.101958740880e-01 1.139687980356e-01 1.173073196045e-01 +1.202076820060e-01 1.226675151177e-01 1.246858234832e-01 1.262629705772e-01 +1.274006594126e-01 1.281019095783e-01 1.283710308022e-01 1.282135931456e-01 +1.276363939434e-01 1.266474216127e-01 1.252558164592e-01 1.234718286214e-01 +1.213067732963e-01 1.187729833992e-01 1.158837598151e-01 1.126533194059e-01 +1.090967409418e-01 1.052299091315e-01 1.010694569264e-01 9.663270628380e-02 +9.193760756917e-02 8.700267778782e-02 8.184693783246e-02 7.648984893776e-02 +7.095124853243e-02 6.525128568020e-02 5.941035630050e-02 5.344903835888e-02 +4.738802721590e-02 4.124807132124e-02 3.504990843726e-02 2.881420257339e-02 +2.256148180925e-02 1.631207718022e-02 1.008606279507e-02 3.903197350047e-03 +-2.217132801385e-03 -8.255968869827e-03 -1.419483299505e-02 -2.001577961440e-02 +-2.570144470082e-02 -3.123509274427e-02 -3.660066135776e-02 -4.178280339732e-02 +-4.676692649316e-02 -5.153922989805e-02 -5.608673856737e-02 -6.039733439403e-02 +-6.445978453086e-02 -6.826376674180e-02 -7.179989173278e-02 -7.505972242229e-02 +-7.803579012129e-02 -8.072160760124e-02 -8.311167903879e-02 -8.520150683466e-02 +-8.698759531398e-02 -8.846745132433e-02 -8.963958175685e-02 -9.050348802510e-02 +-9.105965754475e-02 -9.130955226611e-02 -9.125559431986e-02 -9.090114884454e-02 +-9.025050407227e-02 -8.930884875676e-02 -8.808224703522e-02 -8.657761082247e-02 +-8.480266984257e-02 -8.276593940935e-02 -8.047668607331e-02 -7.794489125769e-02 +-7.518121301206e-02 -7.219694601593e-02 -6.900397996969e-02 -6.561475651370e-02 +-6.204222481980e-02 -5.829979600261e-02 -5.440129650023e-02 -5.036092057600e-02 +-4.619318209477e-02 -4.191286572765e-02 -3.753497774042e-02 -3.307469652025e-02 +-2.854732299567e-02 -2.396823110323e-02 -1.935281845357e-02 -1.471645734749e-02 +-1.007444629063e-02 -5.441962152592e-03 -8.340131134693e-04 3.734607462995e-03 +8.249366093978e-03 1.269603304869e-02 1.706072489944e-02 2.132994563090e-02 +2.549062619148e-02 2.953016237590e-02 3.343645093440e-02 3.719792381012e-02 +4.080358041244e-02 4.424301784129e-02 4.750645898377e-02 5.058477841218e-02 +5.346952601928e-02 5.615294833457e-02 5.862800747246e-02 6.088839767150e-02 +6.292855939077e-02 6.474369093825e-02 6.632975761306e-02 6.768349835174e-02 +6.880242987642e-02 6.968484835051e-02 7.032982855517e-02 7.073722060764e-02 +7.090764424978e-02 7.084248074266e-02 7.054386241019e-02 7.001465988192e-02 +6.925846709169e-02 6.827958409586e-02 6.708299778067e-02 6.567436053492e-02 +6.405996696958e-02 6.224672877171e-02 6.024214778529e-02 5.805428741631e-02 +5.569174246433e-02 5.316360748664e-02 5.047944380534e-02 4.764924527090e-02 +4.468340289906e-02 4.159266850062e-02 3.838811742612e-02 3.508111054918e-02 +3.168325561403e-02 2.820636807394e-02 2.466243154773e-02 2.106355802239e-02 +1.742194792929e-02 1.374985022146e-02 1.005952257821e-02 6.363191862465e-03 +2.673014954357e-03 -9.989599172428e-04 -4.640831226017e-03 -8.240881465704e-03 +-1.178761362031e-02 -1.526978667692e-02 -1.867645007470e-02 -2.199697698773e-02 +-2.522109634369e-02 -2.833892348486e-02 -3.134098938305e-02 -3.421826832488e-02 +-3.696220398950e-02 -3.956473384618e-02 -4.201831180501e-02 -4.431592906008e-02 +-4.645113307028e-02 -4.841804462941e-02 -5.021137298340e-02 -5.182642895904e-02 +-5.325913607509e-02 -5.450603961314e-02 -5.556431363235e-02 -5.643176591865e-02 +-5.710684086569e-02 -5.758862029145e-02 -5.787682220067e-02 -5.797179751029e-02 +-5.787452476069e-02 -5.758660284245e-02 -5.711024177417e-02 -5.644825157280e-02 +-5.560402926396e-02 -5.458154408524e-02 -5.338532094088e-02 -5.202042217149e-02 +-5.049242770755e-02 -4.880741367987e-02 -4.697192956511e-02 -4.499297394823e-02 +-4.287796898795e-02 -4.063473367489e-02 -3.827145597526e-02 -3.579666395606e-02 +-3.321919599056e-02 -3.054817014492e-02 -2.779295284911e-02 -2.496312695688e-02 +-2.206845930072e-02 -1.911886784914e-02 -1.612438857380e-02 -1.309514213469e-02 +-1.004130049137e-02 -6.973053547895e-03 -3.900575938423e-03 -8.339940593414e-04 +2.216646547523e-03 5.241413357844e-03 8.230518473092e-03 1.117434957576e-02 +1.406350013570e-02 1.688879877471e-02 1.964133769970e-02 2.231250011820e-02 +2.489398655389e-02 2.737783998349e-02 2.975646972084e-02 3.202267397836e-02 +3.416966104046e-02 3.619106898875e-02 3.808098392333e-02 3.983395662993e-02 +4.144501764788e-02 4.290969069902e-02 4.422400444354e-02 4.538450253385e-02 +4.638825194349e-02 4.723284955377e-02 4.791642698619e-02 4.843765367484e-02 +4.879573817824e-02 4.899042773607e-02 4.902200608166e-02 4.889128952662e-02 +4.859962133973e-02 4.814886444721e-02 4.754139248701e-02 4.678007925480e-02 +4.586828658428e-02 4.480985070932e-02 4.360906715996e-02 4.227067424894e-02 +4.079983520939e-02 3.920211904877e-02 3.748348018731e-02 3.565023695355e-02 +3.370904901215e-02 3.166689380274e-02 2.953104207099e-02 2.730903257588e-02 +2.500864605923e-02 2.263787856540e-02 2.020491420100e-02 1.771809742553e-02 +1.518590496513e-02 1.261691744214e-02 1.001979081395e-02 7.403227714403e-03 +4.775948791243e-03 2.146664132266e-03 -4.759551275889e-04 -3.083304927193e-03 +-5.666876038484e-03 -8.218281375879e-03 -1.072928276960e-02 -1.319181711884e-02 +-1.559802184300e-02 -1.794025955212e-02 -2.021114186023e-02 -2.240355226875e-02 +-2.451066805029e-02 -2.652598106675e-02 -2.844331745951e-02 -3.025685615326e-02 +-3.196114611930e-02 -3.355112234832e-02 -3.502212048713e-02 -3.636989009825e-02 +-3.759060650603e-02 -3.868088119771e-02 -3.963777075253e-02 -4.045878427703e-02 +-4.114188932956e-02 -4.168551632193e-02 -4.208856139122e-02 -4.235038773969e-02 +-4.247082544577e-02 -4.245016975381e-02 -4.228917785554e-02 -4.198906418077e-02 +-4.155149421945e-02 -4.097857690240e-02 -4.027285557191e-02 -3.943729757831e-02 +-3.847528254272e-02 -3.739058933031e-02 -3.618738178244e-02 -3.487019325972e-02 +-3.344391005198e-02 -3.191375371399e-02 -3.028526238965e-02 -2.856427118983e-02 +-2.675689169205e-02 -2.486949063283e-02 -2.290866786554e-02 -2.088123365893e-02 +-1.879418541313e-02 -1.665468387165e-02 -1.447002890888e-02 -1.224763497396e-02 +-9.995006272534e-03 -7.719711768134e-03 -5.429360085660e-03 -3.131574398894e-03 +-8.339673840012e-04 1.455883679772e-03 3.730461581743e-03 5.982333544460e-03 +8.204175203370e-03 1.038879412511e-02 1.252915278979e-02 1.461839096487e-02 +1.664984740019e-02 1.861708077669e-02 2.051388984368e-02 2.233433268249e-02 +2.407274503779e-02 2.572375766059e-02 2.728231261082e-02 2.874367847092e-02 +3.010346442531e-02 3.135763316495e-02 3.250251257987e-02 3.353480620673e-02 +3.445160240269e-02 3.525038222110e-02 3.592902596889e-02 3.648581842983e-02 +3.691945274236e-02 3.722903292488e-02 3.741407504625e-02 3.747450704307e-02 +3.741066719032e-02 3.722330123580e-02 3.691355821350e-02 3.648298495484e-02 +3.593351932149e-02 3.526748218680e-02 3.448756819749e-02 3.359683535071e-02 +3.259869342535e-02 3.149689131030e-02 3.029550327527e-02 2.899891423368e-02 +2.761180404960e-02 2.613913094415e-02 2.458611405898e-02 2.295821523747e-02 +2.126112008610e-02 1.950071838100e-02 1.768308388613e-02 1.581445365156e-02 +1.390120686153e-02 1.194984330310e-02 9.966961527452e-03 7.959236776322e-03 +5.933398746592e-03 3.896209266459e-03 1.854439956398e-03 -1.851500519846e-04 +-2.215836266612e-03 -4.230950783254e-03 -6.223903960550e-03 -8.188205751972e-03 +-1.011748662635e-02 -1.200551801019e-02 -1.384623218687e-02 -1.563374158969e-02 +-1.736235742821e-02 -1.902660758947e-02 -2.062125375845e-02 -2.214130770477e-02 +-2.358204668567e-02 -2.493902791837e-02 -2.620810207787e-02 -2.738542578009e-02 +-2.846747301330e-02 -2.945104548440e-02 -3.033328185063e-02 -3.111166581057e-02 +-3.178403303238e-02 -3.234857690119e-02 -3.280385307116e-02 -3.314878281197e-02 +-3.338265514341e-02 -3.350512775560e-02 -3.351622671647e-02 -3.341634497207e-02 +-3.320623964916e-02 -3.288702817337e-02 -3.246018322023e-02 -3.192752651982e-02 +-3.129122153972e-02 -3.055376507441e-02 -2.971797777264e-02 -2.878699363791e-02 +-2.776424854012e-02 -2.665346777968e-02 -2.545865274849e-02 -2.418406673453e-02 +-2.283421991993e-02 -2.141385362464e-02 -1.992792384979e-02 -1.838158417767e-02 +-1.678016808619e-02 -1.512917073837e-02 -1.343423030803e-02 -1.170110890483e-02 +-9.935673162455e-03 -8.143874554762e-03 -6.331729505477e-03 -4.505299357224e-03 +-2.670670266093e-03 -8.339330878873e-04 9.988366780369e-04 2.821598821804e-03 +4.628368168062e-03 6.413234069001e-03 8.170379582363e-03 9.894100272720e-03 +1.157882257575e-02 1.321912166684e-02 1.480973877731e-02 1.634559790329e-02 +1.782182185480e-02 1.923374759465e-02 2.057694081947e-02 2.184720973758e-02 +2.304061800154e-02 2.415349675588e-02 2.518245576354e-02 2.612439357781e-02 +2.697650672987e-02 2.773629790500e-02 2.840158308434e-02 2.897049763238e-02 +2.944150131375e-02 2.981338222670e-02 3.008525964401e-02 3.025658575586e-02 +3.032714631269e-02 3.029706016974e-02 3.016677773849e-02 2.993707835397e-02 +2.960906657000e-02 2.918416739859e-02 2.866412051230e-02 2.805097343238e-02 +2.734707372846e-02 2.655506025855e-02 2.567785348165e-02 2.471864487758e-02 +2.368088551198e-02 2.256827378681e-02 2.138474241929e-02 2.013444469455e-02 +1.882174003967e-02 1.745117896862e-02 1.602748744963e-02 1.455555074826e-02 +1.304039680095e-02 1.148717917508e-02 9.901159673036e-03 8.287690638390e-03 +6.652197023323e-03 5.000158276982e-03 3.337090114773e-03 1.668526228842e-03 +-4.381668020759e-15 -1.662973728921e-03 -3.314916758537e-03 -4.950405458315e-03 +-6.564088453486e-03 + Type L N + 0 0 11 +1.000000000000e+00 9.993421562398e-01 9.973701827725e-01 9.940887486459e-01 +9.895056209813e-01 9.836316430835e-01 9.764807038877e-01 9.680696988392e-01 +9.584184823246e-01 9.475498117999e-01 9.354892837886e-01 9.222652619442e-01 +9.079087973984e-01 8.924535416387e-01 8.759356521824e-01 8.583936913341e-01 +8.398685183386e-01 8.204031752555e-01 8.000427669069e-01 7.788343352617e-01 +7.568267286407e-01 7.340704661390e-01 7.106175976801e-01 6.865215601232e-01 +6.618370298633e-01 6.366197723676e-01 6.109264891046e-01 5.848146623272e-01 +5.583423981772e-01 5.315682685834e-01 5.045511524271e-01 4.773500764507e-01 +4.500240563851e-01 4.226319387680e-01 3.952322439240e-01 3.678830105718e-01 +3.406416425154e-01 3.135647578731e-01 2.867080412837e-01 2.601260995227e-01 +2.338723209472e-01 2.079987391756e-01 1.825559013952e-01 1.575927416715e-01 +1.331564596210e-01 1.092924047871e-01 8.604396704186e-02 6.345247331782e-02 +4.155709094886e-02 2.039473788245e-02 2.017993520125e-15 -1.959494423999e-02 +-3.836039164509e-02 -5.626917445165e-02 -7.329671266528e-02 -8.942105846213e-02 +-1.046229325594e-01 -1.188857524890e-01 -1.321956527344e-01 -1.445414967152e-01 +-1.559148806314e-01 -1.663101292031e-01 -1.757242833674e-01 -1.841570800207e-01 +-1.916109239149e-01 -1.980908518463e-01 -2.036044892942e-01 -2.081619996917e-01 +-2.117760265342e-01 -2.144616285503e-01 -2.162362081830e-01 -2.171194336468e-01 +-2.171331548467e-01 -2.163013134635e-01 -2.146498475232e-01 -2.122065907892e-01 +-2.090011673253e-01 -2.050648815952e-01 -2.004306044739e-01 -1.951326555559e-01 +-1.892066821602e-01 -1.826895354318e-01 -1.756191439552e-01 -1.680343852933e-01 +-1.599749558740e-01 -1.514812396472e-01 -1.425941759367e-01 -1.333551269115e-01 +-1.238057450998e-01 -1.139878413639e-01 -1.039432537543e-01 -9.371371765055e-02 +-8.334073759345e-02 -7.286546120296e-02 -6.232855556730e-02 -5.177008647808e-02 +-4.122940087422e-02 -3.074501284472e-02 -2.035449352597e-02 -1.009436521455e-02 +-2.017993520125e-15 9.894476794452e-03 1.955627809358e-02 2.895404122269e-02 +3.805790849928e-02 4.683960205159e-02 5.527249267288e-02 6.333166254088e-02 +7.099396165367e-02 7.823805785504e-02 8.504448034442e-02 9.139565658906e-02 +9.727594257839e-02 1.026716463832e-01 1.075710450049e-01 1.119643945218e-01 +1.158439335639e-01 1.192038801653e-01 1.220404220705e-01 1.243517005880e-01 +1.261377881068e-01 1.274006594126e-01 1.281441569587e-01 1.283739502669e-01 +1.280974896510e-01 1.273239544735e-01 1.260641961644e-01 1.243306762428e-01 +1.221373996013e-01 1.194998433250e-01 1.164348813293e-01 1.129607051143e-01 +1.090967409418e-01 1.048635637545e-01 1.002828081598e-01 9.537707681491e-02 +9.016984654819e-02 8.468537256426e-02 7.894859107812e-02 7.298502072940e-02 +6.682066312776e-02 6.048190288085e-02 5.399540745491e-02 4.738802721591e-02 +4.068669599532e-02 3.391833252012e-02 2.710974304059e-02 2.028752548257e-02 +1.347797544287e-02 6.706994337182e-03 1.923754862896e-15 -6.618159975096e-03 +-1.312329187858e-02 -1.949193624796e-02 -2.570144470081e-02 -3.173005300269e-02 +-3.755695014952e-02 -4.316234326035e-02 -4.852751809238e-02 -5.363489500754e-02 +-5.846808023679e-02 -6.301191230674e-02 -6.725250351099e-02 -7.117727632701e-02 +-7.477499469849e-02 -7.803579012128e-02 -8.095118249046e-02 -8.351409568469e-02 +-8.571886788288e-02 -8.756125662706e-02 -8.903843866361e-02 -9.014900461356e-02 +-9.089294854048e-02 -9.127165250193e-02 -9.128786618804e-02 -9.094568176680e-02 +-9.025050407227e-02 -8.920901628720e-02 -8.782914128630e-02 -8.611999882078e-02 +-8.409185873785e-02 -8.175609044184e-02 -7.912510881497e-02 -7.621231682701e-02 +-7.303204507292e-02 -6.959948848655e-02 -6.593064048685e-02 -6.204222481980e-02 +-5.795162536585e-02 -5.367681418723e-02 -4.923627809414e-02 -4.464894401152e-02 +-3.993410343019e-02 -3.511133622733e-02 -3.020043414086e-02 -2.522132418163e-02 +-2.019399226493e-02 -1.513840733979e-02 -1.007444629063e-02 -5.021819880604e-03 +-2.017993520125e-15 4.971851523579e-03 9.874952304676e-03 1.469096672875e-02 +1.940207099963e-02 2.399101568496e-02 2.844118555012e-02 3.273665648248e-02 +3.686224932018e-02 4.080358041244e-02 4.454710875184e-02 4.808017953263e-02 +5.139106400368e-02 5.446899549907e-02 5.730420154464e-02 5.988793195354e-02 +6.221248283989e-02 6.427121649467e-02 6.605857708405e-02 6.757010214599e-02 +6.880242987642e-02 6.975330221231e-02 7.042156373406e-02 7.080715642526e-02 +7.091111034250e-02 7.073553026306e-02 7.028357839256e-02 6.955945322834e-02 +6.856836468843e-02 6.731650562847e-02 6.581101988180e-02 6.405996696958e-02 +6.207228363933e-02 5.985774240061e-02 5.742690723683e-02 5.479108668090e-02 +5.196228445150e-02 4.895314785360e-02 4.577691415454e-02 4.244735515224e-02 +3.897872015786e-02 3.538567761909e-02 3.168325561404e-02 2.788678144805e-02 +2.401182058740e-02 2.007411516497e-02 1.608952229238e-02 1.207395241270e-02 +8.043307925587e-03 4.013422314218e-03 2.074536714462e-15 -3.981442853543e-03 +-7.915636371208e-03 -1.178761362030e-02 -1.558276568474e-02 -1.928689496242e-02 +-2.288626649737e-02 -2.636765716683e-02 -2.971840255270e-02 -3.292644133668e-02 +-3.598035706879e-02 -3.886941717006e-02 -4.158360904114e-02 -4.411367316085e-02 +-4.645113307028e-02 -4.858832215099e-02 -5.051840711811e-02 -5.223540816233e-02 +-5.373421568777e-02 -5.501060360585e-02 -5.606123915857e-02 -5.688368925801e-02 +-5.747642334177e-02 -5.783881275763e-02 -5.797112670335e-02 -5.787452476069e-02 +-5.755104607507e-02 -5.700359524489e-02 -5.623592499627e-02 -5.525261573090e-02 +-5.405905204576e-02 -5.266139633442e-02 -5.106655958980e-02 -4.928216953832e-02 +-4.731653624443e-02 -4.517861533338e-02 -4.287796898795e-02 -4.042472488259e-02 +-3.782953322493e-02 -3.510352208092e-02 -3.225825116513e-02 -2.930566428247e-02 +-2.625804061164e-02 -2.312794502346e-02 -1.992817763036e-02 -1.667172276413e-02 +-1.337169758083e-02 -1.004130049137e-02 -6.693759615925e-03 -3.342281458998e-03 +-1.923754862896e-15 3.320073608768e-03 6.605100548160e-03 9.842462857878e-03 +1.301981080238e-02 1.612510890301e-02 1.914668046838e-02 2.207325046213e-02 +2.489398655388e-02 2.759853820776e-02 3.017707367060e-02 3.262031473114e-02 +3.491956913070e-02 3.706676051534e-02 3.905445582979e-02 4.087589006353e-02 +4.252498827031e-02 4.399638479288e-02 4.528543963624e-02 4.638825194349e-02 +4.730167054004e-02 4.802330152311e-02 4.855151288497e-02 4.888543616976e-02 +4.902496517506e-02 4.897075172058e-02 4.872419851754e-02 4.828744918298e-02 +4.766337545415e-02 4.685556166845e-02 4.586828658428e-02 4.470650262832e-02 +4.337581266363e-02 4.188244438241e-02 4.023322243538e-02 3.843553841795e-02 +3.649731884093e-02 3.442699122049e-02 3.223344842835e-02 2.992601144952e-02 +2.751439069967e-02 2.500864605924e-02 2.241914578537e-02 1.975652446611e-02 +1.703164018409e-02 1.425553105918e-02 1.143937134083e-02 8.594427221724e-03 +5.732012544672e-03 2.863444573755e-03 1.977605524170e-15 -2.847128650254e-03 +-5.666876038478e-03 -8.448346305770e-03 -1.118085447436e-02 -1.385396680399e-02 +-1.645753995316e-02 -1.898175880077e-02 -2.141717278938e-02 -2.375473065794e-02 +-2.598581343857e-02 -2.810226559941e-02 -3.009642422315e-02 -3.196114611929e-02 +-3.368983277624e-02 -3.527645306853e-02 -3.671556364322e-02 -3.800232691919e-02 +-3.913252664218e-02 -4.010258094843e-02 -4.090955289949e-02 -4.155115846070e-02 +-4.202577190581e-02 -4.233242864031e-02 -4.247082544577e-02 -4.244131815784e-02 +-4.224491679979e-02 -4.188327820380e-02 -4.135869616128e-02 -4.067408915282e-02 +-3.983298571793e-02 -3.883950753274e-02 -3.769835027310e-02 -3.641476234815e-02 +-3.499452159744e-02 -3.344391005198e-02 -3.176968686672e-02 -2.997905953825e-02 +-2.807965352779e-02 -2.607948041488e-02 -2.398690471253e-02 -2.181060947877e-02 +-1.955956086377e-02 -1.724297173505e-02 -1.487026452621e-02 -1.245103345675e-02 +-9.995006272540e-03 -7.512005657275e-03 -5.011910466195e-03 -2.504616932934e-03 +-2.017993520125e-15 2.492125077903e-03 4.962040710309e-03 7.400164381977e-03 +9.797085356249e-03 1.214360053189e-02 1.443074931854e-02 1.664984740018e-02 +1.879251926127e-02 2.085072935501e-02 2.281681179972e-02 2.468349849486e-02 +2.644394555529e-02 2.809175796926e-02 2.962101239264e-02 3.102627800003e-02 +3.230263532071e-02 3.344569299603e-02 3.445160240269e-02 3.531707009540e-02 +3.603936803051e-02 3.661634154138e-02 3.704641504493e-02 3.732859546769e-02 +3.746247338849e-02 3.744822190398e-02 3.728659323174e-02 3.697891307455e-02 +3.652707277795e-02 3.593351932149e-02 3.520124319259e-02 3.433376419947e-02 +3.333511528779e-02 3.220982443266e-02 3.096289468529e-02 2.959978245980e-02 +2.812637415265e-02 2.654896119291e-02 2.487421362735e-02 2.310915234940e-02 +2.126112008611e-02 1.933775126123e-02 1.734694085656e-02 1.529681239701e-02 +1.319568518767e-02 1.105204093352e-02 8.874489874274e-03 6.671736568095e-03 +4.452545458808e-03 2.225706361338e-03 2.049406405868e-15 -2.215836266605e-03 +-4.413142401646e-03 -6.583369196328e-03 -8.718111198071e-03 -1.080913893498e-02 +-1.284843031431e-02 -1.482820107631e-02 -1.674093418907e-02 -1.857940807451e-02 +-2.033672356062e-02 -2.200632946071e-02 -2.358204668567e-02 -2.505809080195e-02 +-2.642909295378e-02 -2.769011907529e-02 -2.883668732493e-02 -2.986478368168e-02 +-3.077087565026e-02 -3.155192402979e-02 -3.220539270811e-02 -3.272925645206e-02 +-3.312200667153e-02 -3.338265514341e-02 -3.351073568928e-02 -3.350630380882e-02 +-3.336993427882e-02 -3.310271673550e-02 -3.270624926561e-02 -3.218263003950e-02 +-3.153444702669e-02 -3.076476584194e-02 -2.987711577661e-02 -2.887547407732e-02 +-2.776424854012e-02 -2.654825849487e-02 -2.523271426040e-02 -2.382319515668e-02 +-2.232562616553e-02 -2.074625333617e-02 -1.909161803650e-02 -1.736853015519e-02 +-1.558404036300e-02 -1.374541154539e-02 -1.186008952090e-02 -9.935673162461e-03 +-7.979884040174e-03 -6.000535706114e-03 -4.005502742060e-03 -2.002689691865e-03 +-2.074536714462e-15 1.994694922632e-03 3.973586385546e-03 5.928958739437e-03 +7.853219214135e-03 9.738927159240e-03 1.157882257574e-02 1.336585383013e-02 +1.509320444606e-02 1.675431887269e-02 1.834292713311e-02 1.985306826103e-02 +2.127911243902e-02 2.261578175692e-02 2.385816951469e-02 2.500175800002e-02 +2.604243467716e-02 2.697650672987e-02 2.780071390796e-02 2.851223963386e-02 +2.910872033233e-02 2.958825295378e-02 2.994940066851e-02 3.019119671670e-02 +3.031314640595e-02 3.031522725560e-02 3.019788729414e-02 2.996204152340e-02 +2.960906657000e-02 2.914079355183e-02 2.855949919399e-02 2.786789523535e-02 +2.706911617354e-02 2.616670540215e-02 2.516459980041e-02 2.406711284115e-02 +2.287891628835e-02 2.160502056109e-02 2.025075384532e-02 1.882174003968e-02 +1.732387562572e-02 1.576330555675e-02 1.414639826310e-02 1.247971987454e-02 +1.077000776347e-02 9.024143514529e-03 7.249125428436e-03 5.452040668992e-03 +3.640037163405e-03 1.820295366559e-03 1.992292068153e-15 -1.813688123845e-03 +-3.613660082507e-03 -5.392886520681e-03 -7.144444916831e-03 -8.861546334083e-03 +-1.053756155274e-02 -1.216604648451e-02 -1.374076677168e-02 -1.525572147799e-02 +-1.670516578194e-02 -1.808363258714e-02 -1.938595296936e-02 -2.060727538420e-02 +-2.174308356481e-02 -2.278921304427e-02 -2.374186624279e-02 -2.459762606586e-02 +-2.535346796536e-02 -2.600677042174e-02 -2.655532381195e-02 -2.699733763383e-02 +-2.733144606462e-02 -2.755671183741e-02 -2.767262842634e-02 -2.767912053772e-02 +-2.757654291097e-02 -2.736567743992e-02 -2.704772863142e-02 -2.662431742473e-02 +-2.609747340140e-02 -2.546962542164e-02 -2.474359072908e-02 -2.392256257177e-02 +-2.301009639284e-02 -2.201009464959e-02 -2.092679032518e-02 -1.976472920154e-02 +-1.852875096731e-02 -1.722396923835e-02 -1.585575057269e-02 -1.442969256548e-02 +-1.295160111250e-02 -1.142746693402e-02 -9.863441453412e-03 -8.265812126754e-03 +-6.640977322024e-03 -4.995420847469e-03 -3.335686230010e-03 -1.668350845144e-03 +-1.923754862896e-15 1.662798928850e-03 3.313522201900e-03 4.945715167390e-03 +6.553017357490e-03 + Type L N + 0 0 12 +1.000000000000e+00 9.992279737113e-01 9.969140403446e-01 9.930646292992e-01 +9.876904326070e-01 9.808063695699e-01 9.724315374314e-01 9.625891482603e-01 +9.513064522713e-01 9.386146478614e-01 9.245487786840e-01 9.091476181311e-01 +8.924535416387e-01 8.745123872751e-01 8.553733051107e-01 8.350885959116e-01 +8.137135397329e-01 7.913062150280e-01 7.679273089187e-01 7.436399193057e-01 +7.185093495242e-01 6.926028962791e-01 6.659896316113e-01 6.387401796734e-01 +6.109264891045e-01 5.826216018117e-01 5.538994189758e-01 5.248344651059e-01 +4.955016509751e-01 4.659760362681e-01 4.363325927743e-01 4.066459689515e-01 +3.769902566815e-01 3.474387610267e-01 3.180637737844e-01 2.889363516172e-01 +2.601260995226e-01 2.317009603786e-01 2.037270112813e-01 1.762682673599e-01 +1.493864937278e-01 1.231410261944e-01 9.758860132910e-02 7.278319643154e-02 +4.877587992474e-02 2.561467264723e-02 3.344420478281e-03 -1.799332131255e-02 +-3.836039164525e-02 -5.772211483790e-02 -7.604737918979e-02 -9.330870273281e-02 +-1.094822859925e-01 -1.245480516486e-01 -1.384896710346e-01 -1.512945774625e-01 +-1.629539664097e-01 -1.734627826524e-01 -1.828196944759e-01 -1.910270551436e-01 +-1.980908518464e-01 -2.040206424053e-01 -2.088294800399e-01 -2.125338265593e-01 +-2.151534543731e-01 -2.167113377586e-01 -2.172335338584e-01 -2.167490539174e-01 +-2.152897253013e-01 -2.128900448716e-01 -2.095870243170e-01 -2.054200280721e-01 +-2.004306044738e-01 -1.946623108294e-01 -1.881605330885e-01 -1.809723008253e-01 +-1.731460982521e-01 -1.647316719950e-01 -1.557798363680e-01 -1.463422768886e-01 +-1.364713527782e-01 -1.262198991891e-01 -1.156410298962e-01 -1.047879411840e-01 +-9.371371765039e-02 -8.247114063505e-02 -7.111249996669e-02 -5.968940970393e-02 +-4.825262852548e-02 -3.685188540241e-02 -2.553571115993e-02 -1.435127650936e-02 +-3.344237101584e-03 7.441413878032e-03 1.796348508609e-02 2.818171791662e-02 +3.805790849943e-02 4.755602042277e-02 5.664228784054e-02 6.528530866430e-02 +7.345612758100e-02 8.112830867898e-02 8.827799750669e-02 9.488397243149e-02 +1.009276852081e-01 1.063932907094e-01 1.112676658148e-01 1.155404174940e-01 +1.192038801654e-01 1.222531024501e-01 1.246858234833e-01 1.265024389837e-01 +1.277059573206e-01 1.283019458554e-01 1.282984678711e-01 1.277060104357e-01 +1.265374035805e-01 1.248077312039e-01 1.225342341415e-01 1.197362058686e-01 +1.164348813293e-01 1.126533194058e-01 1.084162795664e-01 1.037500932444e-01 +9.868253051993e-02 9.324266268972e-02 8.746072131829e-02 8.136795437682e-02 +7.499648007903e-02 6.837913902881e-02 6.154934529460e-02 5.454093702501e-02 +4.738802721575e-02 4.012485523222e-02 3.278563968320e-02 2.540443323030e-02 +1.801497990466e-02 1.065057548665e-02 3.343931487162e-03 -3.872956750933e-03 +-1.096893733391e-02 -1.791382400724e-02 -2.467851280607e-02 -3.123509274441e-02 +-3.755695014967e-02 -4.361886627894e-02 -4.939710788436e-02 -5.486951042691e-02 +-6.001555367122e-02 -6.481642942771e-02 -6.925510124296e-02 -7.331635587451e-02 +-7.698684642162e-02 -8.025512701929e-02 -8.311167903885e-02 -8.554892877402e-02 +-8.756125662710e-02 -8.914499784507e-02 -9.029843489015e-02 -9.102178156370e-02 +-9.131715903518e-02 -9.118856396098e-02 -9.064182890880e-02 -8.968457533387e-02 +-8.832615938202e-02 -8.657761082242e-02 -8.445156543886e-02 -8.196219123287e-02 +-7.912510881488e-02 -7.595730638088e-02 -7.247704969087e-02 -6.870378748328e-02 +-6.465805277436e-02 -6.036136050535e-02 -5.583610201132e-02 -5.110543679481e-02 +-4.619318209463e-02 -4.112370074496e-02 -3.592178782306e-02 -3.061255658420e-02 +-2.522132418147e-02 -1.977349766434e-02 -1.429446074439e-02 -8.809461809129e-03 +-3.343503655124e-03 2.078764599710e-03 7.433152978168e-03 1.269603304885e-02 +1.784443685979e-02 2.285615200458e-02 2.770981244509e-02 3.238498473610e-02 +3.686224932032e-02 4.112327658597e-02 4.515089740462e-02 4.892916789272e-02 +5.244342816787e-02 5.568035489828e-02 5.862800747255e-02 6.127586764597e-02 +6.361487254874e-02 6.563744097142e-02 6.733749287251e-02 6.871046208299e-02 +6.975330221233e-02 7.046448578981e-02 7.084399670419e-02 7.089331603328e-02 +7.061540138289e-02 7.001465988189e-02 6.909691500653e-02 6.786936743256e-02 +6.634055013803e-02 6.452027800313e-02 6.241959217497e-02 6.005069948638e-02 +5.742690723673e-02 5.456255366062e-02 5.147293442663e-02 4.817422552287e-02 +4.468340289893e-02 4.101815924540e-02 3.719681830130e-02 3.323824708777e-02 +2.916176647231e-02 2.498706047175e-02 2.073408470507e-02 1.642297440696e-02 +1.207395241254e-02 7.707237520012e-03 3.342953633618e-03 -9.989599174016e-04 +-5.298836496292e-03 -9.537368334982e-03 -1.369569040266e-02 -1.775546161334e-02 +-2.169894303337e-02 -2.550907276560e-02 -2.916953720406e-02 -3.266483837116e-02 +-3.598035706892e-02 -3.910241159618e-02 -4.201831180512e-02 -4.471640829272e-02 +-4.718613654569e-02 -4.941805588103e-02 -5.140388304871e-02 -5.313652038720e-02 +-5.461007844779e-02 -5.581989302850e-02 -5.676253658367e-02 -5.743582400033e-02 +-5.783881275764e-02 -5.797179751029e-02 -5.783629916124e-02 -5.743504851314e-02 +-5.677196461118e-02 -5.585212791283e-02 -5.468174844196e-02 -5.326812910599e-02 +-5.161962437494e-02 -4.974559454044e-02 -4.765635579082e-02 -4.536312635556e-02 +-4.287796898784e-02 -4.021373006854e-02 -3.738397562802e-02 -3.440292459373e-02 +-3.128537958192e-02 -2.804665556062e-02 -2.470250671790e-02 -2.126905187582e-02 +-1.776269879390e-02 -1.420006770930e-02 -1.059791446129e-02 -6.973053547736e-03 +-3.342281458833e-03 2.776993699898e-04 3.870355649084e-03 7.419397039236e-03 +1.090884834749e-02 1.432311980103e-02 1.764707509662e-02 2.086609693505e-02 +2.396614976315e-02 2.693383946020e-02 2.975646972097e-02 3.242209490396e-02 +3.491956913082e-02 3.723859144079e-02 3.936974682337e-02 4.130454297152e-02 +4.303544261821e-02 4.455589133963e-02 4.586034072943e-02 4.694426686967e-02 +4.780418404585e-02 4.843765367486e-02 4.884328843635e-02 4.902075161979e-02 +4.897075172058e-02 4.869503233990e-02 4.819635746364e-02 4.747849221589e-02 +4.654617920246e-02 4.540511057875e-02 4.406189599482e-02 4.252402658784e-02 +4.079983520931e-02 3.889845308950e-02 3.682976315715e-02 3.460435024541e-02 +3.223344842822e-02 2.972888574237e-02 2.710302656088e-02 2.436871189230e-02 +2.153919788813e-02 1.862809284710e-02 1.564929300992e-02 1.261691744199e-02 +9.545242303754e-03 6.448634809500e-03 3.341487174992e-03 2.381508525979e-04 +-2.847128650419e-03 -5.900276079153e-03 -8.907449578187e-03 -1.185510239980e-02 +-1.473004290254e-02 -1.751949257884e-02 -2.021114186037e-02 -2.279320346191e-02 +-2.525446303625e-02 -2.758432692673e-02 -2.977286681774e-02 -3.181086109920e-02 +-3.368983277634e-02 -3.540208377320e-02 -3.694072549481e-02 -3.829970553127e-02 +-3.947383040449e-02 -4.045878427708e-02 -4.125114356156e-02 -4.184838738664e-02 +-4.224890389674e-02 -4.245199237930e-02 -4.245786123398e-02 -4.226762181585e-02 +-4.188327820378e-02 -4.130771296294e-02 -4.054466898827e-02 -3.959872753295e-02 +-3.847528254265e-02 -3.718051143228e-02 -3.572134245744e-02 -3.410541884732e-02 +-3.234105987946e-02 -3.043721908982e-02 -2.840343982337e-02 -2.624980834151e-02 +-2.398690471239e-02 -2.162575171918e-02 -1.917776202895e-02 -1.665468387151e-02 +-1.406854548292e-02 -1.143159857272e-02 -8.756261076850e-03 -6.055059460365e-03 +-3.340570834353e-03 -6.253651512786e-04 2.078052259000e-03 4.757297553046e-03 +7.400164382138e-03 9.994678794838e-03 1.252915278994e-02 1.499223628329e-02 +1.737296726033e-02 1.966081989565e-02 2.184575043113e-02 2.391824061559e-02 +2.586933852062e-02 2.769069656057e-02 2.937460655777e-02 3.091403170865e-02 +3.230263532080e-02 3.353480620680e-02 3.460568063597e-02 3.551116076150e-02 +3.624792945694e-02 3.681346151232e-02 3.720603115740e-02 3.742471589597e-02 +3.746939665215e-02 3.734075424653e-02 3.704026223617e-02 3.657017616935e-02 +3.593351932144e-02 3.513406499450e-02 3.417631547791e-02 3.306547778249e-02 +3.180743627425e-02 3.040872234786e-02 2.887648129230e-02 2.721843651339e-02 +2.544285128919e-02 2.355848824446e-02 2.157456673995e-02 1.950071838086e-02 +1.734694085641e-02 1.512355032887e-02 1.284113259628e-02 1.051049325735e-02 +8.142607110544e-03 5.748567021884e-03 3.339532497202e-03 9.266781948153e-04 +-1.478857386156e-03 -3.866022808557e-03 -6.223903960706e-03 -8.541773454272e-03 +-1.080913893514e-02 -1.301579009183e-02 -1.515184415306e-02 -1.720778967362e-02 +-1.917452841683e-02 -2.104341515099e-02 -2.280629518789e-02 -2.445553950233e-02 +-2.598407728330e-02 -2.738542578019e-02 -2.865371731977e-02 -2.978372338380e-02 +-3.077087565033e-02 -3.161128391669e-02 -3.230175083613e-02 -3.283978341545e-02 +-3.322360123548e-02 -3.345214137170e-02 -3.352506000737e-02 -3.344273074650e-02 +-3.320623964913e-02 -3.281737702633e-02 -3.227862604665e-02 -3.159314822042e-02 +-3.076476584187e-02 -2.979794148299e-02 -2.869775464559e-02 -2.746987569105e-02 +-2.612053717863e-02 -2.465650275498e-02 -2.308503374750e-02 -2.141385362451e-02 +-1.965111049394e-02 -1.780533782047e-02 -1.588541354853e-02 -1.390051782496e-02 +-1.186008952075e-02 -9.773781755706e-03 -7.651416633988e-03 -5.502939400705e-03 +-3.338372231846e-03 -1.167767870459e-03 9.988366781956e-04 3.151466180926e-03 +5.280252730885e-03 7.375480615454e-03 9.427630295369e-03 1.142742129759e-02 +1.336585383027e-02 1.523424893467e-02 1.702428699655e-02 1.872804444755e-02 +2.033802849617e-02 2.184720973769e-02 2.324905250247e-02 2.453754281321e-02 +2.570721383304e-02 2.675316869833e-02 2.767110064257e-02 2.845731033014e-02 +2.910872033238e-02 2.962288669104e-02 2.999800752846e-02 3.023292867675e-02 +3.032714631269e-02 3.028080659816e-02 3.009470234012e-02 2.977026669742e-02 +2.930956397516e-02 2.871527756066e-02 2.799069506760e-02 2.713969076785e-02 +2.616670540206e-02 2.507672347222e-02 2.387524813018e-02 2.256827378671e-02 +2.116225657575e-02 1.966408281765e-02 1.808103563374e-02 1.642075987274e-02 +1.469122551603e-02 1.290068973588e-02 1.105765778542e-02 9.170842904406e-03 +7.249125428275e-03 5.301511291054e-03 3.337090114614e-03 1.364993078026e-03 +-6.056492390625e-04 -2.565748845676e-03 -4.506301969589e-03 -6.418430138767e-03 +-8.293420528000e-03 -1.012276538856e-02 -1.189820038371e-02 -1.361174165838e-02 +-1.525572147813e-02 -1.682282227921e-02 -1.830610897985e-02 -1.969905941115e-02 +-2.099559273523e-02 -2.219009572795e-02 -2.327744681372e-02 -2.425303775080e-02 +-2.511279287634e-02 -2.585318583225e-02 -2.647125370453e-02 -2.696460852101e-02 +-2.733144606464e-02 -2.757055197189e-02 -2.768130509848e-02 -2.766367814715e-02 +-2.751823556482e-02 -2.724612872880e-02 -2.684908845437e-02 -2.632941486781e-02 +-2.568996470120e-02 -2.493413607671e-02 -2.406585085953e-02 -2.308953466915e-02 +-2.201009464949e-02 -2.083289510797e-02 -1.956373114306e-02 -1.820880038879e-02 +-1.677467301263e-02 -1.526826011074e-02 -1.369678065162e-02 -1.206772712484e-02 +-1.038883005751e-02 -8.668021565174e-03 -6.913398107991e-03 -5.133182626063e-03 +-3.335686229846e-03 -1.529269623132e-03 2.776955633555e-04 2.076865349952e-03 +3.859961720838e-03 5.618810496682e-03 7.345378594832e-03 9.031810508161e-03 +1.067046383786e-02 1.225394372036e-02 1.377513599426e-02 1.522723895930e-02 +1.660379358668e-02 1.789871204721e-02 1.910630443240e-02 2.022130355193e-02 +2.123888770046e-02 2.215470129622e-02 2.296487330399e-02 2.366603336570e-02 +2.425532557226e-02 2.473041982179e-02 2.508952072019e-02 2.533137399184e-02 +2.545527037936e-02 2.546104702338e-02 2.534908632429e-02 2.512031230025e-02 +2.477618446632e-02 2.431868927157e-02 2.375032914176e-02 2.307410918600e-02 +2.229352163644e-02 2.141252810021e-02 2.043553971245e-02 1.936739528878e-02 +1.821333758435e-02 1.697898777482e-02 1.567031828265e-02 1.429362407897e-02 +1.285549259812e-02 1.136277240765e-02 9.822540781984e-03 8.242070332365e-03 +6.628794849553e-03 4.990274518931e-03 3.334160669886e-03 1.668160223061e-03 +-1.634143446808e-13 -1.662608941446e-03 -3.312006778715e-03 -4.940620046424e-03 +-6.540996242587e-03 + Type L N + 0 1 0 +0.000000000000e+00 2.496324586943e-03 4.992565169903e-03 7.488637748281e-03 +9.984458328155e-03 1.247994292576e-02 1.497500757074e-02 1.746956830960e-02 +1.996354120901e-02 2.245684235920e-02 2.494938787730e-02 2.744109391072e-02 +2.993187664049e-02 3.242165228464e-02 3.491033710152e-02 3.739784739318e-02 +3.988409950874e-02 4.236900984769e-02 4.485249486326e-02 4.733447106581e-02 +4.981485502609e-02 5.229356337864e-02 5.477051282511e-02 5.724562013760e-02 +5.971880216198e-02 6.218997582121e-02 6.465905811871e-02 6.712596614162e-02 +6.959061706418e-02 7.205292815098e-02 7.451281676033e-02 7.697020034751e-02 +7.942499646812e-02 8.187712278134e-02 8.432649705328e-02 8.677303716016e-02 +8.921666109173e-02 9.165728695442e-02 9.409483297472e-02 9.652921750237e-02 +9.896035901367e-02 1.013881761147e-01 1.038125875446e-01 1.062335121789e-01 +1.086508690324e-01 1.110645772630e-01 1.134745561744e-01 1.158807252196e-01 +1.182830040039e-01 1.206813122884e-01 1.230755699930e-01 1.254656971997e-01 +1.278516141554e-01 1.302332412759e-01 1.326104991482e-01 1.349833085341e-01 +1.373515903735e-01 1.397152657871e-01 1.420742560800e-01 1.444284827445e-01 +1.467778674634e-01 1.491223321129e-01 1.514617987661e-01 1.537961896959e-01 +1.561254273778e-01 1.584494344935e-01 1.607681339337e-01 1.630814488010e-01 +1.653893024133e-01 1.676916183067e-01 1.699883202385e-01 1.722793321902e-01 +1.745645783707e-01 1.768439832190e-01 1.791174714076e-01 1.813849678450e-01 +1.836463976791e-01 1.859016863001e-01 1.881507593431e-01 1.903935426916e-01 +1.926299624799e-01 1.948599450964e-01 1.970834171864e-01 1.993003056549e-01 +2.015105376695e-01 2.037140406635e-01 2.059107423387e-01 2.081005706678e-01 +2.102834538980e-01 2.124593205533e-01 2.146280994374e-01 2.167897196366e-01 +2.189441105226e-01 2.210912017554e-01 2.232309232857e-01 2.253632053578e-01 +2.274879785128e-01 2.296051735906e-01 2.317147217331e-01 2.338165543869e-01 +2.359106033056e-01 2.379968005530e-01 2.400750785054e-01 2.421453698545e-01 +2.442076076096e-01 2.462617251009e-01 2.483076559815e-01 2.503453342304e-01 +2.523746941547e-01 2.543956703927e-01 2.564081979159e-01 2.584122120318e-01 +2.604076483865e-01 2.623944429672e-01 2.643725321044e-01 2.663418524746e-01 +2.683023411031e-01 2.702539353656e-01 2.721965729916e-01 2.741301920661e-01 +2.760547310324e-01 2.779701286942e-01 2.798763242183e-01 2.817732571367e-01 +2.836608673490e-01 2.855390951249e-01 2.874078811063e-01 2.892671663095e-01 +2.911168921278e-01 2.929570003335e-01 2.947874330805e-01 2.966081329058e-01 +2.984190427327e-01 3.002201058720e-01 3.020112660250e-01 3.037924672851e-01 +3.055636541404e-01 3.073247714752e-01 3.090757645729e-01 3.108165791173e-01 +3.125471611955e-01 3.142674572991e-01 3.159774143269e-01 3.176769795865e-01 +3.193661007968e-01 3.210447260893e-01 3.227128040107e-01 3.243702835244e-01 +3.260171140128e-01 3.276532452789e-01 3.292786275485e-01 3.308932114717e-01 +3.324969481252e-01 3.340897890136e-01 3.356716860720e-01 3.372425916669e-01 +3.388024585987e-01 3.403512401031e-01 3.418888898529e-01 3.434153619598e-01 +3.449306109763e-01 3.464345918968e-01 3.479272601600e-01 3.494085716499e-01 +3.508784826980e-01 3.523369500845e-01 3.537839310400e-01 3.552193832474e-01 +3.566432648428e-01 3.580555344177e-01 3.594561510200e-01 3.608450741561e-01 +3.622222637916e-01 3.635876803534e-01 3.649412847309e-01 3.662830382773e-01 +3.676129028112e-01 3.689308406180e-01 3.702368144509e-01 3.715307875328e-01 +3.728127235570e-01 3.740825866892e-01 3.753403415680e-01 3.765859533068e-01 +3.778193874947e-01 3.790406101978e-01 3.802495879603e-01 3.814462878060e-01 +3.826306772390e-01 3.838027242452e-01 3.849623972932e-01 3.861096653354e-01 +3.872444978093e-01 3.883668646384e-01 3.894767362329e-01 3.905740834913e-01 +3.916588778011e-01 3.927310910397e-01 3.937906955755e-01 3.948376642687e-01 +3.958719704721e-01 3.968935880325e-01 3.979024912908e-01 3.988986550836e-01 +3.998820547434e-01 4.008526660997e-01 4.018104654798e-01 4.027554297095e-01 +4.036875361137e-01 4.046067625174e-01 4.055130872460e-01 4.064064891265e-01 +4.072869474875e-01 4.081544421604e-01 4.090089534797e-01 4.098504622838e-01 +4.106789499151e-01 4.114943982211e-01 4.122967895547e-01 4.130861067746e-01 +4.138623332458e-01 4.146254528402e-01 4.153754499369e-01 4.161123094227e-01 +4.168360166924e-01 4.175465576492e-01 4.182439187051e-01 4.189280867811e-01 +4.195990493076e-01 4.202567942248e-01 4.209013099827e-01 4.215325855415e-01 +4.221506103717e-01 4.227553744544e-01 4.233468682816e-01 4.239250828559e-01 +4.244900096913e-01 4.250416408126e-01 4.255799687559e-01 4.261049865687e-01 +4.266166878097e-01 4.271150665490e-01 4.276001173681e-01 4.280718353596e-01 +4.285302161276e-01 4.289752557874e-01 4.294069509652e-01 4.298252987985e-01 +4.302302969354e-01 4.306219435350e-01 4.310002372667e-01 4.313651773105e-01 +4.317167633563e-01 4.320549956041e-01 4.323798747633e-01 4.326914020530e-01 +4.329895792010e-01 4.332744084441e-01 4.335458925272e-01 4.338040347035e-01 +4.340488387337e-01 4.342803088856e-01 4.344984499339e-01 4.347032671597e-01 +4.348947663497e-01 4.350729537962e-01 4.352378362962e-01 4.353894211511e-01 +4.355277161658e-01 4.356527296486e-01 4.357644704103e-01 4.358629477635e-01 +4.359481715222e-01 4.360201520010e-01 4.360789000144e-01 4.361244268761e-01 +4.361567443983e-01 4.361758648910e-01 4.361818011611e-01 4.361745665118e-01 +4.361541747414e-01 4.361206401430e-01 4.360739775033e-01 4.360142021017e-01 +4.359413297098e-01 4.358553765897e-01 4.357563594941e-01 4.356442956644e-01 +4.355192028303e-01 4.353810992087e-01 4.352300035024e-01 4.350659348994e-01 +4.348889130718e-01 4.346989581745e-01 4.344960908441e-01 4.342803321983e-01 +4.340517038341e-01 4.338102278270e-01 4.335559267297e-01 4.332888235711e-01 +4.330089418547e-01 4.327163055577e-01 4.324109391297e-01 4.320928674913e-01 +4.317621160329e-01 4.314187106131e-01 4.310626775581e-01 4.306940436593e-01 +4.303128361730e-01 4.299190828181e-01 4.295128117753e-01 4.290940516853e-01 +4.286628316476e-01 4.282191812190e-01 4.277631304118e-01 4.272947096928e-01 +4.268139499814e-01 4.263208826481e-01 4.258155395130e-01 4.252979528444e-01 +4.247681553570e-01 4.242261802101e-01 4.236720610063e-01 4.231058317898e-01 +4.225275270446e-01 4.219371816928e-01 4.213348310930e-01 4.207205110384e-01 +4.200942577555e-01 4.194561079017e-01 4.188060985641e-01 4.181442672572e-01 +4.174706519215e-01 4.167852909214e-01 4.160882230437e-01 4.153794874951e-01 +4.146591239012e-01 4.139271723036e-01 4.131836731590e-01 4.124286673363e-01 +4.116621961154e-01 4.108843011849e-01 4.100950246402e-01 4.092944089813e-01 +4.084824971113e-01 4.076593323337e-01 4.068249583507e-01 4.059794192614e-01 +4.051227595591e-01 4.042550241297e-01 4.033762582496e-01 4.024865075830e-01 +4.015858181805e-01 4.006742364766e-01 3.997518092872e-01 3.988185838083e-01 +3.978746076127e-01 3.969199286486e-01 3.959545952372e-01 3.949786560700e-01 +3.939921602073e-01 3.929951570751e-01 3.919876964636e-01 3.909698285243e-01 +3.899416037679e-01 3.889030730620e-01 3.878542876287e-01 3.867952990423e-01 +3.857261592268e-01 3.846469204536e-01 3.835576353392e-01 3.824583568425e-01 +3.813491382626e-01 3.802300332363e-01 3.791010957357e-01 3.779623800657e-01 +3.768139408612e-01 3.756558330852e-01 3.744881120258e-01 3.733108332941e-01 +3.721240528212e-01 3.709278268560e-01 3.697222119625e-01 3.685072650172e-01 +3.672830432068e-01 3.660496040250e-01 3.648070052707e-01 3.635553050448e-01 +3.622945617476e-01 3.610248340765e-01 3.597461810231e-01 3.584586618706e-01 +3.571623361910e-01 3.558572638427e-01 3.545435049675e-01 3.532211199882e-01 +3.518901696055e-01 3.505507147957e-01 3.492028168076e-01 3.478465371600e-01 +3.464819376389e-01 3.451090802946e-01 3.437280274390e-01 3.423388416430e-01 +3.409415857334e-01 3.395363227901e-01 3.381231161437e-01 3.367020293723e-01 +3.352731262987e-01 3.338364709875e-01 3.323921277428e-01 3.309401611045e-01 +3.294806358460e-01 3.280136169713e-01 3.265391697118e-01 3.250573595237e-01 +3.235682520850e-01 3.220719132927e-01 3.205684092596e-01 3.190578063117e-01 +3.175401709851e-01 3.160155700232e-01 3.144840703734e-01 3.129457391847e-01 +3.114006438044e-01 3.098488517749e-01 3.082904308315e-01 3.067254488986e-01 +3.051539740871e-01 3.035760746915e-01 3.019918191867e-01 3.004012762251e-01 +2.988045146334e-01 2.972016034102e-01 2.955926117220e-01 2.939776089011e-01 +2.923566644421e-01 2.907298479988e-01 2.890972293815e-01 2.874588785536e-01 +2.858148656290e-01 2.841652608686e-01 2.825101346773e-01 2.808495576012e-01 +2.791836003245e-01 2.775123336661e-01 2.758358285769e-01 2.741541561364e-01 +2.724673875501e-01 2.707755941458e-01 2.690788473709e-01 2.673772187894e-01 +2.656707800785e-01 2.639596030256e-01 2.622437595254e-01 2.605233215765e-01 +2.587983612785e-01 2.570689508288e-01 2.553351625196e-01 2.535970687347e-01 +2.518547419463e-01 2.501082547122e-01 2.483576796723e-01 2.466030895457e-01 +2.448445571275e-01 2.430821552859e-01 2.413159569588e-01 2.395460351506e-01 +2.377724629296e-01 2.359953134243e-01 2.342146598205e-01 2.324305753585e-01 +2.306431333292e-01 2.288524070719e-01 2.270584699703e-01 2.252613954502e-01 +2.234612569758e-01 2.216581280465e-01 2.198520821945e-01 2.180431929810e-01 +2.162315339931e-01 2.144171788412e-01 2.126002011553e-01 2.107806745823e-01 +2.089586727827e-01 2.071342694274e-01 2.053075381948e-01 2.034785527677e-01 +2.016473868297e-01 1.998141140628e-01 1.979788081440e-01 1.961415427420e-01 +1.943023915143e-01 1.924614281042e-01 1.906187261374e-01 1.887743592193e-01 +1.869284009315e-01 1.850809248291e-01 1.832320044374e-01 1.813817132488e-01 +1.795301247198e-01 1.776773122681e-01 1.758233492692e-01 1.739683090534e-01 +1.721122649032e-01 1.702552900495e-01 1.683974576692e-01 1.665388408819e-01 +1.646795127467e-01 1.628195462594e-01 1.609590143495e-01 1.590979898770e-01 +1.572365456294e-01 1.553747543189e-01 1.535126885791e-01 1.516504209621e-01 +1.497880239359e-01 1.479255698805e-01 1.460631310860e-01 1.442007797486e-01 +1.423385879686e-01 1.404766277466e-01 1.386149709811e-01 1.367536894653e-01 +1.348928548840e-01 1.330325388113e-01 1.311728127067e-01 1.293137479132e-01 +1.274554156536e-01 1.255978870280e-01 1.237412330106e-01 1.218855244474e-01 +1.200308320525e-01 1.181772264058e-01 1.163247779499e-01 1.144735569874e-01 +1.126236336779e-01 1.107750780352e-01 1.089279599244e-01 1.070823490592e-01 +1.052383149991e-01 1.033959271463e-01 1.015552547434e-01 9.971636687003e-02 +9.787933244060e-02 9.604422020116e-02 9.421109872679e-02 9.238003641883e-02 +9.055110150215e-02 8.872436202235e-02 8.689988584314e-02 8.507774064353e-02 +8.325799391520e-02 8.144071295975e-02 7.962596488607e-02 7.781381660763e-02 +7.600433483984e-02 7.419758609738e-02 7.239363669160e-02 7.059255272786e-02 +6.879440010292e-02 6.699924450232e-02 6.520715139783e-02 6.341818604483e-02 +6.163241347976e-02 5.984989851753e-02 5.807070574900e-02 5.629489953847e-02 +5.452254402109e-02 5.275370310039e-02 5.098844044580e-02 4.922681949013e-02 +4.746890342708e-02 4.571475520885e-02 4.396443754362e-02 4.221801289314e-02 +4.047554347031e-02 3.873709123678e-02 3.700271790054e-02 3.527248491351e-02 +3.354645346923e-02 3.182468450046e-02 3.010723867682e-02 2.839417640254e-02 +2.668555781403e-02 2.498144277768e-02 2.328189088750e-02 2.158696146289e-02 +1.989671354636e-02 1.821120590129e-02 1.653049700966e-02 1.485464506992e-02 +1.318370799468e-02 1.151774340860e-02 9.856808646176e-03 8.200960749600e-03 +6.550256466598e-03 4.904752248310e-03 3.264504247171e-03 1.629568314813e-03 +-2.450691677841e-14 -1.624145453560e-03 -3.242813109028e-03 -4.855948338718e-03 +-6.463496825996e-03 + Type L N + 0 1 1 +0.000000000000e+00 4.291735428448e-03 8.583043981315e-03 1.287349883354e-02 +1.716267326116e-02 2.145014069182e-02 2.573547475531e-02 3.001824933398e-02 +3.429803861327e-02 3.857441713205e-02 4.284695983304e-02 4.711524211309e-02 +5.137883987341e-02 5.563732956983e-02 5.989028826285e-02 6.413729366771e-02 +6.837792420433e-02 7.261175904720e-02 7.683837817511e-02 8.105736242085e-02 +8.526829352072e-02 8.947075416401e-02 9.366432804228e-02 9.784859989857e-02 +1.020231555764e-01 1.061875820688e-01 1.103414675669e-01 1.144844015086e-01 +1.186159746272e-01 1.227357789992e-01 1.268434080930e-01 1.309384568164e-01 +1.350205215646e-01 1.390892002673e-01 1.431440924368e-01 1.471847992144e-01 +1.512109234179e-01 1.552220695878e-01 1.592178440342e-01 1.631978548831e-01 +1.671617121221e-01 1.711090276463e-01 1.750394153042e-01 1.789524909425e-01 +1.828478724515e-01 1.867251798097e-01 1.905840351284e-01 1.944240626958e-01 +1.982448890213e-01 2.020461428785e-01 2.058274553496e-01 2.095884598674e-01 +2.133287922588e-01 2.170480907870e-01 2.207459961937e-01 2.244221517411e-01 +2.280762032530e-01 2.317077991564e-01 2.353165905224e-01 2.389022311061e-01 +2.424643773877e-01 2.460026886113e-01 2.495168268254e-01 2.530064569210e-01 +2.564712466711e-01 2.599108667689e-01 2.633249908654e-01 2.667132956074e-01 +2.700754606748e-01 2.734111688171e-01 2.767201058901e-01 2.800019608919e-01 +2.832564259984e-01 2.864831965988e-01 2.896819713302e-01 2.928524521123e-01 +2.959943441808e-01 2.991073561218e-01 3.021911999042e-01 3.052455909129e-01 +3.082702479806e-01 3.112648934202e-01 3.142292530557e-01 3.171630562533e-01 +3.200660359520e-01 3.229379286933e-01 3.257784746512e-01 3.285874176609e-01 +3.313645052477e-01 3.341094886548e-01 3.368221228716e-01 3.395021666601e-01 +3.421493825825e-01 3.447635370265e-01 3.473444002319e-01 3.498917463154e-01 +3.524053532954e-01 3.548850031162e-01 3.573304816720e-01 3.597415788301e-01 +3.621180884535e-01 3.644598084232e-01 3.667665406600e-01 3.690380911457e-01 +3.712742699437e-01 3.734748912194e-01 3.756397732596e-01 3.777687384918e-01 +3.798616135028e-01 3.819182290567e-01 3.839384201126e-01 3.859220258413e-01 +3.878688896422e-01 3.897788591589e-01 3.916517862950e-01 3.934875272284e-01 +3.952859424260e-01 3.970468966577e-01 3.987702590090e-01 4.004559028942e-01 +4.021037060685e-01 4.037135506392e-01 4.052853230772e-01 4.068189142273e-01 +4.083142193180e-01 4.097711379712e-01 4.111895742108e-01 4.125694364708e-01 +4.139106376034e-01 4.152130948861e-01 4.164767300279e-01 4.177014691759e-01 +4.188872429201e-01 4.200339862992e-01 4.211416388040e-01 4.222101443820e-01 +4.232394514402e-01 4.242295128478e-01 4.251802859385e-01 4.260917325119e-01 +4.269638188346e-01 4.277965156404e-01 4.285897981307e-01 4.293436459731e-01 +4.300580433007e-01 4.307329787101e-01 4.313684452590e-01 4.319644404634e-01 +4.325209662940e-01 4.330380291721e-01 4.335156399653e-01 4.339538139820e-01 +4.343525709659e-01 4.347119350899e-01 4.350319349487e-01 4.353126035522e-01 +4.355539783170e-01 4.357561010584e-01 4.359190179809e-01 4.360427796690e-01 +4.361274410772e-01 4.361730615190e-01 4.361797046561e-01 4.361474384862e-01 +4.360763353314e-01 4.359664718249e-01 4.358179288979e-01 4.356307917656e-01 +4.354051499131e-01 4.351410970802e-01 4.348387312462e-01 4.344981546136e-01 +4.341194735922e-01 4.337027987817e-01 4.332482449540e-01 4.327559310359e-01 +4.322259800898e-01 4.316585192952e-01 4.310536799291e-01 4.304115973455e-01 +4.297324109555e-01 4.290162642058e-01 4.282633045577e-01 4.274736834644e-01 +4.266475563490e-01 4.257850825814e-01 4.248864254548e-01 4.239517521619e-01 +4.229812337704e-01 4.219750451979e-01 4.209333651871e-01 4.198563762794e-01 +4.187442647892e-01 4.175972207766e-01 4.164154380210e-01 4.151991139927e-01 +4.139484498252e-01 4.126636502869e-01 4.113449237518e-01 4.099924821705e-01 +4.086065410402e-01 4.071873193743e-01 4.057350396724e-01 4.042499278886e-01 +4.027322134004e-01 4.011821289769e-01 3.995999107463e-01 3.979857981635e-01 +3.963400339769e-01 3.946628641949e-01 3.929545380524e-01 3.912153079764e-01 +3.894454295514e-01 3.876451614846e-01 3.858147655706e-01 3.839545066556e-01 +3.820646526015e-01 3.801454742498e-01 3.781972453845e-01 3.762202426951e-01 +3.742147457397e-01 3.721810369068e-01 3.701194013774e-01 3.680301270870e-01 +3.659135046864e-01 3.637698275033e-01 3.615993915026e-01 3.594024952472e-01 +3.571794398579e-01 3.549305289735e-01 3.526560687102e-01 3.503563676209e-01 +3.480317366546e-01 3.456824891148e-01 3.433089406181e-01 3.409114090526e-01 +3.384902145361e-01 3.360456793733e-01 3.335781280141e-01 3.310878870103e-01 +3.285752849731e-01 3.260406525299e-01 3.234843222808e-01 3.209066287553e-01 +3.183079083684e-01 3.156884993770e-01 3.130487418352e-01 3.103889775505e-01 +3.077095500393e-01 3.050108044820e-01 3.022930876783e-01 2.995567480026e-01 +2.968021353580e-01 2.940296011322e-01 2.912394981512e-01 2.884321806341e-01 +2.856080041475e-01 2.827673255595e-01 2.799105029940e-01 2.770378957849e-01 +2.741498644292e-01 2.712467705418e-01 2.683289768085e-01 2.653968469399e-01 +2.624507456248e-01 2.594910384838e-01 2.565180920228e-01 2.535322735859e-01 +2.505339513094e-01 2.475234940741e-01 2.445012714596e-01 2.414676536964e-01 +2.384230116199e-01 2.353677166230e-01 2.323021406092e-01 2.292266559462e-01 +2.261416354184e-01 2.230474521800e-01 2.199444797088e-01 2.168330917584e-01 +2.137136623119e-01 2.105865655350e-01 2.074521757289e-01 2.043108672839e-01 +2.011630146325e-01 1.980089922025e-01 1.948491743708e-01 1.916839354168e-01 +1.885136494756e-01 1.853386904919e-01 1.821594321733e-01 1.789762479447e-01 +1.757895109016e-01 1.725995937643e-01 1.694068688318e-01 1.662117079363e-01 +1.630144823971e-01 1.598155629754e-01 1.566153198285e-01 1.534141224648e-01 +1.502123396984e-01 1.470103396041e-01 1.438084894728e-01 1.406071557664e-01 +1.374067040734e-01 1.342074990649e-01 1.310099044496e-01 1.278142829305e-01 +1.246209961609e-01 1.214304047005e-01 1.182428679721e-01 1.150587442188e-01 +1.118783904600e-01 1.087021624498e-01 1.055304146333e-01 1.023635001051e-01 +9.920177056660e-02 9.604557628443e-02 9.289526604868e-02 8.975118713151e-02 +8.661368524602e-02 8.348310450536e-02 8.035978738211e-02 7.724407466788e-02 +7.413630543332e-02 7.103681698821e-02 6.794594484201e-02 6.486402266461e-02 +6.179138224739e-02 5.872835346455e-02 5.567526423485e-02 5.263244048348e-02 +4.960020610444e-02 4.657888292306e-02 4.356879065899e-02 4.057024688941e-02 +3.758356701260e-02 3.460906421190e-02 3.164704941992e-02 2.869783128320e-02 +2.576171612706e-02 2.283900792103e-02 1.993000824438e-02 1.703501625226e-02 +1.415432864198e-02 1.128823961984e-02 8.437040868243e-03 5.601021513172e-03 +2.780468092113e-03 -2.433547768917e-05 -2.813107930559e-03 -5.585570683340e-03 +-8.341447865940e-03 -1.108046635148e-02 -1.380235578603e-02 -1.650684861797e-02 +-1.919368012687e-02 -2.186258845205e-02 -2.451331462065e-02 -2.714560257530e-02 +-2.975919920139e-02 -3.235385435387e-02 -3.492932088364e-02 -3.748535466355e-02 +-4.002171461387e-02 -4.253816272741e-02 -4.503446409415e-02 -4.751038692542e-02 +-4.996570257771e-02 -5.240018557588e-02 -5.481361363611e-02 -5.720576768820e-02 +-5.957643189756e-02 -6.192539368668e-02 -6.425244375612e-02 -6.655737610509e-02 +-6.883998805151e-02 -7.110008025161e-02 -7.333745671913e-02 -7.555192484393e-02 +-7.774329541020e-02 -7.991138261421e-02 -8.205600408150e-02 -8.417698088369e-02 +-8.627413755471e-02 -8.834730210664e-02 -9.039630604499e-02 -9.242098438353e-02 +-9.442117565863e-02 -9.639672194312e-02 -9.834746885961e-02 -1.002732655934e-01 +-1.021739649048e-01 -1.040494231411e-01 -1.058995002478e-01 -1.077240597797e-01 +-1.095229689111e-01 -1.112960984458e-01 -1.130433228266e-01 -1.147645201439e-01 +-1.164595721444e-01 -1.181283642388e-01 -1.197707855094e-01 -1.213867287168e-01 +-1.229760903064e-01 -1.245387704143e-01 -1.260746728727e-01 -1.275837052148e-01 +-1.290657786791e-01 -1.305208082135e-01 -1.319487124786e-01 -1.333494138503e-01 +-1.347228384229e-01 -1.360689160103e-01 -1.373875801476e-01 -1.386787680924e-01 +-1.399424208244e-01 -1.411784830461e-01 -1.423869031819e-01 -1.435676333767e-01 +-1.447206294949e-01 -1.458458511177e-01 -1.469432615411e-01 -1.480128277725e-01 +-1.490545205271e-01 -1.500683142241e-01 -1.510541869820e-01 -1.520121206133e-01 +-1.529421006198e-01 -1.538441161856e-01 -1.547181601715e-01 -1.555642291072e-01 +-1.563823231847e-01 -1.571724462497e-01 -1.579346057935e-01 -1.586688129443e-01 +-1.593750824573e-01 -1.600534327055e-01 -1.607038856690e-01 -1.613264669243e-01 +-1.619212056333e-01 -1.624881345314e-01 -1.630272899154e-01 -1.635387116309e-01 +-1.640224430593e-01 -1.644785311042e-01 -1.649070261774e-01 -1.653079821847e-01 +-1.656814565107e-01 -1.660275100038e-01 -1.663462069604e-01 -1.666376151086e-01 +-1.669018055916e-01 -1.671388529506e-01 -1.673488351076e-01 -1.675318333473e-01 +-1.676879322986e-01 -1.678172199161e-01 -1.679197874610e-01 -1.679957294811e-01 +-1.680451437914e-01 -1.680681314531e-01 -1.680647967533e-01 -1.680352471835e-01 +-1.679795934182e-01 -1.678979492927e-01 -1.677904317807e-01 -1.676571609720e-01 +-1.674982600487e-01 -1.673138552622e-01 -1.671040759088e-01 -1.668690543061e-01 +-1.666089257676e-01 -1.663238285784e-01 -1.660139039692e-01 -1.656792960911e-01 +-1.653201519892e-01 -1.649366215765e-01 -1.645288576067e-01 -1.640970156475e-01 +-1.636412540531e-01 -1.631617339362e-01 -1.626586191402e-01 -1.621320762106e-01 +-1.615822743666e-01 -1.610093854714e-01 -1.604135840036e-01 -1.597950470272e-01 +-1.591539541615e-01 -1.584904875512e-01 -1.578048318357e-01 -1.570971741183e-01 +-1.563677039349e-01 -1.556166132232e-01 -1.548440962904e-01 -1.540503497817e-01 +-1.532355726479e-01 -1.523999661133e-01 -1.515437336425e-01 -1.506670809080e-01 +-1.497702157568e-01 -1.488533481770e-01 -1.479166902640e-01 -1.469604561871e-01 +-1.459848621550e-01 -1.449901263815e-01 -1.439764690515e-01 -1.429441122854e-01 +-1.418932801051e-01 -1.408241983982e-01 -1.397370948832e-01 -1.386321990736e-01 +-1.375097422424e-01 -1.363699573865e-01 -1.352130791900e-01 -1.340393439887e-01 +-1.328489897337e-01 -1.316422559544e-01 -1.304193837223e-01 -1.291806156141e-01 +-1.279261956746e-01 -1.266563693800e-01 -1.253713836005e-01 -1.240714865628e-01 +-1.227569278130e-01 -1.214279581791e-01 -1.200848297328e-01 -1.187277957525e-01 +-1.173571106849e-01 -1.159730301075e-01 -1.145758106902e-01 -1.131657101573e-01 +-1.117429872497e-01 -1.103079016861e-01 -1.088607141251e-01 -1.074016861269e-01 +-1.059310801145e-01 -1.044491593355e-01 -1.029561878238e-01 -1.014524303607e-01 +-9.993815243652e-02 -9.841362021212e-02 -9.687910048013e-02 -9.533486062644e-02 +-9.378116859156e-02 -9.221829283197e-02 -9.064650228155e-02 -8.906606631294e-02 +-8.747725469894e-02 -8.588033757396e-02 -8.427558539545e-02 -8.266326890537e-02 +-8.104365909172e-02 -7.941702715008e-02 -7.778364444522e-02 -7.614378247275e-02 +-7.449771282081e-02 -7.284570713186e-02 -7.118803706451e-02 -6.952497425542e-02 +-6.785679028131e-02 -6.618375662098e-02 -6.450614461754e-02 -6.282422544058e-02 +-6.113827004858e-02 -5.944854915133e-02 -5.775533317251e-02 -5.605889221235e-02 +-5.435949601043e-02 -5.265741390859e-02 -5.095291481399e-02 -4.924626716229e-02 +-4.753773888093e-02 -4.582759735266e-02 -4.411610937911e-02 -4.240354114454e-02 +-4.069015817980e-02 -3.897622532641e-02 -3.726200670080e-02 -3.554776565875e-02 +-3.383376475999e-02 -3.212026573298e-02 -3.040752943992e-02 -2.869581584189e-02 +-2.698538396420e-02 -2.527649186198e-02 -2.356939658596e-02 -2.186435414842e-02 +-2.016161948939e-02 -1.846144644308e-02 -1.676408770452e-02 -1.506979479638e-02 +-1.337881803613e-02 -1.169140650333e-02 -1.000780800722e-02 -8.328269054515e-03 +-6.653034817514e-03 -4.982349102382e-03 -3.316454317742e-03 -1.655591443512e-03 +-9.290480171035e-15 1.650081982682e-03 3.294417995062e-03 4.932773078292e-03 +6.564913853998e-03 + Type L N + 0 1 2 +0.000000000000e+00 6.057645291757e-03 1.211409019261e-02 1.816813459484e-02 +2.421857895701e-02 3.026422458692e-02 3.630387392438e-02 4.233633082363e-02 +4.836040083545e-02 5.437489148881e-02 6.037861257200e-02 6.637037641321e-02 +7.234899816045e-02 7.831329606071e-02 8.426209173838e-02 9.019421047277e-02 +9.610848147468e-02 1.020037381620e-01 1.078788184342e-01 1.137325649457e-01 +1.195638253778e-01 1.253714527100e-01 1.311543054889e-01 1.369112480966e-01 +1.426411510172e-01 1.483428911016e-01 1.540153518312e-01 1.596574235791e-01 +1.652680038705e-01 1.708459976401e-01 1.763903174891e-01 1.818998839385e-01 +1.873736256817e-01 1.928104798348e-01 1.982093921838e-01 2.035693174309e-01 +2.088892194377e-01 2.141680714660e-01 2.194048564169e-01 2.245985670666e-01 +2.297482063000e-01 2.348527873422e-01 2.399113339863e-01 2.449228808196e-01 +2.498864734462e-01 2.548011687073e-01 2.596660348986e-01 2.644801519840e-01 +2.692426118077e-01 2.739525183019e-01 2.786089876924e-01 2.832111487005e-01 +2.877581427417e-01 2.922491241217e-01 2.966832602285e-01 3.010597317214e-01 +3.053777327167e-01 3.096364709698e-01 3.138351680540e-01 3.179730595357e-01 +3.220493951456e-01 3.260634389475e-01 3.300144695019e-01 3.339017800270e-01 +3.377246785558e-01 3.414824880886e-01 3.451745467432e-01 3.488002078998e-01 +3.523588403430e-01 3.558498283991e-01 3.592725720702e-01 3.626264871641e-01 +3.659110054194e-01 3.691255746281e-01 3.722696587527e-01 3.753427380397e-01 +3.783443091295e-01 3.812738851612e-01 3.841309958739e-01 3.869151877036e-01 +3.896260238760e-01 3.922630844945e-01 3.948259666247e-01 3.973142843742e-01 +3.997276689683e-01 4.020657688210e-01 4.043282496018e-01 4.065147942988e-01 +4.086251032763e-01 4.106588943291e-01 4.126159027315e-01 4.144958812827e-01 +4.162986003470e-01 4.180238478906e-01 4.196714295127e-01 4.212411684736e-01 +4.227329057167e-01 4.241464998881e-01 4.254818273497e-01 4.267387821894e-01 +4.279172762261e-01 4.290172390104e-01 4.300386178210e-01 4.309813776567e-01 +4.318455012237e-01 4.326309889187e-01 4.333378588077e-01 4.339661466002e-01 +4.345159056188e-01 4.349872067653e-01 4.353801384813e-01 4.356948067050e-01 +4.359313348240e-01 4.360898636233e-01 4.361705512287e-01 4.361735730472e-01 +4.360991217012e-01 4.359474069605e-01 4.357186556685e-01 4.354131116650e-01 +4.350310357045e-01 4.345727053707e-01 4.340384149863e-01 4.334284755195e-01 +4.327432144854e-01 4.319829758443e-01 4.311481198955e-01 4.302390231672e-01 +4.292560783023e-01 4.281996939408e-01 4.270702945978e-01 4.258683205377e-01 +4.245942276447e-01 4.232484872898e-01 4.218315861934e-01 4.203440262848e-01 +4.187863245581e-01 4.171590129235e-01 4.154626380564e-01 4.136977612420e-01 +4.118649582169e-01 4.099648190067e-01 4.079979477610e-01 4.059649625843e-01 +4.038664953643e-01 4.017031915961e-01 3.994757102038e-01 3.971847233590e-01 +3.948309162959e-01 3.924149871231e-01 3.899376466332e-01 3.873996181087e-01 +3.848016371254e-01 3.821444513525e-01 3.794288203509e-01 3.766555153674e-01 +3.738253191273e-01 3.709390256240e-01 3.679974399062e-01 3.650013778619e-01 +3.619516660012e-01 3.588491412354e-01 3.556946506550e-01 3.524890513043e-01 +3.492332099545e-01 3.459280028748e-01 3.425743156007e-01 3.391730427008e-01 +3.357250875417e-01 3.322313620507e-01 3.286927864770e-01 3.251102891507e-01 +3.214848062405e-01 3.178172815100e-01 3.141086660715e-01 3.103599181392e-01 +3.065720027808e-01 3.027458916671e-01 2.988825628215e-01 2.949830003670e-01 +2.910481942728e-01 2.870791400995e-01 2.830768387438e-01 2.790422961814e-01 +2.749765232094e-01 2.708805351884e-01 2.667553517828e-01 2.626019967016e-01 +2.584214974372e-01 2.542148850054e-01 2.499831936829e-01 2.457274607465e-01 +2.414487262099e-01 2.371480325622e-01 2.328264245044e-01 2.284849486875e-01 +2.241246534486e-01 2.197465885493e-01 2.153518049117e-01 2.109413543570e-01 +2.065162893421e-01 2.020776626981e-01 1.976265273686e-01 1.931639361477e-01 +1.886909414203e-01 1.842085949006e-01 1.797179473734e-01 1.752200484348e-01 +1.707159462339e-01 1.662066872156e-01 1.616933158642e-01 1.571768744477e-01 +1.526584027636e-01 1.481389378853e-01 1.436195139099e-01 1.391011617074e-01 +1.345849086707e-01 1.300717784677e-01 1.255627907937e-01 1.210589611267e-01 +1.165613004829e-01 1.120708151746e-01 1.075885065698e-01 1.031153708529e-01 +9.865239878758e-02 9.420057548197e-02 8.976088015483e-02 8.533428590431e-02 +8.092175947859e-02 7.652426104855e-02 7.214274398262e-02 6.777815462382e-02 +6.343143206906e-02 5.910350795073e-02 5.479530622064e-02 5.050774293645e-02 +4.624172605044e-02 4.199815520094e-02 3.777792150620e-02 3.358190736100e-02 +2.941098623583e-02 2.526602247890e-02 2.114787112076e-02 1.705737768195e-02 +1.299537798329e-02 8.962697959276e-03 4.960153474277e-03 9.885501418266e-04 +-2.951316853084e-03 -6.858662928623e-03 -1.073271427760e-02 -1.457270803581e-02 +-1.837789244712e-02 -2.214752702537e-02 -2.588088271296e-02 -2.957724203610e-02 +-3.323589925677e-02 -3.685616052122e-02 -4.043734400507e-02 -4.397878005499e-02 +-4.747981132682e-02 -5.093979292026e-02 -5.435809250992e-02 -5.773409047285e-02 +-6.106718001243e-02 -6.435676727870e-02 -6.760227148491e-02 -7.080312502047e-02 +-7.395877356020e-02 -7.706867616980e-02 -8.013230540758e-02 -8.314914742247e-02 +-8.611870204815e-02 -8.904048289344e-02 -9.191401742883e-02 -9.473884706918e-02 +-9.751452725254e-02 -1.002406275151e-01 -1.029167315623e-01 -1.055424373360e-01 +-1.081173570775e-01 -1.106411173875e-01 -1.131133592807e-01 -1.155337382378e-01 +-1.179019242531e-01 -1.202176018776e-01 -1.224804702591e-01 -1.246902431776e-01 +-1.268466490771e-01 -1.289494310933e-01 -1.309983470776e-01 -1.329931696165e-01 +-1.349336860480e-01 -1.368196984730e-01 -1.386510237637e-01 -1.404274935675e-01 +-1.421489543068e-01 -1.438152671755e-01 -1.454263081311e-01 -1.469819678830e-01 +-1.484821518772e-01 -1.499267802761e-01 -1.513157879361e-01 -1.526491243796e-01 +-1.539267537644e-01 -1.551486548486e-01 -1.563148209519e-01 -1.574252599131e-01 +-1.584799940440e-01 -1.594790600789e-01 -1.604225091215e-01 -1.613104065866e-01 +-1.621428321394e-01 -1.629198796306e-01 -1.636416570279e-01 -1.643082863435e-01 +-1.649199035588e-01 -1.654766585451e-01 -1.659787149804e-01 -1.664262502634e-01 +-1.668194554238e-01 -1.671585350286e-01 -1.674437070858e-01 -1.676752029444e-01 +-1.678532671906e-01 -1.679781575418e-01 -1.680501447358e-01 -1.680695124184e-01 +-1.680365570265e-01 -1.679515876685e-01 -1.678149260022e-01 -1.676269061082e-01 +-1.673878743619e-01 -1.670981893012e-01 -1.667582214918e-01 -1.663683533897e-01 +-1.659289792006e-01 -1.654405047364e-01 -1.649033472693e-01 -1.643179353826e-01 +-1.636847088194e-01 -1.630041183284e-01 -1.622766255068e-01 -1.615027026413e-01 +-1.606828325460e-01 -1.598175083983e-01 -1.589072335721e-01 -1.579525214688e-01 +-1.569538953461e-01 -1.559118881443e-01 -1.548270423105e-01 -1.536999096209e-01 +-1.525310510007e-01 -1.513210363424e-01 -1.500704443212e-01 -1.487798622099e-01 +-1.474498856905e-01 -1.460811186652e-01 -1.446741730647e-01 -1.432296686553e-01 +-1.417482328444e-01 -1.402305004843e-01 -1.386771136742e-01 -1.370887215615e-01 +-1.354659801405e-01 -1.338095520513e-01 -1.321201063757e-01 -1.303983184336e-01 +-1.286448695767e-01 -1.268604469820e-01 -1.250457434442e-01 -1.232014571667e-01 +-1.213282915519e-01 -1.194269549906e-01 -1.174981606509e-01 -1.155426262657e-01 +-1.135610739201e-01 -1.115542298380e-01 -1.095228241678e-01 -1.074675907683e-01 +-1.053892669932e-01 -1.032885934764e-01 -1.011663139158e-01 -9.902317485756e-02 +-9.685992548010e-02 -9.467731737761e-02 -9.247610434384e-02 -9.025704215565e-02 +-8.802088835674e-02 -8.576840204139e-02 -8.350034363841e-02 -8.121747469527e-02 +-7.892055766257e-02 -7.661035567879e-02 -7.428763235551e-02 -7.195315156299e-02 +-6.960767721639e-02 -6.725197306245e-02 -6.488680246692e-02 -6.251292820257e-02 +-6.013111223805e-02 -5.774211552749e-02 -5.534669780101e-02 -5.294561735614e-02 +-5.053963085020e-02 -4.812949309377e-02 -4.571595684517e-02 -4.329977260615e-02 +-4.088168841881e-02 -3.846244966364e-02 -3.604279885905e-02 -3.362347546212e-02 +-3.120521567084e-02 -2.878875222779e-02 -2.637481422536e-02 -2.396412691254e-02 +-2.155741150330e-02 -1.915538498668e-02 -1.675875993862e-02 -1.436824433548e-02 +-1.198454136947e-02 -9.608349265921e-03 -7.240361102419e-03 -4.881264629992e-03 +-2.531742096235e-03 -1.924700705176e-04 2.135880728715e-03 4.452645604499e-03 +6.757166049726e-03 9.048789913281e-03 1.132687156392e-02 1.359077205184e-02 +1.583985926787e-02 1.807350810032e-02 2.029110058933e-02 2.249202607883e-02 +2.467568136597e-02 2.684147084793e-02 2.898880666628e-02 3.111710884866e-02 +3.322580544777e-02 3.531433267779e-02 3.738213504801e-02 3.942866549371e-02 +4.145338550431e-02 4.345576524869e-02 4.543528369771e-02 4.739142874380e-02 +4.932369731770e-02 5.123159550235e-02 5.311463864369e-02 5.497235145865e-02 +5.680426814004e-02 5.860993245852e-02 6.038889786141e-02 6.214072756859e-02 +6.386499466524e-02 6.556128219149e-02 6.722918322899e-02 6.886830098432e-02 +7.047824886926e-02 7.205865057793e-02 7.360914016073e-02 7.512936209506e-02 +7.661897135291e-02 7.807763346516e-02 7.950502458272e-02 8.090083153442e-02 +8.226475188160e-02 8.359649396955e-02 8.489577697561e-02 8.616233095403e-02 +8.739589687760e-02 8.859622667597e-02 8.976308327066e-02 9.089624060691e-02 +9.199548368210e-02 9.306060857102e-02 9.409142244780e-02 9.508774360455e-02 +9.604940146679e-02 9.697623660553e-02 9.786810074617e-02 9.872485677404e-02 +9.954637873680e-02 1.003325518435e-01 1.010832724605e-01 1.017984481038e-01 +1.024779974292e-01 1.031218502174e-01 1.037299473580e-01 1.043022408287e-01 +1.048386936725e-01 1.053392799704e-01 1.058039848127e-01 1.062328042653e-01 +1.066257453348e-01 1.069828259286e-01 1.073040748135e-01 1.075895315703e-01 +1.078392465461e-01 1.080532808026e-01 1.082317060623e-01 1.083746046517e-01 +1.084820694408e-01 1.085542037805e-01 1.085911214368e-01 1.085929465218e-01 +1.085598134227e-01 1.084918667272e-01 1.083892611464e-01 1.082521614352e-01 +1.080807423093e-01 1.078751883606e-01 1.076356939687e-01 1.073624632107e-01 +1.070557097679e-01 1.067156568306e-01 1.063425369993e-01 1.059365921843e-01 +1.054980735025e-01 1.050272411721e-01 1.045243644044e-01 1.039897212934e-01 +1.034235987037e-01 1.028262921553e-01 1.021981057065e-01 1.015393518350e-01 +1.008503513160e-01 1.001314330992e-01 9.938293418293e-02 9.860519948654e-02 +9.779858172102e-02 9.696344125737e-02 9.610014599323e-02 9.520907121766e-02 +9.429059947404e-02 9.334512042133e-02 9.237303069346e-02 9.137473375723e-02 +9.035063976843e-02 8.930116542647e-02 8.822673382747e-02 8.712777431584e-02 +8.600472233443e-02 8.485801927336e-02 8.368811231739e-02 8.249545429210e-02 +8.128050350877e-02 8.004372360812e-02 7.878558340283e-02 7.750655671905e-02 +7.620712223680e-02 7.488776332941e-02 7.354896790198e-02 7.219122822898e-02 +7.081504079101e-02 6.942090611072e-02 6.800932858799e-02 6.658081633451e-02 +6.513588100758e-02 6.367503764340e-02 6.219880448981e-02 6.070770283852e-02 +5.920225685694e-02 5.768299341955e-02 5.615044193901e-02 5.460513419693e-02 +5.304760417444e-02 5.147838788255e-02 4.989802319239e-02 4.830704966538e-02 +4.670600838332e-02 4.509544177855e-02 4.347589346415e-02 4.184790806431e-02 +4.021203104476e-02 3.856880854353e-02 3.691878720195e-02 3.526251399594e-02 +3.360053606767e-02 3.193340055767e-02 3.026165443743e-02 2.858584434239e-02 +2.690651640569e-02 2.522421609232e-02 2.353948803412e-02 2.185287586535e-02 +2.016492205910e-02 1.847616776446e-02 1.678715264456e-02 1.509841471550e-02 +1.341049018621e-02 1.172391329930e-02 1.003921617299e-02 8.356928644037e-03 +6.677578111852e-03 5.001689383741e-03 3.329784521373e-03 1.662382688506e-03 +-1.014198008344e-14 -1.656850627876e-03 -3.307659625620e-03 -4.951920917442e-03 +-6.589132066615e-03 + Type L N + 0 1 3 +0.000000000000e+00 7.814122690500e-03 1.562566868360e-02 2.343206229337e-02 +3.123072985648e-02 3.901910074235e-02 4.679460836213e-02 5.455469117579e-02 +6.229679369723e-02 7.001836749665e-02 7.771687220002e-02 8.538977648500e-02 +9.303455907313e-02 1.006487097176e-01 1.082297301863e-01 1.157751352398e-01 +1.232824536041e-01 1.307492289365e-01 1.381730207862e-01 1.455514055471e-01 +1.528819774045e-01 1.601623492731e-01 1.673901537278e-01 1.745630439255e-01 +1.816786945189e-01 1.887348025602e-01 1.957290883961e-01 2.026592965522e-01 +2.095231966074e-01 2.163185840577e-01 2.230432811687e-01 2.296951378169e-01 +2.362720323192e-01 2.427718722500e-01 2.491925952466e-01 2.555321698005e-01 +2.617885960372e-01 2.679599064811e-01 2.740441668073e-01 2.800394765795e-01 +2.859439699728e-01 2.917558164826e-01 2.974732216175e-01 3.030944275781e-01 +3.086177139192e-01 3.140413981968e-01 3.193638365984e-01 3.245834245575e-01 +3.296985973511e-01 3.347078306804e-01 3.396096412342e-01 3.444025872356e-01 +3.490852689701e-01 3.536563292967e-01 3.581144541406e-01 3.624583729681e-01 +3.666868592425e-01 3.707987308618e-01 3.747928505779e-01 3.786681263961e-01 +3.824235119562e-01 3.860580068944e-01 3.895706571850e-01 3.929605554638e-01 +3.962268413307e-01 3.993687016333e-01 4.023853707308e-01 4.052761307368e-01 +4.080403117436e-01 4.106772920251e-01 4.131864982204e-01 4.155674054966e-01 +4.178195376915e-01 4.199424674358e-01 4.219358162554e-01 4.237992546526e-01 +4.255325021671e-01 4.271353274170e-01 4.286075481190e-01 4.299490310879e-01 +4.311596922160e-01 4.322394964326e-01 4.331884576420e-01 4.340066386425e-01 +4.346941510237e-01 4.352511550455e-01 4.356778594951e-01 4.359745215251e-01 +4.361414464714e-01 4.361789876513e-01 4.360875461417e-01 4.358675705376e-01 +4.355195566920e-01 4.350440474349e-01 4.344416322746e-01 4.337129470789e-01 +4.328586737381e-01 4.318795398086e-01 4.307763181386e-01 4.295498264749e-01 +4.282009270517e-01 4.267305261617e-01 4.251395737088e-01 4.234290627438e-01 +4.216000289823e-01 4.196535503061e-01 4.175907462470e-01 4.154127774542e-01 +4.131208451458e-01 4.107161905434e-01 4.082000942915e-01 4.055738758607e-01 +4.028388929362e-01 3.999965407908e-01 3.970482516432e-01 3.939954940025e-01 +3.908397719974e-01 3.875826246927e-01 3.842256253917e-01 3.807703809252e-01 +3.772185309284e-01 3.735717471047e-01 3.698317324772e-01 3.660002206286e-01 +3.620789749300e-01 3.580697877574e-01 3.539744796986e-01 3.497948987490e-01 +3.455329194973e-01 3.411904423020e-01 3.367693924580e-01 3.322717193544e-01 +3.276993956239e-01 3.230544162842e-01 3.183387978704e-01 3.135545775621e-01 +3.087038123009e-01 3.037885779036e-01 2.988109681678e-01 2.937730939718e-01 +2.886770823698e-01 2.835250756809e-01 2.783192305746e-01 2.730617171515e-01 +2.677547180202e-01 2.624004273707e-01 2.570010500456e-01 2.515588006072e-01 +2.460759024041e-01 2.405545866350e-01 2.349970914112e-01 2.294056608186e-01 +2.237825439790e-01 2.181299941111e-01 2.124502675921e-01 2.067456230196e-01 +2.010183202750e-01 1.952706195884e-01 1.895047806052e-01 1.837230614551e-01 +1.779277178241e-01 1.721210020292e-01 1.663051620971e-01 1.604824408467e-01 +1.546550749755e-01 1.488252941514e-01 1.429953201094e-01 1.371673657534e-01 +1.313436342646e-01 1.255263182154e-01 1.197175986908e-01 1.139196444159e-01 +1.081346108919e-01 1.023646395384e-01 9.661185684528e-02 9.087837353237e-02 +8.516628371778e-02 7.947766409582e-02 7.381457312425e-02 6.817905022147e-02 +6.257311497382e-02 5.699876635353e-02 5.145798194744e-02 4.595271719691e-02 +4.048490464928e-02 3.505645322102e-02 2.966924747309e-02 2.432514689860e-02 +1.902598522323e-02 1.377356971852e-02 8.569680528524e-03 3.416070009878e-03 +-1.685537914316e-03 -6.733448386569e-03 -1.172599623281e-02 -1.666154656564e-02 +-2.153849537289e-02 -2.635527009107e-02 -3.111033016370e-02 -3.580216758418e-02 +-4.042930742302e-02 -4.499030833920e-02 -4.948376307554e-02 -5.390829893788e-02 +-5.826257825777e-02 -6.254529883867e-02 -6.675519438543e-02 -7.089103491686e-02 +-7.495162716128e-02 -7.893581493492e-02 -8.284247950303e-02 -8.667053992355e-02 +-9.041895337328e-02 -9.408671545643e-02 -9.767286049539e-02 -1.011764618037e-01 +-1.045966319412e-01 -1.079325229511e-01 -1.111833265790e-01 -1.143482744738e-01 +-1.174266383711e-01 -1.204177302569e-01 -1.233209025149e-01 -1.261355480545e-01 +-1.288611004204e-01 -1.314970338849e-01 -1.340428635211e-01 -1.364981452580e-01 +-1.388624759179e-01 -1.411354932352e-01 -1.433168758566e-01 -1.454063433243e-01 +-1.474036560402e-01 -1.493086152126e-01 -1.511210627846e-01 -1.528408813451e-01 +-1.544679940216e-01 -1.560023643555e-01 -1.574439961601e-01 -1.587929333606e-01 +-1.600492598173e-01 -1.612130991309e-01 -1.622846144317e-01 -1.632640081506e-01 +-1.641515217746e-01 -1.649474355844e-01 -1.656520683768e-01 -1.662657771693e-01 +-1.667889568901e-01 -1.672220400507e-01 -1.675654964039e-01 -1.678198325857e-01 +-1.679855917413e-01 -1.680633531372e-01 -1.680537317574e-01 -1.679573778846e-01 +-1.677749766682e-01 -1.675072476768e-01 -1.671549444372e-01 -1.667188539595e-01 +-1.661997962490e-01 -1.655986238042e-01 -1.649162211023e-01 -1.641535040722e-01 +-1.633114195542e-01 -1.623909447482e-01 -1.613930866501e-01 -1.603188814758e-01 +-1.591693940749e-01 -1.579457173330e-01 -1.566489715627e-01 -1.552803038852e-01 +-1.538408876014e-01 -1.523319215527e-01 -1.507546294736e-01 -1.491102593337e-01 +-1.474000826723e-01 -1.456253939232e-01 -1.437875097328e-01 -1.418877682690e-01 +-1.399275285239e-01 -1.379081696080e-01 -1.358310900394e-01 -1.336977070249e-01 +-1.315094557360e-01 -1.292677885787e-01 -1.269741744584e-01 -1.246300980397e-01 +-1.222370590006e-01 -1.197965712841e-01 -1.173101623444e-01 -1.147793723900e-01 +-1.122057536239e-01 -1.095908694807e-01 -1.069362938606e-01 -1.042436103626e-01 +-1.015144115146e-01 -9.875029800281e-02 -9.595287790002e-02 -9.312376589286e-02 +-9.026458250914e-02 -8.737695334494e-02 -8.446250829219e-02 -8.152288076701e-02 +-7.855970693909e-02 -7.557462496255e-02 -7.256927420864e-02 -6.954529450057e-02 +-6.650432535085e-02 -6.344800520151e-02 -6.037797066753e-02 -5.729585578377e-02 +-5.420329125584e-02 -5.110190371520e-02 -4.799331497879e-02 -4.487914131359e-02 +-4.176099270636e-02 -3.864047213898e-02 -3.551917486967e-02 -3.239868772032e-02 +-2.928058837044e-02 -2.616644465787e-02 -2.305781388658e-02 -1.995624214201e-02 +-1.686326361402e-02 -1.378039992797e-02 -1.070915948401e-02 -7.651036805057e-03 +-4.607511893629e-03 -1.580049597793e-03 1.429901013411e-03 4.420907264870e-03 +7.391553480355e-03 1.034044157725e-02 1.326619165087e-02 1.616744254798e-02 +1.904285242952e-02 2.189109932205e-02 2.471088165778e-02 2.750091880313e-02 +3.025995157528e-02 3.298674274679e-02 3.568007753797e-02 3.833876409675e-02 +4.096163396600e-02 4.354754253802e-02 4.609536949598e-02 4.860401924232e-02 +5.107242131375e-02 5.349953078282e-02 5.588432864579e-02 5.822582219690e-02 +6.052304538854e-02 6.277505917758e-02 6.498095185738e-02 6.713983937571e-02 +6.925086563815e-02 7.131320279710e-02 7.332605152623e-02 7.528864128027e-02 +7.720023054004e-02 7.906010704276e-02 8.086758799741e-02 8.262202028525e-02 +8.432278064535e-02 8.596927584507e-02 8.756094283558e-02 8.909724889224e-02 +9.057769173993e-02 9.200179966323e-02 9.336913160161e-02 9.467927722934e-02 +9.593185702046e-02 9.712652229861e-02 9.826295527175e-02 9.934086905198e-02 +1.003600076603e-01 1.013201460162e-01 1.022210899131e-01 1.030626759780e-01 +1.038447716168e-01 1.045672749454e-01 1.052301147051e-01 1.058332501648e-01 +1.063766710073e-01 1.068603972029e-01 1.072844788672e-01 1.076489961059e-01 +1.079540588450e-01 1.081998066476e-01 1.083864085166e-01 1.085140626839e-01 +1.085829963862e-01 1.085934656274e-01 1.085457549284e-01 1.084401770627e-01 +1.082770727808e-01 1.080568105204e-01 1.077797861056e-01 1.074464224324e-01 +1.070571691435e-01 1.066125022902e-01 1.061129239830e-01 1.055589620309e-01 +1.049511695693e-01 1.042901246767e-01 1.035764299807e-01 1.028107122536e-01 +1.019936219975e-01 1.011258330189e-01 1.002080419942e-01 9.924096802516e-02 +9.822535218442e-02 9.716195705293e-02 9.605156624776e-02 9.489498394150e-02 +9.369303437333e-02 9.244656135192e-02 9.115642775059e-02 8.982351499480e-02 +8.844872254249e-02 8.703296735729e-02 8.557718337514e-02 8.408232096433e-02 +8.254934637952e-02 8.097924120983e-02 7.937300182131e-02 7.773163879423e-02 +7.605617635534e-02 7.434765180535e-02 7.260711494217e-02 7.083562747990e-02 +6.903426246414e-02 6.720410368368e-02 6.534624507912e-02 6.346179014847e-02 +6.155185135024e-02 5.961754950420e-02 5.766001319015e-02 5.568037814500e-02 +5.367978665851e-02 5.165938696787e-02 4.962033265158e-02 4.756378202279e-02 +4.549089752252e-02 4.340284511298e-02 4.130079367130e-02 3.918591438401e-02 +3.705938014256e-02 3.492236494010e-02 3.277604326993e-02 3.062158952582e-02 +2.846017740458e-02 2.629297931104e-02 2.412116576589e-02 2.194590481650e-02 +1.976836145117e-02 1.758969701691e-02 1.541106864123e-02 1.323362865800e-02 +1.105852403783e-02 8.886895823170e-03 6.719878568353e-03 4.558599784920e-03 +2.404179392452e-03 2.577291751564e-04 -1.879647755516e-03 -4.006857491995e-03 +-6.122815855197e-03 -8.226448912379e-03 -1.031669348800e-02 -1.239249766736e-02 +-1.445282129278e-02 -1.649663645210e-02 -1.852292795931e-02 -2.053069382701e-02 +-2.251894573059e-02 -2.448670946386e-02 -2.643302538598e-02 -2.835694885939e-02 +-3.025755067870e-02 -3.213391749020e-02 -3.398515220194e-02 -3.581037438412e-02 +-3.760872065965e-02 -3.937934508470e-02 -4.112141951907e-02 -4.283413398634e-02 +-4.451669702342e-02 -4.616833601959e-02 -4.778829754478e-02 -4.937584766694e-02 +-5.093027225844e-02 -5.245087729134e-02 -5.393698912143e-02 -5.538795476092e-02 +-5.680314213965e-02 -5.818194035487e-02 -5.952375990923e-02 -6.082803293718e-02 +-6.209421341953e-02 -6.332177738611e-02 -6.451022310658e-02 -6.565907126920e-02 +-6.676786514750e-02 -6.783617075500e-02 -6.886357698766e-02 -6.984969575424e-02 +-7.079416209445e-02 -7.169663428484e-02 -7.255679393255e-02 -7.337434605673e-02 +-7.414901915772e-02 -7.488056527406e-02 -7.556876002718e-02 -7.621340265389e-02 +-7.681431602672e-02 -7.737134666202e-02 -7.788436471594e-02 -7.835326396837e-02 +-7.877796179470e-02 -7.915839912568e-02 -7.949454039533e-02 -7.978637347687e-02 +-8.003390960693e-02 -8.023718329801e-02 -8.039625223919e-02 -8.051119718538e-02 +-8.058212183500e-02 -8.060915269633e-02 -8.059243894251e-02 -8.053215225545e-02 +-8.042848665856e-02 -8.028165833868e-02 -8.009190545703e-02 -7.985948794959e-02 +-7.958468731689e-02 -7.926780640330e-02 -7.890916916617e-02 -7.850912043475e-02 +-7.806802565919e-02 -7.758627064966e-02 -7.706426130588e-02 -7.650242333713e-02 +-7.590120197298e-02 -7.526106166478e-02 -7.458248577834e-02 -7.386597627771e-02 +-7.311205340040e-02 -7.232125532426e-02 -7.149413782610e-02 -7.063127393228e-02 +-6.973325356161e-02 -6.880068316052e-02 -6.783418533096e-02 -6.683439845105e-02 +-6.580197628881e-02 -6.473758760914e-02 -6.364191577426e-02 -6.251565833792e-02 +-6.135952663348e-02 -6.017424535615e-02 -5.896055213969e-02 -5.771919712767e-02 +-5.645094253960e-02 -5.515656223220e-02 -5.383684125599e-02 -5.249257540744e-02 +-5.112457077695e-02 -4.973364329296e-02 -4.832061826225e-02 -4.688632990695e-02 +-4.543162089824e-02 -4.395734188717e-02 -4.246435103276e-02 -4.095351352768e-02 +-3.942570112175e-02 -3.788179164343e-02 -3.632266851973e-02 -3.474922029462e-02 +-3.316234014624e-02 -3.156292540326e-02 -2.995187706046e-02 -2.833009929399e-02 +-2.669849897633e-02 -2.505798519148e-02 -2.340946875033e-02 -2.175386170669e-02 +-2.009207687410e-02 -1.842502734374e-02 -1.675362600365e-02 -1.507878505949e-02 +-1.340141555709e-02 -1.172242690711e-02 -1.004272641190e-02 -8.363218794972e-03 +-6.684805733115e-03 -5.008385391616e-03 -3.334851962633e-03 -1.665095207049e-03 +5.494061742638e-15 1.659554119718e-03 3.312693396035e-03 4.958550297758e-03 +6.596263956071e-03 + Type L N + 0 1 4 +0.000000000000e+00 9.566298184903e-03 1.912786846262e-02 2.867998570765e-02 +3.821793035619e-02 4.773699118245e-02 5.723246806976e-02 6.669967477440e-02 +7.613394168073e-02 8.553061854550e-02 9.488507722985e-02 1.041927144171e-01 +1.134489543148e-01 1.226492513388e-01 1.317890927784e-01 1.408640014402e-01 +1.498695382692e-01 1.588013049459e-01 1.676549464565e-01 1.764261536362e-01 +1.851106656831e-01 1.937042726403e-01 2.022028178469e-01 2.106022003537e-01 +2.188983773037e-01 2.270873662761e-01 2.351652475906e-01 2.431281665722e-01 +2.509723357752e-01 2.586940371625e-01 2.662896242426e-01 2.737555241599e-01 +2.810882397377e-01 2.882843514741e-01 2.953405194877e-01 3.022534854126e-01 +3.090200742414e-01 3.156371961159e-01 3.221018480627e-01 3.284111156742e-01 +3.345621747332e-01 3.405522927796e-01 3.463788306200e-01 3.520392437773e-01 +3.575310838804e-01 3.628519999927e-01 3.679997398800e-01 3.729721512143e-01 +3.777671827158e-01 3.823828852303e-01 3.868174127419e-01 3.910690233214e-01 +3.951360800081e-01 3.990170516260e-01 4.027105135334e-01 4.062151483048e-01 +4.095297463462e-01 4.126532064420e-01 4.155845362341e-01 4.183228526327e-01 +4.208673821585e-01 4.232174612166e-01 4.253725363010e-01 4.273321641310e-01 +4.290960117185e-01 4.306638563663e-01 4.320355855979e-01 4.332111970191e-01 +4.341907981105e-01 4.349746059520e-01 4.355629468798e-01 4.359562560755e-01 +4.361550770876e-01 4.361600612865e-01 4.359719672530e-01 4.355916601007e-01 +4.350201107332e-01 4.342583950360e-01 4.333076930044e-01 4.321692878079e-01 +4.308445647915e-01 4.293350104145e-01 4.276422111287e-01 4.257678521951e-01 +4.237137164414e-01 4.214816829602e-01 4.190737257501e-01 4.164919122987e-01 +4.137384021101e-01 4.108154451784e-01 4.077253804055e-01 4.044706339677e-01 +4.010537176303e-01 3.974772270111e-01 3.937438397957e-01 3.898563139041e-01 +3.858174856110e-01 3.816302676203e-01 3.772976470959e-01 3.728226836497e-01 +3.682085072877e-01 3.634583163171e-01 3.585753752142e-01 3.535630124553e-01 +3.484246183124e-01 3.431636426144e-01 3.377835924758e-01 3.322880299949e-01 +3.266805699217e-01 3.209648772982e-01 3.151446650732e-01 3.092236916908e-01 +3.032057586576e-01 2.970947080870e-01 2.908944202243e-01 2.846088109542e-01 +2.782418292907e-01 2.717974548527e-01 2.652796953271e-01 2.586925839194e-01 +2.520401767950e-01 2.453265505129e-01 2.385557994521e-01 2.317320332342e-01 +2.248593741423e-01 2.179419545395e-01 2.109839142871e-01 2.039893981648e-01 +1.969625532959e-01 1.899075265763e-01 1.828284621119e-01 1.757294986646e-01 +1.686147671085e-01 1.614883878982e-01 1.543544685513e-01 1.472171011461e-01 +1.400803598361e-01 1.329482983835e-01 1.258249477125e-01 1.187143134847e-01 +1.116203736975e-01 1.045470763076e-01 9.749833688091e-02 9.047803626969e-02 +8.349001831981e-02 7.653808760819e-02 6.962600721258e-02 6.275749651498e-02 +5.593622903979e-02 4.916583032846e-02 4.244987585155e-02 3.579188895980e-02 +2.919533887523e-02 2.266363872368e-02 1.620014360995e-02 9.808148736539e-03 +3.490887567426e-03 -2.748469962288e-03 -8.906819189644e-03 -1.498112241901e-02 +-2.096841056821e-02 -2.686578476455e-02 -3.267041788992e-02 -3.837955607400e-02 +-4.399052013474e-02 -4.950070696528e-02 -5.490759086660e-02 -6.020872482503e-02 +-6.540174173404e-02 -7.048435555960e-02 -7.545436244846e-02 -8.030964177882e-02 +-8.504815715278e-02 -8.966795733019e-02 -9.416717710327e-02 -9.854403811174e-02 +-1.027968495980e-01 -1.069240091019e-01 -1.109240030955e-01 -1.147954075558e-01 +-1.185368884781e-01 -1.221472023268e-01 -1.256251964254e-01 -1.289698092854e-01 +-1.321800708730e-01 -1.352551028153e-01 -1.381941185442e-01 -1.409964233795e-01 +-1.436614145509e-01 -1.461885811587e-01 -1.485775040737e-01 -1.508278557766e-01 +-1.529394001376e-01 -1.549119921350e-01 -1.567455775156e-01 -1.584401923947e-01 +-1.599959627980e-01 -1.614131041459e-01 -1.626919206784e-01 -1.638328048251e-01 +-1.648362365168e-01 -1.657027824425e-01 -1.664330952505e-01 -1.670279126954e-01 +-1.674880567315e-01 -1.678144325526e-01 -1.680080275809e-01 -1.680699104034e-01 +-1.680012296587e-01 -1.678032128742e-01 -1.674771652549e-01 -1.670244684244e-01 +-1.664465791196e-01 -1.657450278406e-01 -1.649214174546e-01 -1.639774217584e-01 +-1.629147839977e-01 -1.617353153453e-01 -1.604408933404e-01 -1.590334602880e-01 +-1.575150216224e-01 -1.558876442330e-01 -1.541534547566e-01 -1.523146378354e-01 +-1.503734343426e-01 -1.483321395777e-01 -1.461931014316e-01 -1.439587185236e-01 +-1.416314383123e-01 -1.392137551793e-01 -1.367082084909e-01 -1.341173806359e-01 +-1.314438950423e-01 -1.286904141746e-01 -1.258596375129e-01 -1.229542995144e-01 +-1.199771675604e-01 -1.169310398889e-01 -1.138187435147e-01 -1.106431321393e-01 +-1.074070840500e-01 -1.041135000127e-01 -1.007653011565e-01 -9.736542685513e-02 +-9.391683260303e-02 -9.042248789093e-02 -8.688537408014e-02 -8.330848227797e-02 +-7.969481121567e-02 -7.604736513015e-02 -7.236915165120e-02 -6.866317969545e-02 +-6.493245736860e-02 -6.117998987743e-02 -5.740877745286e-02 -5.362181328560e-02 +-4.982208147572e-02 -4.601255499754e-02 -4.219619368123e-02 -3.837594221246e-02 +-3.455472815141e-02 -3.073545997251e-02 -2.692102512614e-02 -2.311428812369e-02 +-1.931808864708e-02 -1.553523968410e-02 -1.176852569077e-02 -8.020700781853e-03 +-4.294486950730e-03 -5.925723198338e-04 3.082390577347e-03 6.727786481505e-03 +1.034103905898e-02 1.391961251838e-02 1.746101319137e-02 2.096279107660e-02 +2.442254134593e-02 2.783790581184e-02 3.120657435532e-02 3.452628631329e-02 +3.779483182466e-02 4.101005313436e-02 4.416984585451e-02 4.727216018190e-02 +5.031500207134e-02 5.329643436387e-02 5.621457786948e-02 5.906761240362e-02 +6.185377777692e-02 6.457137473767e-02 6.721876586647e-02 6.979437642272e-02 +7.229669514237e-02 7.472427498670e-02 7.707573384170e-02 7.934975516771e-02 +8.154508859916e-02 8.366055049403e-02 8.569502443295e-02 8.764746166772e-02 +8.951688151909e-02 9.130237172376e-02 9.300308873062e-02 9.461825794594e-02 +9.614717392794e-02 9.758920053040e-02 9.894377099563e-02 1.002103879969e-01 +1.013886236305e-01 1.024781193575e-01 1.034785858955e-01 1.043898030609e-01 +1.052116195617e-01 1.059439527411e-01 1.065867882727e-01 1.071401798072e-01 +1.076042485711e-01 1.079791829190e-01 1.082652378377e-01 1.084627344050e-01 +1.085720592028e-01 1.085936636840e-01 1.085280634965e-01 1.083758377621e-01 +1.081376283127e-01 1.078141388845e-01 1.074061342699e-01 1.069144394291e-01 +1.063399385610e-01 1.056835741356e-01 1.049463458876e-01 1.041293097723e-01 +1.032335768856e-01 1.022603123479e-01 1.012107341531e-01 1.000861119842e-01 +9.888776599662e-02 9.761706556868e-02 9.627542802251e-02 9.486431731473e-02 +9.338524269884e-02 9.183975736014e-02 9.022945702425e-02 8.855597854051e-02 +8.682099844128e-02 8.502623147829e-02 8.317342913729e-02 8.126437813212e-02 +7.930089887935e-02 7.728484395482e-02 7.521809653307e-02 7.310256881118e-02 +7.094020041790e-02 6.873295680958e-02 6.648282765399e-02 6.419182520331e-02 +6.186198265754e-02 5.949535251952e-02 5.709400494294e-02 5.466002607442e-02 +5.219551639106e-02 4.970258903460e-02 4.718336814347e-02 4.463998718407e-02 +4.207458728231e-02 3.948931555689e-02 3.688632345530e-02 3.426776509407e-02 +3.163579560413e-02 2.899256948279e-02 2.634023895338e-02 2.368095233377e-02 +2.101685241502e-02 1.835007485117e-02 1.568274656153e-02 1.301698414641e-02 +1.035489231759e-02 7.698562344555e-03 5.050070517548e-03 2.411476628665e-03 +-2.151775280819e-04 -2.827869636607e-03 -5.424598317503e-03 -8.003384564679e-03 +-1.056227315890e-02 -1.309933405728e-02 -1.561266375770e-02 -1.810038663739e-02 +-2.056065626453e-02 -2.299165668228e-02 -2.539160366410e-02 -2.775874593974e-02 +-3.009136639095e-02 -3.238778321625e-02 -3.464635106392e-02 -3.686546213246e-02 +-3.904354723792e-02 -4.117907684734e-02 -4.327056207765e-02 -4.531655565950e-02 +-4.731565286529e-02 -4.926649240097e-02 -5.116775726097e-02 -5.301817554583e-02 +-5.481652124205e-02 -5.656161496362e-02 -5.825232465496e-02 -5.988756625480e-02 +-6.146630432063e-02 -6.298755261344e-02 -6.445037464250e-02 -6.585388416976e-02 +-6.719724567388e-02 -6.847967477340e-02 -6.970043860922e-02 -7.085885618590e-02 +-7.195429867199e-02 -7.298618965913e-02 -7.395400537984e-02 -7.485727488428e-02 +-7.569558017556e-02 -7.646855630406e-02 -7.717589142062e-02 -7.781732678871e-02 +-7.839265675589e-02 -7.890172868448e-02 -7.934444284195e-02 -7.972075225095e-02 +-8.003066249945e-02 -8.027423151132e-02 -8.045156927739e-02 -8.056283754771e-02 +-8.060824948509e-02 -8.058806928051e-02 -8.050261173076e-02 -8.035224177872e-02 +-8.013737401696e-02 -7.985847215488e-02 -7.951604845026e-02 -7.911066310550e-02 +-7.864292362930e-02 -7.811348416438e-02 -7.752304478185e-02 -7.687235074284e-02 +-7.616219172820e-02 -7.539340103691e-02 -7.456685475382e-02 -7.368347088773e-02 +-7.274420848031e-02 -7.175006668678e-02 -7.070208382918e-02 -6.960133642298e-02 +-6.844893817790e-02 -6.724603897383e-02 -6.599382381271e-02 -6.469351174720e-02 +-6.334635478716e-02 -6.195363678477e-02 -6.051667229927e-02 -5.903680544223e-02 +-5.751540870432e-02 -5.595388176459e-02 -5.435365028318e-02 -5.271616467847e-02 +-5.104289888967e-02 -4.933534912586e-02 -4.759503260246e-02 -4.582348626622e-02 +-4.402226550965e-02 -4.219294287602e-02 -4.033710675585e-02 -3.845636007610e-02 +-3.655231898285e-02 -3.462661151875e-02 -3.268087629616e-02 -3.071676116695e-02 +-2.873592189021e-02 -2.674002079869e-02 -2.473072546512e-02 -2.270970736940e-02 +-2.067864056774e-02 -1.863920036469e-02 -1.659306198916e-02 -1.454189927534e-02 +-1.248738334968e-02 -1.043118132471e-02 -8.374955000901e-03 -6.320359577409e-03 +-4.269042372712e-03 -2.222641556095e-03 -1.827848909305e-04 1.848911509319e-03 +3.870844411453e-03 5.881424678326e-03 7.879078469210e-03 9.862248423814e-03 +1.182939482914e-02 1.377899676827e-02 1.570955325036e-02 1.761958432087e-02 +1.950763215140e-02 2.137226210821e-02 2.321206379883e-02 2.502565209581e-02 +2.681166813713e-02 2.856878030232e-02 3.029568516389e-02 3.199110841311e-02 +3.365380575983e-02 3.528256380540e-02 3.687620088838e-02 3.843356790231e-02 +3.995354908502e-02 4.143506277906e-02 4.287706216257e-02 4.427853595036e-02 +4.563850906446e-02 4.695604327404e-02 4.823023780406e-02 4.946022991235e-02 +5.064519543483e-02 5.178434929852e-02 5.287694600197e-02 5.392228006297e-02 +5.491968643324e-02 5.586854087979e-02 5.676826033303e-02 5.761830320108e-02 +5.841816965056e-02 5.916740185339e-02 5.986558419979e-02 6.051234347725e-02 +6.110734901553e-02 6.165031279764e-02 6.214098953688e-02 6.257917671994e-02 +6.296471461614e-02 6.329748625293e-02 6.357741735781e-02 6.380447626677e-02 +6.397867379938e-02 6.410006310095e-02 6.416873945173e-02 6.418484004354e-02 +6.414854372412e-02 6.406007070949e-02 6.391968226458e-02 6.372768035254e-02 +6.348440725319e-02 6.319024515079e-02 6.284561569178e-02 6.245097951280e-02 +6.200683573945e-02 6.151372145639e-02 6.097221114917e-02 6.038291611833e-02 +5.974648386642e-02 5.906359745837e-02 5.833497485590e-02 5.756136822652e-02 +5.674356322773e-02 5.588237826720e-02 5.497866373929e-02 5.403330123899e-02 +5.304720275355e-02 5.202130983283e-02 5.095659273893e-02 4.985404957584e-02 +4.871470539995e-02 4.753961131201e-02 4.632984353155e-02 4.508650245428e-02 +4.381071169345e-02 4.250361710595e-02 4.116638580389e-02 3.980020515251e-02 +3.840628175531e-02 3.698584042714e-02 3.554012315624e-02 3.407038805589e-02 +3.257790830667e-02 3.106397109021e-02 2.952987651514e-02 2.797693653625e-02 +2.640647386774e-02 2.481982089132e-02 2.321831856014e-02 2.160331529936e-02 +1.997616590430e-02 1.833823043703e-02 1.669087312218e-02 1.503546124304e-02 +1.337336403858e-02 1.170595160250e-02 1.003459378496e-02 8.360659098012e-03 +6.685513625474e-03 5.010519938161e-03 3.337036015286e-03 1.666414172876e-03 +1.228805779297e-14 -1.660868696267e-03 -3.314862936615e-03 -4.960663604753e-03 +-6.596962471817e-03 + Type L N + 0 1 5 +0.000000000000e+00 1.131608597450e-02 2.262434588731e-02 3.391696012005e-02 +4.518612193521e-02 5.642404390216e-02 6.762296430584e-02 7.877515353239e-02 +8.987292042600e-02 1.009086186114e-01 1.118746527759e-01 1.227634849063e-01 +1.335676404736e-01 1.442797145617e-01 1.548923779332e-01 1.653983830274e-01 +1.757905698857e-01 1.860618719981e-01 1.962053220662e-01 2.062140576774e-01 +2.160813268855e-01 2.258004936922e-01 2.353650434252e-01 2.447685880078e-01 +2.540048711153e-01 2.630677732140e-01 2.719513164776e-01 2.806496695782e-01 +2.891571523448e-01 2.974682402893e-01 3.055775689917e-01 3.134799383442e-01 +3.211703166482e-01 3.286438445616e-01 3.358958388932e-01 3.429217962401e-01 +3.497173964652e-01 3.562785060130e-01 3.626011810586e-01 3.686816704895e-01 +3.745164187161e-01 3.801020683092e-01 3.854354624625e-01 3.905136472772e-01 +3.953338738681e-01 3.998936002880e-01 4.041904932705e-01 4.082224297880e-01 +4.119874984258e-01 4.154840005689e-01 4.187104514033e-01 4.216655807285e-01 +4.243483335826e-01 4.267578706790e-01 4.288935686542e-01 4.307550201275e-01 +4.323420335719e-01 4.336546329976e-01 4.346930574476e-01 4.354577603067e-01 +4.359494084250e-01 4.361688810566e-01 4.361172686140e-01 4.357958712415e-01 +4.352061972076e-01 4.343499611183e-01 4.332290819538e-01 4.318456809303e-01 +4.302020791890e-01 4.283007953151e-01 4.261445426886e-01 4.237362266710e-01 +4.210789416280e-01 4.181759677951e-01 4.150307679855e-01 4.116469841455e-01 +4.080284337610e-01 4.041791061172e-01 4.001031584169e-01 3.958049117592e-01 +3.912888469852e-01 3.865596003913e-01 3.816219593178e-01 3.764808576141e-01 +3.711413709872e-01 3.656087122358e-01 3.598882263766e-01 3.539853856660e-01 +3.479057845226e-01 3.416551343555e-01 3.352392583024e-01 3.286640858835e-01 +3.219356475761e-01 3.150600693145e-01 3.080435669202e-01 3.008924404692e-01 +2.936130685997e-01 2.862119027669e-01 2.786954614494e-01 2.710703243135e-01 +2.633431263400e-01 2.555205519196e-01 2.476093289215e-01 2.396162227424e-01 +2.315480303388e-01 2.234115742511e-01 2.152136966224e-01 2.069612532192e-01 +1.986611074585e-01 1.903201244474e-01 1.819451650406e-01 1.735430799202e-01 +1.651207037049e-01 1.566848490926e-01 1.482423010418e-01 1.397998109982e-01 +1.313640911704e-01 1.229418088597e-01 1.145395808512e-01 1.061639678681e-01 +9.782146909677e-02 8.951851678618e-02 8.126147092635e-02 7.305661401127e-02 +6.491014589029e-02 5.682817871276e-02 4.881673197012e-02 4.088172764003e-02 +3.302898543646e-02 2.526421816997e-02 1.759302722215e-02 1.002089813804e-02 +2.553196340239e-03 -4.804837031551e-03 -1.204808915229e-02 -1.917157941109e-02 +-2.617046317543e-02 -3.304003541677e-02 -3.977573419486e-02 -4.637314399786e-02 +-5.282799893548e-02 -5.913618578289e-02 -6.529374687281e-02 -7.129688283372e-02 +-7.714195517203e-02 -8.282548869637e-02 -8.834417378226e-02 -9.369486847552e-02 +-9.887460043301e-02 -1.038805686994e-01 -1.087101453191e-01 -1.133608767817e-01 +-1.178304853011e-01 -1.221168699272e-01 -1.262181074889e-01 -1.301324533702e-01 +-1.338583421169e-01 -1.373943878753e-01 -1.407393846628e-01 -1.438923064706e-01 +-1.468523071991e-01 -1.496187204267e-01 -1.521910590124e-01 -1.545690145341e-01 +-1.567524565627e-01 -1.587414317735e-01 -1.605361628975e-01 -1.621370475121e-01 +-1.635446566748e-01 -1.647597334006e-01 -1.657831909859e-01 -1.666161111807e-01 +-1.672597422110e-01 -1.677154966549e-01 -1.679849491738e-01 -1.680698341019e-01 +-1.679720428978e-01 -1.676936214587e-01 -1.672367673035e-01 -1.666038266246e-01 +-1.657972912149e-01 -1.648197952712e-01 -1.636741120781e-01 -1.623631505767e-01 +-1.608899518213e-01 -1.592576853276e-01 -1.574696453170e-01 -1.555292468607e-01 +-1.534400219275e-01 -1.512056153403e-01 -1.488297806440e-01 -1.463163758909e-01 +-1.436693593467e-01 -1.408927851222e-01 -1.379907987350e-01 -1.349676326058e-01 +-1.318276014938e-01 -1.285750978758e-01 -1.252145872745e-01 -1.217506035393e-01 +-1.181877440854e-01 -1.145306650961e-01 -1.107840766920e-01 -1.069527380732e-01 +-1.030414526384e-01 -9.905506308635e-02 -9.499844650423e-02 -9.087650944734e-02 +-8.669418301591e-02 -8.245641793294e-02 -7.816817962834e-02 -7.383444333396e-02 +-6.946018919425e-02 -6.505039739737e-02 -6.061004333125e-02 -5.614409276937e-02 +-5.165749709074e-02 -4.715518853873e-02 -4.264207552300e-02 -3.812303796931e-02 +-3.360292272113e-02 -2.908653899773e-02 -2.457865391267e-02 -2.008398805706e-02 +-1.560721115144e-02 -1.115293777044e-02 -6.725723143991e-03 -2.330059038968e-03 +2.029630275113e-03 6.348991972642e-03 1.062374852726e-02 1.484970147256e-02 +1.902273506488e-02 2.313881984495e-02 2.719401609537e-02 3.118447719087e-02 +3.510645283865e-02 3.895629220596e-02 4.273044693225e-02 4.642547402371e-02 +5.003803862743e-02 5.356491668336e-02 5.700299745172e-02 6.034928591393e-02 +6.360090504540e-02 6.675509795830e-02 6.980922991283e-02 7.276079019564e-02 +7.560739386397e-02 7.834678335454e-02 8.097682995608e-02 8.349553514470e-02 +8.590103178130e-02 8.819158517063e-02 9.036559398130e-02 9.242159102671e-02 +9.435824390655e-02 9.617435550900e-02 9.786886437367e-02 9.944084491560e-02 +1.008895075107e-01 1.022141984430e-01 1.034143997153e-01 1.044897287222e-01 +1.054399377883e-01 1.062649135721e-01 1.069646763363e-01 1.075393790860e-01 +1.079893065771e-01 1.083148741956e-01 1.085166267094e-01 1.085952368958e-01 +1.085515040450e-01 1.083863523425e-01 1.081008291330e-01 1.076961030668e-01 +1.071734621332e-01 1.065343115810e-01 1.057801717303e-01 1.049126756787e-01 +1.039335669027e-01 1.028446967595e-01 1.016480218911e-01 1.003456015333e-01 +9.893959473422e-02 9.743225748455e-02 9.582593976280e-02 9.412308249972e-02 +9.232621446479e-02 9.043794907856e-02 8.846098115432e-02 8.639808357289e-02 +8.425210389427e-02 8.202596090977e-02 7.972264113862e-02 7.734519527280e-02 +7.489673457404e-02 7.238042722697e-02 6.979949465221e-02 6.715720778367e-02 +6.445688331376e-02 6.170187991076e-02 5.889559441230e-02 5.604145799901e-02 +5.314293235233e-02 5.020350580069e-02 4.722668945790e-02 4.421601335796e-02 +4.117502259017e-02 3.810727343873e-02 3.501632953060e-02 3.190575799576e-02 +2.877912564368e-02 2.563999516003e-02 2.249192132735e-02 1.933844727360e-02 +1.618310075232e-02 1.302939045825e-02 9.880802381798e-03 6.740796206401e-03 +3.612801751939e-03 5.002154679701e-04 -2.593603019889e-03 -5.665334307046e-03 +-8.711702547183e-03 -1.172947872647e-02 -1.471548387155e-02 -1.766659218835e-02 +-2.057973412858e-02 -2.345189938120e-02 -2.628013978594e-02 -2.906157216621e-02 +-3.179338107882e-02 -3.447282147796e-02 -3.709722129101e-02 -3.966398390395e-02 +-4.217059055408e-02 -4.461460262801e-02 -4.699366386284e-02 -4.930550244881e-02 +-5.154793303149e-02 -5.371885861187e-02 -5.581627234292e-02 -5.783825922111e-02 +-5.978299767146e-02 -6.164876102525e-02 -6.343391888884e-02 -6.513693840318e-02 +-6.675638539263e-02 -6.829092540280e-02 -6.973932462656e-02 -7.110045071781e-02 +-7.237327349267e-02 -7.355686551778e-02 -7.465040258570e-02 -7.565316407726e-02 +-7.656453321111e-02 -7.738399718063e-02 -7.811114717855e-02 -7.874567830983e-02 +-7.928738939323e-02 -7.973618265249e-02 -8.009206329770e-02 -8.035513899797e-02 +-8.052561924636e-02 -8.060381461822e-02 -8.059013592418e-02 -8.048509325925e-02 +-8.028929494936e-02 -8.000344639707e-02 -7.962834882789e-02 -7.916489793929e-02 +-7.861408245400e-02 -7.797698257970e-02 -7.725476837709e-02 -7.644869803855e-02 +-7.556011607957e-02 -7.459045144523e-02 -7.354121553423e-02 -7.241400014284e-02 +-7.121047533135e-02 -6.993238721568e-02 -6.858155568678e-02 -6.715987206059e-02 +-6.566929666148e-02 -6.411185634180e-02 -6.248964194082e-02 -6.080480568572e-02 +-5.905955853789e-02 -5.725616748755e-02 -5.539695279976e-02 -5.348428521517e-02 +-5.152058310843e-02 -4.950830960781e-02 -4.744996967904e-02 -4.534810717687e-02 +-4.320530186742e-02 -4.102416642497e-02 -3.880734340620e-02 -3.655750220549e-02 +-3.427733599455e-02 -3.196955864970e-02 -2.963690167025e-02 -2.728211109136e-02 +-2.490794439461e-02 -2.251716741974e-02 -2.011255128093e-02 -1.769686929077e-02 +-1.527289389540e-02 -1.284339362394e-02 -1.041113005559e-02 -7.978854807452e-03 +-5.549306546438e-03 -3.125208028220e-03 -7.092631664470e-04 1.695845864775e-03 +4.087461492122e-03 6.462953565054e-03 8.819722135684e-03 1.115520019365e-02 +1.346685635326e-02 1.575219749006e-02 1.800877132436e-02 2.023416894894e-02 +2.242602729853e-02 2.458203155853e-02 2.669991751071e-02 2.877747381347e-02 +3.081254421454e-02 3.280302969388e-02 3.474689053486e-02 3.664214832161e-02 +3.848688786081e-02 4.027925902594e-02 4.201747852249e-02 4.369983157235e-02 +4.532467351604e-02 4.689043133112e-02 4.839560506571e-02 4.983876918571e-02 +5.121857383468e-02 5.253374600533e-02 5.378309062162e-02 5.496549153077e-02 +5.607991240437e-02 5.712539754790e-02 5.810107261830e-02 5.900614524896e-02 +5.983990558203e-02 6.060172670756e-02 6.129106500969e-02 6.190746041949e-02 +6.245053657483e-02 6.292000088737e-02 6.331564451689e-02 6.363734225340e-02 +6.388505230756e-02 6.405881600989e-02 6.415875741952e-02 6.418508284324e-02 +6.413808026568e-02 6.401811869168e-02 6.382564740175e-02 6.356119512194e-02 +6.322536910921e-02 6.281885415376e-02 6.234241149954e-02 6.179687768463e-02 +6.118316330299e-02 6.050225168916e-02 5.975519752777e-02 5.894312538955e-02 +5.806722819583e-02 5.712876561344e-02 5.612906238197e-02 5.506950657560e-02 +5.395154780156e-02 5.277669533750e-02 5.154651620996e-02 5.026263321638e-02 +4.892672289299e-02 4.754051343091e-02 4.610578254317e-02 4.462435528498e-02 +4.309810182984e-02 4.152893520430e-02 3.991880898370e-02 3.826971495185e-02 +3.658368072722e-02 3.486276735836e-02 3.310906689145e-02 3.132469991255e-02 +2.951181306762e-02 2.767257656281e-02 2.580918164815e-02 2.392383808727e-02 +2.201877161610e-02 2.009622139330e-02 1.815843744539e-02 1.620767810928e-02 +1.424620747515e-02 1.227629283244e-02 1.030020212175e-02 8.320201395472e-03 +6.338552289945e-03 4.357509511830e-03 2.379318341479e-03 4.062121559663e-04 +-1.559590025523e-03 -3.515885971338e-03 -5.460492639420e-03 -7.391248549237e-03 +-9.306016121056e-03 -1.120268398010e-02 -1.307916922313e-02 -1.493341964515e-02 +-1.676341592381e-02 -1.856717375928e-02 -2.034274596747e-02 -2.208822452426e-02 +-2.380174255882e-02 -2.548147629387e-02 -2.712564693097e-02 -2.873252247900e-02 +-3.030041952378e-02 -3.182770493742e-02 -3.331279752537e-02 -3.475416960976e-02 +-3.615034854749e-02 -3.749991818145e-02 -3.880152022372e-02 -4.005385556928e-02 +-4.125568553904e-02 -4.240583305113e-02 -4.350318371930e-02 -4.454668687749e-02 +-4.553535652978e-02 -4.646827222467e-02 -4.734457985331e-02 -4.816349237079e-02 +-4.892429044002e-02 -4.962632299781e-02 -5.026900774276e-02 -5.085183154457e-02 +-5.137435077474e-02 -5.183619155846e-02 -5.223704994773e-02 -5.257669201567e-02 +-5.285495387236e-02 -5.307174160227e-02 -5.322703112373e-02 -5.332086797082e-02 +-5.335336699815e-02 -5.332471200918e-02 -5.323515530871e-02 -5.308501718019e-02 +-5.287468528896e-02 -5.260461401196e-02 -5.227532369517e-02 -5.188739983982e-02 +-5.144149221829e-02 -5.093831392121e-02 -5.037864033685e-02 -4.976330806421e-02 +-4.909321376127e-02 -4.836931292985e-02 -4.759261863866e-02 -4.676420018617e-02 +-4.588518170495e-02 -4.495674070927e-02 -4.398010658775e-02 -4.295655904291e-02 +-4.188742647948e-02 -4.077408434358e-02 -3.961795341459e-02 -3.842049805192e-02 +-3.718322439869e-02 -3.590767854449e-02 -3.459544464945e-02 -3.324814303171e-02 +-3.186742822067e-02 -3.045498697827e-02 -2.901253629051e-02 -2.754182133175e-02 +-2.604461340386e-02 -2.452270785294e-02 -2.297792196573e-02 -2.141209284821e-02 +-1.982707528892e-02 -1.822473960925e-02 -1.660696950330e-02 -1.497565986970e-02 +-1.333271463772e-02 -1.168004459040e-02 -1.001956518685e-02 -8.353194386261e-03 +-6.682850476172e-03 -5.010449907207e-03 -3.337905136822e-03 -1.667122484388e-03 +4.806801137936e-15 1.661574650702e-03 3.315726283262e-03 4.960594270583e-03 +6.594334596110e-03 + Type L N + 0 1 6 +0.000000000000e+00 1.306435487339e-02 2.611666663548e-02 3.914490539118e-02 +5.213706766219e-02 6.508118955583e-02 7.796535988669e-02 9.077773323521e-02 +1.035065429278e-01 1.161401139228e-01 1.286668755872e-01 1.410753743480e-01 +1.533542862052e-01 1.654924290884e-01 1.774787750453e-01 1.893024622457e-01 +2.009528067876e-01 2.124193142911e-01 2.236916912658e-01 2.347598562401e-01 +2.456139506364e-01 2.562443493818e-01 2.666416712409e-01 2.767967888577e-01 +2.867008384964e-01 2.963452294685e-01 3.057216532352e-01 3.148220921754e-01 +3.236388280080e-01 3.321644498590e-01 3.403918619651e-01 3.483142910027e-01 +3.559252930366e-01 3.632187600783e-01 3.701889262472e-01 3.768303735283e-01 +3.831380371192e-01 3.891072103604e-01 3.947335492439e-01 4.000130764958e-01 +4.049421852264e-01 4.095176421468e-01 4.137365903460e-01 4.175965516284e-01 +4.210954284066e-01 4.242315051508e-01 4.270034493913e-01 4.294103122749e-01 +4.314515286748e-01 4.331269168547e-01 4.344366776877e-01 4.353813934324e-01 +4.359620260680e-01 4.361799151907e-01 4.360367754759e-01 4.355346937086e-01 +4.346761253872e-01 4.334638909055e-01 4.319011713177e-01 4.299915036930e-01 +4.277387760660e-01 4.251472219890e-01 4.222214146949e-01 4.189662608771e-01 +4.153869940960e-01 4.114891678200e-01 4.072786481099e-01 4.027616059573e-01 +3.979445092866e-01 3.928341146300e-01 3.874374584882e-01 3.817618483862e-01 +3.758148536366e-01 3.696042958225e-01 3.631382390110e-01 3.564249797115e-01 +3.494730365898e-01 3.422911399527e-01 3.348882210151e-01 3.272734009641e-01 +3.194559798333e-01 3.114454252015e-01 3.032513607307e-01 2.948835545560e-01 +2.863519075439e-01 2.776664414321e-01 2.688372868672e-01 2.598746713530e-01 +2.507889071261e-01 2.415903789735e-01 2.322895320066e-01 2.228968594066e-01 +2.134228901575e-01 2.038781767810e-01 1.942732830871e-01 1.846187719580e-01 +1.749251931779e-01 1.652030713240e-01 1.554628937345e-01 1.457150985660e-01 +1.359700629568e-01 1.262380913092e-01 1.165294037047e-01 1.068541244662e-01 +9.722227088119e-02 8.764374209841e-02 7.812830821191e-02 6.868559954470e-02 +5.932509614494e-02 5.005611750674e-02 4.088781252752e-02 3.182914971350e-02 +2.288890764466e-02 1.407566570989e-02 5.397795123031e-03 -3.136549770186e-03 +-1.151943988454e-02 -1.974317947772e-02 -2.780031391377e-02 -3.568363709926e-02 +-4.338619858388e-02 -5.090131031818e-02 -5.822255306105e-02 -6.534378243043e-02 +-7.225913459098e-02 -7.896303157307e-02 -8.545018621773e-02 -9.171560674295e-02 +-9.775460092705e-02 -1.035627799053e-01 -1.091360615764e-01 -1.144706736171e-01 +-1.195631561007e-01 -1.244103637196e-01 -1.290094676103e-01 -1.333579567794e-01 +-1.374536391308e-01 -1.412946420949e-01 -1.448794128598e-01 -1.482067182070e-01 +-1.512756439514e-01 -1.540855939907e-01 -1.566362889646e-01 -1.589277645282e-01 +-1.609603692434e-01 -1.627347620927e-01 -1.642519096191e-01 -1.655130826990e-01 +-1.665198529519e-01 -1.672740887948e-01 -1.677779511462e-01 -1.680338887880e-01 +-1.680446333916e-01 -1.678131942169e-01 -1.673428524918e-01 -1.666371554806e-01 +-1.656999102510e-01 -1.645351771481e-01 -1.631472629858e-01 -1.615407139648e-01 +-1.597203083281e-01 -1.576910487641e-01 -1.554581545684e-01 -1.530270535758e-01 +-1.504033738726e-01 -1.475929353025e-01 -1.446017407767e-01 -1.414359674007e-01 +-1.381019574301e-01 -1.346062090676e-01 -1.309553671141e-01 -1.271562134863e-01 +-1.232156576135e-01 -1.191407267273e-01 -1.149385560561e-01 -1.106163789389e-01 +-1.061815168697e-01 -1.016413694882e-01 -9.700340452687e-02 -9.227514773097e-02 +-8.746417276188e-02 -8.257809109863e-02 -7.762454195008e-02 -7.261118219088e-02 +-6.754567633421e-02 -6.243568655420e-02 -5.728886277065e-02 -5.211283280875e-02 +-4.691519264627e-02 -4.170349676043e-02 -3.648524858659e-02 -3.126789110070e-02 +-2.605879753717e-02 -2.086526225366e-02 -1.569449175394e-02 -1.055359587991e-02 +-5.449579183397e-03 -3.893324881042e-04 4.620375347998e-03 9.572905460209e-03 +1.446175678497e-02 1.928057363890e-02 2.402315306027e-02 2.868345190432e-02 +3.325559368438e-02 3.773387515110e-02 4.211277260239e-02 4.638694791703e-02 +5.055125430561e-02 5.460074177240e-02 5.853066228250e-02 6.233647462903e-02 +6.601384899525e-02 6.955867120733e-02 7.296704667358e-02 7.623530400663e-02 +7.935999832536e-02 8.233791423370e-02 8.516606847438e-02 8.784171225530e-02 +9.036233324761e-02 9.272565725416e-02 9.492964954811e-02 9.697251588137e-02 +9.885270316357e-02 1.005688998121e-01 1.021200357744e-01 1.035052822252e-01 +1.047240509388e-01 1.057759933412e-01 1.066609992436e-01 1.073791952611e-01 +1.079309429206e-01 1.083168364614e-01 1.085377003347e-01 1.085945864040e-01 +1.084887708560e-01 1.082217508230e-01 1.077952407272e-01 1.072111683502e-01 +1.064716706363e-01 1.055790892357e-01 1.045359657956e-01 1.033450370074e-01 +1.020092294159e-01 1.005316540022e-01 9.891560054563e-02 9.716453177567e-02 +9.528207732202e-02 9.327202747256e-02 9.113832674840e-02 8.888506730612e-02 +8.651648217692e-02 8.403693835288e-02 8.145092973060e-02 7.876306992271e-02 +7.597808494766e-02 7.310080580865e-02 7.013616097242e-02 6.708916875864e-02 +6.396492965110e-02 6.076861854143e-02 5.750547691656e-02 5.418080500093e-02 +5.079995386454e-02 4.736831750786e-02 4.389132493471e-02 4.037443222410e-02 +3.682311461199e-02 3.324285859387e-02 2.963915405900e-02 2.601748646701e-02 +2.238332907745e-02 1.874213524294e-02 1.509933077596e-02 1.146030639992e-02 +7.830410294093e-03 4.214940742671e-03 6.191388973499e-04 -2.951818336941e-03 +-6.492825283966e-03 -9.998854336717e-03 -1.346496264776e-02 -1.688629866088e-02 +-2.025810847566e-02 -2.357574203711e-02 -2.683465914250e-02 -3.003043525802e-02 +-3.315876713809e-02 -3.621547824051e-02 -3.919652393092e-02 -4.209799647040e-02 +-4.491612978031e-02 -4.764730397885e-02 -5.028804968423e-02 -5.283505207952e-02 +-5.528515473476e-02 -5.763536318224e-02 -5.988284824107e-02 -6.202494908794e-02 +-6.405917607067e-02 -6.598321326225e-02 -6.779492075297e-02 -6.949233667869e-02 +-7.107367898390e-02 -7.253734691836e-02 -7.388192226651e-02 -7.510617030942e-02 +-7.620904051922e-02 -7.718966698639e-02 -7.804736858064e-02 -7.878164884658e-02 +-7.939219563573e-02 -7.987888047645e-02 -8.024175768446e-02 -8.048106321611e-02 +-8.059721326755e-02 -8.059080262311e-02 -8.046260275631e-02 -8.021355968764e-02 +-7.984479160329e-02 -7.935758623941e-02 -7.875339803686e-02 -7.803384507161e-02 +-7.720070576629e-02 -7.625591538864e-02 -7.520156234308e-02 -7.403988426140e-02 +-7.277326389956e-02 -7.140422484702e-02 -6.993542705594e-02 -6.836966219748e-02 +-6.670984885249e-02 -6.495902754461e-02 -6.312035562343e-02 -6.119710200580e-02 +-5.919264178361e-02 -5.711045070636e-02 -5.495409954702e-02 -5.272724835986e-02 +-5.043364063898e-02 -4.807709738652e-02 -4.566151109925e-02 -4.319083968290e-02 +-4.066910030299e-02 -3.810036318162e-02 -3.548874534910e-02 -3.283840435983e-02 +-3.015353198161e-02 -2.743834786743e-02 -2.469709321918e-02 -2.193402445223e-02 +-1.915340687012e-02 -1.635950835841e-02 -1.355659310658e-02 -1.074891536714e-02 +-7.940713260454e-03 -5.136202634309e-03 -2.339570986595e-03 4.450285402837e-04 +3.213483084986e-03 5.961725904616e-03 8.685742115878e-03 1.138157433216e-02 +1.404532818887e-02 1.667317774958e-02 1.926137078571e-02 2.180623392263e-02 +2.430417764549e-02 2.675170115799e-02 2.914539708798e-02 3.148195603348e-02 +3.375817094353e-02 3.597094132816e-02 3.811727729214e-02 4.019430338751e-02 +4.219926228014e-02 4.412951822582e-02 4.598256035168e-02 4.775600573917e-02 +4.944760230483e-02 5.105523147584e-02 5.257691065711e-02 5.401079548751e-02 +5.535518188276e-02 5.660850786304e-02 5.776935516357e-02 5.883645062692e-02 +5.980866737579e-02 6.068502576575e-02 6.146469411743e-02 6.214698922805e-02 +6.273137666260e-02 6.321747082525e-02 6.360503481166e-02 6.389398004370e-02 +6.408436568777e-02 6.417639785874e-02 6.417042861146e-02 6.406695472236e-02 +6.386661626384e-02 6.357019497431e-02 6.317861242733e-02 6.269292800329e-02 +6.211433666749e-02 6.144416655872e-02 6.068387639269e-02 5.983505268488e-02 +5.889940679768e-02 5.787877181697e-02 5.677509926326e-02 5.559045564315e-02 +5.432701884668e-02 5.298707439657e-02 5.157301155549e-02 5.008731929761e-02 +4.853258215106e-02 4.691147591774e-02 4.522676327743e-02 4.348128928314e-02 +4.167797675461e-02 3.981982157740e-02 3.790988791463e-02 3.595130333891e-02 +3.394725389190e-02 3.190097907909e-02 2.981576680733e-02 2.769494827291e-02 +2.554189280784e-02 2.336000269210e-02 2.115270793956e-02 1.892346106549e-02 +1.667573184329e-02 1.441300205826e-02 1.213876026616e-02 9.856496564166e-03 +7.569697382000e-03 5.281840300680e-03 2.996388906500e-03 7.167876876316e-04 +-1.553543019300e-03 -3.811212025433e-03 -6.052862221539e-03 -8.275175438559e-03 +-1.047487722991e-02 -1.264874156886e-02 -1.479359545432e-02 -1.690632341879e-02 +-1.898387193196e-02 -2.102325369414e-02 -2.302155181347e-02 -2.497592386127e-02 +-2.688360580001e-02 -2.874191577864e-02 -3.054825779020e-02 -3.230012518684e-02 +-3.399510404762e-02 -3.563087639474e-02 -3.720522325405e-02 -3.871602755584e-02 +-4.016127687243e-02 -4.153906598894e-02 -4.284759930434e-02 -4.408519305964e-02 +-4.525027739085e-02 -4.634139820416e-02 -4.735721887142e-02 -4.829652174398e-02 +-4.915820948344e-02 -4.994130620809e-02 -5.064495845388e-02 -5.126843594949e-02 +-5.181113220482e-02 -5.227256491288e-02 -5.265237616522e-02 -5.295033248118e-02 +-5.316632465183e-02 -5.330036739927e-02 -5.335259885286e-02 -5.332327984343e-02 +-5.321279301767e-02 -5.302164177426e-02 -5.275044902438e-02 -5.239995577879e-02 +-5.197101956449e-02 -5.146461267378e-02 -5.088182024900e-02 -5.022383820648e-02 +-4.949197100331e-02 -4.868762925081e-02 -4.781232717897e-02 -4.686767995599e-02 +-4.585540086759e-02 -4.477729836070e-02 -4.363527295655e-02 -4.243131403809e-02 +-4.116749651707e-02 -3.984597738615e-02 -3.846899216165e-02 -3.703885122248e-02 +-3.555793605128e-02 -3.402869538353e-02 -3.245364127086e-02 -3.083534506452e-02 +-2.917643332557e-02 -2.747958366783e-02 -2.574752054024e-02 -2.398301095503e-02 +-2.218886016829e-02 -2.036790731948e-02 -1.852302103661e-02 -1.665709501370e-02 +-1.477304356717e-02 -1.287379717797e-02 -1.096229802598e-02 -9.041495523515e-03 +-7.114341854431e-03 -5.183787525630e-03 -3.252776937392e-03 -1.324243979154e-03 +5.988923428224e-04 2.513732239494e-03 4.417399428451e-03 6.307045372497e-03 +8.179853461227e-03 1.003304312959e-02 1.186387390754e-02 1.366964939490e-02 +1.544772115590e-02 1.719549252772e-02 1.891042233785e-02 2.059002852479e-02 +2.223189165726e-02 2.383365834693e-02 2.539304454988e-02 2.690783875242e-02 +2.837590503673e-02 2.979518602233e-02 3.116370567930e-02 3.247957200954e-02 +3.374097959257e-02 3.494621199242e-02 3.609364402262e-02 3.718174386634e-02 +3.820907504899e-02 3.917429826088e-02 4.007617302772e-02 4.091355922698e-02 +4.168541844837e-02 4.239081519695e-02 4.302891793761e-02 4.359899997989e-02 +4.410044020231e-02 4.453272361585e-02 4.489544176600e-02 4.518829297361e-02 +4.541108241454e-02 4.556372203857e-02 4.564623032835e-02 4.565873189906e-02 +4.560145694016e-02 4.547474050043e-02 4.527902161794e-02 4.501484229685e-02 +4.468284633287e-02 4.428377798994e-02 4.381848053034e-02 4.328789460109e-02 +4.269305647939e-02 4.203509618038e-02 4.131523543030e-02 4.053478550869e-02 +3.969514496323e-02 3.879779720101e-02 3.784430796039e-02 3.683632266746e-02 +3.577556368157e-02 3.466382743431e-02 3.350298146672e-02 3.229496136929e-02 +3.104176762993e-02 2.974546239462e-02 2.840816614615e-02 2.703205430605e-02 +2.561935376507e-02 2.417233934768e-02 2.269333021603e-02 2.118468621912e-02 +1.964880419257e-02 1.808811421498e-02 1.650507582642e-02 1.490217421497e-02 +1.328191637703e-02 1.164682725739e-02 9.999445874710e-03 8.342321438527e-03 +6.678009463363e-03 5.009067886003e-03 3.338053191631e-03 1.667516554664e-03 +3.951348312058e-15 -1.661967409577e-03 -3.315873354289e-03 -4.959226000835e-03 +-6.589557703069e-03 + Type L N + 0 1 7 +0.000000000000e+00 1.481154861308e-02 2.960554632854e-02 4.436446700681e-02 +5.907083398651e-02 7.370724472844e-02 8.825639534585e-02 1.027011049831e-01 +1.170243400055e-01 1.312092379632e-01 1.452391312917e-01 1.590975707145e-01 +1.727683483093e-01 1.862355202054e-01 1.994834288749e-01 2.124967249857e-01 +2.252603887824e-01 2.377597509611e-01 2.499805130092e-01 2.619087669759e-01 +2.735310146468e-01 2.848341860909e-01 2.958056575531e-01 3.064332686659e-01 +3.167053389525e-01 3.266106835996e-01 3.361386284722e-01 3.452790243530e-01 +3.540222603804e-01 3.623592766693e-01 3.702815760941e-01 3.777812352165e-01 +3.848509143445e-01 3.914838667054e-01 3.976739467219e-01 4.034156173794e-01 +4.087039566734e-01 4.135346631295e-01 4.179040603889e-01 4.218091008526e-01 +4.252473683813e-01 4.282170800487e-01 4.307170869449e-01 4.327468740333e-01 +4.343065590604e-01 4.353968905231e-01 4.360192446984e-01 4.361756217411e-01 +4.358686408580e-01 4.351015345677e-01 4.338781420568e-01 4.322029016443e-01 +4.300808423681e-01 4.275175747081e-01 4.245192804629e-01 4.210927017968e-01 +4.172451294761e-01 4.129843903160e-01 4.083188338570e-01 4.032573182966e-01 +3.978091956961e-01 3.919842964912e-01 3.857929133291e-01 3.792457842606e-01 +3.723540753147e-01 3.651293624839e-01 3.575836131510e-01 3.497291669865e-01 +3.415787163485e-01 3.331452862170e-01 3.244422136959e-01 3.154831271140e-01 +3.062819247611e-01 2.968527532918e-01 2.872099858331e-01 2.773681998293e-01 +2.673421546616e-01 2.571467690765e-01 2.467970984597e-01 2.363083119919e-01 +2.256956697224e-01 2.149744995959e-01 2.041601744705e-01 1.932680891616e-01 +1.823136375483e-01 1.713121897780e-01 1.602790696047e-01 1.492295318961e-01 +1.381787403451e-01 1.271417454186e-01 1.161334625794e-01 1.051686508134e-01 +9.426189149487e-02 8.342756762269e-02 7.267984345857e-02 6.203264459791e-02 +5.149963850351e-02 4.109421553098e-02 3.082947047420e-02 2.071818465801e-02 +1.077280860452e-02 1.005445298223e-03 -8.572165925815e-03 -1.794866484750e-02 +-2.711308515908e-02 -3.605486857337e-02 -4.476387822326e-02 -5.323041133405e-02 +-6.144521115129e-02 -6.939947810838e-02 -7.708488021916e-02 -8.449356268224e-02 +-9.161815668497e-02 -9.845178739657e-02 -1.049880811410e-01 -1.112211717417e-01 +-1.171457060316e-01 -1.227568485239e-01 -1.280502852381e-01 -1.330222266814e-01 +-1.376694099826e-01 -1.419891001798e-01 -1.459790906629e-01 -1.496377027758e-01 +-1.529637845807e-01 -1.559567087919e-01 -1.586163698860e-01 -1.609431803967e-01 +-1.629380664048e-01 -1.646024622337e-01 -1.659383043636e-01 -1.669480245779e-01 +-1.676345423563e-01 -1.680012565312e-01 -1.680520362242e-01 -1.677912110810e-01 +-1.672235608253e-01 -1.663543041499e-01 -1.651890869686e-01 -1.637339700507e-01 +-1.619954160607e-01 -1.599802760282e-01 -1.576957752738e-01 -1.551494988150e-01 +-1.523493762806e-01 -1.493036663599e-01 -1.460209408153e-01 -1.425100680861e-01 +-1.387801965141e-01 -1.348407372190e-01 -1.307013466549e-01 -1.263719088780e-01 +-1.218625175567e-01 -1.171834577541e-01 -1.123451875168e-01 -1.073583192982e-01 +-1.022336012511e-01 -9.698189841972e-02 -9.161417386305e-02 -8.614146974220e-02 +-8.057488840244e-02 -7.492557348213e-02 -6.920469107972e-02 -6.342341100985e-02 +-5.759288817968e-02 -5.172424411555e-02 -4.582854867040e-02 -3.991680194140e-02 +-3.399991642702e-02 -2.808869945211e-02 -2.219383588904e-02 -1.632587120224e-02 +-1.049519484285e-02 -4.712024019576e-03 1.013612129261e-03 6.671887937845e-03 +1.225319616570e-02 1.774816247850e-02 2.314765943508e-02 2.844281995988e-02 +3.362505028075e-02 3.868604231359e-02 4.361778547572e-02 4.841257791140e-02 +5.306303711374e-02 5.756210992854e-02 6.190308192655e-02 6.607958613189e-02 +7.008561109556e-02 7.391550830408e-02 7.756399891442e-02 8.102617980788e-02 +8.429752895636e-02 8.737391009604e-02 9.025157670448e-02 9.292717527846e-02 +9.539774791121e-02 9.766073416849e-02 9.971397226479e-02 1.015556995416e-01 +1.031845522510e-01 1.045995646497e-01 1.058001674081e-01 1.067861853425e-01 +1.075578344776e-01 1.081157184486e-01 1.084608242530e-01 1.085945173642e-01 +1.085185362177e-01 1.082349860847e-01 1.077463323465e-01 1.070553931859e-01 +1.061653317105e-01 1.050796475268e-01 1.038021677819e-01 1.023370376914e-01 +1.006887105745e-01 9.886193741598e-02 9.686175597539e-02 9.469347946678e-02 +9.236268483039e-02 8.987520061967e-02 8.723709452720e-02 8.445466057366e-02 +8.153440598436e-02 7.848303777837e-02 7.530744909554e-02 7.201470528725e-02 +6.861202979670e-02 6.510678985503e-02 6.150648201971e-02 5.781871758156e-02 +5.405120786723e-02 5.021174946362e-02 4.630820939109e-02 4.234851025184e-02 +3.834061538020e-02 3.429251402104e-02 3.021220656258e-02 2.610768984944e-02 +2.198694260169e-02 1.785791096528e-02 1.372849421856e-02 9.606530659848e-03 +5.499783699821e-03 1.415928182509e-03 -2.637463042043e-03 -6.652932270945e-03 +-1.062314980556e-02 -1.454092649123e-02 -1.839922591912e-02 -2.219117627019e-02 +-2.591008178228e-02 -2.954943382188e-02 -3.310292154309e-02 -3.656444211695e-02 +-3.992811051546e-02 -4.318826883505e-02 -4.633949514569e-02 -4.937661185231e-02 +-5.229469355638e-02 -5.508907440640e-02 -5.775535492709e-02 -6.028940831780e-02 +-6.268738621221e-02 -6.494572389166e-02 -6.706114494618e-02 -6.903066537788e-02 +-7.085159714244e-02 -7.252155112578e-02 -7.403843955353e-02 -7.540047783238e-02 +-7.660618582331e-02 -7.765438854746e-02 -7.854421632691e-02 -7.927510436319e-02 +-7.984679175757e-02 -8.025931997822e-02 -8.051303078009e-02 -8.060856358457e-02 +-8.054685232665e-02 -8.032912177862e-02 -7.995688335978e-02 -7.943193044286e-02 +-7.875633316865e-02 -7.793243278106e-02 -7.696283549561e-02 -7.585040591548e-02 +-7.459826000950e-02 -7.320975766749e-02 -7.168849484910e-02 -7.003829534268e-02 +-6.826320215163e-02 -6.636746852607e-02 -6.435554865831e-02 -6.223208806108e-02 +-6.000191364812e-02 -5.767002353679e-02 -5.524157659327e-02 -5.272188174089e-02 +-5.011638705261e-02 -4.743066864903e-02 -4.467041942335e-02 -4.184143761519e-02 +-3.894961525502e-02 -3.600092650139e-02 -3.300141589301e-02 -2.995718653790e-02 +-2.687438826170e-02 -2.375920573747e-02 -2.061784661876e-02 -1.745652969824e-02 +-1.428147311335e-02 -1.109888262079e-02 -7.914939961089e-03 -4.735791334448e-03 +-1.567536008483e-03 1.583784921576e-03 4.712199600231e-03 7.811816286993e-03 +1.087683402039e-02 1.390155305203e-02 1.688038503253e-02 1.980786293170e-02 +2.267865067598e-02 2.548755248651e-02 2.822952190233e-02 3.089967047326e-02 +3.349327610817e-02 3.600579106488e-02 3.843284956862e-02 4.077027504678e-02 +4.301408696848e-02 4.516050727831e-02 4.720596641413e-02 4.914710890013e-02 +5.098079850668e-02 5.270412296957e-02 5.431439826230e-02 5.580917241542e-02 +5.718622887831e-02 5.844358941941e-02 5.957951656174e-02 6.059251555162e-02 +6.148133585922e-02 6.224497221049e-02 6.288266515097e-02 6.339390114264e-02 +6.377841219622e-02 6.403617504168e-02 6.416740984102e-02 6.417257844790e-02 +6.405238221978e-02 6.380775938872e-02 6.343988199820e-02 6.295015241363e-02 +6.234019941541e-02 6.161187388381e-02 6.076724408590e-02 5.980859057519e-02 +5.873840071572e-02 5.755936284243e-02 5.627436007089e-02 5.488646376947e-02 +5.339892670812e-02 5.181517589800e-02 5.013880513719e-02 4.837356727771e-02 +4.652336622993e-02 4.459224872063e-02 4.258439582145e-02 4.050411426480e-02 +3.835582756459e-02 3.614406695959e-02 3.387346219716e-02 3.154873217566e-02 +2.917467546383e-02 2.675616071553e-02 2.429811699864e-02 2.180552405659e-02 +1.928340252129e-02 1.673680409631e-02 1.417080172878e-02 1.159047978888e-02 +9.000924275244e-03 6.407213064825e-03 3.814406225389e-03 1.227536408694e-03 +-1.348400657838e-03 -3.908455563428e-03 -6.447734472963e-03 -8.961408235834e-03 +-1.144472132802e-02 -1.389300061125e-02 -1.630166389347e-02 -1.866622827537e-02 +-2.098231826799e-02 -2.324567366721e-02 -2.545215717123e-02 -2.759776172772e-02 +-2.967861759805e-02 -3.169099912633e-02 -3.363133120187e-02 -3.549619540409e-02 +-3.728233581974e-02 -3.898666452275e-02 -4.060626670788e-02 -4.213840546996e-02 +-4.358052622122e-02 -4.493026073991e-02 -4.618543084423e-02 -4.734405168610e-02 +-4.840433466040e-02 -4.936468992564e-02 -5.022372853315e-02 -5.098026416238e-02 +-5.163331446070e-02 -5.218210198706e-02 -5.262605475920e-02 -5.296480640535e-02 +-5.319819592169e-02 -5.332626703778e-02 -5.334926719295e-02 -5.326764612724e-02 +-5.308205409115e-02 -5.279333967946e-02 -5.240254729470e-02 -5.191091424675e-02 +-5.131986749570e-02 -5.063102004568e-02 -4.984616699800e-02 -4.896728127267e-02 +-4.799650900776e-02 -4.693616464688e-02 -4.578872572534e-02 -4.455682736635e-02 +-4.324325649890e-02 -4.185094580953e-02 -4.038296744078e-02 -3.884252644926e-02 +-3.723295403692e-02 -3.555770056945e-02 -3.382032839593e-02 -3.202450448434e-02 +-3.017399288780e-02 -2.827264705655e-02 -2.632440201112e-02 -2.433326639210e-02 +-2.230331440239e-02 -2.023867765756e-02 -1.814353696050e-02 -1.602211401627e-02 +-1.387866310330e-02 -1.171746271703e-02 -9.542807202106e-03 -7.358998389176e-03 +-5.170337252312e-03 -2.981115602897e-03 -7.956078357486e-04 1.381937256911e-03 +3.547304588269e-03 5.696320781307e-03 7.824862059854e-03 9.928862011615e-03 +1.200431920884e-02 1.404730467260e-02 1.605396916697e-02 1.802055030983e-02 +1.994337948744e-02 2.181888856018e-02 2.364361634762e-02 2.541421488114e-02 +2.712745541321e-02 2.878023417271e-02 3.036957785620e-02 3.189264884572e-02 +3.334675014412e-02 3.472933001962e-02 3.603798635178e-02 3.727047067176e-02 +3.842469189020e-02 3.949871970692e-02 4.049078769703e-02 4.139929606883e-02 +4.222281408948e-02 4.296008217497e-02 4.361001364187e-02 4.417169611858e-02 +4.464439261484e-02 4.502754224867e-02 4.532076063070e-02 4.552383990645e-02 +4.563674845779e-02 4.565963026541e-02 4.559280393494e-02 4.543676138971e-02 +4.519216623405e-02 4.485985179149e-02 4.444081882282e-02 4.393623292971e-02 +4.334742164992e-02 4.267587125104e-02 4.192322322985e-02 4.109127052535e-02 +4.018195345362e-02 3.919735537355e-02 3.813969809266e-02 3.701133702292e-02 +3.581475609667e-02 3.455256245357e-02 3.322748090938e-02 3.184234821828e-02 +3.040010714028e-02 2.890380032617e-02 2.735656403218e-02 2.576162167727e-02 +2.412227725593e-02 2.244190861979e-02 2.072396064140e-02 1.897193827388e-02 +1.718939952000e-02 1.537994832488e-02 1.354722740593e-02 1.169491103440e-02 +9.826697782416e-03 7.946303249718e-03 6.057452784145e-03 4.163874209975e-03 +2.269290578085e-03 3.774129518360e-04 -1.508066757507e-03 -3.383482892204e-03 +-5.245203072812e-03 -7.089635133053e-03 -8.913233951680e-03 -1.071250816855e-02 +-1.248402677235e-02 -1.422442554769e-02 -1.593041336966e-02 -1.759877833418e-02 +-1.922639371294e-02 -2.081022372206e-02 -2.234732909387e-02 -2.383487244188e-02 +-2.527012340929e-02 -2.665046359171e-02 -2.797339122553e-02 -2.923652563365e-02 +-3.043761142078e-02 -3.157452241114e-02 -3.264526532177e-02 -3.364798316538e-02 +-3.458095837696e-02 -3.544261565918e-02 -3.623152454196e-02 -3.694640165233e-02 +-3.758611269111e-02 -3.814967411361e-02 -3.863625451219e-02 -3.904517569888e-02 +-3.937591348717e-02 -3.962809817230e-02 -3.980151471027e-02 -3.989610259622e-02 +-3.991195544338e-02 -3.984932026455e-02 -3.970859645826e-02 -3.949033450291e-02 +-3.919523436204e-02 -3.882414360509e-02 -3.837805524800e-02 -3.785810531897e-02 +-3.726557015485e-02 -3.660186343440e-02 -3.586853295496e-02 -3.506725715967e-02 +-3.419984142286e-02 -3.326821410135e-02 -3.227442236048e-02 -3.122062778326e-02 +-3.010910177222e-02 -2.894222075334e-02 -2.772246119204e-02 -2.645239443157e-02 +-2.513468136424e-02 -2.377206694657e-02 -2.236737456924e-02 -2.092350029343e-02 +-1.944340696505e-02 -1.793011821868e-02 -1.638671238317e-02 -1.481631630111e-02 +-1.322209907433e-02 -1.160726574782e-02 -9.975050944547e-03 -8.328712463620e-03 +-6.671524854327e-03 -5.006772978614e-03 -3.337745574486e-03 -1.667728832823e-03 +-5.395180400398e-15 1.662178981316e-03 3.315567781108e-03 4.956953928423e-03 +6.583158983546e-03 + Type L N + 0 1 8 +0.000000000000e+00 1.655791103063e-02 3.309130092512e-02 4.957569177821e-02 +6.598669206340e-02 8.230003961507e-02 9.849164436217e-02 1.145376307318e-01 +1.304143796409e-01 1.460985699965e-01 1.615672196230e-01 1.767977255416e-01 +1.917679035205e-01 2.064560268243e-01 2.208408640859e-01 2.349017162306e-01 +2.486184523800e-01 2.619715446705e-01 2.749421019171e-01 2.875119020609e-01 +2.996634233391e-01 3.113798741173e-01 3.226452213293e-01 3.334442174714e-01 +3.437624261002e-01 3.535862457864e-01 3.629029324815e-01 3.717006202560e-01 +3.799683403704e-01 3.876960386461e-01 3.948745911041e-01 4.014958178447e-01 +4.075524951436e-01 4.130383657444e-01 4.179481473306e-01 4.222775391635e-01 +4.260232268770e-01 4.291828854229e-01 4.317551801646e-01 4.337397661211e-01 +4.351372853661e-01 4.359493625901e-01 4.361785988394e-01 4.358285634475e-01 +4.349037841774e-01 4.334097355995e-01 4.313528257302e-01 4.287403809622e-01 +4.255806293188e-01 4.218826820699e-01 4.176565137483e-01 4.129129406093e-01 +4.076635975805e-01 4.019209137486e-01 3.956980864370e-01 3.890090539261e-01 +3.818684668752e-01 3.742916585036e-01 3.662946135934e-01 3.578939363780e-01 +3.491068173809e-01 3.399509992743e-01 3.304447418252e-01 3.206067860027e-01 +3.104563173158e-01 3.000129284597e-01 2.892965813420e-01 2.783275685685e-01 +2.671264744631e-01 2.557141357010e-01 2.441116016337e-01 2.323400943838e-01 +2.204209687893e-01 2.083756722763e-01 1.962257047393e-01 1.839925785072e-01 +1.716977784745e-01 1.593627224744e-01 1.470087219714e-01 1.346569431490e-01 +1.223283684690e-01 1.100437587743e-01 9.782361600920e-02 8.568814662840e-02 +7.365722576277e-02 6.175036221118e-02 4.998666432326e-02 3.838480683706e-02 +2.696299873338e-02 1.573895216584e-02 4.729852523970e-03 -6.047670316608e-03 +-1.657756950472e-02 -2.684440743599e-02 -3.683338064054e-02 -4.653034329268e-02 +-5.592182930193e-02 -6.499507294809e-02 -7.373802802593e-02 -8.213938546823e-02 +-9.018858941940e-02 -9.787585173473e-02 -1.051921648841e-01 -1.121293132420e-01 +-1.186798827491e-01 -1.248372689340e-01 -1.305956832882e-01 -1.359501579873e-01 +-1.408965489612e-01 -1.454315373114e-01 -1.495526290843e-01 -1.532581534076e-01 +-1.565472590033e-01 -1.594199090916e-01 -1.618768747062e-01 -1.639197264415e-01 +-1.655508246575e-01 -1.667733081709e-01 -1.675910814631e-01 -1.680088004392e-01 +-1.680318567754e-01 -1.676663608940e-01 -1.669191236090e-01 -1.657976364858e-01 +-1.643100509646e-01 -1.624651562948e-01 -1.602723563338e-01 -1.577416452637e-01 +-1.548835822823e-01 -1.517092653254e-01 -1.482303038812e-01 -1.444587909565e-01 +-1.404072742592e-01 -1.360887266589e-01 -1.315165159935e-01 -1.267043742846e-01 +-1.216663664322e-01 -1.164168584543e-01 -1.109704853407e-01 -1.053421185900e-01 +-9.954683349864e-02 -9.359987627215e-02 -8.751663102686e-02 -8.131258675264e-02 +-7.500330430489e-02 -6.860438349469e-02 -6.213143034506e-02 -5.560002458081e-02 +-4.902568741833e-02 -4.242384972091e-02 -3.580982058406e-02 -2.919875641380e-02 +-2.260563055994e-02 -1.604520356440e-02 -9.531994083388e-03 -3.080250540227e-03 +3.296076436016e-03 9.583360733074e-03 1.576832658815e-02 2.183807348183e-02 +2.778010004672e-02 3.358232694644e-02 3.923311868330e-02 4.472130429523e-02 +5.003619690538e-02 5.516761209014e-02 6.010588503451e-02 6.484188644590e-02 +6.936703720085e-02 7.367332170163e-02 7.775329992268e-02 8.160011812990e-02 +8.520751825843e-02 8.856984593796e-02 9.168205715707e-02 9.453972356161e-02 +9.713903638452e-02 9.947680900809e-02 1.015504781620e-01 1.033581037636e-01 +1.048983674105e-01 1.061705695366e-01 1.071746252480e-01 1.079110588552e-01 +1.083809971237e-01 1.085861612649e-01 1.085288576940e-01 1.082119675829e-01 +1.076389352390e-01 1.068137553428e-01 1.057409590805e-01 1.044255992085e-01 +1.028732340897e-01 1.010899107443e-01 9.908214695680e-02 9.685691248719e-02 +9.442160943152e-02 9.178405178158e-02 8.895244423362e-02 8.593536029779e-02 +8.274171976109e-02 7.938076555768e-02 7.586204010149e-02 7.219536113690e-02 +6.839079716390e-02 6.445864249493e-02 6.040939200082e-02 5.625371560381e-02 +5.200243257576e-02 4.766648569971e-02 4.325691535298e-02 3.878483356985e-02 +3.426139814131e-02 2.969778680940e-02 2.510517161269e-02 2.049469343892e-02 +1.587743684027e-02 1.126440516526e-02 6.666496060902e-03 2.094477397162e-03 +-2.441036335399e-03 -6.929607105114e-03 -1.136099584778e-02 -1.572518435772e-02 +-2.001239651645e-02 -2.421311881573e-02 -2.831812013375e-02 -3.231847072490e-02 +-3.620556038587e-02 -3.997111576244e-02 -4.360721676405e-02 -4.710631205476e-02 +-5.046123359210e-02 -5.366521018711e-02 -5.671188006150e-02 -5.959530238024e-02 +-6.230996774016e-02 -6.485080759772e-02 -6.721320262165e-02 -6.939298995846e-02 +-7.138646940160e-02 -7.319040845732e-02 -7.480204630292e-02 -7.621909663577e-02 +-7.743974941355e-02 -7.846267148922e-02 -7.928700614622e-02 -7.991237154210e-02 +-8.033885807125e-02 -8.056702465956e-02 -8.059789400636e-02 -8.043294679127e-02 +-8.007411486574e-02 -7.952377345131e-02 -7.878473236882e-02 -7.786022632466e-02 +-7.675390428232e-02 -7.546981794938e-02 -7.401240941182e-02 -7.238649794943e-02 +-7.059726606763e-02 -6.865024478271e-02 -6.655129819886e-02 -6.430660741689e-02 +-6.192265381581e-02 -5.940620174943e-02 -5.676428070158e-02 -5.400416694426e-02 +-5.113336474404e-02 -4.815958716276e-02 -4.509073649924e-02 -4.193488441934e-02 +-3.870025182206e-02 -3.539518848972e-02 -3.202815257059e-02 -2.860768994224e-02 +-2.514241350411e-02 -2.164098244758e-02 -1.811208155151e-02 -1.456440055113e-02 +-1.100661362739e-02 -7.447359063791e-03 -3.895219116495e-03 -3.587001433476e-04 +3.153786963840e-03 6.633946000119e-03 1.007361427884e-02 1.346478103227e-02 +1.679960534131e-02 2.007043355533e-02 2.326981616478e-02 2.639052409048e-02 +2.942556435520e-02 3.236819510471e-02 3.521193994704e-02 3.795060158074e-02 +4.057827468431e-02 4.308935804128e-02 4.547856587701e-02 4.774093838528e-02 +4.987185142497e-02 5.186702536882e-02 5.372253308861e-02 5.543480706295e-02 +5.700064559627e-02 5.841721813936e-02 5.968206970430e-02 6.079312436851e-02 +6.174868786500e-02 6.254744925770e-02 6.318848170351e-02 6.367124230392e-02 +6.399557105220e-02 6.416168888325e-02 6.417019483595e-02 6.402206233961e-02 +6.371863463793e-02 6.326161936624e-02 6.265308229920e-02 6.189544028845e-02 +6.099145341102e-02 5.994421635153e-02 5.875714904241e-02 5.743398658838e-02 +5.597876850265e-02 5.439582728400e-02 5.268977636510e-02 5.086549746396e-02 +4.892812737133e-02 4.688304420838e-02 4.473585318977e-02 4.249237192826e-02 +4.015861531808e-02 3.774078003476e-02 3.524522869016e-02 3.267847368179e-02 +3.004716077609e-02 2.735805246603e-02 2.461801114311e-02 2.183398212490e-02 +1.901297657847e-02 1.616205438104e-02 1.328830695820e-02 1.039884014080e-02 +7.500757080491e-03 4.601141264318e-03 1.707039667804e-03 -1.174553914293e-03 +-4.036715321065e-03 -6.872606224583e-03 -9.675490038058e-03 -1.243874749688e-02 +-1.515589187733e-02 -1.782058381887e-02 -2.042664571674e-02 -2.296807565325e-02 +-2.543906083690e-02 -2.783399052001e-02 -3.014746836701e-02 -3.237432424670e-02 +-3.450962542356e-02 -3.654868712452e-02 -3.848708245922e-02 -4.032065167364e-02 +-4.204551071828e-02 -4.365805911411e-02 -4.515498710107e-02 -4.653328205570e-02 +-4.779023416631e-02 -4.892344135592e-02 -4.993081344491e-02 -5.081057554727e-02 +-5.156127069620e-02 -5.218176169658e-02 -5.267123220359e-02 -5.302918702888e-02 +-5.325545167719e-02 -5.335017111832e-02 -5.331380780109e-02 -5.314713891769e-02 +-5.285125292855e-02 -5.242754535957e-02 -5.187771388525e-02 -5.120375271283e-02 +-5.040794628419e-02 -4.949286231375e-02 -4.846134418223e-02 -4.731650270732e-02 +-4.606170731395e-02 -4.470057662806e-02 -4.323696851891e-02 -4.167496961652e-02 +-4.001888433139e-02 -3.827322340542e-02 -3.644269202321e-02 -3.453217751437e-02 +-3.254673667809e-02 -3.049158276193e-02 -2.837207212753e-02 -2.619369063662e-02 +-2.396203979110e-02 -2.168282266139e-02 -1.936182963770e-02 -1.700492403911e-02 +-1.461802761544e-02 -1.220710597707e-02 -9.778153987978e-03 -7.337181156879e-03 +-4.890197061645e-03 -2.443196841538e-03 -2.146791744090e-06 2.427029905829e-03 +4.838467281943e-03 7.226370476656e-03 9.585029400815e-03 1.190883213079e-02 +1.419227800556e-02 1.642999039615e-02 1.861672911823e-02 2.074740245990e-02 +2.281707879732e-02 2.482099777245e-02 2.675458100782e-02 2.861344233493e-02 +3.039339751367e-02 3.209047342193e-02 3.370091669553e-02 3.522120180033e-02 +3.664803851944e-02 3.797837884032e-02 3.920942322779e-02 4.033862627058e-02 +4.136370169057e-02 4.228262670554e-02 4.309364573766e-02 4.379527346174e-02 +4.438629718867e-02 4.486577858132e-02 4.523305470151e-02 4.548773838844e-02 +4.562971797067e-02 4.565915631493e-02 4.557648921710e-02 4.538242314188e-02 +4.507793231948e-02 4.466425520881e-02 4.414289033863e-02 4.351559153905e-02 +4.278436257749e-02 4.195145121455e-02 4.101934269644e-02 3.999075270200e-02 +3.886861976354e-02 3.765609718199e-02 3.635654445778e-02 3.497351826022e-02 +3.351076295890e-02 3.197220074180e-02 3.036192134554e-02 2.868417142405e-02 +2.694334358287e-02 2.514396510671e-02 2.329068640869e-02 2.138826923032e-02 +1.944157462145e-02 1.745555073027e-02 1.543522043333e-02 1.338566883613e-02 +1.131203067490e-02 9.219477650305e-03 7.113205723915e-03 4.998422408071e-03 +2.880334079970e-03 7.641333503272e-04 -1.345013483117e-03 -3.441978867347e-03 +-5.521686281563e-03 -7.579122351377e-03 -9.609348761184e-03 -1.160751393678e-02 +-1.356886447099e-02 -1.548875626571e-02 -1.736266536469e-02 -1.918619845208e-02 +-2.095510299273e-02 -2.266527699123e-02 -2.431277834758e-02 -2.589383378856e-02 +-2.740484735483e-02 -2.884240842504e-02 -3.020329925943e-02 -3.148450204645e-02 +-3.268320543748e-02 -3.379681055569e-02 -3.482293646675e-02 -3.575942509999e-02 +-3.660434561055e-02 -3.735599817388e-02 -3.801291720575e-02 -3.857387400208e-02 +-3.903787879458e-02 -3.940418221928e-02 -3.967227619680e-02 -3.984189422432e-02 +-3.991301108094e-02 -3.988584194924e-02 -3.976084095732e-02 -3.953869914728e-02 +-3.922034187691e-02 -3.880692566323e-02 -3.829983447740e-02 -3.770067550228e-02 +-3.701127436464e-02 -3.623366985568e-02 -3.537010815444e-02 -3.442303657002e-02 +-3.339509681946e-02 -3.228911785923e-02 -3.110810828940e-02 -2.985524835046e-02 +-2.853388153354e-02 -2.714750582588e-02 -2.569976461398e-02 -2.419443726774e-02 +-2.263542942962e-02 -2.102676303320e-02 -1.937256607656e-02 -1.767706217584e-02 +-1.594455992534e-02 -1.417944209042e-02 -1.238615466005e-02 -1.056919578607e-02 +-8.733104636253e-03 -6.882450188568e-03 -5.021819993921e-03 -3.155808934758e-03 +-1.289008006752e-03 5.740068493430e-04 2.428685838783e-03 4.270516300273e-03 +6.095033563517e-03 7.897831651018e-03 9.674573798760e-03 1.142100277091e-02 +1.313295094430e-02 1.480635013898e-02 1.643724117206e-02 1.802178311248e-02 +1.955626221549e-02 2.103710051615e-02 2.246086406235e-02 2.382427076859e-02 +2.512419787273e-02 2.635768897918e-02 2.752196067273e-02 2.861440868857e-02 +2.963261362498e-02 3.057434618660e-02 3.143757194694e-02 3.222045562041e-02 +3.292136483523e-02 3.353887339954e-02 3.407176405486e-02 3.451903071165e-02 +3.487988016366e-02 3.515373327833e-02 3.534022566241e-02 3.543920780289e-02 +3.545074468464e-02 3.537511488750e-02 3.521280916677e-02 3.496452852234e-02 +3.463118176278e-02 3.421388257209e-02 3.371394608787e-02 3.313288500087e-02 +3.247240518699e-02 3.173440088389e-02 3.092094942553e-02 3.003430554875e-02 +2.907689528729e-02 2.805130946938e-02 2.696029683603e-02 2.580675679798e-02 +2.459373185012e-02 2.332439966292e-02 2.200206487120e-02 2.063015058108e-02 +1.921218961681e-02 1.775181552949e-02 1.625275339036e-02 1.471881039172e-02 +1.315386627900e-02 1.156186363765e-02 9.946798059158e-03 8.312708210192e-03 +6.663665829604e-03 5.003765677650e-03 3.337115462101e-03 1.667825765779e-03 +3.234571482622e-15 -1.662275591703e-03 -3.314941855525e-03 -4.953976550982e-03 +-6.575404052716e-03 + Type L N + 0 1 9 +0.000000000000e+00 1.830358174210e-02 3.657403808490e-02 5.477831499715e-02 +7.288350101641e-02 9.085689811520e-02 1.086660920666e-01 1.262790221443e-01 +1.436640499936e-01 1.607900275125e-01 1.776263635835e-01 1.941430895004e-01 +2.103109229381e-01 2.261013303140e-01 2.414865873988e-01 2.564398380332e-01 +2.709351508156e-01 2.849475736296e-01 2.984531858842e-01 3.114291483481e-01 +3.238537504622e-01 3.357064550233e-01 3.469679401358e-01 3.576201383384e-01 +3.676462728158e-01 3.770308906151e-01 3.857598927944e-01 3.938205614351e-01 +4.012015834617e-01 4.078930712177e-01 4.138865797541e-01 4.191751207972e-01 +4.237531733675e-01 4.276166910331e-01 4.307631057854e-01 4.331913285360e-01 +4.349017462416e-01 4.358962156689e-01 4.361780538247e-01 4.357520250791e-01 +4.346243250218e-01 4.328025610972e-01 4.302957300717e-01 4.271141923958e-01 +4.232696435290e-01 4.187750823041e-01 4.136447764136e-01 4.078942251090e-01 +4.015401192086e-01 3.946002985174e-01 3.870937067674e-01 3.790403441931e-01 +3.704612178630e-01 3.613782898909e-01 3.518144236589e-01 3.417933281848e-01 +3.313395007746e-01 3.204781681009e-01 3.092352258544e-01 2.976371771166e-01 +2.857110696066e-01 2.734844319544e-01 2.609852091583e-01 2.482416973830e-01 +2.352824782561e-01 2.221363528245e-01 2.088322753284e-01 1.953992869526e-01 +1.818664497150e-01 1.682627806506e-01 1.546171864455e-01 1.409583986801e-01 +1.273149098309e-01 1.137149101839e-01 1.001862258071e-01 8.675625772682e-02 +7.345192244858e-02 6.029959396153e-02 4.732504735816e-02 3.455340419908e-02 +2.200907974642e-02 9.715732184933e-03 -2.303786055728e-03 -1.402747476984e-02 +-2.543423013342e-02 -3.650388645536e-02 -4.721725543241e-02 -5.755616282508e-02 +-6.750348247854e-02 -7.704316761906e-02 -8.616027936410e-02 -9.484101239104e-02 +-1.030727177169e-01 -1.108439225488e-01 -1.181443471731e-01 -1.249649188563e-01 +-1.312977827426e-01 -1.371363097361e-01 -1.424751013654e-01 -1.473099916373e-01 +-1.516380458899e-01 -1.554575566670e-01 -1.587680366408e-01 -1.615702086167e-01 +-1.638659926636e-01 -1.656584904169e-01 -1.669519666121e-01 -1.677518279090e-01 +-1.680645990773e-01 -1.678978966182e-01 -1.672603999032e-01 -1.661618199179e-01 +-1.646128657023e-01 -1.626252085877e-01 -1.602114443317e-01 -1.573850532599e-01 +-1.541603585270e-01 -1.505524826134e-01 -1.465773021787e-01 -1.422514013949e-01 +-1.375920238872e-01 -1.326170234127e-01 -1.273448134092e-01 -1.217943155488e-01 +-1.159849074327e-01 -1.099363695658e-01 -1.036688317492e-01 -9.720271903118e-02 +-9.055869735635e-02 -8.375761905255e-02 -7.682046829625e-02 -6.976830669444e-02 +-6.262221912132e-02 -5.540325994599e-02 -4.813239978587e-02 -4.083047291815e-02 +-3.351812547938e-02 -2.621576458043e-02 -1.894350846070e-02 -1.172113780254e-02 +-4.568048322596e-03 2.496795246826e-03 9.454903677738e-03 1.628830616362e-02 +2.297959153439e-02 2.951194767482e-02 3.586919905734e-02 4.203584230544e-02 +4.799707970983e-02 5.373885062489e-02 5.924786067938e-02 6.451160874110e-02 +6.951841158171e-02 7.425742619399e-02 7.871866972059e-02 8.289303695950e-02 +8.677231541825e-02 9.034919789536e-02 9.361729257421e-02 9.657113062115e-02 +9.920617128620e-02 1.015188045114e-01 1.035063510584e-01 1.051670601729e-01 +1.065001048107e-01 1.075055744564e-01 1.081844655702e-01 1.085386697071e-01 +1.085709593568e-01 1.082849715578e-01 1.076851893481e-01 1.067769211146e-01 +1.055662779148e-01 1.040601488446e-01 1.022661745321e-01 1.001927188440e-01 +9.784883889096e-02 9.524425342656e-02 9.238930973593e-02 8.929494911340e-02 +8.597267103297e-02 8.243449611708e-02 7.869292801214e-02 7.476091428152e-02 +7.065180642847e-02 6.637931916320e-02 6.195748902942e-02 5.740063250685e-02 +5.272330370674e-02 4.794025177762e-02 4.306637813898e-02 3.811669365958e-02 +3.310627589716e-02 2.805022651502e-02 2.296362898958e-02 1.786150672202e-02 +1.275878166461e-02 7.670233570794e-03 2.610459975239e-03 -2.406162992260e-03 +-7.365518858348e-03 -1.225378802552e-02 -1.705748386522e-02 -2.176348759424e-02 +-2.635908184775e-02 -3.083198286669e-02 -3.517037122126e-02 -3.936292099701e-02 +-4.339882737451e-02 -4.726783253870e-02 -5.096024985851e-02 -5.446698628319e-02 +-5.777956290620e-02 -6.089013365359e-02 -6.379150205870e-02 -6.647713609080e-02 +-6.894118101077e-02 -7.117847023244e-02 -7.318453417395e-02 -7.495560708904e-02 +-7.648863187394e-02 -7.778126285084e-02 -7.883186653490e-02 -7.963952039699e-02 +-8.020400963978e-02 -8.052582201049e-02 -8.060614067853e-02 -8.044683521154e-02 +-8.005045068863e-02 -7.942019499406e-02 -7.855992433988e-02 -7.747412707017e-02 +-7.616790580441e-02 -7.464695798128e-02 -7.291755486873e-02 -7.098651910953e-02 +-6.886120087552e-02 -6.654945270702e-02 -6.405960311692e-02 -6.140042904224e-02 +-5.858112722820e-02 -5.561128463271e-02 -5.250084794108e-02 -4.926009228271e-02 +-4.589958924332e-02 -4.243017426745e-02 -3.886291354731e-02 -3.520907049454e-02 +-3.148007189251e-02 -2.768747382652e-02 -2.384292748968e-02 -1.995814496188e-02 +-1.604486505853e-02 -1.211481934533e-02 -8.179698413918e-03 -4.251118512063e-03 +-3.405886206150e-04 3.540521932676e-03 7.381015234165e-03 1.116989583429e-02 +1.489640100313e-02 1.855003011098e-02 2.212057305618e-02 2.559813766586e-02 +2.897317599822e-02 3.223650947904e-02 3.537935280821e-02 3.839333657641e-02 +4.127052853591e-02 4.400345347347e-02 4.658511163778e-02 4.900899567831e-02 +5.126910605653e-02 5.335996489552e-02 5.527662823829e-02 5.701469668990e-02 +5.857032442323e-02 5.994022653299e-02 6.112168472734e-02 6.211255135130e-02 +6.291125174084e-02 6.351678491138e-02 6.392872258900e-02 6.414720659753e-02 +6.417294461913e-02 6.400720435046e-02 6.365180608122e-02 6.310911372586e-02 +6.238202434376e-02 6.147395618708e-02 6.038883531963e-02 5.913108085371e-02 +5.770558885585e-02 5.611771497557e-02 5.437325585476e-02 5.247842937856e-02 +5.043985383133e-02 4.826452602414e-02 4.595979846304e-02 4.353335562925e-02 +4.099318944490e-02 3.834757399986e-02 3.560503961655e-02 3.277434633158e-02 +2.986445687386e-02 2.688450922004e-02 2.384378880891e-02 2.075170049681e-02 +1.761774033636e-02 1.445146726111e-02 1.126247475819e-02 8.060362610876e-03 +4.854708792171e-03 1.655041589786e-03 -1.529187958409e-03 -4.688633240530e-03 +-7.814078782147e-03 -1.089646641850e-02 -1.392692085488e-02 -1.689677454470e-02 +-1.979759181718e-02 -2.262119218908e-02 -2.535967279759e-02 -2.800542989440e-02 +-3.055117934399e-02 -3.298997607227e-02 -3.531523241523e-02 -3.752073532041e-02 +-3.960066235785e-02 -4.154959650055e-02 -4.336253963851e-02 -4.503492479416e-02 +-4.656262701073e-02 -4.794197288940e-02 -4.916974875494e-02 -5.024320743357e-02 +-5.116007363092e-02 -5.191854790218e-02 -5.251730921045e-02 -5.295551607350e-02 +-5.323280630334e-02 -5.334929534672e-02 -5.330557323923e-02 -5.310270018885e-02 +-5.274220080962e-02 -5.222605702894e-02 -5.155669969654e-02 -5.073699892625e-02 +-4.977025320544e-02 -4.866017731036e-02 -4.741088906890e-02 -4.602689501520e-02 +-4.451307498402e-02 -4.287466569502e-02 -4.111724338018e-02 -3.924670550999e-02 +-3.726925167637e-02 -3.519136369229e-02 -3.301978497043e-02 -3.076149924450e-02 +-2.842370869875e-02 -2.601381157268e-02 -2.353937930868e-02 -2.100813331197e-02 +-1.842792139238e-02 -1.580669395853e-02 -1.315248003518e-02 -1.047336317458e-02 +-7.777457332796e-03 -5.072882781731e-03 -2.367742126867e-03 3.299034995427e-04 +3.012058001219e-03 5.670813568846e-03 8.298373552893e-03 1.088707489325e-02 +1.342941004226e-02 1.591804831964e-02 1.834585663938e-02 2.070591955138e-02 +2.299155854231e-02 2.519635054291e-02 2.731414559150e-02 2.933908360597e-02 +3.126561021970e-02 3.308849163934e-02 3.480282848584e-02 3.640406858313e-02 +3.788801866191e-02 3.925085494970e-02 4.048913262121e-02 4.159979408713e-02 +4.258017610231e-02 4.342801567831e-02 4.414145478860e-02 4.471904385849e-02 +4.515974403509e-02 4.546292823669e-02 4.562838098410e-02 4.565629702020e-02 +4.554727872752e-02 4.530233235705e-02 4.492286308491e-02 4.441066891690e-02 +4.376793346419e-02 4.299721761665e-02 4.210145014337e-02 4.108391725303e-02 +3.994825114943e-02 3.869841762072e-02 3.733870270295e-02 3.587369846167e-02 +3.430828793717e-02 3.264762930170e-02 3.089713927853e-02 2.906247587534e-02 +2.714952048553e-02 2.516435941306e-02 2.311326487786e-02 2.100267555991e-02 +1.883917674134e-02 1.662948010682e-02 1.438040326324e-02 1.209884904005e-02 +9.791784632412e-03 7.466220649033e-03 5.129190126911e-03 2.787727574883e-03 +4.488481075623e-04 -1.880473269300e-03 -4.193322161681e-03 -6.482865018936e-03 +-8.742369035817e-03 -1.096522166770e-02 -1.314494970317e-02 -1.527523783979e-02 +-1.734994671037e-02 -1.936313030911e-02 -2.130905276877e-02 -2.318220444232e-02 +-2.497731724460e-02 -2.668937921196e-02 -2.831364824041e-02 -2.984566496514e-02 +-3.128126474734e-02 -3.261658873654e-02 -3.384809397998e-02 -3.497256255322e-02 +-3.598710968913e-02 -3.688919088565e-02 -3.767660797564e-02 -3.834751414526e-02 +-3.890041789059e-02 -3.933418590523e-02 -3.964804489491e-02 -3.984158231818e-02 +-3.991474605563e-02 -3.986784301293e-02 -3.970153666648e-02 -3.941684356308e-02 +-3.901512878856e-02 -3.849810042285e-02 -3.786780300217e-02 -3.712661001169e-02 +-3.627721543499e-02 -3.532262438894e-02 -3.426614287566e-02 -3.311136668538e-02 +-3.186216948641e-02 -3.052269014089e-02 -2.909731928684e-02 -2.759068522925e-02 +-2.600763918471e-02 -2.435323992584e-02 -2.263273787325e-02 -2.085155868453e-02 +-1.901528639060e-02 -1.712964613127e-02 -1.520048654261e-02 -1.323376184967e-02 +-1.123551371869e-02 -9.211852923402e-03 -7.168940880532e-03 -5.112971109536e-03 +-3.050150671791e-03 -9.866816442555e-04 1.071257317729e-03 3.117529274252e-03 +5.146057097701e-03 7.150841319863e-03 9.125977677427e-03 1.106567430511e-02 +1.296426852686e-02 1.481624319706e-02 1.661624254499e-02 1.835908747760e-02 +2.003979029747e-02 2.165356879447e-02 2.319585967185e-02 2.466233126973e-02 +2.604889555069e-02 2.735171931510e-02 2.856723461572e-02 2.969214834385e-02 +3.072345096179e-02 3.165842435904e-02 3.249464881219e-02 3.323000903138e-02 +3.386269927885e-02 3.439122754791e-02 3.481441879354e-02 3.513141720857e-02 +3.534168754237e-02 3.544501546162e-02 3.544150695593e-02 3.533158679331e-02 +3.511599603395e-02 3.479578861309e-02 3.437232700647e-02 3.384727699485e-02 +3.322260154632e-02 3.250055383794e-02 3.168366944046e-02 3.077475769253e-02 +2.977689229300e-02 2.869340114195e-02 2.752785546354e-02 2.628405824548e-02 +2.496603203204e-02 2.357800610901e-02 2.212440312114e-02 2.060982516361e-02 +1.903903939084e-02 1.741696318714e-02 1.574864894472e-02 1.403926849582e-02 +1.229409724626e-02 1.051849805872e-02 8.717904934536e-03 6.897806543011e-03 +5.063729647956e-03 3.221222480840e-03 1.375838110240e-03 -4.668821430431e-04 +-2.301425196093e-03 -4.122322550559e-03 -5.924166447871e-03 -7.701625785658e-03 +-9.449461748942e-03 -1.116254311066e-02 -1.283586115725e-02 -1.446454419619e-02 +-1.604387160401e-02 -1.756928737443e-02 -1.903641312830e-02 -2.044106054845e-02 +-2.177924320460e-02 -2.304718773514e-02 -2.424134435498e-02 -2.535839666045e-02 +-2.639527070462e-02 -2.734914331846e-02 -2.821744965592e-02 -2.899788994295e-02 +-2.968843541330e-02 -3.028733341619e-02 -3.079311168353e-02 -3.120458174679e-02 +-3.152084149646e-02 -3.174127687922e-02 -3.186556273085e-02 -3.189366274530e-02 +-3.182582858295e-02 -3.166259812364e-02 -3.140479287259e-02 -3.105351452977e-02 +-3.061014073575e-02 -3.007632000953e-02 -2.945396589599e-02 -2.874525034323e-02 +-2.795259633192e-02 -2.707866978123e-02 -2.612637075772e-02 -2.509882401582e-02 +-2.399936890015e-02 -2.283154864200e-02 -2.159909908372e-02 -2.030593686649e-02 +-1.895614711856e-02 -1.755397068200e-02 -1.610379091781e-02 -1.461012012981e-02 +-1.307758564908e-02 -1.151091562159e-02 -9.914924542104e-03 -8.294498578460e-03 +-6.654580730483e-03 -5.000155868316e-03 -3.336235695113e-03 -1.667843679102e-03 +-1.539767840045e-15 1.662293445418e-03 3.314067934178e-03 4.950402660314e-03 +6.566439287048e-03 + Type L N + 0 1 10 +0.000000000000e+00 2.004864164329e-02 4.005374818686e-02 5.997189707219e-02 +7.975989050636e-02 9.937486705384e-02 1.187744122816e-01 1.379166681467e-01 +1.567604408180e-01 1.752653066309e-01 1.933917158755e-01 2.111010941297e-01 +2.283559408516e-01 2.451199249570e-01 2.613579771150e-01 2.770363785041e-01 +2.921228457845e-01 3.065866120476e-01 3.203985035237e-01 3.335310118337e-01 +3.459583615878e-01 3.576565731488e-01 3.686035203875e-01 3.787789832775e-01 +3.881646951877e-01 3.967443847496e-01 4.045038121897e-01 4.114308000356e-01 +4.175152581199e-01 4.227492028224e-01 4.271267705091e-01 4.306442251418e-01 +4.332999600511e-01 4.350944938804e-01 4.360304607265e-01 4.361125945205e-01 +4.353477077066e-01 4.337446642945e-01 4.313143473783e-01 4.280696212279e-01 +4.240252880779e-01 4.191980397498e-01 4.136064042641e-01 4.072706876057e-01 +4.002129108269e-01 3.924567426797e-01 3.840274279856e-01 3.749517119611e-01 +3.652577607274e-01 3.549750782466e-01 3.441344199325e-01 3.327677031962e-01 +3.209079151926e-01 3.085890180434e-01 2.958458518164e-01 2.827140355489e-01 +2.692298666055e-01 2.554302186671e-01 2.413524386478e-01 2.270342428415e-01 +2.125136125998e-01 1.978286898425e-01 1.830176727020e-01 1.681187116030e-01 +1.531698060731e-01 1.382087025797e-01 1.232727936826e-01 1.083990187879e-01 +9.362376678147e-02 7.898278081579e-02 6.451106551345e-02 5.024279684566e-02 +3.621123493252e-02 2.244864000347e-02 8.986191745619e-03 -4.146087743652e-03 +-1.691940719460e-02 -2.930627540092e-02 -4.128056627346e-02 -5.281757954507e-02 +-6.389409697353e-02 -7.448843390387e-02 -8.458048606534e-02 -9.415177149377e-02 +-1.031854674845e-01 -1.116664424970e-01 -1.195812829467e-01 -1.269183148374e-01 +-1.336676201993e-01 -1.398210483195e-01 -1.453722217596e-01 -1.503165371794e-01 +-1.546511609934e-01 -1.583750199077e-01 -1.614887863972e-01 -1.639948591984e-01 +-1.658973389091e-01 -1.672019987983e-01 -1.679162509452e-01 -1.680491078393e-01 +-1.676111395862e-01 -1.666144268762e-01 -1.650725098854e-01 -1.630003332896e-01 +-1.604141875824e-01 -1.573316468998e-01 -1.537715035604e-01 -1.497536995435e-01 +-1.452992551303e-01 -1.404301949456e-01 -1.351694716394e-01 -1.295408874580e-01 +-1.235690139552e-01 -1.172791101008e-01 -1.106970390463e-01 -1.038491838104e-01 +-9.676236214780e-02 -8.946374086651e-02 -8.198074985927e-02 -7.434099611248e-02 +-6.657217795589e-02 -5.870199981310e-02 -5.075808771010e-02 -4.276790579488e-02 +-3.475867411658e-02 -2.675728790703e-02 -1.879023860142e-02 -1.088353682792e-02 +-3.062637588332e-03 4.647632156173e-03 1.222314328917e-02 1.964053153738e-02 +2.687726147770e-02 3.391168737783e-02 4.072311070645e-02 4.729183416044e-02 +5.359921206845e-02 5.962769704250e-02 6.536088276179e-02 7.078354278585e-02 +7.588166530734e-02 8.064248376806e-02 8.505450327531e-02 8.910752276941e-02 +9.279265290674e-02 9.610232963664e-02 9.903032346394e-02 1.015717444029e-01 +1.037230426415e-01 1.054820049488e-01 1.068477468715e-01 1.078207007777e-01 +1.084025998205e-01 1.085964579047e-01 1.084065457533e-01 1.078383631812e-01 +1.068986076957e-01 1.055951395535e-01 1.039369434151e-01 1.019340867459e-01 +9.959767512544e-02 9.693980463058e-02 9.397351147173e-02 9.071271906439e-02 +8.717218272780e-02 8.336743220780e-02 7.931471222655e-02 7.503092126704e-02 +7.053354880411e-02 6.584061119752e-02 6.097058646507e-02 5.594234815611e-02 +5.077509854694e-02 4.548830138022e-02 4.010161437038e-02 3.463482169635e-02 +2.910776670111e-02 2.354028501549e-02 1.795213832078e-02 1.236294896080e-02 +6.792135610295e-03 1.258850200934e-03 -4.218083698605e-03 -9.620230858748e-03 +-1.492960253797e-02 -2.012871262865e-02 -2.520063163165e-02 -3.012903829971e-02 +-3.489826879872e-02 -3.949336324477e-02 -4.390010948483e-02 -4.810508399883e-02 +-5.209568981097e-02 -5.586019130913e-02 -5.938774588175e-02 -6.266843229296e-02 +-6.569327572773e-02 -6.845426945066e-02 -7.094439303319e-02 -7.315762711593e-02 +-7.508896468429e-02 -7.673441884752e-02 -7.809102712250e-02 -7.915685223563e-02 +-7.993097946722e-02 -8.041351057425e-02 -8.060555433844e-02 -8.050921379745e-02 +-8.012757022741e-02 -7.946466395572e-02 -7.852547209259e-02 -7.731588327969e-02 +-7.584266956346e-02 -7.411345550934e-02 -7.213668468178e-02 -6.992158362252e-02 +-6.747812346730e-02 -6.481697934799e-02 -6.194948773330e-02 -5.888760186748e-02 +-5.564384547130e-02 -5.223126487436e-02 -4.866337975202e-02 -4.495413264360e-02 +-4.111783743128e-02 -3.716912696158e-02 -3.312289999281e-02 -2.899426765287e-02 +-2.479849959220e-02 -2.055097001649e-02 -1.626710378278e-02 -1.196232274131e-02 +-7.651992503055e-03 -3.351369810803e-03 9.244493122807e-04 5.160580465896e-03 +9.342400661638e-03 1.345559683653e-02 1.748621293522e-02 2.142069541087e-02 +2.524593700109e-02 2.894931864218e-02 3.251874939191e-02 3.594270423906e-02 +3.921025968548e-02 4.231112699506e-02 4.523568301251e-02 4.797499846364e-02 +5.052086365817e-02 5.286581152518e-02 5.500313792111e-02 5.692691915965e-02 +5.863202672279e-02 6.011413912208e-02 6.136975088909e-02 6.239617868396e-02 +6.319156452082e-02 6.375487611866e-02 6.408590439613e-02 6.418525813809e-02 +6.405435587152e-02 6.369541499742e-02 6.311143823471e-02 6.230619744047e-02 +6.128421488011e-02 6.005074202860e-02 5.861173599241e-02 5.697383364896e-02 +5.514432360789e-02 5.313111610504e-02 5.094271094654e-02 4.858816362643e-02 +4.607704974642e-02 4.341942787185e-02 4.062580096206e-02 3.770707651766e-02 +3.467452559057e-02 3.153974080592e-02 2.831459354694e-02 2.501119045654e-02 +2.164182941010e-02 1.821895511529e-02 1.475511449471e-02 1.126291200738e-02 +7.754965063920e-03 4.243859689298e-03 7.421065851342e-04 -2.737902258719e-03 +-6.183936256412e-03 -9.583968078509e-03 -1.292621452469e-02 -1.619917628107e-02 +-1.939167643117e-02 -2.249289759449e-02 -2.549241757245e-02 -2.838024338689e-02 +-3.114684360294e-02 -3.378317883446e-02 -3.628073033708e-02 -3.863152660118e-02 +-4.082816786452e-02 -4.286384847181e-02 -4.473237701661e-02 -4.642819420862e-02 +-4.794638841819e-02 -4.928270885753e-02 -5.043357636716e-02 -5.139609178411e-02 +-5.216804187731e-02 -5.274790284372e-02 -5.313484136769e-02 -5.332871325409e-02 +-5.333005965434e-02 -5.314010091262e-02 -5.276072806770e-02 -5.219449205378e-02 +-5.144459065131e-02 -5.051485324662e-02 -4.940972346612e-02 -4.813423975813e-02 +-4.669401400190e-02 -4.509520822999e-02 -4.334450955621e-02 -4.144910340686e-02 +-3.941664515877e-02 -3.725523029218e-02 -3.497336317145e-02 -3.257992457041e-02 +-3.008413806323e-02 -2.749553540467e-02 -2.482392102666e-02 -2.207933578043e-02 +-1.927202005531e-02 -1.641237640686e-02 -1.351093182804e-02 -1.057829979737e-02 +-7.625142238595e-03 -4.662131525298e-03 -1.699912663701e-03 1.250934214945e-03 +4.179930922482e-03 7.076737714922e-03 9.931189101533e-03 1.273332884009e-02 +1.547344399990e-02 1.814209797818e-02 2.073016235946e-02 2.322884751252e-02 +2.562973182413e-02 2.792478947434e-02 3.010641666348e-02 3.216745620708e-02 +3.410122042100e-02 3.590151222541e-02 3.756264440283e-02 3.907945695250e-02 +4.044733248991e-02 4.166220964770e-02 4.272059444137e-02 4.361956957043e-02 +4.435680163298e-02 4.493054623945e-02 4.533965101810e-02 4.558355651299e-02 +4.566229498192e-02 4.557648710952e-02 4.532733665778e-02 4.491662308349e-02 +4.434669215893e-02 4.362044463923e-02 4.274132302606e-02 4.171329648416e-02 +4.054084397319e-02 3.922893566336e-02 3.778301270904e-02 3.620896545993e-02 +3.451311019452e-02 3.270216446519e-02 3.078322114897e-02 2.876372130186e-02 +2.665142591846e-02 2.445438670201e-02 2.218091595286e-02 1.983955568594e-02 +1.743904609016e-02 1.498829344416e-02 1.249633760444e-02 9.972319182722e-03 +7.425446529940e-03 4.864962644432e-03 2.300112121540e-03 -2.598917388347e-04 +-2.805899551278e-03 -5.328858076613e-03 -7.819841954325e-03 -1.027008482593e-02 +-1.267100974223e-02 -1.501425875040e-02 -1.729172156025e-02 -1.949556319270e-02 +-2.161825051761e-02 -2.365257759228e-02 -2.559168971691e-02 -2.742910612772e-02 +-2.915874125420e-02 -3.077492447184e-02 -3.227241828756e-02 -3.364643490095e-02 +-3.489265109020e-02 -3.600722137795e-02 -3.698678943834e-02 -3.782849771329e-02 +-3.852999521197e-02 -3.908944347460e-02 -3.950552068759e-02 -3.977742394431e-02 +-3.990486965171e-02 -3.988809209007e-02 -3.972784013937e-02 -3.942537219222e-02 +-3.898244927969e-02 -3.840132644254e-02 -3.768474238633e-02 -3.683590746490e-02 +-3.585849004241e-02 -3.475660128944e-02 -3.353477847430e-02 -3.219796681543e-02 +-3.075149996562e-02 -2.920107920358e-02 -2.755275141222e-02 -2.581288592724e-02 +-2.398815034318e-02 -2.208548536733e-02 -2.011207881489e-02 -1.807533884159e-02 +-1.598286651190e-02 -1.384242780324e-02 -1.166192514795e-02 -9.449368616029e-03 +-7.212846842601e-03 -4.960497804243e-03 -2.700479548737e-03 -4.409409822704e-04 +1.810007182417e-03 4.044321214475e-03 6.254052788899e-03 8.431376946610e-03 +1.056861949336e-02 1.265828374257e-02 1.469307650983e-02 1.666593327010e-02 +1.857004239157e-02 2.039886836419e-02 2.214617394453e-02 2.380604114285e-02 +2.537289098282e-02 2.684150196859e-02 2.820702719934e-02 2.946501007592e-02 +3.061139854973e-02 3.164255786935e-02 3.255528178579e-02 3.334680218296e-02 +3.401479710578e-02 3.455739716389e-02 3.497319029498e-02 3.526122487769e-02 +3.542101118961e-02 3.545252121225e-02 3.535618679028e-02 3.513289615849e-02 +3.478398885543e-02 3.431124904846e-02 3.371689730043e-02 3.300358081369e-02 +3.217436219224e-02 3.123270676812e-02 3.018246854296e-02 2.902787480027e-02 +2.777350944864e-02 2.642429516031e-02 2.498547437342e-02 2.346258923028e-02 +2.186146052724e-02 2.018816575514e-02 1.844901631213e-02 1.665053397331e-02 +1.479942670392e-02 1.290256390496e-02 1.096695118144e-02 8.999704725225e-03 +7.008025405165e-03 4.999172657959e-03 2.980438273595e-03 9.591201691588e-04 +-1.057503755487e-03 -3.062201587306e-03 -5.047813103120e-03 -7.007275115486e-03 +-8.933646372492e-03 -1.082013192444e-02 -1.266010687264e-02 -1.444713941799e-02 +-1.617501313000e-02 -1.783774835972e-02 -1.942962272361e-02 -2.094519058887e-02 +-2.237930149457e-02 -2.372711744690e-02 -2.498412903130e-02 -2.614617028833e-02 +-2.720943230507e-02 -2.817047547839e-02 -2.902624041133e-02 -2.977405740903e-02 +-3.041165454542e-02 -3.093716427746e-02 -3.134912858868e-02 -3.164650264916e-02 +-3.182865698466e-02 -3.189537815236e-02 -3.184686792677e-02 -3.168374100401e-02 +-3.140702123818e-02 -3.101813642883e-02 -3.051891168338e-02 -2.991156138346e-02 +-2.919867978912e-02 -2.838323031923e-02 -2.746853355148e-02 -2.645825398932e-02 +-2.535638564767e-02 -2.416723651317e-02 -2.289541193861e-02 -2.154579703466e-02 +-2.012353812540e-02 -1.863402333740e-02 -1.708286239459e-02 -1.547586569425e-02 +-1.381902274107e-02 -1.211848001905e-02 -1.038051838184e-02 -8.611530044460e-03 +-6.817995259627e-03 -5.006458763405e-03 -3.183506074999e-03 -1.355739735954e-03 +4.702444261774e-04 2.287880924952e-03 4.090658048933e-03 5.872141019292e-03 +7.625994789379e-03 9.346006406019e-03 1.102610685420e-02 1.266039230890e-02 +1.424314472013e-02 1.576885166011e-02 1.723222536401e-02 1.862822089924e-02 +1.995205340120e-02 2.119921431727e-02 2.236548660433e-02 2.344695882920e-02 +2.444003812529e-02 2.534146196321e-02 2.614830869725e-02 2.685800685435e-02 +2.746834313655e-02 2.797746911293e-02 2.838390658129e-02 2.868655158536e-02 +2.888467707741e-02 2.897793422157e-02 2.896635233780e-02 2.885033749128e-02 +2.863066973694e-02 2.830849903352e-02 2.788533984624e-02 2.736306446191e-02 +2.674389504468e-02 2.603039446512e-02 2.522545593952e-02 2.433229152056e-02 +2.335441948430e-02 2.229565066234e-02 2.116007377167e-02 1.995203979781e-02 +1.867614549062e-02 1.733721603445e-02 1.594028695760e-02 1.449058534836e-02 +1.299351044696e-02 1.145461368516e-02 9.879578246670e-03 8.274198223086e-03 +6.644357441323e-03 4.996008039433e-03 3.335148868278e-03 1.667803796964e-03 +3.832333388677e-15 -1.662253695995e-03 -3.312988328793e-03 -4.946296103549e-03 +-6.556351406844e-03 + Type L N + 0 1 11 +0.000000000000e+00 2.179313647908e-02 4.353035148500e-02 6.515589437070e-02 +8.661435557316e-02 1.078508357368e-01 1.288111131402e-01 1.494418088701e-01 +1.696905491932e-01 1.895061245890e-01 2.088386449143e-01 2.276396901883e-01 +2.458624564983e-01 2.634618965462e-01 2.803948543723e-01 2.966201938157e-01 +3.120989202896e-01 3.267942954758e-01 3.406719445652e-01 3.536999556995e-01 +3.658489712929e-01 3.770922709447e-01 3.874058456805e-01 3.967684632900e-01 +4.051617245613e-01 4.125701102424e-01 4.189810185926e-01 4.243847934197e-01 +4.287747425303e-01 4.321471465559e-01 4.345012581483e-01 4.358392915717e-01 +4.361664027526e-01 4.354906598801e-01 4.338230046825e-01 4.311772045361e-01 +4.275697955963e-01 4.230200171681e-01 4.175497375648e-01 4.111833717325e-01 +4.039477909438e-01 3.958722248923e-01 3.869881565445e-01 3.773292101283e-01 +3.669310326625e-01 3.558311694484e-01 3.440689339701e-01 3.316852726619e-01 +3.187226250217e-01 3.052247795617e-01 2.912367261015e-01 2.768045049186e-01 +2.619750532809e-01 2.467960498929e-01 2.313157577933e-01 2.155828662428e-01 +1.996463321450e-01 1.835552215413e-01 1.673585517181e-01 1.511051344618e-01 +1.348434209883e-01 1.186213490687e-01 1.024861928608e-01 8.648441594503e-02 +7.066152805026e-02 5.506194593974e-02 3.972885891084e-02 2.470409934367e-02 +1.002801871455e-02 -4.260630531350e-03 -1.812480687587e-02 -3.152928504390e-02 +-4.444075441587e-02 -5.682791023875e-02 -6.866153736488e-02 -7.991458627492e-02 +-9.056224117035e-02 -1.005819799495e-01 -1.099536259108e-01 -1.186593910576e-01 +-1.266839109077e-01 -1.340142707436e-01 -1.406400232677e-01 -1.465531976587e-01 +-1.517483000572e-01 -1.562223055341e-01 -1.599746416325e-01 -1.630071635954e-01 +-1.653241214276e-01 -1.669321189622e-01 -1.678400651353e-01 -1.680591176933e-01 +-1.676026195889e-01 -1.664860283409e-01 -1.647268386600e-01 -1.623444986645e-01 +-1.593603200295e-01 -1.557973824329e-01 -1.516804326828e-01 -1.470357789218e-01 +-1.418911803256e-01 -1.362757327206e-01 -1.302197505626e-01 -1.237546457239e-01 +-1.169128035497e-01 -1.097274566472e-01 -1.022325568785e-01 -9.446264603178e-02 +-8.645272564422e-02 -7.823812645441e-02 -6.985437795556e-02 -6.133707852051e-02 +-5.272176656260e-02 -4.404379319008e-02 -3.533819680296e-02 -2.663958007102e-02 +-1.798198971996e-02 -9.398799539355e-03 -9.225970114397e-04 7.414926056442e-03 +1.558307853021e-02 2.355227023146e-02 3.129410717687e-02 3.878148146859e-02 +4.598865555143e-02 5.289134057545e-02 5.946676862642e-02 6.569375861076e-02 +7.155277560676e-02 7.702598351955e-02 8.209729090292e-02 8.675238983800e-02 +9.097878778495e-02 9.476583235083e-02 9.810472894348e-02 1.009885513080e-01 +1.034122449693e-01 1.053726236294e-01 1.068683585957e-01 1.078999613413e-01 +1.084697593221e-01 1.085818652020e-01 1.082421396595e-01 1.074581479724e-01 +1.062391105989e-01 1.045958479944e-01 1.025407199239e-01 1.000875595466e-01 +9.725160257056e-02 9.404941178636e-02 9.049879730973e-02 8.661873287188e-02 +8.242926851147e-02 7.795144003197e-02 7.320717559788e-02 6.821919985121e-02 +6.301093593613e-02 5.760640582461e-02 5.203012933925e-02 4.630702227151e-02 +4.046229399383e-02 3.452134496283e-02 2.850966450844e-02 2.245272929924e-02 +1.637590286890e-02 1.030433658157e-02 4.262872405336e-03 -1.724052146652e-03 +-7.632496559132e-03 -1.343910700584e-02 -1.912120286645e-02 -2.465685976182e-02 +-3.002498881579e-02 -3.520541186869e-02 -4.017893238544e-02 -4.492740181995e-02 +-4.943378121662e-02 -5.368219785040e-02 -5.765799672723e-02 -6.134778678827e-02 +-6.473948168299e-02 -6.782233499842e-02 -7.058696985439e-02 -7.302540279695e-02 +-7.513106194530e-02 -7.689879936999e-02 -7.832489770306e-02 -7.940707100312e-02 +-8.014445992091e-02 -8.053762123268e-02 -8.058851183007e-02 -8.030046727682e-02 +-7.967817506226e-02 -7.872764270218e-02 -7.745616085613e-02 -7.587226164889e-02 +-7.398567240102e-02 -7.180726499017e-02 -6.934900108004e-02 -6.662387346879e-02 +-6.364584382149e-02 -6.042977706421e-02 -5.699137272778e-02 -5.334709353956e-02 +-4.951409156995e-02 -4.551013224788e-02 -4.135351656568e-02 -3.706300179806e-02 +-3.265772106416e-02 -2.815710206293e-02 -2.358078531356e-02 -1.894854223191e-02 +-1.428019337201e-02 -9.595527158838e-03 -4.914219434093e-03 -2.557541309840e-04 +4.360654612551e-03 8.916138600968e-03 1.339224969642e-02 1.777103162032e-02 +2.203508917061e-02 2.616765459631e-02 3.015265088436e-02 3.397475172781e-02 +3.761943795926e-02 4.107305024936e-02 4.432283788633e-02 4.735700346988e-02 +5.016474336993e-02 5.273628381917e-02 5.506291252654e-02 5.713700571763e-02 +5.895205052719e-02 6.050266268794e-02 6.178459947919e-02 6.279476791836e-02 +6.353122819741e-02 6.399319238558e-02 6.418101843872e-02 6.409619957396e-02 +6.374134908698e-02 6.312018070691e-02 6.223748460108e-02 6.109909915894e-02 +5.971187870037e-02 5.808365726915e-02 5.622320868722e-02 5.414020305894e-02 +5.184515992814e-02 4.934939830240e-02 4.666498377061e-02 4.380467294984e-02 +4.078185550705e-02 3.761049400912e-02 3.430506186180e-02 3.088047960438e-02 +2.735204983156e-02 2.373539101786e-02 2.004637052257e-02 1.630103705456e-02 +1.251555287685e-02 8.706126029876e-03 4.888942850580e-03 1.080101061262e-03 +-2.704456301719e-03 -6.449005854733e-03 -1.013810747059e-02 -1.375666626791e-02 +-1.728999274300e-02 -2.072386081036e-02 -2.404456352797e-02 -2.723896629411e-02 +-3.029455731476e-02 -3.319949515228e-02 -3.594265317999e-02 -3.851366078028e-02 +-4.090294113888e-02 -4.310174550227e-02 -4.510218378084e-02 -4.689725139583e-02 +-4.848085228438e-02 -4.984781799297e-02 -5.099392280627e-02 -5.191589487472e-02 +-5.261142332107e-02 -5.307916132229e-02 -5.331872518030e-02 -5.333068941089e-02 +-5.311657789653e-02 -5.267885116464e-02 -5.202088986843e-02 -5.114697456235e-02 +-5.006226187908e-02 -4.877275722901e-02 -4.728528415663e-02 -4.560745050123e-02 +-4.374761152173e-02 -4.171483015650e-02 -3.951883460044e-02 -3.716997339087e-02 +-3.467916820333e-02 -3.205786456648e-02 -2.931798071251e-02 -2.647185478601e-02 +-2.353219063955e-02 -2.051200244886e-02 -1.742455838377e-02 -1.428332357382e-02 +-1.110190260871e-02 -7.893981814469e-03 -4.673271545616e-03 -1.453448732228e-03 +1.751900081738e-03 4.929334975789e-03 8.065617937246e-03 1.114776696915e-02 +1.416310880441e-02 1.709933001595e-02 1.994452632029e-02 2.268724988081e-02 +2.531655442606e-02 2.782203800892e-02 3.019388324267e-02 3.242289486188e-02 +3.450053446752e-02 3.641895232851e-02 3.817101612440e-02 3.975033652761e-02 +4.115128953698e-02 4.236903548838e-02 4.339953468251e-02 4.423955958394e-02 +4.488670356038e-02 4.533938614526e-02 4.559685482141e-02 4.565918333805e-02 +4.552726658742e-02 4.520281208183e-02 4.468832808529e-02 4.398710846806e-02 +4.310321436509e-02 4.204145273253e-02 4.080735190866e-02 3.940713429764e-02 +3.784768630540e-02 3.613652566818e-02 3.428176632399e-02 3.229208098661e-02 +3.017666159085e-02 2.794517778511e-02 2.560773365507e-02 2.317482286836e-02 +2.065728243558e-02 1.806624528813e-02 1.541309187673e-02 1.270940099779e-02 +9.966900056893e-03 7.197414979788e-03 4.412819981767e-03 1.624987405761e-03 +-1.154262161871e-03 -3.913209291151e-03 -6.640284420206e-03 -9.324115679194e-03 +-1.195357563138e-02 -1.451782674183e-02 -1.700636539054e-02 -1.940906425357e-02 +-2.171621288381e-02 -2.391855633098e-02 -2.600733164970e-02 -2.797430215388e-02 +-2.981178928597e-02 -3.151270197986e-02 -3.307056340770e-02 -3.447953501202e-02 +-3.573443773653e-02 -3.683077038102e-02 -3.776472501805e-02 -3.853319942200e-02 +-3.913380647322e-02 -3.956488051348e-02 -3.982548064107e-02 -3.991539094731e-02 +-3.983511770864e-02 -3.958588356111e-02 -3.916961869685e-02 -3.858894913381e-02 +-3.784718212267e-02 -3.694828876587e-02 -3.589688393539e-02 -3.469820358660e-02 +-3.335807957590e-02 -3.188291209987e-02 -3.027963988299e-02 -2.855570824968e-02 +-2.671903522478e-02 -2.477797581401e-02 -2.274128462294e-02 -2.061807697903e-02 +-1.841778872704e-02 -1.615013487255e-02 -1.382506725260e-02 -1.145273141545e-02 +-9.043422894160e-03 -6.607543060106e-03 -4.155554743638e-03 -1.697937809094e-03 +7.548551292782e-04 3.192442665382e-03 5.604558050438e-03 7.981091953342e-03 +1.031213435602e-02 1.258801541199e-02 1.479934510156e-02 1.693705152268e-02 +1.899241766321e-02 2.095711650716e-02 2.282324433526e-02 2.458335208836e-02 +2.623047467085e-02 2.775815808054e-02 2.916048426097e-02 3.043209358222e-02 +3.156820486655e-02 3.256463288599e-02 3.341780326972e-02 3.412476477049e-02 +3.468319885036e-02 3.509142655758e-02 3.534841267794e-02 3.545376715538e-02 +3.540774378797e-02 3.521123621720e-02 3.486577123920e-02 3.437349947812e-02 +3.373718347255e-02 3.296018323647e-02 3.204643936670e-02 3.100045377861e-02 +2.982726816161e-02 2.853244025504e-02 2.712201805375e-02 2.560251206090e-02 +2.398086571340e-02 2.226442411211e-02 2.046090119586e-02 1.857834550417e-02 +1.662510467876e-02 1.460978885874e-02 1.254123312817e-02 1.042845917830e-02 +8.280636348997e-03 6.107042216126e-03 3.917022892714e-03 1.719953212175e-03 +-4.748030382492e-04 -2.657932666617e-03 -4.820212242419e-03 -6.952546716402e-03 +-9.046007333782e-03 -1.109186868417e-02 -1.308164473581e-02 -1.500712370661e-02 +-1.686040163002e-02 -1.863391447977e-02 -2.032046872421e-02 -2.191327018802e-02 +-2.340595110683e-02 -2.479259526816e-02 -2.606776114068e-02 -2.722650290280e-02 +-2.826438929035e-02 -2.917752019323e-02 -2.996254094007e-02 -3.061665422028e-02 +-3.113762960290e-02 -3.152381062200e-02 -3.177411940849e-02 -3.188805885902e-02 +-3.186571234266e-02 -3.170774095667e-02 -3.141537835273e-02 -3.099042316541e-02 +-3.043522908428e-02 -2.975269262116e-02 -2.894623863318e-02 -2.801980367190e-02 +-2.697781723715e-02 -2.582518102325e-02 -2.456724625301e-02 -2.320978920269e-02 +-2.175898502853e-02 -2.022138001172e-02 -1.860386234538e-02 -1.691363159244e-02 +-1.515816694857e-02 -1.334519444867e-02 -1.148265325965e-02 -9.578661205024e-03 +-7.641479670110e-03 -5.679478038152e-03 -3.701097809389e-03 -1.714816555726e-03 +2.708881362214e-04 2.247574581434e-03 4.206872621096e-03 6.140518806220e-03 +8.040390993455e-03 9.898542209267e-03 1.170723364232e-02 1.345896662807e-02 +1.514651349440e-02 1.676294714233e-02 1.830166924172e-02 1.975643692822e-02 +2.112138789423e-02 2.239106377415e-02 2.356043173148e-02 2.462490416344e-02 +2.558035644686e-02 2.642314265784e-02 2.715010920632e-02 2.775860633575e-02 +2.824649744724e-02 2.861216621701e-02 2.885452148515e-02 2.897299990333e-02 +2.896756633873e-02 2.883871204058e-02 2.858745058548e-02 2.821531162677e-02 +2.772433248241e-02 2.711704760501e-02 2.639647598612e-02 2.556610655562e-02 +2.462988164546e-02 2.359217859434e-02 2.245778957821e-02 2.123189975812e-02 +1.992006384398e-02 1.852818117902e-02 1.706246945562e-02 1.552943717875e-02 +1.393585499764e-02 1.228872603135e-02 1.059525531705e-02 8.862818513530e-03 +7.098929994781e-03 5.311210470988e-03 3.507354275343e-03 1.695096456355e-03 +-1.178201845162e-04 -1.923677970274e-03 -3.714817002090e-03 -5.483667451956e-03 +-7.222781358961e-03 -8.924863796434e-03 -1.058280328031e-02 -1.218970129275e-02 +-1.373890079919e-02 -1.522401364171e-02 -1.663894669672e-02 -1.797792669063e-02 +-1.923552357318e-02 -2.040667235442e-02 -2.148669331847e-02 -2.247131053399e-02 +-2.335666858892e-02 -2.413934748492e-02 -2.481637563465e-02 -2.538524091358e-02 +-2.584389972606e-02 -2.619078405428e-02 -2.642480646702e-02 -2.654536307404e-02 +-2.655233442062e-02 -2.644608432550e-02 -2.622745667403e-02 -2.589777018717e-02 +-2.545881119531e-02 -2.491282445423e-02 -2.426250204868e-02 -2.351097043711e-02 +-2.266177569858e-02 -2.171886705035e-02 -2.068657871186e-02 -1.956961019731e-02 +-1.837300512556e-02 -1.710212864223e-02 -1.576264355393e-02 -1.436048528026e-02 +-1.290183573343e-02 -1.139309623976e-02 -9.840859620859e-03 -8.251881555604e-03 +-6.633051346524e-03 -4.991362216394e-03 -3.333881262430e-03 -1.667719196465e-03 +-1.252029249129e-15 1.662169377033e-03 3.311729145596e-03 4.941696507830e-03 +6.545195062944e-03 + Type L N + 0 1 12 +0.000000000000e+00 2.353708990158e-02 4.700372424124e-02 7.032969852654e-02 +9.344530942980e-02 1.162816029389e-01 1.387706196013e-01 1.608456359111e-01 +1.824414009039e-01 2.034943670446e-01 2.239429145167e-01 2.437275680475e-01 +2.627912054346e-01 2.810792569734e-01 2.985398950222e-01 3.151242129802e-01 +3.307863929987e-01 3.454838617916e-01 3.591774339565e-01 3.718314422736e-01 +3.834138544972e-01 3.938963762135e-01 4.032545393913e-01 4.114677763133e-01 +4.185194786323e-01 4.243970413570e-01 4.290918916348e-01 4.325995022568e-01 +4.349193898750e-01 4.360550979795e-01 4.360141647480e-01 4.348080759372e-01 +4.324522030470e-01 4.289657270467e-01 4.243715480088e-01 4.186961810524e-01 +4.119696390512e-01 4.042253026151e-01 3.954997778998e-01 3.858327428509e-01 +3.752667825307e-01 3.638472142173e-01 3.516219030072e-01 3.386410686858e-01 +3.249570846632e-01 3.106242698036e-01 2.956986739995e-01 2.802378583656e-01 +2.643006709472e-01 2.479470188474e-01 2.312376376950e-01 2.142338593760e-01 +1.969973789599e-01 1.795900217460e-01 1.620735113556e-01 1.445092397843e-01 +1.269580403177e-01 1.094799641977e-01 9.213406190838e-02 7.497816992517e-02 +5.806870374771e-02 4.146045800476e-02 2.520641438815e-02 9.357558136381e-03 +-6.037296249583e-03 -2.093166941763e-02 -3.528157110542e-02 -4.904564305986e-02 +-6.218529043189e-02 -7.466480119359e-02 -8.645145317610e-02 -9.751560838008e-02 +-1.078307942646e-01 -1.173737717757e-01 -1.261245899322e-01 -1.340666268415e-01 +-1.411866170774e-01 -1.474746654061e-01 -1.529242469034e-01 -1.575321935658e-01 +-1.612986675667e-01 -1.642271213709e-01 -1.663242449674e-01 -1.675999005374e-01 +-1.680670449203e-01 -1.677416402926e-01 -1.666425535187e-01 -1.647914446778e-01 +-1.622126453124e-01 -1.589330269841e-01 -1.549818607578e-01 -1.503906682705e-01 +-1.451930650704e-01 -1.394245969404e-01 -1.331225699455e-01 -1.263258749621e-01 +-1.190748074691e-01 -1.114108833905e-01 -1.033766517948e-01 -9.501550526063e-02 +-8.637148872350e-02 -7.748910761920e-02 -6.841313613556e-02 -5.918842637876e-02 +-4.985971924994e-02 -4.047145781489e-02 -3.106760393315e-02 -2.169145889320e-02 +-1.238548877768e-02 -3.191155256908e-03 5.851247519595e-03 1.470274929490e-02 +2.332585273513e-02 3.168467454995e-02 3.974507817269e-02 4.747479751034e-02 +5.484355131576e-02 6.182314777826e-02 6.838757897434e-02 7.451310486650e-02 +8.017832658628e-02 8.536424878543e-02 9.005433088884e-02 9.423452713178e-02 +9.789331531380e-02 1.010217142514e-01 1.036132899601e-01 1.056641506473e-01 +1.071729306415e-01 1.081407634361e-01 1.085712440671e-01 1.084703810920e-01 +1.078465384785e-01 1.067103677557e-01 1.050747308170e-01 1.029546138047e-01 +1.003670325408e-01 9.733093000097e-02 9.386706636109e-02 8.999790217305e-02 +8.574747525279e-02 8.114127188606e-02 7.620609297763e-02 7.096991578680e-02 +6.546175190632e-02 5.971150215286e-02 5.374980904527e-02 4.760790755214e-02 +4.131747479179e-02 3.491047936708e-02 2.841903101303e-02 2.187523122841e-02 +1.531102555213e-02 8.758058132643e-03 2.247529222459e-03 -4.189943788083e-03 +-1.052446120516e-02 -1.672697116450e-02 -2.276939451983e-02 -2.862474397146e-02 +-3.426723695013e-02 -3.967240180334e-02 -4.481717686565e-02 -4.968000202968e-02 +-5.424090247206e-02 -5.848156422675e-02 -6.238540133771e-02 -6.593761436314e-02 +-6.912524004507e-02 -7.193719199910e-02 -7.436429232180e-02 -7.639929405484e-02 +-7.803689448736e-02 -7.927373932002e-02 -8.010841775533e-02 -8.054144862004e-02 +-8.057525766524e-02 -8.021414622903e-02 -7.946425148455e-02 -7.833349853277e-02 +-7.683154463486e-02 -7.496971591223e-02 -7.276093687458e-02 -7.021965316594e-02 +-6.736174794674e-02 -6.420445235596e-02 -6.076625052070e-02 -5.706677960214e-02 +-5.312672538540e-02 -4.896771393767e-02 -4.461219987235e-02 -4.008335176876e-02 +-3.540493530523e-02 -3.060119466994e-02 -2.569673281675e-02 -2.071639113458e-02 +-1.568512909669e-02 -1.062790445193e-02 -5.569554513084e-03 -5.346790876653e-04 +4.452474415033e-03 9.368123181620e-03 1.418905799432e-02 1.889274854904e-02 +2.345744462895e-02 2.786227269385e-02 3.208732747020e-02 3.611375815340e-02 +3.992384886211e-02 4.350109301388e-02 4.683026132252e-02 4.989746314961e-02 +5.269020097593e-02 5.519741779228e-02 5.740953724413e-02 5.931849639975e-02 +6.091777104672e-02 6.220239345799e-02 6.316896260401e-02 6.381564682340e-02 +6.414217899965e-02 6.414984432661e-02 6.384146077934e-02 6.322135244057e-02 +6.229531586555e-02 6.107057969925e-02 5.955575779032e-02 5.776079607494e-02 +5.569691353103e-02 5.337653752900e-02 5.081323392948e-02 4.802163230036e-02 +4.501734664615e-02 4.181689206068e-02 3.843759773068e-02 3.489751673178e-02 +3.121533307059e-02 2.741026643610e-02 2.350197513124e-02 1.951045766075e-02 +1.545595345435e-02 1.135884320487e-02 7.239549299492e-03 3.118436818400e-03 +-9.842844310189e-04 -5.048656384379e-03 -9.055067245289e-03 -1.298434362790e-02 +-1.681783989414e-02 -2.053752427915e-02 -2.412606141631e-02 -2.756689089357e-02 +-3.084430149349e-02 -3.394350079322e-02 -3.685067982415e-02 -3.955307251732e-02 +-4.203900968671e-02 -4.429796733090e-02 -4.632060906158e-02 -4.809882249738e-02 +-4.962574949065e-02 -5.089581008577e-02 -5.190472013790e-02 -5.264950255174e-02 +-5.312849213097e-02 -5.334133405930e-02 -5.328897606445e-02 -5.297365434650e-02 +-5.239887338089e-02 -5.156937973537e-02 -5.049113006756e-02 -4.917125349694e-02 +-4.761800857021e-02 -4.584073506414e-02 -4.384980089242e-02 -4.165654440541e-02 +-3.927321239134e-02 -3.671289410659e-02 -3.398945167938e-02 -3.111744724624e-02 +-2.811206719445e-02 -2.498904389459e-02 -2.176457531741e-02 -1.845524293660e-02 +-1.507792832477e-02 -1.164972885379e-02 -8.187872912099e-03 -4.709635051572e-03 +-1.232251474072e-03 2.227163736248e-03 5.651701235047e-03 9.024737502409e-03 +1.233001400794e-02 1.555171408592e-02 1.867453716340e-02 2.168376999907e-02 +2.456535460730e-02 2.730595255964e-02 2.989300537537e-02 3.231479073357e-02 +3.456047426051e-02 3.662015666949e-02 3.848491605360e-02 4.014684515668e-02 +4.159908347314e-02 4.283584405281e-02 4.385243491366e-02 4.464527499170e-02 +4.521190458397e-02 4.555099026790e-02 4.566232430652e-02 4.554681857598e-02 +4.520649307801e-02 4.464445912564e-02 4.386489731591e-02 4.287303042770e-02 +4.167509140666e-02 4.027828662191e-02 3.869075460117e-02 3.692152047148e-02 +3.498044635225e-02 3.287817796553e-02 3.062608774515e-02 2.823621474180e-02 +2.572120163483e-02 2.309422917390e-02 2.036894838409e-02 1.755941087725e-02 +1.467999761934e-02 1.174534650916e-02 8.770279127717e-03 5.769727019243e-03 +2.758657865373e-03 -2.479980876935e-04 -3.235420992346e-03 -6.188973401328e-03 +-9.094270963014e-03 -1.193725147333e-02 -1.470424195731e-02 -1.738202346467e-02 +-1.995789327655e-02 -2.241972423481e-02 -2.475602092095e-02 -2.695597242837e-02 +-2.900950148962e-02 -3.090730973942e-02 -3.264091891419e-02 -3.420270780943e-02 +-3.558594483822e-02 -3.678481605604e-02 -3.779444854007e-02 -3.861092903422e-02 +-3.923131779467e-02 -3.965365759447e-02 -3.987697786926e-02 -3.990129401035e-02 +-3.972760183458e-02 -3.935786728378e-02 -3.879501142990e-02 -3.804289088384e-02 +-3.710627372834e-02 -3.599081111610e-02 -3.470300469494e-02 -3.325017004113e-02 +-3.164039630063e-02 -2.988250225524e-02 -2.798598904736e-02 -2.596098981158e-02 +-2.381821647562e-02 -2.156890400536e-02 -1.922475237966e-02 -1.679786659066e-02 +-1.430069497284e-02 -1.174596617125e-02 -9.146625064051e-03 -6.515767958077e-03 +-3.866577378258e-03 -1.212256771825e-03 1.434034552759e-03 4.059245935026e-03 +6.650499007036e-03 9.195150166160e-03 1.168085157626e-02 1.409561040614e-02 +1.642784602408e-02 1.866644487885e-02 2.080081280995e-02 2.282092454377e-02 +2.471737014747e-02 2.648139822798e-02 2.810495568084e-02 2.958072381109e-02 +3.090215066733e-02 3.206347944897e-02 3.305977286697e-02 3.388693335837e-02 +3.454171907583e-02 3.502175559447e-02 3.532554329940e-02 3.545246043867e-02 +3.540276184772e-02 3.517757337235e-02 3.477888203842e-02 3.420952203676e-02 +3.347315661224e-02 3.257425596523e-02 3.151807129299e-02 3.031060511655e-02 +2.895857805645e-02 2.746939223695e-02 2.585109151430e-02 2.411231873911e-02 +2.226227027654e-02 2.031064802024e-02 1.826760914738e-02 1.614371387180e-02 +1.394987146110e-02 1.169728479064e-02 9.397393713563e-03 7.061817530047e-03 +4.702296842670e-03 2.330635085978e-03 -4.135998106041e-05 -2.401934532288e-03 +-4.739446396347e-03 -7.042421962398e-03 -9.299611993816e-03 -1.150004608071e-02 +-1.363308546998e-02 -1.568847402071e-02 -1.765638704319e-02 -1.952747779094e-02 +-2.129292138817e-02 -2.294445598809e-02 -2.447442097247e-02 -2.587579201777e-02 +-2.714221286967e-02 -2.826802368440e-02 -2.924828581278e-02 -3.007880292119e-02 +-3.075613836144e-02 -3.127762872114e-02 -3.164139350451e-02 -3.184634091319e-02 +-3.189216971562e-02 -3.177936721315e-02 -3.150920332967e-02 -3.108372087090e-02 +-3.050572201797e-02 -2.977875113787e-02 -2.890707401143e-02 -2.789565359657e-02 +-2.675012246076e-02 -2.547675203290e-02 -2.408241883942e-02 -2.257456790371e-02 +-2.096117350112e-02 -1.925069747389e-02 -1.745204532154e-02 -1.557452029241e-02 +-1.362777571047e-02 -1.162176577991e-02 -9.566695115673e-03 -7.472967254063e-03 +-5.351132400982e-03 -3.211834678294e-03 -1.065759130111e-03 1.076421249074e-03 +3.204098203719e-03 5.306780365748e-03 7.374144607736e-03 9.396086351181e-03 +1.136276858645e-02 1.326466936830e-02 1.509262755937e-02 1.683788660358e-02 +1.849213612178e-02 2.004755113398e-02 2.149682872434e-02 2.283322197900e-02 +2.405057104052e-02 2.514333113776e-02 2.610659746533e-02 2.693612680282e-02 +2.762835578046e-02 2.818041571472e-02 2.859014395465e-02 2.885609169692e-02 +2.897752824546e-02 2.895444170862e-02 2.878753614502e-02 2.847822518599e-02 +2.802862218038e-02 2.744152692387e-02 2.672040905195e-02 2.586938819154e-02 +2.489321098195e-02 2.379722509086e-02 2.258735036519e-02 2.127004727041e-02 +1.985228278456e-02 1.834149392510e-02 1.674554909766e-02 1.507270746599e-02 +1.333157655084e-02 1.153106827415e-02 9.680353671115e-03 7.788816498768e-03 +5.866005974164e-03 3.921588878623e-03 1.965301266782e-03 6.900020163358e-06 +-1.943885515106e-03 -3.877401568169e-03 -5.784117425114e-03 -7.654672120294e-03 +-9.479920109940e-03 -1.125097570653e-02 -1.295925605940e-02 -1.459652247490e-02 +-1.615491987864e-02 -1.762701423181e-02 -1.900582772493e-02 -2.028487158338e-02 +-2.145817633196e-02 -2.252031937854e-02 -2.346644979062e-02 -2.429231015303e-02 +-2.499425540968e-02 -2.556926860766e-02 -2.601497347730e-02 -2.632964379787e-02 +-2.651220951470e-02 -2.656225958916e-02 -2.648004157988e-02 -2.626645796893e-02 +-2.592305926328e-02 -2.545203391726e-02 -2.485619513762e-02 -2.413896464740e-02 +-2.330435350019e-02 -2.235694005013e-02 -2.130184519668e-02 -2.014470503651e-02 +-1.889164106679e-02 -1.754922809596e-02 -1.612446002881e-02 -1.462471370237e-02 +-1.305771095848e-02 -1.143147914647e-02 -9.754310256928e-03 -8.034718893153e-03 +-6.281399292208e-03 -4.503181611217e-03 -2.708987697548e-03 -9.077865632151e-04 +8.914502154210e-04 2.679792952024e-03 4.448397939574e-03 6.188550957985e-03 +7.891709987112e-03 9.549546916831e-03 1.115398805161e-02 1.269725321357e-02 +1.417189325570e-02 1.557082580540e-02 1.688736906771e-02 1.811527352810e-02 +1.924875140520e-02 2.028250371582e-02 2.121174482664e-02 2.203222437996e-02 +2.274024649412e-02 2.333268615299e-02 2.380700271336e-02 2.416125047307e-02 +2.439408625788e-02 2.450477399972e-02 2.449318629390e-02 2.435980293789e-02 +2.410570646921e-02 2.373257473464e-02 2.324267053749e-02 2.263882842416e-02 +2.192443868490e-02 2.110342865723e-02 2.018024143375e-02 1.915981208813e-02 +1.804754154540e-02 1.684926823351e-02 1.557123766391e-02 1.422007009836e-02 +1.280272646852e-02 1.132647272246e-02 9.798842779793e-03 8.227600283368e-03 +6.620699340510e-03 4.986244451547e-03 3.332449826440e-03 1.667598292818e-03 +5.962649506421e-14 -1.662048875611e-03 -3.310307220713e-03 -4.936629666149e-03 +-6.533006660971e-03 + Type L N + 0 2 0 +0.000000000000e+00 6.151333446762e-06 2.460487800223e-05 5.535915194780e-05 +9.841173105899e-05 1.537592083733e-04 2.213972082458e-04 3.013203802203e-04 +3.935224034400e-04 4.979959858620e-04 6.147328643748e-04 7.437238061971e-04 +8.849586091118e-04 1.038426102541e-03 1.204114148362e-03 1.382009641477e-03 +1.572098511301e-03 1.774365722741e-03 1.988795277015e-03 2.215370213351e-03 +2.454072609935e-03 2.704883585496e-03 2.967783300640e-03 3.242750959398e-03 +3.529764810944e-03 3.828802151048e-03 4.139839324043e-03 4.462851724476e-03 +4.797813799119e-03 5.144699048843e-03 5.503480030702e-03 5.874128360038e-03 +6.256614712691e-03 6.650908827169e-03 7.056979507058e-03 7.474794623387e-03 +7.904321117090e-03 8.345525001577e-03 8.798371365319e-03 9.262824374523e-03 +9.738847275919e-03 1.022640239958e-02 1.072545116179e-02 1.123595406802e-02 +1.175787071599e-02 1.229115979875e-02 1.283577910784e-02 1.339168553658e-02 +1.395883508334e-02 1.453718285494e-02 1.512668307009e-02 1.572728906294e-02 +1.633895328661e-02 1.696162731691e-02 1.759526185599e-02 1.823980673619e-02 +1.889521092388e-02 1.956142252333e-02 2.023838878078e-02 2.092605608844e-02 +2.162436998860e-02 2.233327517785e-02 2.305271551134e-02 2.378263400702e-02 +2.452297285010e-02 2.527367339742e-02 2.603467618203e-02 2.680592091770e-02 +2.758734650356e-02 2.837889102883e-02 2.918049177751e-02 2.999208523327e-02 +3.081360708426e-02 3.164499222813e-02 3.248617477692e-02 3.333708806224e-02 +3.419766464030e-02 3.506783629711e-02 3.594753405376e-02 3.683668817167e-02 +3.773522815796e-02 3.864308277085e-02 3.956018002516e-02 4.048644719780e-02 +4.142181083340e-02 4.236619674989e-02 4.331953004423e-02 4.428173509816e-02 +4.525273558400e-02 4.623245447050e-02 4.722081402876e-02 4.821773583819e-02 +4.922314079254e-02 5.023694910596e-02 5.125908031911e-02 5.228945330537e-02 +5.332798627704e-02 5.437459679160e-02 5.542920175808e-02 5.649171744338e-02 +5.756205947875e-02 5.864014286621e-02 5.972588198510e-02 6.081919059865e-02 +6.191998186058e-02 6.302816832176e-02 6.414366193692e-02 6.526637407142e-02 +6.639621550800e-02 6.753309645369e-02 6.867692654663e-02 6.982761486302e-02 +7.098506992412e-02 7.214919970320e-02 7.331991163267e-02 7.449711261111e-02 +7.568070901045e-02 7.687060668312e-02 7.806671096926e-02 7.926892670401e-02 +8.047715822478e-02 8.169130937856e-02 8.291128352931e-02 8.413698356539e-02 +8.536831190694e-02 8.660517051338e-02 8.784746089095e-02 8.909508410021e-02 +9.034794076364e-02 9.160593107325e-02 9.286895479821e-02 9.413691129255e-02 +9.540969950282e-02 9.668721797590e-02 9.796936486668e-02 9.925603794593e-02 +1.005471346081e-01 1.018425518791e-01 1.031421864243e-01 1.044459345564e-01 +1.057536922434e-01 1.070653551164e-01 1.083808184777e-01 1.096999773088e-01 +1.110227262786e-01 1.123489597511e-01 1.136785717938e-01 1.150114561856e-01 +1.163475064250e-01 1.176866157382e-01 1.190286770876e-01 1.203735831792e-01 +1.217212264716e-01 1.230714991840e-01 1.244242933040e-01 1.257795005966e-01 +1.271370126117e-01 1.284967206931e-01 1.298585159862e-01 1.312222894466e-01 +1.325879318487e-01 1.339553337933e-01 1.353243857168e-01 1.366949778989e-01 +1.380670004714e-01 1.394403434265e-01 1.408148966248e-01 1.421905498044e-01 +1.435671925888e-01 1.449447144955e-01 1.463230049445e-01 1.477019532664e-01 +1.490814487115e-01 1.504613804574e-01 1.518416376183e-01 1.532221092527e-01 +1.546026843724e-01 1.559832519508e-01 1.573637009312e-01 1.587439202355e-01 +1.601237987727e-01 1.615032254470e-01 1.628820891666e-01 1.642602788521e-01 +1.656376834450e-01 1.670141919159e-01 1.683896932733e-01 1.697640765719e-01 +1.711372309210e-01 1.725090454930e-01 1.738794095319e-01 1.752482123615e-01 +1.766153433942e-01 1.779806921391e-01 1.793441482104e-01 1.807056013362e-01 +1.820649413663e-01 1.834220582810e-01 1.847768421993e-01 1.861291833873e-01 +1.874789722667e-01 1.888260994226e-01 1.901704556126e-01 1.915119317744e-01 +1.928504190344e-01 1.941858087161e-01 1.955179923480e-01 1.968468616722e-01 +1.981723086522e-01 1.994942254817e-01 2.008125045921e-01 2.021270386612e-01 +2.034377206212e-01 2.047444436666e-01 2.060471012624e-01 2.073455871525e-01 +2.086397953674e-01 2.099296202323e-01 2.112149563750e-01 2.124956987344e-01 +2.137717425678e-01 2.150429834592e-01 2.163093173272e-01 2.175706404327e-01 +2.188268493871e-01 2.200778411595e-01 2.213235130854e-01 2.225637628736e-01 +2.237984886144e-01 2.250275887872e-01 2.262509622683e-01 2.274685083383e-01 +2.286801266899e-01 2.298857174355e-01 2.310851811145e-01 2.322784187013e-01 +2.334653316120e-01 2.346458217128e-01 2.358197913265e-01 2.369871432407e-01 +2.381477807144e-01 2.393016074857e-01 2.404485277791e-01 2.415884463125e-01 +2.427212683044e-01 2.438468994814e-01 2.449652460847e-01 2.460762148778e-01 +2.471797131530e-01 2.482756487386e-01 2.493639300059e-01 2.504444658760e-01 +2.515171658267e-01 2.525819398992e-01 2.536386987050e-01 2.546873534324e-01 +2.557278158537e-01 2.567599983310e-01 2.577838138234e-01 2.587991758936e-01 +2.598059987137e-01 2.608041970725e-01 2.617936863812e-01 2.627743826801e-01 +2.637462026449e-01 2.647090635926e-01 2.656628834882e-01 2.666075809504e-01 +2.675430752579e-01 2.684692863554e-01 2.693861348596e-01 2.702935420651e-01 +2.711914299504e-01 2.720797211832e-01 2.729583391272e-01 2.738272078467e-01 +2.746862521131e-01 2.755353974098e-01 2.763745699386e-01 2.772036966244e-01 +2.780227051209e-01 2.788315238163e-01 2.796300818381e-01 2.804183090588e-01 +2.811961361010e-01 2.819634943422e-01 2.827203159204e-01 2.834665337389e-01 +2.842020814712e-01 2.849268935661e-01 2.856409052524e-01 2.863440525436e-01 +2.870362722429e-01 2.877175019478e-01 2.883876800545e-01 2.890467457627e-01 +2.896946390799e-01 2.903313008259e-01 2.909566726372e-01 2.915706969711e-01 +2.921733171103e-01 2.927644771665e-01 2.933441220852e-01 2.939121976490e-01 +2.944686504824e-01 2.950134280548e-01 2.955464786849e-01 2.960677515446e-01 +2.965771966622e-01 2.970747649265e-01 2.975604080899e-01 2.980340787726e-01 +2.984957304652e-01 2.989453175330e-01 2.993827952183e-01 2.998081196445e-01 +3.002212478188e-01 3.006221376354e-01 3.010107478787e-01 3.013870382261e-01 +3.017509692506e-01 3.021025024244e-01 3.024416001209e-01 3.027682256178e-01 +3.030823430996e-01 3.033839176601e-01 3.036729153050e-01 3.039493029542e-01 +3.042130484442e-01 3.044641205303e-01 3.047024888889e-01 3.049281241194e-01 +3.051409977466e-01 3.053410822225e-01 3.055283509279e-01 3.057027781750e-01 +3.058643392084e-01 3.060130102071e-01 3.061487682862e-01 3.062715914985e-01 +3.063814588357e-01 3.064783502299e-01 3.065622465553e-01 3.066331296288e-01 +3.066909822118e-01 3.067357880110e-01 3.067675316796e-01 3.067861988179e-01 +3.067917759749e-01 3.067842506484e-01 3.067636112863e-01 3.067298472868e-01 +3.066829489995e-01 3.066229077256e-01 3.065497157184e-01 3.064633661839e-01 +3.063638532809e-01 3.062511721212e-01 3.061253187701e-01 3.059862902461e-01 +3.058340845212e-01 3.056687005208e-01 3.054901381235e-01 3.052983981609e-01 +3.050934824175e-01 3.048753936301e-01 3.046441354877e-01 3.043997126308e-01 +3.041421306508e-01 3.038713960897e-01 3.035875164389e-01 3.032905001388e-01 +3.029803565781e-01 3.026570960922e-01 3.023207299629e-01 3.019712704172e-01 +3.016087306257e-01 3.012331247021e-01 3.008444677015e-01 3.004427756188e-01 +3.000280653881e-01 2.996003548804e-01 2.991596629023e-01 2.987060091947e-01 +2.982394144306e-01 2.977599002136e-01 2.972674890760e-01 2.967622044769e-01 +2.962440708002e-01 2.957131133525e-01 2.951693583611e-01 2.946128329715e-01 +2.940435652458e-01 2.934615841594e-01 2.928669195994e-01 2.922596023620e-01 +2.916396641496e-01 2.910071375683e-01 2.903620561257e-01 2.897044542274e-01 +2.890343671748e-01 2.883518311621e-01 2.876568832728e-01 2.869495614777e-01 +2.862299046309e-01 2.854979524671e-01 2.847537455983e-01 2.839973255105e-01 +2.832287345605e-01 2.824480159721e-01 2.816552138333e-01 2.808503730919e-01 +2.800335395528e-01 2.792047598735e-01 2.783640815610e-01 2.775115529676e-01 +2.766472232874e-01 2.757711425520e-01 2.748833616268e-01 2.739839322068e-01 +2.730729068125e-01 2.721503387859e-01 2.712162822861e-01 2.702707922851e-01 +2.693139245633e-01 2.683457357052e-01 2.673662830950e-01 2.663756249120e-01 +2.653738201259e-01 2.643609284924e-01 2.633370105482e-01 2.623021276065e-01 +2.612563417521e-01 2.601997158362e-01 2.591323134720e-01 2.580541990295e-01 +2.569654376303e-01 2.558660951426e-01 2.547562381760e-01 2.536359340764e-01 +2.525052509208e-01 2.513642575117e-01 2.502130233718e-01 2.490516187388e-01 +2.478801145597e-01 2.466985824853e-01 2.455070948648e-01 2.443057247399e-01 +2.430945458392e-01 2.418736325726e-01 2.406430600253e-01 2.394029039523e-01 +2.381532407721e-01 2.368941475610e-01 2.356257020471e-01 2.343479826045e-01 +2.330610682465e-01 2.317650386205e-01 2.304599740009e-01 2.291459552836e-01 +2.278230639793e-01 2.264913822074e-01 2.251509926894e-01 2.238019787431e-01 +2.224444242756e-01 2.210784137768e-01 2.197040323134e-01 2.183213655220e-01 +2.169304996024e-01 2.155315213114e-01 2.141245179554e-01 2.127095773847e-01 +2.112867879857e-01 2.098562386748e-01 2.084180188913e-01 2.069722185906e-01 +2.055189282373e-01 2.040582387984e-01 2.025902417358e-01 2.011150290001e-01 +1.996326930228e-01 1.981433267098e-01 1.966470234339e-01 1.951438770279e-01 +1.936339817772e-01 1.921174324128e-01 1.905943241041e-01 1.890647524514e-01 +1.875288134788e-01 1.859866036266e-01 1.844382197446e-01 1.828837590838e-01 +1.813233192899e-01 1.797569983950e-01 1.781848948109e-01 1.766071073212e-01 +1.750237350739e-01 1.734348775737e-01 1.718406346748e-01 1.702411065730e-01 +1.686363937981e-01 1.670265972067e-01 1.654118179737e-01 1.637921575857e-01 +1.621677178324e-01 1.605386007994e-01 1.589049088604e-01 1.572667446692e-01 +1.556242111524e-01 1.539774115009e-01 1.523264491631e-01 1.506714278361e-01 +1.490124514585e-01 1.473496242024e-01 1.456830504654e-01 1.440128348629e-01 +1.423390822201e-01 1.406618975642e-01 1.389813861166e-01 1.372976532846e-01 +1.356108046539e-01 1.339209459803e-01 1.322281831820e-01 1.305326223318e-01 +1.288343696485e-01 1.271335314898e-01 1.254302143434e-01 1.237245248199e-01 +1.220165696442e-01 1.203064556477e-01 1.185942897603e-01 1.168801790025e-01 +1.151642304774e-01 1.134465513624e-01 1.117272489014e-01 1.100064303970e-01 +1.082842032022e-01 1.065606747124e-01 1.048359523575e-01 1.031101435940e-01 +1.013833558967e-01 9.965569675111e-02 9.792727364492e-02 9.619819406051e-02 +9.446856546670e-02 9.273849531082e-02 9.100809101076e-02 8.927745994697e-02 +8.754670945452e-02 8.581594681513e-02 8.408527924925e-02 8.235481390807e-02 +8.062465786567e-02 7.889491811102e-02 7.716570154014e-02 7.543711494817e-02 +7.370926502151e-02 7.198225832993e-02 7.025620131871e-02 6.853120030082e-02 +6.680736144908e-02 6.508479078836e-02 6.336359418773e-02 6.164387735277e-02 +5.992574581770e-02 5.820930493774e-02 5.649465988130e-02 5.478191562229e-02 +5.307117693247e-02 5.136254837371e-02 4.965613429041e-02 4.795203880181e-02 +4.625036579443e-02 4.455121891444e-02 4.285470156015e-02 4.116091687443e-02 +3.946996773719e-02 3.778195675792e-02 3.609698626820e-02 3.441515831429e-02 +3.273657464967e-02 3.106133672767e-02 2.938954569415e-02 2.772130238011e-02 +2.605670729441e-02 2.439586061650e-02 2.273886218918e-02 2.108581151136e-02 +1.943680773091e-02 1.779194963746e-02 1.615133565533e-02 1.451506383642e-02 +1.288323185313e-02 1.125593699137e-02 9.633276143567e-03 8.015345801684e-03 +6.402242050331e-03 4.794060559864e-03 3.190896579538e-03 1.592844930701e-03 +1.458260599757e-14 -1.587544267285e-03 -3.169694374082e-03 -4.746357278045e-03 +-6.317440398246e-03 + Type L N + 0 2 1 +0.000000000000e+00 1.531812340169e-05 6.126948195257e-05 1.378450217335e-04 +2.450296627545e-04 3.828022948606e-04 5.511357836816e-04 7.499969752689e-04 +9.793467030332e-04 1.239139794813e-03 1.529325081628e-03 1.849845407535e-03 +2.200637640512e-03 2.581632684502e-03 2.992755492811e-03 3.433925082305e-03 +3.905054548999e-03 4.406051084664e-03 4.936815994632e-03 5.497244716642e-03 +6.087226840902e-03 6.706646131177e-03 7.355380547103e-03 8.033302267492e-03 +8.740277714834e-03 9.476167580838e-03 1.024082685315e-02 1.103410484303e-02 +1.185584521429e-02 1.270588601313e-02 1.358405969917e-02 1.449019317754e-02 +1.542410783195e-02 1.638561955894e-02 1.737453880305e-02 1.839067059313e-02 +1.943381457961e-02 2.050376507291e-02 2.160031108270e-02 2.272323635834e-02 +2.387231943022e-02 2.504733365214e-02 2.624804724465e-02 2.747422333942e-02 +2.872562002452e-02 3.000199039070e-02 3.130308257862e-02 3.262863982701e-02 +3.397840052177e-02 3.535209824602e-02 3.674946183101e-02 3.817021540800e-02 +3.961407846100e-02 4.108076588039e-02 4.256998801741e-02 4.408145073957e-02 +4.561485548685e-02 4.716989932875e-02 4.874627502223e-02 5.034367107038e-02 +5.196177178197e-02 5.360025733177e-02 5.525880382165e-02 5.693708334246e-02 +5.863476403671e-02 6.035151016190e-02 6.208698215470e-02 6.384083669577e-02 +6.561272677535e-02 6.740230175951e-02 6.920920745711e-02 7.103308618742e-02 +7.287357684838e-02 7.473031498559e-02 7.660293286182e-02 7.849105952721e-02 +8.039432089007e-02 8.231233978824e-02 8.424473606111e-02 8.619112662205e-02 +8.815112553158e-02 9.012434407094e-02 9.211039081622e-02 9.410887171302e-02 +9.611939015157e-02 9.814154704239e-02 1.001749408923e-01 1.022191678810e-01 +1.042738219380e-01 1.063384948201e-01 1.084127761890e-01 1.104962536896e-01 +1.125885130285e-01 1.146891380531e-01 1.167977108304e-01 1.189138117271e-01 +1.210370194893e-01 1.231669113224e-01 1.253030629721e-01 1.274450488047e-01 +1.295924418883e-01 1.317448140741e-01 1.339017360777e-01 1.360627775606e-01 +1.382275072125e-01 1.403954928328e-01 1.425663014132e-01 1.447394992196e-01 +1.469146518750e-01 1.490913244415e-01 1.512690815034e-01 1.534474872496e-01 +1.556261055565e-01 1.578045000709e-01 1.599822342926e-01 1.621588716574e-01 +1.643339756200e-01 1.665071097367e-01 1.686778377484e-01 1.708457236630e-01 +1.730103318384e-01 1.751712270650e-01 1.773279746482e-01 1.794801404905e-01 +1.816272911743e-01 1.837689940436e-01 1.859048172859e-01 1.880343300143e-01 +1.901571023487e-01 1.922727054973e-01 1.943807118380e-01 1.964806949988e-01 +1.985722299387e-01 2.006548930280e-01 2.027282621286e-01 2.047919166733e-01 +2.068454377458e-01 2.088884081593e-01 2.109204125357e-01 2.129410373837e-01 +2.149498711770e-01 2.169465044320e-01 2.189305297846e-01 2.209015420676e-01 +2.228591383867e-01 2.248029181965e-01 2.267324833757e-01 2.286474383027e-01 +2.305473899294e-01 2.324319478554e-01 2.343007244016e-01 2.361533346828e-01 +2.379893966803e-01 2.398085313134e-01 2.416103625110e-01 2.433945172818e-01 +2.451606257844e-01 2.469083213969e-01 2.486372407853e-01 2.503470239719e-01 +2.520373144027e-01 2.537077590138e-01 2.553580082979e-01 2.569877163696e-01 +2.585965410301e-01 2.601841438308e-01 2.617501901369e-01 2.632943491899e-01 +2.648162941690e-01 2.663157022524e-01 2.677922546771e-01 2.692456367985e-01 +2.706755381492e-01 2.720816524961e-01 2.734636778979e-01 2.748213167611e-01 +2.761542758950e-01 2.774622665664e-01 2.787450045528e-01 2.800022101955e-01 +2.812336084509e-01 2.824389289415e-01 2.836179060060e-01 2.847702787484e-01 +2.858957910856e-01 2.869941917954e-01 2.880652345620e-01 2.891086780217e-01 +2.901242858070e-01 2.911118265905e-01 2.920710741263e-01 2.930018072925e-01 +2.939038101309e-01 2.947768718866e-01 2.956207870465e-01 2.964353553767e-01 +2.972203819589e-01 2.979756772254e-01 2.987010569940e-01 2.993963425011e-01 +3.000613604334e-01 3.006959429600e-01 3.012999277619e-01 3.018731580613e-01 +3.024154826495e-01 3.029267559140e-01 3.034068378642e-01 3.038555941563e-01 +3.042728961170e-01 3.046586207660e-01 3.050126508376e-01 3.053348748012e-01 +3.056251868804e-01 3.058834870714e-01 3.061096811600e-01 3.063036807379e-01 +3.064654032169e-01 3.065947718436e-01 3.066917157114e-01 3.067561697721e-01 +3.067880748467e-01 3.067873776342e-01 3.067540307204e-01 3.066879925844e-01 +3.065892276045e-01 3.064577060637e-01 3.062934041526e-01 3.060963039724e-01 +3.058663935363e-01 3.056036667694e-01 3.053081235086e-01 3.049797694999e-01 +3.046186163960e-01 3.042246817517e-01 3.037979890185e-01 3.033385675387e-01 +3.028464525373e-01 3.023216851136e-01 3.017643122315e-01 3.011743867083e-01 +3.005519672032e-01 2.998971182038e-01 2.992099100119e-01 2.984904187284e-01 +2.977387262371e-01 2.969549201865e-01 2.961390939721e-01 2.952913467161e-01 +2.944117832470e-01 2.935005140777e-01 2.925576553825e-01 2.915833289735e-01 +2.905776622752e-01 2.895407882988e-01 2.884728456147e-01 2.873739783248e-01 +2.862443360330e-01 2.850840738152e-01 2.838933521878e-01 2.826723370758e-01 +2.814211997793e-01 2.801401169391e-01 2.788292705020e-01 2.774888476838e-01 +2.761190409326e-01 2.747200478905e-01 2.732920713544e-01 2.718353192356e-01 +2.703500045193e-01 2.688363452219e-01 2.672945643488e-01 2.657248898497e-01 +2.641275545746e-01 2.625027962275e-01 2.608508573202e-01 2.591719851246e-01 +2.574664316246e-01 2.557344534665e-01 2.539763119094e-01 2.521922727737e-01 +2.503826063901e-01 2.485475875462e-01 2.466874954338e-01 2.448026135942e-01 +2.428932298635e-01 2.409596363168e-01 2.390021292116e-01 2.370210089303e-01 +2.350165799227e-01 2.329891506464e-01 2.309390335083e-01 2.288665448033e-01 +2.267720046544e-01 2.246557369502e-01 2.225180692832e-01 2.203593328868e-01 +2.181798625714e-01 2.159799966603e-01 2.137600769250e-01 2.115204485198e-01 +2.092614599151e-01 2.069834628316e-01 2.046868121724e-01 2.023718659557e-01 +2.000389852461e-01 1.976885340860e-01 1.953208794259e-01 1.929363910551e-01 +1.905354415306e-01 1.881184061067e-01 1.856856626638e-01 1.832375916362e-01 +1.807745759402e-01 1.782970009015e-01 1.758052541820e-01 1.732997257066e-01 +1.707808075892e-01 1.682488940588e-01 1.657043813846e-01 1.631476678019e-01 +1.605791534359e-01 1.579992402275e-01 1.554083318563e-01 1.528068336656e-01 +1.501951525856e-01 1.475736970569e-01 1.449428769541e-01 1.423031035084e-01 +1.396547892309e-01 1.369983478348e-01 1.343341941583e-01 1.316627440867e-01 +1.289844144746e-01 1.262996230684e-01 1.236087884274e-01 1.209123298467e-01 +1.182106672782e-01 1.155042212530e-01 1.127934128024e-01 1.100786633801e-01 +1.073603947839e-01 1.046390290768e-01 1.019149885091e-01 9.918869544009e-02 +9.646057225962e-02 9.373104130998e-02 9.100052480774e-02 8.826944476576e-02 +8.553822291522e-02 8.280728062779e-02 8.007703883803e-02 7.734791796576e-02 +7.462033783879e-02 7.189471761567e-02 6.917147570873e-02 6.645102970730e-02 +6.373379630117e-02 6.102019120422e-02 5.831062907844e-02 5.560552345805e-02 +5.290528667406e-02 5.021032977901e-02 4.752106247207e-02 4.483789302449e-02 +4.216122820534e-02 3.949147320761e-02 3.682903157474e-02 3.417430512744e-02 +3.152769389097e-02 2.888959602282e-02 2.626040774079e-02 2.364052325152e-02 +2.103033467948e-02 1.843023199642e-02 1.584060295128e-02 1.326183300059e-02 +1.069430523944e-02 8.138400332850e-03 5.594496447773e-03 3.062969185583e-03 +5.441915151351e-04 -1.961466293601e-03 -4.453636735344e-03 -6.931955134693e-03 +-9.396059710736e-03 -1.184559164102e-02 -1.428019512492e-02 -1.669951744633e-02 +-1.910320903574e-02 -2.149092353165e-02 -2.386231784126e-02 -2.621705220053e-02 +-2.855479023354e-02 -3.087519901108e-02 -3.317794910861e-02 -3.546271466342e-02 +-3.772917343111e-02 -3.997700684126e-02 -4.220590005238e-02 -4.441554200608e-02 +-4.660562548045e-02 -4.877584714270e-02 -5.092590760091e-02 -5.305551145506e-02 +-5.516436734719e-02 -5.725218801075e-02 -5.931869031913e-02 -6.136359533333e-02 +-6.338662834875e-02 -6.538751894120e-02 -6.736600101193e-02 -6.932181283189e-02 +-7.125469708505e-02 -7.316440091082e-02 -7.505067594559e-02 -7.691327836338e-02 +-7.875196891555e-02 -8.056651296957e-02 -8.235668054694e-02 -8.412224636006e-02 +-8.586298984828e-02 -8.757869521294e-02 -8.926915145144e-02 -9.093415239040e-02 +-9.257349671783e-02 -9.418698801435e-02 -9.577443478340e-02 -9.733565048052e-02 +-9.887045354160e-02 -1.003786674102e-01 -1.018601205638e-01 -1.033146465390e-01 +-1.047420839562e-01 -1.061422765424e-01 -1.075150731537e-01 -1.088603277966e-01 +-1.101778996484e-01 -1.114676530761e-01 -1.127294576547e-01 -1.139631881848e-01 +-1.151687247082e-01 -1.163459525234e-01 -1.174947621997e-01 -1.186150495903e-01 +-1.197067158441e-01 -1.207696674170e-01 -1.218038160818e-01 -1.228090789373e-01 +-1.237853784159e-01 -1.247326422908e-01 -1.256508036816e-01 -1.265398010595e-01 +-1.273995782505e-01 -1.282300844387e-01 -1.290312741676e-01 -1.298031073411e-01 +-1.305455492228e-01 -1.312585704350e-01 -1.319421469560e-01 -1.325962601165e-01 +-1.332208965957e-01 -1.338160484151e-01 -1.343817129326e-01 -1.349178928343e-01 +-1.354245961266e-01 -1.359018361262e-01 -1.363496314496e-01 -1.367680060015e-01 +-1.371569889621e-01 -1.375166147738e-01 -1.378469231263e-01 -1.381479589410e-01 +-1.384197723545e-01 -1.386624187010e-01 -1.388759584938e-01 -1.390604574056e-01 +-1.392159862483e-01 -1.393426209511e-01 -1.394404425382e-01 -1.395095371059e-01 +-1.395499957974e-01 -1.395619147782e-01 -1.395453952097e-01 -1.395005432216e-01 +-1.394274698847e-01 -1.393262911811e-01 -1.391971279746e-01 -1.390401059799e-01 +-1.388553557311e-01 -1.386430125484e-01 -1.384032165054e-01 -1.381361123943e-01 +-1.378418496908e-01 -1.375205825179e-01 -1.371724696091e-01 -1.367976742705e-01 +-1.363963643424e-01 -1.359687121594e-01 -1.355148945107e-01 -1.350350925984e-01 +-1.345294919964e-01 -1.339982826069e-01 -1.334416586176e-01 -1.328598184571e-01 +-1.322529647502e-01 -1.316213042720e-01 -1.309650479014e-01 -1.302844105739e-01 +-1.295796112340e-01 -1.288508727858e-01 -1.280984220447e-01 -1.273224896865e-01 +-1.265233101970e-01 -1.257011218208e-01 -1.248561665089e-01 -1.239886898664e-01 +-1.230989410988e-01 -1.221871729584e-01 -1.212536416895e-01 -1.202986069733e-01 +-1.193223318724e-01 -1.183250827739e-01 -1.173071293331e-01 -1.162687444158e-01 +-1.152102040403e-01 -1.141317873188e-01 -1.130337763986e-01 -1.119164564024e-01 +-1.107801153683e-01 -1.096250441892e-01 -1.084515365519e-01 -1.072598888758e-01 +-1.060504002507e-01 -1.048233723747e-01 -1.035791094915e-01 -1.023179183271e-01 +-1.010401080265e-01 -9.974599008953e-02 -9.843587830681e-02 -9.711008869505e-02 +-9.576893943208e-02 -9.441275079160e-02 -9.304184507758e-02 -9.165654655835e-02 +-9.025718140046e-02 -8.884407760222e-02 -8.741756492698e-02 -8.597797483621e-02 +-8.452564042233e-02 -8.306089634127e-02 -8.158407874494e-02 -8.009552521338e-02 +-7.859557468684e-02 -7.708456739764e-02 -7.556284480191e-02 -7.403074951117e-02 +-7.248862522382e-02 -7.093681665648e-02 -6.937566947530e-02 -6.780553022714e-02 +-6.622674627067e-02 -6.463966570750e-02 -6.304463731317e-02 -6.144201046821e-02 +-5.983213508912e-02 -5.821536155936e-02 -5.659204066043e-02 -5.496252350287e-02 +-5.332716145741e-02 -5.168630608608e-02 -5.004030907349e-02 -4.838952215812e-02 +-4.673429706373e-02 -4.507498543090e-02 -4.341193874871e-02 -4.174550828648e-02 +-4.007604502575e-02 -3.840389959242e-02 -3.672942218896e-02 -3.505296252701e-02 +-3.337486975997e-02 -3.169549241596e-02 -3.001517833099e-02 -2.833427458227e-02 +-2.665312742194e-02 -2.497208221096e-02 -2.329148335329e-02 -2.161167423042e-02 +-1.993299713617e-02 -1.825579321183e-02 -1.658040238160e-02 -1.490716328846e-02 +-1.323641323026e-02 -1.156848809637e-02 -9.903722304502e-03 -8.242448738125e-03 +-6.584998684143e-03 -4.931701771073e-03 -3.282885907621e-03 -1.638877221717e-03 +3.448719112250e-15 1.633423372251e-03 3.261072470652e-03 4.882628890828e-03 +6.497776306984e-03 + Type L N + 0 2 2 +0.000000000000e+00 2.812042383018e-05 1.124715359716e-04 2.530228335488e-04 +4.497235018850e-04 7.025024224280e-04 1.011268200281e-03 1.375909195927e-03 +1.796293564470e-03 2.272269302136e-03 2.803664299517e-03 3.390286402276e-03 +4.031923478537e-03 4.728343493447e-03 5.479294590785e-03 6.284505181453e-03 +7.143684038891e-03 8.056520401495e-03 9.022684081717e-03 1.004182558222e-02 +1.111357621856e-02 1.223754824884e-02 1.341333500987e-02 1.464051106009e-02 +1.591863232905e-02 1.724723627337e-02 1.862584203926e-02 2.005395063144e-02 +2.153104508840e-02 2.305659066398e-02 2.463003501520e-02 2.625080839620e-02 +2.791832385836e-02 2.963197745641e-02 3.139114846044e-02 3.319519957388e-02 +3.504347715725e-02 3.693531145758e-02 3.887001684353e-02 4.084689204604e-02 +4.286522040444e-02 4.492427011796e-02 4.702329450253e-02 4.916153225273e-02 +5.133820770892e-02 5.355253112932e-02 5.580369896706e-02 5.809089415195e-02 +6.041328637708e-02 6.277003238995e-02 6.516027628811e-02 6.758314981927e-02 +7.003777268559e-02 7.252325285227e-02 7.503868686016e-02 7.758316014232e-02 +8.015574734445e-02 8.275551264910e-02 8.538151010339e-02 8.803278395037e-02 +9.070836896367e-02 9.340729078542e-02 9.612856626742e-02 9.887120381516e-02 +1.016342037349e-01 1.044165585836e-01 1.072172535209e-01 1.100352666649e-01 +1.128695694486e-01 1.157191269805e-01 1.185828984057e-01 1.214598372700e-01 +1.243488918857e-01 1.272490056988e-01 1.301591176586e-01 1.330781625877e-01 +1.360050715545e-01 1.389387722459e-01 1.418781893421e-01 1.448222448916e-01 +1.477698586871e-01 1.507199486431e-01 1.536714311721e-01 1.566232215636e-01 +1.595742343614e-01 1.625233837420e-01 1.654695838935e-01 1.684117493930e-01 +1.713487955850e-01 1.742796389591e-01 1.772031975268e-01 1.801183911982e-01 +1.830241421574e-01 1.859193752378e-01 1.888030182955e-01 1.916740025816e-01 +1.945312631144e-01 1.973737390482e-01 2.002003740423e-01 2.030101166275e-01 +2.058019205707e-01 2.085747452379e-01 2.113275559548e-01 2.140593243657e-01 +2.167690287892e-01 2.194556545728e-01 2.221181944431e-01 2.247556488551e-01 +2.273670263375e-01 2.299513438355e-01 2.325076270507e-01 2.350349107771e-01 +2.375322392347e-01 2.399986663991e-01 2.424332563276e-01 2.448350834822e-01 +2.472032330478e-01 2.495368012477e-01 2.518348956542e-01 2.540966354957e-01 +2.563211519592e-01 2.585075884886e-01 2.606551010789e-01 2.627628585657e-01 +2.648300429095e-01 2.668558494765e-01 2.688394873135e-01 2.707801794184e-01 +2.726771630057e-01 2.745296897669e-01 2.763370261255e-01 2.780984534869e-01 +2.798132684832e-01 2.814807832119e-01 2.831003254701e-01 2.846712389819e-01 +2.861928836211e-01 2.876646356275e-01 2.890858878180e-01 2.904560497913e-01 +2.917745481267e-01 2.930408265772e-01 2.942543462559e-01 2.954145858171e-01 +2.965210416303e-01 2.975732279486e-01 2.985706770700e-01 2.995129394934e-01 +3.003995840672e-01 3.012301981318e-01 3.020043876556e-01 3.027217773641e-01 +3.033820108630e-01 3.039847507539e-01 3.045296787440e-01 3.050164957483e-01 +3.054449219859e-01 3.058146970686e-01 3.061255800835e-01 3.063773496684e-01 +3.065698040799e-01 3.067027612555e-01 3.067760588680e-01 3.067895543733e-01 +3.067431250515e-01 3.066366680406e-01 3.064701003632e-01 3.062433589472e-01 +3.059564006380e-01 3.056092022052e-01 3.052017603412e-01 3.047340916539e-01 +3.042062326513e-01 3.036182397201e-01 3.029701890971e-01 3.022621768332e-01 +3.014943187516e-01 3.006667503978e-01 2.997796269836e-01 2.988331233245e-01 +2.978274337691e-01 2.967627721233e-01 2.956393715662e-01 2.944574845607e-01 +2.932173827566e-01 2.919193568869e-01 2.905637166585e-01 2.891507906353e-01 +2.876809261152e-01 2.861544890011e-01 2.845718636646e-01 2.829334528044e-01 +2.812396772972e-01 2.794909760436e-01 2.776878058069e-01 2.758306410464e-01 +2.739199737440e-01 2.719563132257e-01 2.699401859764e-01 2.678721354492e-01 +2.657527218691e-01 2.635825220302e-01 2.613621290888e-01 2.590921523490e-01 +2.567732170448e-01 2.544059641153e-01 2.519910499753e-01 2.495291462808e-01 +2.470209396889e-01 2.444671316132e-01 2.418684379737e-01 2.392255889424e-01 +2.365393286837e-01 2.338104150904e-01 2.310396195152e-01 2.282277264974e-01 +2.253755334855e-01 2.224838505557e-01 2.195535001257e-01 2.165853166650e-01 +2.135801464012e-01 2.105388470220e-01 2.074622873738e-01 2.043513471571e-01 +2.012069166173e-01 1.980298962334e-01 1.948211964026e-01 1.915817371217e-01 +1.883124476660e-01 1.850142662648e-01 1.816881397746e-01 1.783350233486e-01 +1.749558801050e-01 1.715516807916e-01 1.681234034491e-01 1.646720330712e-01 +1.611985612636e-01 1.577039859003e-01 1.541893107782e-01 1.506555452704e-01 +1.471037039775e-01 1.435348063777e-01 1.399498764750e-01 1.363499424470e-01 +1.327360362911e-01 1.291091934701e-01 1.254704525563e-01 1.218208548756e-01 +1.181614441508e-01 1.144932661444e-01 1.108173683010e-01 1.071347993896e-01 +1.034466091460e-01 9.975384791502e-02 9.605756629286e-02 9.235881477011e-02 +8.865864337493e-02 8.495810131684e-02 8.125823663126e-02 7.756009582487e-02 +7.386472352188e-02 7.017316211140e-02 6.648645139600e-02 6.280562824158e-02 +5.913172622872e-02 5.546577530554e-02 5.180880144230e-02 4.816182628779e-02 +4.452586682763e-02 4.090193504467e-02 3.729103758150e-02 3.369417540531e-02 +3.011234347509e-02 2.654653041137e-02 2.299771816864e-02 1.946688171047e-02 +1.595498868745e-02 1.246299911824e-02 8.991865073543e-03 5.542530363382e-03 +2.115930227621e-03 -1.287008970087e-03 -4.665370044848e-03 -8.018245289454e-03 +-1.134473676960e-02 -1.464395661529e-02 -1.791502730828e-02 -2.115708196560e-02 +-2.436926461882e-02 -2.755073048929e-02 -3.070064625892e-02 -3.381819033663e-02 +-3.690255312038e-02 -3.995293725450e-02 -4.296855788249e-02 -4.594864289503e-02 +-4.889243317310e-02 -5.179918282636e-02 -5.466815942637e-02 -5.749864423487e-02 +-6.028993242690e-02 -6.304133330863e-02 -6.575217053008e-02 -6.842178229231e-02 +-7.104952154932e-02 -7.363475620441e-02 -7.617686930102e-02 -7.867525920794e-02 +-8.112933979891e-02 -8.353854062645e-02 -8.590230708989e-02 -8.822010059767e-02 +-9.049139872368e-02 -9.271569535770e-02 -9.489250084984e-02 -9.702134214903e-02 +-9.910176293542e-02 -1.011333237466e-01 -1.031156020979e-01 -1.050481925963e-01 +-1.069307070481e-01 -1.087627745608e-01 -1.105440416380e-01 -1.122741722691e-01 +-1.139528480110e-01 -1.155797680655e-01 -1.171546493488e-01 -1.186772265551e-01 +-1.201472522143e-01 -1.215644967427e-01 -1.229287484875e-01 -1.242398137650e-01 +-1.254975168922e-01 -1.267017002123e-01 -1.278522241133e-01 -1.289489670408e-01 +-1.299918255037e-01 -1.309807140745e-01 -1.319155653819e-01 -1.327963300981e-01 +-1.336229769193e-01 -1.343954925401e-01 -1.351138816210e-01 -1.357781667502e-01 +-1.363883883992e-01 -1.369446048713e-01 -1.374468922449e-01 -1.378953443098e-01 +-1.382900724979e-01 -1.386312058074e-01 -1.389188907211e-01 -1.391532911187e-01 +-1.393345881826e-01 -1.394629802985e-01 -1.395386829495e-01 -1.395619286044e-01 +-1.395329666006e-01 -1.394520630206e-01 -1.393195005628e-01 -1.391355784077e-01 +-1.389006120768e-01 -1.386149332875e-01 -1.382788898014e-01 -1.378928452679e-01 +-1.374571790618e-01 -1.369722861164e-01 -1.364385767506e-01 -1.358564764912e-01 +-1.352264258904e-01 -1.345488803374e-01 -1.338243098662e-01 -1.330531989577e-01 +-1.322360463375e-01 -1.313733647684e-01 -1.304656808394e-01 -1.295135347489e-01 +-1.285174800843e-01 -1.274780835967e-01 -1.263959249722e-01 -1.252715965978e-01 +-1.241057033243e-01 -1.228988622245e-01 -1.216517023480e-01 -1.203648644718e-01 +-1.190390008473e-01 -1.176747749439e-01 -1.162728611890e-01 -1.148339447044e-01 +-1.133587210396e-01 -1.118478959018e-01 -1.103021848828e-01 -1.087223131831e-01 +-1.071090153326e-01 -1.054630349093e-01 -1.037851242546e-01 -1.020760441864e-01 +-1.003365637095e-01 -9.856745972424e-02 -9.676951673183e-02 -9.494352653873e-02 +-9.309028795819e-02 -9.121060651026e-02 -8.930529411987e-02 -8.737516881326e-02 +-8.542105441291e-02 -8.344378023091e-02 -8.144418076104e-02 -7.942309536966e-02 +-7.738136798544e-02 -7.531984678813e-02 -7.323938389640e-02 -7.114083505502e-02 +-6.902505932126e-02 -6.689291875087e-02 -6.474527808360e-02 -6.258300442839e-02 +-6.040696694843e-02 -5.821803654612e-02 -5.601708554807e-02 -5.380498739029e-02 +-5.158261630364e-02 -4.935084699963e-02 -4.711055435682e-02 -4.486261310772e-02 +-4.260789752655e-02 -4.034728111771e-02 -3.808163630530e-02 -3.581183412371e-02 +-3.353874390932e-02 -3.126323299356e-02 -2.898616639734e-02 -2.670840652700e-02 +-2.443081287186e-02 -2.215424170354e-02 -1.987954577704e-02 -1.760757403388e-02 +-1.533917130715e-02 -1.307517802878e-02 -1.081642993911e-02 -8.563757798700e-03 +-6.317987102690e-03 -4.079937797693e-03 -1.850424001331e-03 3.697462754655e-04 +2.579771403298e-03 4.778856406204e-03 6.966213230517e-03 9.141061010585e-03 +1.130262633127e-02 1.345014348713e-02 1.558285473817e-02 1.770001056217e-02 +1.980086990332e-02 2.188470041732e-02 2.395077871259e-02 2.599839058780e-02 +2.802683126538e-02 3.003540562106e-02 3.202342840941e-02 3.399022448515e-02 +3.593512902031e-02 3.785748771706e-02 3.975665701624e-02 4.163200430140e-02 +4.348290809837e-02 4.530875827032e-02 4.710895620815e-02 4.888291501618e-02 +5.063005969317e-02 5.234982730849e-02 5.404166717344e-02 5.570504100770e-02 +5.733942310076e-02 5.894430046840e-02 6.051917300409e-02 6.206355362527e-02 +6.357696841449e-02 6.505895675542e-02 6.650907146351e-02 6.792687891150e-02 +6.931195914959e-02 7.066390602023e-02 7.198232726759e-02 7.326684464163e-02 +7.451709399671e-02 7.573272538478e-02 7.691340314312e-02 7.805880597647e-02 +7.916862703380e-02 8.024257397943e-02 8.128036905865e-02 8.228174915775e-02 +8.324646585855e-02 8.417428548724e-02 8.506498915771e-02 8.591837280926e-02 +8.673424723874e-02 8.751243812706e-02 8.825278606009e-02 8.895514654406e-02 +8.961939001526e-02 9.024540184427e-02 9.083308233453e-02 9.138234671541e-02 +9.189312512975e-02 9.236536261582e-02 9.279901908383e-02 9.319406928693e-02 +9.355050278675e-02 9.386832391348e-02 9.414755172060e-02 9.438821993413e-02 +9.459037689662e-02 9.475408550577e-02 9.487942314775e-02 9.496648162530e-02 +9.501536708061e-02 9.502619991302e-02 9.499911469155e-02 9.493426006246e-02 +9.483179865159e-02 9.469190696188e-02 9.451477526582e-02 9.430060749305e-02 +9.404962111313e-02 9.376204701352e-02 9.343812937277e-02 9.307812552910e-02 +9.268230584436e-02 9.225095356338e-02 9.178436466890e-02 9.128284773200e-02 +9.074672375824e-02 9.017632602944e-02 8.957199994129e-02 8.893410283673e-02 +8.826300383534e-02 8.755908365865e-02 8.682273445152e-02 8.605435959968e-02 +8.525437354350e-02 8.442320158798e-02 8.356127970921e-02 8.266905435722e-02 +8.174698225538e-02 8.079553019644e-02 7.981517483525e-02 7.880640247828e-02 +7.776970887001e-02 7.670559897632e-02 7.561458676484e-02 7.449719498256e-02 +7.335395493060e-02 7.218540623629e-02 7.099209662273e-02 6.977458167578e-02 +6.853342460873e-02 6.726919602462e-02 6.598247367633e-02 6.467384222462e-02 +6.334389299411e-02 6.199322372732e-02 6.062243833697e-02 5.923214665645e-02 +5.782296418875e-02 5.639551185381e-02 5.495041573448e-02 5.348830682111e-02 +5.200982075493e-02 5.051559757034e-02 4.900628143611e-02 4.748252039569e-02 +4.594496610667e-02 4.439427357957e-02 4.283110091591e-02 4.125610904585e-02 +3.966996146536e-02 3.807332397307e-02 3.646686440693e-02 3.485125238070e-02 +3.322715902046e-02 3.159525670120e-02 2.995621878360e-02 2.831071935103e-02 +2.665943294700e-02 2.500303431309e-02 2.334219812741e-02 2.167759874379e-02 +2.000990993170e-02 1.833980461710e-02 1.666795462418e-02 1.499503041830e-02 +1.332170084993e-02 1.164863290000e-02 9.976491426473e-03 8.305938912502e-03 +6.637635215999e-03 4.972237320923e-03 3.310399090263e-03 1.652771020840e-03 +1.408221227094e-14 -1.647270935606e-03 -3.288402839377e-03 -4.922761091662e-03 +-6.549715634615e-03 + Type L N + 0 2 3 +0.000000000000e+00 4.457248234190e-05 1.782643907072e-04 4.009991057074e-04 +7.126489820193e-04 1.113035415164e-03 1.601928940844e-03 2.179049363396e-03 +2.844065911803e-03 3.596597423938e-03 4.436212558915e-03 5.362430037398e-03 +6.374718909681e-03 7.472498851489e-03 8.655140487224e-03 9.921965740519e-03 +1.127224821193e-02 1.270521358352e-02 1.422004005004e-02 1.581585877668e-02 +1.749175438281e-02 1.924676545176e-02 2.107988506605e-02 2.299006136809e-02 +2.497619814568e-02 2.703715544230e-02 2.917175019161e-02 3.137875687592e-02 +3.365690820823e-02 3.600489583748e-02 3.842137107649e-02 4.090494565238e-02 +4.345419247888e-02 4.606764645011e-02 4.874380525550e-02 5.148113021525e-02 +5.427804713593e-02 5.713294718568e-02 6.004418778865e-02 6.301009353797e-02 +6.602895712690e-02 6.909904029756e-02 7.221857480672e-02 7.538576340809e-02 +7.859878085057e-02 8.185577489191e-02 8.515486732719e-02 8.849415503146e-02 +9.187171101615e-02 9.528558549845e-02 9.873380698317e-02 1.022143833564e-01 +1.057253029904e-01 1.092645358591e-01 1.128300346638e-01 1.164197359675e-01 +1.200315613388e-01 1.236634185032e-01 1.273132025023e-01 1.309787968591e-01 +1.346580747501e-01 1.383489001823e-01 1.420491291753e-01 1.457566109472e-01 +1.494691891042e-01 1.531847028329e-01 1.569009880945e-01 1.606158788208e-01 +1.643272081105e-01 1.680328094259e-01 1.717305177888e-01 1.754181709754e-01 +1.790936107092e-01 1.827546838509e-01 1.863992435853e-01 1.900251506049e-01 +1.936302742875e-01 1.972124938699e-01 2.007696996148e-01 2.042997939718e-01 +2.078006927304e-01 2.112703261660e-01 2.147066401766e-01 2.181075974111e-01 +2.214711783874e-01 2.247953825998e-01 2.280782296165e-01 2.313177601642e-01 +2.345120372012e-01 2.376591469778e-01 2.407572000828e-01 2.438043324763e-01 +2.467987065080e-01 2.497385119204e-01 2.526219668358e-01 2.554473187279e-01 +2.582128453763e-01 2.609168558033e-01 2.635576911935e-01 2.661337257950e-01 +2.686433678012e-01 2.710850602144e-01 2.734572816884e-01 2.757585473522e-01 +2.779874096115e-01 2.801424589308e-01 2.822223245923e-01 2.842256754343e-01 +2.861512205662e-01 2.879977100613e-01 2.897639356266e-01 2.914487312484e-01 +2.930509738149e-01 2.945695837145e-01 2.960035254092e-01 2.973518079833e-01 +2.986134856677e-01 2.997876583384e-01 3.008734719886e-01 3.018701191768e-01 +3.027768394469e-01 3.035929197232e-01 3.043176946788e-01 3.049505470763e-01 +3.054909080832e-01 3.059382575588e-01 3.062921243152e-01 3.065520863497e-01 +3.067177710513e-01 3.067888553784e-01 3.067650660094e-01 3.066461794661e-01 +3.064320222090e-01 3.061224707043e-01 3.057174514647e-01 3.052169410610e-01 +3.046209661066e-01 3.039296032146e-01 3.031429789265e-01 3.022612696142e-01 +3.012847013538e-01 3.002135497725e-01 2.990481398679e-01 2.977888458001e-01 +2.964360906574e-01 2.949903461941e-01 2.934521325427e-01 2.918220178985e-01 +2.901006181790e-01 2.882885966564e-01 2.863866635645e-01 2.843955756802e-01 +2.823161358792e-01 2.801491926669e-01 2.778956396848e-01 2.755564151915e-01 +2.731325015206e-01 2.706249245140e-01 2.680347529323e-01 2.653630978410e-01 +2.626111119753e-01 2.597799890815e-01 2.568709632367e-01 2.538853081470e-01 +2.508243364242e-01 2.476893988424e-01 2.444818835731e-01 2.412032154019e-01 +2.378548549247e-01 2.344382977253e-01 2.309550735345e-01 2.274067453716e-01 +2.237949086680e-01 2.201211903739e-01 2.163872480489e-01 2.125947689363e-01 +2.087454690225e-01 2.048410920811e-01 2.008834087031e-01 1.968742153133e-01 +1.928153331736e-01 1.887086073738e-01 1.845559058101e-01 1.803591181529e-01 +1.761201548032e-01 1.718409458392e-01 1.675234399531e-01 1.631696033788e-01 +1.587814188122e-01 1.543608843220e-01 1.499100122556e-01 1.454308281366e-01 +1.409253695573e-01 1.363956850664e-01 1.318438330511e-01 1.272718806159e-01 +1.226819024584e-01 1.180759797413e-01 1.134561989637e-01 1.088246508299e-01 +1.041834291183e-01 9.953462954955e-02 9.488034865550e-02 9.022268264941e-02 +8.556372629778e-02 8.090557179462e-02 7.625030763888e-02 7.160001751551e-02 +6.695677918083e-02 6.232266335288e-02 5.769973260732e-02 5.309004027948e-02 +4.849562937322e-02 4.391853147720e-02 3.936076568912e-02 3.482433754858e-02 +3.031123797906e-02 2.582344223978e-02 2.136290888780e-02 1.693157875109e-02 +1.253137391310e-02 8.164196709282e-03 3.831928736336e-03 -4.635701255367e-04 +-4.720462676645e-03 -8.936935347656e-03 -1.311119913473e-02 -1.724149051946e-02 +-2.132607237305e-02 -2.536323484439e-02 -2.935129623136e-02 -3.328860383506e-02 +-3.717353479639e-02 -4.100449691463e-02 -4.477992944750e-02 -4.849830389238e-02 +-5.215812474809e-02 -5.575793025712e-02 -5.929629312760e-02 -6.277182123488e-02 +-6.618315830222e-02 -6.952898456029e-02 -7.280801738516e-02 -7.601901191437e-02 +-7.916076164086e-02 -8.223209898438e-02 -8.523189584023e-02 -8.815906410481e-02 +-9.101255617803e-02 -9.379136544205e-02 -9.649452671631e-02 -9.912111668852e-02 +-1.016702543216e-01 -1.041411012358e-01 -1.065328620670e-01 -1.088447847996e-01 +-1.110761610748e-01 -1.132263264739e-01 -1.152946607763e-01 -1.172805881930e-01 +-1.191835775734e-01 -1.210031425882e-01 -1.227388418859e-01 -1.243902792240e-01 +-1.259571035753e-01 -1.274390092077e-01 -1.288357357390e-01 -1.301470681664e-01 +-1.313728368700e-01 -1.325129175914e-01 -1.335672313864e-01 -1.345357445526e-01 +-1.354184685322e-01 -1.362154597889e-01 -1.369268196606e-01 -1.375526941866e-01 +-1.380932739105e-01 -1.385487936582e-01 -1.389195322919e-01 -1.392058124400e-01 +-1.394080002019e-01 -1.395265048306e-01 -1.395617783907e-01 -1.395143153936e-01 +-1.393846524088e-01 -1.391733676538e-01 -1.388810805603e-01 -1.385084513188e-01 +-1.380561804008e-01 -1.375250080601e-01 -1.369157138120e-01 -1.362291158925e-01 +-1.354660706961e-01 -1.346274721936e-01 -1.337142513307e-01 -1.327273754061e-01 +-1.316678474315e-01 -1.305367054722e-01 -1.293350219701e-01 -1.280639030485e-01 +-1.267244877994e-01 -1.253179475545e-01 -1.238454851391e-01 -1.223083341104e-01 +-1.207077579798e-01 -1.190450494209e-01 -1.173215294620e-01 -1.155385466653e-01 +-1.136974762920e-01 -1.117997194550e-01 -1.098467022581e-01 -1.078398749240e-01 +-1.057807109104e-01 -1.036707060153e-01 -1.015113774717e-01 -9.930426303258e-02 +-9.705092004665e-02 -9.475292452496e-02 -9.241187019960e-02 -9.002936757466e-02 +-8.760704297005e-02 -8.514653755883e-02 -8.264950639862e-02 -8.011761745753e-02 +-7.755255063536e-02 -7.495599678058e-02 -7.232965670356e-02 -6.967524018682e-02 +-6.699446499276e-02 -6.428905586941e-02 -6.156074355494e-02 -5.881126378136e-02 +-5.604235627800e-02 -5.325576377550e-02 -5.045323101064e-02 -4.763650373284e-02 +-4.480732771270e-02 -4.196744775324e-02 -3.911860670445e-02 -3.626254448162e-02 +-3.340099708804e-02 -3.053569564265e-02 -2.766836541325e-02 -2.480072485565e-02 +-2.193448465945e-02 -1.907134680097e-02 -1.621300360381e-02 -1.336113680758e-02 +-1.051741664539e-02 -7.683500930553e-03 -4.861034152950e-03 -2.051646585752e-03 +7.430465972123e-04 3.521446192831e-03 6.281969828383e-03 9.023052809042e-03 +1.174314895274e-02 1.444073141190e-02 1.711429348171e-02 1.976234939429e-02 +2.238343509855e-02 2.497610902513e-02 2.753895283621e-02 3.007057215951e-02 +3.256959730641e-02 3.503468397357e-02 3.746451392777e-02 3.985779567360e-02 +4.221326510369e-02 4.452968613109e-02 4.680585130346e-02 4.904058239882e-02 +5.123273100254e-02 5.338117906521e-02 5.548483944120e-02 5.754265640760e-02 +5.955360616327e-02 6.151669730783e-02 6.343097130024e-02 6.529550289684e-02 +6.710940056866e-02 6.887180689773e-02 7.058189895224e-02 7.223888864046e-02 +7.384202304310e-02 7.539058472419e-02 7.688389202009e-02 7.832129930679e-02 +7.970219724519e-02 8.102601300434e-02 8.229221046263e-02 8.350029038675e-02 +8.464979058844e-02 8.574028605906e-02 8.677138908178e-02 8.774274932152e-02 +8.865405389270e-02 8.950502740454e-02 9.029543198437e-02 9.102506727852e-02 +9.169377043125e-02 9.230141604154e-02 9.284791609794e-02 9.333321989151e-02 +9.375731390701e-02 9.412022169248e-02 9.442200370720e-02 9.466275714840e-02 +9.484261575671e-02 9.496174960057e-02 9.502036483976e-02 9.501870346840e-02 +9.495704303729e-02 9.483569635626e-02 9.465501117629e-02 9.441536985208e-02 +9.411718898495e-02 9.376091904661e-02 9.334704398391e-02 9.287608080494e-02 +9.234857914673e-02 9.176512082490e-02 9.112631936550e-02 9.043281951951e-02 +8.968529676013e-02 8.888445676345e-02 8.803103487260e-02 8.712579554598e-02 +8.616953178973e-02 8.516306457505e-02 8.410724224049e-02 8.300293987988e-02 +8.185105871610e-02 8.065252546120e-02 7.940829166328e-02 7.811933304056e-02 +7.678664880301e-02 7.541126096205e-02 7.399421362883e-02 7.253657230130e-02 +7.103942314083e-02 6.950387223863e-02 6.793104487253e-02 6.632208475452e-02 +6.467815326968e-02 6.300042870677e-02 6.129010548114e-02 5.954839335034e-02 +5.777651662299e-02 5.597571336138e-02 5.414723457828e-02 5.229234342845e-02 +5.041231439542e-02 4.850843247399e-02 4.658199234892e-02 4.463429757040e-02 +4.266665972674e-02 4.068039761486e-02 3.867683640893e-02 3.665730682787e-02 +3.462314430212e-02 3.257568814007e-02 3.051628069495e-02 2.844626653232e-02 +2.636699159894e-02 2.427980239344e-02 2.218604513920e-02 2.008706496005e-02 +1.798420505918e-02 1.587880590191e-02 1.377220440256e-02 1.166573311614e-02 +9.560719435159e-03 7.458484792203e-03 5.360343868524e-03 3.267603809314e-03 +1.181563446000e-03 -8.964874739414e-04 -2.965269049220e-03 -5.023511978570e-03 +-7.069958305755e-03 -9.103362155313e-03 -1.112249045863e-02 -1.312612366988e-02 +-1.511305647156e-02 -1.708209846895e-02 -1.903207487348e-02 -2.096182717423e-02 +-2.287021379752e-02 -2.475611075395e-02 -2.661841227277e-02 -2.845603142301e-02 +-3.026790072120e-02 -3.205297272523e-02 -3.381022061409e-02 -3.553863875319e-02 +-3.723724324485e-02 -3.890507246382e-02 -4.054118757736e-02 -4.214467304981e-02 +-4.371463713124e-02 -4.525021232991e-02 -4.675055586845e-02 -4.821485012336e-02 +-4.964230304767e-02 -5.103214857662e-02 -5.238364701599e-02 -5.369608541310e-02 +-5.496877791009e-02 -5.620106607950e-02 -5.739231924181e-02 -5.854193476503e-02 +-5.964933834590e-02 -6.071398427289e-02 -6.173535567067e-02 -6.271296472603e-02 +-6.364635289518e-02 -6.453509109232e-02 -6.537877985944e-02 -6.617704951726e-02 +-6.692956029730e-02 -6.763600245510e-02 -6.829609636440e-02 -6.890959259254e-02 +-6.947627195680e-02 -6.999594556194e-02 -7.046845481878e-02 -7.089367144401e-02 +-7.127149744118e-02 -7.160186506299e-02 -7.188473675489e-02 -7.212010508019e-02 +-7.230799262665e-02 -7.244845189474e-02 -7.254156516766e-02 -7.258744436323e-02 +-7.258623086790e-02 -7.253809535283e-02 -7.244323757238e-02 -7.230188614518e-02 +-7.211429831779e-02 -7.188075971132e-02 -7.160158405118e-02 -7.127711288012e-02 +-7.090771525475e-02 -7.049378742595e-02 -7.003575250320e-02 -6.953406010323e-02 +-6.898918598315e-02 -6.840163165842e-02 -6.777192400586e-02 -6.710061485204e-02 +-6.638828054735e-02 -6.563552152595e-02 -6.484296185208e-02 -6.401124875290e-02 +-6.314105213826e-02 -6.223306410774e-02 -6.128799844526e-02 -6.030659010162e-02 +-5.928959466533e-02 -5.823778782215e-02 -5.715196480352e-02 -5.603293982456e-02 +-5.488154551165e-02 -5.369863232030e-02 -5.248506794353e-02 -5.124173671111e-02 +-4.996953898025e-02 -4.866939051794e-02 -4.734222187547e-02 -4.598897775549e-02 +-4.461061637206e-02 -4.320810880402e-02 -4.178243834230e-02 -4.033459983128e-02 +-3.886559900497e-02 -3.737645181818e-02 -3.586818377323e-02 -3.434182924260e-02 +-3.279843078799e-02 -3.123903847615e-02 -2.966470919199e-02 -2.807650594939e-02 +-2.647549720008e-02 -2.486275614114e-02 -2.323936002146e-02 -2.160638944768e-02 +-1.996492768990e-02 -1.831605998782e-02 -1.666087285751e-02 -1.500045339944e-02 +-1.333588860800e-02 -1.166826468316e-02 -9.998666344508e-03 -8.328176148179e-03 +-6.657873807088e-03 -4.988835514865e-03 -3.322133273924e-03 -1.658834228060e-03 +9.121078281037e-15 1.653313965754e-03 3.300059054207e-03 4.939194125200e-03 +6.569686152075e-03 + Type L N + 0 2 4 +0.000000000000e+00 6.467701348754e-05 2.586542723594e-04 5.817704695828e-04 +1.033756907113e-03 1.614237711735e-03 2.322730138670e-03 3.158644962277e-03 +4.121286952181e-03 5.209855435365e-03 6.423444943362e-03 7.761045944157e-03 +9.221545658202e-03 1.080372895779e-02 1.250627934912e-02 1.432778003624e-02 +1.626671506593e-02 1.832147055267e-02 2.049033598262e-02 2.277150559559e-02 +2.516307984377e-02 2.766306692620e-02 3.026938439748e-02 3.297986084961e-02 +3.579223766544e-02 3.870417084234e-02 4.171323288467e-02 4.481691476326e-02 +4.801262794057e-02 5.129770645970e-02 5.466940909557e-02 5.812492156647e-02 +6.166135880428e-02 6.527576728134e-02 6.896512739216e-02 7.272635588803e-02 +7.655630836242e-02 8.045178178523e-02 8.440951708386e-02 8.842620176875e-02 +9.249847260157e-02 9.662291830356e-02 1.007960823020e-01 1.050144655125e-01 +1.092745291549e-01 1.135726976002e-01 1.179053612464e-01 1.222688794215e-01 +1.266595833095e-01 1.310737788995e-01 1.355077499530e-01 1.399577609892e-01 +1.444200602838e-01 1.488908828806e-01 1.533664536125e-01 1.578429901293e-01 +1.623167059309e-01 1.667838134018e-01 1.712405268457e-01 1.756830655180e-01 +1.801076566519e-01 1.845105384774e-01 1.888879632307e-01 1.932362001498e-01 +1.975515384562e-01 2.018302903183e-01 2.060687937959e-01 2.102634157614e-01 +2.144105547971e-01 2.185066440656e-01 2.225481541504e-01 2.265315958651e-01 +2.304535230296e-01 2.343105352087e-01 2.380992804136e-01 2.418164577626e-01 +2.454588200992e-01 2.490231765652e-01 2.525063951274e-01 2.559054050554e-01 +2.592171993486e-01 2.624388371103e-01 2.655674458674e-01 2.686002238332e-01 +2.715344421129e-01 2.743674468476e-01 2.770966612978e-01 2.797195878629e-01 +2.822338100357e-01 2.846369942908e-01 2.869268919043e-01 2.891013407043e-01 +2.911582667514e-01 2.930956859452e-01 2.949117055595e-01 2.966045257012e-01 +2.981724406948e-01 2.996138403890e-01 3.009272113863e-01 3.021111381935e-01 +3.031643042930e-01 3.040854931329e-01 3.048735890371e-01 3.055275780325e-01 +3.060465485947e-01 3.064296923100e-01 3.066763044547e-01 3.067857844901e-01 +3.067576364736e-01 3.065914693852e-01 3.062869973702e-01 3.058440398959e-01 +3.052625218249e-01 3.045424734030e-01 3.036840301624e-01 3.026874327411e-01 +3.015530266175e-01 3.002812617612e-01 2.988726922006e-01 2.973279755071e-01 +2.956478721966e-01 2.938332450497e-01 2.918850583496e-01 2.898043770398e-01 +2.875923658023e-01 2.852502880559e-01 2.827795048773e-01 2.801814738444e-01 +2.774577478034e-01 2.746099735617e-01 2.716398905060e-01 2.685493291479e-01 +2.653402095987e-01 2.620145399736e-01 2.585744147272e-01 2.550220129220e-01 +2.513595964312e-01 2.475895080768e-01 2.437141697060e-01 2.397360802058e-01 +2.356578134586e-01 2.314820162408e-01 2.272114060649e-01 2.228487689682e-01 +2.183969572496e-01 2.138588871558e-01 2.092375365199e-01 2.045359423538e-01 +1.997571983959e-01 1.949044526175e-01 1.899809046891e-01 1.849898034084e-01 +1.799344440933e-01 1.748181659408e-01 1.696443493552e-01 1.644164132466e-01 +1.591378123033e-01 1.538120342391e-01 1.484425970188e-01 1.430330460631e-01 +1.375869514369e-01 1.321079050210e-01 1.265995176723e-01 1.210654163718e-01 +1.155092413657e-01 1.099346432998e-01 1.043452803504e-01 9.874481535428e-02 +9.313691293955e-02 8.752523666008e-02 8.191344613574e-02 7.630519420076e-02 +7.070412406258e-02 6.511386647350e-02 5.953803691739e-02 5.398023281373e-02 +4.844403074131e-02 4.293298368379e-02 3.745061829925e-02 3.200043221616e-02 +2.658589135768e-02 2.121042729658e-02 1.587743464290e-02 1.059026846634e-02 +5.352241755580e-03 1.666229163423e-04 -4.963366689589e-03 -1.003455516262e-02 +-1.504382243890e-02 -1.998810261728e-02 -2.486438623791e-02 -2.966972251065e-02 +-3.440122149161e-02 -3.905605620602e-02 -4.363146471594e-02 -4.812475213110e-02 +-5.253329256133e-02 -5.685453100917e-02 -6.108598520115e-02 -6.522524735635e-02 +-6.926998589097e-02 -7.321794705754e-02 -7.706695651764e-02 -8.081492084693e-02 +-8.445982897137e-02 -8.799975353358e-02 -9.143285218847e-02 -9.475736882699e-02 +-9.797163472740e-02 -1.010740696331e-01 -1.040631827561e-01 -1.069375737062e-01 +-1.096959333441e-01 -1.123370445592e-01 -1.148597829702e-01 -1.172631175495e-01 +-1.195461111700e-01 -1.217079210747e-01 -1.237477992681e-01 -1.256650928302e-01 +-1.274592441522e-01 -1.291297910945e-01 -1.306763670666e-01 -1.320987010287e-01 +-1.333966174168e-01 -1.345700359890e-01 -1.356189715955e-01 -1.365435338717e-01 +-1.373439268546e-01 -1.380204485240e-01 -1.385734902677e-01 -1.390035362722e-01 +-1.393111628400e-01 -1.394970376326e-01 -1.395619188418e-01 -1.395066542893e-01 +-1.393321804551e-01 -1.390395214367e-01 -1.386297878394e-01 -1.381041755992e-01 +-1.374639647384e-01 -1.367105180573e-01 -1.358452797606e-01 -1.348697740218e-01 +-1.337856034858e-01 -1.325944477119e-01 -1.312980615577e-01 -1.298982735065e-01 +-1.283969839388e-01 -1.267961633501e-01 -1.250978505159e-01 -1.233041506066e-01 +-1.214172332533e-01 -1.194393305656e-01 -1.173727351053e-01 -1.152197978151e-01 +-1.129829259064e-01 -1.106645807066e-01 -1.082672754685e-01 -1.057935731439e-01 +-1.032460841225e-01 -1.006274639388e-01 -9.794041094889e-02 -9.518766397925e-02 +-9.237199994887e-02 -8.949623146779e-02 -8.656320441344e-02 -8.357579548706e-02 +-8.053690975243e-02 -7.744947815873e-02 -7.431645504994e-02 -7.114081566276e-02 +-6.792555361516e-02 -6.467367838778e-02 -6.138821280021e-02 -5.807219048446e-02 +-5.472865335745e-02 -5.136064909501e-02 -4.797122860918e-02 -4.456344353117e-02 +-4.114034370191e-02 -3.770497467241e-02 -3.426037521587e-02 -3.080957485374e-02 +-2.735559139769e-02 -2.390142850954e-02 -2.045007328115e-02 -1.700449383626e-02 +-1.356763695622e-02 -1.014242573161e-02 -6.731757241574e-03 -3.338500262781e-03 +3.450699010114e-05 3.384459090659e-03 6.708585591882e-03 1.000415318049e-02 +1.326846779269e-02 1.649887668971e-02 1.969277049147e-02 2.284758516679e-02 +2.596080397851e-02 2.902995938214e-02 3.205263487648e-02 3.502646680471e-02 +3.794914610479e-02 4.081842000759e-02 4.363209368161e-02 4.638803182301e-02 +4.908416018980e-02 5.171846707893e-02 5.428900474540e-02 5.679389076215e-02 +5.923130931991e-02 6.159951246595e-02 6.389682128100e-02 6.612162699342e-02 +6.827239202987e-02 7.034765100187e-02 7.234601162746e-02 7.426615558751e-02 +7.610683931608e-02 7.786689472434e-02 7.954522985768e-02 8.114082948563e-02 +8.265275562436e-02 8.408014799135e-02 8.542222439227e-02 8.667828103984e-02 +8.784769280450e-02 8.892991339717e-02 8.992447548386e-02 9.083099073243e-02 +9.164914979164e-02 9.237872220263e-02 9.301955624322e-02 9.357157870541e-02 +9.403479460629e-02 9.440928683305e-02 9.469521572246e-02 9.489281857541e-02 +9.500240910722e-02 9.502437683422e-02 9.495918639761e-02 9.480737682502e-02 +9.456956073099e-02 9.424642345693e-02 9.383872215173e-02 9.334728479382e-02 +9.277300915591e-02 9.211686171330e-02 9.137987649695e-02 9.056315389263e-02 +8.966785938705e-02 8.869522226255e-02 8.764653424145e-02 8.652314808142e-02 +8.532647612334e-02 8.405798879298e-02 8.271921305792e-02 8.131173084133e-02 +7.983717739398e-02 7.829723962611e-02 7.669365440074e-02 7.502820679000e-02 +7.330272829607e-02 7.151909503859e-02 6.967922590995e-02 6.778508070034e-02 +6.583865819438e-02 6.384199424077e-02 6.179715979705e-02 5.970625895115e-02 +5.757142692138e-02 5.539482803698e-02 5.317865370071e-02 5.092512033565e-02 +4.863646731778e-02 4.631495489640e-02 4.396286210410e-02 4.158248465821e-02 +3.917613285563e-02 3.674612946285e-02 3.429480760297e-02 3.182450864173e-02 +2.933758007429e-02 2.683637341465e-02 2.432324208952e-02 2.180053933849e-02 +1.927061612244e-02 1.673581904170e-02 1.419848826614e-02 1.166095547863e-02 +9.125541833832e-03 6.594555934047e-03 4.070291823748e-03 1.555027004599e-03 +-9.489795274114e-04 -3.439489221052e-03 -5.914285883511e-03 -8.371177567057e-03 +-1.080799842710e-02 -1.322261055011e-02 -1.561290574995e-02 -1.797680733099e-02 +-2.031227181671e-02 -2.261729064236e-02 -2.488989181013e-02 -2.712814150576e-02 +-2.933014567510e-02 -3.149405155936e-02 -3.361804918796e-02 -3.570037282766e-02 +-3.773930238696e-02 -3.973316477450e-02 -4.168033521061e-02 -4.357923849086e-02 +-4.542835020074e-02 -4.722619788044e-02 -4.897136213900e-02 -5.066247771695e-02 +-5.229823449659e-02 -5.387737845932e-02 -5.539871258930e-02 -5.686109772272e-02 +-5.826345334227e-02 -5.960475831614e-02 -6.088405158118e-02 -6.210043276973e-02 +-6.325306277975e-02 -6.434116428803e-02 -6.536402220605e-02 -6.632098407841e-02 +-6.721146042362e-02 -6.803492501707e-02 -6.879091511625e-02 -6.947903162814e-02 +-7.009893921874e-02 -7.065036636499e-02 -7.113310534910e-02 -7.154701219554e-02 +-7.189200655093e-02 -7.216807150707e-02 -7.237525336760e-02 -7.251366135851e-02 +-7.258346728307e-02 -7.258490512157e-02 -7.251827057659e-02 -7.238392056411e-02 +-7.218227265139e-02 -7.191380444207e-02 -7.157905290935e-02 -7.117861367794e-02 +-7.071314025570e-02 -7.018334321567e-02 -6.958998932949e-02 -6.893390065319e-02 +-6.821595356620e-02 -6.743707776469e-02 -6.659825521027e-02 -6.570051903513e-02 +-6.474495240479e-02 -6.373268733955e-02 -6.266490349590e-02 -6.154282690909e-02 +-6.036772869814e-02 -5.914092373457e-02 -5.786376927608e-02 -5.653766356675e-02 +-5.516404440485e-02 -5.374438767992e-02 -5.228020588032e-02 -5.077304657284e-02 +-4.922449085577e-02 -4.763615178696e-02 -4.600967278826e-02 -4.434672602804e-02 +-4.264901078311e-02 -4.091825178181e-02 -3.915619752961e-02 -3.736461861899e-02 +-3.554530602502e-02 -3.370006938831e-02 -3.183073528694e-02 -2.993914549896e-02 +-2.802715525691e-02 -2.609663149633e-02 -2.414945109941e-02 -2.218749913577e-02 +-2.021266710177e-02 -1.822685116001e-02 -1.623195038059e-02 -1.422986498576e-02 +-1.222249459954e-02 -1.021173650382e-02 -8.199483902594e-03 -6.187624195818e-03 +-4.178037264425e-03 -2.172593768075e-03 -1.731534570916e-04 1.818436499896e-03 +3.800343171147e-03 5.770749498377e-03 7.727855913281e-03 9.669881932597e-03 +1.159506773032e-02 1.350167568574e-02 1.538799190588e-02 1.725232772119e-02 +1.909302115304e-02 2.090843835186e-02 2.269697500474e-02 2.445705771117e-02 +2.618714532593e-02 2.788573026788e-02 2.955133979361e-02 3.118253723494e-02 +3.277792319915e-02 3.433613673106e-02 3.585585643598e-02 3.733580156260e-02 +3.877473304497e-02 4.017145450282e-02 4.152481319930e-02 4.283370095549e-02 +4.409705502095e-02 4.531385889966e-02 4.648314313074e-02 4.760398602330e-02 +4.867551434504e-02 4.969690396393e-02 5.066738044268e-02 5.158621958553e-02 +5.245274793696e-02 5.326634323216e-02 5.402643479884e-02 5.473250391019e-02 +5.538408408892e-02 5.598076136215e-02 5.652217446705e-02 5.700801500733e-02 +5.743802756036e-02 5.781200973523e-02 5.812981218165e-02 5.839133854989e-02 +5.859654540203e-02 5.874544207454e-02 5.883809049276e-02 5.887460493731e-02 +5.885515176296e-02 5.877994907029e-02 5.864926633065e-02 5.846342396483e-02 +5.822279287599e-02 5.792779393747e-02 5.757889743600e-02 5.717662247100e-02 +5.672153631070e-02 5.621425370570e-02 5.565543616079e-02 5.504579116584e-02 +5.438607138658e-02 5.367707381606e-02 5.291963888783e-02 5.211464955159e-02 +5.126303031252e-02 5.036574623496e-02 4.942380191178e-02 4.843824040031e-02 +4.741014212590e-02 4.634062375435e-02 4.523083703419e-02 4.408196761011e-02 +4.289523380852e-02 4.167188539674e-02 4.041320231670e-02 3.912049339471e-02 +3.779509502828e-02 3.643836985150e-02 3.505170538017e-02 3.363651263793e-02 +3.219422476486e-02 3.072629560979e-02 2.923419830763e-02 2.771942384323e-02 +2.618347960300e-02 2.462788791564e-02 2.305418458359e-02 2.146391740623e-02 +1.985864469655e-02 1.823993379249e-02 1.660935956441e-02 1.496850292005e-02 +1.331894930838e-02 1.166228722378e-02 1.000010671186e-02 8.333997878296e-03 +6.665549402163e-03 4.996347054970e-03 3.327972226886e-03 1.662000461435e-03 +-1.197198642185e-15 -1.656469662533e-03 -3.305859209674e-03 -4.946630921512e-03 +-6.577260077874e-03 + Type L N + 0 2 5 +0.000000000000e+00 8.843454829340e-05 3.536376431318e-04 7.953077383734e-04 +1.412942629879e-03 2.205840009229e-03 3.173098239600e-03 4.313617352846e-03 +5.626100265255e-03 7.109054211153e-03 8.760792392709e-03 1.057943584416e-02 +1.256291550825e-02 1.470897452253e-02 1.701517071310e-02 1.947887929282e-02 +2.209729576101e-02 2.486743900144e-02 2.778615457505e-02 3.085011820372e-02 +3.405583944115e-02 3.739966552686e-02 4.087778541869e-02 4.448623399960e-02 +4.822089645382e-02 5.207751280750e-02 5.605168262877e-02 6.013886988193e-02 +6.433440793030e-02 6.863350468212e-02 7.303124787377e-02 7.752261048427e-02 +8.210245627513e-02 8.676554544919e-02 9.150654042227e-02 9.632001170095e-02 +1.012004438601e-01 1.061422416135e-01 1.111397359702e-01 1.161871904705e-01 +1.212788074943e-01 1.264087346346e-01 1.315710711288e-01 1.367598743410e-01 +1.419691662889e-01 1.471929402053e-01 1.524251671307e-01 1.576598025256e-01 +1.628907928987e-01 1.681120824415e-01 1.733176196618e-01 1.785013640105e-01 +1.836572924922e-01 1.887794062539e-01 1.938617371432e-01 1.988983542297e-01 +2.038833702822e-01 2.088109481935e-01 2.136753073473e-01 2.184707299184e-01 +2.231915671013e-01 2.278322452582e-01 2.323872719807e-01 2.368512420586e-01 +2.412188433491e-01 2.454848625395e-01 2.496441907972e-01 2.536918293015e-01 +2.576228946506e-01 2.614326241370e-01 2.651163808874e-01 2.686696588600e-01 +2.720880876944e-01 2.753674374084e-01 2.785036229372e-01 2.814927085096e-01 +2.843309118560e-01 2.870146082457e-01 2.895403343460e-01 2.919047919020e-01 +2.941048512312e-01 2.961375545295e-01 2.980001189869e-01 2.996899397059e-01 +3.012045924239e-01 3.025418360331e-01 3.036996148978e-01 3.046760609651e-01 +3.054694956680e-01 3.060784316181e-01 3.065015740870e-01 3.067378222743e-01 +3.067862703616e-01 3.066462083512e-01 3.063171226887e-01 3.057986966696e-01 +3.050908106292e-01 3.041935419158e-01 3.031071646480e-01 3.018321492558e-01 +3.003691618077e-01 2.987190631224e-01 2.968829076694e-01 2.948619422570e-01 +2.926576045123e-01 2.902715211520e-01 2.877055060494e-01 2.849615580978e-01 +2.820418588735e-01 2.789487701018e-01 2.756848309287e-01 2.722527550014e-01 +2.686554273614e-01 2.648959011542e-01 2.609773941583e-01 2.569032851397e-01 +2.526771100344e-01 2.483025579636e-01 2.437834670878e-01 2.391238203025e-01 +2.343277407826e-01 2.293994873787e-01 2.243434498729e-01 2.191641440970e-01 +2.138662069216e-01 2.084543911193e-01 2.029335601097e-01 1.973086825914e-01 +1.915848270677e-01 1.857671562716e-01 1.798609214971e-01 1.738714568434e-01 +1.678041733775e-01 1.616645532235e-01 1.554581435837e-01 1.491905506995e-01 +1.428674337582e-01 1.364944987533e-01 1.300774923044e-01 1.236221954444e-01 +1.171344173807e-01 1.106199892374e-01 1.040847577856e-01 9.753457916862e-02 +9.097531263009e-02 8.441281425030e-02 7.785293069927e-02 7.130149301279e-02 +6.476431039851e-02 5.824716407897e-02 5.175580117834e-02 4.529592865971e-02 +3.887320731955e-02 3.249324584599e-02 2.616159494743e-02 1.988374155795e-02 +1.366510312583e-02 7.511021991405e-03 1.426759860405e-03 -4.582507621236e-03 +-1.051169618524e-02 -1.635581814577e-02 -2.210998748552e-02 -2.776942481765e-02 +-3.332946221840e-02 -3.878554792496e-02 -4.413325089389e-02 -4.936826521520e-02 +-5.448641437729e-02 -5.948365537855e-02 -6.435608268117e-02 -6.909993200312e-02 +-7.371158394439e-02 -7.818756744389e-02 -8.252456306333e-02 -8.671940609498e-02 +-9.076908949011e-02 -9.467076660523e-02 -9.842175376361e-02 -1.020195326294e-01 +-1.054617523925e-01 -1.087462317616e-01 -1.118709607641e-01 -1.148341023516e-01 +-1.176339938086e-01 -1.202691479643e-01 -1.227382542061e-01 -1.250401792949e-01 +-1.271739679803e-01 -1.291388434172e-01 -1.309342073825e-01 -1.325596402933e-01 +-1.340149010263e-01 -1.352999265391e-01 -1.364148312948e-01 -1.373599064912e-01 +-1.381356190951e-01 -1.387426106843e-01 -1.391816960985e-01 -1.394538619017e-01 +-1.395602646572e-01 -1.395022290196e-01 -1.392812456445e-01 -1.388989689197e-01 +-1.383572145215e-01 -1.376579567977e-01 -1.368033259832e-01 -1.357956052489e-01 +-1.346372275904e-01 -1.333307725589e-01 -1.318789628388e-01 -1.302846606768e-01 +-1.285508641666e-01 -1.266807033933e-01 -1.246774364437e-01 -1.225444452862e-01 +-1.202852315255e-01 -1.179034120385e-01 -1.154027144950e-01 -1.127869727698e-01 +-1.100601222512e-01 -1.072261950524e-01 -1.042893151305e-01 -1.012536933192e-01 +-9.812362228211e-02 -9.490347139121e-02 -9.159768153769e-02 -8.821075988073e-02 +-8.474727454061e-02 -8.121184924242e-02 -7.760915791657e-02 -7.394391926241e-02 +-7.022089128150e-02 -6.644486578661e-02 -6.262066289307e-02 -5.875312549865e-02 +-5.484711375854e-02 -5.090749956161e-02 -4.693916101441e-02 -4.294697693916e-02 +-3.893582139206e-02 -3.491055820812e-02 -3.087603557870e-02 -2.683708066795e-02 +-2.279849427414e-02 -1.876504554194e-02 -1.474146673158e-02 -1.073244805069e-02 +-6.742632554596e-03 -2.776611120726e-03 1.161082497283e-03 5.065976530412e-03 +8.933665964617e-03 1.275981721555e-02 1.654017270256e-02 2.027055531696e-02 +2.394687277990e-02 2.756512188498e-02 3.112139262123e-02 3.461187217210e-02 +3.803284878607e-02 4.138071551510e-02 4.465197381679e-02 4.784323701676e-02 +5.095123362750e-02 5.397281052057e-02 5.690493594875e-02 5.974470241534e-02 +6.248932938769e-02 6.513616585240e-02 6.768269270979e-02 7.012652500537e-02 +7.246541399637e-02 7.469724905143e-02 7.682005938187e-02 7.883201560314e-02 +8.073143112517e-02 8.251676337075e-02 8.418661482097e-02 8.573973388724e-02 +8.717501560948e-02 8.849150218024e-02 8.968838329487e-02 9.076499632787e-02 +9.172082633592e-02 9.255550588818e-02 9.326881472473e-02 9.386067924413e-02 +9.433117182145e-02 9.468050995802e-02 9.490905526471e-02 9.501731228041e-02 +9.500592712786e-02 9.487568600880e-02 9.462751354110e-02 9.426247094018e-02 +9.378175404753e-02 9.318669120930e-02 9.247874100793e-02 9.165948985008e-02 +9.073064941431e-02 8.969405396193e-02 8.855165751490e-02 8.730553090442e-02 +8.595785869433e-02 8.451093598347e-02 8.296716509107e-02 8.132905212973e-02 +7.959920347039e-02 7.778032210396e-02 7.587520390419e-02 7.388673379677e-02 +7.181788183948e-02 6.967169921838e-02 6.745131416515e-02 6.515992780077e-02 +6.280080991070e-02 6.037729465690e-02 5.789277623210e-02 5.535070446159e-02 +5.275458035810e-02 5.010795163516e-02 4.741440818459e-02 4.467757752352e-02 +4.190112021655e-02 3.908872527867e-02 3.624410556442e-02 3.337099314900e-02 +3.047313470670e-02 2.755428689236e-02 2.461821173135e-02 2.166867202349e-02 +1.870942676643e-02 1.574422660391e-02 1.277680930427e-02 9.810895274485e-03 +6.850183114978e-03 3.898345220493e-03 9.590234320046e-04 -1.964175255218e-03 +-4.867682922457e-03 -7.747974892461e-03 -1.060157382366e-02 -1.342505372899e-02 +-1.621504391486e-02 -1.896823283569e-02 -2.168137185984e-02 -2.435127894258e-02 +-2.697484220215e-02 -2.954902339493e-02 -3.207086128584e-02 -3.453747491041e-02 +-3.694606672492e-02 -3.929392564125e-02 -4.157842994323e-02 -4.379705008142e-02 +-4.594735134334e-02 -4.802699639650e-02 -5.003374770156e-02 -5.196546979325e-02 +-5.382013142674e-02 -5.559580758741e-02 -5.729068136213e-02 -5.890304567025e-02 +-6.043130485283e-02 -6.187397611862e-02 -6.322969084568e-02 -6.449719573756e-02 +-6.567535383323e-02 -6.676314537007e-02 -6.775966849945e-02 -6.866413985459e-02 +-6.947589497063e-02 -7.019438855687e-02 -7.081919462152e-02 -7.135000644933e-02 +-7.178663643267e-02 -7.212901575695e-02 -7.237719394112e-02 -7.253133823464e-02 +-7.259173287195e-02 -7.255877818608e-02 -7.243298958297e-02 -7.221499637829e-02 +-7.190554049871e-02 -7.150547504972e-02 -7.101576275240e-02 -7.043747425129e-02 +-6.977178629627e-02 -6.901997980085e-02 -6.818343777997e-02 -6.726364317018e-02 +-6.626217653535e-02 -6.518071366117e-02 -6.402102304188e-02 -6.278496326262e-02 +-6.147448028115e-02 -6.009160461257e-02 -5.863844842095e-02 -5.711720252171e-02 +-5.553013329895e-02 -5.387957954164e-02 -5.216794920309e-02 -5.039771608784e-02 +-4.857141647040e-02 -4.669164565024e-02 -4.476105444761e-02 -4.278234564460e-02 +-4.075827037615e-02 -3.869162447569e-02 -3.658524477991e-02 -3.444200539771e-02 +-3.226481394767e-02 -3.005660776926e-02 -2.782035011212e-02 -2.555902630867e-02 +-2.327563993447e-02 -2.097320896137e-02 -1.865476190813e-02 -1.632333399337e-02 +-1.398196329553e-02 -1.163368692469e-02 -9.281537210775e-03 -6.928537913070e-03 +-4.577700455416e-03 -2.232020191838e-03 1.055272929233e-04 2.431989843527e-03 +4.744442350352e-03 7.039990317716e-03 9.315773379721e-03 1.156896875954e-02 +1.379679466805e-02 1.599651363785e-02 1.816543578862e-02 2.030092202019e-02 +2.240038712946e-02 2.446130284760e-02 2.648120079414e-02 2.845767534433e-02 +3.038838640685e-02 3.227106210840e-02 3.410350138237e-02 3.588357645862e-02 +3.760923525171e-02 3.927850364479e-02 4.088948766690e-02 4.244037556115e-02 +4.392943974174e-02 4.535503863768e-02 4.671561842131e-02 4.800971462001e-02 +4.923595360928e-02 5.039305398596e-02 5.147982782019e-02 5.249518178498e-02 +5.343811816249e-02 5.430773572606e-02 5.510323049754e-02 5.582389637918e-02 +5.646912565992e-02 5.703840939578e-02 5.753133766442e-02 5.794759969388e-02 +5.828698386590e-02 5.854937759416e-02 5.873476707813e-02 5.884323693321e-02 +5.887496969808e-02 5.883024522034e-02 5.870943992158e-02 5.851302594329e-02 +5.824157017513e-02 5.789573316698e-02 5.747626792690e-02 5.698401860662e-02 +5.641991907667e-02 5.578499139343e-02 5.508034416032e-02 5.430717078558e-02 +5.346674763916e-02 5.256043211145e-02 5.158966057661e-02 5.055594626341e-02 +4.946087703648e-02 4.830611309131e-02 4.709338456586e-02 4.582448907248e-02 +4.450128915314e-02 4.312570966174e-02 4.169973507682e-02 4.022540674857e-02 +3.870482008348e-02 3.714012167076e-02 3.553350635409e-02 3.388721425273e-02 +3.220352773586e-02 3.048476835413e-02 2.873329373248e-02 2.695149442828e-02 +2.514179075879e-02 2.330662960220e-02 2.144848117626e-02 1.956983579870e-02 +1.767320063363e-02 1.576109642796e-02 1.383605424216e-02 1.190061217943e-02 +9.957312117337e-03 8.008696446310e-03 6.057304818763e-03 4.105670913186e-03 +2.156319217133e-03 2.117618331311e-04 -1.725504688503e-03 -3.653002486023e-03 +-5.568275487930e-03 -7.468892476130e-03 -9.352450106845e-03 -1.121657588556e-02 +-1.305893109241e-02 -1.487721365444e-02 -1.666916096130e-02 -1.843255262097e-02 +-2.016521315220e-02 -2.186501461049e-02 -2.352987914451e-02 -2.515778147985e-02 +-2.674675132734e-02 -2.829487571296e-02 -2.980030122677e-02 -3.126123618819e-02 +-3.267595272522e-02 -3.404278876514e-02 -3.536014993456e-02 -3.662651136660e-02 +-3.784041941333e-02 -3.900049326142e-02 -4.010542644944e-02 -4.115398828509e-02 +-4.214502516090e-02 -4.307746176710e-02 -4.395030220038e-02 -4.476263096751e-02 +-4.551361388285e-02 -4.620249885901e-02 -4.682861658991e-02 -4.739138112576e-02 +-4.789029033958e-02 -4.832492628501e-02 -4.869495544526e-02 -4.900012887330e-02 +-4.924028222339e-02 -4.941533567430e-02 -4.952529374462e-02 -4.957024500079e-02 +-4.955036165852e-02 -4.946589907844e-02 -4.931719515703e-02 -4.910466961379e-02 +-4.882882317603e-02 -4.849023666264e-02 -4.808956996814e-02 -4.762756094888e-02 +-4.710502421290e-02 -4.652284981543e-02 -4.588200186193e-02 -4.518351702076e-02 +-4.442850294764e-02 -4.361813662421e-02 -4.275366261309e-02 -4.183639123185e-02 +-4.086769664858e-02 -3.984901490169e-02 -3.878184184664e-02 -3.766773103258e-02 +-3.650829151167e-02 -3.530518558430e-02 -3.406012648303e-02 -3.277487599862e-02 +-3.145124205122e-02 -3.009107621011e-02 -2.869627116519e-02 -2.726875815371e-02 +-2.581050434560e-02 -2.432351019094e-02 -2.280980673299e-02 -2.127145289039e-02 +-1.971053271207e-02 -1.812915260851e-02 -1.652943856288e-02 -1.491353332576e-02 +-1.328359359712e-02 -1.164178719905e-02 -9.990290243072e-03 -8.331284295577e-03 +-6.666953545004e-03 -4.999481974467e-03 -3.331050543370e-03 -1.663834381623e-03 +-2.402669613501e-15 1.658297479800e-03 3.308917071970e-03 4.949734646731e-03 +6.578645620480e-03 + Type L N + 0 2 6 +0.000000000000e+00 1.158449375594e-04 4.632072064351e-04 1.041569421675e-03 +1.850070109030e-03 2.887504951123e-03 4.152328531465e-03 5.642656572168e-03 +7.356268662154e-03 9.290611471781e-03 1.144280244933e-02 1.380963399377e-02 +1.638757809772e-02 1.917279145368e-02 2.216112101614e-02 2.534811001120e-02 +2.872900438505e-02 3.229875968163e-02 3.605204833944e-02 3.998326739671e-02 +4.408654659363e-02 4.835575685968e-02 5.278451917357e-02 5.736621378273e-02 +6.209398976888e-02 6.696077494550e-02 7.195928607265e-02 7.708203937428e-02 +8.232136134232e-02 8.766939981191e-02 9.311813529135e-02 9.865939253019e-02 +1.042848523085e-01 1.099860634300e-01 1.157544549012e-01 1.215813482797e-01 +1.274579701716e-01 1.333754648620e-01 1.393249070584e-01 1.452973147290e-01 +1.512836620174e-01 1.572748922140e-01 1.632619307658e-01 1.692356983058e-01 +1.751871236816e-01 1.811071569663e-01 1.869867824310e-01 1.928170314606e-01 +1.985889953941e-01 2.042938382712e-01 2.099228094656e-01 2.154672561873e-01 +2.209186358363e-01 2.262685281881e-01 2.315086473959e-01 2.366308537893e-01 +2.416271654543e-01 2.464897695783e-01 2.512110335412e-01 2.557835157396e-01 +2.601999761268e-01 2.644533864541e-01 2.685369401979e-01 2.724440621603e-01 +2.761684177267e-01 2.797039217702e-01 2.830447471879e-01 2.861853330583e-01 +2.891203924071e-01 2.918449195724e-01 2.943541971564e-01 2.966438025567e-01 +2.987096140655e-01 3.005478165298e-01 3.021549065652e-01 3.035276973145e-01 +3.046633227465e-01 3.055592414877e-01 3.062132401832e-01 3.066234363819e-01 +3.067882809417e-01 3.067065599532e-01 3.063773961785e-01 3.058002500042e-01 +3.049749199075e-01 3.039015424360e-01 3.025805917007e-01 3.010128783852e-01 +2.991995482717e-01 2.971420802874e-01 2.948422840751e-01 2.923022970908e-01 +2.895245812357e-01 2.865119190253e-01 2.832674093043e-01 2.797944625130e-01 +2.760967955125e-01 2.721784259784e-01 2.680436663704e-01 2.636971174878e-01 +2.591436616213e-01 2.543884553110e-01 2.494369217232e-01 2.442947426555e-01 +2.389678501851e-01 2.334624179713e-01 2.277848522262e-01 2.219417823669e-01 +2.159400513646e-01 2.097867058034e-01 2.034889856661e-01 1.970543138596e-01 +1.904902854990e-01 1.838046569639e-01 1.770053347441e-01 1.701003640922e-01 +1.630979174991e-01 1.560062830099e-01 1.488338523982e-01 1.415891092149e-01 +1.342806167313e-01 1.269170057925e-01 1.195069625999e-01 1.120592164414e-01 +1.045825273864e-01 9.708567396355e-02 8.957744084060e-02 8.206660652352e-02 +7.456193109275e-02 6.707214399493e-02 5.960593190768e-02 5.217192669509e-02 +4.477869347138e-02 3.743471878998e-02 3.014839897518e-02 2.292802861292e-02 +1.578178921756e-02 8.717738090536e-03 1.743797387035e-03 -5.132256593808e-03 +-1.190280388006e-02 -1.856039104457e-02 -2.509774115471e-02 -3.150776344014e-02 +-3.778356266528e-02 -4.391844819326e-02 -4.990594272891e-02 -5.573979072874e-02 +-6.141396646626e-02 -6.692268174186e-02 -7.226039322664e-02 -7.742180943043e-02 +-8.240189728471e-02 -8.719588833174e-02 -9.179928451186e-02 -9.620786354151e-02 +-1.004176838751e-01 -1.044250892447e-01 -1.082267127718e-01 -1.118194806463e-01 +-1.152006153691e-01 -1.183676385534e-01 -1.213183732835e-01 -1.240509460273e-01 +-1.265637881026e-01 -1.288556366940e-01 -1.309255354236e-01 -1.327728344720e-01 +-1.343971902544e-01 -1.357985646509e-01 -1.369772237950e-01 -1.379337364231e-01 +-1.386689717884e-01 -1.391840971439e-01 -1.394805747999e-01 -1.395601587609e-01 +-1.394248909492e-01 -1.390770970207e-01 -1.385193817826e-01 -1.377546242179e-01 +-1.367859721294e-01 -1.356168364080e-01 -1.342508849388e-01 -1.326920361532e-01 +-1.309444522377e-01 -1.290125320121e-01 -1.269009034870e-01 -1.246144161144e-01 +-1.221581327425e-01 -1.195373212894e-01 -1.167574461467e-01 -1.138241593296e-01 +-1.107432913851e-01 -1.075208420744e-01 -1.041629708430e-01 -1.006759870946e-01 +-9.706634028308e-02 -9.334060983866e-02 -8.950549494349e-02 -8.556780417290e-02 +-8.153444501805e-02 -7.741241330612e-02 -7.320878253450e-02 -6.893069313497e-02 +-6.458534168457e-02 -6.017997007931e-02 -5.572185468727e-02 -5.121829549741e-02 +-4.667660528048e-02 -4.210409877825e-02 -3.750808193722e-02 -3.289584120295e-02 +-2.827463289080e-02 -2.365167264895e-02 -1.903412502911e-02 -1.442909318035e-02 +-9.843608681133e-03 -5.284621524332e-03 -7.589902698312e-04 3.726527621051e-03 +8.165285255404e-03 1.255075556925e-02 1.687654036556e-02 2.113637911688e-02 +2.532415752022e-02 2.943391579212e-02 3.345985669244e-02 3.739635326564e-02 +4.123795628897e-02 4.497940141745e-02 4.861561601591e-02 5.214172566905e-02 +5.555306036077e-02 5.884516031483e-02 6.201378148917e-02 6.505490071711e-02 +6.796472048876e-02 7.073967336707e-02 7.337642603310e-02 7.587188295594e-02 +7.822318968311e-02 8.042773574815e-02 8.248315719229e-02 8.438733869820e-02 +8.613841533394e-02 8.773477390620e-02 8.917505392232e-02 9.045814816127e-02 +9.158320285438e-02 9.254961747711e-02 9.335704415391e-02 9.400538667863e-02 +9.449479915370e-02 9.482568425169e-02 9.499869110366e-02 9.501471281903e-02 +9.487488364239e-02 9.458057575324e-02 9.413339571510e-02 9.353518058094e-02 +9.278799366247e-02 9.189411997126e-02 9.085606134019e-02 8.967653123410e-02 +8.835844925907e-02 8.690493538012e-02 8.531930385757e-02 8.360505691270e-02 +8.176587813370e-02 7.980562563325e-02 7.772832496954e-02 7.553816184269e-02 +7.323947457889e-02 7.083674641501e-02 6.833459759641e-02 6.573777730123e-02 +6.305115540435e-02 6.027971409480e-02 5.742853936005e-02 5.450281235135e-02 +5.150780064392e-02 4.844884940628e-02 4.533137249275e-02 4.216084347362e-02 +3.894278661706e-02 3.568276783738e-02 3.238638562369e-02 2.905926196354e-02 +2.570703327558e-02 2.233534136558e-02 1.894982441988e-02 1.555610805018e-02 +1.215979640360e-02 8.766463351712e-03 5.381643771999e-03 2.010824935074e-03 +-1.340561989201e-03 -4.667150293877e-03 -7.963645952750e-03 -1.122483568154e-02 +-1.444559483040e-02 -1.762089509599e-02 -2.074581204182e-02 -2.381553241579e-02 +-2.682536125416e-02 -2.977072876185e-02 -3.264719695903e-02 -3.545046608454e-02 +-3.817638074709e-02 -4.082093581567e-02 -4.338028204082e-02 -4.585073139923e-02 +-4.822876215434e-02 -5.051102362607e-02 -5.269434066359e-02 -5.477571781513e-02 +-5.675234318974e-02 -5.862159200606e-02 -6.038102982396e-02 -6.202841545521e-02 +-6.356170355011e-02 -6.497904685724e-02 -6.627879815424e-02 -6.745951184806e-02 +-6.851994524352e-02 -6.945905947958e-02 -7.027602013348e-02 -7.097019749301e-02 +-7.154116649818e-02 -7.198870635366e-02 -7.231279981420e-02 -7.251363214552e-02 +-7.259158976385e-02 -7.254725855772e-02 -7.238142189594e-02 -7.209505832662e-02 +-7.168933897204e-02 -7.116562462502e-02 -7.052546255272e-02 -6.977058301437e-02 +-6.890289549963e-02 -6.792448469504e-02 -6.683760618612e-02 -6.564468190324e-02 +-6.434829531971e-02 -6.295118641090e-02 -6.145624638359e-02 -5.986651218503e-02 +-5.818516080152e-02 -5.641550335661e-02 -5.456097901941e-02 -5.262514873357e-02 +-5.061168877784e-02 -4.852438416946e-02 -4.636712192160e-02 -4.414388416646e-02 +-4.185874115570e-02 -3.951584415008e-02 -3.711941821030e-02 -3.467375490113e-02 +-3.218320492099e-02 -2.965217066937e-02 -2.708509876424e-02 -2.448647252192e-02 +-2.186080441173e-02 -1.921262849779e-02 -1.654649288024e-02 -1.386695214826e-02 +-1.117855985699e-02 -8.485861040583e-03 -5.793384773283e-03 -3.105636790551e-03 +-4.270921818921e-04 2.237811832983e-03 4.884683033275e-03 7.509181220273e-03 +1.010702512361e-02 1.267399917983e-02 1.520596017277e-02 1.769884372549e-02 +2.014867063378e-02 2.255155303169e-02 2.490370037951e-02 2.720142526540e-02 +2.944114901179e-02 3.161940707838e-02 3.373285425359e-02 3.577826962697e-02 +3.775256133536e-02 3.965277107591e-02 4.147607837955e-02 4.321980463900e-02 +4.488141688568e-02 4.645853131032e-02 4.794891652270e-02 4.935049654612e-02 +5.066135354291e-02 5.187973026750e-02 5.300403224421e-02 5.403282966737e-02 +5.496485902165e-02 5.579902442126e-02 5.653439866677e-02 5.717022401920e-02 +5.770591269104e-02 5.814104705468e-02 5.847537956906e-02 5.870883242566e-02 +5.884149691575e-02 5.887363252092e-02 5.880566572958e-02 5.863818858240e-02 +5.837195695027e-02 5.800788854867e-02 5.754706069270e-02 5.699070779760e-02 +5.634021862982e-02 5.559713331426e-02 5.476314010346e-02 5.384007191516e-02 +5.282990264466e-02 5.173474325923e-02 5.055683768156e-02 4.929855847020e-02 +4.796240230460e-02 4.655098528325e-02 4.506703804324e-02 4.351340071010e-02 +4.189301768686e-02 4.020893229156e-02 3.846428125282e-02 3.666228907290e-02 +3.480626226818e-02 3.289958349719e-02 3.094570558604e-02 2.894814546188e-02 +2.691047800448e-02 2.483632982661e-02 2.272937299373e-02 2.059331869362e-02 +1.843191086655e-02 1.624891980689e-02 1.404813574665e-02 1.183336243172e-02 +9.608410701586e-03 7.377092082996e-03 5.143212408206e-03 2.910565468323e-03 +6.829267120771e-04 -1.535952999666e-03 -3.742353573516e-03 -5.932591787285e-03 +-8.103027308005e-03 -1.025006861455e-02 -1.237017881542e-02 -1.445988135238e-02 +-1.651576558100e-02 -1.853449221918e-02 -2.051279865517e-02 -2.244750410684e-02 +-2.433551462404e-02 -2.617382792650e-02 -2.795953806972e-02 -2.968983993177e-02 +-3.136203351423e-02 -3.297352805078e-02 -3.452184591733e-02 -3.600462633794e-02 +-3.741962888111e-02 -3.876473674135e-02 -4.003795980148e-02 -4.123743747123e-02 +-4.236144129837e-02 -4.340837734873e-02 -4.437678835212e-02 -4.526535561139e-02 +-4.607290067221e-02 -4.679838675192e-02 -4.744091992563e-02 -4.799975006878e-02 +-4.847427155521e-02 -4.886402371075e-02 -4.916869102217e-02 -4.938810310223e-02 +-4.952223441176e-02 -4.957120373998e-02 -4.953527344494e-02 -4.941484845619e-02 +-4.921047504213e-02 -4.892283934503e-02 -4.855276568695e-02 -4.810121465025e-02 +-4.756928093668e-02 -4.695819100941e-02 -4.626930052278e-02 -4.550409154471e-02 +-4.466416957733e-02 -4.375126038127e-02 -4.276720660994e-02 -4.171396425980e-02 +-4.059359894342e-02 -3.940828199207e-02 -3.816028639507e-02 -3.685198258314e-02 +-3.548583406348e-02 -3.406439291435e-02 -3.259029514718e-02 -3.106625594443e-02 +-2.949506478171e-02 -2.787958044259e-02 -2.622272593490e-02 -2.452748331740e-02 +-2.279688844578e-02 -2.103402564700e-02 -1.924202233133e-02 -1.742404355109e-02 +-1.558328651563e-02 -1.372297507176e-02 -1.184635415898e-02 -9.956684249067e-03 +-8.057235779192e-03 -6.151283588064e-03 -4.242101364374e-03 -2.332956116824e-03 +-4.271026749379e-04 1.472221770211e-03 3.361803076335e-03 5.238455502416e-03 +7.099026994534e-03 8.940404396417e-03 1.075951857619e-02 1.255334946101e-02 +1.431893097146e-02 1.605335584770e-02 1.775378035967e-02 1.941742889385e-02 +2.104159840920e-02 2.262366275530e-02 2.416107684589e-02 2.565138068120e-02 +2.709220321295e-02 2.848126604591e-02 2.981638697042e-02 3.109548332051e-02 +3.231657515238e-02 3.347778823884e-02 3.457735687481e-02 3.561362649026e-02 +3.658505606648e-02 3.749022035241e-02 3.832781187797e-02 3.909664276163e-02 +3.979564630983e-02 4.042387840633e-02 4.098051868971e-02 4.146487151789e-02 +4.187636671855e-02 4.221456012506e-02 4.247913389767e-02 4.266989662998e-02 +4.278678324145e-02 4.282985465662e-02 4.279929727237e-02 4.269542221476e-02 +4.251866438748e-02 4.226958131403e-02 4.194885177638e-02 4.155727425296e-02 +4.109576515940e-02 4.056535689547e-02 3.996719570215e-02 3.930253933322e-02 +3.857275454567e-02 3.777931441390e-02 3.692379547270e-02 3.600787469448e-02 +3.503332630624e-02 3.400201845236e-02 3.291590970911e-02 3.177704545739e-02 +3.058755412020e-02 2.934964327168e-02 2.806559562458e-02 2.673776490353e-02 +2.536857161114e-02 2.396049869471e-02 2.251608712102e-02 2.103793136695e-02 +1.952867483397e-02 1.799100519427e-02 1.642764967678e-02 1.484137030113e-02 +1.323495906788e-02 1.161123311312e-02 9.973029835915e-03 8.323202006782e-03 +6.664612865637e-03 5.000131217437e-03 3.332626533897e-03 1.664964069491e-03 +-8.289501967746e-15 -1.659423408319e-03 -3.310482590678e-03 -4.950377429127e-03 +-6.576335943163e-03 + Type L N + 0 2 7 +0.000000000000e+00 1.469077279070e-04 5.873534290424e-04 1.320505160728e-03 +2.344978051437e-03 3.658836841985e-03 5.259599439572e-03 7.144241475153e-03 +9.309201856313e-03 1.175038930510e-02 1.446318986865e-02 1.744247538855e-02 +2.068261291309e-02 2.417747503490e-02 2.792045113452e-02 3.190445950906e-02 +3.612196036317e-02 4.056496963804e-02 4.522507365283e-02 5.009344453085e-02 +5.516085638202e-02 6.041770221118e-02 6.585401152093e-02 7.145946857587e-02 +7.722343129452e-02 8.313495073344e-02 8.918279112741e-02 9.535545044823e-02 +1.016411814439e-01 1.080280131193e-01 1.145037726172e-01 1.210561074614e-01 +1.276725081175e-01 1.343403308319e-01 1.410468207053e-01 1.477791349581e-01 +1.545243663455e-01 1.612695666768e-01 1.680017703972e-01 1.747080181883e-01 +1.813753805420e-01 1.879909812661e-01 1.945420208775e-01 2.010157998388e-01 +2.073997415975e-01 2.136814153829e-01 2.198485587212e-01 2.258890996255e-01 +2.317911784205e-01 2.375431691623e-01 2.431337006137e-01 2.485516767361e-01 +2.537862966618e-01 2.588270741088e-01 2.636638562041e-01 2.682868416798e-01 +2.726865984108e-01 2.768540802606e-01 2.807806432055e-01 2.844580607093e-01 +2.878785383179e-01 2.910347274517e-01 2.939197383675e-01 2.965271522693e-01 +2.988510325455e-01 3.008859351137e-01 3.026269178534e-01 3.040695491129e-01 +3.052099152728e-01 3.060446273565e-01 3.065708266738e-01 3.067861894905e-01 +3.066889307167e-01 3.062778066061e-01 3.055521164664e-01 3.045117033749e-01 +3.031569539037e-01 3.014887968528e-01 2.995087009974e-01 2.972186718536e-01 +2.946212474720e-01 2.917194932652e-01 2.885169958845e-01 2.850178561553e-01 +2.812266810873e-01 2.771485749762e-01 2.727891296141e-01 2.681544136287e-01 +2.632509609724e-01 2.580857585848e-01 2.526662332517e-01 2.470002376878e-01 +2.410960358693e-01 2.349622876458e-01 2.286080326604e-01 2.220426736104e-01 +2.152759588798e-01 2.083179645781e-01 2.011790760183e-01 1.938699686717e-01 +1.864015886344e-01 1.787851326427e-01 1.710320276768e-01 1.631539101899e-01 +1.551626050028e-01 1.470701039044e-01 1.388885439972e-01 1.306301858302e-01 +1.223073913581e-01 1.139326017712e-01 1.055183152335e-01 9.707706457492e-02 +8.862139497538e-02 8.016384168477e-02 7.171690781892e-02 6.329304227300e-02 +5.490461779312e-02 4.656390924647e-02 3.828307212992e-02 3.007412135648e-02 +2.194891035837e-02 1.391911054470e-02 5.996191151141e-03 -1.808600481890e-03 +-9.484258167120e-03 -1.702003562959e-02 -2.440546473363e-02 -3.163037314506e-02 +-3.868490139734e-02 -4.555951933149e-02 -5.224504188083e-02 -5.873264417311e-02 +-6.501387592367e-02 -7.108067509496e-02 -7.692538079896e-02 -8.254074542075e-02 +-8.791994594282e-02 -9.305659445147e-02 -9.794474780801e-02 -1.025789164694e-01 +-1.069540724446e-01 -1.110656563734e-01 -1.149095837193e-01 -1.184822500658e-01 +-1.217805355092e-01 -1.248018081440e-01 -1.275439266357e-01 -1.300052418806e-01 +-1.321845977508e-01 -1.340813309275e-01 -1.356952698260e-01 -1.370267326157e-01 +-1.380765243446e-01 -1.388459331740e-01 -1.393367257360e-01 -1.395511416236e-01 +-1.394918870281e-01 -1.391621275383e-01 -1.385654801181e-01 -1.377060042802e-01 +-1.365881924762e-01 -1.352169597232e-01 -1.335976324900e-01 -1.317359368659e-01 +-1.296379860378e-01 -1.273102671008e-01 -1.247596272310e-01 -1.219932592482e-01 +-1.190186865980e-01 -1.158437477845e-01 -1.124765802849e-01 -1.089256039783e-01 +-1.051995041218e-01 -1.013072139095e-01 -9.725789664597e-02 -9.306092757320e-02 +-8.872587538403e-02 -8.426248345993e-02 -7.968065086945e-02 -7.499041316440e-02 +-7.020192301119e-02 -6.532543069481e-02 -6.037126453315e-02 -5.534981123928e-02 +-5.027149626938e-02 -4.514676419385e-02 -3.998605912891e-02 -3.479980526588e-02 +-2.959838753486e-02 -2.439213243917e-02 -1.919128909660e-02 -1.400601052271e-02 +-8.846335191045e-03 -3.722168904420e-03 1.356732989385e-03 6.380783004879e-03 +1.134057851732e-02 1.622691832151e-02 2.103081872114e-02 2.574352911967e-02 +3.035654708513e-02 3.486163286212e-02 3.925082330556e-02 4.351644521183e-02 +4.765112802455e-02 5.164781589304e-02 5.549977906332e-02 5.920062458253e-02 +6.274430629942e-02 6.612513414455e-02 6.933778267570e-02 7.237729887534e-02 +7.523910918842e-02 7.791902579039e-02 8.041325207693e-02 8.271838736825e-02 +8.483143082256e-02 8.674978455485e-02 8.847125595848e-02 8.999405922906e-02 +9.131681609112e-02 9.243855573027e-02 9.335871393438e-02 9.407713144950e-02 +9.459405155731e-02 9.491011688263e-02 9.502636544080e-02 9.494422593643e-02 +9.466551232619e-02 9.419241765992e-02 9.352750721548e-02 9.267371094438e-02 +9.163431524611e-02 9.041295409077e-02 8.901359951046e-02 8.744055148121e-02 +8.569842721830e-02 8.379214990894e-02 8.172693690713e-02 7.950828741665e-02 +7.714196968891e-02 7.463400776333e-02 7.199066777860e-02 6.921844388396e-02 +6.632404378032e-02 6.331437392159e-02 6.019652440715e-02 5.697775359691e-02 +5.366547248077e-02 5.026722883464e-02 4.679069119550e-02 4.324363268817e-02 +3.963391473662e-02 3.596947069273e-02 3.225828941542e-02 2.850839883311e-02 +2.472784952212e-02 2.092469833385e-02 1.710699210281e-02 1.328275146789e-02 +9.459954838185e-03 5.646522534994e-03 1.850301140472e-03 -1.920951916666e-03 +-5.659583508850e-03 -9.358059661809e-03 -1.300898008295e-02 -1.660509233848e-02 +-2.013930565269e-02 -2.360470430360e-02 -2.699456059015e-02 -3.030234734709e-02 +-3.352174998469e-02 -3.664667803149e-02 -3.967127615940e-02 -4.258993467161e-02 +-4.539729943476e-02 -4.808828123843e-02 -5.065806456571e-02 -5.310211576030e-02 +-5.541619057664e-02 -5.759634110094e-02 -5.963892203234e-02 -6.154059631460e-02 +-6.329834011036e-02 -6.490944711108e-02 -6.637153217736e-02 -6.768253430551e-02 +-6.884071891787e-02 -6.984467947550e-02 -7.069333841342e-02 -7.138594739991e-02 +-7.192208692260e-02 -7.230166520569e-02 -7.252491646371e-02 -7.259239849874e-02 +-7.250498964925e-02 -7.226388509986e-02 -7.187059256291e-02 -7.132692734353e-02 +-7.063500680147e-02 -6.979724422389e-02 -6.881634212452e-02 -6.769528498567e-02 +-6.643733146074e-02 -6.504600605567e-02 -6.352509030898e-02 -6.187861349086e-02 +-6.011084284264e-02 -5.822627337901e-02 -5.622961727571e-02 -5.412579286672e-02 +-5.191991327530e-02 -4.961727470382e-02 -4.722334440823e-02 -4.474374838328e-02 +-4.218425878511e-02 -3.955078111839e-02 -3.684934121531e-02 -3.408607203436e-02 +-3.126720030668e-02 -2.839903305828e-02 -2.548794403649e-02 -2.254036006878e-02 +-1.956274738266e-02 -1.656159791469e-02 -1.354341563710e-02 -1.051470292991e-02 +-7.481947026484e-03 -4.451606560117e-03 -1.430098238890e-03 1.576216324357e-03 +4.561043600468e-03 7.518170924900e-03 1.044147904573e-02 1.332495441396e-02 +1.616270119189e-02 1.894895295610e-02 2.167808407238e-02 2.434462072042e-02 +2.694325154733e-02 2.946883792955e-02 3.191642382379e-02 3.428124518852e-02 +3.655873895850e-02 3.874455155588e-02 4.083454692234e-02 4.282481405790e-02 +4.471167405300e-02 4.649168660169e-02 4.816165598479e-02 4.971863651304e-02 +5.115993742146e-02 5.248312720725e-02 5.368603740490e-02 5.476676579313e-02 +5.572367902963e-02 5.655541471085e-02 5.726088285508e-02 5.783926680844e-02 +5.829002357453e-02 5.861288356966e-02 5.880784980680e-02 5.887519651265e-02 +5.881546718310e-02 5.862947208385e-02 5.831828520389e-02 5.788324067062e-02 +5.732592863653e-02 5.664819064849e-02 5.585211451158e-02 5.494002866046e-02 +5.391449605229e-02 5.277830759611e-02 5.153447513440e-02 5.018622399365e-02 +4.873698512129e-02 4.719038682738e-02 4.555024615001e-02 4.382055986426e-02 +4.200549515500e-02 4.010937997467e-02 3.813669310747e-02 3.609205396226e-02 +3.398021211664e-02 3.180603663516e-02 2.957450518526e-02 2.729069297434e-02 +2.495976153231e-02 2.258694736345e-02 2.017755049231e-02 1.773692292786e-02 +1.527045707069e-02 1.278357408768e-02 1.028171227885e-02 7.770315460692e-03 +5.254821390476e-03 2.740650255607e-03 2.331932519382e-04 -2.262198725284e-03 +-4.740226254575e-03 -7.195652402534e-03 -9.623313556838e-03 -1.201813005590e-02 +-1.437511659366e-02 -1.668939237858e-02 -1.895619102653e-02 -2.117087016772e-02 +-2.332892074888e-02 -2.542597601217e-02 -2.745782013337e-02 -2.942039650251e-02 +-3.130981563110e-02 -3.312236267077e-02 -3.485450452901e-02 -3.650289656895e-02 +-3.806438888046e-02 -3.953603211141e-02 -4.091508284839e-02 -4.219900853757e-02 +-4.338549193713e-02 -4.447243509383e-02 -4.545796283729e-02 -4.634042578657e-02 +-4.711840286474e-02 -4.779070331816e-02 -4.835636823817e-02 -4.881467158413e-02 +-4.916512070757e-02 -4.940745637847e-02 -4.954165231564e-02 -4.956791422416e-02 +-4.948667834399e-02 -4.929860951478e-02 -4.900459876297e-02 -4.860576041812e-02 +-4.810342876670e-02 -4.749915425206e-02 -4.679469923055e-02 -4.599203329469e-02 +-4.509332817483e-02 -4.410095223194e-02 -4.301746455484e-02 -4.184560867586e-02 +-4.058830591992e-02 -3.924864840252e-02 -3.782989169286e-02 -3.633544715909e-02 +-3.476887401313e-02 -3.313387107305e-02 -3.143426826184e-02 -2.967401786142e-02 +-2.785718554155e-02 -2.598794118356e-02 -2.407054951920e-02 -2.210936060516e-02 +-2.010880015427e-02 -1.807335974430e-02 -1.600758692586e-02 -1.391607525066e-02 +-1.180345424164e-02 -9.674379326701e-03 -7.533521757299e-03 -5.385558533686e-03 +-3.235162357996e-03 -1.086991636544e-03 1.054319447608e-03 3.184170770956e-03 +5.298005994152e-03 7.391322154623e-03 9.459679107286e-03 1.149870879385e-02 +1.350412432159e-02 1.547172883307e-02 1.739742414856e-02 1.927721916380e-02 +2.110723798592e-02 2.288372779141e-02 2.460306639022e-02 2.626176948115e-02 +2.785649758408e-02 2.938406263563e-02 3.084143423534e-02 3.222574553030e-02 +3.353429872728e-02 3.476457022169e-02 3.591421533407e-02 3.698107264539e-02 +3.796316792334e-02 3.885871763293e-02 3.966613202524e-02 4.038401779937e-02 +4.101118033356e-02 4.154662548216e-02 4.198956093638e-02 4.233939714728e-02 +4.259574781094e-02 4.275842991611e-02 4.282746335595e-02 4.280307010634e-02 +4.268567297399e-02 4.247589391862e-02 4.217455195441e-02 4.178266063662e-02 +4.130142514038e-02 4.073223893931e-02 4.007668009244e-02 3.933650714897e-02 +3.851365468085e-02 3.761022845408e-02 3.662850025054e-02 3.557090235235e-02 +3.444002170214e-02 3.323859375264e-02 3.196949601988e-02 3.063574135499e-02 +2.924047094993e-02 2.778694709296e-02 2.627854569045e-02 2.471874857175e-02 +2.311113559434e-02 2.145937656704e-02 1.976722300894e-02 1.803849976264e-02 +1.627709647992e-02 1.448695899886e-02 1.267208063096e-02 1.083649337755e-02 +8.984259094307e-03 7.119460623156e-03 5.246192910636e-03 3.368554131809e-03 +1.490636838737e-03 -3.834808475741e-04 -2.249743983023e-03 -4.104129465518e-03 +-5.942654601015e-03 -7.761385552468e-03 -9.556445653953e-03 -1.132402357260e-02 +-1.306038130132e-02 -1.476186196578e-02 -1.642489742950e-02 -1.804601568136e-02 +-1.962184799059e-02 -2.114913581438e-02 -2.262473744444e-02 -2.404563437887e-02 +-2.540893740670e-02 -2.671189239304e-02 -2.795188575326e-02 -2.912644960572e-02 +-3.023326659285e-02 -3.127017436145e-02 -3.223516969377e-02 -3.312641228142e-02 +-3.394222813561e-02 -3.468111262711e-02 -3.534173315109e-02 -3.592293141203e-02 +-3.642372532519e-02 -3.684331053186e-02 -3.718106152629e-02 -3.743653239329e-02 +-3.760945715608e-02 -3.769974973505e-02 -3.770750351867e-02 -3.763299054886e-02 +-3.747666032380e-02 -3.723913822194e-02 -3.692122355201e-02 -3.652388723420e-02 +-3.604826911899e-02 -3.549567495034e-02 -3.486757298104e-02 -3.416559024867e-02 +-3.339150852121e-02 -3.254725992210e-02 -3.163492224531e-02 -3.065671397135e-02 +-2.961498899606e-02 -2.851223108433e-02 -2.735104806176e-02 -2.613416575733e-02 +-2.486442171123e-02 -2.354475866194e-02 -2.217821782737e-02 -2.076793199522e-02 +-1.931711843802e-02 -1.782907166866e-02 -1.630715605253e-02 -1.475479829273e-02 +-1.317547980480e-02 -1.157272899787e-02 -9.950113479126e-03 -8.311232198628e-03 +-6.659707551603e-03 -4.999177455396e-03 -3.333287418206e-03 -1.665682616765e-03 +6.107527556058e-15 1.660139564409e-03 3.311139083646e-03 4.949433157140e-03 +6.571495601099e-03 + Type L N + 0 2 8 +0.000000000000e+00 1.816222897676e-04 7.260650408436e-04 1.632056859352e-03 +2.897481963989e-03 4.519384988051e-03 6.493977688712e-03 8.816647546198e-03 +1.148196823318e-02 1.448371193045e-02 1.781486346025e-02 2.146763620464e-02 +2.543348977210e-02 2.970314937161e-02 3.426662684946e-02 3.911324334017e-02 +4.423165347923e-02 4.960987112178e-02 5.523529650800e-02 6.109474481226e-02 +6.717447601048e-02 7.346022599663e-02 7.993723887676e-02 8.659030036608e-02 +9.340377221213e-02 1.003616275650e-01 1.074474872126e-01 1.146446565987e-01 +1.219361635373e-01 1.293047965375e-01 1.367331436507e-01 1.442036317510e-01 +1.516985661577e-01 1.592001705108e-01 1.666906268068e-01 1.741521155030e-01 +1.815668555997e-01 1.889171446072e-01 1.961853983078e-01 2.033541902202e-01 +2.104062906784e-01 2.173247054343e-01 2.240927136971e-01 2.306939055224e-01 +2.371122184676e-01 2.433319734278e-01 2.493379095743e-01 2.551152183140e-01 +2.606495761948e-01 2.659271766822e-01 2.709347607358e-01 2.756596461173e-01 +2.800897553645e-01 2.842136423684e-01 2.880205174954e-01 2.915002711977e-01 +2.946434960612e-01 2.974415072413e-01 2.998863612427e-01 3.019708730029e-01 +3.036886312414e-01 3.050340120434e-01 3.060021906490e-01 3.065891514228e-01 +3.067916959852e-01 3.066074494887e-01 3.060348650283e-01 3.050732261781e-01 +3.037226476526e-01 3.019840740932e-01 2.998592769860e-01 2.973508497219e-01 +2.944622008127e-01 2.911975452825e-01 2.875618942573e-01 2.835610427792e-01 +2.792015558782e-01 2.744907529345e-01 2.694366903727e-01 2.640481427281e-01 +2.583345821348e-01 2.523061562833e-01 2.459736649015e-01 2.393485348183e-01 +2.324427936662e-01 2.252690422894e-01 2.178404259217e-01 2.101706042029e-01 +2.022737201060e-01 1.941643678479e-01 1.858575598602e-01 1.773686928971e-01 +1.687135133615e-01 1.599080819292e-01 1.509687375553e-01 1.419120609460e-01 +1.327548375810e-01 1.235140203738e-01 1.142066920539e-01 1.048500273610e-01 +9.546125513622e-02 8.605762039846e-02 7.665634649361e-02 6.727459740229e-02 +5.792944029313e-02 4.863780840654e-02 3.941646435367e-02 3.028196391350e-02 +2.125062041004e-02 1.233846975003e-02 3.561236199343e-03 -5.065701024999e-03 +-1.352734027291e-02 -2.180908901717e-02 -2.989679437747e-02 -3.777677254537e-02 +-4.543583704590e-02 -5.286132577412e-02 -6.004112674843e-02 -6.696370252510e-02 +-7.361811322225e-02 -7.999403810449e-02 -8.608179568331e-02 -9.187236229169e-02 +-9.735738909511e-02 -1.025292175050e-01 -1.073808929647e-01 -1.119061770811e-01 +-1.160995580804e-01 -1.199562595691e-01 -1.234722475869e-01 -1.266442359394e-01 +-1.294696898072e-01 -1.319468276265e-01 -1.340746212460e-01 -1.358527943634e-01 +-1.372818192535e-01 -1.383629118017e-01 -1.390980248599e-01 -1.394898399479e-01 +-1.395417573246e-01 -1.392578844607e-01 -1.386430229430e-01 -1.377026538498e-01 +-1.364429216354e-01 -1.348706165695e-01 -1.329931557753e-01 -1.308185629194e-01 +-1.283554466042e-01 -1.256129775195e-01 -1.226008644118e-01 -1.193293289326e-01 +-1.158090794282e-01 -1.120512837384e-01 -1.080675410706e-01 -1.038698530203e-01 +-9.947059380872e-02 -9.488247981082e-02 -9.011853844896e-02 -8.519207652742e-02 +-8.011664808468e-02 -7.490602184136e-02 -6.957414832194e-02 -6.413512672929e-02 +-5.860317165080e-02 -5.299257967560e-02 -4.731769600168e-02 -4.159288111183e-02 +-3.583247759664e-02 -3.005077720215e-02 -2.426198817900e-02 -1.848020300878e-02 +-1.271936658204e-02 -6.993244901238e-03 -1.315394380088e-03 4.300868190743e-03 +9.842494943682e-03 1.529673543405e-02 2.065116427592e-02 2.589370785255e-02 +3.101267004258e-02 3.599675690559e-02 4.083510027343e-02 4.551728019665e-02 +5.003334619826e-02 5.437383729008e-02 5.852980071023e-02 6.249280934339e-02 +6.625497778907e-02 6.980897704613e-02 7.314804778570e-02 7.626601218788e-02 +7.915728432116e-02 8.181687904745e-02 8.424041943868e-02 8.642414269519e-02 +8.836490455929e-02 9.006018222135e-02 9.150807571923e-02 9.270730783581e-02 +9.365722250242e-02 9.435778172033e-02 9.480956101519e-02 9.501374344343e-02 +9.497211217267e-02 9.468704166176e-02 9.416148746913e-02 9.339897472166e-02 +9.240358527894e-02 9.117994363127e-02 8.973320157228e-02 8.806902168994e-02 +8.619355972266e-02 8.411344582917e-02 8.183576482396e-02 7.936803543167e-02 +7.671818861659e-02 7.389454504481e-02 7.090579173892e-02 6.776095798660e-02 +6.446939056584e-02 6.104072835127e-02 5.748487636690e-02 5.381197935194e-02 +5.003239490686e-02 4.615666628805e-02 4.219549491945e-02 3.815971269027e-02 +3.406025410792e-02 2.990812837531e-02 2.571439146162e-02 2.149011823517e-02 +1.724637472661e-02 1.299419059013e-02 8.744531829237e-03 4.508273852986e-03 +2.961749272744e-04 -3.881149915498e-03 -8.013254446491e-03 -1.208988622993e-02 +-1.610101097347e-02 -2.003683618275e-02 -2.388783406540e-02 -2.764476363204e-02 +-3.129869194379e-02 -3.484101445852e-02 -3.826347443024e-02 -4.155818131877e-02 +-4.471762816948e-02 -4.773470792561e-02 -5.060272863842e-02 -5.331542754373e-02 +-5.586698397572e-02 -5.825203109266e-02 -6.046566639160e-02 -6.250346099278e-02 +-6.436146767730e-02 -6.603622766491e-02 -6.752477612201e-02 -6.882464639312e-02 +-6.993387295238e-02 -7.085099307464e-02 -7.157504722924e-02 -7.210557820247e-02 +-7.244262895797e-02 -7.258673924740e-02 -7.253894098692e-02 -7.230075241770e-02 +-7.187417107211e-02 -7.126166556964e-02 -7.046616626985e-02 -6.949105481195e-02 +-6.834015257368e-02 -6.701770808449e-02 -6.552838343030e-02 -6.387723969000e-02 +-6.206972144544e-02 -6.011164040925e-02 -5.800915821676e-02 -5.576876842981e-02 +-5.339727780257e-02 -5.090178686060e-02 -4.828966984605e-02 -4.556855408335e-02 +-4.274629882071e-02 -3.983097360395e-02 -3.683083624003e-02 -3.375431040840e-02 +-3.060996297894e-02 -2.740648109560e-02 -2.415264908530e-02 -2.085732525166e-02 +-1.752941861326e-02 -1.417786564581e-02 -1.081160708746e-02 -7.439564866003e-03 +-4.070619205987e-03 -7.135859732106e-04 2.622805686953e-03 5.929935361925e-03 +9.199312980668e-03 1.242259996581e-02 1.559162987751e-02 1.869842849911e-02 +2.173523331604e-02 2.469451234151e-02 2.756898224422e-02 3.035162573535e-02 +3.303570817425e-02 3.561479335437e-02 3.808275843334e-02 4.043380797323e-02 +4.266248705992e-02 4.476369347245e-02 4.673268887618e-02 4.856510901611e-02 +5.025697288934e-02 5.180469087832e-02 5.320507182949e-02 5.445532906433e-02 +5.555308531311e-02 5.649637656394e-02 5.728365482286e-02 5.791378978346e-02 +5.838606940722e-02 5.870019941863e-02 5.885630172195e-02 5.885491174902e-02 +5.869697475057e-02 5.838384104567e-02 5.791726024702e-02 5.729937448205e-02 +5.653271063232e-02 5.562017161625e-02 5.456502674237e-02 5.337090116277e-02 +5.204176445833e-02 5.058191838963e-02 4.899598384939e-02 4.728888705396e-02 +4.546584501350e-02 4.353235032190e-02 4.149415530922e-02 3.935725560067e-02 +3.712787312779e-02 3.481243863837e-02 3.241757375288e-02 2.995007261620e-02 +2.741688319407e-02 2.482508826450e-02 2.218188615501e-02 1.949457127667e-02 +1.677051450671e-02 1.401714347104e-02 1.124192277859e-02 8.452334258824e-03 +5.655857253885e-03 2.859949016168e-03 7.202526183728e-05 -2.700559069969e-03 +-5.450528803207e-03 -8.170707208110e-03 -1.085403433436e-02 -1.349358494819e-02 +-1.608258602868e-02 -1.861443377973e-02 -2.108271011576e-02 -2.348119858071e-02 +-2.580389966152e-02 -2.804504545901e-02 -3.019911368107e-02 -3.226084092472e-02 +-3.422523521586e-02 -3.608758777739e-02 -3.784348399868e-02 -3.948881358142e-02 +-4.101977983929e-02 -4.243290813094e-02 -4.372505340850e-02 -4.489340686581e-02 +-4.593550167321e-02 -4.684921778814e-02 -4.763278583322e-02 -4.828479003590e-02 +-4.880417022633e-02 -4.919022289253e-02 -4.944260129431e-02 -4.956131464010e-02 +-4.954672633286e-02 -4.939955129407e-02 -4.912085237686e-02 -4.871203588183e-02 +-4.817484619129e-02 -4.751135953999e-02 -4.672397694244e-02 -4.581541629921e-02 +-4.478870370651e-02 -4.364716399537e-02 -4.239441052864e-02 -4.103433428591e-02 +-3.957109226798e-02 -3.800909525448e-02 -3.635299494945e-02 -3.460767055138e-02 +-3.277821478540e-02 -3.086991943675e-02 -2.888826042553e-02 -2.683888246406e-02 +-2.472758333878e-02 -2.256029785980e-02 -2.034308152151e-02 -1.808209391853e-02 +-1.578358196155e-02 -1.345386293810e-02 -1.109930746339e-02 -8.726322366442e-03 +-6.341333556919e-03 -3.950768917616e-03 -1.561041267603e-03 8.214685595516e-04 +3.190428478422e-03 5.539571711839e-03 7.862713105768e-03 1.015376515704e-02 +1.240675371303e-02 1.461583330327e-02 1.677530206426e-02 1.887961621988e-02 +2.092340408113e-02 2.290147953035e-02 2.480885495661e-02 2.664075361042e-02 +2.839262134767e-02 3.006013773450e-02 3.163922648626e-02 3.312606521612e-02 +3.451709447020e-02 3.580902602862e-02 3.699885045340e-02 3.808384386657e-02 +3.906157394371e-02 3.992990511037e-02 4.068700293090e-02 4.133133768149e-02 +4.186168710125e-02 4.227713831753e-02 4.257708894362e-02 4.276124734946e-02 +4.282963210800e-02 4.278257062179e-02 4.262069693714e-02 4.234494875454e-02 +4.195656364671e-02 4.145707449743e-02 4.084830417625e-02 4.013235946636e-02 +3.931162426453e-02 3.838875207418e-02 3.736665781404e-02 3.624850896700e-02 +3.503771609510e-02 3.373792274817e-02 3.235299479545e-02 3.088700921045e-02 +2.934424234114e-02 2.772915769830e-02 2.604639329640e-02 2.430074858229e-02 +2.249717098781e-02 2.064074214350e-02 1.873666379119e-02 1.679024343397e-02 +1.480687976259e-02 1.279204789768e-02 1.075128448776e-02 8.690172702883e-03 +6.614327164212e-03 4.529378849718e-03 2.440960016003e-03 3.546891762300e-04 +-1.723843826266e-03 -3.789092609477e-03 -5.835568870624e-03 -7.857856792378e-03 +-9.850627199989e-03 -1.180865143274e-02 -1.372681489399e-02 -1.560013024515e-02 +-1.742375020984e-02 -1.919297995581e-02 -2.090328902336e-02 -2.255032277022e-02 +-2.412991330451e-02 -2.563808987852e-02 -2.707108871781e-02 -2.842536226166e-02 +-2.969758779257e-02 -3.088467543407e-02 -3.198377549807e-02 -3.299228516462e-02 +-3.390785447876e-02 -3.472839165117e-02 -3.545206765108e-02 -3.607732008177e-02 +-3.660285633117e-02 -3.702765599168e-02 -3.735097254568e-02 -3.757233431473e-02 +-3.769154467277e-02 -3.770868152547e-02 -3.762409605970e-02 -3.743841076912e-02 +-3.715251676396e-02 -3.676757037443e-02 -3.628498905967e-02 -3.570644663541e-02 +-3.503386783573e-02 -3.426942222548e-02 -3.341551748227e-02 -3.247479206786e-02 +-3.145010731083e-02 -3.034453892367e-02 -2.916136797890e-02 -2.790407137006e-02 +-2.657631178510e-02 -2.518192722021e-02 -2.372492006395e-02 -2.220944578217e-02 +-2.063980123523e-02 -1.902041265998e-02 -1.735582334967e-02 -1.565068106572e-02 +-1.390972521576e-02 -1.213777383294e-02 -1.033971039195e-02 -8.520470497345e-03 +-6.685028480247e-03 -4.838383939254e-03 -2.985548261812e-03 -1.131531161935e-03 +7.186727298842e-04 2.560097188991e-03 4.387817595918e-03 6.196963978004e-03 +7.982733859050e-03 9.740404883418e-03 1.146534718170e-02 1.315303544582e-02 +1.479906068247e-02 1.639914161451e-02 1.794913570120e-02 1.944504974918e-02 +2.088305008724e-02 2.225947227929e-02 2.357083035107e-02 2.481382550780e-02 +2.598535432110e-02 2.708251636518e-02 2.810262128379e-02 2.904319527096e-02 +2.990198695028e-02 3.067697263896e-02 3.136636098475e-02 3.196859696540e-02 +3.248236524221e-02 3.290659286073e-02 3.324045129372e-02 3.348335782306e-02 +3.363497625903e-02 3.369521699747e-02 3.366423641657e-02 3.354243561739e-02 +3.333045851338e-02 3.302918927637e-02 3.263974914783e-02 3.216349262613e-02 +3.160200304192e-02 3.095708753555e-02 3.023077145194e-02 2.942529216962e-02 +2.854309238255e-02 2.758681285422e-02 2.655928466521e-02 2.546352097668e-02 +2.430270833320e-02 2.308019752980e-02 2.179949406905e-02 2.046424823497e-02 +1.907824481156e-02 1.764539247469e-02 1.616971288658e-02 1.465532952316e-02 +1.310645626504e-02 1.152738578322e-02 9.922477751471e-03 8.296146917260e-03 +6.652851063798e-03 4.997078895596e-03 3.333337880273e-03 1.666142079259e-03 +2.389818419419e-15 -1.660597497888e-03 -3.311189210362e-03 -4.947355478647e-03 +-6.564729929525e-03 + Type L N + 0 2 9 +0.000000000000e+00 2.199878632246e-04 8.793292279983e-04 1.976159129335e-03 +3.507374991733e-03 5.468645159338e-03 7.854420806502e-03 1.065795119347e-02 +1.387130222514e-02 1.748537826075e-02 2.148994711368e-02 2.587366817106e-02 +3.062412355489e-02 3.572785223720e-02 4.117038701400e-02 4.693629423461e-02 +5.300921617524e-02 5.937191593841e-02 6.600632475287e-02 7.289359154170e-02 +8.001413462032e-02 8.734769538014e-02 9.487339380785e-02 1.025697856858e-01 +1.104149213138e-01 1.183864055887e-01 1.264614592744e-01 1.346169812922e-01 +1.428296118575e-01 1.510757962875e-01 1.593318493033e-01 1.675740196468e-01 +1.757785548339e-01 1.839217658645e-01 1.919800917091e-01 1.999301633953e-01 +2.077488675152e-01 2.154134089799e-01 2.229013728467e-01 2.301907850499e-01 +2.372601718671e-01 2.440886179582e-01 2.506558228185e-01 2.569421554894e-01 +2.629287073803e-01 2.685973430545e-01 2.739307488430e-01 2.789124791541e-01 +2.835270003525e-01 2.877597320911e-01 2.915970859835e-01 2.950265015140e-01 +2.980364790901e-01 3.006166101497e-01 3.027576042443e-01 3.044513130277e-01 +3.056907510889e-01 3.064701135762e-01 3.067847905695e-01 3.066313781658e-01 +3.060076862537e-01 3.049127429601e-01 3.033467957635e-01 3.013113092773e-01 +2.988089597136e-01 2.958436260517e-01 2.924203779398e-01 2.885454603714e-01 +2.842262751846e-01 2.794713594426e-01 2.742903607604e-01 2.686940096552e-01 +2.626940890007e-01 2.563034006781e-01 2.495357295217e-01 2.424058046661e-01 +2.349292584071e-01 2.271225826964e-01 2.190030833979e-01 2.105888324354e-01 +2.018986179717e-01 1.929518927617e-01 1.837687208269e-01 1.743697226046e-01 +1.647760187269e-01 1.550091725908e-01 1.450911318804e-01 1.350441692083e-01 +1.248908220419e-01 1.146538320850e-01 1.043560842835e-01 9.402054562715e-02 +8.367020391676e-02 7.332800666863e-02 6.301680032486e-02 5.275926993817e-02 +4.257787949767e-02 3.249481305968e-02 2.253191684506e-02 1.271064246129e-02 +3.051991403943e-03 -6.423539011990e-03 -1.569600814480e-02 -2.474608280168e-02 +-3.355508616137e-02 -4.210504471356e-02 -5.037873309104e-02 -5.835971667642e-02 +-6.603239187260e-02 -7.338202393252e-02 -8.039478225132e-02 -8.705777303152e-02 +-9.335906923935e-02 -9.928773777867e-02 -1.048338638166e-01 -1.099885722039e-01 +-1.147440459405e-01 -1.190935416471e-01 -1.230314020099e-01 -1.265530651757e-01 +-1.296550710843e-01 -1.323350647308e-01 -1.345917963635e-01 -1.364251186262e-01 +-1.378359806693e-01 -1.388264192555e-01 -1.393995469001e-01 -1.395595370904e-01 +-1.393116066394e-01 -1.386619952351e-01 -1.376179422552e-01 -1.361876609259e-01 +-1.343803099072e-01 -1.322059623985e-01 -1.296755728617e-01 -1.268009414673e-01 +-1.235946763737e-01 -1.200701539568e-01 -1.162414771124e-01 -1.121234317578e-01 +-1.077314416644e-01 -1.030815217573e-01 -9.819023002316e-02 -9.307461816620e-02 +-8.775218116234e-02 -8.224080585759e-02 -7.655871876268e-02 -7.072443319624e-02 +-6.475669593018e-02 -5.867443349193e-02 -5.249669827824e-02 -4.624261463530e-02 +-3.993132505925e-02 -3.358193667011e-02 -2.721346811084e-02 -2.084479702113e-02 +-1.449460823326e-02 -8.181342834745e-03 -1.923148239074e-03 4.262170597480e-03 +1.035719867912e-02 1.634495706419e-02 2.220894742446e-02 2.793319494990e-02 +3.350228948471e-02 3.890142478554e-02 4.411643579911e-02 4.913383386249e-02 +5.394083973606e-02 5.852541438554e-02 6.287628743675e-02 6.698298323374e-02 +7.083584443829e-02 7.442605311622e-02 7.774564926363e-02 8.078754673372e-02 +8.354554653285e-02 8.601434746216e-02 8.818955408889e-02 9.006768203980e-02 +9.164616061647e-02 9.292333274034e-02 9.389845224334e-02 9.457167852718e-02 +9.494406862238e-02 9.501756668542e-02 9.479499097973e-02 9.428001839337e-02 +9.347716655333e-02 9.239177360303e-02 9.102997571616e-02 8.939868242626e-02 +8.750554985761e-02 8.535895194856e-02 8.296794976386e-02 8.034225899804e-02 +7.749221577606e-02 7.442874086263e-02 7.116330239521e-02 6.770787725968e-02 +6.407491123093e-02 6.027727800392e-02 5.632823724291e-02 5.224139177928e-02 +4.803064408986e-02 4.371015218923e-02 3.929428507052e-02 3.479757782977e-02 +3.023468660928e-02 2.562034349494e-02 2.096931150214e-02 1.629633978397e-02 +1.161611919360e-02 6.943238331471e-03 2.292140205463e-03 -2.322920370225e-03 +-6.887918514673e-03 -1.138910003869e-02 -1.581302110610e-02 -2.014658668588e-02 +-2.437708768709e-02 -2.849223667348e-02 -3.248020205920e-02 -3.632964069210e-02 +-4.002972873681e-02 -4.357019077484e-02 -4.694132704532e-02 -5.013403875559e-02 +-5.313985139713e-02 -5.595093600899e-02 -5.856012833683e-02 -6.096094584281e-02 +-6.314760252806e-02 -6.511502153621e-02 -6.685884551357e-02 -6.837544470817e-02 +-6.966192279707e-02 -7.071612043809e-02 -7.153661654906e-02 -7.212272732468e-02 +-7.247450300756e-02 -7.259272243721e-02 -7.247888540685e-02 -7.213520286468e-02 +-7.156458500260e-02 -7.077062728145e-02 -6.975759444778e-02 -6.853040260321e-02 +-6.709459939274e-02 -6.545634238392e-02 -6.362237571384e-02 -6.160000508571e-02 +-5.939707120145e-02 -5.702192172107e-02 -5.448338184333e-02 -5.179072360620e-02 +-4.895363400890e-02 -4.598218206008e-02 -4.288678485997e-02 -3.967817282603e-02 +-3.636735417425e-02 -3.296557876942e-02 -2.948430145944e-02 -2.593514500936e-02 +-2.232986275155e-02 -1.868030106874e-02 -1.499836182640e-02 -1.129596487050e-02 +-7.585010705922e-03 -3.877343469460e-03 -1.847143100734e-04 3.481254713080e-03 +7.109106106306e-03 1.068758168479e-02 1.420565648066e-02 1.765257171565e-02 +2.101786674184e-02 2.429140985759e-02 2.746342790972e-02 3.052453459729e-02 +3.346575739671e-02 3.627856303269e-02 3.895488142433e-02 4.148712804086e-02 +4.386822460664e-02 4.609161810065e-02 4.815129800111e-02 5.004181173166e-02 +5.175827827122e-02 5.329639989576e-02 5.465247202582e-02 5.582339115998e-02 +5.680666088027e-02 5.760039592173e-02 5.820332430421e-02 5.861478753074e-02 +5.883473886252e-02 5.886373968673e-02 5.870295399914e-02 5.835414102910e-02 +5.781964604028e-02 5.710238934612e-02 5.620585358389e-02 5.513406929708e-02 +5.389159888011e-02 5.248351894493e-02 5.091540117308e-02 4.919329172142e-02 +4.732368925408e-02 4.531352167665e-02 4.317012165270e-02 4.090120098583e-02 +3.851482395387e-02 3.601937968419e-02 3.342355366222e-02 3.073629846700e-02 +2.796680382983e-02 2.512446611365e-02 2.221885731196e-02 1.925969366728e-02 +1.625680400978e-02 1.322009791697e-02 1.015953379548e-02 7.085086985819e-03 +4.006717990083e-03 9.343409221033e-04 -2.122207722006e-03 -5.153199876226e-03 +-8.149046205155e-03 -1.110032579993e-02 -1.399781517917e-02 -1.683251650722e-02 +-1.959568494479e-02 -2.227885505038e-02 -2.487386615403e-02 -2.737288662881e-02 +-2.976843698917e-02 -3.205341174916e-02 -3.422109997818e-02 -3.626520449573e-02 +-3.817985965185e-02 -3.995964764408e-02 -4.159961332693e-02 -4.309527747477e-02 +-4.444264846413e-02 -4.563823234630e-02 -4.667904128676e-02 -4.756260035281e-02 +-4.828695263640e-02 -4.885066270423e-02 -4.925281837259e-02 -4.949303080981e-02 +-4.957143297428e-02 -4.948867640132e-02 -4.924592635723e-02 -4.884485538421e-02 +-4.828763526424e-02 -4.757692743560e-02 -4.671587189972e-02 -4.570807466124e-02 +-4.455759374821e-02 -4.326892386370e-02 -4.184697972440e-02 -4.029707814536e-02 +-3.862491893394e-02 -3.683656465934e-02 -3.493841936759e-02 -3.293720631450e-02 +-3.083994479229e-02 -2.865392612774e-02 -2.638668893222e-02 -2.404599368583e-02 +-2.163979673974e-02 -1.917622382202e-02 -1.666354313384e-02 -1.411013812330e-02 +-1.152448002530e-02 -8.915100255805e-03 -6.290562749049e-03 -3.659436326144e-03 +-1.030267182759e-03 1.588448416978e-03 4.188291154379e-03 6.760945293228e-03 +9.298224856821e-03 1.179209926377e-02 1.423471834338e-02 1.661843665371e-02 +1.893583702815e-02 2.117975327884e-02 2.334329198853e-02 2.541985332563e-02 +2.740315082040e-02 2.928723004408e-02 3.106648613639e-02 3.273568013062e-02 +3.428995402986e-02 3.572484459183e-02 3.703629578417e-02 3.822066987657e-02 +3.927475714035e-02 4.019578413094e-02 4.098142053316e-02 4.162978455384e-02 +4.213944685128e-02 4.250943299532e-02 4.273922445695e-02 4.282875813085e-02 +4.277842439880e-02 4.258906374688e-02 4.226196195359e-02 4.179884387064e-02 +4.120186582262e-02 4.047360665596e-02 3.961705747178e-02 3.863561008134e-02 +3.753304422663e-02 3.631351361252e-02 3.498153080037e-02 3.354195101643e-02 +3.199995493175e-02 3.036103047315e-02 2.863095372782e-02 2.681576900667e-02 +2.492176813392e-02 2.295546903276e-02 2.092359367870e-02 1.883304549411e-02 +1.669088625872e-02 1.450431261231e-02 1.228063222673e-02 1.002723972500e-02 +7.751592425892e-03 5.461185992628e-03 3.163530064113e-03 8.661239471169e-04 +-1.423567552895e-03 -3.698138085252e-03 -5.950263415892e-03 -8.172724722765e-03 +-1.035843145153e-02 -1.250044365998e-02 -1.459199378161e-02 -1.662650774079e-02 +-1.859762535438e-02 -2.049921995729e-02 -2.232541719211e-02 -2.407061290580e-02 +-2.572949009978e-02 -2.729703488265e-02 -2.876855137857e-02 -3.013967554749e-02 +-3.140638787734e-02 -3.256502491202e-02 -3.361228958282e-02 -3.454526031495e-02 +-3.536139888491e-02 -3.605855700843e-02 -3.663498164306e-02 -3.708931899344e-02 +-3.742061721175e-02 -3.762832778976e-02 -3.771230564345e-02 -3.767280789506e-02 +-3.751049136182e-02 -3.722640876460e-02 -3.682200367381e-02 -3.629910421392e-02 +-3.565991555179e-02 -3.490701119789e-02 -3.404332315311e-02 -3.307213093760e-02 +-3.199704954126e-02 -3.082201633910e-02 -2.955127701775e-02 -2.818937056221e-02 +-2.674111335517e-02 -2.521158244345e-02 -2.360609802887e-02 -2.193020524305e-02 +-2.018965526765e-02 -1.839038586356e-02 -1.653850137407e-02 -1.464025226861e-02 +-1.270201429484e-02 -1.073026730782e-02 -8.731573845858e-03 -6.712557523091e-03 +-4.679881309316e-03 -2.640225767507e-03 -6.002673194726e-04 1.433343390304e-03 +3.454002963193e-03 5.455176478626e-03 7.430418422352e-03 9.373393244311e-03 +1.127789548115e-02 1.313786938007e-02 1.494742796245e-02 1.670087146789e-02 +1.839270512133e-02 2.001765616846e-02 2.157069012714e-02 2.304702620522e-02 +2.444215183807e-02 2.575183630221e-02 2.697214336435e-02 2.809944292875e-02 +2.913042164873e-02 3.006209247213e-02 3.089180309365e-02 3.161724329081e-02 +3.223645112400e-02 3.274781798471e-02 3.315009247988e-02 3.344238314402e-02 +3.362415997477e-02 3.369525479111e-02 3.365586041739e-02 3.350652870018e-02 +3.324816736855e-02 3.288203575211e-02 3.240973937492e-02 3.183322344671e-02 +3.115476527662e-02 3.037696563770e-02 2.950273911414e-02 2.853530346589e-02 +2.747816804889e-02 2.633512133150e-02 2.511021755107e-02 2.380776255669e-02 +2.243229888701e-02 2.098859013410e-02 1.948160464657e-02 1.791649862706e-02 +1.629859868096e-02 1.463338387485e-02 1.292646736459e-02 1.118357765386e-02 +9.410539545482e-03 7.613254848001e-03 5.797682901151e-03 3.969820983777e-03 +2.135684668175e-03 3.012881846979e-04 -1.527375139800e-03 -3.344352306513e-03 +-5.143749869768e-03 -6.919752901010e-03 -8.666643631123e-03 -1.037881971177e-02 +-1.205081203788e-02 -1.367730207495e-02 -1.525313863681e-02 -1.677335406123e-02 +-1.823317973299e-02 -1.962806090637e-02 -2.095367078140e-02 -2.220592379064e-02 +-2.338098805623e-02 -2.447529697955e-02 -2.548555992892e-02 -2.640877199355e-02 +-2.724222277558e-02 -2.798350419456e-02 -2.863051728270e-02 -2.918147795210e-02 +-2.963492171868e-02 -2.998970737110e-02 -3.024501957619e-02 -3.040037041610e-02 +-3.045559985569e-02 -3.041087514220e-02 -3.026668914282e-02 -3.002385762894e-02 +-2.968351551956e-02 -2.924711209937e-02 -2.871640523051e-02 -2.809345458010e-02 +-2.738061388883e-02 -2.658052230879e-02 -2.569609484180e-02 -2.473051191228e-02 +-2.368720811129e-02 -2.256986015104e-02 -2.138237407161e-02 -2.012887174384e-02 +-1.881367671460e-02 -1.744129944241e-02 -1.601642197357e-02 -1.454388211024e-02 +-1.302865712360e-02 -1.147584706651e-02 -9.890657741144e-03 -8.278383378148e-03 +-6.644389084369e-03 -4.994093117121e-03 -3.332949043045e-03 -1.666427839951e-03 +6.012352329821e-15 1.660882307642e-03 3.310802956777e-03 4.944399409738e-03 +6.556380031865e-03 + Type L N + 0 2 10 +0.000000000000e+00 2.620035804377e-04 1.047131718342e-03 2.352739493154e-03 +4.174428330095e-03 6.506060404103e-03 9.339778739072e-03 1.266603293461e-02 +1.647361043433e-02 2.074967323186e-02 2.547979989189e-02 3.064803274650e-02 +3.623693010936e-02 4.222762333385e-02 4.859987852524e-02 5.533216270128e-02 +6.240171418104e-02 6.978461696787e-02 7.745587887891e-02 8.538951316150e-02 +9.355862332505e-02 1.019354909068e-01 1.104916658795e-01 1.191980594019e-01 +1.280250386031e-01 1.369425230876e-01 1.459200828410e-01 1.549270372115e-01 +1.639325546409e-01 1.729057528151e-01 1.818157989018e-01 1.906320095474e-01 +1.993239503004e-01 2.078615341368e-01 2.162151187607e-01 2.243556023625e-01 +2.322545175197e-01 2.398841229321e-01 2.472174926930e-01 2.542286028033e-01 +2.608924146474e-01 2.671849551599e-01 2.730833934219e-01 2.785661134411e-01 +2.836127828782e-01 2.882044175025e-01 2.923234411673e-01 2.959537411153e-01 +2.990807184404e-01 3.016913335443e-01 3.037741464492e-01 3.053193518408e-01 +3.063188087347e-01 3.067660646799e-01 3.066563744277e-01 3.059867130152e-01 +3.047557832314e-01 3.029640174516e-01 3.006135738454e-01 2.977083269830e-01 +2.942538528805e-01 2.902574085479e-01 2.857279061174e-01 2.806758816488e-01 +2.751134587301e-01 2.690543070006e-01 2.625135957503e-01 2.555079427565e-01 +2.480553585404e-01 2.401751862379e-01 2.318880372958e-01 2.232157232141e-01 +2.141811835724e-01 2.048084105866e-01 1.951223704560e-01 1.851489217677e-01 +1.749147312377e-01 1.644471870749e-01 1.537743102598e-01 1.429246640392e-01 +1.319272619409e-01 1.208114746169e-01 1.096069358277e-01 9.834344788108e-02 +8.705088684057e-02 7.575910781808e-02 6.449785066425e-02 5.329664636778e-02 +4.218472447166e-02 3.119092180969e-02 2.034359286162e-02 9.670522018677e-03 +-8.011619562113e-04 -1.104506899723e-02 -2.103562806663e-02 -3.074816449107e-02 +-4.015897405730e-02 -4.924539363317e-02 -5.798586809226e-02 -6.636001333369e-02 +-7.434867520261e-02 -8.193398413124e-02 -8.909940533569e-02 -9.582978441903e-02 +-1.021113882473e-01 -1.079319409817e-01 -1.132806551669e-01 -1.181482577925e-01 +-1.225270112614e-01 -1.264107292183e-01 -1.297947872062e-01 -1.326761281384e-01 +-1.350532625913e-01 -1.369262639391e-01 -1.382967583708e-01 -1.391679098457e-01 +-1.395444000616e-01 -1.394324035245e-01 -1.388395578295e-01 -1.377749292714e-01 +-1.362489739257e-01 -1.342734943514e-01 -1.318615920821e-01 -1.290276160864e-01 +-1.257871073914e-01 -1.221567400729e-01 -1.181542588320e-01 -1.137984133840e-01 +-1.091088898976e-01 -1.041062397316e-01 -9.881180572283e-02 -9.324764628811e-02 +-8.743645760788e-02 -8.140149416526e-02 -7.516648791822e-02 -6.875556638627e-02 +-6.219316993520e-02 -5.550396854491e-02 -4.871277834585e-02 -4.184447820889e-02 +-3.492392667190e-02 -2.797587948395e-02 -2.102490804431e-02 -1.409531900914e-02 +-7.211075333353e-03 -3.957190089499e-04 6.327704246251e-03 1.293671810326e-02 +1.940948630276e-02 2.572488067445e-02 3.186254627760e-02 3.780296345647e-02 +4.352750661626e-02 4.901849953707e-02 5.425926705699e-02 5.923418296817e-02 +6.392871398422e-02 6.832945965134e-02 7.242418809040e-02 7.620186747228e-02 +7.965269314418e-02 8.276811034000e-02 8.554083242365e-02 8.796485463021e-02 +9.003546328530e-02 9.174924049919e-02 9.310406434793e-02 9.409910456930e-02 +9.473481381699e-02 9.501291453183e-02 9.493638150345e-02 9.450942021097e-02 +9.373744104510e-02 9.262702952815e-02 9.118591266185e-02 8.942292154537e-02 +8.734795041872e-02 8.497191229792e-02 8.230669137963e-02 7.936509240319e-02 +7.616078716752e-02 7.270825840950e-02 6.902274125824e-02 6.512016248718e-02 +6.101707779225e-02 5.673060733022e-02 5.227836975588e-02 4.767841500079e-02 +4.294915603927e-02 3.810929988956e-02 3.317777809923e-02 2.817367696430e-02 +2.311616773109e-02 1.802443702837e-02 1.291761777506e-02 7.814720805650e-03 +2.734567451569e-03 -2.304276688186e-03 -7.283566559373e-03 -1.218544082641e-02 +-1.699248319366e-02 -2.168778166772e-02 -2.625498556300e-02 -3.067836006198e-02 +-3.494283815152e-02 -3.903406976697e-02 -4.293846798677e-02 -4.664325213182e-02 +-5.013648763584e-02 -5.340712256517e-02 -5.644502067939e-02 -5.924099093709e-02 +-6.178681336438e-02 -6.407526121752e-02 -6.610011938443e-02 -6.785619898412e-02 +-6.933934813651e-02 -7.054645888953e-02 -7.147547030398e-02 -7.212536771062e-02 +-7.249617816758e-02 -7.258896215997e-02 -7.240580159638e-02 -7.194978417065e-02 +-7.122498416940e-02 -7.023643981868e-02 -6.899012727473e-02 -6.749293137542e-02 +-6.575261328024e-02 -6.377777513672e-02 -6.157782192159e-02 -5.916292061419e-02 +-5.654395686812e-02 -5.373248935576e-02 -5.074070196708e-02 -4.758135405145e-02 +-4.426772889667e-02 -4.081358064510e-02 -3.723307985088e-02 -3.354075788636e-02 +-2.975145040852e-02 -2.588024009840e-02 -2.194239888811e-02 -1.795332989034e-02 +-1.392850924527e-02 -9.883428098751e-03 -5.833534923925e-03 -1.794178395810e-03 +2.219448974676e-03 6.192366244977e-03 1.010985828576e-02 1.395752867415e-02 +1.772135104925e-02 2.138771875041e-02 2.494349256632e-02 2.837604643077e-02 +3.167331090945e-02 3.482381433117e-02 3.781672142661e-02 4.064186934726e-02 +4.328980094801e-02 4.575179522735e-02 4.801989483032e-02 5.008693053066e-02 +5.194654262030e-02 5.359319914616e-02 5.502221094600e-02 5.622974344750e-02 +5.721282520660e-02 5.796935317347e-02 5.849809468655e-02 5.879868620733e-02 +5.887162882027e-02 5.871828053444e-02 5.834084543467e-02 5.774235974177e-02 +5.692667485224e-02 5.589843743883e-02 5.466306670358e-02 5.322672888515e-02 +5.159630913190e-02 4.977938086104e-02 4.778417273319e-02 4.561953337956e-02 +4.329489402663e-02 4.082022917023e-02 3.820601545722e-02 3.546318893891e-02 +3.260310086529e-02 2.963747219388e-02 2.657834699060e-02 2.343804490332e-02 +2.022911289118e-02 1.696427639457e-02 1.365639013154e-02 1.031838870717e-02 +6.963237221582e-03 3.603882061735e-03 2.532020601634e-04 -3.076039798482e-03 +-6.371243945210e-03 -9.620020894655e-03 -1.281023684336e-02 -1.593005803345e-02 +-1.896799372230e-02 -2.191293760479e-02 -2.475420754144e-02 -2.748158345284e-02 +-3.008534324839e-02 -3.255629666528e-02 -3.488581690254e-02 -3.706586994327e-02 +-3.908904146801e-02 -4.094856127127e-02 -4.263832510331e-02 -4.415291386933e-02 +-4.548761012830e-02 -4.663841184443e-02 -4.760204335446e-02 -4.837596352492e-02 +-4.895837108397e-02 -4.934820712322e-02 -4.954515477559e-02 -4.954963608583e-02 +-4.936280610077e-02 -4.898654421662e-02 -4.842344283100e-02 -4.767679335692e-02 +-4.675056966581e-02 -4.564940903605e-02 -4.437859069210e-02 -4.294401202848e-02 +-4.135216262065e-02 -3.961009613287e-02 -3.772540024034e-02 -3.570616469007e-02 +-3.356094763092e-02 -3.129874034941e-02 -2.892893055317e-02 -2.646126434851e-02 +-2.390580706294e-02 -2.127290306701e-02 -1.857313475277e-02 -1.581728082870e-02 +-1.301627409256e-02 -1.018115884487e-02 -7.323048106310e-03 -4.453080802119e-03 +-1.582379076085e-03 1.277994104811e-03 4.117076895743e-03 6.924049912610e-03 +9.688276810099e-03 1.239934394917e-02 1.504709900802e-02 1.762168839540e-02 +2.011359333025e-02 2.251366445745e-02 2.481315487560e-02 2.700375145932e-02 +2.907760436581e-02 3.102735462241e-02 3.284615970016e-02 3.452771698609e-02 +3.606628507543e-02 3.745670281381e-02 3.869440602799e-02 3.977544189305e-02 +4.069648089307e-02 4.145482634156e-02 4.204842143759e-02 4.247585384263e-02 +4.273635777314e-02 4.282981361275e-02 4.275674505787e-02 4.251831381953e-02 +4.211631191349e-02 4.155315157965e-02 4.083185288082e-02 3.995602903911e-02 +3.892986957682e-02 3.775812133673e-02 3.644606746422e-02 3.499950444117e-02 +3.342471726858e-02 3.172845290135e-02 2.991789204487e-02 2.800061942895e-02 +2.598459267953e-02 2.387810991374e-02 2.168977618808e-02 1.942846893310e-02 +1.710330251128e-02 1.472359203784e-02 1.229881660573e-02 9.838582058397e-03 +7.352583454433e-03 4.850567369051e-03 2.342294177207e-03 -1.624995374291e-04 +-2.654138304523e-03 -5.123044678725e-03 -7.559775601667e-03 -9.955058077794e-03 +-1.229982403074e-02 -1.458524421068e-02 -1.680276102726e-02 -1.894412018742e-02 +-2.100140102249e-02 -2.296704539440e-02 -2.483388507685e-02 -2.659516751356e-02 +-2.824457986222e-02 -2.977627123989e-02 -3.118487309266e-02 -3.246551762010e-02 +-3.361385419245e-02 -3.462606370685e-02 -3.549887083663e-02 -3.622955413607e-02 +-3.681595397167e-02 -3.725647825883e-02 -3.755010599193e-02 -3.769638856381e-02 +-3.769544887952e-02 -3.754797827720e-02 -3.725523127767e-02 -3.681901819240e-02 +-3.624169562733e-02 -3.552615492841e-02 -3.467580862197e-02 -3.369457491062e-02 +-3.258686029276e-02 -3.135754038030e-02 -3.001193899610e-02 -2.855580563876e-02 +-2.699529140817e-02 -2.533692349098e-02 -2.358757830999e-02 -2.175445344637e-02 +-1.984503844759e-02 -1.786708463813e-02 -1.582857405291e-02 -1.373768761674e-02 +-1.160277269495e-02 -9.432310142707e-03 -7.234880981712e-03 -5.019132833746e-03 +-2.793746241246e-03 -5.674010047185e-04 1.651257333662e-03 3.853650732059e-03 +6.031301489937e-03 8.175864563376e-03 1.027915923270e-02 1.233320000329e-02 +1.433022662396e-02 1.626273311109e-02 1.812349567089e-02 1.990559941708e-02 +2.160246378597e-02 2.320786655663e-02 2.471596638938e-02 2.612132380187e-02 +2.741892050851e-02 2.860417705536e-02 2.967296868953e-02 3.062163940931e-02 +3.144701414801e-02 3.214640905242e-02 3.271763982383e-02 3.315902809725e-02 +3.346940584235e-02 3.364811777675e-02 3.369502179069e-02 3.361048738904e-02 +3.339539216478e-02 3.305111632528e-02 3.257953530016e-02 3.198301046681e-02 +3.126437803690e-02 3.042693615365e-02 2.947443025706e-02 2.841103677982e-02 +2.724134524376e-02 2.597033883180e-02 2.460337351638e-02 2.314615583044e-02 +2.160471937202e-02 1.998540013785e-02 1.829481078573e-02 1.653981392904e-02 +1.472749457012e-02 1.286513178221e-02 1.096016975200e-02 9.020188297052e-03 +7.052872973721e-03 5.065984892624e-03 3.067330359101e-03 1.064730456563e-03 +-9.340093097221e-04 -2.921129191455e-03 -4.888945082975e-03 -6.829877999512e-03 +-8.736483035799e-03 -1.060147769521e-02 -1.241776948243e-02 -1.417848265595e-02 +-1.587698404013e-02 -1.750690780091e-02 -1.906217909314e-02 -2.053703649256e-02 +-2.192605313036e-02 -2.322415645346e-02 -2.442664653926e-02 -2.552921289965e-02 +-2.652794971473e-02 -2.741936944348e-02 -2.820041476444e-02 -2.886846880682e-02 +-2.942136363844e-02 -2.985738698434e-02 -3.017528715649e-02 -3.037427618212e-02 +-3.045403112513e-02 -3.041469360212e-02 -3.025686750147e-02 -2.998161492074e-02 +-2.959045034473e-02 -2.908533309287e-02 -2.846865807160e-02 -2.774324487347e-02 +-2.691232527115e-02 -2.597952916044e-02 -2.494886901223e-02 -2.382472289889e-02 +-2.261181616584e-02 -2.131520182400e-02 -1.994023974356e-02 -1.849257473380e-02 +-1.697811359776e-02 -1.540300125403e-02 -1.377359602157e-02 -1.209644416594e-02 +-1.037825380810e-02 -8.625868299011e-03 -6.846239164960e-03 -5.046398729735e-03 +-3.233432520802e-03 -1.414451567016e-03 4.034353045415e-04 2.213149065363e-03 +4.007667869506e-03 5.780054119506e-03 7.523481110548e-03 9.231259151201e-03 +1.089686106141e-02 1.251394695115e-02 1.407638818635e-02 1.557829045196e-02 +1.701401582611e-02 1.837820378317e-02 1.966579104810e-02 2.087203022904e-02 +2.199250716028e-02 2.302315689278e-02 2.396027827478e-02 2.480054707111e-02 +2.554102757496e-02 2.617918267265e-02 2.671288232720e-02 2.714041045362e-02 +2.746047016431e-02 2.767218737005e-02 2.777511272791e-02 2.776922193426e-02 +2.765491436722e-02 2.743301008928e-02 2.710474522729e-02 2.667176575308e-02 +2.613611969416e-02 2.550024780987e-02 2.476697277428e-02 2.393948691269e-02 +2.302133854408e-02 2.201641698699e-02 2.092893629145e-02 1.976341776426e-02 +1.852467135921e-02 1.721777600821e-02 1.584805897315e-02 1.442107430156e-02 +1.294258047276e-02 1.141851732369e-02 9.854982346319e-03 8.258206450586e-03 +6.634529288631e-03 4.990374237425e-03 3.332223137968e-03 1.666590889822e-03 +1.678812230281e-15 -1.661044814901e-03 -3.310081874987e-03 -4.940717534258e-03 +-6.546650832582e-03 + Type L N + 0 2 11 +0.000000000000e+00 3.076684752969e-04 1.229456822918e-03 2.761718489533e-03 +4.898391469915e-03 7.631021618927e-03 1.094879516000e-02 1.483858026336e-02 +1.928497753096e-02 2.427037919052e-02 2.977503676719e-02 3.577713696791e-02 +4.225288548166e-02 4.917659836780e-02 5.652080067530e-02 6.425633190728e-02 +7.235245791876e-02 8.077698881069e-02 8.949640235977e-02 9.847597250258e-02 +1.076799023726e-01 1.170714613719e-01 1.266131257425e-01 1.362667220913e-01 +1.459935733092e-01 1.557546463171e-01 1.655107010646e-01 1.752224402041e-01 +1.848506588577e-01 1.943563938989e-01 2.037010721695e-01 2.128466570595e-01 +2.217557928846e-01 2.303919465032e-01 2.387195456292e-01 2.467041133084e-01 +2.543123980425e-01 2.615124990639e-01 2.682739862803e-01 2.745680144358e-01 +2.803674310519e-01 2.856468777420e-01 2.903828845161e-01 2.945539567237e-01 +2.981406543082e-01 3.011256630816e-01 3.034938577562e-01 3.052323565036e-01 +3.063305668482e-01 3.067802227308e-01 3.065754126186e-01 3.057125985692e-01 +3.041906261952e-01 3.020107255079e-01 2.991765026582e-01 2.956939226262e-01 +2.915712829478e-01 2.868191785994e-01 2.814504581996e-01 2.754801717169e-01 +2.689255099084e-01 2.618057357443e-01 2.541421081053e-01 2.459577980678e-01 +2.372777981237e-01 2.281288247028e-01 2.185392143984e-01 2.085388143130e-01 +1.981588669688e-01 1.874318902450e-01 1.763915528221e-01 1.650725456318e-01 +1.535104498227e-01 1.417416017660e-01 1.298029556362e-01 1.177319441059e-01 +1.055663377061e-01 9.334410339940e-02 8.110326292147e-02 6.888175144123e-02 +5.671727708871e-02 4.464718189424e-02 3.270830467496e-02 2.093684639556e-02 +9.368238518095e-03 -1.962985157258e-03 -1.302331267469e-02 -2.378037365978e-02 +-3.420305416166e-02 -4.426160617195e-02 -5.392775141475e-02 -6.317477902589e-02 +-7.197763676562e-02 -8.031301543553e-02 -8.815942619899e-02 -9.549727053327e-02 +-1.023089025723e-01 -1.085786836294e-01 -1.142930287224e-01 -1.194404449545e-01 +-1.240115616379e-01 -1.279991520817e-01 -1.313981469958e-01 -1.342056395004e-01 +-1.364208817593e-01 -1.380452732934e-01 -1.390823410596e-01 -1.395377114146e-01 +-1.394190741153e-01 -1.387361385373e-01 -1.375005823238e-01 -1.357259927067e-01 +-1.334278007701e-01 -1.306232089512e-01 -1.273311121030e-01 -1.235720124635e-01 +-1.193679289021e-01 -1.147423008317e-01 -1.097198871991e-01 -1.043266609778e-01 +-9.858969961033e-02 -9.253707185462e-02 -8.619772150607e-02 -7.960134847434e-02 +-7.277828770341e-02 -6.575938642888e-02 -5.857588027130e-02 -5.125926866597e-02 +-4.384119012989e-02 -3.635329786467e-02 -2.882713619011e-02 -2.129401829720e-02 +-1.378490580154e-02 -6.330290568085e-03 1.039920733378e-03 8.296518896249e-03 +1.541110083812e-02 2.235617424116e-02 2.910525777694e-02 3.563297654072e-02 +4.191515234175e-02 4.792888851923e-02 5.365264897716e-02 5.906633115714e-02 +6.415133269386e-02 6.889061152569e-02 7.326873926022e-02 7.727194762380e-02 +8.088816785271e-02 8.410706291371e-02 8.692005247143e-02 8.932033055009e-02 +9.130287586745e-02 9.286445484874e-02 9.400361735845e-02 9.472068521733e-02 +9.501773360112e-02 9.489856544625e-02 9.436867901559e-02 9.343522880452e-02 +9.210697999391e-02 9.039425668188e-02 8.830888415028e-02 8.586412544504e-02 +8.307461257098e-02 7.995627262242e-02 7.652624918934e-02 7.280281939669e-02 +6.880530695008e-02 6.455399157522e-02 6.007001525105e-02 5.537528564737e-02 +5.049237718656e-02 4.544443015637e-02 4.025504830616e-02 3.494819536231e-02 +2.954809090060e-02 2.407910601299e-02 1.856565920428e-02 1.303211295073e-02 +7.502671346696e-03 2.001279258628e-03 -3.448476603728e-03 -8.823464299277e-03 +-1.410110056357e-02 -1.925944163937e-02 -2.427727067176e-02 -2.913418132615e-02 +-3.381065730610e-02 -3.828814746650e-02 -4.254913623868e-02 -4.657720910519e-02 +-5.035711288463e-02 -5.387481061019e-02 -5.711753080991e-02 -6.007381102120e-02 +-6.273353539776e-02 -6.508796629279e-02 -6.712976972852e-02 -6.885303468854e-02 +-7.025328619587e-02 -7.132749216619e-02 -7.207406405214e-02 -7.249285132072e-02 +-7.258512983165e-02 -7.235358420985e-02 -7.180228433038e-02 -7.093665605800e-02 +-6.976344640724e-02 -6.829068331139e-02 -6.652763021048e-02 -6.448473568909e-02 +-6.217357841437e-02 -5.960680764286e-02 -5.679807958219e-02 -5.376198990912e-02 +-5.051400276031e-02 -4.707037652467e-02 -4.344808677825e-02 -3.966474671203e-02 +-3.573852541206e-02 -3.168806435765e-02 -2.753239250910e-02 -2.329084035964e-02 +-1.898295332883e-02 -1.462840487436e-02 -1.024690969872e-02 -5.858137423784e-03 +-1.481627102334e-03 2.863297070612e-03 7.157608491192e-03 1.138265897831e-02 +1.552025736739e-02 1.955274554190e-02 2.346307159151e-02 2.723485979991e-02 +3.085247718102e-02 3.430109629899e-02 3.756675412499e-02 4.063640670257e-02 +4.349797941283e-02 4.614041265109e-02 4.855370274757e-02 5.072893798650e-02 +5.265832959992e-02 5.433523763505e-02 5.575419161718e-02 5.691090595260e-02 +5.780229003971e-02 5.842645307927e-02 5.878270359798e-02 5.887154372239e-02 +5.869465826260e-02 5.825489868764e-02 5.755626209583e-02 5.660386530476e-02 +5.540391420582e-02 5.396366854810e-02 5.229140233518e-02 5.039636003652e-02 +4.828870883190e-02 4.597948712356e-02 4.348054956543e-02 4.080450887244e-02 +3.796467468555e-02 3.497498977904e-02 3.184996390683e-02 2.860460559276e-02 +2.525435217715e-02 2.181499843767e-02 1.830262410672e-02 1.473352061066e-02 +1.112411735750e-02 7.490907899814e-03 3.850376298047e-03 2.189240069475e-04 +-3.387202396787e-03 -6.951982332809e-03 -1.045969087557e-02 -1.389496665532e-02 +-1.724287771342e-02 -2.048898503462e-02 -2.361940349045e-02 -2.662085994112e-02 +-2.948074825712e-02 -3.218718103649e-02 -3.472903781001e-02 -3.709600954258e-02 +-3.927863925708e-02 -4.126835862455e-02 -4.305752038353e-02 -4.463942647041e-02 +-4.600835176212e-02 -4.715956335253e-02 -4.808933530412e-02 -4.879495883629e-02 +-4.927474793281e-02 -4.952804037032e-02 -4.955519419073e-02 -4.935757965981e-02 +-4.893756677430e-02 -4.829850839888e-02 -4.744471913344e-02 -4.638145002913e-02 +-4.511485928961e-02 -4.365197911066e-02 -4.200067882765e-02 -4.016962455577e-02 +-3.816823552227e-02 -3.600663730365e-02 -3.369561219321e-02 -3.124654693566e-02 +-2.867137807613e-02 -2.598253517989e-02 -2.319288218723e-02 -2.031565717474e-02 +-1.736441079973e-02 -1.435294370905e-02 -1.129524319641e-02 -8.205419394279e-03 +-5.097641286770e-03 -1.986072829379e-03 1.115190540756e-03 4.192184723556e-03 +7.231138827680e-03 1.021853582485e-02 1.314117172336e-02 1.598621300531e-02 +1.874125208106e-02 2.139436052478e-02 2.393413986573e-02 2.634976972223e-02 +2.863105307825e-02 3.076845851588e-02 3.275315923222e-02 3.457706868354e-02 +3.623287271619e-02 3.771405805957e-02 3.901493707359e-02 4.013066866018e-02 +4.105727526594e-02 4.179165592093e-02 4.233159527647e-02 4.267576862267e-02 +4.282374288487e-02 4.277597361553e-02 4.253379801639e-02 4.209942404287e-02 +4.147591566015e-02 4.066717433698e-02 3.967791687977e-02 3.851364972527e-02 +3.718063982521e-02 3.568588227123e-02 3.403706482161e-02 3.224252950495e-02 +3.031123148774e-02 2.825269540412e-02 2.607696935661e-02 2.379457680580e-02 +2.141646657547e-02 1.895396120673e-02 1.641870390118e-02 1.382260429823e-02 +1.117778333544e-02 8.496517443904e-03 5.791182332473e-03 3.074196614823e-03 +3.579655333173e-04 -2.345174968402e-03 -5.023013574793e-03 -7.663518084389e-03 +-1.025488881198e-02 -1.278561067257e-02 -1.524450371981e-02 -1.762077191955e-02 +-1.990404994807e-02 -2.208444781460e-02 -2.415259311825e-02 -2.609967076105e-02 +-2.791745995112e-02 -2.959836834282e-02 -3.113546317436e-02 -3.252249927752e-02 +-3.375394384859e-02 -3.482499788491e-02 -3.573161420664e-02 -3.647051199911e-02 +-3.703918782712e-02 -3.743592308850e-02 -3.765978789044e-02 -3.771064134824e-02 +-3.758912832216e-02 -3.729667262398e-02 -3.683546674066e-02 -3.620845813781e-02 +-3.541933222075e-02 -3.447249204577e-02 -3.337303488818e-02 -3.212672578743e-02 +-3.073996820272e-02 -2.921977192474e-02 -2.757371840097e-02 -2.580992364281e-02 +-2.393699889300e-02 -2.196400924095e-02 -1.990043038209e-02 -1.775610372464e-02 +-1.554119005402e-02 -1.326612197031e-02 -1.094155531897e-02 -8.578319838528e-03 +-6.187369251313e-03 -3.779731025096e-03 -1.366456033675e-03 1.041431655932e-03 +3.432984643661e-03 5.797381480523e-03 8.123975156804e-03 1.040234057904e-02 +1.262232082597e-02 1.477407198010e-02 1.684810633883e-02 1.883533381715e-02 +2.072710136309e-02 2.251523021665e-02 2.419205085349e-02 2.575043546574e-02 +2.718382784412e-02 2.848627053771e-02 2.965242918072e-02 3.067761388866e-02 +3.155779764011e-02 3.228963157415e-02 3.287045714778e-02 3.329831511195e-02 +3.357195127965e-02 3.369081907362e-02 3.365507885629e-02 3.346559405883e-02 +3.312392414056e-02 3.263231442430e-02 3.199368286693e-02 3.121160383831e-02 +3.029028899450e-02 2.923456534451e-02 2.804985062158e-02 2.674212608192e-02 +2.531790686509e-02 2.378421006026e-02 2.214852063285e-02 2.041875537461e-02 +1.860322504877e-02 1.671059490926e-02 1.474984377951e-02 1.273022188220e-02 +1.066120761620e-02 8.552463480746e-03 6.413791350159e-03 4.255087304277e-03 +2.086296221165e-03 -8.263366125141e-05 -2.241796008618e-03 -4.381371274271e-03 +-6.491671002218e-03 -8.563181350586e-03 -1.058660564148e-02 -1.255290574840e-02 +-1.445334213826e-02 -1.627951239218e-02 -1.802338803634e-02 -1.967734952298e-02 +-2.123421921034e-02 -2.268729220007e-02 -2.403036490096e-02 -2.525776119861e-02 +-2.636435612188e-02 -2.734559690898e-02 -2.819752138788e-02 -2.891677359852e-02 +-2.950061659689e-02 -2.994694239413e-02 -3.025427899694e-02 -3.042179452880e-02 +-3.044929842495e-02 -3.033723970715e-02 -3.008670235770e-02 -2.969939782500e-02 +-2.917765470601e-02 -2.852440566355e-02 -2.774317164852e-02 -2.683804350933e-02 +-2.581366108219e-02 -2.467518986695e-02 -2.342829540380e-02 -2.207911547618e-02 +-2.063423027435e-02 -1.910063066329e-02 -1.748568470606e-02 -1.579710260156e-02 +-1.404290020202e-02 -1.223136128139e-02 -1.037099873071e-02 -8.470514861073e-03 +-6.538760997688e-03 -4.584696551532e-03 -2.617347756428e-03 -6.457662603618e-04 +1.321012240231e-03 3.274009135404e-03 5.204343619764e-03 7.103272810172e-03 +8.962231082993e-03 1.077286845501e-02 1.252708783712e-02 1.421708099563e-02 +1.583536306260e-02 1.737480544355e-02 1.882866697908e-02 2.019062322502e-02 +2.145479372504e-02 2.261576715911e-02 2.366862426125e-02 2.460895841062e-02 +2.543289381082e-02 2.613710118357e-02 2.671881091458e-02 2.717582360104e-02 +2.750651796229e-02 2.770985608732e-02 2.778538600493e-02 2.773324157453e-02 +2.755413970786e-02 2.724937494400e-02 2.682081141175e-02 2.627087222561e-02 +2.560252637270e-02 2.481927315949e-02 2.392512429765e-02 2.292458371938e-02 +2.182262522185e-02 2.062466805058e-02 1.933655054006e-02 1.796450193866e-02 +1.651511255249e-02 1.499530235009e-02 1.341228817647e-02 1.177354973056e-02 +1.008679446542e-02 8.359921574931e-03 6.600985233967e-03 4.818157262340e-03 +3.019689384381e-03 1.213875257557e-03 -5.909875561334e-04 -2.386635502586e-03 +-4.164876659528e-03 -5.917627901590e-03 -7.636951438803e-03 -9.315090564226e-03 +-1.094450445058e-02 -1.251790184067e-02 -1.402827348179e-02 -1.546892316090e-02 +-1.683349720363e-02 -1.811601230827e-02 -1.931088159343e-02 -2.041293874683e-02 +-2.141746017166e-02 -2.232018503642e-02 -2.311733314391e-02 -2.380562054548e-02 +-2.438227283685e-02 -2.484503608294e-02 -2.519218532972e-02 -2.542253067262e-02 +-2.553542086195e-02 -2.553074443721e-02 -2.540892839351e-02 -2.517093439426e-02 +-2.481825255589e-02 -2.435289284079e-02 -2.377737410594e-02 -2.309471086481e-02 +-2.230839783060e-02 -2.142239231867e-02 -2.044109459549e-02 -1.936932627061e-02 +-1.821230683654e-02 -1.697562846985e-02 -1.566522921396e-02 -1.428736467144e-02 +-1.284857833972e-02 -1.135567073013e-02 -9.815667414928e-03 -8.235786151830e-03 +-6.623403238827e-03 -4.986019255467e-03 -3.331224348814e-03 -1.666663223992e-03 +-5.234804717149e-15 1.661116908350e-03 3.309089722328e-03 4.936405886016e-03 +6.535672151334e-03 + Type L N + 0 2 12 +0.000000000000e+00 3.569814883576e-04 1.426287458324e-03 3.203009736561e-03 +5.678992372019e-03 8.842868026578e-03 1.268010869057e-02 1.717309049234e-02 +2.230117230782e-02 2.804078781293e-02 3.436555056104e-02 4.124637160836e-02 +4.865158915351e-02 5.654710960314e-02 6.489655942367e-02 7.366144709087e-02 +8.280133440316e-02 9.227401638268e-02 1.020357089495e-01 1.120412435198e-01 +1.222442676477e-01 1.325974508038e-01 1.430526943619e-01 1.535613448439e-01 +1.640744094647e-01 1.745427730018e-01 1.849174150175e-01 1.951496264531e-01 +2.051912246258e-01 2.149947656614e-01 2.245137534122e-01 2.337028439257e-01 +2.425180445512e-01 2.509169067969e-01 2.588587120793e-01 2.663046495419e-01 +2.732179851554e-01 2.795642213536e-01 2.853112465043e-01 2.904294735591e-01 +2.948919672794e-01 2.986745594874e-01 3.017559518458e-01 3.041178057292e-01 +3.057448188081e-01 3.066247880289e-01 3.067486587350e-01 3.061105597370e-01 +3.047078242075e-01 3.025409963362e-01 2.996138237492e-01 2.959332357614e-01 +2.915093075916e-01 2.863552107395e-01 2.804871497789e-01 2.739242858907e-01 +2.666886475116e-01 2.588050285377e-01 2.503008745740e-01 2.412061577761e-01 +2.315532408807e-01 2.213767310680e-01 2.107133243446e-01 1.996016411774e-01 +1.880820541447e-01 1.761965084072e-01 1.639883358306e-01 1.515020636184e-01 +1.387832183350e-01 1.258781262193e-01 1.128337107019e-01 9.969728804722e-02 +8.651636205180e-02 7.333841872575e-02 6.021072188578e-02 4.718011057796e-02 +3.429279923829e-02 2.159418148252e-02 9.128638397347e-03 -3.060647819018e-03 +-1.493187404649e-02 -2.644478947395e-02 -3.756086111718e-02 -4.824343090815e-02 +-5.845786368133e-02 -6.817168542733e-02 -7.735471123116e-02 -8.597916236248e-02 +-9.401977203692e-02 -1.014538794221e-01 -1.082615115172e-01 -1.144254525935e-01 +-1.199313009396e-01 -1.247675127185e-01 -1.289254327991e-01 -1.323993124896e-01 +-1.351863141592e-01 -1.372865027934e-01 -1.387028245925e-01 -1.394410727781e-01 +-1.395098408326e-01 -1.389204634537e-01 -1.376869455620e-01 -1.358258797502e-01 +-1.333563526199e-01 -1.302998404937e-01 -1.266800950448e-01 -1.225230194247e-01 +-1.178565355123e-01 -1.127104429482e-01 -1.071162706481e-01 -1.011071215248e-01 +-9.471751117380e-02 -8.798320130120e-02 -8.094102869535e-02 -7.362873055691e-02 +-6.608476701707e-02 -5.834814168099e-02 -5.045822103842e-02 -4.245455358404e-02 +-3.437668948673e-02 -2.626400163957e-02 -1.815550891133e-02 -1.008970240501e-02 +-2.104375510424e-03 5.763541484598e-03 1.347814148570e-02 2.100469467665e-02 +2.830979592005e-02 3.536150483243e-02 4.212947793040e-02 4.858509228547e-02 +5.470156016846e-02 6.045403421016e-02 6.581970265261e-02 7.077787431437e-02 +7.531005294468e-02 7.940000069296e-02 8.303379047373e-02 8.619984706080e-02 +8.888897679901e-02 9.109438587652e-02 9.281168715524e-02 9.403889561133e-02 +9.477641249152e-02 9.502699834383e-02 9.479573513343e-02 9.408997770467e-02 +9.291929489961e-02 9.129540069051e-02 8.923207572929e-02 8.674507975962e-02 +8.385205537857e-02 8.057242367249e-02 7.692727228735e-02 7.293923652620e-02 +6.863237409600e-02 6.403203415221e-02 5.916472131247e-02 5.405795533072e-02 +4.874012713881e-02 4.324035197554e-02 3.758832033245e-02 3.181414745065e-02 +2.594822210564e-02 2.002105541476e-02 1.406313039743e-02 8.104753009171e-03 +2.175905358568e-03 -3.693898199159e-03 -9.475751417086e-03 -1.514149230696e-02 +-2.066383445693e-02 -2.601649291622e-02 -3.117430407723e-02 -3.611333901816e-02 +-4.081100980535e-02 -4.524616829199e-02 -4.939919698957e-02 -5.325209163042e-02 +-5.678853508241e-02 -5.999396232195e-02 -6.285561621669e-02 -6.536259391652e-02 +-6.750588369834e-02 -6.927839215825e-02 -7.067496169263e-02 -7.169237825779e-02 +-7.232936944540e-02 -7.258659295852e-02 -7.246661561924e-02 -7.197388308498e-02 +-7.111468049454e-02 -6.989708430856e-02 -6.833090565013e-02 -6.642762549139e-02 +-6.420032206953e-02 -6.166359095147e-02 -5.883345819969e-02 -5.572728712279e-02 +-5.236367912251e-02 -4.876236917484e-02 -4.494411650539e-02 -4.093059103929e-02 +-3.674425622285e-02 -3.240824882765e-02 -2.794625635919e-02 -2.338239269891e-02 +-1.874107261368e-02 -1.404688576745e-02 -9.324470868169e-03 -4.598390577902e-03 +1.069921939384e-04 4.767636005687e-03 9.359940012229e-03 1.386085992999e-02 +1.824802028030e-02 2.249982237581e-02 2.659554753943e-02 3.051545507277e-02 +3.424087452049e-02 3.775429180865e-02 4.103942886873e-02 4.408131639428e-02 +4.686635941380e-02 4.938239540193e-02 5.161874469013e-02 5.356625297829e-02 +5.521732578984e-02 5.656595475443e-02 5.760773564410e-02 5.833987813073e-02 +5.876120727474e-02 5.887215679612e-02 5.867475422040e-02 5.817259803202e-02 +5.737082700748e-02 5.627608193834e-02 5.489645999179e-02 5.324146199149e-02 +5.132193293559e-02 4.914999610088e-02 4.673898111185e-02 4.410334638202e-02 +4.125859636009e-02 3.822119403739e-02 3.500846919386e-02 3.163852287837e-02 +2.813012863500e-02 2.450263100010e-02 2.077584180546e-02 1.696993483036e-02 +1.310533935054e-02 9.202633133727e-03 5.282435431064e-03 1.365300510094e-03 +-2.528387731342e-03 -6.378519539712e-03 -1.016536095001e-02 -1.386965279475e-02 +-1.747270658959e-02 -2.095649682631e-02 -2.430374922523e-02 -2.749802452251e-02 +-3.052379739318e-02 -3.336653013806e-02 -3.601274079175e-02 -3.845006533949e-02 +-4.066731376263e-02 -4.265451966574e-02 -4.440298327273e-02 -4.590530761433e-02 +-4.715542776550e-02 -4.814863302738e-02 -4.888158198534e-02 -4.935231041140e-02 +-4.956023201614e-02 -4.950613209185e-02 -4.919215412463e-02 -4.862177948871e-02 +-4.779980037128e-02 -4.673228610935e-02 -4.542654315340e-02 -4.389106890350e-02 +-4.213549969391e-02 -4.017055323000e-02 -3.800796580869e-02 -3.566042467757e-02 +-3.314149591151e-02 -3.046554820558e-02 -2.764767300241e-02 -2.470360138780e-02 +-2.164961820300e-02 -1.850247383340e-02 -1.527929414273e-02 -1.199748902868e-02 +-8.674660080023e-03 -5.328507817416e-03 -1.976738999011e-03 1.363025530750e-03 +4.673341976597e-03 7.937033247443e-03 1.113727667658e-02 1.425768936526e-02 +1.728241072262e-02 2.019618179192e-02 2.298442097176e-02 2.563329576201e-02 +2.812979018656e-02 3.046176756954e-02 3.261802836707e-02 3.458836278430e-02 +3.636359793551e-02 3.793563933481e-02 3.929750653531e-02 4.044336276610e-02 +4.136853844790e-02 4.206954850082e-02 4.254410339008e-02 4.279111388828e-02 +4.281068956538e-02 4.260413104987e-02 4.217391613683e-02 4.152367984956e-02 +4.065818859268e-02 3.958330856400e-02 3.830596862140e-02 3.683411782884e-02 +3.517667793149e-02 3.334349103529e-02 3.134526278934e-02 2.919350139147e-02 +2.690045275685e-02 2.447903220810e-02 2.194275306091e-02 1.930565249378e-02 +1.658221510205e-02 1.378729454669e-02 1.093603371569e-02 8.043783821492e-03 +5.126022861369e-03 2.198273868379e-03 -7.239766203473e-04 -3.625359454779e-03 +-6.490702704869e-03 -9.305110025117e-03 -1.205403715055e-02 -1.472336613561e-02 +-1.729947696126e-02 -1.976931615114e-02 -2.212046205516e-02 -2.434118647773e-02 +-2.642051234892e-02 -2.834826715853e-02 -3.011513189675e-02 -3.171268526991e-02 +-3.313344298513e-02 -3.437089192496e-02 -3.541951906013e-02 -3.627483497697e-02 +-3.693339192456e-02 -3.739279631585e-02 -3.765171564597e-02 -3.770987982040e-02 +-3.756807691478e-02 -3.722814341700e-02 -3.669294903069e-02 -3.596637614723e-02 +-3.505329412068e-02 -3.395952850627e-02 -3.269182544887e-02 -3.125781143181e-02 +-2.966594862004e-02 -2.792548605296e-02 -2.604640696311e-02 -2.403937251536e-02 +-2.191566227883e-02 -1.968711175892e-02 -1.736604733100e-02 -1.496521892885e-02 +-1.249773085105e-02 -9.976971056863e-03 -7.416539328725e-03 -4.830174683048e-03 +-2.231682412867e-03 3.651388539954e-04 2.946569699445e-03 5.499041684479e-03 +8.009207971345e-03 1.046401243426e-02 1.285075690406e-02 1.515716620353e-02 +1.737145064347e-02 1.948236566420e-02 2.147926832383e-02 2.335217035218e-02 +2.509178750901e-02 2.668958500519e-02 2.813781876764e-02 2.942957235138e-02 +3.055878932574e-02 3.152030098634e-02 3.230984926954e-02 3.292410477172e-02 +3.336067980191e-02 3.361813642247e-02 3.369598945914e-02 3.359470448797e-02 +3.331569083327e-02 3.286128963623e-02 3.223475707978e-02 3.144024288008e-02 +3.048276417933e-02 2.936817499809e-02 2.810313142785e-02 2.669505276609e-02 +2.515207881646e-02 2.348302359571e-02 2.169732570689e-02 1.980499565455e-02 +1.781656039251e-02 1.574300540791e-02 1.359571465714e-02 1.138640867844e-02 +9.127081215007e-03 6.829934687878e-03 4.507314863059e-03 2.171645059743e-03 +-1.646397525505e-04 -2.489158621023e-03 -4.789649696704e-03 -7.054034402038e-03 +-9.270480345647e-03 -1.142746265903e-02 -1.351382343959e-02 -1.551882899580e-02 +-1.743222460296e-02 -1.924428649260e-02 -2.094587081405e-02 -2.252845932386e-02 +-2.398420157694e-02 -2.530595341261e-02 -2.648731154916e-02 -2.752264412166e-02 +-2.840711701980e-02 -2.913671590534e-02 -2.970826381169e-02 -3.011943425206e-02 +-3.036875978628e-02 -3.045563602065e-02 -3.038032103927e-02 -3.014393028902e-02 +-2.974842696479e-02 -2.919660796421e-02 -2.849208550498e-02 -2.763926451953e-02 +-2.664331596408e-02 -2.551014619974e-02 -2.424636262338e-02 -2.285923574506e-02 +-2.135665792659e-02 -1.974709901245e-02 -1.803955909993e-02 -1.624351870902e-02 +-1.436888662551e-02 -1.242594570173e-02 -1.042529690901e-02 -8.377801943820e-03 +-6.294524696237e-03 -4.186671893672e-03 -2.065533236328e-03 5.757865807762e-05 +2.171388182888e-03 4.264716228960e-03 6.326538917132e-03 8.346045270086e-03 +1.031269352377e-02 1.221626578694e-02 1.404692076716e-02 1.579524429305e-02 +1.745229737510e-02 1.900966156133e-02 2.045948135957e-02 2.179450351406e-02 +2.300811294185e-02 2.409436515260e-02 2.504801499478e-02 2.586454159100e-02 +2.654016934616e-02 2.707188493284e-02 2.745745018038e-02 2.769541081551e-02 +2.778510102486e-02 2.772664383151e-02 2.752094730009e-02 2.716969660659e-02 +2.667534203104e-02 2.604108295212e-02 2.527084794387e-02 2.436927109463e-02 +2.334166468786e-02 2.219398840316e-02 2.093281521350e-02 1.956529417156e-02 +1.809911029351e-02 1.654244176341e-02 1.490391469431e-02 1.319255569457e-02 +1.141774249808e-02 9.589152926751e-03 7.716712461102e-03 5.810540701272e-03 +3.880897005497e-03 1.938125596396e-03 -7.399572885525e-06 -1.945329900438e-03 +-3.865396874365e-03 -5.757466180610e-03 -7.611590896222e-03 -9.418063490354e-03 +-1.116746636260e-02 -1.285072065697e-02 -1.445913309993e-02 -1.598444062221e-02 +-1.741885253668e-02 -1.875509005845e-02 -1.998642296793e-02 -2.110670323363e-02 +-2.211039542813e-02 -2.299260378803e-02 -2.374909578719e-02 -2.437632211141e-02 +-2.487143294193e-02 -2.523229047513e-02 -2.545747762597e-02 -2.554630288297e-02 +-2.549880130290e-02 -2.531573165410e-02 -2.499856973722e-02 -2.454949793267e-02 +-2.397139104361e-02 -2.326779852261e-02 -2.244292318909e-02 -2.150159656267e-02 +-2.044925095499e-02 -1.929188847931e-02 -1.803604715275e-02 -1.668876428104e-02 +-1.525753732897e-02 -1.375028249270e-02 -1.217529120126e-02 -1.054118478466e-02 +-8.856867555159e-03 -7.131478555480e-03 -5.374342234077e-03 -3.594918312353e-03 +-1.802751111959e-03 -7.418612344024e-06 1.781518490851e-03 3.554567456869e-03 +5.302353633065e-03 7.015669786734e-03 8.685524377140e-03 1.030318851581e-02 +1.186024137101e-02 1.334861378130e-02 1.476062985342e-02 1.608904633122e-02 +1.732708953465e-02 1.846848968165e-02 1.950751242013e-02 2.043898741241e-02 +2.125833383099e-02 2.196158264097e-02 2.254539556209e-02 2.300708062121e-02 +2.334460422435e-02 2.355659969619e-02 2.364237225367e-02 2.360190039936e-02 +2.343583373928e-02 2.314548724879e-02 2.273283202876e-02 2.220048261284e-02 +2.155168090449e-02 2.079027684038e-02 1.992070589320e-02 1.894796354391e-02 +1.787757686857e-02 1.671557340007e-02 1.546844743863e-02 1.414312399816e-02 +1.274692058738e-02 1.128750703527e-02 9.772863580432e-03 8.211237451988e-03 +6.611098177252e-03 4.981091857210e-03 3.329994655553e-03 1.666665750399e-03 +-1.322155203283e-13 -1.661119426622e-03 -3.307868200098e-03 -4.931527517535e-03 +-6.523530075100e-03 diff --git a/tests/deepks/603_NO_deepks_CH4/model.ptg b/tests/deepks/603_NO_deepks_CH4/model.ptg new file mode 100644 index 0000000000000000000000000000000000000000..6cfb0f073c8ba343bed63958ad5573e764fa6911 GIT binary patch literal 273023 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