Skip to content

Commit 46eaf18

Browse files
Merge pull request #316 from jojoasticot/petsc-direct
[femutils] Added direct Petsc solver
2 parents e97e5cd + c016626 commit 46eaf18

File tree

6 files changed

+445
-7
lines changed

6 files changed

+445
-7
lines changed

femutils/CMakeLists.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ if (TARGET Arcane::arcane_aleph_hypre)
1010
list(APPEND ACCELERATOR_SOURCES HypreDoFLinearSystem.cc)
1111
endif()
1212

13+
if (TARGET Arcane::arcane_aleph_petsc)
14+
list(APPEND ACCELERATOR_SOURCES PETScDoFLinearSystem.cc)
15+
endif()
16+
1317
add_library(FemUtils
1418
FemUtils.h
1519
FemUtils.cc
@@ -39,6 +43,7 @@ add_library(FemUtils
3943
AlephDoFLinearSystemFactory_axl.h
4044
SequentialBasicDoFLinearSystemFactory_axl.h
4145
HypreDoFLinearSystemFactory_axl.h
46+
PETScDoFLinearSystemFactory_axl.h
4247
FemBoundaryConditions_axl.h
4348
MeshTensorVariable.h
4449
MeshTensorVariable.H
@@ -55,6 +60,7 @@ arcane_accelerator_add_to_target(FemUtils)
5560
arcane_generate_axl(AlephDoFLinearSystemFactory)
5661
arcane_generate_axl(SequentialBasicDoFLinearSystemFactory)
5762
arcane_generate_axl(HypreDoFLinearSystemFactory)
63+
arcane_generate_axl(PETScDoFLinearSystemFactory)
5864
arcane_generate_axl(FemBoundaryConditions)
5965

6066
target_compile_definitions(FemUtils PRIVATE $<$<BOOL:${ENABLE_DEBUG_MATRIX}>:ENABLE_DEBUG_MATRIX>)
@@ -83,6 +89,11 @@ if (TARGET Arcane::arcane_aleph_petsc)
8389
target_link_libraries(FemUtils PRIVATE Arcane::arcane_aleph_petsc)
8490
message(STATUS "PETSc backend is available")
8591
set(FEMUTILS_HAS_SOLVER_BACKEND_PETSC TRUE)
92+
find_package(PETSc)
93+
94+
if (TARGET arcconpkg_PETSc)
95+
target_link_libraries(FemUtils PRIVATE arcconpkg_PETSc)
96+
endif()
8697
endif()
8798

8899

femutils/HypreDoFLinearSystem.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -550,11 +550,11 @@ solve()
550550
Real v1 = platform::getRealTime();
551551
hypreCheck("HYPRE_IJVectorSetValues",
552552
HYPRE_IJVectorSetValues(ij_vector_b, nb_local_row, rows_index_data,
553-
rhs_variable.asArray().data()));
553+
rhs_data));
554554

555555
hypreCheck("HYPRE_IJVectorSetValues",
556556
HYPRE_IJVectorSetValues(ij_vector_x, nb_local_row, rows_index_data,
557-
dof_variable.asArray().data()));
557+
result_data));
558558

559559
hypreCheck("HYPRE_IJVectorAssemble",
560560
HYPRE_IJVectorAssemble(ij_vector_b));
@@ -581,7 +581,7 @@ solve()
581581
Timer::Action ta1(tstat, "HypreSetSolver");
582582

583583
switch (m_solver) {
584-
case solver::CG:
584+
case solver::CG: // iter, rtol, atol
585585
HYPRE_ParCSRPCGCreate(mpi_comm, &solver);
586586
HYPRE_PCGSetMaxIter(solver, m_max_iter); // max iterations //
587587
HYPRE_PCGSetTol(solver, m_rtol); // relative conv. tolerance //
@@ -590,7 +590,7 @@ solve()
590590
HYPRE_PCGSetPrintLevel(solver, m_verbosity); // print solve info //
591591
HYPRE_PCGSetLogging(solver, 1); // needed to get run info later //
592592
break;
593-
case solver::GMRES:
593+
case solver::GMRES: // dimension, iter, rtol, atol
594594
HYPRE_ParCSRGMRESCreate(mpi_comm, &solver);
595595
HYPRE_GMRESSetKDim(solver, m_krylov_dim); // Krylov dimension //
596596
HYPRE_GMRESSetMaxIter(solver, m_max_iter); // max iterations //
@@ -599,16 +599,16 @@ solve()
599599
HYPRE_GMRESSetPrintLevel(solver, m_verbosity); // print solve info //
600600
HYPRE_GMRESSetLogging(solver, 1); // needed to get run info later //
601601
break;
602-
case solver::FGMRES:
602+
case solver::FGMRES: // dimension, iter, rtol, atol
603603
HYPRE_ParCSRFlexGMRESCreate(mpi_comm, &solver);
604-
HYPRE_FlexGMRESSetMaxIter(solver, m_max_iter); // max iterations //
605604
HYPRE_FlexGMRESSetKDim(solver, m_krylov_dim); // Krylov dimension //
605+
HYPRE_FlexGMRESSetMaxIter(solver, m_max_iter); // max iterations //
606606
HYPRE_FlexGMRESSetTol(solver, m_rtol); // relative conv. tolerance //
607607
HYPRE_FlexGMRESSetAbsoluteTol(solver, m_atol); // absolute conv. tolerance //
608608
HYPRE_FlexGMRESSetPrintLevel(solver, m_verbosity); // print solve info //
609609
HYPRE_FlexGMRESSetLogging(solver, 1); // needed to get run info later //
610610
break;
611-
case solver::BICGSTAB:
611+
case solver::BICGSTAB: // iter, rtol, atol
612612
HYPRE_ParCSRBiCGSTABCreate(mpi_comm, &solver);
613613
HYPRE_BiCGSTABSetMaxIter(solver, m_max_iter); // max iterations //
614614
HYPRE_BiCGSTABSetTol(solver, m_rtol); // relative conv. tolerance //

0 commit comments

Comments
 (0)