Skip to content

Commit

Permalink
testing via Arcane command-line options (#222)
Browse files Browse the repository at this point in the history
* testing via commandline options
* Arcane handles commandline params
* more tests
  • Loading branch information
mohd-afeef-badri authored Feb 25, 2025
1 parent 743faa1 commit 799e768
Show file tree
Hide file tree
Showing 13 changed files with 151 additions and 469 deletions.
154 changes: 124 additions & 30 deletions modules/elasticity/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,40 +37,134 @@ endforeach()
enable_testing()

if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
add_test(NAME [elasticity]Dirichlet COMMAND Elasticity inputs/bar.2D.arc)
add_test(NAME [elasticity]Dirichlet_traction COMMAND Elasticity inputs/bar.2D.traction.arc)
add_test(NAME [elasticity]Dirichlet_pointBC COMMAND Elasticity inputs/bar.2D.PointDirichlet.arc)
add_test(NAME [elasticity]Dirichlet_pointBC_bsr COMMAND Elasticity -A,matrix_format=BSR inputs/bar.2D.PointDirichlet.arc)
add_test(NAME [elasticity]Dirichlet_pointBC_via_RowElimination COMMAND Elasticity inputs/bar.2D.PointDirichlet.DirichletViaRowElimination.arc)
add_test(NAME [elasticity]Dirichlet_pointBC_via_RowColElimination COMMAND Elasticity inputs/bar.2D.PointDirichlet.DirichletViaRowColumnElimination.arc)
add_test(NAME [elasticity]Dirichlet_via_RowElimination COMMAND Elasticity inputs/bar.2D.DirichletViaRowElimination.arc)
add_test(NAME [elasticity]Dirichlet_via_RowColElimination COMMAND Elasticity inputs/bar.2D.DirichletViaRowColumnElimination.arc)
add_test(NAME [elasticity]Dirichlet_traction_Bodyforce COMMAND Elasticity inputs/bar.2D.traction.bodyforce.arc)
add_test(NAME [elasticity]bar_parse_and_exit COMMAND Elasticity -A,assemble_linear_system=FALSE -A,solve_linear_system=FALSE -A,cross_validation=FALSE inputs/bar.2D.arc)
add_test(NAME [elasticity]bar_petsc_flags COMMAND Elasticity -A,petsc_flags=-ksp_monitor -A,cross_validation=FALSE inputs/bar.2D.arc)
add_test(NAME [elasticity]3D_Dirichlet_Bodyforce_dok COMMAND Elasticity -A,matrix_format=DOK inputs/bar.3D.Dirichlet.bodyForce.arc)

arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_Bodyforce_bsr COMMAND ./Elasticity ARGS -A,matrix_format=BSR inputs/bar.3D.Dirichlet.bodyForce.arc)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_Bodyforce_af-bsr COMMAND ./Elasticity ARGS -A,matrix_format=AF-BSR inputs/bar.3D.Dirichlet.bodyForce.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bsr COMMAND ./Elasticity ARGS -A,matrix_format=BSR inputs/bar.2D.traction.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_Bodyforce_bsr COMMAND ./Elasticity ARGS -A,matrix_format=BSR inputs/bar.2D.traction.bodyforce.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_Bodyforce_bsr_atomic_free COMMAND ./Elasticity ARGS -A,matrix_format=AF-BSR inputs/bar.2D.traction.bodyforce.arc)
set(SOLVER_PETSC_GMRES
-A,//fem/petsc-flags=-ksp_monitor\ -ksp_type\ gmres\ -pc_type\ bjacobi\ -ksp_rtol\ 1e-15)

add_test(NAME [elasticity]Dirichlet COMMAND Elasticity
inputs/bar.2D.arc)

add_test(NAME [elasticity]Dirichlet_traction COMMAND Elasticity
inputs/bar.2D.traction.arc)

add_test(NAME [elasticity]Dirichlet_pointBC COMMAND Elasticity
inputs/bar.2D.PointDirichlet.arc)

add_test(NAME [elasticity]Dirichlet_pointBC_via_RowElimination COMMAND Elasticity
-A,//fem/enforce-Dirichlet-method=RowElimination
${SOLVER_PETSC_GMRES}
inputs/bar.2D.PointDirichlet.arc)

add_test(NAME [elasticity]Dirichlet_pointBC_via_RowColElimination COMMAND Elasticity
-A,//fem/enforce-Dirichlet-method=RowColumnElimination
inputs/bar.2D.PointDirichlet.arc)

add_test(NAME [elasticity]Dirichlet_via_RowElimination COMMAND Elasticity
-A,//fem/enforce-Dirichlet-method=RowElimination
${SOLVER_PETSC_GMRES}
inputs/bar.2D.arc)

add_test(NAME [elasticity]Dirichlet_via_RowColElimination COMMAND Elasticity
-A,//fem/enforce-Dirichlet-method=RowColumnElimination
inputs/bar.2D.arc)

add_test(NAME [elasticity]Dirichlet_traction_bodyforce COMMAND Elasticity
inputs/bar.2D.traction.bodyforce.arc)

add_test(NAME [elasticity]bar_parse_and_exit COMMAND Elasticity
-A,//fem/assemble-linear-system=false
-A,//fem/solve-linear-system=false
-A,//fem/cross-validation=false
inputs/bar.2D.arc)

add_test(NAME [elasticity]3D_Dirichlet_bodyforce_dok COMMAND Elasticity
-A,//fem/matrix-format=DOK
inputs/bar.2D.PointDirichlet.arc)

arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
inputs/bar.3D.Dirichlet.bodyForce.arc)

arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
inputs/bar.3D.Dirichlet.bodyForce.arc)

arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_af-bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=AF-BSR
inputs/bar.3D.Dirichlet.bodyForce.arc)

arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
inputs/bar.2D.traction.arc)

arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bodyforce_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
inputs/bar.2D.traction.bodyforce.arc)

arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bodyforce_af-bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=AF-BSR
inputs/bar.2D.traction.bodyforce.arc)

if(FEMUTILS_HAS_PARALLEL_SOLVER)
add_test(NAME [elasticity]Dirichlet_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Elasticity inputs/bar.2D.arc)
add_test(NAME [elasticity]Dirichlet_via_RowElimination_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Elasticity inputs/bar.2D.DirichletViaRowElimination.arc)
add_test(NAME [elasticity]Dirichlet_via_RowColElimination_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Elasticity inputs/bar.2D.DirichletViaRowColumnElimination.arc)
add_test(NAME [elasticity]Dirichlet_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Elasticity
inputs/bar.2D.arc)
add_test(NAME [elasticity]Dirichlet_via_RowElimination_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Elasticity
-A,//fem/enforce-Dirichlet-method=RowElimination
${SOLVER_PETSC_GMRES}
inputs/bar.2D.arc)
add_test(NAME [elasticity]Dirichlet_via_RowColElimination_2p COMMAND ${MPIEXEC_EXECUTABLE} -n 2 ./Elasticity
-A,//fem/enforce-Dirichlet-method=RowColumnElimination
inputs/bar.2D.arc)
endif()
endif()

if(FEMUTILS_HAS_SOLVER_BACKEND_HYPRE)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_Bodyforce_traction_hypre_bsr COMMAND ./Elasticity ARGS -A,matrix_format=BSR inputs/bar.3D.Dirichlet.traction.bodyForce.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_Bodyforce_traction_hypre_af-bsr COMMAND ./Elasticity ARGS -A,matrix_format=AF-BSR inputs/bar.3D.Dirichlet.traction.bodyForce.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_Bodyforce_hypre_bsr COMMAND ./Elasticity ARGS -A,matrix_format=BSR inputs/bar.3D.Dirichlet.bodyForce.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_Bodyforce_hypre_af-bsr COMMAND ./Elasticity ARGS -A,matrix_format=AF-BSR inputs/bar.3D.Dirichlet.bodyForce.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_RowElimination_bsr COMMAND ./Elasticity ARGS -A,matrix_format=BSR inputs/bar.2D.PointDirichlet.DirichletViaRowElimination.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_RowElimination_af-bsr COMMAND ./Elasticity ARGS -A,matrix_format=AF-BSR inputs/bar.2D.PointDirichlet.DirichletViaRowElimination.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bsr_hypre COMMAND ./Elasticity ARGS -A,matrix_format=BSR inputs/bar.2D.traction.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_Bodyforce_bsr_atomic_free_hypre COMMAND ./Elasticity ARGS -A,matrix_format=AF-BSR inputs/bar.2D.traction.bodyforce.hypre.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_bsr_hypre COMMAND Elasticity ARGS -A,matrix_format=BSR inputs/bar.2D.PointDirichlet.hypre.arc)
set(SOLVER_HYPRE_CG
-A,//fem/linear-system/@name=HypreLinearSystem
-A,//fem/linear-system/solver=cg
-A,//fem/linear-system/atol=1e-9
-A,//fem/linear-system/rtol=0)

set(SOLVER_HYPRE_BICGSTAB
-A,//fem/linear-system/@name=HypreLinearSystem
-A,//fem/linear-system/solver=bicgstab)

arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_traction_hypre_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
${SOLVER_HYPRE_CG}
inputs/bar.3D.Dirichlet.traction.bodyForce.arc)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_traction_hypre_af-bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_HYPRE_CG}
inputs/bar.3D.Dirichlet.traction.bodyForce.arc)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_hypre_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
${SOLVER_HYPRE_CG}
inputs/bar.3D.Dirichlet.bodyForce.arc)
arcanefem_add_gpu_test(NAME [elasticity]3D_Dirichlet_bodyforce_hypre_af-bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_HYPRE_CG}
inputs/bar.3D.Dirichlet.bodyForce.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_RowElimination_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
${SOLVER_HYPRE_BICGSTAB}
-A,//fem/enforce-Dirichlet-method=RowElimination
inputs/bar.2D.PointDirichlet.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_RowElimination_af-bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_HYPRE_BICGSTAB}
-A,//fem/enforce-Dirichlet-method=RowElimination
inputs/bar.2D.PointDirichlet.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_pointBC_hypre_bsr COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
${SOLVER_HYPRE_CG}
-A,//fem/enforce-Dirichlet-method=Penalty
inputs/bar.2D.PointDirichlet.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bsr_hypre COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=BSR
${SOLVER_HYPRE_CG}
inputs/bar.2D.traction.arc)
arcanefem_add_gpu_test(NAME [elasticity]Dirichlet_traction_bodyforce_af-bsr_hypre COMMAND ./Elasticity ARGS
-A,//fem/matrix-format=AF-BSR
${SOLVER_HYPRE_CG}
inputs/bar.2D.traction.bodyforce.arc)
endif()
12 changes: 12 additions & 0 deletions modules/elasticity/Fem.axl
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@
<simple name="matrix-format" type="string" default="DOK" optional="true">
<description>Which matrix format to use DOK|BSR|AF-BSR.</description>
</simple>
<simple name="petsc-flags" type="string" default="" optional="true">
<description>Flags for PETSc from commandline.</description>
</simple>
<simple name="solve-linear-system" type="bool" default="true" optional="true">
<description>Boolean to enable linear system solving.</description>
</simple>
<simple name="assemble-linear-system" type="bool" default="true" optional="true">
<description>Boolean to enable linear system assembly.</description>
</simple>
<simple name="cross-validation" type="bool" default="true" optional="true">
<description>Boolean to enable cross validation.</description>
</simple>

<!-- - - - - - dirichlet-boundary-condition - - - - -->
<complex name = "dirichlet-boundary-condition"
Expand Down
56 changes: 15 additions & 41 deletions modules/elasticity/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,13 @@ startInit()

m_dof_per_node = defaultMesh()->dimension();
m_matrix_format = options()->matrixFormat();
m_assemble_linear_system = options()->assembleLinearSystem();
m_solve_linear_system = options()->solveLinearSystem();
m_cross_validation = options()->crossValidation();
m_petsc_flags = options()->petscFlags();

m_dofs_on_nodes.initialize(defaultMesh(), m_dof_per_node);

_handleCommandLineFlags();

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] initialize", elapsedTime);
}
Expand Down Expand Up @@ -133,11 +135,17 @@ void FemModule::
_doStationarySolve()
{
_getMaterialParameters();
_assembleBilinearOperator();
_assembleLinearOperator();
_solve();
_updateVariables();
_validateResults();
if(m_assemble_linear_system){
_assembleBilinearOperator();
_assembleLinearOperator();
}
if(m_solve_linear_system){
_solve();
_updateVariables();
}
if(m_cross_validation){
_validateResults();
}
}

/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -720,40 +728,6 @@ _setPetscFlagsFromCommandline()
m_linear_system.setSolverCommandLineArguments(args);
}

/*---------------------------------------------------------------------------*/
/**
* @brief Function to hande commandline flags
*/
/*---------------------------------------------------------------------------*/
void FemModule::
_handleCommandLineFlags()
{
info() << "[ArcaneFem-Module] _handleCommandLineFlags()";
ParameterList parameter_list = this->subDomain()->application()->applicationInfo().commandLineArguments().parameters();
if (parameter_list.getParameterOrNull("assemble_linear_system") == "FALSE") {
m_assemble_linear_system = false;
info() << "[ArcaneFem-Info] Linear system not assembled (assemble_linear_system = FALSE)";
}
if (parameter_list.getParameterOrNull("solve_linear_system") == "FALSE") {
m_solve_linear_system = false;
m_cross_validation = false;
info() << "[ArcaneFem-Info] Linear system assembled but not solved (solve_linear_system = FALSE)";
}
if (parameter_list.getParameterOrNull("cross_validation") == "FALSE") {
m_cross_validation = false;
info() << "[ArcaneFem-Info] Cross validation disabled (cross_validation = FALSE)";
}
m_petsc_flags = parameter_list.getParameterOrNull("petsc_flags");
if (m_petsc_flags != NULL) {
info() << "[ArcaneFem-Info] PETSc flags the user provided will be used (petsc_flags != NULL)";
}
String matrix_format_from_commandline = parameter_list.getParameterOrNull("matrix_format");
if (matrix_format_from_commandline != NULL){
m_matrix_format = matrix_format_from_commandline;
info() << "[ArcaneFem-Info] Using commandline format for matrix format (matrix_format != NULL)";
}
}

/*---------------------------------------------------------------------------*/
/**
* @brief Function to prints the execution time `value` of phase `label`
Expand Down

This file was deleted.

37 changes: 0 additions & 37 deletions modules/elasticity/inputs/bar.2D.DirichletViaRowElimination.arc

This file was deleted.

This file was deleted.

Loading

0 comments on commit 799e768

Please sign in to comment.