diff --git a/src/generic/DumpMassCharge.cpp b/src/generic/DumpMassCharge.cpp index effc6b9bae89f5e5da82505d30f173b2caa29a1c..e1cfb47951ee57dd5d5b82abf8693eed5890c4a1 100644 --- a/src/generic/DumpMassCharge.cpp +++ b/src/generic/DumpMassCharge.cpp @@ -96,6 +96,8 @@ class DumpMassCharge: string file; bool first; bool second; + bool print_masses; + bool print_charges; public: explicit DumpMassCharge(const ActionOptions&); ~DumpMassCharge(); @@ -115,6 +117,8 @@ void DumpMassCharge::registerKeywords( Keywords& keys ) { keys.add("compulsory","STRIDE","1","the frequency with which the atoms should be output"); keys.add("atoms", "ATOMS", "the atom indices whose charges and masses you would like to print out"); keys.add("compulsory", "FILE", "file on which to output charges and masses."); + keys.addFlag("ONLY_MASSES",false,"Only output masses to file"); + keys.addFlag("ONLY_CHARGES",false,"Only output charges to file"); } DumpMassCharge::DumpMassCharge(const ActionOptions&ao): @@ -122,7 +126,9 @@ DumpMassCharge::DumpMassCharge(const ActionOptions&ao): ActionAtomistic(ao), ActionPilot(ao), first(true), - second(true) + second(true), + print_masses(true), + print_charges(true) { vector<AtomNumber> atoms; parse("FILE",file); @@ -137,12 +143,32 @@ DumpMassCharge::DumpMassCharge(const ActionOptions&ao): } } + bool only_masses = false; + parseFlag("ONLY_MASSES",only_masses); + if(only_masses) { + print_charges = false; + log.printf(" only masses will be written to file\n"); + } + + bool only_charges = false; + parseFlag("ONLY_CHARGES",only_charges); + if(only_charges) { + print_masses = false; + log.printf(" only charges will be written to file\n"); + } + + checkRead(); log.printf(" printing the following atoms:" ); for(unsigned i=0; i<atoms.size(); ++i) log.printf(" %d",atoms[i].serial() ); log.printf("\n"); requestAtoms(atoms); + + if(only_masses && only_charges) { + plumed_merror("using both ONLY_MASSES and ONLY_CHARGES doesn't make sense"); + } + } void DumpMassCharge::prepare() { @@ -163,8 +189,8 @@ void DumpMassCharge::update() { for(unsigned i=0; i<getNumberOfAtoms(); i++) { int ii=getAbsoluteIndex(i).index(); of.printField("index",ii); - of.printField("mass",getMass(i)); - of.printField("charge",getCharge(i)); + if(print_masses) {of.printField("mass",getMass(i));} + if(print_charges) {of.printField("charge",getCharge(i));} of.printField(); } }