Source code for pyMETHES.temporal_evolution

#  Copyright (c) 2020-2021 ETH Zurich

Module for the TimeSeries class.

# Import Packages
import numpy as np
import pandas as pd

# Import modules
from pyMETHES.electrons import Electrons

[docs]class TimeSeries: """ Temporal evolution of some quantities during the simulation. The TimeSeries class stores the temporal evolution of some quantities in arrays of ever-increasing length. The TimeSeries can be exported to a pandas DataFrame for further processing. Attributes: ind_equ (int): index of equilibration time time (ndarray): simulated time num_collisions (ndarray): cumulative number of collisions num_electrons (ndarray): number of electrons num_cations (ndarray): cumulative number of cations num_anions (ndarray): cumulative number of anions mean_energy (ndarray): mean energy of electrons mean_position (ndarray): mean position of electrons var_position (ndarray): variance of electrons positions mean_velocity (ndarray): mean velocity of electrons mean_velocity_moment (ndarray): mean velocity moment of electrons """
[docs] def __init__(self, electrons: Electrons): """ Instantiates a TimeSeries. Args: electrons (Electrons): electron related data """ # number of time steps until equilibration self.ind_equ = None self.time = np.array([0]) self.num_collisions = np.array([0]) self.num_electrons = np.array([electrons.num_e]) self.num_cations = np.array([0]) self.num_anions = np.array([0]) self.mean_energy = np.array([electrons.mean_energy]) self.mean_position = electrons.mean_position self.var_position = electrons.var_position self.mean_velocity = electrons.mean_velocity self.mean_velocity_moment = electrons.mean_velocity_moment
[docs] def append_data(self, electrons: Electrons, dt: float, n_coll: int, n_cations: int, n_anions: int) -> None: """ Appends latest data to the arrays storing the temporal evolution of some quantities. Args: electrons (Electrons): current data related to the electrons dt (float): duration of the current time-step (s) n_coll (int): number of collisions during the current time-step n_cations (int): number of cations produced during the current time-step n_anions (int): number of anions produced during the current time-step """ self.time = np.append(self.time, self.time[-1] + dt) self.num_collisions = np.append(self.num_collisions, self.num_collisions[-1] + n_coll) self.num_electrons = np.append(self.num_electrons, electrons.num_e) self.num_cations = np.append(self.num_cations, self.num_cations[-1] + n_cations) self.num_anions = np.append(self.num_anions, self.num_anions[-1] + n_anions) self.mean_energy = np.append(self.mean_energy, electrons.mean_energy) self.mean_position = np.vstack([self.mean_position, electrons.mean_position]) self.var_position = np.vstack([self.var_position, electrons.var_position]) self.mean_velocity = np.vstack([self.mean_velocity, electrons.mean_velocity]) self.mean_velocity_moment = np.vstack([self.mean_velocity_moment, electrons.mean_velocity_moment])
[docs] def to_dataframe(self) -> pd.DataFrame: """ Creates a pandas DataFrame with the data containe in the TimeSeries and returns it. Returns: pandas DataFrame containing the TimeSeries data. """ n = self.time.size num_coll = np.diff(self.num_collisions, prepend=0) num_null_coll = self.num_electrons - num_coll df = pd.DataFrame(data=np.concatenate([ self.time.reshape((n, 1)), num_coll.reshape((n, 1)), num_null_coll.reshape((n, 1)), self.num_electrons.reshape((n, 1)), self.num_cations.reshape((n, 1)), self.num_anions.reshape((n, 1)), self.mean_energy.reshape((n, 1)), self.mean_position, self.var_position, self.mean_velocity, self.mean_velocity_moment ], axis=1), columns=[ 'time', 'num_collisions', 'num_null_collisions', 'num_electrons', 'num_cations', 'num_anions', 'mean_energy', 'mean_position_x', 'mean_position_y', 'mean_position_z', 'var_position_x', 'var_position_y', 'var_position_z', 'mean_velocity_x', 'mean_velocity_y', 'mean_velocity_z', 'mean_velocity_moment_x', 'mean_velocity_moment_y', 'mean_velocity_moment_z', ]) df.attrs = {'index_equilibration': self.ind_equ} return df