Changes in src/moleculelist.cpp [244a84:a67d19]
- File:
-
- 1 edited
-
src/moleculelist.cpp (modified) (43 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/moleculelist.cpp
r244a84 ra67d19 19 19 #include "memoryallocator.hpp" 20 20 #include "periodentafel.hpp" 21 #include "World.hpp" 21 22 22 23 /*********************************** Functions for class MoleculeListClass *************************/ … … 35 36 MoleculeListClass::~MoleculeListClass() 36 37 { 37 Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl;38 DoLog(3) && (Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl); 38 39 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) { 39 Log() << Verbose(4) << "ListOfMolecules: Freeing " << *ListRunner << "." << endl;40 DoLog(4) && (Log() << Verbose(4) << "ListOfMolecules: Freeing " << *ListRunner << "." << endl); 40 41 delete (*ListRunner); 41 42 } 42 Log() << Verbose(4) << "Freeing ListOfMolecules." << endl;43 DoLog(4) && (Log() << Verbose(4) << "Freeing ListOfMolecules." << endl); 43 44 ListOfMolecules.clear(); // empty list 44 45 }; … … 144 145 145 146 // header 146 Log() << Verbose(0) << "Index\tName\t\tAtoms\tFormula\tCenter\tSize" << endl;147 Log() << Verbose(0) << "-----------------------------------------------" << endl;147 DoLog(0) && (Log() << Verbose(0) << "Index\tName\t\tAtoms\tFormula\tCenter\tSize" << endl); 148 DoLog(0) && (Log() << Verbose(0) << "-----------------------------------------------" << endl); 148 149 if (ListOfMolecules.size() == 0) 149 Log() << Verbose(0) << "\tNone" << endl;150 DoLog(0) && (Log() << Verbose(0) << "\tNone" << endl); 150 151 else { 151 152 Origin.Zero(); … … 164 165 } 165 166 // output Index, Name, number of atoms, chemical formula 166 Log() << Verbose(0) << ((*ListRunner)->ActiveFlag ? "*" : " ") << (*ListRunner)->IndexNr << "\t" << (*ListRunner)->name << "\t\t" << (*ListRunner)->AtomCount << "\t";167 DoLog(0) && (Log() << Verbose(0) << ((*ListRunner)->ActiveFlag ? "*" : " ") << (*ListRunner)->IndexNr << "\t" << (*ListRunner)->name << "\t\t" << (*ListRunner)->AtomCount << "\t"); 167 168 Elemental = (*ListRunner)->elemente->end; 168 169 while(Elemental->previous != (*ListRunner)->elemente->start) { 169 170 Elemental = Elemental->previous; 170 171 if (Counts[Elemental->Z] != 0) 171 Log() << Verbose(0) << Elemental->symbol << Counts[Elemental->Z];172 DoLog(0) && (Log() << Verbose(0) << Elemental->symbol << Counts[Elemental->Z]); 172 173 } 173 174 // Center and size 174 Log() << Verbose(0) << "\t" << (*ListRunner)->Center << "\t" << sqrt(size) << endl;175 DoLog(0) && (Log() << Verbose(0) << "\t" << (*ListRunner)->Center << "\t" << sqrt(size) << endl); 175 176 } 176 177 } … … 313 314 Tesselation *TesselStruct = NULL; 314 315 if ((srcmol == NULL) || (mol == NULL)) { 315 eLog() << Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl;316 DoeLog(1) && (eLog()<< Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl); 316 317 return false; 317 318 } … … 321 322 FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL); 322 323 if (TesselStruct == NULL) { 323 eLog() << Verbose(1) << "Could not tesselate the fixed molecule." << endl;324 DoeLog(1) && (eLog()<< Verbose(1) << "Could not tesselate the fixed molecule." << endl); 324 325 return false; 325 326 } … … 338 339 while (Walker->next != srcmol->end) { 339 340 Walker = Walker->next; 340 Log() << Verbose(2) << "INFO: Current Walker is " << *Walker << "." << endl;341 DoLog(2) && (Log() << Verbose(2) << "INFO: Current Walker is " << *Walker << "." << endl); 341 342 if (!TesselStruct->IsInnerPoint(Walker->x, LCList)) { 342 343 CopyAtoms[Walker->nr] = new atom(Walker); … … 347 348 } 348 349 } 349 Log() << Verbose(1) << nr << " of " << srcmol->AtomCount << " atoms have been merged.";350 DoLog(1) && (Log() << Verbose(1) << nr << " of " << srcmol->AtomCount << " atoms have been merged."); 350 351 351 352 // go through all bonds and add as well … … 353 354 while(Binder->next != srcmol->last) { 354 355 Binder = Binder->next; 355 Log() << Verbose(3) << "Adding Bond between " << *CopyAtoms[Binder->leftatom->nr] << " and " << *CopyAtoms[Binder->rightatom->nr]<< "." << endl;356 DoLog(3) && (Log() << Verbose(3) << "Adding Bond between " << *CopyAtoms[Binder->leftatom->nr] << " and " << *CopyAtoms[Binder->rightatom->nr]<< "." << endl); 356 357 mol->AddBond(CopyAtoms[Binder->leftatom->nr], CopyAtoms[Binder->rightatom->nr], Binder->BondDegree); 357 358 } … … 365 366 void MoleculeListClass::Output(ofstream *out) 366 367 { 367 Log() << Verbose(1) << "MoleculeList: ";368 DoLog(1) && (Log() << Verbose(1) << "MoleculeList: "); 368 369 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) 369 Log() << Verbose(0) << *ListRunner << "\t";370 Log() << Verbose(0) << endl;370 DoLog(0) && (Log() << Verbose(0) << *ListRunner << "\t"); 371 DoLog(0) && (Log() << Verbose(0) << endl); 371 372 }; 372 373 … … 394 395 char *FragmentNumber = NULL; 395 396 396 Log() << Verbose(1) << "Saving hydrogen saturation correction ... ";397 DoLog(1) && (Log() << Verbose(1) << "Saving hydrogen saturation correction ... "); 397 398 // 0. parse in fit constant files that should have the same dimension as the final energy files 398 399 // 0a. find dimension of matrices with constants … … 404 405 input.open(line.c_str()); 405 406 if (input == NULL) { 406 Log() << Verbose(1) << endl << "Unable to open " << line << ", is the directory correct?" << endl;407 DoLog(1) && (Log() << Verbose(1) << endl << "Unable to open " << line << ", is the directory correct?" << endl); 407 408 return false; 408 409 } … … 421 422 b++; 422 423 } 423 Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, ";424 DoLog(0) && (Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, "); 424 425 input.close(); 425 426 … … 442 443 input.open(line.c_str()); 443 444 if (input == NULL) { 444 eLog() << Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl;445 DoeLog(0) && (eLog()<< Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl); 445 446 performCriticalExit(); 446 447 return false; … … 464 465 } 465 466 for (int k = 0; k < 3; k++) { 466 Log() << Verbose(0) << "Constants " << k << ":" << endl;467 DoLog(0) && (Log() << Verbose(0) << "Constants " << k << ":" << endl); 467 468 for (int j = 0; j < b; j++) { 468 469 for (int i = 0; i < a; i++) { 469 Log() << Verbose(0) << FitConstant[k][i][j] << "\t";470 DoLog(0) && (Log() << Verbose(0) << FitConstant[k][i][j] << "\t"); 470 471 } 471 Log() << Verbose(0) << endl;472 } 473 Log() << Verbose(0) << endl;472 DoLog(0) && (Log() << Verbose(0) << endl); 473 } 474 DoLog(0) && (Log() << Verbose(0) << endl); 474 475 } 475 476 … … 559 560 } 560 561 Free(&FitConstant); 561 Log() << Verbose(0) << "done." << endl;562 DoLog(0) && (Log() << Verbose(0) << "done." << endl); 562 563 return true; 563 564 }; … … 579 580 580 581 // open file for the force factors 581 Log() << Verbose(1) << "Saving force factors ... ";582 DoLog(1) && (Log() << Verbose(1) << "Saving force factors ... "); 582 583 line << path << "/" << FRAGMENTPREFIX << FORCESFILE; 583 584 ForcesFile.open(line.str().c_str(), ios::out); … … 607 608 } 608 609 ForcesFile.close(); 609 Log() << Verbose(1) << "done." << endl;610 DoLog(1) && (Log() << Verbose(1) << "done." << endl); 610 611 } else { 611 612 status = false; 612 Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl;613 DoLog(1) && (Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl); 613 614 } 614 615 ForcesFile.close(); … … 638 639 int FragmentCounter = 0; 639 640 ofstream output; 640 641 double cell_size_backup[6]; 642 double * const cell_size = World::get()->cell_size; 643 644 // backup cell_size 645 for (int i=0;i<6;i++) 646 cell_size_backup[i] = cell_size[i]; 641 647 // store the fragments as config and as xyz 642 648 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) { … … 646 652 strcpy(PathBackup, path); 647 653 else { 648 eLog() << Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl;654 DoeLog(0) && (eLog()<< Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl); 649 655 performCriticalExit(); 650 656 } … … 657 663 sprintf(FragmentName, "%s/%s%s.conf.xyz", configuration->configpath, FRAGMENTPREFIX, FragmentNumber); 658 664 outputFragment.open(FragmentName, ios::out); 659 Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as XYZ ...";665 DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as XYZ ..."); 660 666 if ((intermediateResult = (*ListRunner)->OutputXYZ(&outputFragment))) 661 Log() << Verbose(0) << " done." << endl;667 DoLog(0) && (Log() << Verbose(0) << " done." << endl); 662 668 else 663 Log() << Verbose(0) << " failed." << endl;669 DoLog(0) && (Log() << Verbose(0) << " failed." << endl); 664 670 result = result && intermediateResult; 665 671 outputFragment.close(); … … 667 673 668 674 // list atoms in fragment for debugging 669 Log() << Verbose(2) << "Contained atoms: ";675 DoLog(2) && (Log() << Verbose(2) << "Contained atoms: "); 670 676 Walker = (*ListRunner)->start; 671 677 while (Walker->next != (*ListRunner)->end) { 672 678 Walker = Walker->next; 673 Log() << Verbose(0) << Walker->Name << " ";674 } 675 Log() << Verbose(0) << endl;679 DoLog(0) && (Log() << Verbose(0) << Walker->Name << " "); 680 } 681 DoLog(0) && (Log() << Verbose(0) << endl); 676 682 677 683 // center on edge … … 682 688 j += k + 1; 683 689 BoxDimension.x[k] = 2.5 * (configuration->GetIsAngstroem() ? 1. : 1. / AtomicLengthToAngstroem); 684 (*ListRunner)->cell_size[j] += BoxDimension.x[k] * 2.;690 cell_size[j] = BoxDimension.x[k] * 2.; 685 691 } 686 692 (*ListRunner)->Translate(&BoxDimension); … … 697 703 // and save as config 698 704 sprintf(FragmentName, "%s/%s%s.conf", configuration->configpath, FRAGMENTPREFIX, FragmentNumber); 699 Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as config ...";705 DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as config ..."); 700 706 if ((intermediateResult = configuration->Save(FragmentName, (*ListRunner)->elemente, (*ListRunner)))) 701 Log() << Verbose(0) << " done." << endl;707 DoLog(0) && (Log() << Verbose(0) << " done." << endl); 702 708 else 703 Log() << Verbose(0) << " failed." << endl;709 DoLog(0) && (Log() << Verbose(0) << " failed." << endl); 704 710 result = result && intermediateResult; 705 711 … … 709 715 // and save as mpqc input file 710 716 sprintf(FragmentName, "%s/%s%s.conf", configuration->configpath, FRAGMENTPREFIX, FragmentNumber); 711 Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as mpqc input ...";717 DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as mpqc input ..."); 712 718 if ((intermediateResult = configuration->SaveMPQC(FragmentName, (*ListRunner)))) 713 Log() << Verbose(2) << " done." << endl;719 DoLog(2) && (Log() << Verbose(2) << " done." << endl); 714 720 else 715 Log() << Verbose(0) << " failed." << endl;721 DoLog(0) && (Log() << Verbose(0) << " failed." << endl); 716 722 717 723 result = result && intermediateResult; … … 720 726 Free(&FragmentNumber); 721 727 } 722 Log() << Verbose(0) << " done." << endl;728 DoLog(0) && (Log() << Verbose(0) << " done." << endl); 723 729 724 730 // printing final number 725 Log() << Verbose(2) << "Final number of fragments: " << FragmentCounter << "." << endl; 731 DoLog(2) && (Log() << Verbose(2) << "Final number of fragments: " << FragmentCounter << "." << endl); 732 733 // restore cell_size 734 for (int i=0;i<6;i++) 735 cell_size[i] = cell_size_backup[i]; 726 736 727 737 return result; … … 758 768 Walker = Advancer; 759 769 Advancer = Advancer->next; 760 Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;770 DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl); 761 771 unlink(Walker); 762 772 Walker->father = Walker; … … 776 786 777 787 // 1. dissect the molecule into connected subgraphs 778 configuration->BG->ConstructBondGraph(mol); 788 if (!configuration->BG->ConstructBondGraph(mol)) { 789 delete (mol); 790 DoeLog(1) && (eLog()<< Verbose(1) << "There are no bonds." << endl); 791 return; 792 } 779 793 780 794 // 2. scan for connected subgraphs … … 783 797 Subgraphs = mol->DepthFirstSearchAnalysis(BackEdgeStack); 784 798 delete(BackEdgeStack); 799 if ((Subgraphs == NULL) || (Subgraphs->next == NULL)) { 800 delete (mol); 801 DoeLog(1) && (eLog()<< Verbose(1) << "There are no atoms." << endl); 802 return; 803 } 785 804 786 805 // 3. dissect (the following construct is needed to have the atoms not in the order of the DFS, but in … … 800 819 strncat(molecules[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1); 801 820 } 802 cout << "MolName is " << molecules[i]->name << endl;821 DoLog(1) && (Log() << Verbose(1) << "MolName is " << molecules[i]->name << endl); 803 822 insert(molecules[i]); 804 823 } … … 824 843 Walker = mol->start->next; 825 844 if ((Walker->nr <0) || (Walker->nr >= mol->AtomCount)) { 826 eLog() << Verbose(0) << "Index of atom " << *Walker << " is invalid!" << endl;845 DoeLog(0) && (eLog()<< Verbose(0) << "Index of atom " << *Walker << " is invalid!" << endl); 827 846 performCriticalExit(); 828 847 } 829 848 FragmentCounter = MolMap[Walker->nr]; 830 849 if (FragmentCounter != 0) { 831 Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;850 DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl); 832 851 unlink(Walker); 833 852 molecules[FragmentCounter-1]->AddAtom(Walker); // counting starts at 1 834 853 } else { 835 eLog() << Verbose(0) << "Atom " << *Walker << " not associated to molecule!" << endl;854 DoeLog(0) && (eLog()<< Verbose(0) << "Atom " << *Walker << " not associated to molecule!" << endl); 836 855 performCriticalExit(); 837 856 } … … 854 873 Free(&MolMap); 855 874 Free(&molecules); 856 Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl;875 DoLog(1) && (Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl); 857 876 }; 858 877 … … 963 982 int AtomNo; 964 983 965 Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl;984 DoLog(1) && (Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl); 966 985 // fill ListOfLocalAtoms if NULL was given 967 986 if (!FillListOfLocalAtoms(ListOfLocalAtoms, FragmentCounter, reference->AtomCount, FreeList)) { 968 Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl;987 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 969 988 return false; 970 989 } 971 990 972 991 if (status) { 973 Log() << Verbose(1) << "Creating adjacency list for subgraph " << Leaf << "." << endl;992 DoLog(1) && (Log() << Verbose(1) << "Creating adjacency list for subgraph " << Leaf << "." << endl); 974 993 // remove every bond from the list 975 994 bond *Binder = NULL; … … 992 1011 Leaf->AddBond(Walker, OtherWalker, (*Runner)->BondDegree); 993 1012 } else { 994 Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << FragmentCounter << "][" << (*Runner)->GetOtherAtom(Walker->GetTrueFather())->nr << "] is NULL!" << endl;1013 DoLog(1) && (Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << FragmentCounter << "][" << (*Runner)->GetOtherAtom(Walker->GetTrueFather())->nr << "] is NULL!" << endl); 995 1014 status = false; 996 1015 } … … 1005 1024 Free(&ListOfLocalAtoms); 1006 1025 } 1007 Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl;1026 DoLog(1) && (Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl); 1008 1027 return status; 1009 1028 }; … … 1038 1057 next->FillRootStackForSubgraphs(RootStack, AtomMask, ++FragmentCounter); 1039 1058 } else { 1040 Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl;1059 DoLog(1) && (Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl); 1041 1060 return false; 1042 1061 } … … 1044 1063 return true; 1045 1064 } else { 1046 Log() << Verbose(1) << "Rootstack is NULL." << endl;1065 DoLog(1) && (Log() << Verbose(1) << "Rootstack is NULL." << endl); 1047 1066 return false; 1048 1067 } … … 1094 1113 int KeySetCounter = 0; 1095 1114 1096 Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl;1115 DoLog(1) && (Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl); 1097 1116 // fill ListOfLocalAtoms if NULL was given 1098 1117 if (!FillListOfLocalAtoms(ListOfLocalAtoms, FragmentCounter, reference->AtomCount, FreeList)) { 1099 Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl;1118 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 1100 1119 return false; 1101 1120 } … … 1125 1144 delete (TempSet); 1126 1145 if (KeySetCounter == 0) {// if there are no keysets, delete the list 1127 Log() << Verbose(1) << "KeySetCounter is zero, deleting FragmentList." << endl;1146 DoLog(1) && (Log() << Verbose(1) << "KeySetCounter is zero, deleting FragmentList." << endl); 1128 1147 delete (FragmentList[FragmentCounter]); 1129 1148 } else 1130 Log() << Verbose(1) << KeySetCounter << " keysets were assigned to subgraph " << FragmentCounter << "." << endl;1149 DoLog(1) && (Log() << Verbose(1) << KeySetCounter << " keysets were assigned to subgraph " << FragmentCounter << "." << endl); 1131 1150 FragmentCounter++; 1132 1151 if (next != NULL) … … 1134 1153 FragmentCounter--; 1135 1154 } else 1136 Log() << Verbose(1) << "KeySetList is NULL or empty." << endl;1155 DoLog(1) && (Log() << Verbose(1) << "KeySetList is NULL or empty." << endl); 1137 1156 1138 1157 if ((FreeList) && (ListOfLocalAtoms != NULL)) { … … 1142 1161 Free(&ListOfLocalAtoms); 1143 1162 } 1144 Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl;1163 DoLog(1) && (Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl); 1145 1164 return status; 1146 1165 }; … … 1155 1174 void MoleculeLeafClass::TranslateIndicesToGlobalIDs(Graph **FragmentList, int &FragmentCounter, int &TotalNumberOfKeySets, Graph &TotalGraph) 1156 1175 { 1157 Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl;1176 DoLog(1) && (Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl); 1158 1177 KeySet *TempSet = new KeySet; 1159 1178 if (FragmentList[FragmentCounter] != NULL) { … … 1166 1185 delete (TempSet); 1167 1186 } else { 1168 Log() << Verbose(1) << "FragmentList is NULL." << endl;1187 DoLog(1) && (Log() << Verbose(1) << "FragmentList is NULL." << endl); 1169 1188 } 1170 1189 if (next != NULL) 1171 1190 next->TranslateIndicesToGlobalIDs(FragmentList, ++FragmentCounter, TotalNumberOfKeySets, TotalGraph); 1172 1191 FragmentCounter--; 1173 Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl;1192 DoLog(1) && (Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl); 1174 1193 }; 1175 1194
Note:
See TracChangeset
for help on using the changeset viewer.
