6#ifndef GRAM_SCHMIDT_ORTH_INL_H
7#define GRAM_SCHMIDT_ORTH_INL_H
17template<
typename Func_Type,
typename R_Type>
20 coordinate(coordinate_in)
22 if( Coordinate::Sphere == coordinate )
24 std::vector<R_Type> radial( rab.size() );
26 for(
int ir=1; ir!=radial.size(); ++ir )
27 radial[ir] = radial[ir-1] + rab[ir-1];
32template<
typename Func_Type,
typename R_Type>
34 const std::vector<std::vector<Func_Type>> &
func,
35 const Func_Type norm_threshold )
42 std::vector<std::vector<Func_Type>> func_new;
44 for(
size_t if1=0; if1!=
func.size(); ++if1 )
48 std::vector<Func_Type> func_try =
func[if1];
49 for(
int niter=0;niter<3;niter++)
51 std::vector<Func_Type> func_tmp = func_try;
52 for(
size_t if_minus=0; if_minus!=func_new.size(); ++if_minus )
56 const Func_Type in_product = cal_norm(mul_func);
59 BlasConnector::axpy( mul_func.size(), -in_product, ModuleBase::GlobalFunc::VECTOR_TO_PTR(func_new[if_minus]), 1, ModuleBase::GlobalFunc::VECTOR_TO_PTR(func_try), 1);
65 const Func_Type
norm = sqrt(cal_norm(func_2));
69 if(
norm >= norm_threshold )
72 func_new.push_back( func_try );
79template<
typename Func_Type,
typename R_Type>
83 switch( this->coordinate )
85 case Coordinate::Cartesian:
90 case Coordinate::Sphere:
98 throw std::invalid_argument(
"coordinate must be Cartesian or Sphere "+std::string(__FILE__)+
" line "+std::to_string(__LINE__));
static void axpy(const int n, const float alpha, const float *X, const int incX, float *Y, const int incY, base_device::AbacusDevice_t device_type=base_device::AbacusDevice_t::CpuDevice)
Definition blas_connector_vector.cpp:18
static void scal(const int n, const float alpha, float *X, const int incX, base_device::AbacusDevice_t device_type=base_device::AbacusDevice_t::CpuDevice)
Definition blas_connector_vector.cpp:80
Gram_Schmidt_Orth(const std::vector< R_Type > &rab, const Coordinate &coordinate)
Definition gram_schmidt_orth-inl.h:18
Func_Type cal_norm(const std::vector< Func_Type > &f)
Definition gram_schmidt_orth-inl.h:80
Coordinate
Definition gram_schmidt_orth.h:19
std::vector< std::vector< Func_Type > > cal_orth(const std::vector< std::vector< Func_Type > > &func, const Func_Type norm_threshold=std::numeric_limits< Func_Type >::min())
Definition gram_schmidt_orth-inl.h:33
static void Simpson_Integral(const int mesh, const double *const func, const double *const rab, double &asum)
simpson integral.
Definition math_integral.cpp:66
static std::vector< Type > Pointwise_Product(const std::vector< Type > &f1, const std::vector< Type > &f2)
Pointwise product of two vectors with same size.
Definition mathzone.h:38
Definition array_pool.h:6
double norm(const Vec3 &v)
Definition test_partition.cpp:25
double func(const Vec3 &r, const std::vector< Vec3 > &R, const std::vector< double > &a, const std::vector< double > &n)
Definition test_partition.cpp:50