Skip to content

Commit 37b1bc8

Browse files
PETSc support for scalar modules (#334)
* Activate PETSc-Direct and tests
1 parent 43811c9 commit 37b1bc8

File tree

15 files changed

+213
-23
lines changed

15 files changed

+213
-23
lines changed

modules/aerodynamics/CMakeLists.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,39 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
6363
-A,//fem/matrix-format=AF-BSR
6464
inputs/Joukowski_3d.arc)
6565

66+
set(SOLVER_PETSC_CG_2D
67+
-A,//fem/linear-system/@name=PETScLinearSystem
68+
-A,//fem/linear-system/solver=cg
69+
-A,//fem/linear-system/atol=1e-15
70+
-A,//fem/linear-system/rtol=0)
71+
72+
set(SOLVER_PETSC_CG_3D
73+
-A,//fem/linear-system/@name=PETScLinearSystem
74+
-A,//fem/linear-system/solver=cg
75+
-A,//fem/linear-system/atol=1e-15
76+
-A,//fem/linear-system/rtol=0)
77+
78+
arcanefem_add_gpu_test(NAME [aerodynamics]2d_Joukowski_bsr_petsc COMMAND aerodynamics ARGS
79+
-A,//fem/solution-comparison-file=check/test_2d.txt
80+
-A,//fem/matrix-format=BSR
81+
${SOLVER_PETSC_CG_2D}
82+
inputs/Joukowski.arc)
83+
arcanefem_add_gpu_test(NAME [aerodynamics]2d_Joukowski_af_petsc COMMAND aerodynamics ARGS
84+
-A,//fem/solution-comparison-file=check/test_2d.txt
85+
-A,//fem/matrix-format=AF-BSR
86+
${SOLVER_PETSC_CG_2D}
87+
inputs/Joukowski.arc)
88+
arcanefem_add_gpu_test(NAME [aerodynamics]3d_Joukowski_bsr_petsc COMMAND aerodynamics ARGS
89+
-A,//fem/solution-comparison-file=check/test_3d.txt
90+
-A,//fem/matrix-format=BSR
91+
${SOLVER_PETSC_CG_3D}
92+
inputs/Joukowski_3d.arc)
93+
arcanefem_add_gpu_test(NAME [aerodynamics]3d_Joukowski_bsr_petsc_gpu COMMAND aerodynamics ARGS
94+
-A,//fem/solution-comparison-file=check/test_3d.txt
95+
-A,//fem/matrix-format=AF-BSR
96+
${SOLVER_PETSC_CG_3D}
97+
inputs/Joukowski_3d.arc)
98+
6699
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
67100
add_test(NAME [aerodynamics]2d_Joukowski_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./aerodynamics
68101
-A,//fem/solution-comparison-file=check/test_2d.txt

modules/aerodynamics/FemModule.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ startInit()
4040
m_hex_quad_mesh = options()->hexQuadMesh();
4141

4242
if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
43-
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
43+
bool use_csr_in_linear_system =
44+
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
45+
options()->linearSystem.serviceName() == "PETScLinearSystem";
4446
if (m_matrix_format == "BSR")
4547
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
4648
else
@@ -176,7 +178,8 @@ _doStationarySolve()
176178

177179
void FemModule::_assembleLinearOperator()
178180
{
179-
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
181+
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
182+
options()->linearSystem.serviceName() == "PETScLinearSystem")
180183
_assembleLinearOperatorGpu();
181184
else
182185
_assembleLinearOperatorCpu();

modules/elasticity/FemModule.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,14 @@ void FemModule::_initBsr()
108108
info() << "[ArcaneFem-Info] Started module _initBsr()";
109109
Real elapsedTime = platform::getRealTime();
110110

111-
bool use_csr_in_linearsystem = options()->linearSystem.serviceName() == "HypreLinearSystem";
111+
bool use_csr_in_linear_system =
112+
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
113+
options()->linearSystem.serviceName() == "PETScLinearSystem";
112114

113115
if (m_matrix_format == "BSR")
114-
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linearsystem, 0);
116+
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linear_system, 0);
115117
else
116-
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linearsystem, 1);
118+
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linear_system, 1);
117119

118120
elapsedTime = platform::getRealTime() - elapsedTime;
119121
ArcaneFemFunctions::GeneralFunctions::printArcaneFemTime(traceMng(),"initialize-bsr-matrix", elapsedTime);

modules/elastodynamics/FemModule.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,14 @@ startInit()
3636

3737
_getParameters();
3838

39-
bool use_csr_in_linearsystem = options()->linearSystem.serviceName() == "HypreLinearSystem";
39+
bool use_csr_in_linear_system =
40+
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
41+
options()->linearSystem.serviceName() == "PETScLinearSystem";
42+
4043
if (m_matrix_format == "BSR")
41-
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linearsystem, 0);
44+
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linear_system, 0);
4245
else if (m_matrix_format == "AF-BSR")
43-
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linearsystem, 1);
46+
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linear_system, 1);
4447

4548
t = dt;
4649
tmax = tmax - dt;

modules/electrostatics/CMakeLists.txt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,31 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
8585
-A,//fem/matrix-format=AF-BSR
8686
inputs/spheres.arc)
8787

88+
set(SOLVER_PETSC_CG
89+
-A,//fem/linear-system/@name=PETScLinearSystem
90+
-A,//fem/linear-system/solver=cg
91+
-A,//fem/linear-system/atol=1e-9
92+
-A,//fem/linear-system/rtol=0)
93+
94+
arcanefem_add_gpu_test(NAME [electrostatics]rod-circle_bsr_petsc COMMAND ./Electrostatics ARGS
95+
-A,//fem/solution-comparison-file=check/test_2.txt
96+
-A,//fem/matrix-format=BSR
97+
${SOLVER_PETSC_CG}
98+
inputs/rod-circle.arc)
99+
arcanefem_add_gpu_test(NAME [electrostatics]rod-circle_af-bsr_petsc COMMAND ./Electrostatics ARGS
100+
-A,//fem/solution-comparison-file=check/test_2.txt
101+
-A,//fem/matrix-format=AF-BSR
102+
${SOLVER_PETSC_CG}
103+
inputs/rod-circle.arc)
104+
arcanefem_add_gpu_test(NAME [electrostatics]spheres_af-bsr_petsc COMMAND ./Electrostatics ARGS
105+
-A,//fem/matrix-format=AF-BSR
106+
${SOLVER_PETSC_CG}
107+
inputs/spheres.arc)
108+
arcanefem_add_gpu_test(NAME [electrostatics]truncated_cube_bsr_petsc COMMAND ./Electrostatics ARGS
109+
-A,//fem/matrix-format=BSR
110+
${SOLVER_PETSC_CG}
111+
inputs/truncated_cube.arc)
112+
88113
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
89114
add_test(NAME [electrostatics]box-rods_2pu COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Electrostatics
90115
-A,//fem/solution-comparison-file=check/test_1.txt

modules/electrostatics/FemModule.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ compute()
7373
}
7474

7575
if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
76-
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
76+
bool use_csr_in_linear_system =
77+
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
78+
options()->linearSystem.serviceName() == "PETScLinearSystem";
7779
if (m_matrix_format == "BSR")
7880
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
7981
else
@@ -154,7 +156,8 @@ _getMaterialParameters()
154156

155157
void FemModule::_assembleLinearOperator()
156158
{
157-
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
159+
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
160+
options()->linearSystem.serviceName() == "PETScLinearSystem")
158161
_assembleLinearOperatorGpu();
159162
else
160163
_assembleLinearOperatorCpu();

modules/fourier/CMakeLists.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,33 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
122122
-A,//fem/matrix-format=AF-BSR
123123
inputs/conduction.3D.arc)
124124

