void ClusterDist_DME::PairwiseDist(ClusterMatrix& frameDistances, ClusterSieve::SievedFrames const& frames) { int f1, f2; Frame frm2 = frm1_; int f2end = (int)frames.size(); int f1end = f2end - 1; #ifdef _OPENMP Frame frm1 = frm1_; # define frm1_ frm1 #pragma omp parallel private(f1, f2) firstprivate(frm1, frm2) { #pragma omp for schedule(dynamic) #endif for (f1 = 0; f1 < f1end; f1++) { coords_->GetFrame( frames[f1], frm1_, mask_ ); for (f2 = f1 + 1; f2 < f2end; f2++) { coords_->GetFrame( frames[f2], frm2, mask_ ); frameDistances.SetElement( f1, f2, frm1_.DISTRMSD( frm2 ) ); } } #ifdef _OPENMP # undef frm1_ } // END pragma omp parallel #endif }
void ClusterDist_Euclid::PairwiseDist(ClusterMatrix& frameDistances, ClusterSieve::SievedFrames const& frames) { int f1, f2; double dist, diff; DcArray::iterator dcalc; D1Array::iterator ds; int f2end = (int)frames.size(); int f1end = f2end - 1; #ifdef _OPENMP #pragma omp parallel private(f1, f2, dist, diff, dcalc, ds) { #pragma omp for schedule(dynamic) #endif for (f1 = 0; f1 < f1end; f1++) { for (f2 = f1 + 1; f2 < f2end; f2++) { dist = 0.0; dcalc = dcalcs_.begin(); for (ds = dsets_.begin(); ds != dsets_.end(); ++ds, ++dcalc) { diff = (*dcalc)((*ds)->Dval(frames[f1]), (*ds)->Dval(frames[f2])); dist += (diff * diff); } frameDistances.SetElement( f1, f2, sqrt(dist) ); } } #ifdef _OPENMP } #endif }
void ClusterDist_Num::PairwiseDist(ClusterMatrix& frameDistances, ClusterSieve::SievedFrames const& frames) { int f1, f2; int f2end = (int)frames.size(); int f1end = f2end - 1; #ifdef _OPENMP #pragma omp parallel private(f1, f2) { #pragma omp for schedule(dynamic) #endif for (f1 = 0; f1 < f1end; f1++) { for (f2 = f1 + 1; f2 < f2end; f2++) frameDistances.SetElement( f1, f2, dcalc_(data_->Dval(frames[f1]), data_->Dval(frames[f2])) ); } #ifdef _OPENMP } #endif }