本文整理汇总了C++中Vector4d::modulo2方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector4d::modulo2方法的具体用法?C++ Vector4d::modulo2怎么用?C++ Vector4d::modulo2使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vector4d
的用法示例。
在下文中一共展示了Vector4d::modulo2方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: calculate
double ERMSD::calculate(const std::vector<Vector> & positions,const Pbc& pbc,\
std::vector<Vector> &derivatives, Tensor& virial) {
double ermsd=0.;
std::vector<Vector4d> mat;
mat.resize(nresidues*nresidues);
std::vector<TensorGeneric<4,3> > Gderi;
Gderi.resize(natoms*natoms);
calcMat(positions,pbc,mat,Gderi);
unsigned idx1 = 0;
for(unsigned i=0; i<nresidues; i++) {
for(unsigned j=0; j<nresidues; j++) {
unsigned ii = i*nresidues + j;
Vector4d dd = delta(reference_mat[ii],mat[ii]);
double val = dd.modulo2();
//std::cout << "AAA " << i << " " << j << " " << ii << " "<< val << "\n";
if(val>0.0 && i!=j) {
for(unsigned k=0; k<3; k++) {
idx1 = i*nresidues*6 + j*6 + k;
derivatives[3*i+k] += matmul(dd,Gderi[idx1]);
derivatives[3*j+k] += matmul(dd,Gderi[idx1+3]);
}
ermsd += val;
}
}
}
//std::cout << ermsd << " ";
//if(pairs.size()!=0) nresidues=pairs.size();
//std::cout << ermsd << " " << nresidues;
ermsd = sqrt(ermsd/nresidues);
double iermsd = 1.0/(ermsd*nresidues);
for(unsigned i=0; i<natoms; ++i) {derivatives[i] *= iermsd;}
return ermsd;
}