Lines Matching refs:fe

19 static PetscErrorCode CreateFEStruct(FEStruct *fe)  in CreateFEStruct()  argument
22 fe->Nv = 5; in CreateFEStruct()
23 fe->Ne = 3; in CreateFEStruct()
24 PetscCall(PetscMalloc1(3 * fe->Ne, &fe->vertices)); in CreateFEStruct()
26 fe->vertices[0 + 0] = 0; in CreateFEStruct()
27 fe->vertices[0 + 1] = 1; in CreateFEStruct()
28 fe->vertices[0 + 2] = 2; in CreateFEStruct()
29 fe->vertices[3 + 0] = 2; in CreateFEStruct()
30 fe->vertices[3 + 1] = 1; in CreateFEStruct()
31 fe->vertices[3 + 2] = 3; in CreateFEStruct()
32 fe->vertices[6 + 0] = 2; in CreateFEStruct()
33 fe->vertices[6 + 1] = 4; in CreateFEStruct()
34 fe->vertices[6 + 2] = 3; in CreateFEStruct()
35 fe->n = 5; in CreateFEStruct()
39 static PetscErrorCode DestroyFEStruct(FEStruct *fe) in DestroyFEStruct() argument
42 PetscCall(PetscFree(fe->vertices)); in DestroyFEStruct()
43 PetscCall(PetscFree(fe->coo)); in DestroyFEStruct()
47 static PetscErrorCode CreateMatrix(FEStruct *fe, Mat *A) in CreateMatrix() argument
53 PetscCall(MatSetSizes(*A, fe->n, fe->n, PETSC_DECIDE, PETSC_DECIDE)); in CreateMatrix()
58 PetscCall(PetscMalloc2(3 * 3 * fe->Ne, &oor, 3 * 3 * fe->Ne, &ooc)); in CreateMatrix()
59 for (PetscInt e = 0; e < fe->Ne; e++) { in CreateMatrix()
62 oor[cnt] = fe->vertices[3 * e + vi]; in CreateMatrix()
63 ooc[cnt++] = fe->vertices[3 * e + vj]; in CreateMatrix()
67 PetscCall(MatSetPreallocationCOO(*A, 3 * 3 * fe->Ne, oor, ooc)); in CreateMatrix()
72 PetscCall(PetscMalloc1(fe->Ne, &fe->coo)); in CreateMatrix()
73 fe->coo[0] = 0; in CreateMatrix()
74 for (PetscInt e = 1; e < fe->Ne; e++) fe->coo[e] = fe->coo[e - 1] + 3 * 3; in CreateMatrix()
78 static PetscErrorCode FillMatrixCPU(FEStruct *fe, Mat A) in FillMatrixCPU() argument
84 for (PetscInt e = 0; e < fe->Ne; e++) { in FillMatrixCPU()
88 PetscCall(MatSetValues(A, 3, fe->vertices + 3 * e, 3, fe->vertices + 3 * e, s, ADD_VALUES)); in FillMatrixCPU()
99 static PetscErrorCode FillMatrixCPUCOO(FEStruct *fe, Mat A) in FillMatrixCPUCOO() argument
105 PetscCall(PetscMalloc1(3 * 3 * fe->Ne, &v)); in FillMatrixCPUCOO()
106 for (PetscInt e = 0; e < fe->Ne; e++) { in FillMatrixCPUCOO()
107 s = v + fe->coo[e]; /* point to location in COO of current element stiffness */ in FillMatrixCPUCOO()
121 static PetscErrorCode FillMatrixCPUCOO3d(FEStruct *fe, Mat A) in FillMatrixCPUCOO3d() argument
127 PetscCall(PetscMalloc1(fe->Ne, &s)); in FillMatrixCPUCOO3d()
128 for (PetscInt e = 0; e < fe->Ne; e++) { in FillMatrixCPUCOO3d()
141 FEStruct fe; in main() local
150 PetscCall(CreateFEStruct(&fe)); in main()
152 PetscCall(CreateMatrix(&fe, &B)); in main()
156 PetscCall(FillMatrixCPU(&fe, A)); in main()
160 PetscCall(FillMatrixCPUCOO(&fe, A)); in main()
164 PetscCall(FillMatrixCPUCOO3d(&fe, A)); in main()
171 if (is_kokkos) PetscCall(FillMatrixKokkosCOO(&fe, A)); in main()
174 if (is_cuda) PetscCall(FillMatrixCUDACOO(&fe, A)); in main()
179 PetscCall(DestroyFEStruct(&fe)); in main()