Skip to content
Snippets Groups Projects
Commit 2c01f1f2 authored by Giovanni Bussi's avatar Giovanni Bussi
Browse files

More virial components

I added the possibility to dump the 9 components of the virial
from the driver.
parent 44d0d5fc
No related branches found
No related tags found
No related merge requests found
...@@ -162,6 +162,7 @@ void Driver<real>::registerKeywords( Keywords& keys ){ ...@@ -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","--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","dump the forces on a file");
keys.add("optional","--dump-forces-fmt","( default=%%f ) the format to use to dump the forces"); 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","--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","--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"); 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){ ...@@ -267,8 +268,10 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
unsigned stride; parse("--trajectory-stride",stride); unsigned stride; parse("--trajectory-stride",stride);
// are we writing forces // are we writing forces
string dumpforces(""), dumpforcesFmt("%f");; string dumpforces(""), dumpforcesFmt("%f");;
bool dumpfullvirial=false;
if(!noatoms) parse("--dump-forces",dumpforces); if(!noatoms) parse("--dump-forces",dumpforces);
if(dumpforces!="") parse("--dump-forces-fmt",dumpforcesFmt); if(dumpforces!="") parse("--dump-forces-fmt",dumpforcesFmt);
if(dumpforces!="") parseFlag("--dump-full-virial",dumpfullvirial);
string trajectory_fmt; string trajectory_fmt;
...@@ -722,8 +725,13 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){ ...@@ -722,8 +725,13 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){
if(fp_forces){ if(fp_forces){
fprintf(fp_forces,"%d\n",natoms); fprintf(fp_forces,"%d\n",natoms);
string fmtv=dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+" "+dumpforcesFmt+"\n";
string fmt=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; fmt="X "+fmt;
for(int i=0;i<natoms;i++) for(int i=0;i<natoms;i++)
fprintf(fp_forces,fmt.c_str(),forces[3*i],forces[3*i+1],forces[3*i+2]); fprintf(fp_forces,fmt.c_str(),forces[3*i],forces[3*i+1],forces[3*i+2]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment