CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Post-Processing

How to plot a forces.dat file (with all the brackets)?

Register Blogs Members List Search Today's Posts Mark Forums Read

Reply
 
LinkBack Thread Tools Display Modes
Old   August 25, 2010, 03:46
Default How to plot a forces.dat file (with all the brackets)?
  #1
Senior Member
 
Charles
Join Date: Apr 2009
Posts: 173
Rep Power: 8
CapSizer is on a distinguished road
The wall forces calculation method in the recent versions of OF work very nicely, but produce a file (by default called forces.dat) with a lot of brackets (or parentheses, if you speak that variant of English). A typical line in the file looks like this:


(((6.57 128.05 364.35) (34.46 2.43 4.29)) (( etc .....) (......) (......)))


Now I really like to plot the force history as a means of judging convergence, but this format is not amenable to easy plotting with Gnuplot. One can obviously import into a spreadsheet, but that is mighty tedious. The question is this: Is there an easy way of telling Gnuplot to ignore the brackets, or is there another plotting program that can do it easily? I'm sure that one can give Gnuplot a "plot using " command that can deal with the format .... I just don't seem to get it right! Any advice?
CapSizer is offline   Reply With Quote

Old   August 25, 2010, 23:26
Default
  #2
Senior Member
 
Pavan
Join Date: May 2009
Location: Melbourne
Posts: 101
Rep Power: 7
rieuk is on a distinguished road
I plotted my stuff in Excel but only after I'd extracted and compiled all the data into one tab delimited file using a bash script. It's not too difficult. A few hours reading of bash scripting if you have no experience should be good enough.
rieuk is offline   Reply With Quote

Old   August 26, 2010, 09:05
Default
  #3
New Member
 
Malte
Join Date: Mar 2009
Posts: 2
Rep Power: 0
sinusmontis is on a distinguished road
Hello,

you could use "sed" to filter your gunplot input. Use following line in gnuplot (the input for gnuplot will be the output of sed):

plot "< sed s/[\\(\\)]//g input.dat" using 1:2


Regards,

Malte

Last edited by sinusmontis; August 26, 2010 at 09:28.
sinusmontis is offline   Reply With Quote

Old   August 26, 2010, 09:24
Default Thanks!
  #4
Senior Member
 
Charles
Join Date: Apr 2009
Posts: 173
Rep Power: 8
CapSizer is on a distinguished road
Great, thanks for that, it has got me going along the right lines!
CapSizer is offline   Reply With Quote

Old   August 27, 2010, 07:34
Default
  #5
egp
Senior Member
 
egp's Avatar
 
Eric Paterson
Join Date: Mar 2009
Location: Blacksburg, VA
Posts: 195
Blog Entries: 1
Rep Power: 7
egp is on a distinguished road
Another solution is to use python to parse and plot, e.g.,

