Changeset 48d20d


Ignore:
Timestamp:
May 3, 2013, 11:58:26 AM (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:
661d2d
Parents:
57f14c
git-author:
Frederik Heber <heber@…> (04/09/13 07:44:29)
git-committer:
Frederik Heber <heber@…> (05/03/13 11:58:26)
Message:

Added new action FitPotentialAction to fit empirical potentials.

  • moved functionality from levmartester into new Action.
  • removed levmartester.
  • needs both enable-levmar and path to libs/include with-levmar. This allows checking as distinct enable switch.
  • added regression test Fragmentation/FitPotential for morse and harmonic_angle fit to water molecule. Using awk to check on L2 error.
  • added take-best-of option such that fits is done as many times and best (in terms of l2 error) is used. This should make regression test FitPotential more stable (right now we take best of 5).
  • DOCU: extended construct documentation due to new PotentialTypes construct.
  • DOCU: made construct lists items appear alphabetically.
  • DOCU: extended installation documentation with VTK and levmar.
  • DOCU: also URLs for scafacos, VTK, and levmar.
Files:
6 added
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • configure.ac

    r57f14c r48d20d  
    251251
    252252# Check for Levenberg-Marquardt implementation
    253 enable_levmar=no
    254 AX_LAPACK([enable_levmar=yes],[enable_levmar=no])
     253AC_ARG_ENABLE(
     254  [levmar],
     255  AS_HELP_STRING([--enable-levmar],[turn on LevMar feature [default=no]]),
     256  enable_levmar=$enableval,
     257  enable_levmar="no")
     258AS_IF([test x"$enable_levmar" = x"yes"],[
     259        AX_LAPACK([enable_levmar=yes],[enable_levmar=no])])
    255260AC_MSG_CHECKING(whether to compile in Levenberg-Marquardt)
    256261AS_IF([test x"$enable_levmar" = x"yes"],[
  • src/Actions/GlobalListOfActions.hpp

    r57f14c r48d20d  
    122122  (SelectionNotAllShapes) \
    123123  (SelectionNotShapeByName) \
     124  (FragmentationAnalyseFragmentationResults) \
    124125  (FragmentationFragmentation) \
    125   (FragmentationAnalyseFragmentationResults) \
    126126  (FragmentationStoreSaturatedFragment) \
    127127  (FillRegularGrid) \
     
    136136// we need to append the automation action in case we have the JobMarket
    137137#ifdef HAVE_JOBMARKET
    138 #define GLOBALLISTOFACTIONS \
     138#define GLOBALLISTOFACTIONS_JOBMARKET \
    139139    BOOST_PP_SEQ_PUSH_BACK( \
    140140        BOOST_PP_SEQ_PUSH_BACK( \
     
    145145    )
    146146#else
    147 #define GLOBALLISTOFACTIONS \
     147#define GLOBALLISTOFACTIONS_JOBMARKET \
    148148    GLOBALLISTOFACTIONS_initial
    149149#endif /* HAVE_JOBMARKET */
    150150
     151#ifdef HAVE_LEVMAR
     152#define GLOBALLISTOFACTIONS_LEVMAR \
     153    BOOST_PP_SEQ_PUSH_BACK( \
     154        GLOBALLISTOFACTIONS_JOBMARKET, \
     155        FragmentationFitPotential \
     156    )
     157#else
     158#define GLOBALLISTOFACTIONS_LEVMAR \
     159    GLOBALLISTOFACTIONS_JOBMARKET
     160#endif /* HAVE_LEVMAR */
     161
     162// define final list
     163#define GLOBALLISTOFACTIONS GLOBALLISTOFACTIONS_LEVMAR
     164
    151165#endif /* GLOBALLISTOFACTIONS_HPP_ */
    152166
  • src/Actions/Makefile.am

    r57f14c r48d20d  
    234234  Actions/FragmentationAction/ParseFragmentJobsAction.def
    235235endif
     236
     237if CONDLEVMAR
     238FRAGMENTATIONACTIONSOURCE += \
     239  Actions/FragmentationAction/FitPotentialAction.cpp
     240FRAGMENTATIONACTIONHEADER += \
     241  Actions/FragmentationAction/FitPotentialAction.hpp
     242FRAGMENTATIONACTIONDEFS += \
     243  Actions/FragmentationAction/FitPotentialAction.def
     244endif
     245
    236246
    237247GRAPHACTIONSOURCE = \
     
    543553libMolecuilderActionPrototypes_la_CPPFLAGS += $(JobMarket_CFLAGS)
    544554endif
     555if CONDLEVMAR
     556libMolecuilderActionPrototypes_la_CPPFLAGS += $(LEVMAR_CPPFLAGS)
     557endif
    545558libMolecuilderActions_la_includedir = $(includedir)/MoleCuilder/
    546559libMolecuilderActionPrototypes_la_includedir = $(includedir)/MoleCuilder/
  • src/Makefile.am

    r57f14c r48d20d  
    488488endif
    489489
    490 if CONDLEVMAR
    491 bin_PROGRAMS += LevMartester
    492 LevMartester_SOURCES = LevMartester.cpp
    493 LevMartester_CPPFLAGS = $(AM_CPPFLAGS) $(LEVMAR_CPPFLAGS)
    494 LevMartester_LDFLAGS = $(AM_LDFLAGS) $(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_PROGRAM_OPTIONS_LDFLAGS) $(BOOST_FILESYSTEM_LDFLAGS) $(BOOST_SYSTEM_LDFLAGS) ${CodePatterns_LDFLAGS} $(LEVMAR_LDFLAGS)
    495 LevMartester_LDADD = \
    496         libMolecuilderPotentials.la \
    497         libMolecuilderFunctionApproximation.la \
    498         libMolecuilderFragmentation.la \
    499         libMolecuilderFragmentation_getFromKeysetStub.la \
    500         libMolecuilderFragmentationSetValues.la \
    501         libMolecuilderHelpers.la \
    502         $(top_builddir)/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
    503         $(BOOST_SERIALIZATION_LIBS) \
    504         $(BOOST_PROGRAM_OPTIONS_LIBS) \
    505         $(BOOST_FILESYSTEM_LIBS) \
    506         $(BOOST_SYSTEM_LIBS) \
    507         ${CodePatterns_LIBS} \
    508         $(LEVMAR_LIBS) \
    509         $(LAPACK_LIBS) $(BLAS_LIBS) $(LIBS) $(FLIBS)
    510 endif
    511 
    512490unity_SOURCES = unity.cpp
    513491unity_CPPFLAGS = $(AM_CPPFLAGS)
  • src/documentation/constructs/constructs.dox

    r57f14c r48d20d  
    3131 *  \li \ref observers
    3232 *  \li \ref parameters
    33  *  \li \ref parsers
    34  *  \li \ref potentials
     33 *  \li \ref parsers "Parsers"
     34 *  \li \ref potentials "Potentials"
    3535 *  \li \ref qt-gui
    3636 *  \li \ref queries
     
    4747 *
    4848 *
    49  * \date 2013-02-07
     49 * \date 2013-04-09
    5050 *
    5151 */
  • src/documentation/constructs/potentials.dox

    r57f14c r48d20d  
    7171 *    perform the fit.
    7272 *
    73  * \section potentials-howto Howto use the potentials
     73 * \section potentials-howto-use Howto use the potentials
    7474 *
    7575 *  We just give a brief run-down in terms of code on how to use the potentials.
    76  *  Here, we just describe what to do in order to perform the fitting.
     76 *  Here, we just describe what to do in order to perform the fitting. This is
     77 *  basically what is implemented in FragmentationFitPotentialAction.
    7778 *
    7879 *  \code
     
    102103 *  // give initial parameter
    103104 *  FunctionModel::parameters_t params(PairPotential_Angle::MAXPARAMS, 0.);
    104  *  ... set some initial parameters
     105 *  // ... set some potential-specific initial parameters in params struct
    105106 *  angle.setParameters(params);
    106107 *
     
    123124 *  // evaluate
    124125 *  FunctionModel::arguments_t args;
    125  *  .. initialise args to the desired distances
     126 *  // .. initialise args to the desired distances
    126127 *  const double value = angle(args)[0]; // output is a vector!
    127128 *  \endcode
    128129 *
    129  * \date 2012-11-28
     130 * \section potentials-stability-of-fit note in stability of fit
     131 *
     132 *  As we always start from random initial parameters (within a certain sensible
     133 *  range at least), the non-linear fit does not always converge. For this case
     134 *  the FragmentationFitPotentialAction has the option "take-best-of" to allow
     135 *  for multiple fits where the best (in terms of l2 error) is taken eventually.
     136 *
     137 * \section potentials-howto-add Howto add new potentials
     138 *
     139 *  Adding a new potential requires the following:
     140 *  -# Add the new modules to Potentials/Specifics
     141 *  -# Add a unit test on the potential in Potentials/Specifics/unittests
     142 *  -# Give the potential a type name and add it to PotentialTypes.def. Note
     143 *     that the name must not contain white space.
     144 *  -# Add the potential name as case to PotentialFactory such that it knows
     145 *     how to instantiate your new potential when requested.
     146 *
     147 * PotentialTypes.def contains a boost::preprocessor sequence of all
     148 * potential names. PotentialFactory uses this sequence to build its enum to
     149 * type map and inverse which the user sees when specifying the potential to
     150 * fit via PotentialTypeValidator.
     151 *
     152 *
     153 * \date 2013-04-09
    130154 */
  • src/documentation/install.dox

    r57f14c r48d20d  
    5555 *    -# MPQC: see below for instructions
    5656 *    -# ScaFaCoS: see below for instructions
     57 *    -# VTK: see below for instructions
     58 *    -# levmar: see below for instructions
    5759 *
    5860 *  If you are programming with or for MoleCuilder, the following packages are
     
    109111 *  \subsubsection install-prerequisites-other-scafacos ScaFaCoS
    110112 *
    111  *  ScaFaCoS is a library of fast Coulomb solvers, created by the same-named BMBF
    112  *  funded project. The library contains Versatile MultiGrid (vmg) as one of its
    113  *  solvers which is used in the BOSSANOVA scheme for the calculation of
    114  *  long-range forces.
     113 *  ScaFaCoS (http://www.scafacos.org/) is a library of fast Coulomb solvers,
     114 *  created by the same-named BMBF funded project. The library contains Versatile
     115 *  MultiGrid (vmg) as one of its solvers which is used in the BOSSANOVA scheme
     116 *  for the calculation of long-range forces.
    115117 *
    116118 *  ScaFaCoS requires the following packages to compile:
     
    118120 *  -# F2C: libf2c2-dev
    119121 *  -# Fortran compiler: gfortan
     122 *  -# VTK >=5.10
     123 *
     124 *  Firstly, you should obtain a recent copy of the visualization tool kit (VTK)
     125 *  (http://www.vtk.org/) and compile as
     126 *  \code
     127 *  export MPI_HOME=$( which mpirun | sed 's#/bin/mpirun##g')
     128 *  export CXX_FLAGS=-fPIC
     129 *  cmake -DCMAKE_INSTALL_PREFIX:PATH=<install-path> \
     130 *        -DBUILD_SHARED_LIBS=TRUE \
     131 *        -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF \
     132 *        -DCMAKE_INSTALL_RPATH:PATH=<install-path>/lib/vtk-<install-version> \
     133 *        -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=ON \
     134 *        -DCMAKE_SKIP_BUILD_RPATH:BOOL=OFF \
     135 *        -DVTK_USE_PARALLEL:BOOL=ON \
     136 *        -DVTK_USE_MPI:BOOL=ON \
     137 *        -DMPI_LIBRARY:PATH=${MPI_HOME}/lib/libmpi.so \
     138 *        -DMPI_EXTRA_LIBRARY:PATH=${MPI_HOME}/lib/libmpi_cxx.so \
     139 *        -DMPI_INCLUDE_PATH:PATH=${MPI_HOME}/include/mpi \
     140 *        ..
     141 *  make -j4
     142 *  make install
     143 *  \endcode
     144 *  where we force rpath-linking and shared libraries (MPI is actually not
     145 *  required here).
     146 *
    120147 *  Compilation additionally required use of
    121148 *  \code CPPFLAGS="-fPIC" \endcode
     
    125152 *  for a debug compile you might want to use:
    126153 *  \code
    127  *  ../configure -C --prefix=<path> --enable-shared BSPLINE_DEG=3 MPICC=mpicc.openmpi
    128  *  MPICXX=mpicxx.openmpi MPIEXEC=mpirun.openmpi CPPFLAGS="-Wall -g3 -O0 -ggdb -fPIC"
    129  *  --enable-mpi --with-boost-libdir=/usr/lib --with-boost=/usr --enable-fcs-solvers=vmg
     154 *  ../configure \
     155 *    -C \
     156 *    --prefix=<path> \
     157 *    --enable-shared \
     158 *    BSPLINE_DEG=3 \
     159 *    MPICC=mpicc.openmpi \
     160 *    MPICXX=mpicxx.openmpi \
     161 *    MPIEXEC=mpirun.openmpi \
     162 *    CPPFLAGS="-Wall -g3 -O0 -ggdb -fPIC" \
     163 *    --enable-mpi \
     164 *    --with-boost-libdir=/usr/lib --with-boost=/usr \
     165 *    --with-vtk=<path-to-vtk> --with-vtk-version=<vtk-version path string, i.e. -5.10> \
     166 *    --enable-fcs-solvers=vmg
    130167 *  \endcode
     168 *  where we specify a recent boost and the installed VTK version from above.
     169 *
     170 *  \subsubsection install-prerequisites-other-levmar LevMar
     171 *
     172 *   We also require the levmar (http://www.ics.forth.gr/~lourakis/levmar/) which
     173 *   implements a Levenberg-Marquardt for non-linear regression which is employed
     174 *   for fitting empirical potentials to energies obtained from calculated
     175 *   fragment energies.
     176 *
     177 *   Compile and install as follows
     178 *   \code
     179 *    cmake \
     180 *      -DCMAKE_INSTALL_PREFIX:PATH=<install-path> \
     181 *      -DCMAKE_C_FLAGS="-fPIC" \
     182 *      ..
     183 *    make
     184 *    cp -f liblevmar.a <install-path>/lib
     185 *    cp -f levmar.h <install-path>/include
     186 *   \endcode
     187 *   where we have to copy the stuff by hand as no \a install target exists.
    131188 *
    132189 *  \subsubsection install-prerequisites-other-mpqc MPQC
     
    276333 *  from a distributed archive. This is checked for each release version.
    277334 *
    278  * \date 2012-12-20
     335 * \date 2013-04-09
    279336 */
  • tests/Python/AllActions/options.dat

    r57f14c r48d20d  
    7575fill-void       "water.data"
    7676fill-void       "water.xyz"
     77fit-potential   "morse"
    7778forces-file     "test.forces"
     79fragment-charges        "1 1"
    7880fragment-executable     "mpqc"
    7981fragment-jobs   "Job00.in"
     
    131133position        "7.283585982 3.275186040 3.535886037"
    132134position        "9.78 2.64 2.64"
     135potential-charges       "1 1"
    133136radius  "20."
    134137random-atom-displacement        "0."
     
    201204stretch-shapes  "1. 2. 3."
    202205suspend-in-water        "1.0"
     206take-best-of            "5"
    203207tesselation-radius      "5."
    204208time-step-zero  "0"
  • tests/regression/Fragmentation/testsuite-fragmentation.at

    r57f14c r48d20d  
    2929# check storing saturated fragment
    3030m4_include([Fragmentation/StoreSaturatedFragment/testsuite-fragmentation-store-saturated-fragment.at])
     31
     32# fitting potential to fragment results
     33m4_include([Fragmentation/FitPotential/testsuite-fragmentation-fit-potential.at])
  • tests/regression/Makefile.am

    r57f14c r48d20d  
    7373        $(srcdir)/Fragmentation/testsuite-fragmentation.at \
    7474        $(srcdir)/Fragmentation/AnalyseFragmentationResults/testsuite-fragmentation-analyse-fragment-results.at \
     75        $(srcdir)/Fragmentation/FitPotential/testsuite-fragmentation-fit-potential.at \
    7576        $(srcdir)/Fragmentation/FragmentMolecule/testsuite-fragmentation-fragment-molecule.at \
    7677        $(srcdir)/Fragmentation/FragmentMolecule-MaxOrder/testsuite-fragmentation-fragment-molecule-maxorder.at \
  • tests/regression/testsuite.at

    r57f14c r48d20d  
    2222
    2323AT_INIT([Molecular Builder])
    24 AT_TESTED(diff grep egrep fgrep)
     24AT_TESTED(diff grep egrep fgrep awk)
    2525
    2626# makes functions in CheckCommand.sh available within the tests
Note: See TracChangeset for help on using the changeset viewer.