Skip to content

Commit

Permalink
[1D] Write CSV output using SolutionArray.write_csv
Browse files Browse the repository at this point in the history
  • Loading branch information
ischoegl authored and speth committed Mar 29, 2020
1 parent bb313ea commit afd6f3c
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import cantera as ct
try:
import pandas as pd
import tables
except:
pd = None

Expand Down
50 changes: 7 additions & 43 deletions interfaces/cython/cantera/onedim.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import numpy as np
from ._cantera import *
from .composite import Solution, SolutionArray
import csv as _csv
from math import erf
from os import path
from email.utils import formatdate
Expand Down Expand Up @@ -363,19 +362,9 @@ def write_csv(self, filename, species='X', quiet=True):
mole fractions or ``Y`` for mass fractions.
"""

z = self.grid
T = self.T
u = self.velocity
V = self.spread_rate

with open(filename, 'w', newline='') as csvfile:
writer = _csv.writer(csvfile)
writer.writerow(['z (m)', 'u (m/s)', 'V (1/s)',
'T (K)', 'rho (kg/m3)'] + self.gas.species_names)
for n in range(self.flame.n_points):
self.set_gas_state(n)
writer.writerow([z[n], u[n], V[n], T[n], self.gas.density] +
list(getattr(self.gas, species)))
# save data
cols = ('extra', 'T', 'D', species)
self.to_solution_array().write_csv(filename, cols=cols)

if not quiet:
print("Solution saved to '{0}'.".format(filename))
Expand Down Expand Up @@ -542,7 +531,7 @@ def from_pandas(self, df, restore_boundaries=True, settings=None):
settings=settings)

def write_hdf(self, filename, key=None, species='X',
mode=None, complevel=None):
mode=None, complevel=None, quiet=True):
"""
Write the solution vector to a HDF container file. Note that it is
possible to write multiple data entries to a single HDF container file.
Expand Down Expand Up @@ -597,6 +586,9 @@ def write_hdf(self, filename, key=None, species='X',
df.to_hdf(filename, key='settings', format='table',
append=True)

if not quiet:
print("Solution saved to '{0}'.".format(filename))

def read_hdf(self, filename, key=None,
restore_boundaries=True, restore_settings=True):
"""
Expand Down Expand Up @@ -997,34 +989,6 @@ def perturb(sim, i, dp):

class IonFlameBase(FlameBase):

def write_csv(self, filename, species='X', quiet=True):
"""
Write the velocity, temperature, density, electric potential,
electric field strength, and species profiles to a CSV file.
:param filename:
Output file name
:param species:
Attribute to use obtaining species profiles, e.g. ``X`` for
mole fractions or ``Y`` for mass fractions.
"""
z = self.grid
T = self.T
u = self.velocity
V = self.spread_rate
E = self.E

with open(filename, 'w', newline='') as csvfile:
writer = _csv.writer(csvfile)
writer.writerow(['z (m)', 'velocity (m/s)', 'V (1/s)', 'T (K)',
'E (V/m)', 'rho (kg/m3)'] + self.gas.species_names)
for n in range(self.flame.n_points):
self.set_gas_state(n)
writer.writerow([z[n], u[n], V[n], T[n], E[n], self.gas.density] +
list(getattr(self.gas, species)))

if not quiet:
print("Solution saved to '{0}'.".format(filename))

@property
def electric_field_enabled(self):
""" Get/Set whether or not to solve the Poisson's equation."""
Expand Down
9 changes: 5 additions & 4 deletions interfaces/cython/cantera/test/test_onedim.py
Original file line number Diff line number Diff line change
Expand Up @@ -603,11 +603,12 @@ def test_write_csv(self):

self.create_sim(2e5, 350, 'H2:1.0, O2:2.0', mech='h2o2.xml')
self.sim.write_csv(filename)
data = np.genfromtxt(filename, delimiter=',', skip_header=1)
self.assertArrayNear(data[:,0], self.sim.grid)
self.assertArrayNear(data[:,3], self.sim.T)
data = ct.SolutionArray(self.gas)
data.read_csv(filename)
self.assertArrayNear(data.grid[1:], self.sim.grid)
self.assertArrayNear(data.T[1:], self.sim.T)
k = self.gas.species_index('H2')
self.assertArrayNear(data[:,5+k], self.sim.X[k,:])
self.assertArrayNear(data.X[1:,k], self.sim.X[k,:])

def test_refine_criteria_boundscheck(self):
self.create_sim(ct.one_atm, 300.0, 'H2:1.1, O2:1, AR:5')
Expand Down

0 comments on commit afd6f3c

Please sign in to comment.