svMultiPhysics
Loading...
Searching...
No Matches
ionic_fitzhugh_nagumo.h
1// SPDX-FileCopyrightText: Copyright (c) Stanford University, The Regents of the
2// University of California, and others. SPDX-License-Identifier: BSD-3-Clause
3
4#ifndef IONIC_FITZHUGH_NAGUMO_H
5#define IONIC_FITZHUGH_NAGUMO_H
6
7#include "ionic_model.h"
8
9#include "Vector.h"
10#include "utils.h"
11
12/**
13 * @brief FitzHugh-Nagumo ionic model.
14 *
15 * **References**:
16 * - FitzHugh, Impulses and physiological states in theoretical models of nerve
17 * membrane. Biophysical Journal (1961)
18 * - Nagumo, Arimoto, Yoshizawa. An active pulse transmission line simulating
19 * nerve axon. Proceedings of the IRE (1962).
20 */
21class FitzHughNagumo : public IonicModel {
22public:
23 /// Model label.
24 static inline const std::string label = "FN";
25
26 /// State variables.
27 static inline const InitialStates initial_X = {{"V", 1.0e-3}, {"w", 1.0e-3}};
28
29 /// Gating variables.
30 static inline const InitialStates initial_Xg = {};
31
32 /// Index of the recovery variable (w), used as calcium proxy for
33 /// electromechanical coupling.
34 static constexpr unsigned int calcium_index = 1;
35
36 /// Model parameters class.
38 public:
40 constexpr bool required = true;
41
42 add_parameter("alpha", -0.50, required);
43 add_parameter("a", 0.0, required);
44 add_parameter("b", -0.60, required);
45 add_parameter("c", 50.0, required);
46 }
47 };
48
49 /// Constructor.
52 /* Vrest_ = */ 0.0, /* Vscale_ = */ 1.0,
53 /* Tscale_ = */ 1.0, /* Voffset_ = */ 0.0) {}
54
55 /// Construct an instance of model parameters.
56 virtual std::unique_ptr<IonicModelParameters>
57 get_parameters() const override {
58 return std::make_unique<Parameters>();
59 }
60
61 /// Read model parameters from a parameter object.
62 virtual void read_parameters(const IonicModelParameters &params) override;
63
64 /// Distribute model parameters to all parallel processes.
65 virtual void distribute_parameters(const CmMod &cm_mod,
66 const cmType &cm) override;
67
68 /// Get the calcium proxy index.
69 virtual unsigned int get_calcium_index() const override {
70 return calcium_index;
71 }
72
73protected:
74 /// @name Model parameters
75 /// @{
76
77 double alpha = -0.50; ///< [1].
78 double a = 0.0; ///< [1].
79 double b = -0.60; ///< [1].
80 double c = 50.0; ///< [1].
81
82 /// @}
83
84 /// Update variable with analytical solution. This model has none, so this
85 /// method does nothing.
86 virtual void update_g(const unsigned int zone_id, const double dt,
87 const Vector<double> &X,
88 Vector<double> &Xg) const override {}
89
90 /// Model right-hand side.
91 virtual Vector<double> getf(const unsigned int zone_id,
92 const Vector<double> &X, const Vector<double> &Xg,
93 const double I_stim,
94 const double I_sac) const override;
95
96 /// Model jacobian.
97 virtual Array<double> getj(const unsigned int zone_id,
98 const Vector<double> &X, const Vector<double> &Xg,
99 const double Ksac) const override;
100};
101
102#endif
The CmMod class duplicates the data structures in the Fortran CMMOD module defined in COMU....
Definition CmMod.h:35
Model parameters class.
Definition ionic_fitzhugh_nagumo.h:37
FitzHugh-Nagumo ionic model.
Definition ionic_fitzhugh_nagumo.h:21
double alpha
[1].
Definition ionic_fitzhugh_nagumo.h:77
virtual void read_parameters(const IonicModelParameters &params) override
Read model parameters from a parameter object.
Definition ionic_fitzhugh_nagumo.cpp:6
static const InitialStates initial_X
State variables.
Definition ionic_fitzhugh_nagumo.h:27
double c
[1].
Definition ionic_fitzhugh_nagumo.h:80
double a
[1].
Definition ionic_fitzhugh_nagumo.h:78
virtual unsigned int get_calcium_index() const override
Get the calcium proxy index.
Definition ionic_fitzhugh_nagumo.h:69
virtual Array< double > getj(const unsigned int zone_id, const Vector< double > &X, const Vector< double > &Xg, const double Ksac) const override
Model jacobian.
Definition ionic_fitzhugh_nagumo.cpp:38
virtual void update_g(const unsigned int zone_id, const double dt, const Vector< double > &X, Vector< double > &Xg) const override
Definition ionic_fitzhugh_nagumo.h:86
virtual void distribute_parameters(const CmMod &cm_mod, const cmType &cm) override
Distribute model parameters to all parallel processes.
Definition ionic_fitzhugh_nagumo.cpp:15
virtual Vector< double > getf(const unsigned int zone_id, const Vector< double > &X, const Vector< double > &Xg, const double I_stim, const double I_sac) const override
Model right-hand side.
Definition ionic_fitzhugh_nagumo.cpp:25
FitzHughNagumo()
Constructor.
Definition ionic_fitzhugh_nagumo.h:50
static constexpr unsigned int calcium_index
Definition ionic_fitzhugh_nagumo.h:34
double b
[1].
Definition ionic_fitzhugh_nagumo.h:79
static const std::string label
Model label.
Definition ionic_fitzhugh_nagumo.h:24
static const InitialStates initial_Xg
Gating variables.
Definition ionic_fitzhugh_nagumo.h:30
virtual std::unique_ptr< IonicModelParameters > get_parameters() const override
Construct an instance of model parameters.
Definition ionic_fitzhugh_nagumo.h:57
Abstract ionic model class.
Definition ionic_model.h:127
std::vector< std::pair< std::string, double > > InitialStates
Definition ionic_model.h:133
Initial conditions parameters for a generic ionic model.
Definition Parameters.h:1242
void add_parameter(const std::string &label, double default_value, bool required)
Add a new parameter to this object.
Definition Parameters.h:1290
The Vector template class is used for storing int and double data.
Definition Vector.h:24
The cmType class stores data and defines methods used for mpi communication.
Definition CmMod.h:55