| 523 |  | atomRowData.skippedCharge.end(), 0.0); | 
| 524 |  | fill(atomColData.skippedCharge.begin(), | 
| 525 |  | atomColData.skippedCharge.end(), 0.0); | 
| 526 | + | } | 
| 527 | + |  | 
| 528 | + | if (storageLayout_ & DataStorage::dslElectricField) { | 
| 529 | + | fill(atomRowData.electricField.begin(), | 
| 530 | + | atomRowData.electricField.end(), V3Zero); | 
| 531 | + | fill(atomColData.electricField.begin(), | 
| 532 | + | atomColData.electricField.end(), V3Zero); | 
| 533 | + | } | 
| 534 | + | if (storageLayout_ & DataStorage::dslFlucQForce) { | 
| 535 | + | fill(atomRowData.flucQFrc.begin(), atomRowData.flucQFrc.end(), | 
| 536 | + | 0.0); | 
| 537 | + | fill(atomColData.flucQFrc.begin(), atomColData.flucQFrc.end(), | 
| 538 | + | 0.0); | 
| 539 |  | } | 
| 540 |  |  | 
| 541 |  | #endif | 
| 550 |  | fill(snap_->atomData.density.begin(), | 
| 551 |  | snap_->atomData.density.end(), 0.0); | 
| 552 |  | } | 
| 553 | + |  | 
| 554 |  | if (storageLayout_ & DataStorage::dslFunctional) { | 
| 555 |  | fill(snap_->atomData.functional.begin(), | 
| 556 |  | snap_->atomData.functional.end(), 0.0); | 
| 557 |  | } | 
| 558 | + |  | 
| 559 |  | if (storageLayout_ & DataStorage::dslFunctionalDerivative) { | 
| 560 |  | fill(snap_->atomData.functionalDerivative.begin(), | 
| 561 |  | snap_->atomData.functionalDerivative.end(), 0.0); | 
| 562 |  | } | 
| 563 | + |  | 
| 564 |  | if (storageLayout_ & DataStorage::dslSkippedCharge) { | 
| 565 |  | fill(snap_->atomData.skippedCharge.begin(), | 
| 566 |  | snap_->atomData.skippedCharge.end(), 0.0); | 
| 567 |  | } | 
| 568 | < |  | 
| 568 | > |  | 
| 569 | > | if (storageLayout_ & DataStorage::dslElectricField) { | 
| 570 | > | fill(snap_->atomData.electricField.begin(), | 
| 571 | > | snap_->atomData.electricField.end(), V3Zero); | 
| 572 | > | } | 
| 573 |  | } | 
| 574 |  |  | 
| 575 |  |  | 
| 609 |  | atomColData.electroFrame); | 
| 610 |  | } | 
| 611 |  |  | 
| 612 | + | // if needed, gather the atomic fluctuating charge values | 
| 613 | + | if (storageLayout_ & DataStorage::dslFlucQPosition) { | 
| 614 | + | AtomPlanRealRow->gather(snap_->atomData.flucQPos, | 
| 615 | + | atomRowData.flucQPos); | 
| 616 | + | AtomPlanRealColumn->gather(snap_->atomData.flucQPos, | 
| 617 | + | atomColData.flucQPos); | 
| 618 | + | } | 
| 619 | + |  | 
| 620 |  | #endif | 
| 621 |  | } | 
| 622 |  |  | 
| 638 |  | AtomPlanRealColumn->scatter(atomColData.density, rho_tmp); | 
| 639 |  | for (int i = 0; i < n; i++) | 
| 640 |  | snap_->atomData.density[i] += rho_tmp[i]; | 
| 641 | + | } | 
| 642 | + |  | 
| 643 | + | if (storageLayout_ & DataStorage::dslElectricField) { | 
| 644 | + |  | 
| 645 | + | AtomPlanVectorRow->scatter(atomRowData.electricField, | 
| 646 | + | snap_->atomData.electricField); | 
| 647 | + |  | 
| 648 | + | int n = snap_->atomData.electricField.size(); | 
| 649 | + | vector<Vector3d> field_tmp(n, V3Zero); | 
| 650 | + | AtomPlanVectorColumn->scatter(atomColData.electricField, field_tmp); | 
| 651 | + | for (int i = 0; i < n; i++) | 
| 652 | + | snap_->atomData.electricField[i] += field_tmp[i]; | 
| 653 |  | } | 
| 654 |  | #endif | 
| 655 |  | } | 
| 730 |  |  | 
| 731 |  | } | 
| 732 |  |  | 
| 733 | + | if (storageLayout_ & DataStorage::dslFlucQForce) { | 
| 734 | + |  | 
| 735 | + | int nq = snap_->atomData.flucQFrc.size(); | 
| 736 | + | vector<RealType> fqfrc_tmp(nq, 0.0); | 
| 737 | + |  | 
| 738 | + | AtomPlanRealRow->scatter(atomRowData.flucQFrc, fqfrc_tmp); | 
| 739 | + | for (int i = 0; i < nq; i++) { | 
| 740 | + | snap_->atomData.flucQFrc[i] += fqfrc_tmp[i]; | 
| 741 | + | fqfrc_tmp[i] = 0.0; | 
| 742 | + | } | 
| 743 | + |  | 
| 744 | + | AtomPlanRealColumn->scatter(atomColData.flucQFrc, fqfrc_tmp); | 
| 745 | + | for (int i = 0; i < nq; i++) | 
| 746 | + | snap_->atomData.flucQFrc[i] += fqfrc_tmp[i]; | 
| 747 | + |  | 
| 748 | + | } | 
| 749 | + |  | 
| 750 |  | nLocal_ = snap_->getNumberOfAtoms(); | 
| 751 |  |  | 
| 752 |  | vector<potVec> pot_temp(nLocal_, | 
| 1008 |  | } | 
| 1009 |  |  | 
| 1010 |  | #else | 
| 1011 | + |  | 
| 1012 |  |  | 
| 1013 | + | // cerr << "atoms = " << atom1 << " " << atom2 << "\n"; | 
| 1014 | + | // cerr << "pos1 = " << snap_->atomData.position[atom1] << "\n"; | 
| 1015 | + | // cerr << "pos2 = " << snap_->atomData.position[atom2] << "\n"; | 
| 1016 | + |  | 
| 1017 |  | idat.atypes = make_pair( atypesLocal[atom1], atypesLocal[atom2]); | 
| 1018 |  | //idat.atypes = make_pair( ff_->getAtomType(idents[atom1]), | 
| 1019 |  | //                         ff_->getAtomType(idents[atom2]) ); | 
| 1068 |  |  | 
| 1069 |  | atomRowData.force[atom1] += *(idat.f1); | 
| 1070 |  | atomColData.force[atom2] -= *(idat.f1); | 
| 1071 | + |  | 
| 1072 | + | // should particle pot be done here also? | 
| 1073 |  | #else | 
| 1074 |  | pairwisePot += *(idat.pot); | 
| 1075 |  |  | 
| 1076 |  | snap_->atomData.force[atom1] += *(idat.f1); | 
| 1077 |  | snap_->atomData.force[atom2] -= *(idat.f1); | 
| 1078 | + |  | 
| 1079 | + | if (idat.doParticlePot) { | 
| 1080 | + | snap_->atomData.particlePot[atom1] += *(idat.vpair) * *(idat.sw); | 
| 1081 | + | snap_->atomData.particlePot[atom2] -= *(idat.vpair) * *(idat.sw); | 
| 1082 | + | } | 
| 1083 | + |  | 
| 1084 |  | #endif | 
| 1085 |  |  | 
| 1086 |  | } |