2

Problem 1

I am trying to read and parse a log file from a simulation. Ideally I would like to do this with pandas but I am having issues. The file in question is called log and a sample is contained below. Now I try to do

     import pandas as pd
     import numpy as np
     import csv
    
     # This method works:
     results = []
     with open('log') as inputfile:
             for row in csv.reader(inputfile):
                 results.append(row)
    
   
      # This method doesn't work:
      pd.read_csv('log') 

The error is

pandas.parser.CParserError: Error tokenizing data. C error: Expected 1 fields in line 77, saw 4

Why is this happening?

Problem 2

What is the most efficient way to parse the log file? Please keep in mind that the file will in reality be very large. Basically I want to parse the residuals for each time step (each time step is designated by Time= x) into a numpy array for plotting. Eg

smoothSolver:  Solving for gamma, Initial residual = 0.813857557031, Final residual = 6.74558898691e-06, No Iterations 2

I would want to append 0.813857557031 into an array res_gamma_init

What is the most efficient way to do this?

/*---------------------------------------------------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  2.3.x                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
Build  : 2.3.x-590d57f32fed
Exec   : simpleFoam
Date   : Oct 30 2015
Time   : 17:24:08
Host   : "jack"
PID    : 4034
Case   : /home/jack/OpenFOAM/jack-2.3.x/run/sim
nProcs : 1
sigFpe : Enabling floating point exception trapping (FOAM_SIGFPE).
fileModificationChecking : Monitoring run-time modified files using timeStampMaster
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

Create mesh for time = 0

Reading field p

Reading field U

Reading/calculating face flux field phi

Selecting incompressible transport model Newtonian
Selecting RAS turbulence model kOmegaSST
Using gammaReThetat-correlations by Langtry and Menter (2009)
gammaReThetatSSTCoeffs
{
    ca1             2;
    ce1             1;
    ca2             0.06;
    ce2             50;
    cThetat         0.03;
    sigmaf          1;
    sigmaThetat     2;
    s1              2;
    dUds            false;
    alphaK1         0.85034;
    alphaK2         1;
    alphaOmega1     0.5;
    alphaOmega2     0.85616;
    gamma1          0.5532;
    gamma2          0.4403;
    beta1           0.075;
    beta2           0.0828;
    betaStar        0.09;
    a1              0.31;
    c1              10;
    kInf            0;
    omegaInf        0;
}

No finite volume options present


SIMPLE: convergence criteria
    field p  tolerance 1e-06
    field U  tolerance 1e-06
    field "(k|omega|ReThetaTilda|nut|gamma)"     tolerance 1e-06


Starting time loop


forceCoeffs forceCoeffs:
    Not including porosity effects

Time = 1

smoothSolver:  Solving for Ux, Initial residual = 0.999999999388, Final residual = 0.00692443749034, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 0.999999994742, Final residual = 0.0027182321684, No Iterations 2
DICPCG:  Solving for p, Initial residual = 1, Final residual = 0.00976261323556, No Iterations 326
time step continuity errors : sum local = 8.88353600919, global = -0.154492041821, cumulative = -0.154492041821
smoothSolver:  Solving for omega, Initial residual = 1, Final residual = 0.0110458877993, No Iterations 2
smoothSolver:  Solving for k, Initial residual = 0.999999999804, Final residual = 0.022014322402, No Iterations 2
bounding k, min: 0 max: 0.415754458684 average: 0.410526729282
smoothSolver:  Solving for ReThetatTilda, Initial residual = 1, Final residual = 0.0259070897862, No Iterations 2
smoothSolver:  Solving for gamma, Initial residual = 1, Final residual = 1.51565684699e-05, No Iterations 2
ExecutionTime = 1.41 s  ClockTime = 1 s

forceCoeffs forceCoeffs output:
    Cm    = 0
    Cd    = -19811.1501384
    Cl    = 4.01861806726e-15
    Cl(f) = 2.00930903363e-15
    Cl(r) = 2.00930903363e-15

Time = 2

smoothSolver:  Solving for Ux, Initial residual = 0.510606164486, Final residual = 0.0151751146151, No Iterations 2
smoothSolver:  Solving for Uy, Initial residual = 0.570639175137, Final residual = 0.0164524779792, No Iterations 2
DICPCG:  Solving for p, Initial residual = 0.160667758287, Final residual = 0.00156013775625, No Iterations 143
time step continuity errors : sum local = 88.8245306208, global = 11.6476210117, cumulative = 11.4931289699
smoothSolver:  Solving for omega, Initial residual = 0.531389189498, Final residual = 0.00899532326598, No Iterations 2
smoothSolver:  Solving for k, Initial residual = 0.562103650426, Final residual = 0.0138022250836, No Iterations 2
bounding k, min: 0 max: 0.425403200237 average: 0.411310758596
smoothSolver:  Solving for ReThetatTilda, Initial residual = 0.301017401945, Final residual = 0.00693946297375, No Iterations 2
smoothSolver:  Solving for gamma, Initial residual = 0.813857557031, Final residual = 6.74558898691e-06, No Iterations 2
ExecutionTime = 2.13 s  ClockTime = 2 s

forceCoeffs forceCoeffs output:
    Cm    = 0
    Cd    = -20283.0256988
    Cl    = 3.99364280461e-15
    Cl(f) = 1.9968214023e-15
    Cl(r) = 1.9968214023e-15

Time = 3
5
  • Maybe one these answers solves your first problem: stackoverflow.com/questions/29754786/… Commented Oct 30, 2015 at 18:18
  • I tried it already. Didn't work. Commented Oct 30, 2015 at 18:19
  • I guess line 77 isn't clean csv. You could try to add the attribute skiprows=77 to the function call .read_csv() Commented Oct 30, 2015 at 18:24
  • I'll give it a try. I'm still puzzled why the alternative reader I give above works though. Thanks. Commented Oct 30, 2015 at 18:26
  • 1
    Thats strange indeed, but i'm not very familiar with pandas. So i hope someone will give an actual answer to your questions. Commented Oct 30, 2015 at 18:28

1 Answer 1

1

To answer your second question. This may help, althought the regular expression could be nicer.

line1 = 'smoothSolver:  Solving for Ux, Initial residual = 0.999999999388, Final residual = 0.00692443749034, No Iterations 2'
line2 = 'smoothSolver:  Solving for Uy, Initial residual = 0.999999994742, Final residual = 0.0027182321684, No Iterations 2'
test = [line1, line2]
import re
for line in test:
    if line.startswith('smoothSolver'):
        print re.findall(r'[residual = ][\d][.][\d]+', line)

The result in the console is:

[' 0.999999999388', ' 0.00692443749034']
[' 0.999999994742', ' 0.0027182321684']
Sign up to request clarification or add additional context in comments.

5 Comments

Great! Ill see if there is any point in using pandas if I can just use the alternative method.
I guess that would be the pythonic way of doing it. Short and simple :)
Can you post an example how the scientific notation looks like in the file?
I found a way with RegExp eventually - these things make my head hurt. Thanks for all your help. I'll be happy to accept your answer unless someone knows a way to do this easily with pandas.
No problem. Glad i could help and i hope someone comes with an actual answer to your question

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.