Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions modules/aerodynamics/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,39 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
-A,//fem/matrix-format=AF-BSR
inputs/Joukowski_3d.arc)

set(SOLVER_PETSC_CG_2D
-A,//fem/linear-system/@name=PETScLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-15
-A,//fem/linear-system/rtol=0)

set(SOLVER_PETSC_CG_3D
-A,//fem/linear-system/@name=PETScLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-15
-A,//fem/linear-system/rtol=0)

arcanefem_add_gpu_test(NAME [aerodynamics]2d_Joukowski_bsr_petsc COMMAND aerodynamics ARGS
-A,//fem/solution-comparison-file=check/test_2d.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG_2D}
inputs/Joukowski.arc)
arcanefem_add_gpu_test(NAME [aerodynamics]2d_Joukowski_af_petsc COMMAND aerodynamics ARGS
-A,//fem/solution-comparison-file=check/test_2d.txt
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG_2D}
inputs/Joukowski.arc)
arcanefem_add_gpu_test(NAME [aerodynamics]3d_Joukowski_bsr_petsc COMMAND aerodynamics ARGS
-A,//fem/solution-comparison-file=check/test_3d.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG_3D}
inputs/Joukowski_3d.arc)
arcanefem_add_gpu_test(NAME [aerodynamics]3d_Joukowski_bsr_petsc_gpu COMMAND aerodynamics ARGS
-A,//fem/solution-comparison-file=check/test_3d.txt
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG_3D}
inputs/Joukowski_3d.arc)

if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [aerodynamics]2d_Joukowski_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./aerodynamics
-A,//fem/solution-comparison-file=check/test_2d.txt
Expand Down
7 changes: 5 additions & 2 deletions modules/aerodynamics/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ startInit()
m_hex_quad_mesh = options()->hexQuadMesh();

if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";
if (m_matrix_format == "BSR")
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
else
Expand Down Expand Up @@ -176,7 +178,8 @@ _doStationarySolve()

void FemModule::_assembleLinearOperator()
{
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem")
_assembleLinearOperatorGpu();
else
_assembleLinearOperatorCpu();
Expand Down
8 changes: 5 additions & 3 deletions modules/elasticity/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -108,12 +108,14 @@ void FemModule::_initBsr()
info() << "[ArcaneFem-Info] Started module _initBsr()";
Real elapsedTime = platform::getRealTime();

bool use_csr_in_linearsystem = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";

if (m_matrix_format == "BSR")
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linearsystem, 0);
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linear_system, 0);
else
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linearsystem, 1);
m_bsr_format.initialize(defaultMesh(), m_dof_per_node, use_csr_in_linear_system, 1);

elapsedTime = platform::getRealTime() - elapsedTime;
ArcaneFemFunctions::GeneralFunctions::printArcaneFemTime(traceMng(),"initialize-bsr-matrix", elapsedTime);
Expand Down
9 changes: 6 additions & 3 deletions modules/elastodynamics/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,14 @@ startInit()

_getParameters();

bool use_csr_in_linearsystem = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";

if (m_matrix_format == "BSR")
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linearsystem, 0);
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linear_system, 0);
else if (m_matrix_format == "AF-BSR")
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linearsystem, 1);
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linear_system, 1);

t = dt;
tmax = tmax - dt;
Expand Down
25 changes: 25 additions & 0 deletions modules/electrostatics/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,31 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
-A,//fem/matrix-format=AF-BSR
inputs/spheres.arc)

set(SOLVER_PETSC_CG
-A,//fem/linear-system/@name=PETScLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-9
-A,//fem/linear-system/rtol=0)

arcanefem_add_gpu_test(NAME [electrostatics]rod-circle_bsr_petsc COMMAND ./Electrostatics ARGS
-A,//fem/solution-comparison-file=check/test_2.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG}
inputs/rod-circle.arc)
arcanefem_add_gpu_test(NAME [electrostatics]rod-circle_af-bsr_petsc COMMAND ./Electrostatics ARGS
-A,//fem/solution-comparison-file=check/test_2.txt
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG}
inputs/rod-circle.arc)
arcanefem_add_gpu_test(NAME [electrostatics]spheres_af-bsr_petsc COMMAND ./Electrostatics ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG}
inputs/spheres.arc)
arcanefem_add_gpu_test(NAME [electrostatics]truncated_cube_bsr_petsc COMMAND ./Electrostatics ARGS
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG}
inputs/truncated_cube.arc)

