Ignore:
Timestamp:
Oct 18, 2008, 2:06:51 PM (17 years ago)
Author:
Frederik Heber <heber@…>
Children:
b4c71a
Parents:
59f86c
Message:

Introduced new class HessianMatrix derived from MatrixContainer, which shall contain the hessians calculated by mpqc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/joiner.cpp

    r59f86c rd87482  
    1919  periodentafel *periode = NULL; // and a period table of all elements
    2020  EnergyMatrix Energy;
     21  EnergyMatrix EnergyFragments;
     22 
    2123  EnergyMatrix Hcorrection;
     24  EnergyMatrix HcorrectionFragments;
     25 
    2226  ForceMatrix Force;
    23   EnergyMatrix EnergyFragments;
    24   EnergyMatrix HcorrectionFragments;
    2527  ForceMatrix ForceFragments;
     28
     29  HessianMatrix Hessian;
     30  HessianMatrix HessianFragments;
     31 
    2632  ForceMatrix Shielding;
    2733  ForceMatrix ShieldingPAS;
     
    3238  char *dir = NULL;
    3339  bool Hcorrected = true;
     40  bool NoHessian = false;
    3441
    3542  cout << "Joiner" << endl;
     
    6370  Hcorrected = Hcorrection.ParseFragmentMatrix(argv[1], "", HCORRECTIONSUFFIX, 0,0);
    6471  if (!Force.ParseFragmentMatrix(argv[1], dir, ForcesSuffix, 0,0)) return 1;
     72  if (!Hessian.ParseFragmentMatrix(argv[1], dir, HessianSuffix, 0,0)) {
     73    NoHessian = true;
     74    cout << "No hessian matrices found, skipping those.";
     75  }
    6576  if (periode != NULL) { // also look for PAS values
    6677    if (!Shielding.ParseFragmentMatrix(argv[1], dir, ShieldingSuffix, 1, 0)) return 1;
     
    7485  // ---------- Parse the Force indices into an array ---------------
    7586  if (!Force.ParseIndices(argv[1])) return 1;
     87
     88  // ---------- Parse the Hessian (=force) indices into an array ---------------
     89  if (!Hessian.ParseIndices(argv[1])) return 1;
    7690
    7791  // ---------- Parse the shielding indices into an array ---------------
     
    88102  if (Hcorrected)  HcorrectionFragments.AllocateMatrix(Hcorrection.Header, Hcorrection.MatrixCounter, Hcorrection.RowCounter, Hcorrection.ColumnCounter);
    89103  if (!ForceFragments.AllocateMatrix(Force.Header, Force.MatrixCounter, Force.RowCounter, Force.ColumnCounter)) return 1;
     104  if (!NoHessian)
     105    if (!HessianFragments.AllocateMatrix(Hessian.Header, Hessian.MatrixCounter, Hessian.RowCounter, Hessian.ColumnCounter)) return 1;
    90106  if (periode != NULL) { // also look for PAS values
    91107    if (!ShieldingFragments.AllocateMatrix(Shielding.Header, Shielding.MatrixCounter, Shielding.RowCounter, Shielding.ColumnCounter)) return 1;
     
    96112  if(!Energy.SetLastMatrix(0., 0)) return 1;
    97113  if(!Force.SetLastMatrix(0., 2)) return 1;
     114  if (!NoHessian)
     115    if (!Hessian.SetLastMatrix(0., 0)) return 1;
    98116  if (periode != NULL) { // also look for PAS values
    99117    if(!Shielding.SetLastMatrix(0., 2)) return 1;
     
    118136    if (!ForceFragments.SumSubManyBodyTerms(Force, KeySet, BondOrder)) return 1;
    119137    if (!Force.SumSubForces(ForceFragments, KeySet, BondOrder, 1.)) return 1;
     138    // --------- sum up Hessian --------------------
     139    if (!NoHessian) {
     140      cout << "Summing Hessian of order " << BondOrder+1 << " ..." << endl;
     141      if (!HessianFragments.SumSubManyBodyTerms(Hessian, KeySet, BondOrder)) return 1;
     142      if (!Hessian.SumSubHessians(HessianFragments, KeySet, BondOrder, 1.)) return 1;
     143    }
    120144    if (periode != NULL) { // also look for PAS values
    121145      cout << "Summing shieldings of order " << BondOrder+1 << " ..." << endl;
     
    134158    // forces
    135159    if (!Force.WriteLastMatrix(argv[1], (prefix.str()).c_str(), ForcesSuffix)) return 1;
     160    // hessian
     161    if (!Hessian.WriteLastMatrix(argv[1], (prefix.str()).c_str(), HessianSuffix)) return 1;
    136162    // shieldings
    137163    if (periode != NULL) { // also look for PAS values
     
    153179  if (!ForceFragments.WriteTotalFragments(argv[1], (prefix.str()).c_str())) return 1;
    154180  if (!CreateDataFragment(EnergyFragments, KeySet, argv[1], FRAGMENTPREFIX ENERGYPERFRAGMENT, "fragment energy versus the Fragment No", "today", CreateEnergy)) return 1;
     181  if (!NoHessian) {
     182    prefix.str(" ");
     183    prefix << dir << HessianFragmentSuffix;
     184    if (!HessianFragments.WriteTotalFragments(argv[1], (prefix.str()).c_str())) return 1;
     185  }
    155186  if (periode != NULL) { // also look for PAS values
    156187    prefix.str(" ");
     
    166197  if (Hcorrected) Hcorrection.WriteLastMatrix(argv[1], dir, HcorrectionFragmentSuffix);
    167198  if (!Force.WriteLastMatrix(argv[1], dir, ForceFragmentSuffix)) return 1;
     199  if (!NoHessian)
     200    if (!Hessian.WriteLastMatrix(argv[1], dir, HessianFragmentSuffix)) return 1;
    168201  if (periode != NULL) { // also look for PAS values
    169202    if (!Shielding.WriteLastMatrix(argv[1], dir, ShieldingFragmentSuffix)) return 1;
Note: See TracChangeset for help on using the changeset viewer.