Difference for src/MoleculeQM.C from version 1.1 to 1.2

version 1.1version 1.2
Line 78
Line 78
                  
         std::string temp = text.substr(start, end - start);         std::string temp = text.substr(start, end - start);
                  
         if (not temp.empty()) tokens.push_back(temp);         if (! temp.empty()) tokens.push_back(temp);
                  
         start = end + delimiter.length();         start = end + delimiter.length();
     }     }
          
     // Gets last item     // Gets last item
     std::string temp = text.substr(start);     std::string temp = text.substr(start);
     if (not temp.empty()) tokens.push_back(temp);     if (! temp.empty()) tokens.push_back(temp);
          
     return tokens;     return tokens;
 } }
Line 408
Line 408
                         // If we are using COM selection, checks if the atom                         // If we are using COM selection, checks if the atom
                         // is part of the user selected residues                         // is part of the user selected residues
                         for(int i=0; i<lssRefUsrSel[atmGrp].size(); i++) {                         for(int i=0; i<lssRefUsrSel[atmGrp].size(); i++) {
                             if (lssRefUsrSel[atmGrp][i].resid == resID and                             if (lssRefUsrSel[atmGrp][i].resid == resID &&
                                 strncmp(lssRefUsrSel[atmGrp][i].segid.c_str(),                                 strncmp(lssRefUsrSel[atmGrp][i].segid.c_str(),
                                         segName,5) == 0 ) {                                         segName,5) == 0 ) {
                                                                  
Line 449
Line 449
                         strncpy(lssCurrClassResSegID, segName,5);                         strncpy(lssCurrClassResSegID, segName,5);
                         lssClassicResIndx = 0;                         lssClassicResIndx = 0;
                     }                     }
                     else if (lssCurrClassResID != resID or                     else if (lssCurrClassResID != resID ||
                             strcmp(lssCurrClassResSegID, segName) != 0 ) {                             strcmp(lssCurrClassResSegID, segName) != 0 ) {
                         lssCurrClassResID = resID ;                         lssCurrClassResID = resID ;
                         strncpy(lssCurrClassResSegID, segName,5);                         strncpy(lssCurrClassResSegID, segName,5);
Line 518
Line 518
             bond curr = bonds[bndIt] ;             bond curr = bonds[bndIt] ;
                          
             // In case either atom has a non-zero             // In case either atom has a non-zero
             if ( qmBondValVec[curr.atom1] != 0 and             if ( qmBondValVec[curr.atom1] != 0 &&
                  qmBondValVec[curr.atom2] != 0 ) {                  qmBondValVec[curr.atom2] != 0 ) {
                                  
                 // Sanity checks (1 of 2)                 // Sanity checks (1 of 2)
                 if (qmAtomGroup[curr.atom1] != 0 and                 if (qmAtomGroup[curr.atom1] != 0 &&
                     qmAtomGroup[curr.atom2] != 0) {                     qmAtomGroup[curr.atom2] != 0) {
                     iout << iERROR << "Atoms " << curr.atom1 << " and " <<                      iout << iERROR << "Atoms " << curr.atom1 << " and " << 
                     curr.atom2 << " are assigned as QM atoms.\n" << endi;                     curr.atom2 << " are assigned as QM atoms.\n" << endi;
Line 530
Line 530
                 }                 }
                                  
                 // Sanity checks (2 of 2)                 // Sanity checks (2 of 2)
                 if (qmAtomGroup[curr.atom1] == 0 and                 if (qmAtomGroup[curr.atom1] == 0 &&
                     qmAtomGroup[curr.atom2] == 0) {                     qmAtomGroup[curr.atom2] == 0) {
                     iout << iERROR << "Atoms " << curr.atom1 << " and " <<                      iout << iERROR << "Atoms " << curr.atom1 << " and " << 
                     curr.atom2 << " are assigned as MM atoms.\n" << endi;                     curr.atom2 << " are assigned as MM atoms.\n" << endi;
Line 690
Line 690
         << " ; Group size: " << qmGrpSizeVec[grpIndx] << " atoms"         << " ; Group size: " << qmGrpSizeVec[grpIndx] << " atoms"
         << " ; Total charge: " << grpChrgVec[grpIndx] << "\n" << endi ;         << " ; Total charge: " << grpChrgVec[grpIndx] << "\n" << endi ;
                  
         if (nonInteger and simParams->PMEOn)         if (nonInteger && simParams->PMEOn)
             NAMD_die("QM atoms do not add up to a whole charge, which is needed for PME.") ;             NAMD_die("QM atoms do not add up to a whole charge, which is needed for PME.") ;
     }     }
          
Line 747
Line 747
          
     // If mechanichal embedding was requested bu we have QM-MM bonds, we need      // If mechanichal embedding was requested bu we have QM-MM bonds, we need 
     // to send extra info to ComputeQM to preserve calculation speed.     // to send extra info to ComputeQM to preserve calculation speed.
     if (qmNumBonds > 0 and qmNoPC) {     if (qmNumBonds > 0 && qmNoPC) {
         qmMeNumBonds = qmNumBonds;         qmMeNumBonds = qmNumBonds;
         qmMeMMindx = new int[qmMeNumBonds] ;         qmMeMMindx = new int[qmMeNumBonds] ;
         qmMeQMGrp = new Real[qmMeNumBonds] ;         qmMeQMGrp = new Real[qmMeNumBonds] ;
Line 875
Line 875
                  
         // We need the two atoms that compose the QM-MM bonds and          // We need the two atoms that compose the QM-MM bonds and 
         // then the element.         // then the element.
         if (strVec.size() != 3 and  qmNumBonds > 1) {         if (strVec.size() != 3 && qmNumBonds > 1) {
             iout << iERROR << "Format error in QM link atom element selection: "              iout << iERROR << "Format error in QM link atom element selection: " 
             << current->data             << current->data
             << "\n" << endi;             << "\n" << endi;
Line 883
Line 883
         }         }
                  
         // If there is only one QM-MM bond, we can accept the element only.         // If there is only one QM-MM bond, we can accept the element only.
         if (strVec.size() != 1 and  strVec.size() != 3 and qmNumBonds == 1) {         if (strVec.size() != 1 && strVec.size() != 3 && qmNumBonds == 1) {
             iout << iERROR << "Format error in QM link atom element selection: "              iout << iERROR << "Format error in QM link atom element selection: " 
             << current->data             << current->data
             << "\n" << endi;             << "\n" << endi;
Line 940
Line 940
                          
             for (bondIter=0; bondIter<qmNumBonds; bondIter++) {             for (bondIter=0; bondIter<qmNumBonds; bondIter++) {
                                  
                 if ( (qmMMBond[bondIter][0] == bondAtom1 and                 if ( (qmMMBond[bondIter][0] == bondAtom1 &&
                     qmMMBond[bondIter][1] == bondAtom2 ) or                      qmMMBond[bondIter][1] == bondAtom2 ) ||
                     (qmMMBond[bondIter][0] == bondAtom2 and                     (qmMMBond[bondIter][0] == bondAtom2 &&
                     qmMMBond[bondIter][1] == bondAtom1 ) ) {                     qmMMBond[bondIter][1] == bondAtom1 ) ) {
                                          
                     foundBond = true;                     foundBond = true;
Line 950
Line 950
                 }                 }
             }             }
                          
             if (not foundBond) {             if (! foundBond) {
                 iout << iERROR << "Error parsing link atom element selection: "                  iout << iERROR << "Error parsing link atom element selection: " 
                 << current->data                 << current->data
                 << "\n" << endi;                 << "\n" << endi;
Line 1079
Line 1079
                         // In case the bonded atom is a QM atom,                         // In case the bonded atom is a QM atom,
                         // skips the index.                         // skips the index.
                         // We also keep the search from going back to MM1.                         // We also keep the search from going back to MM1.
                         if (qmAtomGroup[MM3] > 0 or MM3 == MM1)                         if (qmAtomGroup[MM3] > 0 || MM3 == MM1)
                             continue;                             continue;
                                                  
                         chrgTrgt.push_back(MM3);                         chrgTrgt.push_back(MM3);
Line 1333
Line 1333
             BigReal beta = customPCPDB->atom(atmInd)->temperaturefactor() ;             BigReal beta = customPCPDB->atom(atmInd)->temperaturefactor() ;
             BigReal occ = customPCPDB->atom(atmInd)->occupancy() ;             BigReal occ = customPCPDB->atom(atmInd)->occupancy() ;
                          
             if ( beta != 0 and occ != 0)             if ( beta != 0 && occ != 0)
                 NAMD_die("An atom cannot be marked as QM and poitn charge simultaneously!");                 NAMD_die("An atom cannot be marked as QM and poitn charge simultaneously!");
                          
             // If this is not a QM atom and              // If this is not a QM atom and 
Line 1372
Line 1372
          
     delete pdbP;     delete pdbP;
          
     if (numParsedPBDs != qmNumGrps and simParams->qmCustomPCSel) {     if (numParsedPBDs != qmNumGrps && simParams->qmCustomPCSel) {
         iout << iWARN << "The number of files provided for custom point "         iout << iWARN << "The number of files provided for custom point "
         "charges is not equal to the number of QM groups!\n" << endi;         "charges is not equal to the number of QM groups!\n" << endi;
     }     }
Line 1449
Line 1449
     for (int i = 0; i < numBonds; i++) {     for (int i = 0; i < numBonds; i++) {
         int part1 = qmAtomGroup[bonds[i].atom1];         int part1 = qmAtomGroup[bonds[i].atom1];
         int part2 = qmAtomGroup[bonds[i].atom2];         int part2 = qmAtomGroup[bonds[i].atom2];
         if (part1 > 0 and part2 > 0 ) {         if (part1 > 0 && part2 > 0 ) {
             qmDroppedBonds++;             qmDroppedBonds++;
         } else {         } else {
             // Just a simple sanity check.             // Just a simple sanity check.
             // If there are no QM bonds defined by the user but we find a             // If there are no QM bonds defined by the user but we find a
             // bond between a QM and an MM atom, error out.             // bond between a QM and an MM atom, error out.
             if ((part1 > 0 or part2 > 0) and qmNumBonds == 0) {             if ((part1 > 0 || part2 > 0) && qmNumBonds == 0) {
                 iout << iERROR << " Atoms " << bonds[i].atom1                 iout << iERROR << " Atoms " << bonds[i].atom1
                 << " and " << bonds[i].atom2 << " form a QM-MM bond!\n" << endi ;                 << " and " << bonds[i].atom2 << " form a QM-MM bond!\n" << endi ;
                 NAMD_die("No QM-MM bonds were defined by the user, but one was found.");                 NAMD_die("No QM-MM bonds were defined by the user, but one was found.");
Line 1481
Line 1481
     int part1 = qmAtomGroup[angles[i].atom1];     int part1 = qmAtomGroup[angles[i].atom1];
     int part2 = qmAtomGroup[angles[i].atom2];     int part2 = qmAtomGroup[angles[i].atom2];
     int part3 = qmAtomGroup[angles[i].atom3];     int part3 = qmAtomGroup[angles[i].atom3];
     if (part1 > 0 and part2 > 0 and part3 > 0) {     if (part1 > 0 && part2 > 0 && part3 > 0) {
       //CkPrintf("-----ANGLE ATOMS %i %i %i partitions %i %i %i\n",angles[i].atom1, angles[i].atom2, angles[i].atom3, part1, part2, part3);       //CkPrintf("-----ANGLE ATOMS %i %i %i partitions %i %i %i\n",angles[i].atom1, angles[i].atom2, angles[i].atom3, part1, part2, part3);
       qmDroppedAngles++;       qmDroppedAngles++;
     }     }
Line 1508
Line 1508
     int part2 = qmAtomGroup[dihedrals[i].atom2];     int part2 = qmAtomGroup[dihedrals[i].atom2];
     int part3 = qmAtomGroup[dihedrals[i].atom3];     int part3 = qmAtomGroup[dihedrals[i].atom3];
     int part4 = qmAtomGroup[dihedrals[i].atom4];     int part4 = qmAtomGroup[dihedrals[i].atom4];
     if (part1 > 0 and part2 > 0 and part3 > 0 and part4 > 0) {     if (part1 > 0 && part2 > 0 && part3 > 0 && part4 > 0) {
       //CkPrintf("-----i %i DIHEDRAL ATOMS %i %i %i %i partitions %i %i %i %i\n",i,dihedrals[i].atom1, dihedrals[i].atom2, dihedrals[i].atom3, dihedrals[i].atom4, part1, part2, part3,part4);       //CkPrintf("-----i %i DIHEDRAL ATOMS %i %i %i %i partitions %i %i %i %i\n",i,dihedrals[i].atom1, dihedrals[i].atom2, dihedrals[i].atom3, dihedrals[i].atom4, part1, part2, part3,part4);
       qmDroppedDihedrals++;       qmDroppedDihedrals++;
     }     }
Line 1534
Line 1534
     int part2 = qmAtomGroup[impropers[i].atom2];     int part2 = qmAtomGroup[impropers[i].atom2];
     int part3 = qmAtomGroup[impropers[i].atom3];     int part3 = qmAtomGroup[impropers[i].atom3];
     int part4 = qmAtomGroup[impropers[i].atom4];     int part4 = qmAtomGroup[impropers[i].atom4];
     if (part1 > 0 and part2 > 0 and part3 > 0 and part4 > 0) {     if (part1 > 0 && part2 > 0 && part3 > 0 && part4 > 0) {
       //CkPrintf("-----i %i IMPROPER ATOMS %i %i %i %i partitions %i %i %i %i\n",i,impropers[i].atom1, impropers[i].atom2, impropers[i].atom3, impropers[i].atom4, part1, part2, part3,part4);       //CkPrintf("-----i %i IMPROPER ATOMS %i %i %i %i partitions %i %i %i %i\n",i,impropers[i].atom1, impropers[i].atom2, impropers[i].atom3, impropers[i].atom4, part1, part2, part3,part4);
       qmDroppedImpropers++;       qmDroppedImpropers++;
     }     }
Line 1564
Line 1564
     int part6 = qmAtomGroup[crossterms[i].atom6];     int part6 = qmAtomGroup[crossterms[i].atom6];
     int part7 = qmAtomGroup[crossterms[i].atom7];     int part7 = qmAtomGroup[crossterms[i].atom7];
     int part8 = qmAtomGroup[crossterms[i].atom8];     int part8 = qmAtomGroup[crossterms[i].atom8];
     if (part1 > 0 and part2 > 0 and part3 > 0 and part4 > 0 and     if (part1 > 0 && part2 > 0 && part3 > 0 && part4 > 0 &&
         part5 > 0 and part6 > 0 and part7 > 0 and part8 > 0) {         part5 > 0 && part6 > 0 && part7 > 0 && part8 > 0) {
       //CkPrintf("-----i %i IMPROPER ATOMS %i %i %i %i partitions %i %i %i %i\n",i,impropers[i].atom1, impropers[i].atom2, impropers[i].atom3, impropers[i].atom4, part1, part2, part3,part4);       //CkPrintf("-----i %i IMPROPER ATOMS %i %i %i %i partitions %i %i %i %i\n",i,impropers[i].atom1, impropers[i].atom2, impropers[i].atom3, impropers[i].atom4, part1, part2, part3,part4);
       qmDroppedCrossterms++;       qmDroppedCrossterms++;
     }     }


Legend:
Removed in v.1.1 
changed lines
 Added in v.1.2



Made by using version 1.53 of cvs2html