ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/openmd/openmd.cpp
Revision: 1596
Committed: Mon Jul 25 17:30:53 2011 UTC (13 years, 9 months ago) by gezelter
File size: 7999 byte(s)
Log Message:
Updated the BlockSnapshotManager to use a specified memory footprint
in constructor and not to rely on physmem and residentMem to figure
out free memory. DynamicProps is the only program that uses the
BlockSnapshotManager, so substantial changes were needed there as
well.


File Contents

# Content
1 /*
2 * Copyright (c) 2010 The University of Notre Dame. All Rights Reserved.
3 *
4 * The University of Notre Dame grants you ("Licensee") a
5 * non-exclusive, royalty free, license to use, modify and
6 * redistribute this software in source and binary code form, provided
7 * that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the
15 * distribution.
16 *
17 * This software is provided "AS IS," without a warranty of any
18 * kind. All express or implied conditions, representations and
19 * warranties, including any implied warranty of merchantability,
20 * fitness for a particular purpose or non-infringement, are hereby
21 * excluded. The University of Notre Dame and its licensors shall not
22 * be liable for any damages suffered by licensee as a result of
23 * using, modifying or distributing the software or its
24 * derivatives. In no event will the University of Notre Dame or its
25 * licensors be liable for any lost revenue, profit or data, or for
26 * direct, indirect, special, consequential, incidental or punitive
27 * damages, however caused and regardless of the theory of liability,
28 * arising out of the use of or inability to use software, even if the
29 * University of Notre Dame has been advised of the possibility of
30 * such damages.
31 *
32 * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
33 * research, please cite the appropriate papers when you publish your
34 * work. Good starting points are:
35 *
36 * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
37 * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
38 * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).
39 * [4] Vardeman & Gezelter, in progress (2010).
40 */
41
42 #ifdef IS_MPI
43 #include <mpi.h>
44 #endif
45
46 #include <fstream>
47 #include "utils/simError.h"
48 #include "utils/CaseConversion.hpp"
49 #include "brains/Register.hpp"
50 #include "brains/SimCreator.hpp"
51 #include "brains/SimInfo.hpp"
52 #include "constraints/ZconstraintForceManager.hpp"
53 #include "restraints/RestraintForceManager.hpp"
54 #include "integrators/IntegratorFactory.hpp"
55 #include "integrators/Integrator.hpp"
56 #include "minimizers/MinimizerFactory.hpp"
57 #include "minimizers/Minimizer.hpp"
58 #include "restraints/ThermoIntegrationForceManager.hpp"
59
60 using namespace OpenMD;
61
62 int main(int argc,char* argv[]){
63
64 // first things first, all of the initializations
65
66 #ifdef IS_MPI
67 MPI_Init( &argc, &argv ); // the MPI communicators
68 #endif
69
70 initSimError(); // the error handler
71 srand48( 1337 ); // the random number generator.
72
73 std::string svnrev;
74 //convert a macro from compiler to a string in c++
75 STR_DEFINE(svnrev, SVN_REV );
76
77 std::string revision;
78
79 if (!svnrev.empty()) {
80 revision.assign(" Revision: " + svnrev);
81 }
82
83 revision.resize(19,' ');
84
85 #ifdef IS_MPI
86 if( worldRank == 0 ){
87 #endif
88 std::cerr <<
89 " +-----------------------------------------------------------------------+\n"<<
90 " | ____ __ ___ ____ |\n"<<
91 " | / __ \\____ ___ ____ / |/ // __ \\ The Open Molecular Dynamics |\n"<<
92 " | / / / / __ \\/ _ \\/ __ \\ / /|_/ // / / / Engine (formerly OOPSE). |\n"<<
93 " | / /_/ / /_/ / __/ / / // / / // /_/ / |\n"<<
94 " | \\____/ .___/\\___/_/ /_//_/ /_//_____/ Copyright 2004-2011 by the |\n"<<
95 " | /_/ University of Notre Dame. |\n"<<
96 " | |\n"<<
97 " | version " <<
98 OPENMD_VERSION_MAJOR << "." << OPENMD_VERSION_MINOR << revision <<
99 " http://www.openmd.net |\n"<<
100 " | |\n"<<
101 " | OpenMD is an OpenScience project. All source code is available for |\n"<<
102 " | any use whatsoever under a BSD-style license. |\n"<<
103 " | |\n"<<
104 " | Support OpenScience! If you use OpenMD or its source code in your |\n"<<
105 " | research, please cite the appropriate papers when you publish your |\n"<<
106 " | work. Good starting points are: |\n"<<
107 " | |\n"<<
108 " | [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). |\n"<<
109 " | [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). |\n"<<
110 " | [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). |\n"<<
111 " | [4] Vardeman & Gezelter, in progress (2010). |\n"<<
112 " +-----------------------------------------------------------------------+\n"<<
113 "\n";
114
115 if( argc < 2 ){
116 strcpy( painCave.errMsg, "Error, a meta-data file is needed to run.\n" );
117 painCave.isFatal = 1;
118 simError();
119 }
120 #ifdef IS_MPI
121 }
122 #endif
123
124 strcpy( checkPointMsg, "Successful number of arguments" );
125 errorCheckPoint();
126
127 //register forcefields, integrators and minimizers
128 registerAll();
129
130 //create simulation model
131 SimCreator creator;
132 SimInfo* info = creator.createSim(argv[1]);
133 Globals* simParams = info->getSimParams();
134
135 if (simParams->haveMinimizer() && simParams->haveEnsemble()) {
136 sprintf(painCave.errMsg, "Minimizer keyword and Ensemble keyword can not exist together\n");
137 painCave.isFatal = 1;
138 simError();
139 }
140
141 if (simParams->haveMinimizer()) {
142 //create minimizer
143 Minimizer* myMinimizer = MinimizerFactory::getInstance()->createMinimizer(toUpperCopy(simParams->getMinimizer()), info);
144
145 if (myMinimizer == NULL) {
146 sprintf(painCave.errMsg, "Minimizer Factory can not create %s Minimizer\n",
147 simParams->getMinimizer().c_str());
148 painCave.isFatal = 1;
149 simError();
150 }
151
152 myMinimizer->minimize();
153 delete myMinimizer;
154 } else if (simParams->haveEnsemble()) {
155 //create Integrator
156
157 Integrator* myIntegrator = IntegratorFactory::getInstance()->createIntegrator(toUpperCopy(simParams->getEnsemble()), info);
158
159 if (myIntegrator == NULL) {
160 sprintf(painCave.errMsg, "Integrator Factory cannot create %s Integrator\n",
161 simParams->getEnsemble().c_str());
162 painCave.isFatal = 1;
163 simError();
164 }
165
166 //Thermodynamic Integration Method
167 //set the force manager for thermodynamic integration if specified
168 if (simParams->getUseThermodynamicIntegration()){
169 ForceManager* fman = new ThermoIntegrationForceManager(info);
170 myIntegrator->setForceManager(fman);
171 }
172
173 // Restraints
174 if (simParams->getUseRestraints() && !simParams->getUseThermodynamicIntegration()) {
175 ForceManager* fman = new RestraintForceManager(info);
176 myIntegrator->setForceManager(fman);
177 }
178
179 //Zconstraint-Method
180 if (simParams->getNZconsStamps() > 0) {
181 info->setNZconstraint(simParams->getNZconsStamps());
182 ForceManager* fman = new ZconstraintForceManager(info);
183 myIntegrator->setForceManager(fman);
184 }
185
186 myIntegrator->integrate();
187 delete myIntegrator;
188 }else {
189 sprintf(painCave.errMsg, "Integrator Factory can not create %s Integrator\n",
190 simParams->getEnsemble().c_str());
191 painCave.isFatal = 1;
192 simError();
193 }
194
195 delete info;
196
197
198 strcpy( checkPointMsg, "Great googly moogly! It worked!" );
199 errorCheckPoint();
200
201 #ifdef IS_MPI
202 MPI_Finalize();
203 #endif
204
205 return 0 ;
206 }

Properties

Name Value
svn:keywords Revision