Skip to content

Commit

Permalink
reorg of files
Browse files Browse the repository at this point in the history
  • Loading branch information
mohd-afeef-badri committed Feb 10, 2025
1 parent 796916c commit 1eef456
Show file tree
Hide file tree
Showing 6 changed files with 317 additions and 192 deletions.
18 changes: 8 additions & 10 deletions modules/fourier/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,16 +64,14 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
add_test(NAME [Fourier]conduction_heterogeneous COMMAND Fourier inputs/conduction.heterogeneous.arc)
add_test(NAME [Fourier]conduction_quad COMMAND Fourier inputs/conduction.quad4.arc)
add_test(NAME [Fourier]manufacture_solution COMMAND Fourier -A,UsingDotNet=1 inputs/manufacture.solution.arc)
endif()


# If parallel part is available, add some tests
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [Fourier]conduction_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.arc)
add_test(NAME [Fourier]conduction_heterogeneous_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.heterogeneous.arc)
add_test(NAME [Fourier]manufacture_solution_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier -A,UsingDotNet=1 inputs/manufacture.solution.arc)
if(FEMTEST_HAS_GMSH_TEST)
add_test(NAME [Fourier]conduction_10k_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.10k.arc)
add_test(NAME [Fourier]conduction_heterogeneous_10k_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.heterogeneous.10k.arc)
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [Fourier]conduction_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.arc)
add_test(NAME [Fourier]conduction_heterogeneous_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.heterogeneous.arc)
add_test(NAME [Fourier]manufacture_solution_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier -A,UsingDotNet=1 inputs/manufacture.solution.arc)
if(FEMTEST_HAS_GMSH_TEST)
add_test(NAME [Fourier]conduction_10k_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.10k.arc)
add_test(NAME [Fourier]conduction_heterogeneous_10k_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./Fourier inputs/conduction.heterogeneous.10k.arc)
endif()
endif()
endif()
90 changes: 80 additions & 10 deletions modules/fourier/FemModule.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
void FemModule::
startInit()
{
info() << "Module Fem INIT";
info() << "[ArcaneFem-Info] Started module startInit()";
Real elapsedTime = platform::getRealTime();

m_dofs_on_nodes.initialize(mesh(), 1);
m_dof_family = m_dofs_on_nodes.dofFamily();
Expand Down Expand Up @@ -55,6 +56,9 @@ startInit()
m_manufactured_dirichlet = functor;
}
}

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] initialize", elapsedTime);
}

/*---------------------------------------------------------------------------*/
Expand All @@ -70,7 +74,8 @@ startInit()
void FemModule::
compute()
{
info() << "Module Fem COMPUTE";
info() << "[ArcaneFem-Info] Started module compute()";
Real elapsedTime = platform::getRealTime();

// Stop code after computations
if (m_global_iteration() > 0)
Expand All @@ -87,20 +92,25 @@ compute()
CommandLineArguments args(string_list);
m_linear_system.setSolverCommandLineArguments(args);
}
info() << "NB_CELL=" << allCells().size() << " NB_FACE=" << allFaces().size();

_doStationarySolve();

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] compute", elapsedTime);
}

/*---------------------------------------------------------------------------*/
/**
* @brief Performs a stationary solve for the FEM system.
*
* This method follows a sequence of steps to solve FEM system:
* 1. _getMaterialParameters() Retrieves material parameters via
* 2. _assembleBilinearOperator() Assembles the FEM matrix A
* 3. _assembleLinearOperator() Assembles the FEM RHS vector b
* 4. _solve() Solves for solution vector u = A^-1*b
* 5. _validateResults() Regression test
*
* 1. _getMaterialParameters() Retrieves material parameters via
* 2. _assembleBilinearOperator() Assembles the FEM matrix A
* 3. _assembleLinearOperator() Assembles the FEM RHS vector b
* 4. _solve() Solves for solution vector u = A^-1*b
* 5. _updateVariables() Updates FEM variables u = x
* 6. _validateResults() Regression test
*/
/*---------------------------------------------------------------------------*/

Expand All @@ -111,6 +121,7 @@ _doStationarySolve()
_assembleBilinearOperator();
_assembleLinearOperator();
_solve();
_updateVariables();
_validateResults();
}

Expand All @@ -128,7 +139,8 @@ _doStationarySolve()
void FemModule::
_getMaterialParameters()
{
info() << "Get material parameters ";
info() << "[ArcaneFem-Info] Started module _getMaterialParameters()";
Real elapsedTime = platform::getRealTime();

lambda = options()->lambda();
qdot = options()->qdot();
Expand All @@ -148,6 +160,9 @@ _getMaterialParameters()
m_cell_lambda[cell] = value;
}
}

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] get-material-params", elapsedTime);
}

/*---------------------------------------------------------------------------*/
Expand All @@ -170,7 +185,8 @@ _getMaterialParameters()
void FemModule::
_assembleLinearOperator()
{
info() << "Assembly of FEM linear operator";
info() << "[ArcaneFem-Info] Started module _assembleLinearOperator()";
Real elapsedTime = platform::getRealTime();

VariableDoFReal& rhs_values(m_linear_system.rhsVariable()); // Temporary variable to keep values for the RHS
rhs_values.fill(0.0);
Expand Down Expand Up @@ -203,6 +219,9 @@ _assembleLinearOperator()
}
}
}

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] rhs-vector-assembly", elapsedTime);
}

