Changeset e36ba2 for src


Ignore:
Timestamp:
Feb 27, 2013, 12:39:03 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:
05f437
Parents:
0dad5f
git-author:
Frederik Heber <heber@…> (12/07/12 15:13:34)
git-committer:
Frederik Heber <heber@…> (02/27/13 12:39:03)
Message:

FunctionModel extended by triplefunction setter, does nothing by default.

  • SaturationPotential's setTriplefunction() removed.
  • Tersoff's setTriplefunction now truely sets the function.
  • LevMartester always sets a triple function whether the potential uses it or not.
Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/FunctionApproximation/FunctionModel.hpp

    r0dad5f re36ba2  
    4747  //!> typedef for a vector of particle tyoes
    4848  typedef std::vector< double > charges_t;
     49  //!> typedef for the magic triple function that gets the other two distances for a given argument
     50  typedef boost::function< std::vector<arguments_t>(const argument_t &, const double)> triplefunction_t;
    4951
    5052public:
     
    7577   */
    7678  virtual size_t getParameterDimension() const=0;
     79
     80  /** Sets the magic triple function that we use for getting angle distances.
     81   *
     82   * @param _triplefunction function that returns a list of triples (i.e. the
     83   *        two remaining distances) to a given pair of points (contained as
     84   *        indices within the argument)
     85   */
     86  virtual void setTriplefunction(triplefunction_t &_triplefunction)
     87  {}
    7788
    7889  /** Evaluates the function with the given \a arguments and the current set of
  • src/LevMartester.cpp

    r0dad5f re36ba2  
    287287
    288288      // now perform the function approximation by optimizing the model function
    289       FunctionModel::parameters_t params(PairPotential_Morse::MAXPARAMS, 0.);
    290       params[PairPotential_Morse::dissociation_energy] = 1e+0*rand()/(double)RAND_MAX;// 0.5;
    291       params[PairPotential_Morse::energy_offset] =
    292           MorseData.getTrainingOutputAverage()[0];// -1.;
    293       params[PairPotential_Morse::spring_constant] = 1e+0*rand()/(double)RAND_MAX;// 1.;
    294       params[PairPotential_Morse::equilibrium_distance] =  3e+0*rand()/(double)RAND_MAX;//2.9;
    295289      PairPotential_Morse::ParticleTypes_t types =
    296290            boost::assign::list_of<PairPotential_Morse::ParticleType_t>
     
    298292          ;
    299293      PairPotential_Morse morse(types);
    300       LOG(0, "INFO: Initial parameters are " << params << ".");
    301       morse.setParameters(params);
    302294      FunctionModel &model = morse;
    303       FunctionApproximation approximator(MorseData, model); // we only give CC distance, hence 1 input dim
     295      FunctionApproximation approximator(MorseData, model);
     296      FunctionModel::triplefunction_t triplefunction =
     297          boost::bind(&getTripleFromArgument, boost::cref(MorseData.getTrainingInputs()), _1, _2);
    304298      if (model.isBoxConstraint() && approximator.checkParameterDerivatives()) {
    305299        // we set parameters here because we want to test with default ones
    306         morse.setParameters(params);
     300        srand((unsigned)time(0)); // seed with current time
     301        model.setParametersToRandomInitialValues(MorseData);
     302        model.setTriplefunction(triplefunction);
     303        LOG(0, "INFO: Initial parameters are " << model.getParameters() << ".");
    307304        approximator(FunctionApproximation::ParameterDerivative);
    308305      } else {
     
    344341      boost::function< std::vector<FunctionModel::arguments_t>(const argument_t &, const double)> triplefunction =
    345342          boost::bind(&getTripleFromArgument, boost::cref(TersoffData.getTrainingInputs()), _1, _2);
    346       srand((unsigned)time(0)); // seed with current time
    347       params[SaturationPotential::all_energy_offset] =
    348           TersoffData.getTrainingOutputAverage()[0]; //1e+1*rand()/(double)RAND_MAX;//3.487900e+00;
    349       params[SaturationPotential::morse_spring_constant] =
    350         //  morseparams[PairPotential_Morse::spring_constant]; //
    351         1e+1*rand()/(double)RAND_MAX;//1.393600e+03;
    352       params[SaturationPotential::morse_equilibrium_distance] =
    353        //   morseparams[PairPotential_Morse::equilibrium_distance]; //
    354         3e+0*rand()/(double)RAND_MAX;//3.467000e+02;
    355       params[SaturationPotential::morse_dissociation_energy] =
    356        //   morseparams[PairPotential_Morse::dissociation_energy]; //
    357         1e+0*rand()/(double)RAND_MAX;//3.487900e+00;
    358       params[SaturationPotential::angle_spring_constant] =
    359        //   angleparams[PairPotential_Angle::spring_constant]; //
    360         1e+1*rand()/(double)RAND_MAX;//3.487900e+00;
    361       params[SaturationPotential::angle_equilibrium_distance] =
    362        //   angleparams[PairPotential_Angle::equilibrium_distance]; //
    363         2e+0*rand()/(double)RAND_MAX - 1.;//3.487900e+00;
    364       LOG(0, "INFO: Initial parameters are " << params << ".");
    365343      SaturationPotential::ParticleTypes_t types =
    366344            boost::assign::list_of<SaturationPotential::ParticleType_t>
     
    369347
    370348      SaturationPotential saturation(types);
    371       // saturation has internal triplefunction now
    372 //      saturation.setTriplefunction(2.5, triplefunction);
    373349      FunctionModel &model = saturation;
    374350      FunctionApproximation approximator(TersoffData, model); // CH4 has 5 atoms, hence 5*4/2 distances
    375351      if (model.isBoxConstraint() && approximator.checkParameterDerivatives()) {
    376352        // we set parameters here because we want to test with default ones
    377         saturation.setParameters(params);
     353        srand((unsigned)time(0)); // seed with current time
     354        model.setParametersToRandomInitialValues(TersoffData);
     355        model.setTriplefunction(triplefunction);
    378356        approximator(FunctionApproximation::ParameterDerivative);
    379357      } else {
  • src/Potentials/Specifics/ManyBodyPotential_Tersoff.hpp

    r0dad5f re36ba2  
    190190   *        indices within the argument)
    191191   */
    192   void setTriplefunction(
    193       boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction
    194       )
    195   {
    196     triplefunction = _triplefunction;
    197   }
     192  void setTriplefunction(triplefunction_t &_triplefunction)
     193  { triplefunction = _triplefunction;  }
    198194
    199195private:
  • src/Potentials/Specifics/SaturationPotential.hpp

    r0dad5f re36ba2  
    8888  { return MAXPARAMS; }
    8989
    90   /** Sets the magic triple function that we use for getting angle distances.
    91    *
    92    * \note does nothing as we have an internal triplefunction
    93    *
    94    * \param _saturation_cutoff cutoff for the triplefunction
    95    * @param _triplefunction function that returns a list of triples (i.e. the
    96    *        two remaining distances) to a given pair of points (contained as
    97    *        indices within the argument)
    98    */
    99   void setTriplefunction(
    100       const double _saturation_cutoff,
    101       boost::function< std::vector<arguments_t>(const argument_t &, const double)> &_triplefunction
    102       )
    103   {
    104   }
    105 
    10690  /** Evaluates the harmonic potential function for the given arguments.
    10791   *
Note: See TracChangeset for help on using the changeset viewer.