if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [electrostatics]box-rods_2pu COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Electrostatics
-A,//fem/solution-comparison-file=check/test_1.txt
Expand Down
7 changes: 5 additions & 2 deletions modules/electrostatics/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ compute()
}

if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";
if (m_matrix_format == "BSR")
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
else
Expand Down Expand Up @@ -154,7 +156,8 @@ _getMaterialParameters()

void FemModule::_assembleLinearOperator()
{
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem")
_assembleLinearOperatorGpu();
else
_assembleLinearOperatorCpu();
Expand Down
27 changes: 27 additions & 0 deletions modules/fourier/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,33 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
-A,//fem/matrix-format=AF-BSR
inputs/conduction.3D.arc)

set(SOLVER_PETSC_CG
-A,//fem/linear-system/@name=PETScLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-9
-A,//fem/linear-system/rtol=0)

arcanefem_add_gpu_test(NAME [fourier]conduction_petsc-direct_bsr COMMAND ./Fourier ARGS
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG}
inputs/conduction.arc)

arcanefem_add_gpu_test(NAME [fourier]conduction_petsc-direct_af-bsr COMMAND ./Fourier ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG}
inputs/conduction.arc)

arcanefem_add_gpu_test(NAME [fourier]3d_conduction_petsc-direct_bsr COMMAND ./Fourier ARGS
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG}
inputs/conduction.3D.arc)

arcanefem_add_gpu_test(NAME [fourier]3d_conduction_petsc-direct_af-bsr COMMAND ./Fourier ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG}
inputs/conduction.3D.arc)


if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [fourier]conduction_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Fourier
-A,//fem/solution-comparison-file=check/test1_results.txt
Expand Down
7 changes: 5 additions & 2 deletions modules/fourier/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,9 @@ compute()
}

if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";
if (m_matrix_format == "BSR")
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
else
Expand Down Expand Up @@ -186,7 +188,8 @@ _getMaterialParameters()
void FemModule::
_assembleLinearOperator()
{
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem")
_assembleLinearOperatorGpu();
else
_assembleLinearOperatorCpu();
Expand Down
4 changes: 3 additions & 1 deletion modules/heat/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ startInit()
m_hex_quad_mesh = options()->hexQuadMesh();

if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";
if (m_matrix_format == "BSR")
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
else
Expand Down
30 changes: 30 additions & 0 deletions modules/laplace/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,36 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
-A,//fem/matrix-format=AF-BSR
inputs/truncated-cube.neumann.3D.arc)

set(SOLVER_PETSC_CG
-A,//fem/linear-system/@name=PETScLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-9
-A,//fem/linear-system/rtol=0)
arcanefem_add_gpu_test(NAME [laplace]pointDirichlet_bsr_petsc-direct COMMAND ./Laplace ARGS
-A,//fem/solution-comparison-file=check/test3_results.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG}
inputs/PointDirichlet.arc)
arcanefem_add_gpu_test(NAME [laplace]pointDirichlet_af-bsr_petsc-direct COMMAND ./Laplace ARGS
-A,//fem/solution-comparison-file=check/test3_results.txt
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG}
inputs/PointDirichlet.arc)
arcanefem_add_gpu_test(NAME [laplace]3D_Dirichlet_bsr_petsc-direct COMMAND ./Laplace ARGS
-A,//fem/solution-comparison-file=check/test_3D_L-shape.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG}
inputs/L-shape.3D.arc)
arcanefem_add_gpu_test(NAME [laplace]3D_Dirichlet_af-bsr_petsc-direct COMMAND ./Laplace ARGS
-A,//fem/solution-comparison-file=check/test_3D_L-shape.txt
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG}
inputs/L-shape.3D.arc)
arcanefem_add_gpu_test(NAME [laplace]3D_pointBc_neumann_af-bsr_petsc-direct COMMAND ./Laplace ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG}
inputs/truncated-cube.neumann.3D.arc)

if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [laplace]2D_Dirichlet_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Laplace
inputs/ring.arc)
Expand Down
7 changes: 5 additions & 2 deletions modules/laplace/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ compute()
}

if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";
if (m_matrix_format == "BSR")
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
else
Expand Down Expand Up @@ -130,7 +132,8 @@ _doStationarySolve()

void FemModule::_assembleLinearOperator()
{
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem")
_assembleLinearOperatorGpu();
else
_assembleLinearOperatorCpu();
Expand Down
50 changes: 50 additions & 0 deletions modules/poisson/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -177,4 +177,54 @@ if (FEMUTILS_HAS_SOLVER_BACKEND_HYPRE)
-A,//fem/matrix-format=AF-BSR
${SOLVER_HYPRE_CG_3D}
inputs/sphere.3D.arc)
endif()


