How to plot a forces.dat file (with all the brackets)?
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? |
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.
|
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 |
Thanks!
Great, thanks for that, it has got me going along the right lines!
|
Another solution is to use python to parse and plot, e.g.,
Code:
import re 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." |
typos
I found some typos in the python code. The corrected code should be:
Code:
#!/usr/bin/python |
Quote:
|
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:
|
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? |
Hi Protarius,
The regexp gives empty arrays for my forces.dat file. Is there anyone where I can understand the breakup of the pattern. Thanks, Balkrishna. |
With the way the forces.dat is outputted currently the following code works perfectly for me.
Code:
#!/usr/bin/python |
Helle everyone,
first thank you for the skripts! For me the skript of Gabriele worked wonderful :) thank you so much! I have small question - in OF I have a deep of 1cm in real it should be 20cm how can I scale the values of forces.dat according to the real deep? Might anyone please give my a hint how I have to modify the python script? I would be very grateful, cos I have no experience with python. Thank you and best regads, Stephie |
Just wondering the sign convention in the forces.dat file.
Example: Does +ve sign for moment mean, it is generating moment and vice versa? That means turbines rotor walls patch will have always +ve moments and compressors will have negative moment? Or counterclockwise is positive? Because my fan blades have +ve moment on the relevant axis. |
Thanks for the hint of using the sed filter in Gnuplot, it works fine!!
|
Quote:
Funny, that code works perfectly from within a jupyter notebook, but not as a script. It reads four lines (the header), then hangs :/ |
I wrote a few python scripts, if they are of any use to you:
https://damogranlabs.com/2018/09/ope...ing-shortcuts/ |
Python 3.7 working version
I was also interested in plotting the forces and came to this tread. For me the method of @balkrishna did not work. It hangs as was mentioned earlier.
I found the work Pete Bechant on github https://gist.github.com/petebachant/6334510 .This was clearly based on this tread, but also did not work for me. However, it was a nice starting point. I distilled the different parts from the code and made a different working regular expression: Code:
import matplotlib.pyplot as plt |
All times are GMT -4. The time now is 19:25. |