|
@@ -49,6 +49,8 @@ Kernel<T>::Kernel(Ker_t poten, Ker_t dbl_poten, const char* name, int dim_, std:
|
|
|
|
|
|
dev_ker_poten=dev_poten;
|
|
|
dev_dbl_layer_poten=dev_dbl_poten;
|
|
|
+
|
|
|
+ homogen=false;
|
|
|
init=false;
|
|
|
}
|
|
|
|
|
@@ -67,6 +69,7 @@ void Kernel<T>::Initialize(bool verbose) const{
|
|
|
homogen=true;
|
|
|
Matrix<T> M_scal(ker_dim[0],ker_dim[1]);
|
|
|
size_t N=1024;
|
|
|
+ T eps_=N*eps;
|
|
|
|
|
|
T src_coord[3]={0,0,0};
|
|
|
std::vector<T> trg_coord1(N*COORD_DIM);
|
|
@@ -107,12 +110,12 @@ void Kernel<T>::Initialize(bool verbose) const{
|
|
|
dot12+=M1[j][i]*M2[j][i];
|
|
|
dot22+=M2[j][i]*M2[j][i];
|
|
|
}
|
|
|
- if(dot11>N*max_val*max_val*eps &&
|
|
|
- dot22>N*max_val*max_val*eps ){
|
|
|
+ if(dot11>max_val*max_val*eps_ &&
|
|
|
+ dot22>max_val*max_val*eps_ ){
|
|
|
T s=dot12/dot11;
|
|
|
M_scal[0][i]=log(s)/log(2.0);
|
|
|
T err=sqrt(0.5*(dot22/dot11)/(s*s)-0.5);
|
|
|
- if(err>N*eps){
|
|
|
+ if(err>eps_){
|
|
|
homogen=false;
|
|
|
M_scal[0][i]=0.0;
|
|
|
}
|
|
@@ -123,9 +126,8 @@ void Kernel<T>::Initialize(bool verbose) const{
|
|
|
src_scal.Resize(ker_dim[0]); src_scal.SetZero();
|
|
|
trg_scal.Resize(ker_dim[1]); trg_scal.SetZero();
|
|
|
if(homogen){
|
|
|
- Matrix<T> b(ker_dim[0]*ker_dim[1]+1,1);
|
|
|
+ Matrix<T> b(ker_dim[0]*ker_dim[1]+1,1); b.SetZero();
|
|
|
mem::memcopy(&b[0][0],&M_scal[0][0],ker_dim[0]*ker_dim[1]*sizeof(T));
|
|
|
- b[ker_dim[0]*ker_dim[1]][0]=1;
|
|
|
|
|
|
Matrix<T> M(ker_dim[0]*ker_dim[1]+1,ker_dim[0]+ker_dim[1]); M.SetZero();
|
|
|
M[ker_dim[0]*ker_dim[1]][0]=1;
|
|
@@ -149,7 +151,7 @@ void Kernel<T>::Initialize(bool verbose) const{
|
|
|
for(size_t i0=0;i0<ker_dim[0];i0++)
|
|
|
for(size_t i1=0;i1<ker_dim[1];i1++){
|
|
|
if(M_scal[i0][i1]>=0){
|
|
|
- if(fabs(src_scal[i0]+trg_scal[i1]-M_scal[i0][i1])>eps*N){
|
|
|
+ if(fabs(src_scal[i0]+trg_scal[i1]-M_scal[i0][i1])>eps_){
|
|
|
homogen=false;
|
|
|
}
|
|
|
}
|
|
@@ -165,7 +167,8 @@ void Kernel<T>::Initialize(bool verbose) const{
|
|
|
{ // Determine symmetry
|
|
|
perm_vec.Resize(Perm_Count);
|
|
|
|
|
|
- size_t N=1024; eps=N*eps;
|
|
|
+ size_t N=1024;
|
|
|
+ T eps_=N*eps;
|
|
|
T src_coord[3]={0,0,0};
|
|
|
std::vector<T> trg_coord1(N*COORD_DIM);
|
|
|
std::vector<T> trg_coord2(N*COORD_DIM);
|
|
@@ -268,12 +271,12 @@ void Kernel<T>::Initialize(bool verbose) const{
|
|
|
M11.Resize(ker_dim[0],ker_dim[1]); M11.SetZero();
|
|
|
M22.Resize(ker_dim[0],ker_dim[1]); M22.SetZero();
|
|
|
for(size_t i=0;i<ker_dim[0]*ker_dim[1];i++){
|
|
|
- if(norm1[i]>eps && M11[0][i]==0){
|
|
|
+ if(norm1[i]>eps_ && M11[0][i]==0){
|
|
|
for(size_t j=0;j<ker_dim[0]*ker_dim[1];j++){
|
|
|
- if(fabs(norm1[i]-norm1[j])<eps && fabs(fabs(dot11[i][j])-1.0)<eps){
|
|
|
+ if(fabs(norm1[i]-norm1[j])<eps_ && fabs(fabs(dot11[i][j])-1.0)<eps_){
|
|
|
M11[0][j]=(dot11[i][j]>0?flag:-flag);
|
|
|
}
|
|
|
- if(fabs(norm1[i]-norm2[j])<eps && fabs(fabs(dot12[i][j])-1.0)<eps){
|
|
|
+ if(fabs(norm1[i]-norm2[j])<eps_ && fabs(fabs(dot12[i][j])-1.0)<eps_){
|
|
|
M22[0][j]=(dot12[i][j]>0?flag:-flag);
|
|
|
}
|
|
|
}
|