Source code for pybamm.parameters.process_parameter_data

import os
import json
import numpy as np


def _process_name(name, path, ext):
    if not name.endswith(ext):
        name = name + ext

    # Set the path
    if path is not None:
        # first look in the specified path
        filename = os.path.join(path, name)
        if not os.path.exists(filename):
            # then look in the "data" subfolder
            filename = os.path.join(path, "data", name)
            if not os.path.exists(filename):
                raise FileNotFoundError(
                    "Could not find file '{}' in '{}' or '{}'".format(
                        name, path, os.path.join(path, "data")
                    )
                )
    else:
        filename = name
        # Split the name (in case original name was a path)
        _, name = os.path.split(filename)

    # Remove the extension from the name
    return (filename, name.split(".")[0])


[docs] def process_1D_data(name, path=None): """ Process 1D data from a csv file """ filename, name = _process_name(name, path, ".csv") data = np.genfromtxt(filename, delimiter=",", skip_header=1) x = data[:, 0] y = data[:, 1] # Save name and data return (name, ([x], y))
[docs] def process_2D_data(name, path=None): """ Process 2D data from a JSON file """ filename, name = _process_name(name, path, ".json") with open(filename) as jsonfile: json_data = json.load(jsonfile) data = json_data["data"] data[0] = [np.array(el) for el in data[0]] data[1] = np.array(data[1]) return (name, tuple(data))
[docs] def process_2D_data_csv(name, path=None): """ Process 2D data from a csv file. Assumes data is in the form of a three columns and that all data points lie on a regular grid. The first column is assumed to be the 'slowest' changing variable and the second column the 'fastest' changing variable, which is the C convention for indexing multidimensional arrays (as opposed to the Fortran convention where the 'fastest' changing variable comes first). Parameters ---------- name : str The name to be given to the function path : str The path to the file where the three dimensional data is stored. Returns ------- formatted_data: tuple A tuple containing the name of the function and the data formatted correctly for use within three-dimensional interpolants. """ filename, name = _process_name(name, path, ".csv") data = np.genfromtxt(filename, delimiter=",", skip_header=1) x1 = np.unique(data[:, 0]) x2 = np.unique(data[:, 1]) value = data[:, 2] x = (x1, x2) value_data = value.reshape(len(x1), len(x2), order="C") formatted_data = (name, (x, value_data)) return formatted_data
[docs] def process_3D_data_csv(name, path=None): """ Process 3D data from a csv file. Assumes data is in the form of four columns and that all data points lie on a regular grid. The first column is assumed to be the 'slowest' changing variable and the third column the 'fastest' changing variable, which is the C convention for indexing multidimensional arrays (as opposed to the Fortran convention where the 'fastest' changing variable comes first). Parameters ---------- name : str The name to be given to the function path : str The path to the file where the three dimensional data is stored. Returns ------- formatted_data: tuple A tuple containing the name of the function and the data formatted correctly for use within three-dimensional interpolants. """ filename, name = _process_name(name, path, ".csv") data = np.genfromtxt(filename, delimiter=",", skip_header=1) x1 = np.unique(data[:, 0]) x2 = np.unique(data[:, 1]) x3 = np.unique(data[:, 2]) value = data[:, 3] x = (x1, x2, x3) value_data = value.reshape(len(x1), len(x2), len(x3), order="C") formatted_data = (name, (x, value_data)) return formatted_data