45 std::string FentonKarma::className =
49 "Phenomenological Model.");
52 std::string FentonKarma::lookupIds[] = {
53 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
54 "BR", FentonKarma::eBR),
55 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
56 "MBR", FentonKarma::eMBR),
57 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
58 "MLR1", FentonKarma::eMLR1),
59 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
60 "GP", FentonKarma::eGP),
61 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
62 "CF1", FentonKarma::eCF1),
63 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
64 "CF2a", FentonKarma::eCF2a),
65 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
66 "CF2b", FentonKarma::eCF2b),
67 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
68 "CF2c", FentonKarma::eCF2c),
69 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
70 "CF3a", FentonKarma::eCF3a),
71 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
72 "CF3b", FentonKarma::eCF3b),
73 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
74 "FC2002Set1", FentonKarma::eFC2002Set1a),
75 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
76 "FC2002Set1a", FentonKarma::eFC2002Set1a),
77 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
78 "FC2002Set1b", FentonKarma::eFC2002Set1b),
79 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
80 "FC2002Set1c", FentonKarma::eFC2002Set1c),
81 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
82 "FC2002Set1d", FentonKarma::eFC2002Set1d),
83 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
84 "FC2002Set1e", FentonKarma::eFC2002Set1e),
85 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
86 "FC2002Set2", FentonKarma::eFC2002Set2),
87 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
88 "FC2002Set4", FentonKarma::eFC2002Set4a),
89 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
90 "FC2002Set4a", FentonKarma::eFC2002Set4a),
91 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
92 "FC2002Set4b", FentonKarma::eFC2002Set4b),
93 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
94 "FC2002Set4c", FentonKarma::eFC2002Set4c),
95 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
96 "FC2002Set4d", FentonKarma::eFC2002Set4d),
97 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
98 "FC2002Set5", FentonKarma::eFC2002Set5),
99 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
100 "FC2002Set6", FentonKarma::eFC2002Set6),
101 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
102 "FC2002Set7", FentonKarma::eFC2002Set7),
103 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
104 "FC2002Set8", FentonKarma::eFC2002Set8),
105 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
106 "FC2002Set9", FentonKarma::eFC2002Set9),
107 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
108 "Lawson", FentonKarma::eLawson),
109 LibUtilities::SessionReader::RegisterEnumValue(
"CellModelVariant",
110 "CAF", FentonKarma::eCAF)
114 std::string FentonKarma::def =
115 LibUtilities::SessionReader::RegisterDefaultSolverInfo(
116 "CellModelVariant",
"BR");
125 FentonKarma::FentonKarma(
646 ASSERTL0(!
isCF3,
"Cherry-Fenton model 3 not implemented yet.");
666 ASSERTL0(inarray.get() != outarray.get(),
667 "Must have different arrays for input and output.");
690 NekDouble J_fi, J_so, J_si, h1, h2, h3, alpha, beta;
694 for (i = 0; i < n; ++i)
701 h1 = (V <
u_c) ? 0.0 : 1.0;
702 h2 = (V <
u_v) ? 0.0 : 1.0;
703 h3 = (V <
u_r) ? 0.0 : 1.0;
708 *w_tau = 1.0 / (alpha + beta);
709 *w_new = alpha * (*w_tau);
714 *v_tau = 1.0 / (alpha + beta);
715 *v_new = alpha * (*v_tau);
724 J_fi = -(*v)*h1*(1 - V)*(V -
u_c)/
tau_d;
728 J_so = V*(1-h3)*(1-
k2*(*v))/
tau_0 +
735 *u_new = -J_fi - J_so - J_si;
738 ++u, ++v, ++w, ++u_new, ++v_new, ++w_new, ++v_tau, ++w_tau;
769 default:
return "unknown";
#define ASSERTL0(condition, msg)
Array< OneD, Array< OneD, NekDouble > > m_cellSol
Cell model solution variables.
int m_nq
Number of physical points.
std::vector< int > m_gates
Indices of cell model variables which are gates.
Array< OneD, Array< OneD, NekDouble > > m_gates_tau
Storage for gate tau values.
int m_nvar
Number of variables in cell model (inc. transmembrane voltage)
enum Variants model_variant
virtual void v_SetInitialConditions()
virtual void v_GenerateSummary(SummaryList &s)
Prints a summary of the model parameters.
virtual ~FentonKarma()
Destructor.
static std::string lookupIds[]
virtual std::string v_GetCellVarName(unsigned int idx)
virtual void v_Update(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, const NekDouble time)
Computes the reaction terms $f(u,v)$ and $g(u,v)$.
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
std::shared_ptr< SessionReader > SessionReaderSharedPtr
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.