- Timestamp:
- Jun 21, 2017, 8:01:27 AM (8 years ago)
- Branches:
- IndependentFragmentGrids_Sole_NN_Calculation
- Parents:
- 3fb9ab
- git-author:
- Frederik Heber <heber@…> (08/19/16 05:27:39)
- git-committer:
- Frederik Heber <frederik.heber@…> (06/21/17 08:01:27)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
r3fb9ab ra8961d 170 170 ) 171 171 { 172 ASSERT( _shortrangedata.size() == _longrangedata.size(), 173 "calculateNucleiNucleiLongRangeContribution() - shortrange and longrange data have inequal size."); 172 // we assume here that the fragmentjobs in short- and longrange case are in the 173 // same order and that the full jobs per level are appended to the end of 174 // longrangedata 174 175 std::map<JobId_t, VMGData>::iterator longrangeiter = _longrangedata.begin(); 175 176 std::map<JobId_t, MPQCData>::const_iterator iter = _shortrangedata.begin(); … … 178 179 VMGData &longrange_data = longrangeiter->second; 179 180 // set long-range contributions to zero 181 const double old_energy = longrange_data.nuclei_long; 180 182 longrange_data.nuclei_long = 0.; 181 183 longrange_data.forces.clear(); 182 longrange_data.forces.resize(data.positions.size(), FragmentForces::force_t( 3,0.));184 longrange_data.forces.resize(data.positions.size(), FragmentForces::force_t(NDIM,0.)); 183 185 longrange_data.hasForces = true; 184 186 // go through positions and evaluate sum naively … … 206 208 const Vector otherposition((*otherpositer)[0], (*otherpositer)[1], (*otherpositer)[2]); 207 209 const Vector distance = position - otherposition; 208 const double inv sqrdist = 1./distance.Norm();209 const double factor = (*otherchargeiter)*inv sqrdist*invsqrdist*invsqrdist;210 const double invdist = 1./distance.Norm(); 211 const double factor = (*otherchargeiter)*invdist*invdist*invdist; 210 212 (*forceiter)[0] = factor*distance[0]; 211 213 (*forceiter)[1] = factor*distance[1]; 212 214 (*forceiter)[2] = factor*distance[2]; 213 longrange_data.nuclei_long += 0.5*(*chargeiter)*(*otherchargeiter)*invsqrdist; 214 } 215 } 215 longrange_data.nuclei_long += 0.5*(*chargeiter)*(*otherchargeiter)*invdist; 216 } 217 } 218 LOG(2, "DEBUG: fragment #" << longrangeiter->first << ": old is " << old_energy 219 << ", new is " << longrange_data.nuclei_long); 216 220 } 217 221 } … … 423 427 interpolation_degree, 424 428 VMGFragmentController::DoSampleParticles, 425 VMGFragmentController::Do TreatGrid,429 VMGFragmentController::DontTreatGrid, 426 430 params.DoValenceOnly.get() ? MPQCData::DoSampleValenceOnly : MPQCData::DontSampleValenceOnly, 427 431 params.DoPrintDebug.get(), … … 468 472 destiter->second.both_sampled_potential = srciter->second.sampled_potential; 469 473 destiter->second.nuclei_long = srciter->second.nuclei_long; 470 destiter->second.forces = srciter->second.forces;471 destiter->second.hasForces = srciter->second.hasForces;474 destiter->second.forces += srciter->second.forces; 475 destiter->second.hasForces &= srciter->second.hasForces; 472 476 } 473 477 }
Note:
See TracChangeset
for help on using the changeset viewer.
