/***************************************************************************
* BDFn.h *
* ------------------- *
* copyright : (C) 2013 by Francisco Naveros *
* email : fnaveros@atc.ugr.es *
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef BDFn_H_
#define BDFn_H_
/*!
* \file BDFn.h
*
* \author Francisco Naveros
* \date May 2013
*
* This file declares a class which implement six BDF (Backward Differentiation Formulas) integration methods (from
* first to sixth order BDF integration method). This method implements a progressive implementation of the
* higher order integration method using the lower order integration mehtod (BDF1->BDF2->...->BDF6). This class
* implement a fixed step integration method.
*/
#include "./FixedStep.h"
class TimeDrivenNeuronModel;
/*!
* \class BDFn
*
* \brief BDFn integration methods in CPU
*
* This class abstracts the behavior of BDF1,...,BDF6 integration methods for neurons in a
* time-driven spiking neural network.
* It includes internal model functions which define the behavior of integration methods
* (initialization, calculate next value, ...).
*
* \author Francisco Naveros
* \date May 2013
*/
class BDFn : public FixedStep {
protected:
public:
/*!
* \brief This vector stores previous neuron state variable for all neurons. This one is used as a memory.
*/
float ** PreviousNeuronState;
/*!
* \brief This vector stores the difference between previous neuron state variable for all neurons. This
* one is used as a memory.
*/
float ** D;
/*!
* \brief This constant matrix stores the coefficients of each BDF order.
*/
const static float Coeficient [7][7];
/*!
* \brief This vector contains the state of each neuron (BDF order). When the integration method is reseted (the values of the neuron model variables are
* changed outside the integration method, for instance when a neuron spikes and the membrane potential is reseted to the resting potential), the values
* store in PreviousNeuronState and D are no longer valid. In this case the order it is set to 0 and must grow in each integration step until it is reache
* the target order.
*/
int * state;
/*!
* \brief This value stores the order of the integration method.
*/
int BDForder;
/*!
* \brief Constructor of the class with parameters.
*
* It generates a new BDF object indicating the order of the method.
*
* \param NewModel time driven neuron model associated to this integration method.
* \param N_neuronStateVariables number of state variables for each cell.
* \param N_differentialNeuronState number of state variables witch are calculate with a differential equation for each cell.
* \param N_timeDependentNeuronState number of state variables witch are calculate with a time dependent equation for each cell.
* \param BDForder BDF order (1, 2, ..., 6).
*/
BDFn(TimeDrivenNeuronModel * NewModel, int N_neuronStateVariables, int N_differentialNeuronState, int N_timeDependentNeuronState, int BDForder);
/*!
* \brief Class destructor.
*
* It destroys an object of this class.
*/
~BDFn();
/*!
* \brief It calculate the new neural state variables for a defined elapsed_time.
*
* It calculate the new neural state variables for a defined elapsed_time.
*
* \param index for method with memory (e.g. BDF1ad, BDF2, BDF3, etc.).
* \param NeuronState neuron state variables of one neuron.
* \param elapsed_time integration time step.
*/
virtual void NextDifferentialEcuationValue(int index, float * NeuronState, float elapsed_time);
/*!
* \brief It prints the integration method info.
*
* It prints the current integration method characteristics.
*
* \param out The stream where it prints the information.
*
* \return The stream after the printer.
*/
virtual ostream & PrintInfo(ostream & out);
/*!
* \brief It initialize the state of the integration method for method with memory (e.g. BDF1ad, BDF2, BDF3, etc.).
*
* It initialize the state of the integration method for method with memory (e.g. BDF1ad, BDF2, BDF3, etc.).
*
* \param N_neuron number of neurons in the neuron model.
* \param inicialization vector with initial values.
*/
void InitializeStates(int N_neurons, float * initialization);
/*!
* \brief It reset the state of the integration method for method with memory (e.g. BDF1ad, BDF2, BDF3, etc.).
*
* It reset the state of the integration method for method with memory (e.g. BDF1ad, BDF2, BDF3, etc.).
*
* \param index indicate witch neuron must be reseted.
*/
void resetState(int index);
};
#endif /* BDFn_H_ */