62 string Monodomain::className
66 "Monodomain model of cardiac electrophysiology.");
72 Monodomain::Monodomain(
90 std::string vCellModel;
91 m_session->LoadSolverInfo(
"CELLMODEL", vCellModel,
"");
93 ASSERTL0(vCellModel !=
"",
"Cell Model not specified.");
109 std::string varCoeffString[6] = {
"xx",
"xy",
"yy",
"xz",
"yz",
"zz"};
110 std::string aniso_var[3] = {
"fx",
"fy",
"fz"};
112 const int nq =
m_fields[0]->GetNpoints();
118 for (
int j = 0; j < i+1; ++j)
134 if (
m_session->DefinesFunction(
"AnisotropicConductivity"))
136 if (
m_session->DefinesCmdLineArgument(
"verbose"))
138 cout <<
"Loading Anisotropic Fibre map." << endl;
169 "Function 'AnisotropicConductivity' not correctly "
171 GetFunction(
"AnisotropicConductivity")->Evaluate(aniso_var[j], vTemp_j);
174 for (
int i = 0; i < j + 1; ++i)
177 "AnisotropicConductivity",aniso_var[i]),
178 "Function 'AnisotropicConductivity' not correctly "
180 GetFunction(
"AnisotropicConductivity")->Evaluate(aniso_var[i], vTemp_i);
205 for (
int i = 0; i < nVarDiffCmpts; ++i)
215 if (
m_session->DefinesFunction(
"IsotropicConductivity"))
217 if (
m_session->DefinesCmdLineArgument(
"verbose"))
219 cout <<
"Loading Isotropic Conductivity map." << endl;
222 const std::string varName =
"intensity";
224 GetFunction(
"IsotropicConductivity")->Evaluate(varName, vTemp);
229 if (
m_session->DefinesParameter(
"d_min") ||
237 for (
int j = 0; j < nq; ++j)
239 vTemp[j] = (vTemp[j] < f_min ? f_min : vTemp[j]);
240 vTemp[j] = (vTemp[j] > f_max ? f_max : vTemp[j]);
245 Vmath::Smul(nq, -1.0/(f_max-f_min), vTemp, 1, vTemp, 1);
247 Vmath::Smul(nq, scar_max - scar_min, vTemp, 1, vTemp, 1);
252 for (
int i = 0; i < nVarDiffCmpts; ++i)
265 for (
int i = 0; i < j + 1; ++i)
270 std::stringstream filename;
271 filename <<
"Conductivity_" << varCoeffString[k] <<
".fld";
282 if (x.first ==
"CheckpointCellModel")
284 std::shared_ptr<FilterCheckpointCellModel> c
285 = std::dynamic_pointer_cast<FilterCheckpointCellModel>(
289 if (x.first ==
"CellHistoryPoints")
291 std::shared_ptr<FilterCellHistoryPoints> c
292 = std::dynamic_pointer_cast<FilterCellHistoryPoints>(
330 int nvariables = inarray.size();
340 for (
int i = 0; i < nvariables; ++i)
357 outarray[i] =
m_fields[i]->GetPhys();
371 m_cell->TimeIntegrate(inarray, outarray, time);
374 for (
unsigned int i = 0; i <
m_stimulus.size(); ++i)
385 bool dumpInitialConditions,
389 dumpInitialConditions,
402 m_session->GetFunctionType(
"d00",
"intensity")
406 m_session->GetFunction(
"d00",
"intensity")->GetExpression());
409 m_session->GetFunctionType(
"d11",
"intensity")
413 m_session->GetFunction(
"d11",
"intensity")->GetExpression());
416 m_session->GetFunctionType(
"d22",
"intensity")
420 m_session->GetFunction(
"d22",
"intensity")->GetExpression());
422 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 DoImplicitSolve(const Array< OneD, const Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray, NekDouble time, NekDouble lambda)
Solve for the diffusion term.
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.
StdRegions::VarCoeffMap m_vardiff
Variable diffusivity.
virtual void v_InitObject()
Init object for UnsteadySystem class.
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_GenerateSummary(SummaryList &s)
Print a summary of time stepping parameters.
virtual SOLVER_UTILS_EXPORT void v_InitObject()
Init object for UnsteadySystem class.
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.