ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/applications/staticProps/StaticProps.cpp
Revision: 1725
Committed: Sat May 26 18:13:43 2012 UTC (12 years, 11 months ago) by gezelter
File size: 13057 byte(s)
Log Message:
Individual ForceField classes have been removed (they were essentially
all duplicates anyway).  

ForceField has moved to brains, and since only one force field is in
play at any time, the ForceFieldFactory and Register methods have been
removed.  


File Contents

# User Rev Content
1 gezelter 507 /*
2 tim 310 * Copyright (c) 2005 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 gezelter 1390 * 1. Redistributions of source code must retain the above copyright
10 tim 310 * notice, this list of conditions and the following disclaimer.
11     *
12 gezelter 1390 * 2. Redistributions in binary form must reproduce the above copyright
13 tim 310 * 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 gezelter 1390 *
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, 24107 (2008).
39 gezelter 1665 * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010).
40     * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41 tim 310 */
42    
43     #include <iostream>
44     #include <fstream>
45     #include <string>
46    
47     #include "brains/SimCreator.hpp"
48     #include "brains/SimInfo.hpp"
49     #include "io/DumpReader.hpp"
50     #include "utils/simError.h"
51    
52 tim 311 #include "applications/staticProps/StaticPropsCmd.h"
53 tim 543 #include "applications/staticProps/StaticAnalyser.hpp"
54 tim 311 #include "applications/staticProps/GofR.hpp"
55 xsun 1213 #include "applications/staticProps/GofZ.hpp"
56 gezelter 1440 #include "applications/staticProps/GofRZ.hpp"
57 tim 311 #include "applications/staticProps/GofRAngle.hpp"
58     #include "applications/staticProps/GofAngle2.hpp"
59     #include "applications/staticProps/GofXyz.hpp"
60 gezelter 1454 #include "applications/staticProps/TwoDGofR.hpp"
61 tim 543 #include "applications/staticProps/P2OrderParameter.hpp"
62 gezelter 1039 #include "applications/staticProps/BondOrderParameter.hpp"
63 chuckv 1128 #include "applications/staticProps/BOPofR.hpp"
64 xsun 980 #include "applications/staticProps/RippleOP.hpp"
65 tim 544 #include "applications/staticProps/SCDOrderParameter.hpp"
66 tim 545 #include "applications/staticProps/DensityPlot.hpp"
67 gezelter 1629 #include "applications/staticProps/ObjectCount.hpp"
68 tim 840 #include "applications/staticProps/RhoZ.hpp"
69 gezelter 1413 #include "applications/staticProps/pAngle.hpp"
70 chuckv 1180 #include "applications/staticProps/BondAngleDistribution.hpp"
71     #include "applications/staticProps/NanoVolume.hpp"
72 gezelter 1629 #include "applications/staticProps/NanoLength.hpp"
73 gezelter 957 #if defined(HAVE_FFTW_H) || defined(HAVE_DFFTW_H) || defined(HAVE_FFTW3_H)
74 xsun 955 #include "applications/staticProps/Hxy.hpp"
75 gezelter 956 #endif
76 chuckv 1091 #include "applications/staticProps/RhoR.hpp"
77 gezelter 1629 #include "applications/staticProps/AngleR.hpp"
78     #include "applications/staticProps/TetrahedralityParam.hpp"
79 tim 311
80 gezelter 1390 using namespace OpenMD;
81 tim 310
82     int main(int argc, char* argv[]){
83    
84 gezelter 1629
85     gengetopt_args_info args_info;
86    
87     //parse the command line option
88     if (cmdline_parser (argc, argv, &args_info) != 0) {
89     exit(1) ;
90     }
91    
92     //get the dumpfile name
93     std::string dumpFileName = args_info.input_arg;
94     std::string sele1;
95     std::string sele2;
96     bool userSpecifiedSelect1;
97     bool userSpecifiedSelect2;
98    
99     // check the first selection argument, or set it to the environment
100     // variable, or failing that, set it to "select all"
101    
102     if (args_info.sele1_given) {
103     sele1 = args_info.sele1_arg;
104     } else {
105     char* sele1Env= getenv("SELECTION1");
106     if (sele1Env) {
107     sele1 = sele1Env;
108     } else {
109     sele1 = "select all";
110 chuckv 1445 }
111 gezelter 1629 }
112    
113     // check the second selection argument, or set it to the environment
114     // variable, or failing that, set it to "select all"
115    
116     if (args_info.sele2_given) {
117     sele2 = args_info.sele2_arg;
118     } else {
119     char* sele2Env = getenv("SELECTION1");
120     if (sele2Env) {
121     sele2 = sele2Env;
122     } else {
123     sele2 = "select all";
124     }
125     }
126    
127    
128     // Problems if sele1 wasn't specified, but
129     // if (!args_info.scd_given) {
130     // sprintf( painCave.errMsg,
131     // "neither --sele1 option nor $SELECTION1 is set");
132     // painCave.severity = OPENMD_ERROR;
133     // painCave.isFatal = 1;
134     // simError();
135     // }
136     // }
137    
138     // Problems if sele1 wasn't specified
139    
140     // if(!args_info.scd_given && !args_info.density_given && !args_info.slab_density_given) {
141     // sprintf( painCave.errMsg,
142     // "neither --sele2 option nor $SELECTION1 is set");
143     // painCave.severity = OPENMD_ERROR;
144     // painCave.isFatal = 1;
145     // simError();
146     // }
147     // }
148    
149     bool batchMode;
150     if (args_info.scd_given){
151     if (args_info.sele1_given && args_info.sele2_given && args_info.sele3_given) {
152     batchMode = false;
153     } else if (args_info.molname_given && args_info.begin_given && args_info.end_given) {
154     if (args_info.begin_arg < 0 || args_info.end_arg < 0 || args_info.begin_arg > args_info.end_arg-2) {
155     sprintf( painCave.errMsg,
156     "below conditions are not satisfied:\n"
157     "0 <= begin && 0<= end && begin <= end-2\n");
158     painCave.severity = OPENMD_ERROR;
159     painCave.isFatal = 1;
160     simError();
161     }
162     batchMode = true;
163     } else{
164     sprintf( painCave.errMsg,
165     "either --sele1, --sele2, --sele3 are specified,"
166     " or --molname, --begin, --end are specified\n");
167     painCave.severity = OPENMD_ERROR;
168     painCave.isFatal = 1;
169     simError();
170    
171     }
172     }
173    
174     //parse md file and set up the system
175     SimCreator creator;
176     std::cout << "dumpFile = " << dumpFileName << "\n";
177     SimInfo* info = creator.createSim(dumpFileName);
178 tim 310
179 gezelter 1629 RealType maxLen;
180     RealType zmaxLen;
181     if (args_info.length_given) {
182     maxLen = args_info.length_arg;
183     if (args_info.zlength_given){
184     zmaxLen = args_info.zlength_arg;
185 tim 310 }
186 gezelter 1629 } else {
187     Mat3x3d hmat = info->getSnapshotManager()->getCurrentSnapshot()->getHmat();
188     maxLen = std::min(std::min(hmat(0, 0), hmat(1, 1)), hmat(2, 2)) /2.0;
189     zmaxLen = hmat(2,2);
190     }
191 gezelter 1039
192 gezelter 1629 StaticAnalyser* analyser;
193     if (args_info.gofr_given){
194     analyser= new GofR(info, dumpFileName, sele1, sele2, maxLen,
195     args_info.nbins_arg);
196     } else if (args_info.gofz_given) {
197     analyser= new GofZ(info, dumpFileName, sele1, sele2, maxLen,
198     args_info.nbins_arg);
199     } else if (args_info.r_z_given) {
200     analyser = new GofRZ(info, dumpFileName, sele1, sele2, maxLen, zmaxLen,
201     args_info.nbins_arg, args_info.nbins_z_arg);
202     } else if (args_info.r_theta_given) {
203     analyser = new GofRTheta(info, dumpFileName, sele1, sele2, maxLen,
204     args_info.nbins_arg, args_info.nanglebins_arg);
205     } else if (args_info.r_omega_given) {
206     analyser = new GofROmega(info, dumpFileName, sele1, sele2, maxLen,
207     args_info.nbins_arg, args_info.nanglebins_arg);
208     } else if (args_info.theta_omega_given) {
209     analyser = new GofAngle2(info, dumpFileName, sele1, sele2,
210     args_info.nanglebins_arg);
211     } else if (args_info.gxyz_given) {
212     if (args_info.refsele_given) {
213     analyser= new GofXyz(info, dumpFileName, sele1, sele2,args_info.refsele_arg,
214     maxLen, args_info.nbins_arg);
215 chuckv 1445 } else {
216 gezelter 1629 sprintf( painCave.errMsg,
217     "--refsele must set when --gxyz is used");
218     painCave.severity = OPENMD_ERROR;
219     painCave.isFatal = 1;
220     simError();
221 tim 311 }
222 gezelter 1629 } else if (args_info.twodgofr_given){
223     if (args_info.dz_given) {
224     analyser= new TwoDGofR(info, dumpFileName, sele1, sele2, maxLen,
225     args_info.dz_arg, args_info.nbins_arg);
226     } else {
227     sprintf( painCave.errMsg,
228     "A slab width (dz) must be specified when calculating TwoDGofR");
229     painCave.severity = OPENMD_ERROR;
230     painCave.isFatal = 1;
231     simError();
232     }
233     } else if (args_info.p2_given) {
234     if (args_info.sele1_given) {
235     if (args_info.sele2_given)
236     analyser = new P2OrderParameter(info, dumpFileName, sele1, sele2);
237     else
238     analyser = new P2OrderParameter(info, dumpFileName, sele1);
239     } else {
240     sprintf( painCave.errMsg,
241     "At least one selection script (--sele1) must be specified when calculating P2 order parameters");
242     painCave.severity = OPENMD_ERROR;
243     painCave.isFatal = 1;
244     simError();
245     }
246     } else if (args_info.rp2_given){
247     analyser = new RippleOP(info, dumpFileName, sele1, sele2);
248     } else if (args_info.bo_given){
249     if (args_info.rcut_given) {
250     analyser = new BondOrderParameter(info, dumpFileName, sele1,
251     args_info.rcut_arg,
252     args_info.nbins_arg);
253     } else {
254     sprintf( painCave.errMsg,
255     "A cutoff radius (rcut) must be specified when calculating Bond Order Parameters");
256     painCave.severity = OPENMD_ERROR;
257     painCave.isFatal = 1;
258     simError();
259     }
260 tim 544
261 gezelter 1629 } else if (args_info.tet_param_given) {
262     if (args_info.rcut_given) {
263     analyser = new TetrahedralityParam(info, dumpFileName, sele1,
264     args_info.rcut_arg,
265     args_info.nbins_arg);
266     } else {
267     sprintf( painCave.errMsg,
268     "A cutoff radius (rcut) must be specified when calculating Tetrahedrality Parameters");
269     painCave.severity = OPENMD_ERROR;
270     painCave.isFatal = 1;
271     simError();
272 tim 544 }
273 gezelter 1629 } else if (args_info.bor_given){
274     if (args_info.rcut_given) {
275     analyser = new BOPofR(info, dumpFileName, sele1, args_info.rcut_arg,
276     args_info.nbins_arg, maxLen);
277 chuckv 1445 } else {
278 gezelter 1629 sprintf( painCave.errMsg,
279     "A cutoff radius (rcut) must be specified when calculating Bond Order Parameters");
280     painCave.severity = OPENMD_ERROR;
281     painCave.isFatal = 1;
282     simError();
283     }
284     } else if (args_info.bad_given){
285     if (args_info.rcut_given) {
286     analyser = new BondAngleDistribution(info, dumpFileName, sele1, args_info.rcut_arg,
287     args_info.nbins_arg);
288     } else {
289     sprintf( painCave.errMsg,
290     "A cutoff radius (rcut) must be specified when calculating Bond Angle Distributions");
291     painCave.severity = OPENMD_ERROR;
292     painCave.isFatal = 1;
293     simError();
294 gezelter 1454 }
295 gezelter 1629 } else if (args_info.scd_given) {
296     if (batchMode) {
297     analyser = new SCDOrderParameter(info, dumpFileName, args_info.molname_arg,
298     args_info.begin_arg, args_info.end_arg);
299     } else{
300     std::string sele3 = args_info.sele3_arg;
301     analyser = new SCDOrderParameter(info, dumpFileName, sele1, sele2, sele3);
302     }
303     }else if (args_info.density_given) {
304     analyser= new DensityPlot(info, dumpFileName, sele1, sele2, maxLen,
305     args_info.nbins_arg);
306     } else if (args_info.count_given) {
307     analyser = new ObjectCount(info, dumpFileName, sele1 );
308     } else if (args_info.slab_density_given) {
309     analyser = new RhoZ(info, dumpFileName, sele1, args_info.nbins_arg);
310     } else if (args_info.p_angle_given) {
311     analyser = new pAngle(info, dumpFileName, sele1, args_info.nbins_arg);
312 gezelter 957 #if defined(HAVE_FFTW_H) || defined(HAVE_DFFTW_H) || defined(HAVE_FFTW3_H)
313 gezelter 1629 }else if (args_info.hxy_given) {
314     analyser = new Hxy(info, dumpFileName, sele1, args_info.nbins_x_arg,
315     args_info.nbins_y_arg, args_info.nbins_arg);
316 gezelter 956 #endif
317 gezelter 1629 }else if (args_info.rho_r_given) {
318     if (args_info.radius_given){
319     analyser = new RhoR(info, dumpFileName, sele1, maxLen,args_info.nbins_arg,args_info.radius_arg);
320     }else{
321     sprintf( painCave.errMsg,
322     "A particle radius (radius) must be specified when calculating Rho(r)");
323     painCave.severity = OPENMD_ERROR;
324     painCave.isFatal = 1;
325     simError();
326 chuckv 1091 }
327 gezelter 1629 } else if (args_info.hullvol_given) {
328     analyser = new NanoVolume(info, dumpFileName, sele1);
329     } else if (args_info.rodlength_given) {
330     analyser = new NanoLength(info, dumpFileName, sele1);
331     } else if (args_info.angle_r_given) {
332     analyser = new AngleR(info, dumpFileName, sele1, maxLen,args_info.nbins_arg);
333     }
334    
335     if (args_info.output_given) {
336     analyser->setOutputName(args_info.output_arg);
337     }
338     if (args_info.step_given) {
339     analyser->setStep(args_info.step_arg);
340     }
341 gezelter 1039
342 gezelter 1629 analyser->process();
343    
344     delete analyser;
345     delete info;
346 tim 311
347 gezelter 1629 return 0;
348 tim 310 }
349    

Properties

Name Value
svn:executable *
svn:keywords Author Id Revision Date