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

# User Rev Content
1 gezelter 1390 /*
2 gezelter 1406 * Copyright (c) 2010 The University of Notre Dame. All Rights Reserved.
3 gezelter 1390 *
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 gezelter 1413 * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).
39 gezelter 1406 * [4] Vardeman & Gezelter, in progress (2010).
40 gezelter 1390 */
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 gezelter 1461
73 gezelter 1463 std::string svnrev;
74 gezelter 1461 //convert a macro from compiler to a string in c++
75 gezelter 1463 STR_DEFINE(svnrev, SVN_REV );
76 gezelter 1462
77 gezelter 1463 std::string revision;
78 gezelter 1461
79 gezelter 1463 if (!svnrev.empty()) {
80     revision.assign(" Revision: " + svnrev);
81     }
82    
83     revision.resize(19,' ');
84    
85 gezelter 1390 #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 gezelter 1596 " | \\____/ .___/\\___/_/ /_//_/ /_//_____/ Copyright 2004-2011 by the |\n"<<
95 gezelter 1390 " | /_/ University of Notre Dame. |\n"<<
96     " | |\n"<<
97 gezelter 1461 " | version " <<
98 gezelter 1463 OPENMD_VERSION_MAJOR << "." << OPENMD_VERSION_MINOR << revision <<
99 gezelter 1430 " http://www.openmd.net |\n"<<
100 gezelter 1390 " | |\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 gezelter 1413 " | [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). |\n"<<
111 gezelter 1406 " | [4] Vardeman & Gezelter, in progress (2010). |\n"<<
112 gezelter 1390 " +-----------------------------------------------------------------------+\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 kstocke1 1526 sprintf(painCave.errMsg, "Integrator Factory cannot create %s Integrator\n",
161 gezelter 1390 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