45 std::string FentonKarma::className =
47 "FentonKarma", FentonKarma::create,
"Phenomenological Model.");
50 std::string FentonKarma::lookupIds[] = {
51 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"BR",
53 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"MBR",
55 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"MLR1",
57 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"GP",
59 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"CF1",
61 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"CF2a",
63 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"CF2b",
65 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"CF2c",
67 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"CF3a",
69 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"CF3b",
71 LibUtilities::SessionReader::RegisterEnumValue(
72 "CellModelVariant",
"FC2002Set1", FentonKarma::eFC2002Set1a),
73 LibUtilities::SessionReader::RegisterEnumValue(
74 "CellModelVariant",
"FC2002Set1a", FentonKarma::eFC2002Set1a),
75 LibUtilities::SessionReader::RegisterEnumValue(
76 "CellModelVariant",
"FC2002Set1b", FentonKarma::eFC2002Set1b),
77 LibUtilities::SessionReader::RegisterEnumValue(
78 "CellModelVariant",
"FC2002Set1c", FentonKarma::eFC2002Set1c),
79 LibUtilities::SessionReader::RegisterEnumValue(
80 "CellModelVariant",
"FC2002Set1d", FentonKarma::eFC2002Set1d),
81 LibUtilities::SessionReader::RegisterEnumValue(
82 "CellModelVariant",
"FC2002Set1e", FentonKarma::eFC2002Set1e),
83 LibUtilities::SessionReader::RegisterEnumValue(
84 "CellModelVariant",
"FC2002Set2", FentonKarma::eFC2002Set2),
85 LibUtilities::SessionReader::RegisterEnumValue(
86 "CellModelVariant",
"FC2002Set4", FentonKarma::eFC2002Set4a),
87 LibUtilities::SessionReader::RegisterEnumValue(
88 "CellModelVariant",
"FC2002Set4a", FentonKarma::eFC2002Set4a),
89 LibUtilities::SessionReader::RegisterEnumValue(
90 "CellModelVariant",
"FC2002Set4b", FentonKarma::eFC2002Set4b),
91 LibUtilities::SessionReader::RegisterEnumValue(
92 "CellModelVariant",
"FC2002Set4c", FentonKarma::eFC2002Set4c),
93 LibUtilities::SessionReader::RegisterEnumValue(
94 "CellModelVariant",
"FC2002Set4d", FentonKarma::eFC2002Set4d),
95 LibUtilities::SessionReader::RegisterEnumValue(
96 "CellModelVariant",
"FC2002Set5", FentonKarma::eFC2002Set5),
97 LibUtilities::SessionReader::RegisterEnumValue(
98 "CellModelVariant",
"FC2002Set6", FentonKarma::eFC2002Set6),
99 LibUtilities::SessionReader::RegisterEnumValue(
100 "CellModelVariant",
"FC2002Set7", FentonKarma::eFC2002Set7),
101 LibUtilities::SessionReader::RegisterEnumValue(
102 "CellModelVariant",
"FC2002Set8", FentonKarma::eFC2002Set8),
103 LibUtilities::SessionReader::RegisterEnumValue(
104 "CellModelVariant",
"FC2002Set9", FentonKarma::eFC2002Set9),
105 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"Lawson",
106 FentonKarma::eLawson),
107 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
"CAF",
111 std::string FentonKarma::def =
112 LibUtilities::SessionReader::RegisterDefaultSolverInfo(
"CellModelVariant",
643 ASSERTL0(!
isCF3,
"Cherry-Fenton model 3 not implemented yet.");
657 boost::ignore_unused(time);
658 ASSERTL0(inarray.get() != outarray.get(),
659 "Must have different arrays for input and output.");
684 for (
size_t i = 0; i <
m_nq; ++i)
691 h1 = (V <
u_c) ? 0.0 : 1.0;
692 h2 = (V <
u_v) ? 0.0 : 1.0;
693 h3 = (V <
u_r) ? 0.0 : 1.0;
698 *w_tau = 1.0 / (alpha +
beta);
699 *w_new = alpha * (*w_tau);
704 *v_tau = 1.0 / (alpha +
beta);
705 *v_new = alpha * (*v_tau);
714 J_fi = -(*v) * h1 * (1 - V) * (V -
u_c) /
tau_d;
718 J_so = V * (1 - h3) * (1 -
k2 * (*v)) /
tau_0 +
722 J_si = -(*w) * (1 + tanh(
k1 * (V -
u_csi))) / (2.0 *
tau_si);
725 *u_new = -J_fi - J_so - J_si;
728 ++u, ++v, ++w, ++u_new, ++v_new, ++w_new, ++v_tau, ++w_tau;
#define ASSERTL0(condition, msg)
Array< OneD, Array< OneD, NekDouble > > m_cellSol
Cell model solution variables.
std::vector< int > m_gates
Indices of cell model variables which are gates.
size_t m_nq
Number of physical points.
size_t m_nvar
Number of variables in cell model (inc. transmembrane voltage)
Array< OneD, Array< OneD, NekDouble > > m_gates_tau
Storage for gate tau values.
enum Variants model_variant
virtual std::string v_GetCellVarName(size_t idx) override
virtual void v_Update(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time) override
Computes the reaction terms $f(u,v)$ and $g(u,v)$.
virtual ~FentonKarma()
Destructor.
static std::string lookupIds[]
virtual void v_GenerateSummary(SummaryList &s) override
Prints a summary of the model parameters.
virtual void v_SetInitialConditions() override
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ beta
Gauss Radau pinned at x=-1,.
std::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
std::vector< std::pair< std::string, std::string > > SummaryList
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list.
The above copyright notice and this permission notice shall be included.
CellModelFactory & GetCellModelFactory()
void Fill(int n, const T alpha, T *x, const int incx)
Fill a vector with a constant value.