125+
set(SOLVER_PETSC_CG
126+
-A,//fem/linear-system/@name=PETScLinearSystem
127+
-A,//fem/linear-system/solver=cg
128+
-A,//fem/linear-system/atol=1e-9
129+
-A,//fem/linear-system/rtol=0)
130+
131+
arcanefem_add_gpu_test(NAME [fourier]conduction_petsc-direct_bsr COMMAND ./Fourier ARGS
132+
-A,//fem/matrix-format=BSR
133+
${SOLVER_PETSC_CG}
134+
inputs/conduction.arc)
135+
136+
arcanefem_add_gpu_test(NAME [fourier]conduction_petsc-direct_af-bsr COMMAND ./Fourier ARGS
137+
-A,//fem/matrix-format=AF-BSR
138+
${SOLVER_PETSC_CG}
139+
inputs/conduction.arc)
140+
141+
arcanefem_add_gpu_test(NAME [fourier]3d_conduction_petsc-direct_bsr COMMAND ./Fourier ARGS
142+
-A,//fem/matrix-format=BSR
143+
${SOLVER_PETSC_CG}
144+
inputs/conduction.3D.arc)
145+
146+
arcanefem_add_gpu_test(NAME [fourier]3d_conduction_petsc-direct_af-bsr COMMAND ./Fourier ARGS
147+
-A,//fem/matrix-format=AF-BSR
148+
${SOLVER_PETSC_CG}
149+
inputs/conduction.3D.arc)
150+
151+
125152
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
126153
add_test(NAME [fourier]conduction_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Fourier
127154
-A,//fem/solution-comparison-file=check/test1_results.txt

modules/fourier/FemModule.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,9 @@ compute()
9999
}
100100

101101
if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
102-
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
102+
bool use_csr_in_linear_system =
103+
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
104+
options()->linearSystem.serviceName() == "PETScLinearSystem";
103105
if (m_matrix_format == "BSR")
104106
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
105107
else
@@ -186,7 +188,8 @@ _getMaterialParameters()
186188
void FemModule::
187189
_assembleLinearOperator()
188190
{
189-
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
191+
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
192+
options()->linearSystem.serviceName() == "PETScLinearSystem")
190193
_assembleLinearOperatorGpu();
191194
else
192195
_assembleLinearOperatorCpu();

modules/heat/FemModule.cc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ startInit()
4040
m_hex_quad_mesh = options()->hexQuadMesh();
4141

4242
if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
43-
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
43+
bool use_csr_in_linear_system =
44+
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
45+
options()->linearSystem.serviceName() == "PETScLinearSystem";
4446
if (m_matrix_format == "BSR")
4547
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
4648
else

modules/laplace/CMakeLists.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,36 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
102102
-A,//fem/matrix-format=AF-BSR
103103
inputs/truncated-cube.neumann.3D.arc)
104104

105+
set(SOLVER_PETSC_CG
106+
-A,//fem/linear-system/@name=PETScLinearSystem
107+
-A,//fem/linear-system/solver=cg
108+
-A,//fem/linear-system/atol=1e-9
109+
-A,//fem/linear-system/rtol=0)
110+
arcanefem_add_gpu_test(NAME [laplace]pointDirichlet_bsr_petsc-direct COMMAND ./Laplace ARGS
111+
-A,//fem/solution-comparison-file=check/test3_results.txt
112+
-A,//fem/matrix-format=BSR
113+
${SOLVER_PETSC_CG}
114+
inputs/PointDirichlet.arc)
115+
arcanefem_add_gpu_test(NAME [laplace]pointDirichlet_af-bsr_petsc-direct COMMAND ./Laplace ARGS
116+
-A,//fem/solution-comparison-file=check/test3_results.txt
117+
-A,//fem/matrix-format=AF-BSR
118+
${SOLVER_PETSC_CG}
119+
inputs/PointDirichlet.arc)
120+
arcanefem_add_gpu_test(NAME [laplace]3D_Dirichlet_bsr_petsc-direct COMMAND ./Laplace ARGS
121+
-A,//fem/solution-comparison-file=check/test_3D_L-shape.txt
122+
-A,//fem/matrix-format=BSR
123+
${SOLVER_PETSC_CG}
124+
inputs/L-shape.3D.arc)
125+
arcanefem_add_gpu_test(NAME [laplace]3D_Dirichlet_af-bsr_petsc-direct COMMAND ./Laplace ARGS
126+
-A,//fem/solution-comparison-file=check/test_3D_L-shape.txt
127+
-A,//fem/matrix-format=AF-BSR
128+
${SOLVER_PETSC_CG}
129+
inputs/L-shape.3D.arc)
130+
arcanefem_add_gpu_test(NAME [laplace]3D_pointBc_neumann_af-bsr_petsc-direct COMMAND ./Laplace ARGS
131+
-A,//fem/matrix-format=AF-BSR
132+
${SOLVER_PETSC_CG}
133+
inputs/truncated-cube.neumann.3D.arc)
134+
105135
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
106136
add_test(NAME [laplace]2D_Dirichlet_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Laplace
107137
inputs/ring.arc)

0 commit comments

Comments
 (0)