Changeset 075729 for molecuilder/src/moleculelist.cpp
- Timestamp:
- Apr 27, 2010, 2:25:42 PM (16 years ago)
- Children:
- 90c4460
- Parents:
- 1561e2 (diff), 2bc713 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
molecuilder/src/moleculelist.cpp (modified) (42 diffs)
Legend:
- Unmodified
- Added
- Removed
-
molecuilder/src/moleculelist.cpp
r1561e2 r075729 20 20 #include "memoryallocator.hpp" 21 21 #include "periodentafel.hpp" 22 #include "World.hpp" 22 23 23 24 /*********************************** Functions for class MoleculeListClass *************************/ … … 37 38 MoleculeListClass::~MoleculeListClass() 38 39 { 39 Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl;40 DoLog(3) && (Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl); 40 41 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) { 41 Log() << Verbose(4) << "ListOfMolecules: Freeing " << *ListRunner << "." << endl;42 DoLog(4) && (Log() << Verbose(4) << "ListOfMolecules: Freeing " << *ListRunner << "." << endl); 42 43 world->destroyMolecule(*ListRunner); 43 44 } 44 Log() << Verbose(4) << "Freeing ListOfMolecules." << endl;45 DoLog(4) && (Log() << Verbose(4) << "Freeing ListOfMolecules." << endl); 45 46 ListOfMolecules.clear(); // empty list 46 47 }; … … 314 315 Tesselation *TesselStruct = NULL; 315 316 if ((srcmol == NULL) || (mol == NULL)) { 316 eLog() << Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl;317 DoeLog(1) && (eLog()<< Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl); 317 318 return false; 318 319 } … … 322 323 FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL); 323 324 if (TesselStruct == NULL) { 324 eLog() << Verbose(1) << "Could not tesselate the fixed molecule." << endl;325 DoeLog(1) && (eLog()<< Verbose(1) << "Could not tesselate the fixed molecule." << endl); 325 326 return false; 326 327 } … … 339 340 while (Walker->next != srcmol->end) { 340 341 Walker = Walker->next; 341 Log() << Verbose(2) << "INFO: Current Walker is " << *Walker << "." << endl;342 DoLog(2) && (Log() << Verbose(2) << "INFO: Current Walker is " << *Walker << "." << endl); 342 343 if (!TesselStruct->IsInnerPoint(Walker->x, LCList)) { 343 344 CopyAtoms[Walker->nr] = Walker->clone(); … … 348 349 } 349 350 } 350 Log() << Verbose(1) << nr << " of " << srcmol->AtomCount << " atoms have been merged.";351 DoLog(1) && (Log() << Verbose(1) << nr << " of " << srcmol->AtomCount << " atoms have been merged."); 351 352 352 353 // go through all bonds and add as well … … 354 355 while(Binder->next != srcmol->last) { 355 356 Binder = Binder->next; 356 Log() << Verbose(3) << "Adding Bond between " << *CopyAtoms[Binder->leftatom->nr] << " and " << *CopyAtoms[Binder->rightatom->nr]<< "." << endl;357 DoLog(3) && (Log() << Verbose(3) << "Adding Bond between " << *CopyAtoms[Binder->leftatom->nr] << " and " << *CopyAtoms[Binder->rightatom->nr]<< "." << endl); 357 358 mol->AddBond(CopyAtoms[Binder->leftatom->nr], CopyAtoms[Binder->rightatom->nr], Binder->BondDegree); 358 359 } … … 366 367 void MoleculeListClass::Output(ofstream *out) 367 368 { 368 Log() << Verbose(1) << "MoleculeList: ";369 DoLog(1) && (Log() << Verbose(1) << "MoleculeList: "); 369 370 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) 370 Log() << Verbose(0) << *ListRunner << "\t";371 Log() << Verbose(0) << endl;371 DoLog(0) && (Log() << Verbose(0) << *ListRunner << "\t"); 372 DoLog(0) && (Log() << Verbose(0) << endl); 372 373 }; 373 374 … … 395 396 char *FragmentNumber = NULL; 396 397 397 Log() << Verbose(1) << "Saving hydrogen saturation correction ... ";398 DoLog(1) && (Log() << Verbose(1) << "Saving hydrogen saturation correction ... "); 398 399 // 0. parse in fit constant files that should have the same dimension as the final energy files 399 400 // 0a. find dimension of matrices with constants … … 405 406 input.open(line.c_str()); 406 407 if (input == NULL) { 407 Log() << Verbose(1) << endl << "Unable to open " << line << ", is the directory correct?" << endl;408 DoLog(1) && (Log() << Verbose(1) << endl << "Unable to open " << line << ", is the directory correct?" << endl); 408 409 return false; 409 410 } … … 422 423 b++; 423 424 } 424 Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, ";425 DoLog(0) && (Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, "); 425 426 input.close(); 426 427 … … 443 444 input.open(line.c_str()); 444 445 if (input == NULL) { 445 eLog() << Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl;446 DoeLog(0) && (eLog()<< Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl); 446 447 performCriticalExit(); 447 448 return false; … … 465 466 } 466 467 for (int k = 0; k < 3; k++) { 467 Log() << Verbose(0) << "Constants " << k << ":" << endl;468 DoLog(0) && (Log() << Verbose(0) << "Constants " << k << ":" << endl); 468 469 for (int j = 0; j < b; j++) { 469 470 for (int i = 0; i < a; i++) { 470 Log() << Verbose(0) << FitConstant[k][i][j] << "\t";471 DoLog(0) && (Log() << Verbose(0) << FitConstant[k][i][j] << "\t"); 471 472 } 472 Log() << Verbose(0) << endl;473 } 474 Log() << Verbose(0) << endl;473 DoLog(0) && (Log() << Verbose(0) << endl); 474 } 475 DoLog(0) && (Log() << Verbose(0) << endl); 475 476 } 476 477 … … 560 561 } 561 562 Free(&FitConstant); 562 Log() << Verbose(0) << "done." << endl;563 DoLog(0) && (Log() << Verbose(0) << "done." << endl); 563 564 return true; 564 565 }; … … 580 581 581 582 // open file for the force factors 582 Log() << Verbose(1) << "Saving force factors ... ";583 DoLog(1) && (Log() << Verbose(1) << "Saving force factors ... "); 583 584 line << path << "/" << FRAGMENTPREFIX << FORCESFILE; 584 585 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::getInstance().getDomain(); 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 World::getInstance().destroyMolecule(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 World::getInstance().destroyMolecule(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 … … 908 927 // center at set box dimensions 909 928 mol->CenterEdge(¢er); 910 mol->cell_size[0] = center.x[0];911 mol->cell_size[1] = 0;912 mol->cell_size[2] = center.x[1];913 mol->cell_size[3] = 0;914 mol->cell_size[4] = 0;915 mol->cell_size[5] = center.x[2];929 World::getInstance().getDomain()[0] = center.x[0]; 930 World::getInstance().getDomain()[1] = 0; 931 World::getInstance().getDomain()[2] = center.x[1]; 932 World::getInstance().getDomain()[3] = 0; 933 World::getInstance().getDomain()[4] = 0; 934 World::getInstance().getDomain()[5] = center.x[2]; 916 935 insert(mol); 917 936 } … … 1051 1070 int AtomNo; 1052 1071 1053 Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl;1072 DoLog(1) && (Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl); 1054 1073 // fill ListOfLocalAtoms if NULL was given 1055 1074 if (!FillListOfLocalAtoms(ListOfLocalAtoms, FragmentCounter, reference->AtomCount, FreeList)) { 1056 Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl;1075 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 1057 1076 return false; 1058 1077 } 1059 1078 1060 1079 if (status) { 1061 Log() << Verbose(1) << "Creating adjacency list for subgraph " << Leaf << "." << endl;1080 DoLog(1) && (Log() << Verbose(1) << "Creating adjacency list for subgraph " << Leaf << "." << endl); 1062 1081 // remove every bond from the list 1063 1082 bond *Binder = NULL; … … 1080 1099 Leaf->AddBond(Walker, OtherWalker, (*Runner)->BondDegree); 1081 1100 } else { 1082 Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << FragmentCounter << "][" << (*Runner)->GetOtherAtom(Walker->GetTrueFather())->nr << "] is NULL!" << endl;1101 DoLog(1) && (Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << FragmentCounter << "][" << (*Runner)->GetOtherAtom(Walker->GetTrueFather())->nr << "] is NULL!" << endl); 1083 1102 status = false; 1084 1103 } … … 1093 1112 Free(&ListOfLocalAtoms); 1094 1113 } 1095 Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl;1114 DoLog(1) && (Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl); 1096 1115 return status; 1097 1116 }; … … 1126 1145 next->FillRootStackForSubgraphs(RootStack, AtomMask, ++FragmentCounter); 1127 1146 } else { 1128 Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl;1147 DoLog(1) && (Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl); 1129 1148 return false; 1130 1149 } … … 1132 1151 return true; 1133 1152 } else { 1134 Log() << Verbose(1) << "Rootstack is NULL." << endl;1153 DoLog(1) && (Log() << Verbose(1) << "Rootstack is NULL." << endl); 1135 1154 return false; 1136 1155 } … … 1182 1201 int KeySetCounter = 0; 1183 1202 1184 Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl;1203 DoLog(1) && (Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl); 1185 1204 // fill ListOfLocalAtoms if NULL was given 1186 1205 if (!FillListOfLocalAtoms(ListOfLocalAtoms, FragmentCounter, reference->AtomCount, FreeList)) { 1187 Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl;1206 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 1188 1207 return false; 1189 1208 } … … 1213 1232 delete (TempSet); 1214 1233 if (KeySetCounter == 0) {// if there are no keysets, delete the list 1215 Log() << Verbose(1) << "KeySetCounter is zero, deleting FragmentList." << endl;1234 DoLog(1) && (Log() << Verbose(1) << "KeySetCounter is zero, deleting FragmentList." << endl); 1216 1235 delete (FragmentList[FragmentCounter]); 1217 1236 } else 1218 Log() << Verbose(1) << KeySetCounter << " keysets were assigned to subgraph " << FragmentCounter << "." << endl;1237 DoLog(1) && (Log() << Verbose(1) << KeySetCounter << " keysets were assigned to subgraph " << FragmentCounter << "." << endl); 1219 1238 FragmentCounter++; 1220 1239 if (next != NULL) … … 1222 1241 FragmentCounter--; 1223 1242 } else 1224 Log() << Verbose(1) << "KeySetList is NULL or empty." << endl;1243 DoLog(1) && (Log() << Verbose(1) << "KeySetList is NULL or empty." << endl); 1225 1244 1226 1245 if ((FreeList) && (ListOfLocalAtoms != NULL)) { … … 1230 1249 Free(&ListOfLocalAtoms); 1231 1250 } 1232 Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl;1251 DoLog(1) && (Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl); 1233 1252 return status; 1234 1253 }; … … 1243 1262 void MoleculeLeafClass::TranslateIndicesToGlobalIDs(Graph **FragmentList, int &FragmentCounter, int &TotalNumberOfKeySets, Graph &TotalGraph) 1244 1263 { 1245 Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl;1264 DoLog(1) && (Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl); 1246 1265 KeySet *TempSet = new KeySet; 1247 1266 if (FragmentList[FragmentCounter] != NULL) { … … 1254 1273 delete (TempSet); 1255 1274 } else { 1256 Log() << Verbose(1) << "FragmentList is NULL." << endl;1275 DoLog(1) && (Log() << Verbose(1) << "FragmentList is NULL." << endl); 1257 1276 } 1258 1277 if (next != NULL) 1259 1278 next->TranslateIndicesToGlobalIDs(FragmentList, ++FragmentCounter, TotalNumberOfKeySets, TotalGraph); 1260 1279 FragmentCounter--; 1261 Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl;1280 DoLog(1) && (Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl); 1262 1281 }; 1263 1282
Note:
See TracChangeset
for help on using the changeset viewer.
