From 09c9148250afb0339e6d5ba035f2e580089ee5b0 Mon Sep 17 00:00:00 2001 From: athomps Date: Fri, 20 Sep 2013 16:20:55 +0000 Subject: [PATCH] Added xmgrace folder git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@10817 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- tools/xmgrace/README | 16 + tools/xmgrace/lammpsplot.cpp | 835 +++++++++++++++++++++++++++++ tools/xmgrace/lammpsplot.pdf | Bin 0 -> 71715 bytes tools/xmgrace/logplotawk.oneliner | 7 + tools/xmgrace/logplotgrep.oneliner | 6 + tools/xmgrace/plotthermodata.awk | 18 + 6 files changed, 882 insertions(+) create mode 100644 tools/xmgrace/README create mode 100644 tools/xmgrace/lammpsplot.cpp create mode 100644 tools/xmgrace/lammpsplot.pdf create mode 100644 tools/xmgrace/logplotawk.oneliner create mode 100644 tools/xmgrace/logplotgrep.oneliner create mode 100755 tools/xmgrace/plotthermodata.awk diff --git a/tools/xmgrace/README b/tools/xmgrace/README new file mode 100644 index 0000000000..4504d77dec --- /dev/null +++ b/tools/xmgrace/README @@ -0,0 +1,16 @@ +This directory contains a collection of scripts for generating xmgrace plots. +To use any of these tools, you will probably first need to +install the xmgrace plotting package: + +http://plasma-gate.weizmann.ac.il/Grace/ + +Here is a brief description of the files: + + lammpsplot.cpp: a C++ program that converts log files to xmgrace with labels + lammpsplot.pdf: documentation for lammpsplot + logplotawk.oneliner: an awk command that pipes a log file to xmgrace + logplotgrep.oneliner: a grep command that pipes a log file to xmgrace + plotthermodata.awk: an awk program that converts log files to xmgrace with labels + + + \ No newline at end of file diff --git a/tools/xmgrace/lammpsplot.cpp b/tools/xmgrace/lammpsplot.cpp new file mode 100644 index 0000000000..90a2d76ed7 --- /dev/null +++ b/tools/xmgrace/lammpsplot.cpp @@ -0,0 +1,835 @@ +// By Vikas Varshney @ vv0210 at gmail dot com + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +using std::cout; +using std::cin; +using std::endl; +using std::string; +using std::cerr; +using std::vector; + +typedef vector sentence; +typedef vector filedata; +typedef string::size_type s_type; + +vector f; + +class fd { +public: + string filename; + string property; + vector value; +}; + + +/* This function splits the sentence into array of strings seperated by " "*/ +sentence split(const string& s) { + sentence a; + s_type i=0; + while (i!=s.size()) { + while (i!=s.size() && isspace(s[i])) { + ++i; + } + + s_type j=i; + while (j!=s.size() && !isspace(s[j])) + ++j; + + if (i!=j) { + a.push_back(s.substr(i,j-i)); + i=j; + } + } + return a; +} + +/* This function add array of strings (passed as string) to a sentence */ +sentence add_strings(sentence& temp_entry, const string l) { + sentence temp=split(l); + s_type mm; + if (temp.size()!=0) + for (mm=0;mm!=temp.size();mm++) + temp_entry.push_back(temp[mm]); + else + return temp_entry; + return temp_entry; +} + +/* This function reads the logfile produced by lammps */ +void readlogfile_multi(filedata& atemp, ifstream& input, int leave_index) { + const string ll("----------------"); + const string step("Step"); + const string Mem("Memory"); + const string Loop("Loop"); + int leave=0; + string line; + s_type kk=0,mm,kkk; + s_type length; + int style; + int halffile=0; + while (getline(input,line)) { + sentence entry=split(line); + if (entry.size()!=0) + // Find keyword Memory + if (!entry[0].compare(Mem)) { + getline(input,line); + entry=split(line); + // Style = 1 means multi line format and style = 2 means single line format + if (!entry[0].compare(ll)) style=1; else if (!entry[0].compare(step)) style=2; else cout << "style not matching" << endl; + switch (style) { + case 1: { + // Read the line till ll comes up next and store it in a variable. + sentence zero; + sentence one; + + zero.push_back(entry[1]); + one.push_back(entry[2]); + getline(input,line); + entry=split(line); + do { + if (entry.size()!=0) + for(int i=0;ileave) { + atemp.clear(); + leave++; + } + } + } +} + +/* This function1 searches for a string in a sentence and return true/false*/ +bool search_string(string str, sentence sen, int& j) { + j=0; + while (j!=sen.size()) { + if (!sen[j].compare(str)) { + break; + } + j++; + } + if (j==sen.size()) return false; else return true; +} + +/* This function is used to ask user to input parameters to be plotted*/ +sentence get_userinput() { + string temp; + sentence t; + cout << "Enter the parameter(s) of which you want the plot for files, read successfully:" << endl; + getline(cin,temp); + t=split(temp); + if (!t[1].compare("cross")) + if (t.size()!=4) { + cout << "Currently only two cross parameters can be plotted \nThe syntax is s/p cross param1 param2\n" << endl; + exit(1); + } + return t; +} + +/*This function replaces certain input keywords to their appropriate words found in lammps file*/ +void transform_userinput(sentence& temp) { + if (temp.size()) { + for(int i=1;i!=temp.size();i++) { + if (!temp[i].compare("t")) temp[i].replace(0,temp[i].length(),"Temp"); + if (!temp[i].compare("p")) temp[i].replace(0,temp[i].length(),"Press"); + if (!temp[i].compare("v")) temp[i].replace(0,temp[i].length(),"Volume"); + if (!temp[i].compare("vd")) temp[i].replace(0,temp[i].length(),"E_vdwl"); + if (!temp[i].compare("te")) temp[i].replace(0,temp[i].length(),"TotEng"); + if (!temp[i].compare("ke")) temp[i].replace(0,temp[i].length(),"KinEng"); + if (!temp[i].compare("pe")) temp[i].replace(0,temp[i].length(),"PotEng"); + if (!temp[i].compare("be")) temp[i].replace(0,temp[i].length(),"E_bond"); + if (!temp[i].compare("ae")) temp[i].replace(0,temp[i].length(),"E_angle"); + if (!temp[i].compare("de")) temp[i].replace(0,temp[i].length(),"E_dihed"); + if (!temp[i].compare("ce")) temp[i].replace(0,temp[i].length(),"E_coul"); + if (!temp[i].compare("le")) temp[i].replace(0,temp[i].length(),"E_long"); + } + } +} + +/* This function searches if the parameter is present in the lammps file and return a array of + associated with the parameter stored in string */ +map > update2_userinput(sentence temp) { + if ((!temp[0].compare("s")) || (!temp[0].compare("p"))) { + s_type j; + int jtemp; + int notfind; + int notfindall=1; + map > ret; + sentence::iterator tb=temp.begin(); + for(j=0;j!=f.size();j++) + ret[*tb].push_back(0); + tb++; + + for(sentence::iterator aa=tb; aa!=temp.end(); aa++) { + notfind=1; + for(j=0;j!=f.size();j++) { + if (search_string(*aa,f[j][0],jtemp)) { + ret[*aa].push_back(jtemp); + notfind=0; + notfindall=0; + } + else + ret[*aa].push_back(0); + } + if (notfind) { + temp.erase(aa); + aa--; + } + } + + if (notfindall) { + cerr << "\nDid not find any matching parameters in any input files, read successfully. Please check!!!\n\n"; + exit(1); + } + return ret; + } + else { + cerr << "\nFirst string should be s (for series) or p (for parallel)\n\n" << endl; + exit(1); + } +} + +/* This function just print out a line with string str on standard output*/ +void print_line(string str) { + for(int i=0;i<100;i++) + cout << str; + cout << endl; +} + +/*This function reads the data from the input files*/ +void read_input(int argc, char** argv, sentence& sf,string& analysisfile) { + filedata a; + int success_filecounter=0; + int leave_index=0; + // Read the data into the file. + for (int i=1; i > x, sentence sf) { + size_t maxlen=0; + for(int i=0;i!=sf.size();i++) + maxlen=max(maxlen,sf[i].length()); + cout << print_space(maxlen+11); + for(sentence::iterator aa=++s.begin(); aa!=s.end(); aa++) + cout << *aa << "\t"; + cout << endl; + + for(int j=0;j!=f.size();j++) { + cout << "File-> " << sf[j] << print_space(maxlen-sf[j].length()+1) <<": "; + for(sentence::iterator aa=++s.begin(); aa!=s.end(); aa++) { + cout << x[*aa][j] << "\t"; + } + cout << endl; + } +} + +void plot_xmgrace(sentence s, vector data) { + ofstream out("temp"); + // Some string definitions + string s1 = "@ s"; + string s2 = " comment "; + string s3 = " legend "; + int plotiterator=0; int set; int style; + int half_data=data.size()/2; + + // Printing out X and Y axis properties + out << "@ xaxis label char size 1.500000\n"; + out << "@ xaxis ticklabel char size 1.250000\n"; + if (s[1].compare("cross")) + out << "@ xaxis label " << "\"time\""<< endl; + else + out << "@ xaxis label " << "\"" << s[2] << "\""<< endl; + out << "@ yaxis label char size 1.500000\n"; + out << "@ yaxis ticklabel char size 1.250000\n"; + + // Printing out legend properties + out << "@ legend box linestyle 0\n"; + out << "@ legend 0.25, 0.8\n"; + + // Selecting style for series or parallel plotting. + if (!s[0].compare("s")) style=1; else style=2; + + if (s[1].compare("cross")) { + if (s.size()==2) { + out << "@ yaxis label " << "\""; + for(int i=1;i!=s.size();i++) + out << s[i] << " "; + out << "\""<< endl; + } + } + else + out << "@ yaxis label " << "\"" << s[3] << "\""<< endl; + int length=data.size(); + if (!s[1].compare("cross")) length/=2; + // Storing data in file "temp" as asked (series or parallel) + for(int i=0;i!=length;i++) { + switch (style) { + case 1: { // Series Case + if (s[1].compare("cross")) { // This is executed if not cross + out << s1 << plotiterator << s2 << "\""<< data[i].property << "\"" << endl; + out << s1 << plotiterator << s3 << "\""<< data[i].property << "\"" << endl; + } + else + { + out << s1 << plotiterator << s2 << "\""<< data[i+half_data].property << " vs " << data[i].property << "\"" << endl; + out << s1 << plotiterator << s3 << "\""<< data[i+half_data].property << " vs " << data[i].property << "\"" << endl; + } + out << s1 << plotiterator << " symbol 1" << endl; + out << s1 << plotiterator << " symbol size 0.50000" << endl; + out << s1 << plotiterator << " symbol color 1" << endl; + out << s1 << plotiterator << " symbol pattern 1" << endl; + out << s1 << plotiterator << " symbol fill color "<< plotiterator+1 << endl; + out << s1 << plotiterator << " symbol fill pattern 1" << endl; + out << s1 << plotiterator << " symbol linewidth 1.0" << endl; + out << s1 << plotiterator << " symbol linestyle 1" << endl; + out << s1 << plotiterator << " symbol char 65" << endl; + out << s1 << plotiterator << " symbol char font 0" << endl; + plotiterator++; + for(int j=0;j!=data[i].value.size(); j++) + if (s[1].compare("cross")) + out << data[i].value[j] << endl; // This is executed if not cross + else + out << data[i].value[j] << " " << data[i+half_data].value[j]<< endl; // This is executed if cross + out << "&" << endl; + break; + } + + case 2: { // Parallel Case + if (s[1].compare("cross")) { + out << s1 << plotiterator << s2 << "\""<< data[i].property << ": " << data[i].filename << "\"" << endl; + if (s.size()<=2) + out << s1 << plotiterator << s3 << "\"" << data[i].filename << "\"" << endl; + else + out << s1 << plotiterator << s3 << "\""<< data[i].property << ": " << data[i].filename << "\"" << endl; + } + else { + out << s1 << plotiterator << s2 << "\""<< data[i+half_data].property << " vs " << data[i].property << ": " << data[i].filename << "\"" << endl; + out << s1 << plotiterator << s3 << "\""<< data[i+half_data].property << " vs " << data[i].property << ": " << data[i].filename << "\"" << endl; + } + out << s1 << plotiterator << " symbol 0" << endl; + out << s1 << plotiterator << " symbol size 0.50000" << endl; + out << s1 << plotiterator << " symbol color 1" << endl; + out << s1 << plotiterator << " symbol pattern 1" << endl; + out << s1 << plotiterator << " symbol fill color "<< plotiterator+1 << endl; + out << s1 << plotiterator << " symbol fill pattern 1" << endl; + out << s1 << plotiterator << " symbol linewidth 1.0" << endl; + out << s1 << plotiterator << " symbol linestyle 1" << endl; + out << s1 << plotiterator << " symbol char 65" << endl; + out << s1 << plotiterator << " symbol char font 0" << endl; + plotiterator++; + for(int j=0;j!=data[i].value.size(); j++) + if (s[1].compare("cross")) { + out << data[i].value[j] << endl; // This is executed if not cross + } + else + out << data[i].value[j] << " " << data[i+half_data].value[j]<< endl; // This is executed if cross + out << "&" << endl; + break; + } + } + } + int rv=system("xmgrace temp &"); +} +void plot_xmgrace_cross(sentence s, vector data) { + ofstream out("temp"); + // Some string definitions + string s1 = "@ s"; + string s2 = " comment "; + string s3 = " legend "; + int plotiterator=0; int set; int style; + int half_data=data.size()/2; + // Printing out X and Y axis properties + out << "@ xaxis label char size 1.500000\n"; + out << "@ xaxis ticklabel char size 1.250000\n"; + out << "@ xaxis label " << "\"" << s[2] << "\""<< endl; + out << "@ yaxis label char size 1.500000\n"; + out << "@ yaxis ticklabel char size 1.250000\n"; + out << "@ yaxis label " << "\"" << s[3] << "\""<< endl; + + // Printing out legend properties + out << "@ legend box linestyle 0\n"; + out << "@ legend 0.25, 0.8\n"; + + // Selecting style for series or parallel plotting. + if (!s[0].compare("s")) style=1; else style=2; + + // Storing data in file "temp" as asked (series or parallel) + for(int i=0;i!=data.size()/2;i++) { + switch (style) { + case 1: { // Series Case + out << s1 << plotiterator << s2 << "\""<< data[i+half_data].property << " vs " << data[i].property << "\"" << endl; + out << s1 << plotiterator << s3 << "\""<< data[i+half_data].property << " vs " << data[i].property << "\"" << endl; + out << s1 << plotiterator << " symbol 1" << endl; + out << s1 << plotiterator << " symbol size 0.50000" << endl; + out << s1 << plotiterator << " symbol color 1" << endl; + out << s1 << plotiterator << " symbol pattern 1" << endl; + out << s1 << plotiterator << " symbol fill color "<< plotiterator+1 << endl; + out << s1 << plotiterator << " symbol fill pattern 1" << endl; + out << s1 << plotiterator << " symbol linewidth 1.0" << endl; + out << s1 << plotiterator << " symbol linestyle 1" << endl; + out << s1 << plotiterator << " symbol char 65" << endl; + out << s1 << plotiterator << " symbol char font 0" << endl; + plotiterator++; + for(int j=0;j!=data[i].value.size(); j++) + out << data[i].value[j] << " " << data[i+half_data].value[j]<< endl; + out << "&" << endl; + break; + } + + case 2: { // Parallel Case + out << s1 << plotiterator << s2 << "\""<< data[i+half_data].property << " vs " << data[i].property << ": " << data[i].filename << "\"" << endl; + out << s1 << plotiterator << s3 << "\""<< data[i+half_data].property << " vs " << data[i].property << ": " << data[i].filename << "\"" << endl; + out << s1 << plotiterator << " symbol 1" << endl; + out << s1 << plotiterator << " symbol size 0.50000" << endl; + out << s1 << plotiterator << " symbol color 1" << endl; + out << s1 << plotiterator << " symbol pattern 1" << endl; + out << s1 << plotiterator << " symbol fill color "<< plotiterator+1 << endl; + out << s1 << plotiterator << " symbol fill pattern 1" << endl; + out << s1 << plotiterator << " symbol linewidth 1.0" << endl; + out << s1 << plotiterator << " symbol linestyle 1" << endl; + out << s1 << plotiterator << " symbol char 65" << endl; + out << s1 << plotiterator << " symbol char font 0" << endl; + plotiterator++; + + for(int j=0;j!=data[i].value.size(); j++) + out << data[i].value[j] << " " << data[i+half_data].value[j]<< endl; + out << "&" << endl; + break; + } + } + } + int rv=system("xmgrace temp &"); +} + +vector convert_to_float(sentence s, map > x, sentence sf) { + vector datatemp; + int style,set; + + if (!s[0].compare("s")) style=1; else style=2; + for(int i=1;i!=s.size();i++) { + fd temp; + switch (style) { + case 1: { // This is series case + set=0; + for(int j=0;j!=f.size(); j++) { + if (x[s[i]][j]) { + if (!set) { + temp.filename="Allfiles"; + temp.property=s[i]; + set=1; + } + for(int tt=1;tt!=f[j].size();tt++) { + float t=atof(&f[j][tt][x[s[i]][j]][0]); + temp.value.push_back(t); + } + } + // datatemp.push_back(temp); + } + datatemp.push_back(temp); + break; + } + case 2: { // This is parallel case. + for(int j=0;j!=f.size(); j++) { + if (x[s[i]][j]) { + temp.filename=sf[j]; + temp.property=s[i]; + temp.value.clear(); + for(int tt=1;tt!=f[j].size();tt++) { + float t= 0.0; + if ((f[j][tt][x[s[i]][j]].compare("nan"))) + t = atof(&f[j][tt][x[s[i]][j]][0]); + temp.value.push_back(t); + } + datatemp.push_back(temp); + } + else if (!s[i].compare("Step")) { + temp.filename=sf[j]; + temp.property=s[i]; + temp.value.clear(); + for(int tt=1;tt!=f[j].size();tt++) { + float t=atof(&f[j][tt][x[s[i]][j]][0]); + temp.value.push_back(t); + } + datatemp.push_back(temp); + } + } + break; + } + } + } + return datatemp; +} + +void do_averageall(vector x,int start,int end) { + for(int i=0;i!=x.size();i++) { + double average=0; + double stdev=0; + int finish; + if (end==0) + finish=x[i].value.size(); + else + finish=end; + + for (int j=start;j!=finish;j++) + average+=x[i].value[j]; + average/=(double)(finish-start); + for (int j=start;j!=finish;j++) + stdev+=pow((x[i].value[j]-average),2); + stdev/=(double)(finish-1-start); + stdev=sqrt(stdev); + cout << x[i].filename << ": " << x[i].property << "--- " << average << " " << stdev << " " << start << " " << finish << " Total Size " << x[i].value.size() << endl; + } +} + +void do_averagesingle(vector x,int start,int end, string str) { + for(int i=0;i!=x.size();i++) { + if (!x[i].filename.compare(str)) { + float average=0; + float stdev=0; + int finish; + if (end==0) finish=x[i].value.size(); + for (int j=start;j!=finish;j++) + average+=x[i].value[j]; + average/=(double)(finish-start); + for (int j=start;j!=finish;j++) + stdev+=pow((x[i].value[j]-average),2); + stdev/=(double)(finish-1-start); + stdev=sqrt(stdev); + cout << x[i].filename << ": " << x[i].property << "--- " << average << " " << stdev << " " << start << " " << finish << endl; + } + } +} + +void do_scale_single(vector &x,float factor, string filename, string property) { + for(int i=0;i!=x.size();i++) + if ((!x[i].filename.compare(filename)) && (!x[i].property.compare(property))) { + fd temp; + temp.filename=filename; + temp.property=property+".scl"; + for (int j=0;j!=x[i].value.size();j++) + temp.value.push_back(x[i].value[j]*factor); + x.push_back(temp); + } +} + +void do_inverse_single(vector &x, string filename, string property) { + for(int i=0;i!=x.size();i++) + if ((!x[i].filename.compare(filename)) && (!x[i].property.compare(property))) { + fd temp; + temp.filename=filename; + temp.property=property+".inv"; + for (int j=0;j!=x[i].value.size();j++) + temp.value.push_back(1.0/x[i].value[j]); + x.push_back(temp); + } +} + +void do_write_data(vector x, sentence line) { + // int startvalue,endvalue; + // if (!line_data[1].compare("start")) startvalue=0; else startvalue=atoi(&line_data[2][0]); + // if (!line_data[2].compare("end")) endvalue=0; else endvalue=atoi(&line_data[3][0]); + // for(int j=3;j!=line.size();j++) + // for(int i=0;i!=x.size();i++) + // if (!x[i].property.compare(line[i])) { + // // Create a filename + // // open a file. + // // Write the data + // } +} + +void do_subtract(vector& x, sentence line) { + int indexfile1=-1; + int indexfile2=-1; + int minlength; + for(int i=0;i!=x.size();i++) + if ((!x[i].property.compare(line[1])) && (!x[i].filename.compare(line[3]))) + indexfile1=i; + for(int i=0;i!=x.size();i++) + if ((!x[i].property.compare(line[2])) && (!x[i].filename.compare(line[3]))) + indexfile2=i; + if ((indexfile1>=0) && (indexfile2>=0)) { + fd temp; + temp.property=line[4]; + temp.filename=line[3]; + if (x[indexfile1].value.size()& x, sentence line) { + fd temp; + int length=line.size(); + temp.property=line[length-1]; + temp.filename=line[length-2]; + vector index; + int minlength=10000000; + + for(int i=0;i!=length-3;i++) + index.push_back(-1); + for(int j=1;j!=length-2;j++) + for(int i=0;i!=x.size();i++) + if ((!x[i].property.compare(line[j])) && (!x[i].filename.compare(line[length-2]))) + index[j-1]=i; + + for(int i=0;i!=length-3;i++) { + if (index[i]>-1) + if (minlength>x[index[i]].value.size()) + minlength=x[index[i]].value.size(); + } + + for (int j=0;j!=minlength;j++) { + float value=0; + for (int i=0;i!=length-2;i++) + if (index[i]>0) + value+=x[index[i]].value[j]; + temp.value.push_back(value); + } + x.push_back(temp); +} + +void do_analysis(vector &data,string file) { + ifstream inp_anal(file.c_str()); + if (inp_anal) { + string line; + while(getline(inp_anal,line)) { + sentence line_data=split(line); + + // Average + if (!line_data[0].compare("average")) { + int startvalue,endvalue; + if (!line_data[2].compare("start")) startvalue=0; else startvalue=atoi(&line_data[2][0]); + if (!line_data[3].compare("end")) endvalue=0; else endvalue=atoi(&line_data[3][0]); + if (!line_data[1].compare("all")) + do_averageall(data,startvalue,endvalue); + else + do_averagesingle(data,startvalue,endvalue,line_data[1]); + } + + // Scale + if (!line_data[0].compare("scale")) { + float factor=atof(&line_data[3][0]); + do_scale_single(data,factor,line_data[1],line_data[2]); + } + + // Inverse + if (!line_data[0].compare("inverse")) + do_inverse_single(data,line_data[1],line_data[2]); + + // Write Data + if (!line_data[0].compare("write")) + do_write_data(data,line_data); + + // Add : Think about it and write + if (!line_data[0].compare("write")) { + do_add(data,line_data); + } + // Subtract : Think about it and write + if (!line_data[0].compare("subtract")) { + cout << "coming here" << endl; + do_subtract(data,line_data); + } + + if (!line_data[0].compare("graph")) { + } + + } +} +} + +void print_start() { +int rv=system("clear "); +cout << endl; +cout << "Files Read: --- " << endl; +} + +int main (int argc, char **argv) { + sentence s; + sentence stringfile; + string anal_file=""; + vector data; + map > inp_index; + print_start(); + read_input(argc,argv,stringfile,anal_file); // Read the input file + s=get_userinput(); // Read the parameters + transform_userinput(s); // Transform the parameters to correct names + inp_index=update2_userinput(s); // Assign indices + print_file_index_output(s,inp_index,stringfile); // Print file index information + data=convert_to_float(s,inp_index,stringfile); // Convert the stored data in float formation + if (anal_file.size()) + do_analysis(data,anal_file); // Do analysis if wanted. + plot_xmgrace(s,data); // Plot the data in xmgrace + return 0; +} diff --git a/tools/xmgrace/lammpsplot.pdf b/tools/xmgrace/lammpsplot.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6ff4dcd00eb5a681ae09bd396659e9651a84f0ff GIT binary patch literal 71715 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 R5HpaK1Brq{L{=2({{g=Jm(~CP literal 0 HcmV?d00001 diff --git a/tools/xmgrace/logplotawk.oneliner b/tools/xmgrace/logplotawk.oneliner new file mode 100644 index 0000000000..98c0f80d13 --- /dev/null +++ b/tools/xmgrace/logplotawk.oneliner @@ -0,0 +1,7 @@ +# This 1-liner will extract all lines from +# the 3rd run in a log file and plot +# column 8 against column 1 +# +# By Karl Hammond karlh at ugcs.caltech.edu + +awk '/Step/ {n++} /Step/,/step/ {if (n==3) print}' log.lammps | grep -iv step | xmgrace -block - -bxy 1:8 diff --git a/tools/xmgrace/logplotgrep.oneliner b/tools/xmgrace/logplotgrep.oneliner new file mode 100644 index 0000000000..46d94c0cfa --- /dev/null +++ b/tools/xmgrace/logplotgrep.oneliner @@ -0,0 +1,6 @@ +# This 1-liner will extract up to a billion lines from +# a simple log file and plot all the columns +# +# by Aidan Thompson athomps at sandia.gov + + grep -A1000000000 Step log.lammps | grep -v Step | xmgrace -nxy - diff --git a/tools/xmgrace/plotthermodata.awk b/tools/xmgrace/plotthermodata.awk new file mode 100755 index 0000000000..ac7df103f8 --- /dev/null +++ b/tools/xmgrace/plotthermodata.awk @@ -0,0 +1,18 @@ +#!/sw/bin/awk -f + +# Usage: ./plotthermodata.awk log.lammps | xmgrace -nxy - + +BEGIN { + if ( stepnum == 0 ) stepnum = 1 # if unset, pick first set of output + print "@xaxis label \"Time Step\"" +} +/Step/ { + num += 1 + if ( num != stepnum ) next + n = 0 + for (i=2; i<=NF; i++) { + print "@s" n, "legend \"" $i "\"" + n += 1 + } +} +/Step/,/step/ { if ( $0 ~ /[sS]tep/ ) next; else print }