/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -253,6 +272,9 @@ _computeElementMatrixQuad4(Cell cell)
void FemModule::
_assembleBilinearOperator()
{
info() << "[ArcaneFem-Info] Started module _assembleBilinearOperator()";
Real elapsedTime = platform::getRealTime();

if (options()->meshType == "QUAD4")
_assembleBilinear<4>([this](const Cell& cell) {
return _computeElementMatrixQuad4(cell);
Expand All @@ -263,6 +285,9 @@ _assembleBilinearOperator()
});
else
ARCANE_FATAL("Non supported meshType");

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] lhs-matrix-assembly", elapsedTime);
}

/*---------------------------------------------------------------------------*/
Expand Down Expand Up @@ -317,8 +342,32 @@ _assembleBilinear(const std::function<FixedMatrix<N, N>(const Cell&)>& compute_e
void FemModule::
_solve()
{
info() << "[ArcaneFem-Info] Started module _solve()";
Real elapsedTime = platform::getRealTime();

m_linear_system.solve();

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] solve-linear-system", elapsedTime);
}

/*---------------------------------------------------------------------------*/
/**
* @brief Update the FEM variables.
*
* This method performs the following actions:
* 1. Fetches values of solution from solved linear system to FEM variables,
* i.e., it copies RHS DOF to u.
* 2. Performs synchronize of FEM variables across subdomains.
*/
/*---------------------------------------------------------------------------*/

void FemModule::
_updateVariables()
{
info() << "[ArcaneFem-Info] Started module _updateVariables()";
Real elapsedTime = platform::getRealTime();

{ // copies solution (and optionally exact solution) to FEM output
VariableDoFReal& dof_u(m_linear_system.solutionVariable());
auto node_dof(m_dofs_on_nodes.nodeDoFConnectivityView());
Expand All @@ -340,6 +389,9 @@ _solve()

for (BC::IManufacturedSolution* bs : options()->boundaryConditions()->manufacturedSolutions())
m_u_exact.synchronize();

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] update-variables", elapsedTime);
}

/*---------------------------------------------------------------------------*/
Expand All @@ -358,6 +410,9 @@ _solve()
void FemModule::
_validateResults()
{
info() << "[ArcaneFem-Info] Started module _validateResults()";
Real elapsedTime = platform::getRealTime();

if (allNodes().size() < 200)
ENUMERATE_ (Node, inode, allNodes()) {
Node node = *inode;
Expand All @@ -369,6 +424,21 @@ _validateResults()

if (!filename.empty())
checkNodeResultFile(traceMng(), filename, m_u, 1.0e-4);

elapsedTime = platform::getRealTime() - elapsedTime;
_printArcaneFemTime("[ArcaneFem-Timer] result-validation", elapsedTime);
}

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

void FemModule::
_printArcaneFemTime(const String label, const Real value)
{
info() << std::left << std::setw(40) << label << " = " << value;
}

/*---------------------------------------------------------------------------*/
Expand Down
4 changes: 4 additions & 0 deletions modules/fourier/FemModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

#include <arcane/utils/PlatformUtils.h>

#include <arcane/utils/NumArray.h>
#include <arcane/utils/CommandLineArguments.h>
#include <arcane/utils/StringList.h>
Expand Down Expand Up @@ -86,6 +88,8 @@ class FemModule
void _solve();
void _assembleLinearOperator();
void _validateResults();
void _updateVariables();
void _printArcaneFemTime(const String label, const Real value);

FixedMatrix<3, 3> _computeElementMatrixTria3(Cell cell);
FixedMatrix<4, 4> _computeElementMatrixQuad4(Cell cell);
Expand Down
23 changes: 11 additions & 12 deletions modules/heat/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,16 @@ if(FEMUTILS_HAS_SOLVER_BACKEND_PETSC)
add_test(NAME [heat]conduction_RowElimination_Dirichlet COMMAND heat inputs/conduction.DirichletViaRowElimination.arc)
add_test(NAME [heat]conduction_RowColElimination_Dirichlet COMMAND heat inputs/conduction.DirichletViaRowColumnElimination.arc)
add_test(NAME [heat]conduction_convection COMMAND heat inputs/conduction.convection.arc)
endif()


# If parallel part is available, add some tests
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [heat]conduction_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.arc)
add_test(NAME [heat]conduction_RowElimination_Dirichlet_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.DirichletViaRowElimination.arc)
add_test(NAME [heat]conduction_RowColElimination_Dirichlet_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.DirichletViaRowColumnElimination.arc)
add_test(NAME [heat]conduction_convection_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.convection.arc)
if(FEMTEST_HAS_GMSH_TEST)
add_test(NAME [heat]conduction_fine_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.fine.arc)
add_test(NAME [heat]conduction_convection_fine_4pe COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.convection.fine.arc)
if(FEMUTILS_HAS_PARALLEL_SOLVER AND MPIEXEC_EXECUTABLE)
add_test(NAME [heat]conduction_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.arc)
add_test(NAME [heat]conduction_RowElimination_Dirichlet_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.DirichletViaRowElimination.arc)
add_test(NAME [heat]conduction_RowColElimination_Dirichlet_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.DirichletViaRowColumnElimination.arc)
add_test(NAME [heat]conduction_convection_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.convection.arc)
if(FEMTEST_HAS_GMSH_TEST)
add_test(NAME [heat]conduction_fine_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.fine.arc)
add_test(NAME [heat]conduction_convection_fine_4p COMMAND ${MPIEXEC_EXECUTABLE} -n 4 ./heat inputs/conduction.convection.fine.arc)
endif()
endif()
endif()

endif()
Loading

0 comments on commit 1eef456

Please sign in to comment.