Ignore:
Timestamp:
Apr 13, 2010, 1:22:42 PM (16 years ago)
Author:
Tillmann Crueger <crueger@…>
Children:
e7ea64
Parents:
0f55b2
Message:

Prepared interface of Vector Class for transition to VectorComposites

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/molecule_dynamics.cpp

    r0f55b2 r1f591b  
    3939    // determine normalized trajectories direction vector (n1, n2)
    4040    Sprinter = Params.PermutationMap[Walker->nr];   // find first target point
    41     trajectory1.CopyVector(&Sprinter->Trajectory.R.at(Params.endstep));
    42     trajectory1.SubtractVector(&Walker->Trajectory.R.at(Params.startstep));
     41    trajectory1 = Sprinter->Trajectory.R.at(Params.endstep) - Walker->Trajectory.R.at(Params.startstep);
    4342    trajectory1.Normalize();
    4443    Norm1 = trajectory1.Norm();
    4544    Sprinter = Params.PermutationMap[Runner->nr];   // find second target point
    46     trajectory2.CopyVector(&Sprinter->Trajectory.R.at(Params.endstep));
    47     trajectory2.SubtractVector(&Runner->Trajectory.R.at(Params.startstep));
     45    trajectory2 = Sprinter->Trajectory.R.at(Params.endstep) - Runner->Trajectory.R.at(Params.startstep);
    4846    trajectory2.Normalize();
    4947    Norm2 = trajectory1.Norm();
    5048    // check whether either is zero()
    5149    if ((Norm1 < MYEPSILON) && (Norm2 < MYEPSILON)) {
    52       tmp = Walker->Trajectory.R.at(Params.startstep).Distance(&Runner->Trajectory.R.at(Params.startstep));
     50      tmp = Walker->Trajectory.R.at(Params.startstep).Distance(Runner->Trajectory.R.at(Params.startstep));
    5351    } else if (Norm1 < MYEPSILON) {
    5452      Sprinter = Params.PermutationMap[Walker->nr];   // find first target point
    55       trajectory1.CopyVector(&Sprinter->Trajectory.R.at(Params.endstep));  // copy first offset
    56       trajectory1.SubtractVector(&Runner->Trajectory.R.at(Params.startstep));  // subtract second offset
    57       trajectory2.Scale( trajectory1.ScalarProduct(&trajectory2) ); // trajectory2 is scaled to unity, hence we don't need to divide by anything
    58       trajectory1.SubtractVector(&trajectory2);   // project the part in norm direction away
     53      trajectory1 = Sprinter->Trajectory.R.at(Params.endstep) - Runner->Trajectory.R.at(Params.startstep);
     54      trajectory2 *= trajectory1.ScalarProduct(trajectory2); // trajectory2 is scaled to unity, hence we don't need to divide by anything
     55      trajectory1 -= trajectory2;   // project the part in norm direction away
    5956      tmp = trajectory1.Norm();  // remaining norm is distance
    6057    } else if (Norm2 < MYEPSILON) {
    6158      Sprinter = Params.PermutationMap[Runner->nr];   // find second target point
    62       trajectory2.CopyVector(&Sprinter->Trajectory.R.at(Params.endstep));  // copy second offset
    63       trajectory2.SubtractVector(&Walker->Trajectory.R.at(Params.startstep));  // subtract first offset
    64       trajectory1.Scale( trajectory2.ScalarProduct(&trajectory1) ); // trajectory1 is scaled to unity, hence we don't need to divide by anything
    65       trajectory2.SubtractVector(&trajectory1);   // project the part in norm direction away
     59      trajectory2 = Sprinter->Trajectory.R.at(Params.endstep) - Walker->Trajectory.R.at(Params.startstep);  // copy second offset
     60      trajectory1 *= trajectory2.ScalarProduct(trajectory1); // trajectory1 is scaled to unity, hence we don't need to divide by anything
     61      trajectory2 -= trajectory1;   // project the part in norm direction away
    6662      tmp = trajectory2.Norm();  // remaining norm is distance
    67     } else if ((fabs(trajectory1.ScalarProduct(&trajectory2)/Norm1/Norm2) - 1.) < MYEPSILON) { // check whether they're linear dependent
     63    } else if ((fabs(trajectory1.ScalarProduct(trajectory2)/Norm1/Norm2) - 1.) < MYEPSILON) { // check whether they're linear dependent
    6864  //        Log() << Verbose(3) << "Both trajectories of " << *Walker << " and " << *Runner << " are linear dependent: ";
    6965  //        Log() << Verbose(0) << trajectory1;
    7066  //        Log() << Verbose(0) << " and ";
    7167  //        Log() << Verbose(0) << trajectory2;
    72       tmp = Walker->Trajectory.R.at(Params.startstep).Distance(&Runner->Trajectory.R.at(Params.startstep));
     68      tmp = Walker->Trajectory.R.at(Params.startstep).Distance(Runner->Trajectory.R.at(Params.startstep));
    7369  //        Log() << Verbose(0) << " with distance " << tmp << "." << endl;
    7470    } else { // determine distance by finding minimum distance
     
    9793  //        Log() << Verbose(0) << " with distance " << tmp << "." << endl;
    9894      // test whether we really have the intersection (by checking on c_1 and c_2)
    99       TestVector.CopyVector(&Runner->Trajectory.R.at(Params.startstep));
     95      trajectory1.Scale(gsl_vector_get(x,0));
    10096      trajectory2.Scale(gsl_vector_get(x,1));
    101       TestVector.AddVector(&trajectory2);
    10297      normal.Scale(gsl_vector_get(x,2));
    103       TestVector.AddVector(&normal);
    104       TestVector.SubtractVector(&Walker->Trajectory.R.at(Params.startstep));
    105       trajectory1.Scale(gsl_vector_get(x,0));
    106       TestVector.SubtractVector(&trajectory1);
     98      TestVector = Runner->Trajectory.R.at(Params.startstep) + trajectory2 + normal
     99                   - (Walker->Trajectory.R.at(Params.startstep) + trajectory1);
    107100      if (TestVector.Norm() < MYEPSILON) {
    108101  //          Log() << Verbose(2) << "Test: ok.\tDistance of " << tmp << " is correct." << endl;
     
    173166    // first term: distance to target
    174167    Runner = Params.PermutationMap[Walker->nr];   // find target point
    175     tmp = (Walker->Trajectory.R.at(Params.startstep).Distance(&Runner->Trajectory.R.at(Params.endstep)));
     168    tmp = (Walker->Trajectory.R.at(Params.startstep).Distance(Runner->Trajectory.R.at(Params.endstep)));
    176169    tmp *= Params.IsAngstroem ? 1. : 1./AtomicLengthToAngstroem;
    177170    result += Params.PenaltyConstants[0] * tmp;
     
    232225    while(Runner->next != mol->end) {
    233226      Runner = Runner->next;
    234       Params.DistanceList[Walker->nr]->insert( DistancePair(Walker->Trajectory.R.at(Params.startstep).Distance(&Runner->Trajectory.R.at(Params.endstep)), Runner) );
     227      Params.DistanceList[Walker->nr]->insert( DistancePair(Walker->Trajectory.R.at(Params.startstep).Distance(Runner->Trajectory.R.at(Params.endstep)), Runner) );
    235228    }
    236229  }
Note: See TracChangeset for help on using the changeset viewer.