if (FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
set(SOLVER_PETSC_CG_2D
-A,//fem/linear-system/@name=PETScLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-15
-A,//fem/linear-system/rtol=0)

set(SOLVER_PETSC_CG_3D
-A,//fem/linear-system/@name=PETScLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-15
-A,//fem/linear-system/rtol=0)

arcanefem_add_gpu_test(NAME [poisson]2D_pntDirichlet_bsr_petsc COMMAND Poisson ARGS
-A,//fem/solution-comparison-file=check/poisson_test_point_dirichlet_2D.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG_2D}
inputs/perforatedSquare.pointDirichlet.2D.arc)
arcanefem_add_gpu_test(NAME [poisson]2D_bsr_petsc COMMAND Poisson ARGS
-A,//fem/solution-comparison-file=check/poisson_test_ref_circle_2D.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG_2D}
inputs/circle.2D.arc)
arcanefem_add_gpu_test(NAME [poisson]2D_neumann_bsr_petsc COMMAND Poisson ARGS
-A,//fem/solution-comparison-file=check/poisson_test_ref_circle_neumann_2D.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG_2D}
inputs/circle.neumann.2D.arc)
arcanefem_add_gpu_test(NAME [poisson]2D_bsr_atomicFree_petsc COMMAND Poisson ARGS
-A,//fem/solution-comparison-file=check/poisson_test_ref_circle_2D.txt
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG_2D}
inputs/circle.2D.arc)
arcanefem_add_gpu_test(NAME [poisson]3D_bsr_petsc_gpu COMMAND Poisson ARGS
-A,//fem/solution-comparison-file=check/poisson_test_ref_sphere_3D.txt
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG_3D}
inputs/sphere.3D.arc)
arcanefem_add_gpu_test(NAME [poisson]3D_neumann_bsr_petsc COMMAND Poisson ARGS
-A,//fem/matrix-format=BSR
${SOLVER_PETSC_CG_3D}
inputs/sphere.neumann.3D.arc)
arcanefem_add_gpu_test(NAME [poisson]3D_bsr_atomicFree_petsc_gpu COMMAND Poisson ARGS
-A,//fem/solution-comparison-file=check/poisson_test_ref_sphere_3D.txt
-A,//fem/matrix-format=AF-BSR
${SOLVER_PETSC_CG_3D}
inputs/sphere.3D.arc)
endif()
7 changes: 5 additions & 2 deletions modules/poisson/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,9 @@ compute()
}

if (m_matrix_format == "BSR" || m_matrix_format == "AF-BSR") {
auto use_csr_in_linear_system = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";
if (m_matrix_format == "BSR")
m_bsr_format.initialize(mesh(), 1, use_csr_in_linear_system, 0);
else
Expand Down Expand Up @@ -156,7 +158,8 @@ _getMaterialParameters()

void FemModule::_assembleLinearOperator()
{
if (options()->linearSystem.serviceName() == "HypreLinearSystem")
if (options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem")
_assembleLinearOperatorGpu();
else
_assembleLinearOperatorCpu();
Expand Down
9 changes: 6 additions & 3 deletions modules/soildynamics/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,14 @@ startInit()

_getParameters();

bool use_csr_in_linearsystem = options()->linearSystem.serviceName() == "HypreLinearSystem";
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";

if (m_matrix_format == "BSR")
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linearsystem, 0);
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linear_system, 0);
else if (m_matrix_format == "AF-BSR")
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linearsystem, 1);
m_bsr_format.initialize(defaultMesh(), mesh()->dimension(), use_csr_in_linear_system, 1);

t = dt;
tmax = tmax;
Expand Down
6 changes: 3 additions & 3 deletions modules/testlab/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,9 @@ startInit()
}

if (options()->bsr || options()->bsrAtomicFree()) {
bool use_csr_in_linear_system = false;
if (options()->linearSystem.serviceName() == "HypreLinearSystem" || options()->linearSystem.serviceName() == "PETScLinearSystem")
use_csr_in_linear_system = true;
bool use_csr_in_linear_system =
options()->linearSystem.serviceName() == "HypreLinearSystem" ||
options()->linearSystem.serviceName() == "PETScLinearSystem";
m_bsr_format.initialize(mesh, 1, use_csr_in_linear_system, options()->bsrAtomicFree);
}
}
Expand Down