|
1 | | -#include "CalculateStiffnessMatrixAndLoadVector.hpp" |
2 | | - |
3 | | - |
4 | | -Results calculateAllElementStiffnessMatrixAndLoadVector(const Mesh& mesh, double k) { |
5 | | - |
6 | | - int numElements = mesh.GetNumElements(); |
7 | | - |
8 | | - int numNodes = mesh.GetNumNodesPerElement(); |
9 | | - |
10 | | - int sizePerElement = numNodes * numNodes; |
11 | | - |
12 | | - View1D allElementStiffnessMatrix("stores all element stiffness matrix", numElements * sizePerElement); |
13 | | - View1D allElementLoadVector("stores all element load vector", numElements * numNodes); |
14 | | - |
15 | | - Kokkos::parallel_for("CalculateStiffness", numElements, |
16 | | - KOKKOS_LAMBDA(const int elemIdx) { |
17 | | - |
18 | | - double stiffnessMatrixPerElement[MAX_STIFFNESS_MATRIX_SIZE] = {}; |
19 | | - double loadVectorPerElement[MAX_LOAD_VECTOR_SIZE] = {}; |
20 | | - if (numNodes == 3) { // Triangle element |
21 | | - TriElement triElem(mesh, elemIdx); |
22 | | - triElem.setMaterialProperty(k); |
23 | | - triElem.computeElementStiffnessMatrix(stiffnessMatrixPerElement); |
24 | | - triElem.computeElementLoadVector(loadVectorPerElement); |
25 | | - } else { // Quad element |
26 | | - QuadElement quadElem(mesh, elemIdx); |
27 | | - quadElem.setMaterialProperty(k); |
28 | | - quadElem.computeElementStiffnessMatrix(stiffnessMatrixPerElement); |
29 | | - quadElem.computeElementLoadVector(loadVectorPerElement); |
| 1 | +#include "CalculateStiffnessMatrixAndLoadVector.hpp" |
| 2 | + |
| 3 | +Results calculateAllElementStiffnessMatrixAndLoadVector(const Mesh& mesh, |
| 4 | + double k) { |
| 5 | + int numElements = mesh.GetNumElements(); |
| 6 | + |
| 7 | + int numNodes = mesh.GetNumNodesPerElement(); |
| 8 | + |
| 9 | + int sizePerElement = numNodes * numNodes; |
| 10 | + |
| 11 | + Kokkos::Profiling::pushRegion( |
| 12 | + "Allocate Element Stiffness Matrix and Load Vector"); |
| 13 | + View1D allElementStiffnessMatrix("stores all element stiffness matrix", |
| 14 | + numElements * sizePerElement); |
| 15 | + View1D allElementLoadVector("stores all element load vector", |
| 16 | + numElements * numNodes); |
| 17 | + Kokkos::Profiling::popRegion(); |
| 18 | + |
| 19 | + Kokkos::Profiling::pushRegion( |
| 20 | + "Compute Element Stiffness Matrix and Load Vector"); |
| 21 | + Kokkos::parallel_for( |
| 22 | + "CalculateStiffness", numElements, KOKKOS_LAMBDA(const int elemIdx) { |
| 23 | + double stiffnessMatrixPerElement[MAX_STIFFNESS_MATRIX_SIZE] = {}; |
| 24 | + double loadVectorPerElement[MAX_LOAD_VECTOR_SIZE] = {}; |
| 25 | + if (numNodes == 3) { // Triangle element |
| 26 | + TriElement triElem(mesh, elemIdx); |
| 27 | + triElem.setMaterialProperty(k); |
| 28 | + triElem.computeElementStiffnessMatrix(stiffnessMatrixPerElement); |
| 29 | + triElem.computeElementLoadVector(loadVectorPerElement); |
| 30 | + } else { // Quad element |
| 31 | + QuadElement quadElem(mesh, elemIdx); |
| 32 | + quadElem.setMaterialProperty(k); |
| 33 | + quadElem.computeElementStiffnessMatrix(stiffnessMatrixPerElement); |
| 34 | + quadElem.computeElementLoadVector(loadVectorPerElement); |
30 | 35 | } |
31 | | - |
32 | | - int base_stiffness_idx = elemIdx * sizePerElement; |
33 | | - for (int i = 0; i < sizePerElement; ++i){ |
34 | | - allElementStiffnessMatrix(base_stiffness_idx + i) = stiffnessMatrixPerElement[i]; |
35 | | - } |
36 | | - |
37 | | - int base_load_idx = elemIdx * numNodes; |
38 | 36 |
|
39 | | - for (int i = 0; i < numNodes; ++i){ |
40 | | - allElementLoadVector(base_load_idx + i) = loadVectorPerElement[i]; |
41 | | - } |
| 37 | + int base_stiffness_idx = elemIdx * sizePerElement; |
| 38 | + for (int i = 0; i < sizePerElement; ++i) { |
| 39 | + allElementStiffnessMatrix(base_stiffness_idx + i) = |
| 40 | + stiffnessMatrixPerElement[i]; |
| 41 | + } |
| 42 | + |
| 43 | + int base_load_idx = elemIdx * numNodes; |
42 | 44 |
|
43 | | - }); |
| 45 | + for (int i = 0; i < numNodes; ++i) { |
| 46 | + allElementLoadVector(base_load_idx + i) = loadVectorPerElement[i]; |
| 47 | + } |
| 48 | + }); |
| 49 | + Kokkos::Profiling::popRegion(); |
44 | 50 |
|
45 | | - return Results{allElementStiffnessMatrix, allElementLoadVector}; |
| 51 | + return Results{allElementStiffnessMatrix, allElementLoadVector}; |
46 | 52 | } |
0 commit comments