62 string Monodomain::className =
64 "Monodomain", Monodomain::create,
65 "Monodomain model of cardiac electrophysiology.");
86 std::string vCellModel;
87 m_session->LoadSolverInfo(
"CELLMODEL", vCellModel,
"");
89 ASSERTL0(vCellModel !=
"",
"Cell Model not specified.");
101 std::string varCoeffString[6] = {
"xx",
"xy",
"yy",
"xz",
"yz",
"zz"};
102 std::string aniso_var[3] = {
"fx",
"fy",
"fz"};
104 const int nq =
m_fields[0]->GetNpoints();
110 for (
int j = 0; j < i + 1; ++j)
126 if (
m_session->DefinesFunction(
"AnisotropicConductivity"))
128 if (
m_session->DefinesCmdLineArgument(
"verbose"))
130 cout <<
"Loading Anisotropic Fibre map." << endl;
161 "Function 'AnisotropicConductivity' not correctly "
164 ->Evaluate(aniso_var[j], vTemp_j);
167 for (
int i = 0; i < j + 1; ++i)
171 "Function 'AnisotropicConductivity' not correctly "
174 ->Evaluate(aniso_var[i], vTemp_i);
197 for (
int i = 0; i < nVarDiffCmpts; ++i)
206 if (
m_session->DefinesFunction(
"IsotropicConductivity"))
208 if (
m_session->DefinesCmdLineArgument(
"verbose"))
210 cout <<
"Loading Isotropic Conductivity map." << endl;
213 const std::string varName =
"intensity";
215 GetFunction(
"IsotropicConductivity")->Evaluate(varName, vTemp);
220 if (
m_session->DefinesParameter(
"d_min") ||
229 for (
int j = 0; j < nq; ++j)
231 vTemp[j] = (vTemp[j] < f_min ? f_min : vTemp[j]);
232 vTemp[j] = (vTemp[j] > f_max ? f_max : vTemp[j]);
237 Vmath::Smul(nq, -1.0 / (f_max - f_min), vTemp, 1, vTemp, 1);
239 Vmath::Smul(nq, scar_max - scar_min, vTemp, 1, vTemp, 1);
244 for (
int i = 0; i < nVarDiffCmpts; ++i)
255 for (
int i = 0; i < j + 1; ++i)
260 std::stringstream filename;
261 filename <<
"Conductivity_" << varCoeffString[k] <<
".fld";
272 if (x.first ==
"CheckpointCellModel")
274 std::shared_ptr<FilterCheckpointCellModel> c =
275 std::dynamic_pointer_cast<FilterCheckpointCellModel>(x.second);
278 if (x.first ==
"CellHistoryPoints")
280 std::shared_ptr<FilterCellHistoryPoints> c =
281 std::dynamic_pointer_cast<FilterCellHistoryPoints>(x.second);
314 int nvariables = inarray.size();
324 for (
int i = 0; i < nvariables; ++i)
340 outarray[i] =
m_fields[i]->GetPhys();
352 m_cell->TimeIntegrate(inarray, outarray, time);
355 for (
unsigned int i = 0; i <
m_stimulus.size(); ++i)
365 bool dumpInitialConditions,
380 m_session->GetFunctionType(
"d00",
"intensity") ==
385 m_session->GetFunction(
"d00",
"intensity")->GetExpression());
388 m_session->GetFunctionType(
"d11",
"intensity") ==
393 m_session->GetFunction(
"d11",
"intensity")->GetExpression());
396 m_session->GetFunctionType(
"d22",
"intensity") ==
401 m_session->GetFunction(
"d22",
"intensity")->GetExpression());
403 m_cell->GenerateSummary(s);
#define ASSERTL0(condition, msg)
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, std::string pDesc="")
Register a class with the factory.
tBaseSharedPtr CreateInstance(tKey idKey, tParam... args)
Create an instance of the class referred to by idKey.
void DefineOdeRhs(FuncPointerT func, ObjectPointerT obj)
void DefineImplicitSolve(FuncPointerT func, ObjectPointerT obj)
virtual void v_GenerateSummary(SummaryList &s)
Prints a summary of the model parameters.
void DoOdeRhs(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, const NekDouble time)
Computes the reaction terms and .
CellModelSharedPtr m_cell
Cell model.
void DoImplicitSolve(const Array< OneD, const Array< OneD, NekDouble >> &inarray, Array< OneD, Array< OneD, NekDouble >> &outarray, NekDouble time, NekDouble lambda)
Solve for the diffusion term.
StdRegions::VarCoeffMap m_vardiff
Variable diffusivity.
virtual void v_InitObject()
std::vector< StimulusSharedPtr > m_stimulus
virtual ~Monodomain()
Desctructor.
virtual void v_SetInitialConditions(NekDouble initialtime, bool dumpInitialConditions, const int domain)
Sets a custom initial condition.
int m_spacedim
Spatial dimension (>= expansion dim).
virtual SOLVER_UTILS_EXPORT void v_SetInitialConditions(NekDouble initialtime=0.0, bool dumpInitialConditions=true, const int domain=0)
Array< OneD, MultiRegions::ExpListSharedPtr > m_fields
Array holding all dependent variables.
SOLVER_UTILS_EXPORT void WriteFld(const std::string &outname)
Write field data to the given filename.
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
SOLVER_UTILS_EXPORT SessionFunctionSharedPtr GetFunction(std::string name, const MultiRegions::ExpListSharedPtr &field=MultiRegions::NullExpListSharedPtr, bool cache=false)
Get a SessionFunction by name.
Base class for unsteady solvers.
LibUtilities::TimeIntegrationSchemeOperators m_ode
The time integration scheme operators to use.
std::vector< std::pair< std::string, FilterSharedPtr > > m_filters
bool m_explicitDiffusion
Indicates if explicit or implicit treatment of diffusion is used.
virtual SOLVER_UTILS_EXPORT void v_InitObject(bool DeclareField=true)
Init object for UnsteadySystem class.
virtual SOLVER_UTILS_EXPORT void v_GenerateSummary(SummaryList &s)
Print a summary of time stepping parameters.
std::vector< int > m_intVariables
static std::vector< StimulusSharedPtr > LoadStimuli(const LibUtilities::SessionReaderSharedPtr &pSession, const MultiRegions::ExpListSharedPtr &pField)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
@ eFunctionTypeExpression
std::vector< std::pair< std::string, std::string > > SummaryList
EquationSystemFactory & GetEquationSystemFactory()
void AddSummaryItem(SummaryList &l, const std::string &name, const std::string &value)
Adds a summary item to the summary info list.
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
std::map< ConstFactorType, NekDouble > ConstFactorMap
The above copyright notice and this permission notice shall be included.
CellModelFactory & GetCellModelFactory()
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y.
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*x.
void Sadd(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Add vector y = alpha - x.