Code:
import re
forceRegex=r"([0-9.Ee\-+]+)\s+\(+([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\)\s\(([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9
.Ee\-+]+)\)+\s\(+([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\)\s\(([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\)
+"
t = []
fpx = []; fpy = []; fpz = []
fvx = []; fvy = []; fvz = []
mpx = []; mpy = []; mpz = []
mvx = []; mvy = []; mvz = []
pipefile=open('forces.dat','r')
lines = pipefile.readlines()
for line in lines:
        match=re.search(forceRegex,line)
                if match:
                        t.append(float(match.group(1)))
                        fpx.append(float(match.group(2)))
                        fpy.append(float(match.group(3)))
                        fpz.append(float(match.group(4)))
                        fvx.append(float(match.group(5)))
                        fvy.append(float(match.group(6)))
                        fvz.append(float(match.group(7)))
                        mpx.append(float(match.group(8)))
                        mpy.append(float(match.group(9)))
                        mpz.append(float(match.group(10)))
                        mvx.append(float(match.group(11)))
                        mpy.append(float(match.group(12)))
                        mpz.append(float(match.group(13)))
xlabel('time (sec)')
ylabel('force (N)')
grid()
title('Example of using python to parse the force/moment tuples')
plot(t,fpx,'o-')
---

Of course, you need numpy and matplotlib loaded for the above example to work. I would also recommend using ipython as it permits an improved interactive environment.

If you haven't studied regular-expressions (regex), I would recommend the python regex howto and the book by H.P. Langtangen, "Python Scripting for Computational Science."
egp is offline   Reply With Quote

Old   February 22, 2012, 15:32
Default typos
  #6
New Member
 
Gabriele
Join Date: Feb 2012
Posts: 6
Rep Power: 4
protarius is on a distinguished road
I found some typos in the python code. The corrected code should be:

Code:
#!/usr/bin/python

import pylab

import re
forceRegex=r"([0-9.Ee\-+]+)\s+\(+([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\)\s\(([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9 .Ee\-+]+)\)+\s\(+([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\)\s\(([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\s([0-9.Ee\-+]+)\)+"
t = []
fpx = []; fpy = []; fpz = []
fvx = []; fvy = []; fvz = []
mpx = []; mpy = []; mpz = []
mvx = []; mvy = []; mvz = []
pipefile=open('forces.dat','r')
lines = pipefile.readlines()
for line in lines:
        match=re.search(forceRegex,line)
        if match:
                t.append(float(match.group(1)))
                fpx.append(float(match.group(2)))
                fpy.append(float(match.group(3)))
                fpz.append(float(match.group(4)))
                fvx.append(float(match.group(5)))
                fvy.append(float(match.group(6)))
                fvz.append(float(match.group(7)))
                mpx.append(float(match.group(8)))
                mpy.append(float(match.group(9)))
                mpz.append(float(match.group(10)))
                mvx.append(float(match.group(11)))
                mvy.append(float(match.group(12)))
                mvz.append(float(match.group(13)))

pylab.xlabel('time (sec)')
pylab.ylabel('force (N)')
pylab.grid(True)
##title('Example of using python to parse the force/moment tuples')
pylab.plot(t,fpx,'o-')
pylab.show()
Regards
protarius is offline   Reply With Quote

Old   February 23, 2012, 14:06
Default
  #7
Member
 
Joe
Join Date: Dec 2011
Location: Groton, CT
Posts: 67
Rep Power: 4
jferrari is on a distinguished road
Quote:
Originally Posted by CapSizer View Post
The wall forces calculation method in the recent versions of OF work very nicely, but produce a file (by default called forces.dat) with a lot of brackets (or parentheses, if you speak that variant of English). A typical line in the file looks like this:


(((6.57 128.05 364.35) (34.46 2.43 4.29)) (( etc .....) (......) (......)))


Now I really like to plot the force history as a means of judging convergence, but this format is not amenable to easy plotting with Gnuplot. One can obviously import into a spreadsheet, but that is mighty tedious. The question is this: Is there an easy way of telling Gnuplot to ignore the brackets, or is there another plotting program that can do it easily? I'm sure that one can give Gnuplot a "plot using " command that can deal with the format .... I just don't seem to get it right! Any advice?
If you're able to get the forces.dat file you should also be able to get the force coefficients. The forceCoeffs.dat file is formatted differently and is easier to use gnuplot to check the convergence.
jferrari is offline   Reply With Quote

Old   July 27, 2013, 14:00
Default
  #8
Member
 
Join Date: May 2010
Posts: 51
Rep Power: 6
hewei is on a distinguished road
Thank you very much Malte!! you freed me from huge excel working,
is there some command to read the last row data in one column? because I want to plot the residuals vs time. like
plot 'file.dat' using 1$2-last_data_in_column_2), or write command "value=last_data_in_column_2, file.dat"
in a script file?
every time I have to write "last_data_in_column_2" by hand, this is really boring.
thanks you again.
Wei
Quote:
Originally Posted by sinusmontis View Post
Hello,

you could use "sed" to filter your gunplot input. Use following line in gnuplot (the input for gnuplot will be the output of sed):

plot "< sed s/[\\(\\)]//g input.dat" using 1:2


Regards,

Malte
hewei is offline   Reply With Quote

Old   February 15, 2014, 15:00
Default
  #9
Senior Member
 
isabel
Join Date: Apr 2009
Location: Spain
Posts: 166
Rep Power: 7
isabel is on a distinguished road
Dear everybody,

I need to represent pressure and viscous forces using gnuplot. This is my forces.dat file:

# CofR : (0 0 0)
# Time forces(pressure,viscous,porous) moment(pressure,viscous,porous)
1 ((824.789 2197.69 5.61904e-13),(0.00474683 0.000806522 -8.08238e-18),(0 0 0)) ((-54.9423 20.6197 -3230.49),(-2.01631e-05 0.000118671 -0.00011563),(0 0 0))
2 ((570.161 1591.88 4.32564e-13),(0.0134802 0.00160194 2.91544e-18),(0 0 0)) ((-39.797 14.254 -3401.42),(-4.00486e-05 0.000337004 0.0229561),(0 0 0))
3 ((-70.8628 -24.5796 5.61076e-14),(0.0221518 0.0019545 2.31609e-18),(0 0 0)) ((0.61449 -1.77157 -2873.97),(-4.88625e-05 0.000553795 0.0440349),(0 0 0))
4 ((-436.165 -814.382 -2.1011e-13),(0.0287956 0.00371196 -3.41893e-18),(0 0 0)) ((20.3595 -10.9041 -1779.13),(-9.27991e-05 0.00071989 0.0575702),(0 0 0))
5 ((-337.19 -416.93 -2.2233e-13),(0.0389092 0.00995635 -2.12376e-17),(0 0 0)) ((10.4233 -8.42976 -445.623),(-0.000248909 0.00097273 0.073619),(0 0 0))

.... etcetera (many lines)



In order to plot this, I type:

plot "./postProcessing/forces/0/forces.dat" using 1:3 with lines title "pressure",\
"./postProcessing/forces/0/forces.dat" using 1:4 with lines title "viscous"


And I have this error:

plot "./postProcessing/forces/0/forces.dat" using 1:2 with lines title "pressure", "./postProcessing/forces/0/forces.dat" using 1:3 with lines title "viscous"
"forces", line 10: warning: Skipping data file with no valid points


Nevertheless, if I try using columns 1:3 and 1:4 everything is fine, żis pressure force column 3 and viscous force column 4 or am I wrong?
isabel is offline   Reply With Quote

Reply

Tags
bracket gnuplot

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
polynomial thermophysical properties II sebastian OpenFOAM Running, Solving & CFD 53 April 10, 2014 05:45
OF 1.6 | Ubuntu 9.10 (64bit) | GLIBCXX_3.4.11 not found piprus OpenFOAM Installation 22 February 25, 2010 13:43
OpenFOAM Install Script ljsh OpenFOAM Installation 82 October 12, 2009 11:47
ParaView Compilation jakaranda OpenFOAM Installation 3 October 27, 2008 12:46
plot in file with journal (text commands) Asashi FLUENT 1 August 21, 2006 07:08


All times are GMT -4. The time now is 19:43.