ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/oopse/oopse.cpp
(Generate patch)

Comparing trunk/src/applications/oopse/oopse.cpp (file contents):
Revision 12 by tim, Tue Sep 28 23:24:25 2004 UTC vs.
Revision 1360 by cli2, Mon Sep 7 16:31:51 2009 UTC

# Line 1 | Line 1
1 < #include <iostream>
2 < #include <fstream>
3 < #include <cstdlib>
4 < #include <cmath>
5 < #include <cstring>
6 <
1 > /*
2 > * Copyright (c) 2006 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. Acknowledgement of the program authors must be made in any
10 > *    publication of scientific results based in part on use of the
11 > *    program.  An acceptable form of acknowledgement is citation of
12 > *    the article in which the program was described (Matthew
13 > *    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 > *    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 > *    Parallel Simulation Engine for Molecular Dynamics,"
16 > *    J. Comput. Chem. 26, pp. 252-271 (2005))
17 > *
18 > * 2. Redistributions of source code must retain the above copyright
19 > *    notice, this list of conditions and the following disclaimer.
20 > *
21 > * 3. Redistributions in binary form must reproduce the above copyright
22 > *    notice, this list of conditions and the following disclaimer in the
23 > *    documentation and/or other materials provided with the
24 > *    distribution.
25 > *
26 > * This software is provided "AS IS," without a warranty of any
27 > * kind. All express or implied conditions, representations and
28 > * warranties, including any implied warranty of merchantability,
29 > * fitness for a particular purpose or non-infringement, are hereby
30 > * excluded.  The University of Notre Dame and its licensors shall not
31 > * be liable for any damages suffered by licensee as a result of
32 > * using, modifying or distributing the software or its
33 > * derivatives. In no event will the University of Notre Dame or its
34 > * licensors be liable for any lost revenue, profit or data, or for
35 > * direct, indirect, special, consequential, incidental or punitive
36 > * damages, however caused and regardless of the theory of liability,
37 > * arising out of the use of or inability to use software, even if the
38 > * University of Notre Dame has been advised of the possibility of
39 > * such damages.
40 > */
41 >
42   #ifdef IS_MPI
43   #include <mpi.h>
44   #endif
45  
46 < #ifdef PROFILE
12 < #include "profiling/mdProfile.hpp"
13 < #endif // PROFILE
14 <
46 > #include <fstream>
47   #include "utils/simError.h"
48 < #include "brains/SimSetup.hpp"
48 > #include "utils/CaseConversion.hpp"
49 > #include "brains/Register.hpp"
50 > #include "brains/SimCreator.hpp"
51   #include "brains/SimInfo.hpp"
52 < #include "primitives/Atom.hpp"
52 > #include "constraints/ZconstraintForceManager.hpp"
53 > #include "restraints/RestraintForceManager.hpp"
54 > #include "integrators/IntegratorFactory.hpp"
55   #include "integrators/Integrator.hpp"
56 < #include "brains/Thermo.hpp"
57 < #include "io/ReadWrite.hpp"
58 < #include "minimizers/OOPSEMinimizer.hpp"
56 > #include "minimizers/MinimizerFactory.hpp"
57 > #include "minimizers/Minimizer.hpp"
58 > #include "restraints/ThermoIntegrationForceManager.hpp"
59  
60 < char* program_name;
25 < using namespace std;
60 > using namespace oopse;
61  
62 +
63   int main(int argc,char* argv[]){
64    
29  char* in_name;
30  SimSetup* startMe;
31  SimInfo* entry_plug;
32  
65    // first things first, all of the initializations
66  
67   #ifdef IS_MPI
# Line 38 | Line 70 | int main(int argc,char* argv[]){
70    
71    initSimError();           // the error handler
72    srand48( 1337 );          // the random number generator.
41
42 #ifdef PROFILE
43  initProfile();
44 #endif //profile
73    
46  // check command line arguments, and set the input file
47  
48  program_name = argv[0]; // save the program name in case we need it
49  
74   #ifdef IS_MPI
75    if( worldRank == 0 ){
76   #endif
# Line 55 | Line 79 | int main(int argc,char* argv[]){
79        "  |    ____  ____  ____  _____ ______  The OpenSource, Object-oriented   |\n" <<
80        "  |   / __ \\/ __ \\/ __ \\/ ___// ____/  Parallel Simulation Engine.       |\n" <<
81        "  |  / / / / / / / /_/ /\\__ \\/ __/                                       |\n" <<
82 <      "  | / /_/ / /_/ / ____/___/ / /___     Copyright 2004 by the             |\n" <<
82 >      "  | / /_/ / /_/ / ____/___/ / /___     Copyright 2004-2008 by the        |\n" <<
83        "  | \\____/\\____/_/    /____/_____/     University of Notre Dame.         |\n" <<
60      "  |                                    http://www.oopse.org              |\n" <<
84        "  |                                                                      |\n" <<
85 +      "  |                     version " <<
86 +      OOPSE_VERSION_MAJOR << "." << OOPSE_VERSION_MINOR << "." << OOPSE_VERSION_TINY <<
87 +      "  http://www.oopse.org              |\n" <<
88 +      "  |                                                                      |\n" <<
89        "  | OOPSE is an OpenScience project.  All source code is available for   |\n" <<
90        "  | any use subject to only one condition:                               |\n" <<
91        "  |                                                                      |\n" <<
92        "  | Any published work resulting from the use of this code must cite the |\n" <<
93        "  | following paper:       M. A. Meineke, C. F. Vardeman II, T. Lin,     |\n" <<
94        "  |                        C. J. Fennell, and J. D. Gezelter,            |\n" <<
95 <      "  |                        J. Comp. Chem. XX, XXXX (2004).               |\n" <<
95 >      "  |                        J. Comput. Chem. 26, pp. 252-271 (2005).      |\n" <<
96        "  +----------------------------------------------------------------------+\n" <<
97        "\n";
98      
# Line 78 | Line 105 | int main(int argc,char* argv[]){
105    }
106   #endif
107    
81  in_name = argv[1];
82
83 #ifdef IS_MPI
108    strcpy( checkPointMsg, "Successful number of arguments" );
109 <  MPIcheckPoint();
86 < #endif
87 <    
88 <  // create the simulation objects, and get the show on the road
109 >  errorCheckPoint();
110  
111 <  entry_plug = new SimInfo();
112 <  startMe = new SimSetup();
111 >  //register forcefields, integrators and minimizers
112 >  registerAll();
113  
114 <  startMe->setSimInfo( entry_plug );
114 >  //create simulation model
115 >  SimCreator creator;
116 >  SimInfo* info = creator.createSim(argv[1]);
117 >  Globals* simParams = info->getSimParams();
118  
119 < #ifdef PROFILE
120 <  startProfile( pro1 );
121 < #endif //profile
119 >  if (simParams->haveMinimizer() && simParams->haveEnsemble()) {
120 >    sprintf(painCave.errMsg, "Minimizer keyword and Ensemble keyword can not exist together\n");
121 >    painCave.isFatal = 1;
122 >    simError();        
123 >  }
124 >    
125 >  if (simParams->haveMinimizer()) {
126 >    //create minimizer
127 >    Minimizer* myMinimizer = MinimizerFactory::getInstance()->createMinimizer(toUpperCopy(simParams->getMinimizer()), info);
128  
129 <  startMe->parseFile( in_name );
129 >    if (myMinimizer == NULL) {
130 >      sprintf(painCave.errMsg, "Minimizer Factory can not create %s Minimizer\n",
131 >              simParams->getMinimizer().c_str());
132 >      painCave.isFatal = 1;
133 >      simError();
134 >    }
135  
136 < #ifdef PROFILE
137 <  endProfile( pro1 );
138 <  
139 <  startProfile( pro2 );
105 < #endif //profile
136 >    myMinimizer->minimize();
137 >    delete myMinimizer;
138 >  } else if (simParams->haveEnsemble()) {
139 >    //create Integrator
140  
141 <  startMe->createSim();
142 <  delete startMe;
141 >    Integrator* myIntegrator = IntegratorFactory::getInstance()->createIntegrator(toUpperCopy(simParams->getEnsemble()), info);
142 >
143 >    if (myIntegrator == NULL) {
144 >      sprintf(painCave.errMsg, "Integrator Factory can not create %s Integrator\n",
145 >              simParams->getEnsemble().c_str());
146 >      painCave.isFatal = 1;
147 >      simError();
148 >    }
149 >                
150 >    //Thermodynamic Integration Method
151 >    //set the force manager for thermodynamic integration if specified
152 >    if (simParams->getUseThermodynamicIntegration()){
153 >      ForceManager* fman = new ThermoIntegrationForceManager(info);
154 >      myIntegrator->setForceManager(fman);
155 >    }
156  
157 < #ifdef PROFILE
158 <  endProfile( pro2 );
159 <  
160 <  startProfile( pro3 );
161 < #endif //profile
157 >    // Restraints
158 >    if (simParams->getUseRestraints() && !simParams->getUseThermodynamicIntegration()) {
159 >      ForceManager* fman = new RestraintForceManager(info);
160 >      myIntegrator->setForceManager(fman);
161 >    }
162  
163 <  if (!entry_plug->has_minimizer)
164 <    entry_plug->the_integrator->integrate();
165 <  else
166 <    entry_plug->the_minimizer->minimize();
167 < #ifdef PROFILE
168 <  endProfile( pro3 );
169 <
170 <  writeProfiles();
171 < #endif //profile
163 >    //Zconstraint-Method
164 >    if (simParams->getNZconsStamps() > 0) {
165 >      info->setNZconstraint(simParams->getNZconsStamps());
166 >      ForceManager* fman = new ZconstraintForceManager(info);
167 >      myIntegrator->setForceManager(fman);
168 >    }
169 >        
170 >    myIntegrator->integrate();
171 >    delete myIntegrator;
172 >  }else {
173 >    sprintf(painCave.errMsg, "Integrator Factory can not create %s Integrator\n",
174 >            simParams->getEnsemble().c_str());
175 >    painCave.isFatal = 1;
176 >    simError();
177 >  }
178 >    
179 >  delete info;
180  
181 < #ifdef IS_MPI
182 <  strcpy( checkPointMsg, "Oh what a lovely Tea Party!" );
183 <  MPIcheckPoint();
184 <  
185 <  MPI_Finalize();        
181 >
182 >  strcpy( checkPointMsg, "Great googly moogly!  It worked!" );
183 >  errorCheckPoint();
184 >
185 > #ifdef IS_MPI  
186 >  MPI_Finalize();
187   #endif
188  
189    return 0 ;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines