61 string Bidomain::className
65 "Bidomain model of cardiac electrophysiology with 3D diffusion.");
84 std::string vCellModel;
85 m_session->LoadSolverInfo(
"CELLMODEL", vCellModel,
"");
87 ASSERTL0(vCellModel !=
"",
"Cell Model not specified.");
99 std::string varName[3] = {
100 "AnisotropicConductivityX",
101 "AnisotropicConductivityY",
102 "AnisotropicConductivityZ"
106 if (
m_session->DefinesFunction(
"IntracellularConductivity") &&
m_session->DefinesFunction(
"ExtracellularConductivity"))
125 =
m_session->GetFunction(
"IntracellularConductivity", varName[i]);
127 =
m_session->GetFunction(
"ExtracellularConductivity", varName[i]);
128 for(
int j = 0; j < nq; j++)
130 tmp1[i][j] = ifunc1->Evaluate(x0[j],x1[j],x2[j],0.0);
131 tmp2[i][j] = ifunc2->Evaluate(x0[j],x1[j],x2[j],0.0);
140 if (
m_session->DefinesParameter(
"StimulusDuration"))
143 "Stimulus function not defined.");
156 if (x.first ==
"CheckpointCellModel")
158 std::shared_ptr<FilterCheckpointCellModel> c
159 = std::dynamic_pointer_cast<FilterCheckpointCellModel>(
194 int nvariables = inarray.size();
204 for (
int i = 0; i < nvariables; ++i)
208 Vmath::Vcopy(nq, &inarray[i][0], 1, &outarray[i][0], 1);
216 m_fields[i]->PhysDeriv(inarray[1],ggrad0);
218 m_fields[i]->PhysDeriv(0,ggrad0,ggrad0);
220 if (
m_session->DefinesFunction(
"IntracellularConductivity") &&
m_session->DefinesFunction(
"ExtracellularConductivity"))
236 outarray[i] =
m_fields[i]->GetPhys();
241 m_fields[i]->PhysDeriv(inarray[1],ggrad0,ggrad1);
243 m_fields[i]->PhysDeriv(0,ggrad0,ggrad0);
244 m_fields[i]->PhysDeriv(1,ggrad1,ggrad1);
246 if (
m_session->DefinesFunction(
"IntracellularConductivity") &&
m_session->DefinesFunction(
"ExtracellularConductivity"))
263 outarray[i] =
m_fields[i]->GetPhys();
268 m_fields[i]->PhysDeriv(inarray[1],ggrad0,ggrad1,ggrad2);
270 m_fields[i]->PhysDeriv(0,ggrad0,ggrad0);
271 m_fields[i]->PhysDeriv(1,ggrad1,ggrad1);
272 m_fields[i]->PhysDeriv(2,ggrad2,ggrad2);
274 if (
m_session->DefinesFunction(
"IntracellularConductivity") &&
m_session->DefinesFunction(
"ExtracellularConductivity"))
293 outarray[i] =
m_fields[i]->GetPhys();
304 m_fields[i]->PhysDeriv(0,grad0,grad0);
306 if (
m_session->DefinesFunction(
"IntracellularConductivity") &&
m_session->DefinesFunction(
"ExtracellularConductivity"))
319 outarray[i] =
m_fields[i]->GetPhys();
326 m_fields[i]->PhysDeriv(0,grad0,grad0);
327 m_fields[i]->PhysDeriv(1,grad1,grad1);
329 if (
m_session->DefinesFunction(
"IntracellularConductivity") &&
m_session->DefinesFunction(
"ExtracellularConductivity"))
343 outarray[i] =
m_fields[i]->GetPhys();
350 m_fields[i]->PhysDeriv(0,grad0,grad0);
351 m_fields[i]->PhysDeriv(1,grad1,grad1);
352 m_fields[i]->PhysDeriv(2,grad2,grad2);
354 if (
m_session->DefinesFunction(
"IntracellularConductivity") &&
m_session->DefinesFunction(
"ExtracellularConductivity"))
370 outarray[i] =
m_fields[i]->GetPhys();
384 m_cell->TimeIntegrate(inarray, outarray, time);
396 =
m_session->GetFunction(
"Stimulus",
"u");
397 ifunc->Evaluate(x0,x1,x2,time, result);
399 Vmath::Vadd(nq, outarray[0], 1, result, 1, outarray[0], 1);
406 bool dumpInitialConditions,
421 ASSERTL0(
false,
"Update the generate summary");
467 m_cell->GenerateSummary(s);
#define ASSERTL0(condition, msg)
Array< OneD, Array< OneD, NekDouble > > tmp3
Array< OneD, Array< OneD, NekDouble > > tmp2
StdRegions::VarCoeffMap m_vardiffi
Array< OneD, Array< OneD, NekDouble > > tmp1
virtual ~Bidomain()
Desctructor.
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.
virtual void v_SetInitialConditions(NekDouble initialtime, bool dumpInitialConditions, const int domain)
Sets a custom initial condition.
StdRegions::VarCoeffMap m_vardiffie
NekDouble m_stimDuration
Stimulus current.
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.
virtual void v_InitObject()
Init object for UnsteadySystem class.
virtual void v_GenerateSummary(SummaryList &s)
Prints a summary of the model parameters.
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)
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.
LibUtilities::SessionReaderSharedPtr m_session
The session reader.
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
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::shared_ptr< Equation > EquationSharedPtr
std::vector< std::pair< std::string, std::string > > SummaryList
EquationSystemFactory & GetEquationSystemFactory()
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
std::map< ConstFactorType, NekDouble > ConstFactorMap
The above copyright notice and this permission notice shall be included.
CellModelFactory & GetCellModelFactory()
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add 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 Vcopy(int n, const T *x, const int incx, T *y, const int incy)