GCC Code Coverage Report


Directory: ./
File: Solver/linearProblemParametricHeat.cpp
Date: 2024-04-14 07:32:34
Exec Total Coverage
Lines: 0 36 0.0%
Branches: 0 24 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: J. Foulon & M. Fragu
13 //
14
15 // System includes
16
17 // External includes
18
19 // Project includes
20 #include "Solver/linearProblemParametricHeat.hpp"
21 #include "Core/felisceTransient.hpp"
22 #include "FiniteElement/elementVector.hpp"
23 #include "FiniteElement/elementMatrix.hpp"
24
25 namespace felisce {
26 LinearProblemParametricHeat::LinearProblemParametricHeat():
27 LinearProblem(),
28 m_buildMatrix(false)
29 {}
30
31 LinearProblemParametricHeat::~LinearProblemParametricHeat() {
32 if(m_buildMatrix)
33 m_matrix.destroy();
34
35 }
36
37 void LinearProblemParametricHeat::initialize(std::vector<GeometricMeshRegion::Pointer>& mesh, FelisceTransient::Pointer fstransient, MPI_Comm& comm, bool doUseSNES) {
38 LinearProblem::initialize(mesh,comm, doUseSNES);
39 m_fstransient = fstransient;
40
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 void LinearProblemParametricHeat::initPerElementType(ElementType eltType, FlagMatrixRHS flagMatrixRHS) {
51 IGNORE_UNUSED_ELT_TYPE;
52 IGNORE_UNUSED_FLAG_MATRIX_RHS;
53 m_iTemperature = m_listVariable.getVariableIdList(temperature);
54 m_feTemp = m_listCurrentFiniteElement[m_iTemperature];
55
56 m_elemField.initialize(DOF_FIELD,*m_feTemp);
57 }
58
59 void LinearProblemParametricHeat::computeElementArray(const std::vector<Point*>& elemPoint, const std::vector<felInt>& elemIdPoint, felInt& iel, FlagMatrixRHS flagMatrixRHS) {
60 IGNORE_UNUSED_ELEM_ID_POINT;
61 IGNORE_UNUSED_FLAG_MATRIX_RHS;
62 m_elementMat[0]->zero();
63 assert(!m_elementVector.empty());
64 m_elementVector[0]->zero();
65
66 m_feTemp->updateFirstDeriv(0, elemPoint);
67
68 double coef = 1./m_fstransient->timeStep;
69 if (m_fstransient->iteration == 0) {
70 m_elementMat[0]->grad_phi_i_grad_phi_j(1.,*m_feTemp,0,0,1);
71 } else {
72 m_elementMat[0]->phi_i_phi_j(coef,*m_feTemp,0,0,1);
73 m_elemField.setValue(this->sequentialSolution(), *m_feTemp, iel, m_iTemperature, m_ao, dof());
74 m_elementVector[0]->source(coef,*m_feTemp,m_elemField,0,1);
75 }
76 }
77
78 void LinearProblemParametricHeat::copyMatrixRHS() {
79 m_matrix.duplicateFrom(matrix(0),MAT_COPY_VALUES);
80 m_matrix.assembly(MAT_FINAL_ASSEMBLY);
81 m_buildMatrix = true;
82 }
83
84 void LinearProblemParametricHeat::addScaleMatrix(double coef) {
85 matrix(0).scale(coef);
86 matrix(0).axpy(1,m_matrix,SAME_NONZERO_PATTERN);
87 }
88 }
89