From 2c01f1f20a4543b62a96320c02a87aa7d09334f8 Mon Sep 17 00:00:00 2001 From: Giovanni Bussi <giovanni.bussi@gmail.com> Date: Wed, 22 Apr 2015 17:54:40 +0200 Subject: [PATCH] More virial components I added the possibility to dump the 9 components of the virial from the driver. --- src/cltools/Driver.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cltools/Driver.cpp b/src/cltools/Driver.cpp index f13d471d8..73b1b0e90 100644 --- a/src/cltools/Driver.cpp +++ b/src/cltools/Driver.cpp @@ -162,6 +162,7 @@ void Driver<real>::registerKeywords( Keywords& keys ){ keys.add("optional","--length-units","units for length, either as a string or a number"); keys.add("optional","--dump-forces","dump the forces on a file"); keys.add("optional","--dump-forces-fmt","( default=%%f ) the format to use to dump the forces"); + keys.addFlag("--dump-full-virial",false,"with --dump-forces, it dumps the 9 components of the virial"); keys.add("optional","--pdb","provides a pdb with masses and charges"); keys.add("optional","--box","comma-separated box dimensions (3 for orthorombic, 9 for generic)"); keys.add("optional","--natoms","provides number of atoms - only used if file format does not contain number of atoms"); @@ -267,8 +268,10 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){ unsigned stride; parse("--trajectory-stride",stride); // are we writing forces string dumpforces(""), dumpforcesFmt("%f");; + bool dumpfullvirial=false; if(!noatoms) parse("--dump-forces",dumpforces); if(dumpforces!="") parse("--dump-forces-fmt",dumpforcesFmt); + if(dumpforces!="") parseFlag("--dump-full-virial",dumpfullvirial); string trajectory_fmt; @@ -722,8 +725,13 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){ if(fp_forces){ fprintf(fp_forces,"%d\n",natoms); + string fmtv=dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+"\n"; string fmt=dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+"\n"; - fprintf(fp_forces,fmt.c_str(),virial[0],virial[4],virial[8]); + if(dumpfullvirial){ + fprintf(fp_forces,fmtv.c_str(),virial[0],virial[1],virial[2],virial[3],virial[4],virial[5],virial[6],virial[7],virial[8]); + } else { + fprintf(fp_forces,fmt.c_str(),virial[0],virial[4],virial[8]); + } fmt="X "+fmt; for(int i=0;i<natoms;i++) fprintf(fp_forces,fmt.c_str(),forces[3*i],forces[3*i+1],forces[3*i+2]); -- GitLab