GCC Code Coverage Report


Directory: ./
File: Solver/linearProblemFKPP.cpp
Date: 2024-04-14 07:32:34
Exec Total Coverage
Lines: 0 30 0.0%
Branches: 0 26 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: D. Lombardi
13 //
14
15 // System includes
16
17 // External includes
18
19 // Project includes
20 #include "Solver/linearProblemFKPP.hpp"
21 #include "Core/felisceTransient.hpp"
22 #include "FiniteElement/elementVector.hpp"
23 #include "FiniteElement/elementMatrix.hpp"
24 #include "InputOutput/io.hpp"
25
26 namespace felisce {
27 LinearProblemFKPP::LinearProblemFKPP():
28 LinearProblem("FKPP"),
29 m_feTemp(nullptr)
30 {}
31
32 LinearProblemFKPP::~LinearProblemFKPP()
33 {
34 m_fstransient = nullptr;
35 m_feTemp = nullptr;
36 }
37
38 void LinearProblemFKPP::initialize(std::vector<GeometricMeshRegion::Pointer>& mesh, FelisceTransient::Pointer fstransient, MPI_Comm& comm, bool doUseSNES) {
39 LinearProblem::initialize(mesh,comm, doUseSNES);
40 m_fstransient = fstransient;
41 std::vector<PhysicalVariable> listVariable(1);
42 std::vector<std::size_t> listNumComp(1);
43 listVariable[0] = temperature;
44 listNumComp[0] = 1;
45 //define unknown of the linear system.
46 m_listUnknown.push_back(temperature);
47 definePhysicalVariable(listVariable,listNumComp);
48
49 }
50
51 void LinearProblemFKPP::initPerElementType(ElementType eltType, FlagMatrixRHS flagMatrixRHS) {
52 IGNORE_UNUSED_ELT_TYPE;
53 IGNORE_UNUSED_FLAG_MATRIX_RHS;
54
55 m_iTemperature = m_listVariable.getVariableIdList(temperature);
56 m_feTemp = m_listCurrentFiniteElement[m_iTemperature];
57
58 // define elemField to put term u_n_1.phi_j in RHS.
59 // m_elemField contains u_n_1 values.
60 m_elemField.initialize(DOF_FIELD,*m_feTemp);
61 }
62
63 void LinearProblemFKPP::computeElementArray(const std::vector<Point*>& elemPoint, const std::vector<felInt>& elemIdPoint, felInt& iel, FlagMatrixRHS flagMatrixRHS) {
64 IGNORE_UNUSED_ELEM_ID_POINT;
65
66 // update finite element with point coordinate.
67 m_feTemp->updateFirstDeriv(0, elemPoint);
68 double coefTime = 1./m_fstransient->timeStep;
69
70 if (flagMatrixRHS == FlagMatrixRHS::matrix_and_rhs || flagMatrixRHS == FlagMatrixRHS::only_matrix) {
71 // matrix operators.
72 m_elementMat[0]->grad_phi_i_grad_phi_j(FelisceParam::instance().Am,*m_feTemp,0,0,1);
73 m_elementMat[0]->phi_i_phi_j(-FelisceParam::instance().Cm+coefTime,*m_feTemp,0,0,1);
74 }
75
76 if (flagMatrixRHS == FlagMatrixRHS::matrix_and_rhs || flagMatrixRHS == FlagMatrixRHS::only_rhs) {
77 // std::vector operators.
78 m_elemField.setValue(this->sequentialSolution(), *m_feTemp, iel, m_iTemperature, m_ao, dof());
79 assert(!m_elementVector.empty());
80
81 m_elementVector[0]->source(coefTime,*m_feTemp,m_elemField,0,1);
82
83 double coefRHS = -0.5*FelisceParam::instance().Cm; // why should I put this *0.5? Maybe "quadratic" contains an error ... (Elisa, 11/2015)
84 m_elementVector[0]->quadratic(coefRHS,*m_feTemp,m_elemField,0,1);
85 }
86
87 }
88
89 }
90