svMultiPhysics
Loading...
Searching...
No Matches
ionic_aliev_panfilov.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_ALIEV_PANFILOV_H
5#define IONIC_ALIEV_PANFILOV_H
6
7#include "ionic_model.h"
8
9#include "Vector.h"
10
11/**
12 * @brief Aliev-Panfilov ionic model.
13 *
14 * **Reference**: Aliev, Panfilov. A simple two-variable model of cardiac
15 * excitation. Chaos, Solitons and Fractals (1996).
16 */
17class AlievPanfilov : public IonicModel {
18public:
19 /// Model label.
20 static inline const std::string label = "AP";
21
22 /// State variables.
23 static inline const InitialStates initial_X = {{"V", -80.0}, {"w", 1.0e-3}};
24
25 /// Gating variables.
26 static inline const InitialStates initial_Xg = {};
27
28 /// Index of the recovery variable (w), used as calcium proxy for
29 /// electromechanical coupling.
30 static constexpr unsigned int calcium_index = 1;
31
32 /// Model parameters class.
34 public:
36 constexpr bool required = true;
37
38 add_parameter("alpha", 1.0e-2, required);
39 add_parameter("a", 2.0e-3, required);
40 add_parameter("b", 0.15, required);
41 add_parameter("c", 8.0, required);
42 add_parameter("mu1", 0.20, required);
43 add_parameter("mu2", 0.30, required);
44 }
45 };
46
47 /// Constructor.
50 /* Vrest_ = */ -80.0, /* Vscale_ = */ 100.0,
51 /* Tscale_ = */ 12.90, /* Voffset_ = */ -80.0) {}
52
53 /// Construct an instance of model parameters.
54 virtual std::unique_ptr<IonicModelParameters>
55 get_parameters() const override {
56 return std::make_unique<Parameters>();
57 }
58
59 /// Read model parameters from a parameter object.
60 virtual void read_parameters(const IonicModelParameters &params) override;
61
62 /// Distribute model parameters to all parallel processes.
63 virtual void distribute_parameters(const CmMod &cm_mod,
64 const cmType &cm) override;
65
66 /// Get the calcium proxy index.
67 virtual unsigned int get_calcium_index() const override {
68 return calcium_index;
69 }
70
71protected:
72 /// @name Model parameters
73 /// @{
74
75 /// Corresponding to parameter a in Aliev-Panfilov paper [1].
76 double alpha = 1.0e-2;
77
78 /// Corresponding to parameter epsilon0 in Aliev-Panfilov paper [1].
79 double a = 2.0e-3;
80
81 /// Corresponding to parameter a in Aliev-Panfilov paper [1].
82 double b = 0.15;
83
84 /// Corresponding to parameter k in Aliev-Panfilov paper [1].
85 double c = 8.0;
86
87 double mu1 = 0.20; ///< [1].
88 double mu2 = 0.30; ///< [1].
89
90 /// @}
91
92 /// Update variable with analytical solution. This model has none, so this
93 /// method does nothing.
94 virtual void update_g(const unsigned int zone_id, const double dt,
95 const Vector<double> &X,
96 Vector<double> &Xg) const override {}
97
98 /// Model right-hand side.
99 virtual Vector<double> getf(const unsigned int zone_id,
100 const Vector<double> &X, const Vector<double> &Xg,
101 const double I_stim,
102 const double I_sac) const override;
103
104 /// Model jacobian.
105 virtual Array<double> getj(const unsigned int zone_id,
106 const Vector<double> &X, const Vector<double> &Xg,
107 const double Ksac) const override;
108};
109
110#endif
Model parameters class.
Definition ionic_aliev_panfilov.h:33
Aliev-Panfilov ionic model.
Definition ionic_aliev_panfilov.h:17
double b
Corresponding to parameter a in Aliev-Panfilov paper [1].
Definition ionic_aliev_panfilov.h:82
double alpha
Corresponding to parameter a in Aliev-Panfilov paper [1].
Definition ionic_aliev_panfilov.h:76
static const std::string label
Model label.
Definition ionic_aliev_panfilov.h:20
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_aliev_panfilov.cpp:29
double a
Corresponding to parameter epsilon0 in Aliev-Panfilov paper [1].
Definition ionic_aliev_panfilov.h:79
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_aliev_panfilov.cpp:43
static const InitialStates initial_X
State variables.
Definition ionic_aliev_panfilov.h:23
static constexpr unsigned int calcium_index
Definition ionic_aliev_panfilov.h:30
static const InitialStates initial_Xg
Gating variables.
Definition ionic_aliev_panfilov.h:26
double mu1
[1].
Definition ionic_aliev_panfilov.h:87
double mu2
[1].
Definition ionic_aliev_panfilov.h:88
virtual std::unique_ptr< IonicModelParameters > get_parameters() const override
Construct an instance of model parameters.
Definition ionic_aliev_panfilov.h:55
virtual void update_g(const unsigned int zone_id, const double dt, const Vector< double > &X, Vector< double > &Xg) const override
Definition ionic_aliev_panfilov.h:94
virtual void distribute_parameters(const CmMod &cm_mod, const cmType &cm) override
Distribute model parameters to all parallel processes.
Definition ionic_aliev_panfilov.cpp:17
double c
Corresponding to parameter k in Aliev-Panfilov paper [1].
Definition ionic_aliev_panfilov.h:85
virtual void read_parameters(const IonicModelParameters &params) override
Read model parameters from a parameter object.
Definition ionic_aliev_panfilov.cpp:6
virtual unsigned int get_calcium_index() const override
Get the calcium proxy index.
Definition ionic_aliev_panfilov.h:67
AlievPanfilov()
Constructor.
Definition ionic_aliev_panfilov.h:48
The CmMod class duplicates the data structures in the Fortran CMMOD module defined in COMU....
Definition CmMod.h:35
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