diff --git a/src/isdb/CS2Backbone.cpp b/src/isdb/CS2Backbone.cpp index 9f93ad000cfd5c3ae4c1caa39218150719167b79..a87952324306124a90b5e36b46a88b1022ef4c24 100644 --- a/src/isdb/CS2Backbone.cpp +++ b/src/isdb/CS2Backbone.cpp @@ -978,7 +978,12 @@ void CS2Backbone::calculate() double score = 0.; + unsigned nt=OpenMP::getNumThreads(); + if(nt*stride*10>chemicalshifts.size()) nt=chemicalshifts.size()/stride/10; + if(nt==0) nt=1; + // a single loop over all chemical shifts + #pragma omp parallel for reduction(+:score) num_threads(nt) for(unsigned cs=rank; cs<chemicalshifts.size(); cs+=stride) { const unsigned kdx=cs*max_cs_atoms; const ChemicalShift *myfrag = &chemicalshifts[cs]; @@ -1302,6 +1307,7 @@ void CS2Backbone::calculate() /* Metainference */ if(getDoScore()) { score = getScore(); + #pragma omp parallel for num_threads(nt) for(unsigned cs=rank; cs<chemicalshifts.size(); cs+=stride) { const unsigned kdx=cs*max_cs_atoms; const double fact = getMetaDer(cs); @@ -1343,7 +1349,6 @@ void CS2Backbone::calculate() void CS2Backbone::update_neighb() { max_cs_atoms=0; // cycle over chemical shifts - #pragma omp parallel for num_threads(OpenMP::getNumThreads()) for(unsigned cs=0; cs<chemicalshifts.size(); cs++) { const unsigned boxsize = getNumberOfAtoms(); chemicalshifts[cs].box_nb.clear();