Changeset d40189 for src


Ignore:
Timestamp:
Apr 23, 2021, 8:31:23 PM (5 years ago)
Author:
Frederik Heber <frederik.heber@…>
Branches:
Candidate_v1.7.0, stable
Children:
61cc0f
Parents:
cbbb6a
git-author:
Frederik Heber <frederik.heber@…> (04/28/19 22:01:20)
git-committer:
Frederik Heber <frederik.heber@…> (04/23/21 20:31:23)
Message:

OutputTemperature -> OutputEnergies, SaveTemperature -> SaveEnergies.

  • added force and momentum calculation.
  • TESTS: adapted test.ekin test file and integration/MolecularDynamics tests.
  • DOCU: Adapted userguide for changed action.
Location:
src
Files:
6 edited
4 moved

Legend:

Unmodified
Added
Removed
  • src/Actions/GlobalListOfActions.hpp

    rcbbb6a rd40189  
    9696  (MoleculeSaveBonds) \
    9797  (MoleculeSaveSelectedMolecules) \
    98   (MoleculeSaveTemperature) \
     98  (MoleculeSaveEnergies) \
    9999  (MoleculeStretchBond) \
    100100  (MoleculeTranslate) \
  • src/Actions/Makefile.am

    rcbbb6a rd40189  
    351351  Actions/MoleculeAction/SaveAdjacencyAction.cpp \
    352352  Actions/MoleculeAction/SaveBondsAction.cpp \
    353   Actions/MoleculeAction/SaveTemperatureAction.cpp \
     353  Actions/MoleculeAction/SaveEnergiesAction.cpp \
    354354  Actions/MoleculeAction/StretchBondAction.cpp \
    355355  Actions/MoleculeAction/TranslateAction.cpp \
     
    370370  Actions/MoleculeAction/SaveAdjacencyAction.hpp \
    371371  Actions/MoleculeAction/SaveBondsAction.hpp \
    372   Actions/MoleculeAction/SaveTemperatureAction.hpp \
     372  Actions/MoleculeAction/SaveEnergiesAction.hpp \
    373373  Actions/MoleculeAction/StretchBondAction.hpp \
    374374  Actions/MoleculeAction/TranslateAction.hpp \
     
    389389  Actions/MoleculeAction/SaveAdjacencyAction.def \
    390390  Actions/MoleculeAction/SaveBondsAction.def \
    391   Actions/MoleculeAction/SaveTemperatureAction.def \
     391  Actions/MoleculeAction/SaveEnergiesAction.def \
    392392  Actions/MoleculeAction/StretchBondAction.def \
    393393  Actions/MoleculeAction/TranslateAction.def \
  • src/Actions/MoleculeAction/SaveEnergiesAction.cpp

    rcbbb6a rd40189  
    33 * Description: creates and alters molecular systems
    44 * Copyright (C)  2010-2012 University of Bonn. All rights reserved.
     5 * Copyright (C) 2019  Frederik Heber
    56 *
    67 *
     
    2223
    2324/*
    24  * SaveTemperatureAction.cpp
     25 * SaveEnergiesAction.cpp
    2526 *
    2627 *  Created on: May 10, 2010
     
    3940#include "CodePatterns/Log.hpp"
    4041#include "CodePatterns/Verbose.hpp"
    41 #include "Dynamics/OutputTemperature.hpp"
     42#include "Dynamics/OutputEnergies.hpp"
    4243#include "molecule.hpp"
    4344#include "World.hpp"
     
    4849#include <vector>
    4950
    50 #include "Actions/MoleculeAction/SaveTemperatureAction.hpp"
     51#include "Actions/MoleculeAction/SaveEnergiesAction.hpp"
    5152
    5253using namespace MoleCuilder;
    5354
    5455// and construct the stuff
    55 #include "SaveTemperatureAction.def"
     56#include "SaveEnergiesAction.def"
    5657#include "Action_impl_pre.hpp"
    5758/** =========== define the function ====================== */
    58 ActionState::ptr MoleculeSaveTemperatureAction::performCall() {
    59   LOG(1, "Storing temperatures in " << params.temperaturefile.get() << ".");
     59ActionState::ptr MoleculeSaveEnergiesAction::performCall() {
     60  LOG(1, "Storing temperatures in " << params.energiesfile.get() << ".");
    6061  ofstream output;
    61   output.open(params.temperaturefile.get().string().c_str(), ios::trunc);
     62  output.open(params.energiesfile.get().string().c_str(), ios::trunc);
    6263  AtomSetMixin<std::vector<const atom *> > set =
    6364      const_cast<const World &>(World::getInstance()).getSelectedAtoms();
    6465  const size_t MDSteps = set.getMaxTrajectorySize();
    65   OutputTemperature<std::vector<const atom *> > writer(set);
     66  OutputEnergies<std::vector<const atom *> > writer(set);
    6667  if (output.fail() || !writer((ofstream * const) &output, 0, MDSteps)) {
    6768    STATUS("File could not be written.");
     
    7374}
    7475
    75 ActionState::ptr MoleculeSaveTemperatureAction::performUndo(ActionState::ptr _state) {
    76 //  MoleculeSaveTemperatureState *state = assert_cast<MoleculeSaveTemperatureState*>(_state.get());
     76ActionState::ptr MoleculeSaveEnergiesAction::performUndo(ActionState::ptr _state) {
     77//  MoleculeSaveEnergiesState *state = assert_cast<MoleculeSaveEnergiesState*>(_state.get());
    7778
    7879//  string newName = state->mol->getName();
     
    8283}
    8384
    84 ActionState::ptr MoleculeSaveTemperatureAction::performRedo(ActionState::ptr _state){
     85ActionState::ptr MoleculeSaveEnergiesAction::performRedo(ActionState::ptr _state){
    8586  // Undo and redo have to do the same for this action
    8687  return performUndo(_state);
    8788}
    8889
    89 bool MoleculeSaveTemperatureAction::canUndo() {
     90bool MoleculeSaveEnergiesAction::canUndo() {
    9091  return false;
    9192}
    9293
    93 bool MoleculeSaveTemperatureAction::shouldUndo() {
     94bool MoleculeSaveEnergiesAction::shouldUndo() {
    9495  return false;
    9596}
  • src/Actions/MoleculeAction/SaveEnergiesAction.def

    rcbbb6a rd40189  
    11/*
    2  * SaveTemperatureAction.def
     2 * SaveEnergiesAction.def
    33 *
    44 *  Created on: Aug 26, 2010
     
    1414// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
    1515#define paramtypes (boost::filesystem::path)
    16 #define paramtokens ("save-temperature")
    17 #define paramdescriptions ("name of the temperature file to write to")
     16#define paramtokens ("save-energies")
     17#define paramdescriptions ("name of the energies file to write to")
    1818#undef paramdefaults
    19 #define paramreferences (temperaturefile)
     19#define paramreferences (energiesfile)
    2020#define paramvalids \
    2121(!FilePresentValidator())
     
    2828#define MENUNAME "molecule"
    2929#define MENUPOSITION 12
    30 #define ACTIONNAME SaveTemperature
    31 #define TOKEN "save-temperature"
     30#define ACTIONNAME SaveEnergies
     31#define TOKEN "save-energies"
    3232
    3333
    3434// finally the information stored in the ActionTrait specialization
    35 #define DESCRIPTION "save the temperature per time step to file"
     35#define DESCRIPTION "save several energies (kinetic, momentum, mean force) per time step to file"
    3636#undef SHORTFORM
  • src/Actions/MoleculeAction/SaveEnergiesAction.hpp

    rcbbb6a rd40189  
    11/*
    2  * SaveTemperatureAction.hpp
     2 * SaveEnergiesAction.hpp
    33 *
    44 *  Created on: May 10, 2010
     
    1717#include "Actions/Action.hpp"
    1818
    19 #include "SaveTemperatureAction.def"
     19#include "SaveEnergiesAction.def"
    2020#include "Action_impl_header.hpp"
    2121
  • src/Atom/AtomSet.hpp

    rcbbb6a rd40189  
    7777  double totalMass() const;
    7878  double totalTemperatureAtStep(unsigned int step) const;
     79  Vector totalForceAtStep(unsigned int step) const;
    7980  Vector totalMomentumAtStep(unsigned int step) const;
     81  Vector totalAbsoluteMomentumAtStep(unsigned int step) const;
     82  Vector totalAbsoluteForceAtStep(unsigned int step) const;
    8083
    8184  size_t getMaxTrajectorySize() const;
     
    111114
    112115  template<class T>
     116  struct absValueSum {
     117    absValueSum(T (AtomInfo::*_f)() const,T startValue) :
     118      f(_f),
     119      value(startValue)
     120    {}
     121    T operator+(const AtomInfo *atom){
     122      temp = (atom->*f)();
     123      for (int i=0;i<NDIM;++i)
     124        temp[i] = fabs(temp[i]);
     125      return value + temp;
     126    }
     127    T operator=(T _value){
     128      value = _value;
     129      for (int i=0;i<NDIM;++i)
     130        value[i] = fabs(value[i]);
     131      return value;
     132    }
     133    T (AtomInfo::*f)() const;
     134    T value;
     135    T temp;
     136  };
     137
     138  template<class T>
    113139  struct valueMax {
    114140    valueMax(T (AtomInfo::*_f)() const,T startValue) :
     
    145171    T (AtomInfo::*f)(unsigned int) const;
    146172    T value;
     173  };
     174
     175  template<class T>
     176  struct stepAbsValueSum {
     177    stepAbsValueSum(unsigned int _step, T (AtomInfo::*_f)(unsigned int) const,T startValue) :
     178      step(_step),
     179      f(_f),
     180      value(startValue)
     181    {}
     182    T operator+(const AtomInfo *atom){
     183      temp = (atom->*f)(step);
     184      for (int i=0;i<NDIM;++i)
     185        temp[i] = fabs(temp[i]);
     186      return value + temp;
     187    }
     188    T operator=(T _value){
     189      value = _value;
     190      for (int i=0;i<NDIM;++i)
     191        value[i] = fabs(value[i]);
     192      return value;
     193    }
     194    unsigned int step;
     195    T (AtomInfo::*f)(unsigned int) const;
     196    T value;
     197    T temp;
    147198  };
    148199};
     
    208259          class iterator_type,
    209260          class const_iterator_type>
     261inline Vector AtomSetMixin<container_type,iterator_type,const_iterator_type>::totalAbsoluteMomentumAtStep(unsigned int step) const{
     262  return accumulate(this->begin(),this->end(),stepAbsValueSum<Vector>(step,&AtomInfo::getMomentum,Vector())).value;
     263}
     264
     265template <class container_type,
     266          class iterator_type,
     267          class const_iterator_type>
     268inline Vector AtomSetMixin<container_type,iterator_type,const_iterator_type>::totalForceAtStep(unsigned int step) const{
     269  return accumulate(this->begin(),this->end(),stepValueSum<Vector>(step,&AtomInfo::getAcceleration,Vector())).value;
     270}
     271
     272template <class container_type,
     273          class iterator_type,
     274          class const_iterator_type>
     275inline Vector AtomSetMixin<container_type,iterator_type,const_iterator_type>::totalAbsoluteForceAtStep(unsigned int step) const{
     276  return accumulate(this->begin(),this->end(),stepAbsValueSum<Vector>(step,&AtomInfo::getAcceleration,Vector())).value;
     277}
     278
     279template <class container_type,
     280          class iterator_type,
     281          class const_iterator_type>
    210282inline void AtomSetMixin<container_type,iterator_type,const_iterator_type>::sortByIds(){
    211283  std::sort(this->begin(), this->end(),
  • src/Atom/atom_atominfo.cpp

    rcbbb6a rd40189  
    475475}
    476476
     477Vector AtomInfo::getAcceleration(const unsigned int _step) const
     478{
     479  return getMass() * getAtomicForceAtStep(_step);
     480}
     481
    477482/** Decrease the trajectory if given \a MaxSteps is smaller.
    478483 * Does nothing if \a MaxSteps is larger than current size.
  • src/Atom/atom_atominfo.hpp

    rcbbb6a rd40189  
    299299  double getKineticEnergy(const unsigned int step) const;
    300300  Vector getMomentum(const unsigned int step) const;
     301  Vector getAcceleration(const unsigned int _step) const;
    301302  double getMass() const;
    302303  double getCharge() const {
  • src/Dynamics/OutputEnergies.hpp

    rcbbb6a rd40189  
    11/*
    2  * OutputTemperature.hpp
     2 * OutputEnergies.hpp
    33 *
    44 *  Created on: Feb 23, 2011
     
    1717
    1818template <class T>
    19 class OutputTemperature
     19class OutputEnergies
    2020{
    2121public:
    22   OutputTemperature(AtomSetMixin<T> &_atoms) :
     22  OutputEnergies(AtomSetMixin<T> &_atoms) :
    2323    atoms(_atoms)
    2424  {}
    25   ~OutputTemperature()
     25  ~OutputEnergies()
    2626  {}
    2727
     
    3737  {
    3838    double temperature;
     39    Vector force, abs_force;
     40    Vector momentum, abs_momentum;
    3941    // test stream
    4042    if (output == NULL)
    4143      return false;
    4244    else
    43       *output << "# Step Temperature [K] Temperature [a.u.]" << endl;
     45      *output << "# Step"
     46        << "\tTemperature [K]"
     47        << "\tTemperature [a.u.]"
     48        << "\tMomentum"
     49        << "\tAbolute Momentum"
     50        << "\tForce"
     51        << "\tAbsolute Force"
     52        << endl;
    4453    for (int step=startstep;step < endstep; step++) { // loop over all time steps
    4554      temperature = atoms.totalTemperatureAtStep(step);
    46       *output << step << "\t" << temperature*AtomicEnergyToKelvin << "\t" << temperature << endl;
     55      momentum = atoms.totalMomentumAtStep(step);
     56      force = atoms.totalForceAtStep(step);
     57      abs_momentum = atoms.totalAbsoluteMomentumAtStep(step);
     58      abs_force = atoms.totalAbsoluteForceAtStep(step);
     59      *output << step
     60          << "\t" << temperature*AtomicEnergyToKelvin
     61          << "\t" << temperature
     62          << "\t" << momentum.Norm()
     63          << "\t" << abs_momentum.Norm()
     64          << "\t" << force.Norm()
     65          << "\t" << abs_force.Norm()
     66          << endl;
    4767    }
    4868    return true;
  • src/Makefile.am

    rcbbb6a rd40189  
    119119        Dynamics/LinearInterpolationBetweenSteps.hpp \
    120120        Dynamics/MinimiseConstrainedPotential.hpp \
    121         Dynamics/OutputTemperature.hpp \
     121        Dynamics/OutputEnergies.hpp \
    122122        Dynamics/VerletForceIntegration.hpp
    123123
Note: See TracChangeset for help on using the changeset viewer.