46 #ifndef _IONICLUORUDYI_H_ 47 #define _IONICLUORUDYI_H_ 49 #include <lifev/electrophysiology/solver/IonicModels/ElectroIonicModel.hpp> 51 #include <Teuchos_RCP.hpp> 52 #include <Teuchos_ParameterList.hpp> 53 #include "Teuchos_XMLParameterListHelpers.hpp" 59 class IonicLuoRudyI :
public virtual ElectroIonicModel
65 typedef ElectroIonicModel super;
66 typedef std::shared_ptr<VectorEpetra> vectorPtr_Type;
67 typedef std::shared_ptr<VectorElemental> elvecPtr_Type;
68 typedef RegionMesh<LinearTetra> mesh_Type;
83 IonicLuoRudyI ( Teuchos::ParameterList& parameterList );
88 IonicLuoRudyI (
const IonicLuoRudyI& model );
90 virtual ~IonicLuoRudyI() {}
97 IonicLuoRudyI& operator= (
const IonicLuoRudyI& model );
162 inline void setENa (
const Real p )
166 inline void setGNa (
const Real p )
172 inline void setGsi (
const Real p )
178 inline void setK0 (
const Real p )
181 M_gK = computeGK (M_K0);
182 M_gK1 = computeGK1 (M_K0);
184 inline void setGK (
const Real p )
188 inline void setEK (
const Real p )
194 inline void setGK1 (
const Real p )
198 inline void setEK1 (
const Real p )
204 inline void setEKp (
const Real p )
208 inline void setGKp (
const Real p )
214 inline void setGb (
const Real p )
230 return ( 0.32 * ( V + 47.13 ) / ( 1.0 - std::exp ( - 0.1 * ( V + 47.13 ) ) ) );
234 return ( 0.08 * std::exp ( - V / 11.0 ) );
238 return ( 1.0 / ( am (V) + bm (V) ) );
242 return ( am (V) * tm (V) );
246 return ( am (V) * (1.0 - m ) - bm (V) * m );
254 return ( 0.135 * std::exp ( - ( V + 80 ) / 6.8 ) );
265 return ( ( 3.56 * std::exp ( 0.079 * V ) + 3.1 * 1e5 * std::exp ( 0.35 * V) ) );
269 return ( 1.0 / ( 0.13 * ( 1 + std::exp ( - ( V + 10.66 ) / 11.1 ) ) ) );
274 return ( 1.0 / ( ah (V) + bh (V) ) );
278 return ( ah (V) * th (V) );
282 return ( ah (V) * (1.0 - h ) - bh (V) * h );
289 return ( ( -1.2714 * 1e5 * std::exp ( 0.2444 * V ) - 3.474 * 1e-5 * std::exp ( - 0.04391 * V ) )
290 * ( V + 37.78 ) / ( 1 + std::exp ( 0.311 * ( V + 79.23 ) ) ) );
300 return ( 0.1212 * std::exp ( - 0.01052 * V ) / ( 1 + std::exp ( -0.1378 * ( V + 40.14 ) ) ) );
304 return ( 0.3 * std::exp ( -2.535 * 1e-7 * V ) / ( 1 + std::exp ( -0.1 * ( V + 32 ) ) ) );
309 return ( 1.0 / ( aj (V) + bj (V) ) );
313 return ( aj (V) * tj (V) );
317 return ( aj (V) * (1.0 - j ) - bj (V) * j );
323 return ( M_gNa * m * m * m * h * j * ( V - M_ENa ) );
330 return ( 7.7 - 13.0287 * std::log (Ca) );
335 return ( 0.095 * std::exp ( - 0.01 * ( V - 5 ) ) / ( 1 + std::exp ( - 0.072 * ( V - 5 ) ) ) );
339 return ( 0.07 * std::exp ( - 0.017 * ( V + 44) ) / ( 1 + std::exp ( 0.05 * ( V + 44) ) ) );
343 return ( 1.0 / ( ad (V) + bd (V) ) );
347 return ( ad (V) * td (V) );
351 return ( ad (V) * (1.0 - d ) - bd (V) * d );
357 return ( 0.012 * std::exp ( - 0.008 * ( V + 28 ) ) / ( 1 + std::exp ( 0.15 * ( V + 28 ) ) ) );
361 return ( 0.0065 * std::exp ( - 0.02 * ( V + 30 ) ) / ( 1 + std::exp ( - 0.2 * ( V + 30 ) ) ) );
365 return ( 1.0 / ( af (V) + bf (V) ) );
369 return ( af (V) * tf (V) );
373 return ( af (V) * (1.0 - f ) - bf (V) * f );
379 return ( M_gsi * d * f * ( V - Esi (Ca) ) );
385 return ( - 1e-4 * Isi (V, d, f, Ca) + 0.07 * ( 1e-4 - Ca ) );
392 return ( 0.282 * std::sqrt ( K0 / 5.4) );
398 return ( 0.0005 * std::exp ( 0.083 * ( V + 50 ) ) / ( 1 + std::exp ( 0.057 * ( V + 50 ) ) ) );
402 return ( 0.0013 * std::exp ( - 0.06 * ( V + 20 ) ) / ( 1 + std::exp ( - 0.04 * ( V + 20 ) ) ) );
406 return ( 1.0 / ( aX (V) + bX (V) ) );
410 return ( aX (V) * tX (V) );
414 return ( aX (V) * (1.0 - X ) - bX (V) * X );
422 return ( 2.837 * ( std::exp ( 0.04 * ( V + 77 ) ) - 1 ) / ( ( V + 77 ) * std::exp ( 0.04 * ( V + 35 ) ) ) );
432 return M_gK * X * Xi (V) * ( V - M_EK );
439 return ( 0.6047 * std::sqrt ( K0 / 5.4) );
445 return ( 1.02 / ( 1 + std::exp ( 0.2385 * ( V - M_EK1 - 59.2915 ) ) ) );
449 return ( ( 0.49124 * std::exp ( 0.08032 * ( V - M_EK1 + 5.4760 ) )
450 + exp ( 0.06175 * ( V - M_EK1 - 594.31 ) ) ) / ( 1 + std::exp ( - 0.5143 * ( V - M_EK1 + 4.753 ) ) ) );
454 return ( 1.0 / ( aK1 (V) + bK1 (V) ) );
458 return ( aK1 (V) * tK1 (V) );
464 return M_gK1 * K1inf (V) * ( V - M_EK1 );
471 return ( 1.0 / ( 1 + std::exp ( ( 7.488 - V ) / 5.98 ) ) );
475 return M_gKp * Kp (V) * ( V - M_EKp );
482 return M_gb * ( V + 59.87 );
489 return ( INa (V, m, h, j) + Isi (V, d, f, Ca) + IK (V, X) + IK1 (V) + IKp (V) + Ib (V) );
492 void computeGatingRhs (
const std::vector<Real>& v, std::vector<Real>& rhs);
494 void computeNonGatingRhs (
const std::vector<Real>& v, std::vector<Real>& rhs );
497 void computeRhs (
const std::vector<Real>& v, std::vector<Real>& rhs);
499 void computeGatingVariablesWithRushLarsen ( std::vector<Real>& v,
const Real dt );
502 Real computeLocalPotentialRhs (
const std::vector<Real>& v );
void updateInverseJacobian(const UInt &iQuadPt)
double Real
Generic real data.