Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/moleculelist.cpp

    r244a84 ra67d19  
    1919#include "memoryallocator.hpp"
    2020#include "periodentafel.hpp"
     21#include "World.hpp"
    2122
    2223/*********************************** Functions for class MoleculeListClass *************************/
     
    3536MoleculeListClass::~MoleculeListClass()
    3637{
    37   Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl;
     38  DoLog(3) && (Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl);
    3839  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);
    4041    delete (*ListRunner);
    4142  }
    42   Log() << Verbose(4) << "Freeing ListOfMolecules." << endl;
     43  DoLog(4) && (Log() << Verbose(4) << "Freeing ListOfMolecules." << endl);
    4344  ListOfMolecules.clear(); // empty list
    4445};
     
    144145
    145146  // 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);
    148149  if (ListOfMolecules.size() == 0)
    149     Log() << Verbose(0) << "\tNone" << endl;
     150    DoLog(0) && (Log() << Verbose(0) << "\tNone" << endl);
    150151  else {
    151152    Origin.Zero();
     
    164165      }
    165166      // 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");
    167168      Elemental = (*ListRunner)->elemente->end;
    168169      while(Elemental->previous != (*ListRunner)->elemente->start) {
    169170        Elemental = Elemental->previous;
    170171        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]);
    172173      }
    173174      // 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);
    175176    }
    176177  }
     
    313314  Tesselation *TesselStruct = NULL;
    314315  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);
    316317    return false;
    317318  }
     
    321322  FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL);
    322323  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);
    324325    return false;
    325326  }
     
    338339  while (Walker->next != srcmol->end) {
    339340    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);
    341342    if (!TesselStruct->IsInnerPoint(Walker->x, LCList)) {
    342343      CopyAtoms[Walker->nr] = new atom(Walker);
     
    347348    }
    348349  }
    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.");
    350351
    351352  // go through all bonds and add as well
     
    353354  while(Binder->next != srcmol->last) {
    354355    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);
    356357    mol->AddBond(CopyAtoms[Binder->leftatom->nr], CopyAtoms[Binder->rightatom->nr], Binder->BondDegree);
    357358  }
     
    365366void MoleculeListClass::Output(ofstream *out)
    366367{
    367   Log() << Verbose(1) << "MoleculeList: ";
     368  DoLog(1) && (Log() << Verbose(1) << "MoleculeList: ");
    368369  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);
    371372};
    372373
     
    394395  char *FragmentNumber = NULL;
    395396
    396   Log() << Verbose(1) << "Saving hydrogen saturation correction ... ";
     397  DoLog(1) && (Log() << Verbose(1) << "Saving hydrogen saturation correction ... ");
    397398  // 0. parse in fit constant files that should have the same dimension as the final energy files
    398399  // 0a. find dimension of matrices with constants
     
    404405  input.open(line.c_str());
    405406  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);
    407408    return false;
    408409  }
     
    421422    b++;
    422423  }
    423   Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, ";
     424  DoLog(0) && (Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, ");
    424425  input.close();
    425426
     
    442443    input.open(line.c_str());
    443444    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);
    445446      performCriticalExit();
    446447      return false;
     
    464465  }
    465466  for (int k = 0; k < 3; k++) {
    466     Log() << Verbose(0) << "Constants " << k << ":" << endl;
     467    DoLog(0) && (Log() << Verbose(0) << "Constants " << k << ":" << endl);
    467468    for (int j = 0; j < b; j++) {
    468469      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");
    470471      }
    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);
    474475  }
    475476
     
    559560  }
    560561  Free(&FitConstant);
    561   Log() << Verbose(0) << "done." << endl;
     562  DoLog(0) && (Log() << Verbose(0) << "done." << endl);
    562563  return true;
    563564};
     
    579580
    580581  // open file for the force factors
    581   Log() << Verbose(1) << "Saving  force factors ... ";
     582  DoLog(1) && (Log() << Verbose(1) << "Saving  force factors ... ");
    582583  line << path << "/" << FRAGMENTPREFIX << FORCESFILE;
    583584  ForcesFile.open(line.str().c_str(), ios::out);
     
    607608    }
    608609    ForcesFile.close();
    609     Log() << Verbose(1) << "done." << endl;
     610    DoLog(1) && (Log() << Verbose(1) << "done." << endl);
    610611  } else {
    611612    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);
    613614  }
    614615  ForcesFile.close();
     
    638639  int FragmentCounter = 0;
    639640  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];
    641647  // store the fragments as config and as xyz
    642648  for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) {
     
    646652      strcpy(PathBackup, path);
    647653    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);
    649655      performCriticalExit();
    650656    }
     
    657663    sprintf(FragmentName, "%s/%s%s.conf.xyz", configuration->configpath, FRAGMENTPREFIX, FragmentNumber);
    658664    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 ...");
    660666    if ((intermediateResult = (*ListRunner)->OutputXYZ(&outputFragment)))
    661       Log() << Verbose(0) << " done." << endl;
     667      DoLog(0) && (Log() << Verbose(0) << " done." << endl);
    662668    else
    663       Log() << Verbose(0) << " failed." << endl;
     669      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
    664670    result = result && intermediateResult;
    665671    outputFragment.close();
     
    667673
    668674    // list atoms in fragment for debugging
    669     Log() << Verbose(2) << "Contained atoms: ";
     675    DoLog(2) && (Log() << Verbose(2) << "Contained atoms: ");
    670676    Walker = (*ListRunner)->start;
    671677    while (Walker->next != (*ListRunner)->end) {
    672678      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);
    676682
    677683    // center on edge
     
    682688      j += k + 1;
    683689      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.;
    685691    }
    686692    (*ListRunner)->Translate(&BoxDimension);
     
    697703    // and save as config
    698704    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 ...");
    700706    if ((intermediateResult = configuration->Save(FragmentName, (*ListRunner)->elemente, (*ListRunner))))
    701       Log() << Verbose(0) << " done." << endl;
     707      DoLog(0) && (Log() << Verbose(0) << " done." << endl);
    702708    else
    703       Log() << Verbose(0) << " failed." << endl;
     709      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
    704710    result = result && intermediateResult;
    705711
     
    709715    // and save as mpqc input file
    710716    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 ...");
    712718    if ((intermediateResult = configuration->SaveMPQC(FragmentName, (*ListRunner))))
    713       Log() << Verbose(2) << " done." << endl;
     719      DoLog(2) && (Log() << Verbose(2) << " done." << endl);
    714720    else
    715       Log() << Verbose(0) << " failed." << endl;
     721      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
    716722
    717723    result = result && intermediateResult;
     
    720726    Free(&FragmentNumber);
    721727  }
    722   Log() << Verbose(0) << " done." << endl;
     728  DoLog(0) && (Log() << Verbose(0) << " done." << endl);
    723729
    724730  // 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];
    726736
    727737  return result;
     
    758768      Walker = Advancer;
    759769      Advancer = Advancer->next;
    760       Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;
     770      DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl);
    761771      unlink(Walker);
    762772      Walker->father = Walker;
     
    776786
    777787  // 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  }
    779793
    780794  // 2. scan for connected subgraphs
     
    783797  Subgraphs = mol->DepthFirstSearchAnalysis(BackEdgeStack);
    784798  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  }
    785804
    786805  // 3. dissect (the following construct is needed to have the atoms not in the order of the DFS, but in
     
    800819      strncat(molecules[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1);
    801820    }
    802     cout << "MolName is " << molecules[i]->name << endl;
     821    DoLog(1) && (Log() << Verbose(1) << "MolName is " << molecules[i]->name << endl);
    803822    insert(molecules[i]);
    804823  }
     
    824843    Walker = mol->start->next;
    825844    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);
    827846      performCriticalExit();
    828847    }
    829848    FragmentCounter = MolMap[Walker->nr];
    830849    if (FragmentCounter != 0) {
    831       Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;
     850      DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl);
    832851      unlink(Walker);
    833852      molecules[FragmentCounter-1]->AddAtom(Walker);    // counting starts at 1
    834853    } 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);
    836855      performCriticalExit();
    837856    }
     
    854873  Free(&MolMap);
    855874  Free(&molecules);
    856   Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl;
     875  DoLog(1) && (Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl);
    857876};
    858877
     
    963982  int AtomNo;
    964983
    965   Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl;
     984  DoLog(1) && (Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl);
    966985  // fill ListOfLocalAtoms if NULL was given
    967986  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);
    969988    return false;
    970989  }
    971990
    972991  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);
    974993    // remove every bond from the list
    975994    bond *Binder = NULL;
     
    9921011            Leaf->AddBond(Walker, OtherWalker, (*Runner)->BondDegree);
    9931012        } 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);
    9951014          status = false;
    9961015        }
     
    10051024      Free(&ListOfLocalAtoms);
    10061025  }
    1007   Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl;
     1026  DoLog(1) && (Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl);
    10081027  return status;
    10091028};
     
    10381057        next->FillRootStackForSubgraphs(RootStack, AtomMask, ++FragmentCounter);
    10391058    } else {
    1040       Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl;
     1059      DoLog(1) && (Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl);
    10411060      return false;
    10421061    }
     
    10441063    return true;
    10451064  } else {
    1046     Log() << Verbose(1) << "Rootstack is NULL." << endl;
     1065    DoLog(1) && (Log() << Verbose(1) << "Rootstack is NULL." << endl);
    10471066    return false;
    10481067  }
     
    10941113  int KeySetCounter = 0;
    10951114
    1096   Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl;
     1115  DoLog(1) && (Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl);
    10971116  // fill ListOfLocalAtoms if NULL was given
    10981117  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);
    11001119    return false;
    11011120  }
     
    11251144    delete (TempSet);
    11261145    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);
    11281147      delete (FragmentList[FragmentCounter]);
    11291148    } 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);
    11311150    FragmentCounter++;
    11321151    if (next != NULL)
     
    11341153    FragmentCounter--;
    11351154  } else
    1136     Log() << Verbose(1) << "KeySetList is NULL or empty." << endl;
     1155    DoLog(1) && (Log() << Verbose(1) << "KeySetList is NULL or empty." << endl);
    11371156
    11381157  if ((FreeList) && (ListOfLocalAtoms != NULL)) {
     
    11421161      Free(&ListOfLocalAtoms);
    11431162  }
    1144   Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl;
     1163  DoLog(1) && (Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl);
    11451164  return status;
    11461165};
     
    11551174void MoleculeLeafClass::TranslateIndicesToGlobalIDs(Graph **FragmentList, int &FragmentCounter, int &TotalNumberOfKeySets, Graph &TotalGraph)
    11561175{
    1157   Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl;
     1176  DoLog(1) && (Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl);
    11581177  KeySet *TempSet = new KeySet;
    11591178  if (FragmentList[FragmentCounter] != NULL) {
     
    11661185    delete (TempSet);
    11671186  } else {
    1168     Log() << Verbose(1) << "FragmentList is NULL." << endl;
     1187    DoLog(1) && (Log() << Verbose(1) << "FragmentList is NULL." << endl);
    11691188  }
    11701189  if (next != NULL)
    11711190    next->TranslateIndicesToGlobalIDs(FragmentList, ++FragmentCounter, TotalNumberOfKeySets, TotalGraph);
    11721191  FragmentCounter--;
    1173   Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl;
     1192  DoLog(1) && (Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl);
    11741193};
    11751194
Note: See TracChangeset for help on using the changeset viewer.