Skip to content

Commit 38d0264

Browse files
petsc-direct support (#336)
* petsc-direct support
1 parent 51a4aeb commit 38d0264

File tree

3 files changed

+98
-8
lines changed

3 files changed

+98
-8
lines changed

modules/elasticity/CMakeLists.txt

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,97 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
159159
-A,//fem/matrix-format=AF-BSR
160160
inputs/bar.2D.traction.bodyforce.arc)
161161

162+
set(SOLVER_PETSC_DIRECT_CG
163+
-A,//fem/linear-system/@name=PETScLinearSystem
164+
-A,//fem/linear-system/solver=cg
165+
-A,//fem/linear-system/atol=1e-9
166+
-A,//fem/linear-system/rtol=0)
167+
168+
set(SOLVER_PETSC_DIRECT_GMRES
169+
-A,//fem/linear-system/@name=PETScLinearSystem
170+
-A,//fem/linear-system/solver=gmres
171+
-A,//fem/linear-system/atol=1e-9
172+
-A,//fem/linear-system/rtol=0)
173+
174+
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_traction_petsc-direct_bsr COMMAND ./Elasticity ARGS
175+
-A,//fem/matrix-format=BSR
176+
${SOLVER_PETSC_DIRECT_CG}
177+
inputs/bar.3D.Dirichlet.traction.bodyForce.arc)
178+
179+
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_traction_petsc-direct_af-bsr COMMAND ./Elasticity ARGS
180+
-A,//fem/matrix-format=AF-BSR
181+
${SOLVER_PETSC_DIRECT_CG}
182+
inputs/bar.3D.Dirichlet.traction.bodyForce.arc)
183+
184+
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_petsc-direct_bsr COMMAND ./Elasticity ARGS
185+
-A,//fem/solution-comparison-file=check/bar.3D.Dirichlet.bodyForce.txt
186+
-A,//fem/matrix-format=BSR
187+
${SOLVER_PETSC_DIRECT_CG}
188+
inputs/bar.3D.Dirichlet.bodyForce.arc)
189+
190+
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_petsc-direct_af-bsr COMMAND ./Elasticity ARGS
191+
-A,//fem/solution-comparison-file=check/bar.3D.Dirichlet.bodyForce.txt
192+
-A,//fem/matrix-format=AF-BSR
193+
${SOLVER_PETSC_DIRECT_CG}
194+
inputs/bar.3D.Dirichlet.bodyForce.arc)
195+
196+
arcanefem_add_gpu_test(NAME [elasticity]3D_sphere_Dirichlet_bodyforce_petsc-direct_af-bsr COMMAND ./Elasticity ARGS
197+
-A,//fem/matrix-format=AF-BSR
198+
${SOLVER_PETSC_DIRECT_CG}
199+
inputs/3D.sphere.dirichlet.traction.bodyforce.tetra.arc)
200+
201+
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_RowElimination_petsc-direct_bsr COMMAND ./Elasticity ARGS
202+
-A,//fem/solution-comparison-file=check/bar.2D.PointDirichlet.Dirichlet.bodyForce.txt
203+
-A,//fem/matrix-format=BSR
204+
${SOLVER_PETSC_DIRECT_GMRES}
205+
-A,//fem/boundary-conditions/dirichlet[1]/enforce-Dirichlet-method=RowElimination
206+
-A,//fem/boundary-conditions/dirichlet[2]/enforce-Dirichlet-method=RowElimination
207+
-A,//fem/boundary-conditions/dirichlet-point[1]/enforce-Dirichlet-method=RowElimination
208+
-A,//fem/boundary-conditions/dirichlet-point[2]/enforce-Dirichlet-method=RowElimination
209+
inputs/bar.2D.PointDirichlet.Dirichlet.bodyForce.arc)
210+
211+
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_RowElimination_petsc-direct_af-bsr COMMAND ./Elasticity ARGS
212+
-A,//fem/solution-comparison-file=check/bar.2D.PointDirichlet.Dirichlet.bodyForce.txt
213+
-A,//fem/matrix-format=AF-BSR
214+
${SOLVER_PETSC_DIRECT_GMRES}
215+
-A,//fem/boundary-conditions/dirichlet[1]/enforce-Dirichlet-method=RowElimination
216+
-A,//fem/boundary-conditions/dirichlet[2]/enforce-Dirichlet-method=RowElimination
217+
-A,//fem/boundary-conditions/dirichlet-point[1]/enforce-Dirichlet-method=RowElimination
218+
-A,//fem/boundary-conditions/dirichlet-point[2]/enforce-Dirichlet-method=RowElimination
219+
inputs/bar.2D.PointDirichlet.Dirichlet.bodyForce.arc)
220+
221+
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_RowColElimination_petsc-direct_af-bsr COMMAND ./Elasticity ARGS
222+
-A,//fem/solution-comparison-file=check/bar.2D.PointDirichlet.Dirichlet.bodyForce.txt
223+
-A,//fem/matrix-format=AF-BSR
224+
${SOLVER_PETSC_DIRECT_GMRES}
225+
-A,//fem/boundary-conditions/dirichlet[1]/enforce-Dirichlet-method=RowColumnElimination
226+
-A,//fem/boundary-conditions/dirichlet[2]/enforce-Dirichlet-method=RowColumnElimination
227+
-A,//fem/boundary-conditions/dirichlet-point[1]/enforce-Dirichlet-method=RowColumnElimination
228+
-A,//fem/boundary-conditions/dirichlet-point[2]/enforce-Dirichlet-method=RowColumnElimination
229+
inputs/bar.2D.PointDirichlet.Dirichlet.bodyForce.arc)
230+
231+
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_petsc-direct_bsr COMMAND ./Elasticity ARGS
232+
-A,//fem/solution-comparison-file=check/bar.2D.PointDirichlet.Dirichlet.bodyForce.txt
233+
-A,//fem/matrix-format=BSR
234+
${SOLVER_PETSC_DIRECT_CG}
235+
-A,//fem/boundary-conditions/dirichlet[1]/enforce-Dirichlet-method=Penalty
236+
-A,//fem/boundary-conditions/dirichlet[2]/enforce-Dirichlet-method=Penalty
237+
-A,//fem/boundary-conditions/dirichlet-point[1]/enforce-Dirichlet-method=Penalty
238+
-A,//fem/boundary-conditions/dirichlet-point[2]/enforce-Dirichlet-method=Penalty
239+
inputs/bar.2D.PointDirichlet.Dirichlet.bodyForce.arc)
240+
241+
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bsr_petsc-direct COMMAND ./Elasticity ARGS
242+
-A,//fem/solution-comparison-file=check/bar.2D.Dirichlet.traction.txt
243+
-A,//fem/matrix-format=BSR
244+
${SOLVER_PETSC_DIRECT_CG}
245+
inputs/bar.2D.Dirichlet.traction.arc)
246+
247+
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bodyforce_af-bsr_petsc-direct COMMAND ./Elasticity ARGS
248+
-A,//fem/solution-comparison-file=check/bar.2D.traction.bodyforce.txt
249+
-A,//fem/matrix-format=AF-BSR
250+
${SOLVER_PETSC_DIRECT_CG}
251+
inputs/bar.2D.traction.bodyforce.arc)
252+
162253
if(FEMUTILS_HAS_PARALLEL_SOLVER)
163254
add_test(NAME [elasticity]Dirichlet_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Elasticity
164255
-A,//fem/solution-comparison-file=check/bar.2D.Dirichlet.bodyForce.txt

modules/elasticity/Dirichlet.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
inline void FemModule::
2727
_applyDirichlet(VariableDoFReal& rhs_values, const IndexedNodeDoFConnectivityView& node_dof)
2828
{
29-
30-
// check if Hypre solver is used and delegate to GPU for dirichlet assembly
31-
auto use_hypre = options()->linearSystem.serviceName() == "HypreLinearSystem";
32-
if (use_hypre) {
29+
// check if Hypre|PETSc solver is used and delegate to GPU for dirichlet assembly
30+
auto use_gpu = options()->linearSystem.serviceName() == "HypreLinearSystem" ||
31+
options()->linearSystem.serviceName() == "PETScLinearSystem";
32+
if (use_gpu) {
3333
_assembleDirichletsGpu();
3434
return;
3535
}

modules/elasticity/FemModule.cc

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

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

115114
if (m_matrix_format == "BSR")
116-
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linear_system, 0);
115+
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linearsystem, 0);
117116
else
118-
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linear_system, 1);
117+
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linearsystem, 1);
119118

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

0 commit comments

Comments
 (0)