54#include "applications/dynamicProps/AngularVelVelOutProdCorrFunc.hpp"
55#include "applications/dynamicProps/AngularVelocityAutoOutProductCorrFunc.hpp"
56#include "applications/dynamicProps/BondCorrFunc.hpp"
57#include "applications/dynamicProps/ChargeKineticCorrFunc.hpp"
58#include "applications/dynamicProps/ChargeOrientationCorrFunc.hpp"
59#include "applications/dynamicProps/CollectiveDipoleDisplacement.hpp"
60#include "applications/dynamicProps/CurrentDensityAutoCorrFunc.hpp"
61#include "applications/dynamicProps/DipoleCorrFunc.hpp"
62#include "applications/dynamicProps/DirectionalRCorrFunc.hpp"
63#include "applications/dynamicProps/Displacement.hpp"
64#include "applications/dynamicProps/ForTorCorrFunc.hpp"
65#include "applications/dynamicProps/ForceAutoCorrFunc.hpp"
67#include "applications/dynamicProps/HBondJump.hpp"
68#include "applications/dynamicProps/HBondPersistence.hpp"
69#include "applications/dynamicProps/LegendreCorrFunc.hpp"
70#include "applications/dynamicProps/LegendreCorrFuncZ.hpp"
71#include "applications/dynamicProps/MeanDisplacement.hpp"
72#include "applications/dynamicProps/MomAngMomCorrFunc.hpp"
73#include "applications/dynamicProps/OnsagerCorrFunc.hpp"
74#include "applications/dynamicProps/RCorrFunc.hpp"
75#include "applications/dynamicProps/RotAngleDisplacement.hpp"
76#include "applications/dynamicProps/SelectionCorrFunc.hpp"
77#include "applications/dynamicProps/StressCorrFunc.hpp"
78#include "applications/dynamicProps/SystemDipoleCorrFunc.hpp"
79#include "applications/dynamicProps/ThetaCorrFunc.hpp"
80#include "applications/dynamicProps/TorForCorrFunc.hpp"
81#include "applications/dynamicProps/TorqueAutoCorrFunc.hpp"
82#include "applications/dynamicProps/VCorrFunc.hpp"
83#include "applications/dynamicProps/VelAngularVelOutProdCorrFunc.hpp"
84#include "applications/dynamicProps/VelocityAutoOutProductCorrFunc.hpp"
85#include "applications/dynamicProps/WCorrFunc.hpp"
86#include "applications/dynamicProps/cOHz.hpp"
87#include "applications/dynamicProps/SFG.hpp"
90#include "utils/Revision.hpp"
92#include "utils/simError.h"
96int main(
int argc,
char* argv[]) {
107 std::string dumpFileName = args_info.
input_arg;
115 if (args_info.sele1_given) {
116 sele1 = args_info.sele1_arg;
118 char* sele1Env = getenv(
"SELECTION1");
122 sele1 =
"select all";
129 if (args_info.sele2_given) {
130 sele2 = args_info.sele2_arg;
132 char* sele2Env = getenv(
"SELECTION2");
148 switch (args_info.privilegedAxis_arg) {
149 case privilegedAxis_arg_x:
152 case privilegedAxis_arg_y:
155 case privilegedAxis_arg_z:
177 if (args_info.length_given) {
178 maxLen = args_info.length_arg;
183 std::unique_ptr<DynamicProperty> corrFunc {
nullptr};
185 if (args_info.sdcorr_given) {
186 corrFunc = std::make_unique<SystemDipoleCorrFunc>(info, dumpFileName, sele1,
188 }
else if (args_info.selecorr_given) {
190 std::make_unique<SelectionCorrFunc>(info, dumpFileName, sele1, sele2);
191 }
else if (args_info.dcorr_given) {
193 std::make_unique<DipoleCorrFunc>(info, dumpFileName, sele1, sele2);
194 }
else if (args_info.rcorr_given) {
195 corrFunc = std::make_unique<RCorrFunc>(info, dumpFileName, sele1, sele2);
196 }
else if (args_info.r_rcorr_given) {
197 corrFunc = std::make_unique<RCorrFuncR>(info, dumpFileName, sele1, sele2);
198 }
else if (args_info.thetacorr_given) {
200 std::make_unique<ThetaCorrFunc>(info, dumpFileName, sele1, sele2);
201 }
else if (args_info.drcorr_given) {
202 corrFunc = std::make_unique<DirectionalRCorrFunc>(info, dumpFileName, sele1,
204 }
else if (args_info.rcorrZ_given) {
205 corrFunc = std::make_unique<RCorrFuncZ>(
206 info, dumpFileName, sele1, sele2, args_info.nzbins_arg, privilegedAxis);
207 }
else if (args_info.vcorr_given) {
208 corrFunc = std::make_unique<VCorrFunc>(info, dumpFileName, sele1, sele2);
209 }
else if (args_info.vcorrZ_given) {
210 corrFunc = std::make_unique<VCorrFuncZ>(info, dumpFileName, sele1, sele2);
211 }
else if (args_info.vcorrR_given) {
212 corrFunc = std::make_unique<VCorrFuncR>(info, dumpFileName, sele1, sele2);
213 }
else if (args_info.wcorr_given) {
214 corrFunc = std::make_unique<WCorrFunc>(info, dumpFileName, sele1, sele2);
215 }
else if (args_info.pjcorr_given) {
217 std::make_unique<MomAngMomCorrFunc>(info, dumpFileName, sele1, sele2);
218 }
else if (args_info.ftcorr_given) {
220 std::make_unique<ForTorCorrFunc>(info, dumpFileName, sele1, sele2);
221 }
else if (args_info.ckcorr_given) {
222 corrFunc = std::make_unique<ChargeKineticCorrFunc>(
223 info, dumpFileName, sele1, sele2, args_info.rcut_arg);
224 }
else if (args_info.cscorr_given) {
225 if (args_info.dipoleX_given && args_info.dipoleY_given &&
226 args_info.dipoleZ_given) {
227 corrFunc = std::make_unique<ChargeOrientationCorrFunc>(
228 info, dumpFileName, sele1, sele2, args_info.dipoleX_arg,
229 args_info.dipoleY_arg, args_info.dipoleZ_arg, args_info.rcut_arg);
231 }
else if (args_info.facorr_given) {
233 std::make_unique<ForceAutoCorrFunc>(info, dumpFileName, sele1, sele2);
234 }
else if (args_info.tfcorr_given) {
236 std::make_unique<TorForCorrFunc>(info, dumpFileName, sele1, sele2);
237 }
else if (args_info.tacorr_given) {
239 std::make_unique<TorqueAutoCorrFunc>(info, dumpFileName, sele1, sele2);
240 }
else if (args_info.bondcorr_given) {
241 corrFunc = std::make_unique<BondCorrFunc>(info, dumpFileName, sele1, sele2);
242 }
else if (args_info.stresscorr_given) {
244 std::make_unique<StressCorrFunc>(info, dumpFileName, sele1, sele2);
245 }
else if (args_info.freqfluccorr_given) {
247 std::make_unique<FreqFlucCorrFunc>(info, dumpFileName, sele1, sele2);
248 }
else if (args_info.lcorr_given) {
250 if (args_info.order_given)
251 order = args_info.order_arg;
253 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
254 "--order must be set if --lcorr is set\n");
255 painCave.severity = OPENMD_ERROR;
256 painCave.isFatal = 1;
260 if (args_info.seleoffset_given) {
261 corrFunc = std::make_unique<LegendreCorrFunc>(info, dumpFileName, sele1,
263 args_info.seleoffset_arg,
267 corrFunc = std::make_unique<LegendreCorrFunc>(info, dumpFileName, sele1,
270 }
else if (args_info.lcorrZ_given) {
272 if (args_info.order_given)
273 order = args_info.order_arg;
275 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
276 "--order must be set if --lcorrZ is set\n");
277 painCave.severity = OPENMD_ERROR;
278 painCave.isFatal = 1;
282 corrFunc = std::make_unique<LegendreCorrFuncZ>(
283 info, dumpFileName, sele1, sele2, order, args_info.nzbins_arg,
286 }
else if (args_info.cohZ_given) {
288 if (args_info.order_given)
289 order = args_info.order_arg;
291 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
292 "--order must be set if --cohZ is set\n");
293 painCave.severity = OPENMD_ERROR;
294 painCave.isFatal = 1;
298 corrFunc = std::make_unique<COHZ>(info, dumpFileName, sele1, sele2, order,
299 args_info.nzbins_arg, privilegedAxis);
301 }
else if (args_info.jumptime_given) {
302 corrFunc = std::make_unique<HBondJump>(
303 info, dumpFileName, sele1, sele2, args_info.OOcut_arg,
304 args_info.thetacut_arg, args_info.OHcut_arg);
305 }
else if (args_info.jumptimeZ_given) {
306 corrFunc = std::make_unique<HBondJumpZ>(
307 info, dumpFileName, sele1, sele2, args_info.OOcut_arg,
308 args_info.thetacut_arg, args_info.OHcut_arg, args_info.nzbins_arg,
310 }
else if (args_info.jumptimeR_given) {
311 if (args_info.sele3_given) {
312 corrFunc = std::make_unique<HBondJumpR>(
313 info, dumpFileName, sele1, sele2, args_info.sele3_arg,
314 args_info.OOcut_arg, args_info.thetacut_arg, args_info.OHcut_arg,
315 maxLen, args_info.nbins_arg);
317 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
318 "--sele3 must be set if --jumptimeR is set\n");
319 painCave.severity = OPENMD_ERROR;
320 painCave.isFatal = 1;
323 }
else if (args_info.persistence_given) {
324 corrFunc = std::make_unique<HBondPersistence>(
325 info, dumpFileName, sele1, sele2, args_info.OOcut_arg,
326 args_info.thetacut_arg, args_info.OHcut_arg);
327 }
else if (args_info.disp_given) {
328 corrFunc = std::make_unique<Displacement>(info, dumpFileName, sele1, sele2);
329 }
else if (args_info.dispZ_given) {
330 corrFunc = std::make_unique<DisplacementZ>(
331 info, dumpFileName, sele1, sele2, args_info.nzbins_arg, privilegedAxis);
332 }
else if (args_info.current_given) {
333 corrFunc = std::make_unique<CurrentDensityAutoCorrFunc>(info, dumpFileName,
335 }
else if (args_info.onsager_given) {
336 if (args_info.sele1_given) {
338 std::make_unique<OnsagerCorrFunc>(info, dumpFileName, sele1, sele2);
340 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
341 "--sele1 must be set for Center of Mass Rcorr\n");
342 painCave.severity = OPENMD_ERROR;
343 painCave.isFatal = 1;
346 }
else if (args_info.ddisp_given) {
347 corrFunc = std::make_unique<CollectiveDipoleDisplacement>(
348 info, dumpFileName, sele1, sele2);
349 }
else if (args_info.vaOutProdcorr_given) {
350 corrFunc = std::make_unique<VelocityAutoOutProductCorrFunc>(
351 info, dumpFileName, sele1, sele2);
352 }
else if (args_info.waOutProdcorr_given) {
353 corrFunc = std::make_unique<AngularVelocityAutoOutProductCorrFunc>(
354 info, dumpFileName, sele1, sele2);
355 }
else if (args_info.vwOutProdcorr_given) {
356 corrFunc = std::make_unique<VelAngularVelOutProdCorrFunc>(
357 info, dumpFileName, sele1, sele2);
358 }
else if (args_info.wvOutProdcorr_given) {
359 corrFunc = std::make_unique<AngularVelVelOutProdCorrFunc>(
360 info, dumpFileName, sele1, sele2);
361 }
else if (args_info.rotAngleDisp_given) {
362 corrFunc = std::make_unique<RotAngleDisplacement>(info, dumpFileName, sele1,
364 }
else if (args_info.meandisp_given) {
366 std::make_unique<MeanDisplacement>(info, dumpFileName, sele1, sele2);
367 }
else if (args_info.sfg_given) {
368 corrFunc = std::make_unique<SFG>(info, dumpFileName, sele1, sele2,
369 args_info.sfgPolarization_arg,
370 privilegedAxis, args_info.t_apod_arg,
371 args_info.t_zerofill_arg,
372 args_info.fermiCoupling_arg);
375 if (args_info.selectionMode_arg == selectionMode_arg_restart) {
376 corrFunc->setSelectionModeRestart();
378 if (args_info.output_given) { corrFunc->setOutputName(args_info.output_arg); }
380 corrFunc->setWindowingParameters(args_info.tcorr_arg,
381 args_info.nstart_arg,
383 corrFunc->doCorrelate();
void cmdline_parser_print_help(void)
Print the help.
The header file for the command line option parser generated by GNU Gengetopt version 2....
Frequency Fluctuation Correlation Function.
The only responsibility of SimCreator is to parse the meta-data file and create a SimInfo instance ba...
SimInfo * createSim(const std::string &mdFileName, bool loadInitCoords=true)
Setup Simulation.
One of the heavy-weight classes of OpenMD, SimInfo maintains objects and variables relating to the cu...
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.
Where the command line options are stored.
char * input_arg
input dump file.
int cmdline_parser(int argc, char **argv, struct gengetopt_args_info *args_info)
The command line parser.