Changeset 65c42c for src


Ignore:
Timestamp:
Dec 19, 2012, 3:25:31 PM (12 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
dac89b1
Parents:
c62f96
git-author:
Frederik Heber <heber@…> (12/11/12 16:03:40)
git-committer:
Frederik Heber <heber@…> (12/19/12 15:25:31)
Message:

PairPotential_Harmonic now has additional offset parameter.

  • do we need this value in general or not?. A constant should in fact be removed by zero and first order ... but it has to to remove the minimum value. Otherwise the fit cannot converge properly (hence the parameter probably inavoidable for stability).
  • With this setup we were able to successfully fit to a C2H6 system where the CC bond length was specifically manipulated. However, the harmonic function is not the best model, a Morse potential seems more adept.
Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/LevMartester.cpp

    rc62f96 r65c42c  
    176176  // NOTICE that distance are in bohrradi as they come from MPQC!
    177177
    178   PairPotential_Harmonic harmonic(1., 1.);
     178  PairPotential_Harmonic harmonic(1., 2., 0.);
    179179  FunctionApproximation approximator(1, 1, harmonic);
    180180  approximator();
    181181  const FunctionModel::parameters_t params = harmonic.getParameters();
    182182
    183   LOG(0, "RESULT: Best parameters are " << params[0] << " and " << params[1] << ".");
     183  LOG(0, "RESULT: Best parameters are " << params[0] << ","
     184      << params[1] << " and " << params[2] << ".");
    184185
    185186  return 0;
  • src/Potentials/Specifics/PairPotential_Harmonic.cpp

    rc62f96 r65c42c  
    5151      "PairPotential_Harmonic::operator() - requires exactly one argument.");
    5252  const argument_t &r_ij = arguments[0];
    53   const result_t result = spring_constant * Helpers::pow( r_ij.distance - equilibrium_distance, 2 );
     53  const result_t result = spring_constant * Helpers::pow( r_ij.distance - equilibrium_distance, 2 ) - energy_offset;
    5454  return std::vector<result_t>(1, result);
    5555}
     
    7272void PairPotential_Harmonic::setParameters(const parameters_t &_params)
    7373{
    74   ASSERT( _params.size() == 2,
     74  ASSERT( _params.size() == 3,
    7575      "PairPotential_Harmonic::setParameters() - we need exactly two parameters.");
    7676  spring_constant = _params[0];
    7777  equilibrium_distance = _params[1];
     78  energy_offset = _params[2];
    7879}
    7980
    8081PairPotential_Harmonic::parameters_t PairPotential_Harmonic::getParameters() const
    8182{
    82   parameters_t params(2, 0.);
     83  parameters_t params(3, 0.);
    8384  params[0] = spring_constant;
    8485  params[1] = equilibrium_distance;
     86  params[2] = energy_offset;
    8587  return params;
    8688}
  • src/Potentials/Specifics/PairPotential_Harmonic.hpp

    rc62f96 r65c42c  
    3030  PairPotential_Harmonic(
    3131      const double _spring_constant,
    32       const double _equilibrium_distance) :
     32      const double _equilibrium_distance,
     33      const double _energy_offset) :
    3334    spring_constant(_spring_constant),
    34     equilibrium_distance(_equilibrium_distance)
     35    equilibrium_distance(_equilibrium_distance),
     36    energy_offset(_energy_offset)
    3537  {}
    3638  virtual ~PairPotential_Harmonic() {}
     
    5456  size_t getParameterDimension() const
    5557  {
    56     return 2;
     58    return 3;
    5759  }
    5860
     
    7678  //!> the equilibrium distance indicating the potential minimum
    7779  double equilibrium_distance;
     80  //!> energy offset
     81  double energy_offset;
    7882};
    7983
Note: See TracChangeset for help on using the changeset viewer.