# | Line 56 | Line 56 | |
---|---|---|
56 | #include "applications/staticProps/GofAngle2.hpp" | |
57 | #include "applications/staticProps/GofXyz.hpp" | |
58 | #include "applications/staticProps/P2OrderParameter.hpp" | |
59 | + | #include "applications/staticProps/BondOrderParameter.hpp" |
60 | + | #include "applications/staticProps/BOPofR.hpp" |
61 | #include "applications/staticProps/RippleOP.hpp" | |
62 | #include "applications/staticProps/SCDOrderParameter.hpp" | |
63 | #include "applications/staticProps/DensityPlot.hpp" | |
# | Line 63 | Line 65 | |
65 | #if defined(HAVE_FFTW_H) || defined(HAVE_DFFTW_H) || defined(HAVE_FFTW3_H) | |
66 | #include "applications/staticProps/Hxy.hpp" | |
67 | #endif | |
68 | + | #include "applications/staticProps/RhoR.hpp" |
69 | ||
70 | using namespace oopse; | |
71 | ||
# | Line 78 | Line 81 | int main(int argc, char* argv[]){ | |
81 | exit(1) ; | |
82 | } | |
83 | ||
84 | < | |
82 | < | //get the dumpfile name and meta-data file name |
84 | > | //get the dumpfile name |
85 | std::string dumpFileName = args_info.input_arg; | |
84 | – | |
85 | – | std::string mdFileName = dumpFileName.substr(0, dumpFileName.rfind(".")) + ".md"; |
86 | – | |
87 | – | |
86 | std::string sele1; | |
87 | std::string sele2; | |
88 | + | bool userSpecifiedSelect1; |
89 | + | bool userSpecifiedSelect2; |
90 | ||
91 | + | // check the first selection argument, or set it to the environment |
92 | + | // variable, or failing that, set it to "select all" |
93 | + | |
94 | if (args_info.sele1_given) { | |
95 | sele1 = args_info.sele1_arg; | |
96 | < | }else { |
96 | > | } else { |
97 | char* sele1Env= getenv("OOPSE_SELE1"); | |
98 | if (sele1Env) { | |
99 | sele1 = sele1Env; | |
100 | < | }else if (!args_info.scd_given) { |
101 | < | sprintf( painCave.errMsg, |
99 | < | "neither --sele1 option nor $OOPSE_SELE1 is set"); |
100 | < | painCave.severity = OOPSE_ERROR; |
101 | < | painCave.isFatal = 1; |
102 | < | simError(); |
100 | > | } else { |
101 | > | sele1 = "select all"; |
102 | } | |
103 | } | |
104 | < | |
104 | > | |
105 | > | // check the second selection argument, or set it to the environment |
106 | > | // variable, or failing that, set it to "select all" |
107 | > | |
108 | if (args_info.sele2_given) { | |
109 | sele2 = args_info.sele2_arg; | |
110 | < | }else { |
110 | > | } else { |
111 | char* sele2Env = getenv("OOPSE_SELE2"); | |
112 | if (sele2Env) { | |
113 | sele2 = sele2Env; | |
114 | < | } else if (args_info.density_given) { |
114 | > | } else { |
115 | sele2 = "select all"; | |
114 | – | } else if(!args_info.scd_given && !args_info.density_given && !args_info.slab_density_given) { |
115 | – | sprintf( painCave.errMsg, |
116 | – | "neither --sele2 option nor $OOPSE_SELE2 is set"); |
117 | – | painCave.severity = OOPSE_ERROR; |
118 | – | painCave.isFatal = 1; |
119 | – | simError(); |
116 | } | |
117 | } | |
118 | ||
119 | + | |
120 | + | // Problems if sele1 wasn't specified, but |
121 | + | // if (!args_info.scd_given) { |
122 | + | // sprintf( painCave.errMsg, |
123 | + | // "neither --sele1 option nor $OOPSE_SELE1 is set"); |
124 | + | // painCave.severity = OOPSE_ERROR; |
125 | + | // painCave.isFatal = 1; |
126 | + | // simError(); |
127 | + | // } |
128 | + | // } |
129 | + | |
130 | + | // Problems if sele1 wasn't specified |
131 | + | |
132 | + | // if(!args_info.scd_given && !args_info.density_given && !args_info.slab_density_given) { |
133 | + | // sprintf( painCave.errMsg, |
134 | + | // "neither --sele2 option nor $OOPSE_SELE2 is set"); |
135 | + | // painCave.severity = OOPSE_ERROR; |
136 | + | // painCave.isFatal = 1; |
137 | + | // simError(); |
138 | + | // } |
139 | + | // } |
140 | + | |
141 | bool batchMode; | |
142 | if (args_info.scd_given){ | |
143 | if (args_info.sele1_given && args_info.sele2_given && args_info.sele3_given) { | |
144 | < | batchMode = false; |
144 | > | batchMode = false; |
145 | } else if (args_info.molname_given && args_info.begin_given && args_info.end_given) { | |
146 | < | if (args_info.begin_arg < 0 || args_info.end_arg < 0 || args_info.begin_arg > args_info.end_arg-2) { |
129 | < | sprintf( painCave.errMsg, |
130 | < | "below conditions are not satisfied:\n" |
131 | < | "0 <= begin && 0<= end && begin <= end-2\n"); |
132 | < | painCave.severity = OOPSE_ERROR; |
133 | < | painCave.isFatal = 1; |
134 | < | simError(); |
135 | < | } |
136 | < | batchMode = true; |
137 | < | } else{ |
146 | > | if (args_info.begin_arg < 0 || args_info.end_arg < 0 || args_info.begin_arg > args_info.end_arg-2) { |
147 | sprintf( painCave.errMsg, | |
148 | < | "either --sele1, --sele2, --sele3 are specified," |
149 | < | " or --molname, --begin, --end are specified\n"); |
148 | > | "below conditions are not satisfied:\n" |
149 | > | "0 <= begin && 0<= end && begin <= end-2\n"); |
150 | painCave.severity = OOPSE_ERROR; | |
151 | painCave.isFatal = 1; | |
152 | < | simError(); |
152 | > | simError(); |
153 | > | } |
154 | > | batchMode = true; |
155 | > | } else{ |
156 | > | sprintf( painCave.errMsg, |
157 | > | "either --sele1, --sele2, --sele3 are specified," |
158 | > | " or --molname, --begin, --end are specified\n"); |
159 | > | painCave.severity = OOPSE_ERROR; |
160 | > | painCave.isFatal = 1; |
161 | > | simError(); |
162 | ||
163 | } | |
164 | } | |
165 | ||
166 | //parse md file and set up the system | |
167 | SimCreator creator; | |
168 | < | SimInfo* info = creator.createSim(mdFileName); |
168 | > | std::cout << "dumpFile = " << dumpFileName << "\n"; |
169 | > | SimInfo* info = creator.createSim(dumpFileName); |
170 | ||
171 | RealType maxLen; | |
172 | if (args_info.length_given) { | |
# | Line 159 | Line 178 | int main(int argc, char* argv[]){ | |
178 | ||
179 | StaticAnalyser* analyser; | |
180 | if (args_info.gofr_given){ | |
181 | < | analyser= new GofR(info, dumpFileName, sele1, sele2, maxLen, args_info.nrbins_arg); |
181 | > | analyser= new GofR(info, dumpFileName, sele1, sele2, maxLen, |
182 | > | args_info.nbins_arg); |
183 | } else if (args_info.r_theta_given) { | |
184 | < | analyser = new GofRTheta(info, dumpFileName, sele1, sele2, maxLen, args_info.nrbins_arg, args_info.nanglebins_arg); |
184 | > | analyser = new GofRTheta(info, dumpFileName, sele1, sele2, maxLen, |
185 | > | args_info.nbins_arg, args_info.nanglebins_arg); |
186 | } else if (args_info.r_omega_given) { | |
187 | < | analyser = new GofROmega(info, dumpFileName, sele1, sele2, maxLen, args_info.nrbins_arg, args_info.nanglebins_arg); |
187 | > | analyser = new GofROmega(info, dumpFileName, sele1, sele2, maxLen, |
188 | > | args_info.nbins_arg, args_info.nanglebins_arg); |
189 | } else if (args_info.theta_omega_given) { | |
190 | < | analyser = new GofAngle2(info, dumpFileName, sele1, sele2, args_info.nanglebins_arg); |
190 | > | analyser = new GofAngle2(info, dumpFileName, sele1, sele2, |
191 | > | args_info.nanglebins_arg); |
192 | } else if (args_info.gxyz_given) { | |
193 | if (args_info.refsele_given) { | |
194 | < | analyser= new GofXyz(info, dumpFileName, sele1, sele2,args_info.refsele_arg, maxLen, args_info.nrbins_arg); |
194 | > | analyser= new GofXyz(info, dumpFileName, sele1, sele2,args_info.refsele_arg, |
195 | > | maxLen, args_info.nbins_arg); |
196 | } else { | |
197 | sprintf( painCave.errMsg, | |
198 | "--refsele must set when --gxyz is used"); | |
# | Line 177 | Line 201 | int main(int argc, char* argv[]){ | |
201 | simError(); | |
202 | } | |
203 | } else if (args_info.p2_given) { | |
204 | < | analyser = new P2OrderParameter(info, dumpFileName, sele1, sele2); |
205 | < | } else if (args_info.rp2_given){ |
206 | < | analyser = new RippleOP(info, dumpFileName, sele1, sele2); |
207 | < | }else if (args_info.scd_given) { |
208 | < | if (batchMode) { |
209 | < | analyser = new SCDOrderParameter(info, dumpFileName, args_info.molname_arg, |
210 | < | args_info.begin_arg, args_info.end_arg); |
211 | < | } else{ |
212 | < | std::string sele3 = args_info.sele3_arg; |
213 | < | analyser = new SCDOrderParameter(info, dumpFileName, sele1, sele2, sele3); |
214 | < | } |
204 | > | analyser = new P2OrderParameter(info, dumpFileName, sele1, sele2); |
205 | > | } else if (args_info.rp2_given){ |
206 | > | analyser = new RippleOP(info, dumpFileName, sele1, sele2); |
207 | > | } else if (args_info.bo_given){ |
208 | > | if (args_info.rcut_given) { |
209 | > | analyser = new BondOrderParameter(info, dumpFileName, sele1, |
210 | > | args_info.rcut_arg, |
211 | > | args_info.nbins_arg); |
212 | > | } else { |
213 | > | sprintf( painCave.errMsg, |
214 | > | "A cutoff radius (rcut) must be specified when calculating Bond Order Parameters"); |
215 | > | painCave.severity = OOPSE_ERROR; |
216 | > | painCave.isFatal = 1; |
217 | > | simError(); |
218 | > | } |
219 | > | } else if (args_info.bor_given){ |
220 | > | if (args_info.rcut_given) { |
221 | > | analyser = new BOPofR(info, dumpFileName, sele1, args_info.rcut_arg, |
222 | > | args_info.nbins_arg, maxLen); |
223 | > | } else { |
224 | > | sprintf( painCave.errMsg, |
225 | > | "A cutoff radius (rcut) must be specified when calculating Bond Order Parameters"); |
226 | > | painCave.severity = OOPSE_ERROR; |
227 | > | painCave.isFatal = 1; |
228 | > | simError(); |
229 | > | } |
230 | > | } else if (args_info.scd_given) { |
231 | > | if (batchMode) { |
232 | > | analyser = new SCDOrderParameter(info, dumpFileName, args_info.molname_arg, |
233 | > | args_info.begin_arg, args_info.end_arg); |
234 | > | } else{ |
235 | > | std::string sele3 = args_info.sele3_arg; |
236 | > | analyser = new SCDOrderParameter(info, dumpFileName, sele1, sele2, sele3); |
237 | > | } |
238 | }else if (args_info.density_given) { | |
239 | < | analyser= new DensityPlot(info, dumpFileName, sele1, sele2, maxLen, args_info.nrbins_arg); |
239 | > | analyser= new DensityPlot(info, dumpFileName, sele1, sele2, maxLen, |
240 | > | args_info.nbins_arg); |
241 | } else if (args_info.slab_density_given) { | |
242 | < | Mat3x3d hmat = info->getSnapshotManager()->getCurrentSnapshot()->getHmat(); |
243 | < | analyser = new RhoZ(info, dumpFileName, sele1, hmat(2, 2), args_info.nrbins_arg); |
242 | > | Mat3x3d hmat = info->getSnapshotManager()->getCurrentSnapshot()->getHmat(); |
243 | > | analyser = new RhoZ(info, dumpFileName, sele1, hmat(2, 2), args_info.nbins_arg); |
244 | #if defined(HAVE_FFTW_H) || defined(HAVE_DFFTW_H) || defined(HAVE_FFTW3_H) | |
245 | }else if (args_info.hxy_given) { | |
246 | < | analyser = new Hxy(info, dumpFileName, sele1, args_info.nbins_x_arg, args_info.nbins_y_arg, args_info.nrbins_arg); |
246 | > | analyser = new Hxy(info, dumpFileName, sele1, args_info.nbins_x_arg, |
247 | > | args_info.nbins_y_arg, args_info.nbins_arg); |
248 | #endif | |
249 | + | }else if (args_info.rho_r_given) { |
250 | + | if (args_info.radius_given){ |
251 | + | analyser = new RhoR(info, dumpFileName, sele1, maxLen,args_info.nbins_arg,args_info.radius_arg); |
252 | + | }else{ |
253 | + | sprintf( painCave.errMsg, |
254 | + | "A particle radius (radius) must be specified when calculating Rho(r)"); |
255 | + | painCave.severity = OOPSE_ERROR; |
256 | + | painCave.isFatal = 1; |
257 | + | simError(); |
258 | + | } |
259 | } | |
260 | < | |
260 | > | |
261 | if (args_info.output_given) { | |
262 | analyser->setOutputName(args_info.output_arg); | |
263 | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |