Ignore:
Timestamp:
Jun 27, 2008, 9:14:58 PM (17 years ago)
Author:
Frederik Heber <heber@…>
Children:
74baec
Parents:
d7b1bf
git-author:
Frederik Heber <heber@…> (06/27/08 21:12:52)
git-committer:
Frederik Heber <heber@…> (06/27/08 21:14:58)
Message:

introduced shieldings to analyzer and joiner

both now handle pcp.sigma_all...csv files just as pcp.forces.all. Therefore the data format in pcp/perturbed.c was adapted a bit, as we need a header.
periodentafel.hpp got periodentafel and element class from molecules.hpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/joiner.cpp

    rd7b1bf r375dcf  
    1111#include "helpers.hpp"
    1212#include "parser.hpp"
     13#include "periodentafel.hpp"
    1314
    1415//============================== MAIN =============================
     
    1617int main(int argc, char **argv)
    1718{
     19  periodentafel *periode = NULL; // and a period table of all elements
    1820  EnergyMatrix Energy;
    1921  ForceMatrix Force;
    2022  EnergyMatrix EnergyFragments;
    2123  ForceMatrix ForceFragments;
     24  ForceMatrix Shielding;
     25  ForceMatrix ShieldingPAS;
     26  ForceMatrix ShieldingFragments;
     27  ForceMatrix ShieldingPASFragments;
    2228  KeySetsContainer KeySet; 
    2329  stringstream prefix;
     
    2834  // Get the command line options
    2935  if (argc < 3) {
    30     cout << "Usage: " << argv[0] << " <inputdir> <prefix>" << endl;
     36    cout << "Usage: " << argv[0] << " <inputdir> <prefix> [elementsdb]" << endl;
    3137    cout << "<inputdir>\ttherein the output of a molecuilder fragmentation is expected, each fragment with a subdir containing an energy.all and a forces.all file." << endl;
    3238    cout << "<prefix>\tprefix of energy and forces file." << endl;
     39    cout << "[elementsdb]\tpath to elements database, needed for shieldings." << endl;
    3340    return 1;
     41  }
     42  if (argc > 3) {
     43    periode = new periodentafel;
     44    periode->LoadPeriodentafel(argv[3]);
    3445  }
    3546 
     
    4253  // ------------- Parse through all Fragment subdirs --------
    4354  if (!Energy.ParseMatrix(argv[1], argv[2], EnergySuffix, 0,0)) return 1;
    44   //if (!ParseSubEnergies(argv[1], argv[2], EnergySuffix, data.EnergyHeader, data.Energies, data.EnergyIndices, data.LevelCounter, data.ColumnCounter, data.FragmentCounter)) return 1;
    4555  if (!Force.ParseMatrix(argv[1], argv[2], ForcesSuffix, 0,0)) return 1;
    46   //if (!ParseSubForces(argv[1], argv[2], ForcesSuffix, data.ForcesHeader, data.Forces, data.AtomCounter, data.Column2Counter, data.FragmentCounter)) return 1;
     56  if (periode != NULL) { // also look for PAS values
     57    if (!Shielding.ParseMatrix(argv[1], argv[2], ShieldingSuffix, 1, 0)) return 1;
     58    if (!ShieldingPAS.ParseMatrix(argv[1], argv[2], ShieldingPASSuffix, 1, 0)) return 1;
     59  }
    4760
    4861  // ---------- Parse the TE Factors into an array -----------------
     
    5164  // ---------- Parse the Force indices into an array ---------------
    5265  if (!Force.ParseIndices(argv[1])) return 1;
    53   //if (!ParseForceIndices(argv[1], data.ForcesIndices, data.AtomCounter, data.FragmentCounter)) return 1;
     66
     67  // ---------- Parse the shielding indices into an array ---------------
     68  if (periode != NULL) { // also look for PAS values
     69    if(!Shielding.ParseIndices(argv[1])) return 1;
     70    if(!ShieldingPAS.ParseIndices(argv[1])) return 1;
     71  }
    5472
    5573  // ---------- Parse the KeySets into an array ---------------
    5674  if (!KeySet.ParseKeySets(argv[1], Force.RowCounter, Force.MatrixCounter)) return 1;
    57   //if (!ParseKeySets(argv[1], data.KeySets, data.AtomCounter, data.FragmentCounter)) return 1;
    5875
    5976  if (!KeySet.ParseManyBodyTerms()) return 1;
    60   //if (!ParseManyBodyTerms(data.Order, data.OrderSet, data.FragmentsPerOrder, data.KeySets, data.AtomCounter, data.FragmentCounter)) return 1;
    6177  if (!EnergyFragments.AllocateMatrix(Energy.Header, Energy.MatrixCounter, Energy.RowCounter, Energy.ColumnCounter)) return 1;
    62   //if (!ParseSubEnergies(argv[1], argv[2], EnergyFragmentSuffix, data.EnergyHeader, data.EnergyFragments, data.EnergyFragmentIndices, data.LevelFragmentCounter, data.ColumnFragmentCounter, data.FragmentCounter)) return 1;
    6378  if (!ForceFragments.AllocateMatrix(Force.Header, Force.MatrixCounter, Force.RowCounter, Force.ColumnCounter)) return 1;
    64   //if (!ParseSubForces(argv[1], argv[2], ForceFragmentSuffix, data.ForcesHeader, data.ForceFragments, data.AtomCounter, data.Column2Counter, data.FragmentCounter)) return 1;
     79  if (periode != NULL) { // also look for PAS values
     80    if (!ShieldingFragments.AllocateMatrix(Shielding.Header, Shielding.MatrixCounter, Shielding.RowCounter, Shielding.ColumnCounter)) return 1;
     81    if (!ShieldingPASFragments.AllocateMatrix(ShieldingPAS.Header, ShieldingPAS.MatrixCounter, ShieldingPAS.RowCounter, ShieldingPAS.ColumnCounter)) return 1;
     82  }
    6583 
    6684  // ----------- Resetting last matrices (where full QM values are stored right now)
    6785  if(!Energy.SetLastMatrix(0., 0)) return 1;
    6886  if(!Force.SetLastMatrix(0., 2)) return 1;
    69  
     87  if (periode != NULL) { // also look for PAS values
     88    if(!Shielding.SetLastMatrix(0., 0)) return 1;
     89    if(!ShieldingPAS.SetLastMatrix(0., 2)) return 1;
     90  }
     91
    7092  // +++++++++++++++++ SUMMING +++++++++++++++++++++++++++++++
    7193
     
    80102    if (!ForceFragments.SumSubManyBodyTerms(Force, KeySet, BondOrder)) return 1;
    81103    if (!Force.SumSubForces(ForceFragments, KeySet, BondOrder)) return 1;
     104    if (periode != NULL) { // also look for PAS values
     105      cout << "Summing shieldings of order " << BondOrder+1 << " ..." << endl;
     106      if (!ShieldingFragments.SumSubManyBodyTerms(Shielding, KeySet, BondOrder)) return 1;
     107      if (!Shielding.SumSubForces(ShieldingFragments, KeySet, BondOrder)) return 1;
     108      if (!ShieldingPASFragments.SumSubManyBodyTerms(ShieldingPAS, KeySet, BondOrder)) return 1;
     109      if (!ShieldingPAS.SumSubForces(ShieldingPASFragments, KeySet, BondOrder)) return 1;
     110    }
    82111
    83112    // --------- write the energy and forces file --------------------
     
    89118    // forces
    90119    if (!Force.WriteLastMatrix(argv[1], (prefix.str()).c_str(), ForcesSuffix)) return 1;
     120    // shieldings
     121    if (periode != NULL) { // also look for PAS values
     122      if (!Shielding.WriteLastMatrix(argv[1], (prefix.str()).c_str(), ShieldingSuffix)) return 1;
     123      if (!ShieldingPAS.WriteLastMatrix(argv[1], (prefix.str()).c_str(), ShieldingPASSuffix)) return 1;
     124    }
    91125  }
    92126  // fragments
     
    98132  if (!ForceFragments.WriteTotalFragments(argv[1], (prefix.str()).c_str())) return 1;
    99133  if (!CreateDataFragment(EnergyFragments, KeySet, argv[1], FRAGMENTPREFIX ENERGYPERFRAGMENT, "fragment energy versus the Fragment No", "today", CreateEnergy)) return 1;
     134  if (periode != NULL) { // also look for PAS values
     135    prefix.str(" ");
     136    prefix << argv[2] << ShieldingFragmentSuffix;
     137    if (!ShieldingFragments.WriteTotalFragments(argv[1], (prefix.str()).c_str())) return 1;
     138    prefix.str(" ");
     139    prefix << argv[2] << ShieldingPASFragmentSuffix;
     140    if (!ShieldingPASFragments.WriteTotalFragments(argv[1], (prefix.str()).c_str())) return 1;
     141  }
    100142
    101143  // write last matrices as fragments into central dir (not subdir as above), for analyzer to know index bounds
    102144  if (!Energy.WriteLastMatrix(argv[1], argv[2], EnergyFragmentSuffix)) return 1;
    103145  if (!Force.WriteLastMatrix(argv[1], argv[2], ForceFragmentSuffix)) return 1;
     146  if (periode != NULL) { // also look for PAS values
     147    if (!Shielding.WriteLastMatrix(argv[1], argv[2], ShieldingFragmentSuffix)) return 1;
     148    if (!ShieldingPAS.WriteLastMatrix(argv[1], argv[2], ShieldingPASFragmentSuffix)) return 1;
     149  }
    104150
    105151  // exit 
     152  delete(periode);
    106153  cout << "done." << endl;
    107154  return 0;
Note: See TracChangeset for help on using the changeset viewer.