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