GCC Code Coverage Report


Directory: ./
File: Solver/FhNSolver.cpp
Date: 2024-04-14 07:32:34
Exec Total Coverage
Lines: 0 55 0.0%
Branches: 0 86 0.0%

Line Branch Exec Source
1 // ______ ______ _ _ _____ ______
2 // | ____| ____| | (_)/ ____| | ____|
3 // | |__ | |__ | | _| (___ ___| |__
4 // | __| | __| | | | |\___ \ / __| __|
5 // | | | |____| |____| |____) | (__| |____
6 // |_| |______|______|_|_____/ \___|______|
7 // Finite Elements for Life Sciences and Engineering
8 //
9 // License: LGL2.1 License
10 // FELiScE default license: LICENSE in root folder
11 //
12 // Main authors: C. Corrado
13 //
14
15 // System includes
16
17 // External includes
18
19 // Project includes
20 #include "Solver/FhNSolver.hpp"
21
22 // Am*Cm du/dt = Am * I_{ion}
23 //
24 // I_{ion} = f_0 * u * (u-alpha) * (1-u) - w
25 //
26 // dw/dt = eps * (u*gamma - beta*w)
27 //
28 //w_0 = 0
29
30
31 namespace felisce {
32 FhNSolver::FhNSolver(FelisceTransient::Pointer fstransient):
33 IonicSolver(fstransient)
34 {}
35
36
37 FhNSolver::~FhNSolver()
38 = default;
39
40 void FhNSolver::computeRHS() {
41 double& epsilon = FelisceParam::instance().epsilon;
42 double& vMin = FelisceParam::instance().vMin;
43 double& vMax = FelisceParam::instance().vMax;
44 double& dt = m_fstransient->timeStep;
45 double& gammaEl = FelisceParam::instance().gammaEl;
46 m_bdf.computeRHSTime(dt, m_RHS);
47 felInt pos;
48 double value_uExtrap;
49 double value_RHS;
50 for (felInt i = 0; i < m_size; i++) {
51 ISLocalToGlobalMappingApply(m_localDofToGlobalDof,1,&i,&pos);
52 m_uExtrap.getValues(1,&pos,&value_uExtrap);//value_uExtrap = m_uExtrap(i)
53 value_RHS = gammaEl*epsilon*((value_uExtrap- vMin)/(vMax - vMin));
54 m_RHS.setValue(pos,value_RHS, ADD_VALUES);
55 }
56 m_RHS.assembly();
57 }
58
59 void FhNSolver::solveEDO() {
60 double& epsilon = FelisceParam::instance().epsilon;
61 double& dt = m_fstransient->timeStep;
62 double& beta = FelisceParam::instance().beta;
63 double& coeffDeriv = m_bdf.coeffDeriv0();
64
65 felInt pos;
66 double value_RHS;
67 double valuem_solEDO;
68 for (felInt i = 0; i < m_size; i++) {
69 ISLocalToGlobalMappingApply(m_localDofToGlobalDof,1,&i,&pos);
70 m_RHS.getValues(1,&pos,&value_RHS);//value_RHS = _RHS(i)
71 valuem_solEDO = value_RHS * 1./(coeffDeriv/dt + epsilon*beta);
72 m_solEDO.setValue(pos,valuem_solEDO, INSERT_VALUES);
73 }
74 m_solEDO.assembly();
75 }
76
77 void FhNSolver::computeIon() {
78 if (FelisceParam::instance().stateFilter) {
79 if(!m_stabInit) {
80 m_stabTerm.duplicateFrom(m_ion);
81 m_stabInit=true;
82 }
83 m_stabTerm.zeroEntries();
84 }
85 double& vMin = FelisceParam::instance().vMin;
86 double& vMax = FelisceParam::instance().vMax;
87 double& f0 = FelisceParam::instance().f0;
88 double& alpha = FelisceParam::instance().alpha;
89
90 felInt pos;
91 double value_uExtrap;
92 double valuem_solEDO;
93 double value_ion;
94 double value_stab;
95 double v_adim=0.0;
96 double g_v=0.0;
97 for (felInt i = 0; i < m_size; i++) {
98 ISLocalToGlobalMappingApply(m_localDofToGlobalDof,1,&i,&pos);
99 m_solEDO.getValues(1,&pos,&valuem_solEDO);//valuem_solEDO = m_solEDO(i)
100 m_uExtrap.getValues(1,&pos,&value_uExtrap);//value_uExtrap = m_uExtrap(i)
101 v_adim = (value_uExtrap-vMin)/(vMax-vMin);
102 if(FelisceParam::instance().hasInfarct) {
103 value_ion = m_f0Par[pos]*v_adim*(v_adim-alpha)*(1-v_adim) - valuem_solEDO;
104 } else {
105 value_ion = f0*v_adim*(v_adim-alpha)*(1-v_adim) - valuem_solEDO;
106 }
107
108 if (FelisceParam::instance().stateFilter) {
109 g_v=f0*(3.0*v_adim*v_adim-2.0*(1-0+alpha)*v_adim+alpha);
110 value_stab = 0.5*(std::abs(g_v)-g_v)+FelisceParam::instance().gain;
111 m_stabTerm.setValue(pos,value_stab, INSERT_VALUES);
112 }
113 m_ion.setValue(pos,value_ion, INSERT_VALUES);
114 }
115
116 m_ion.assembly();
117 if (FelisceParam::instance().stateFilter) {
118 m_stabTerm.assembly();
119 }
120 }
121
122 }
123