00001 /*************************************************************************************************** 00002 ***** Copyright (C) 2005 John Schneiderman <JohnMS@member.fsf.org> ***** 00003 ***** ***** 00004 ***** This program is free software; you can redistribute it and/or modify ***** 00005 ***** it under the terms of the GNU General Public License as published by ***** 00006 ***** the Free Software Foundation; either version 2 of the License, or ***** 00007 ***** (at your option) any later version. ***** 00008 ***** ***** 00009 ***** This program is distributed in the hope that it will be useful, ***** 00010 ***** but WITHOUT ANY WARRANTY; without even the implied warranty of ***** 00011 ***** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ***** 00012 ***** GNU General Public License for more details. ***** 00013 ***** ***** 00014 ***** You should have received a copy of the GNU General Public License ***** 00015 ***** along with this program; if not, write to the Free Software ***** 00016 ***** Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ***** 00017 ***************************************************************************************************/ 00018 #include "mcsimulation.h" 00019 #include "configurationdatabase.h" 00020 00021 #include <cmath> 00022 using std::sqrt; 00023 00024 MC_Simulation::MC_Simulation(const ConfigurationDatabase &conf):BaseSimulation(conf) 00025 { 00026 m_temperature = 0.0; 00027 m_accumPotentialTotal = 0.0; 00028 m_accumPotentialSQ = 0.0; 00029 } 00030 00031 double MC_Simulation::temperature() const 00032 { 00033 return m_temperature; 00034 } 00035 00036 void MC_Simulation::setTemperature(double temperature) 00037 { 00038 m_temperature = temperature; 00039 } 00040 00041 void MC_Simulation::writeAverages(ostream &out, const Cluster &cluster) 00042 { 00043 double averagePotentialEnergy = 0.0, fluctuationPotentialEnergy = 0.0; 00044 00045 //Calculate the averages 00046 averagePotentialEnergy = m_accumPotentialTotal/m_runSteps; 00047 m_accumPotentialSQ = (m_accumPotentialSQ/m_runSteps) - (averagePotentialEnergy*averagePotentialEnergy); 00048 if (m_accumPotentialSQ > 0.0) 00049 fluctuationPotentialEnergy = sqrt(m_accumPotentialSQ); 00050 00051 //Write out the averages 00052 out << " Average potential energy: " << averagePotentialEnergy << " ± " << fluctuationPotentialEnergy << endl; 00053 out << " Total time for run: " << m_runSteps * m_changeInStep << endl; 00054 }