svMultiPhysics
Loading...
Searching...
No Matches
IonicModelFitzHughNagumo.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 "IonicModel.h"
8
9#include "Vector.h"
10#include "utils.h"
11
12/**
13 * @brief FitzHugh-Nagumo ionic model.
14 *
15 * The reaction terms and default parameters follow equations 14--15 and
16 * Figure 3 of [3]. This parameterization is self-oscillatory, with an unstable
17 * equilibrium at zero.
18 *
19 * **References**:
20 * 1. [FitzHugh (1961)](https://doi.org/10.1016/S0006-3495(61)86902-6)
21 * 2. [Nagumo, Arimoto, Yoshizawa (1962)](https://doi.org/10.1109/JRPROC.1962.288235)
22 * 3. [Goktepe, Kuhl (2009)](https://doi.org/10.1002/nme.2571)
23 */
24class FitzHughNagumo : public IonicModel {
25public:
26 /// Model label.
27 static inline const std::string label = "FN";
28
29 /// State variables.
30 static inline const InitialStates initial_X = {{"V", 1.0e-3}, {"w", 1.0e-3}};
31
32 /// Gating variables.
33 static inline const InitialStates initial_Xg = {};
34
35 /// Index of the recovery variable (w), used as calcium proxy for
36 /// electromechanical coupling.
37 static constexpr unsigned int calcium_index = 1;
38
39 /// Model parameters class.
41 public:
43 constexpr bool required = true;
44
45 add_parameter("alpha", -0.50, required);
46 add_parameter("a", 0.0, required);
47 add_parameter("b", -0.60, required);
48 add_parameter("c", 50.0, required);
49 }
50 };
51
52 /// Constructor.
55 /* Vrest_ = */ 0.0, /* Vscale_ = */ 1.0,
56 /* Tscale_ = */ 1.0, /* Voffset_ = */ 0.0) {}
57
58 /// Construct an instance of model parameters.
59 virtual std::unique_ptr<IonicModelParameters>
60 get_parameters() const override {
61 return std::make_unique<Parameters>();
62 }
63
64 /// Read model parameters from a parameter object.
65 virtual void read_parameters(const IonicModelParameters &params) override;
66
67 /// Distribute model parameters to all parallel processes.
68 virtual void distribute_parameters(const CmMod &cm_mod,
69 const cmType &cm) override;
70
71 /// Get the calcium proxy index.
72 virtual unsigned int get_calcium_index() const override {
73 return calcium_index;
74 }
75
76protected:
77 /// @name Model parameters
78 /// @{
79
80 double alpha = -0.50; ///< [1].
81 double a = 0.0; ///< [1].
82 double b = -0.60; ///< [1].
83 double c = 50.0; ///< [1].
84
85 /// @}
86
87 /// Update variable with analytical solution. This model has none, so this
88 /// method does nothing.
89 virtual void update_g(const unsigned int zone_id, const double dt,
90 const Vector<double> &X,
91 Vector<double> &Xg) const override {}
92
93 /// Model right-hand side.
94 virtual Vector<double> getf(const unsigned int zone_id,
95 const Vector<double> &X, const Vector<double> &Xg,
96 const double I_stim,
97 const double I_sac) const override;
98
99 /// Model jacobian.
100 virtual Array<double> getj(const unsigned int zone_id,
101 const Vector<double> &X, const Vector<double> &Xg,
102 const double Ksac) const override;
103};
104
105#endif
The CmMod class duplicates the data structures in the Fortran CMMOD module defined in COMU....
Definition CmMod.h:36
Model parameters class.
Definition IonicModelFitzHughNagumo.h:40
FitzHugh-Nagumo ionic model.
Definition IonicModelFitzHughNagumo.h:24
double alpha
[1].
Definition IonicModelFitzHughNagumo.h:80
virtual void read_parameters(const IonicModelParameters &params) override
Read model parameters from a parameter object.
Definition IonicModelFitzHughNagumo.cpp:6
static const InitialStates initial_X
State variables.
Definition IonicModelFitzHughNagumo.h:30
double c
[1].
Definition IonicModelFitzHughNagumo.h:83
double a
[1].
Definition IonicModelFitzHughNagumo.h:81
virtual unsigned int get_calcium_index() const override
Get the calcium proxy index.
Definition IonicModelFitzHughNagumo.h:72
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 IonicModelFitzHughNagumo.cpp:38
virtual void update_g(const unsigned int zone_id, const double dt, const Vector< double > &X, Vector< double > &Xg) const override
Definition IonicModelFitzHughNagumo.h:89
virtual void distribute_parameters(const CmMod &cm_mod, const cmType &cm) override
Distribute model parameters to all parallel processes.
Definition IonicModelFitzHughNagumo.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 IonicModelFitzHughNagumo.cpp:25
FitzHughNagumo()
Constructor.
Definition IonicModelFitzHughNagumo.h:53
static constexpr unsigned int calcium_index
Definition IonicModelFitzHughNagumo.h:37
double b
[1].
Definition IonicModelFitzHughNagumo.h:82
static const std::string label
Model label.
Definition IonicModelFitzHughNagumo.h:27
static const InitialStates initial_Xg
Gating variables.
Definition IonicModelFitzHughNagumo.h:33
virtual std::unique_ptr< IonicModelParameters > get_parameters() const override
Construct an instance of model parameters.
Definition IonicModelFitzHughNagumo.h:60
Abstract ionic model class.
Definition IonicModel.h:127
std::vector< std::pair< std::string, double > > InitialStates
Definition IonicModel.h:133
Parameters for a generic ionic model.
Definition Parameters.h:1344
void add_parameter(const std::string &label, double default_value, bool required)
Add a new parameter to this object.
Definition Parameters.h:1404
The Vector template class is used for storing int and double data.
Definition Vector.h:26
The cmType class stores data and defines methods used for mpi communication.
Definition CmMod.h:56