Changeset 579a81 for src/Thermostats
- Timestamp:
- Aug 20, 2010, 1:54:23 PM (15 years ago)
- 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:
- 0b882a
- Parents:
- 194649
- Location:
- src/Thermostats
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Thermostats/Berendsen.cpp
r194649 r579a81 12 12 #include "Helpers/Log.hpp" 13 13 #include "ThermoStatContainer.hpp" 14 #include "World.hpp" 14 15 15 Berendsen::Berendsen(double _ ActualTemp) :16 ActualTemp(_ActualTemp)16 Berendsen::Berendsen(double _TempFrequency) : 17 TempFrequency(_TempFrequency) 17 18 {} 18 19 … … 20 21 {} 21 22 22 double Berendsen::scaleAtoms(config &configuration,unsigned int step,ATOMSET(std::list) atoms){ 23 return doScaleAtoms(configuration,step,atoms.begin(),atoms.end()); 23 ThermostatTraits<class Berendsen>::ThermostatTraits() : 24 name("Berendsen") 25 {} 26 27 28 double Berendsen::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms){ 29 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 24 30 } 25 31 26 double Berendsen::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector) atoms){27 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());32 double Berendsen::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms){ 33 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 28 34 } 29 35 30 double Berendsen::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set) atoms){31 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());36 double Berendsen::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms){ 37 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 32 38 } 33 39 34 40 template <class ForwardIterator> 35 double Berendsen::doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end){41 double Berendsen::doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end){ 36 42 DoLog(2) && (Log() << Verbose(2) << "Applying Berendsen-VanGunsteren thermostat..." << endl); 37 43 double ekin; 38 double ScaleTempFactor = configuration.Thermostats->TargetTemp/ActualTemp;44 double ScaleTempFactor = getContainer().TargetTemp/ActualTemp; 39 45 for(ForwardIterator iter=begin;iter!=end;++iter){ 40 46 Vector &U = (*iter)->Trajectory.U.at(step); 41 47 if ((*iter)->FixedIon == 0) { // even FixedIon moves, only not by other's forces 42 U *= sqrt(1+( configuration.Deltat/configuration.Thermostats->TempFrequency)*(ScaleTempFactor-1));48 U *= sqrt(1+(World::getInstance().getConfig()->Deltat/TempFrequency)*(ScaleTempFactor-1)); 43 49 ekin += 0.5*(*iter)->getType()->mass * U.NormSquared(); 44 50 } … … 46 52 return ekin; 47 53 } 54 55 std::string Berendsen::name(){ 56 return ThermostatTraits<Berendsen>().name; 57 } 58 59 std::string Berendsen::writeParam(){ 60 stringstream sstr; 61 sstr << TempFrequency; 62 return sstr.str(); 63 } -
src/Thermostats/Berendsen.hpp
r194649 r579a81 17 17 virtual ~Berendsen(); 18 18 19 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::list));20 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector));21 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set));19 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms); 20 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms); 21 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms); 22 22 23 virtual std::string name() { return "Berendsen";} 23 virtual std::string name(); 24 25 virtual std::string writeParam(); 26 24 27 private: 25 28 template <class ForwardIterator> 26 double doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end);29 double doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end); 27 30 28 double ActualTemp; 31 double TempFrequency; 32 }; 33 34 template <> 35 struct ThermostatTraits<class Berendsen>{ 36 ThermostatTraits(); 37 const char* name; 29 38 }; 30 39 -
src/Thermostats/GaussianThermostat.cpp
r194649 r579a81 13 13 #include "element.hpp" 14 14 #include "config.hpp" 15 #include "World.hpp" 16 15 17 #include <set> 16 18 17 GaussianThermostat::GaussianThermostat() : E(0),G(0) 19 GaussianThermostat::GaussianThermostat(int _ScaleTempStep) : 20 E(0),G(0), 21 ScaleTempStep(_ScaleTempStep) 18 22 {} 19 23 … … 21 25 {} 22 26 23 double GaussianThermostat::scaleAtoms(config &configuration,unsigned int step,ATOMSET(std::list) atoms){ 24 return doScaleAtoms(configuration,step,atoms.begin(),atoms.end()); 27 ThermostatTraits<GaussianThermostat>::ThermostatTraits() : 28 name("Gaussian") 29 {} 30 31 double GaussianThermostat::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms){ 32 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 25 33 } 26 34 27 double GaussianThermostat::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector) atoms){28 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());35 double GaussianThermostat::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms){ 36 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 29 37 } 30 38 31 double GaussianThermostat::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set) atoms){32 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());39 double GaussianThermostat::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms){ 40 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 33 41 } 34 42 35 43 template <class ForwardIterator> 36 double GaussianThermostat::doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end){44 double GaussianThermostat::doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end){ 37 45 DoLog(2) && (Log() << Verbose(2) << "Applying Gaussian thermostat..." << endl); 38 46 init(step,begin,end); … … 43 51 Vector &U = (*iter)->Trajectory.U.at(step); 44 52 if ((*iter)->FixedIon == 0) {// even FixedIon moves, only not by other's forces 45 U += configuration.Deltat * G_over_E * U;53 U += World::getInstance().getConfig()->Deltat * G_over_E * U; 46 54 ekin += (*iter)->getType()->mass * U.NormSquared(); 47 55 } … … 71 79 return G; 72 80 } 81 82 std::string GaussianThermostat::name(){ 83 return ThermostatTraits<GaussianThermostat>().name; 84 } 85 86 std::string GaussianThermostat::writeParams(){ 87 std::stringstream sstr; 88 sstr << ScaleTempStep; 89 return sstr.str(); 90 } -
src/Thermostats/GaussianThermostat.hpp
r194649 r579a81 16 16 { 17 17 public: 18 GaussianThermostat( );18 GaussianThermostat(int ScaleTempStep); 19 19 virtual ~GaussianThermostat(); 20 20 21 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::list));22 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector));23 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set));21 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms); 22 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms); 23 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms); 24 24 25 virtual std::string name() { return "Gaussian";}26 25 double getE() const; 27 26 double getG() const; 27 28 virtual std::string name(); 29 virtual std::string writeParams(); 28 30 private: 29 31 template <class ForwardIterator> 30 32 void init(unsigned int step,ForwardIterator begin, ForwardIterator end); 31 33 template <class ForwardIterator> 32 double doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end);34 double doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end); 33 35 double E,G; 36 int ScaleTempStep; 37 }; 38 39 template <> 40 struct ThermostatTraits<GaussianThermostat>{ 41 ThermostatTraits(); 42 const char* name; 34 43 }; 35 44 -
src/Thermostats/Langevin.cpp
r194649 r579a81 25 25 } 26 26 27 double Langevin::scaleAtoms(config &configuration,unsigned int step,ATOMSET(std::list) atoms){ 28 return doScaleAtoms(configuration,step,atoms.begin(),atoms.end()); 27 ThermostatTraits<class Langevin>::ThermostatTraits() : 28 name("Langevin") 29 {} 30 31 double Langevin::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms){ 32 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 29 33 } 30 34 31 double Langevin::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector) atoms){32 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());35 double Langevin::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms){ 36 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 33 37 } 34 38 35 double Langevin::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set) atoms){36 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());39 double Langevin::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms){ 40 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 37 41 } 38 42 39 43 template <class ForwardIterator> 40 double Langevin::doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end){44 double Langevin::doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end){ 41 45 DoLog(2) && (Log() << Verbose(2) << "Applying Langevin thermostat..." << endl); 42 46 double ekin=0; 43 47 for(ForwardIterator iter=begin;iter!=end;++iter){ 44 double sigma = sqrt( configuration.Thermostats->TargetTemp/(*iter)->getType()->mass); // sigma = (k_b T)/m (Hartree/atomicmass = atomiclength/atomictime)48 double sigma = sqrt(getContainer().TargetTemp/(*iter)->getType()->mass); // sigma = (k_b T)/m (Hartree/atomicmass = atomiclength/atomictime) 45 49 Vector &U = (*iter)->Trajectory.U.at(step); 46 50 if ((*iter)->FixedIon == 0) { // even FixedIon moves, only not by other's forces 47 51 // throw a dice to determine whether it gets hit by a heat bath particle 48 if (((((rand()/(double)RAND_MAX))* configuration.Thermostats->TempFrequency) < 1.)) {52 if (((((rand()/(double)RAND_MAX))*TempFrequency) < 1.)) { 49 53 DoLog(3) && (Log() << Verbose(3) << "Particle " << (**iter) << " was hit (sigma " << sigma << "): " << sqrt(U[0]*U[0]+U[1]*U[1]+U[2]*U[2]) << " -> "); 50 54 // pick three random numbers from a Boltzmann distribution around the desired temperature T for each momenta axis … … 59 63 return ekin; 60 64 } 65 66 std::string Langevin::name(){ 67 return ThermostatTraits<Langevin>().name; 68 } 69 70 std::string Langevin::writeParams(){ 71 stringstream sstr; 72 sstr << TempFrequency << "\t" << alpha; 73 return sstr.str(); 74 } -
src/Thermostats/Langevin.hpp
r194649 r579a81 17 17 virtual ~Langevin(); 18 18 19 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::list))=0;20 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector))=0;21 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set))=0;19 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms); 20 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms); 21 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms); 22 22 23 virtual std::string name(){return "Langevin";} 23 virtual std::string name(); 24 virtual std::string writeParams(); 24 25 25 26 private: 26 27 template <class ForwardIterator> 27 double doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end);28 double doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end); 28 29 30 31 double TempFrequency; 32 double alpha; 29 33 gsl_rng * r; 30 34 const gsl_rng_type * T; 31 35 }; 32 36 37 template <> 38 struct ThermostatTraits<class Langevin>{ 39 ThermostatTraits(); 40 const char* name; 41 }; 42 33 43 #endif /* LANGEVIN_HPP_ */ -
src/Thermostats/NoThermostat.cpp
r194649 r579a81 14 14 {} 15 15 16 double NoThermostat::scaleAtoms(config &configuration,unsigned int step,ATOMSET(std::list) atoms){ 16 ThermostatTraits<class NoThermostat>::ThermostatTraits() : 17 name("None") 18 {} 19 20 double NoThermostat::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms){ 17 21 return 0; 18 22 } 19 23 20 double NoThermostat::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector) atoms){24 double NoThermostat::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms){ 21 25 return 0; 22 26 } 23 27 24 double NoThermostat::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set) atoms){28 double NoThermostat::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms){ 25 29 return 0; 26 30 } 31 32 std::string NoThermostat::name(){ 33 return ThermostatTraits<NoThermostat>().name; 34 } 35 36 std::string NoThermostat::writeParams(){ 37 return ""; 38 } -
src/Thermostats/NoThermostat.hpp
r194649 r579a81 17 17 virtual ~NoThermostat(); 18 18 19 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::list));20 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector));21 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set));19 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms); 20 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms); 21 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms); 22 22 23 virtual std::string name() { return "None";} 23 virtual std::string name(); 24 virtual std::string writeParams(); 25 }; 26 27 template <> 28 struct ThermostatTraits<class NoThermostat>{ 29 ThermostatTraits(); 30 const char* name; 24 31 }; 25 32 -
src/Thermostats/NoseHoover.cpp
r194649 r579a81 13 13 #include "Helpers/Log.hpp" 14 14 #include "ThermoStatContainer.hpp" 15 #include "World.hpp" 15 16 16 NoseHoover::NoseHoover() 17 NoseHoover::NoseHoover(double _HooverMass) : 18 HooverMass(_HooverMass) 17 19 {} 18 20 … … 20 22 {} 21 23 24 ThermostatTraits<class NoseHoover>::ThermostatTraits() : 25 name("NoseHoover") 26 {} 22 27 23 double NoseHoover::scaleAtoms(config &configuration,unsigned int step,ATOMSET(std::list) atoms){ 24 return doScaleAtoms(configuration,step,atoms.begin(),atoms.end()); 28 29 double NoseHoover::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms){ 30 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 25 31 } 26 32 27 double NoseHoover::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector) atoms){28 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());33 double NoseHoover::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms){ 34 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 29 35 } 30 36 31 double NoseHoover::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set) atoms){32 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());37 double NoseHoover::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms){ 38 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 33 39 } 34 40 35 41 template <class ForwardIterator> 36 double NoseHoover::doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end){42 double NoseHoover::doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end){ 37 43 DoLog(2) && (Log() << Verbose(2) << "Applying Nose-Hoover thermostat..." << endl); 38 44 init(step,begin,end); 39 delta_alpha = (delta_alpha - (3.*count+1.) * configuration.Thermostats->TargetTemp)/(configuration.Thermostats->HooverMass*Units2Electronmass);40 configuration.Thermostats->alpha += delta_alpha*configuration.Deltat;41 DoLog(3) && (Log() << Verbose(3) << "alpha = " << delta_alpha << " * " << configuration.Deltat << " = " << configuration.Thermostats->alpha << "." << endl);45 delta_alpha = (delta_alpha - (3.*count+1.) * getContainer().TargetTemp)/(HooverMass*Units2Electronmass); 46 getContainer().alpha += delta_alpha*World::getInstance().getConfig()->Deltat; 47 DoLog(3) && (Log() << Verbose(3) << "alpha = " << delta_alpha << " * " << World::getInstance().getConfig()->Deltat << " = " << getContainer().alpha << "." << endl); 42 48 double ekin =0; 43 49 for(ForwardIterator iter=begin;iter!=end;++iter){ 44 50 Vector &U = (*iter)->Trajectory.U.at(step); 45 51 if ((*iter)->FixedIon == 0) { // even FixedIon moves, only not by other's forces 46 U += configuration.Deltat/(*iter)->getType()->mass * (configuration.Thermostats->alpha * (U * (*iter)->getType()->mass));52 U += World::getInstance().getConfig()->Deltat/(*iter)->getType()->mass * (getContainer().alpha * (U * (*iter)->getType()->mass)); 47 53 ekin += (0.5*(*iter)->getType()->mass) * U.NormSquared(); 48 54 } … … 63 69 } 64 70 } 71 72 std::string NoseHoover::name(){ 73 return ThermostatTraits<NoseHoover>().name; 74 } 75 76 std::string NoseHoover::writeParams(){ 77 std::stringstream sstr; 78 sstr << HooverMass; 79 return sstr.str(); 80 } -
src/Thermostats/NoseHoover.hpp
r194649 r579a81 14 14 { 15 15 public: 16 NoseHoover( );16 NoseHoover(double _HooverMass); 17 17 virtual ~NoseHoover(); 18 18 19 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::list));20 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector));21 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set));19 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms); 20 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms); 21 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms); 22 22 23 virtual std::string name() { return "Nose-Hoover";} 23 virtual std::string name(); 24 virtual std::string writeParams(); 24 25 25 26 private: … … 27 28 void init(unsigned int step,ForwardIterator begin, ForwardIterator end); 28 29 template <class ForwardIterator> 29 double doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin, ForwardIterator end);30 double doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin, ForwardIterator end); 30 31 32 double HooverMass; 31 33 double delta_alpha; 32 34 int count; 33 35 }; 34 36 37 template <> 38 struct ThermostatTraits<class NoseHoover>{ 39 ThermostatTraits(); 40 const char* name; 41 }; 42 43 35 44 #endif /* NOSEHOOVER_HPP_ */ -
src/Thermostats/Thermostat.cpp
r194649 r579a81 8 8 #include "Thermostat.hpp" 9 9 10 Thermostat::Thermostat() 10 #include "Helpers/Assert.hpp" 11 12 Thermostat::Thermostat() : 13 container(0) 11 14 {} 12 15 13 16 Thermostat::~Thermostat() 14 17 {} 18 19 ThermostatTraits<Thermostat>::ThermostatTraits() : 20 name("Base") 21 {} 22 23 void Thermostat::addToContainer(ThermoStatContainer &_container){ 24 container = &_container; 25 } 26 27 ThermoStatContainer &Thermostat::getContainer(){ 28 ASSERT(container,"No container used for this Thermostat"); 29 return *container; 30 } -
src/Thermostats/Thermostat.hpp
r194649 r579a81 17 17 #include "AtomSet.hpp" 18 18 19 class ThermoStatContainer; 20 19 21 class Thermostat 20 22 { 21 23 public: 22 24 Thermostat(); 23 virtual 25 virtual ~Thermostat(); 24 26 25 27 // cannot template this, because we need virtual functions 26 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::list))=0;27 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector))=0;28 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set))=0;28 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms)=0; 29 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms)=0; 30 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms)=0; 29 31 30 32 virtual std::string name()=0; 33 34 virtual std::string writeParams()=0; 35 protected: 36 void addToContainer(ThermoStatContainer &); 37 ThermoStatContainer &getContainer(); 38 private: 39 ThermoStatContainer* container; 40 }; 41 42 template <class Thermostat> 43 struct ThermostatTraits; 44 45 template <> 46 struct ThermostatTraits<Thermostat>{ 47 ThermostatTraits(); 48 const char* name; 31 49 }; 32 50 -
src/Thermostats/Woodcock.cpp
r194649 r579a81 14 14 #include "ThermoStatContainer.hpp" 15 15 16 Woodcock::Woodcock(int _MDSteps, double _ActualTemp) : 17 MDSteps(_MDSteps), 18 ActualTemp(_ActualTemp) 16 #include <sstream> 17 18 Woodcock::Woodcock(int _ScaleTempStep) : 19 ScaleTempStep(_ScaleTempStep) 19 20 {} 20 21 … … 22 23 {} 23 24 24 double Woodcock::scaleAtoms(config &configuration,unsigned int step,ATOMSET(std::list) atoms){ 25 return doScaleAtoms(configuration,step,atoms.begin(),atoms.end()); 25 ThermostatTraits<class Woodcock>::ThermostatTraits() : 26 name("Woodcock") 27 {} 28 29 double Woodcock::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms){ 30 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 26 31 } 27 32 28 double Woodcock::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector) atoms){29 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());33 double Woodcock::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms){ 34 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 30 35 } 31 36 32 double Woodcock::scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set) atoms){33 return doScaleAtoms( configuration,step,atoms.begin(),atoms.end());37 double Woodcock::scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms){ 38 return doScaleAtoms(step,ActualTemp,atoms.begin(),atoms.end()); 34 39 } 35 40 36 41 template <class ForwardIterator> 37 double Woodcock::doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin,ForwardIterator end){42 double Woodcock::doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin,ForwardIterator end){ 38 43 double ekin=0; 39 if (( configuration.Thermostats->ScaleTempStep > 0) && ((MDSteps-1) % configuration.Thermostats->ScaleTempStep == 0)) {40 double ScaleTempFactor = sqrt( configuration.Thermostats->TargetTemp/ActualTemp);44 if ((ScaleTempStep > 0) && ((step-1) % ScaleTempStep == 0)) { 45 double ScaleTempFactor = sqrt(getContainer().TargetTemp/ActualTemp); 41 46 DoLog(2) && (Log() << Verbose(2) << "Applying Woodcock thermostat..." << endl); 42 47 double ekin; … … 51 56 return ekin; 52 57 } 58 59 std::string Woodcock::name(){ 60 return ThermostatTraits<Woodcock>().name; 61 } 62 63 std::string Woodcock::writeParams(){ 64 std::stringstream sstr; 65 sstr << ScaleTempStep; 66 return sstr.str(); 67 } -
src/Thermostats/Woodcock.hpp
r194649 r579a81 14 14 { 15 15 public: 16 Woodcock(int ,double);16 Woodcock(int); 17 17 virtual ~Woodcock(); 18 18 19 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::list));20 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::vector));21 virtual double scaleAtoms( config &configuration,unsigned int step,ATOMSET(std::set));19 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::list) atoms); 20 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::vector) atoms); 21 virtual double scaleAtoms(unsigned int step,double ActualTemp,ATOMSET(std::set) atoms); 22 22 23 virtual std::string name(){return "Woodcock";} 23 virtual std::string name(); 24 25 virtual std::string writeParams(); 24 26 25 27 private: 26 28 template <class ForwardIterator> 27 double doScaleAtoms( config &configuration,unsigned int step,ForwardIterator begin,ForwardIterator end);29 double doScaleAtoms(unsigned int step,double ActualTemp,ForwardIterator begin,ForwardIterator end); 28 30 29 int MDSteps; 30 double ActualTemp; 31 int ScaleTempStep; 32 }; 33 34 template <> 35 struct ThermostatTraits<class Woodcock>{ 36 ThermostatTraits(); 37 const char* name; 31 38 }; 32 39
Note:
See TracChangeset
for help on using the changeset viewer.