diff --git a/NumLib/DOF/MatrixProviderUser.h b/NumLib/DOF/MatrixProviderUser.h index c0d3c9cccdc58b057ac1841cbf0ea6ea4f876543..f12f7b8dadc92607ec16b3f9baf2bb4e2b815f86 100644 --- a/NumLib/DOF/MatrixProviderUser.h +++ b/NumLib/DOF/MatrixProviderUser.h @@ -20,7 +20,7 @@ class MatrixSpecificationsProvider { public: virtual MathLib::MatrixSpecifications getMatrixSpecifications( - const int equation_id) const = 0; + const int process_id) const = 0; virtual ~MatrixSpecificationsProvider() = default; }; diff --git a/NumLib/ODESolver/TimeDiscretizedODESystem.cpp b/NumLib/ODESolver/TimeDiscretizedODESystem.cpp index eaad9a12bf878aa54deed3cf6d4181989c819d10..5c597a88e5f55e557feb2cf37291a4d7d642ae02 100644 --- a/NumLib/ODESolver/TimeDiscretizedODESystem.cpp +++ b/NumLib/ODESolver/TimeDiscretizedODESystem.cpp @@ -40,20 +40,20 @@ namespace NumLib { TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Newton>:: - TimeDiscretizedODESystem(const int equation_id, + TimeDiscretizedODESystem(const int process_id, ODE& ode, TimeDisc& time_discretization) : _ode(ode), _time_disc(time_discretization), _mat_trans(createMatrixTranslator<ODETag>(time_discretization)) { _Jac = &NumLib::GlobalMatrixProvider::provider.getMatrix( - _ode.getMatrixSpecifications(equation_id), _Jac_id); + _ode.getMatrixSpecifications(process_id), _Jac_id); _M = &NumLib::GlobalMatrixProvider::provider.getMatrix( - _ode.getMatrixSpecifications(equation_id), _M_id); + _ode.getMatrixSpecifications(process_id), _M_id); _K = &NumLib::GlobalMatrixProvider::provider.getMatrix( - _ode.getMatrixSpecifications(equation_id), _K_id); + _ode.getMatrixSpecifications(process_id), _K_id); _b = &NumLib::GlobalVectorProvider::provider.getVector( - _ode.getMatrixSpecifications(equation_id), _b_id); + _ode.getMatrixSpecifications(process_id), _b_id); } TimeDiscretizedODESystem< @@ -153,18 +153,18 @@ void TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear, TimeDiscretizedODESystem<ODESystemTag::FirstOrderImplicitQuasilinear, NonlinearSolverTag::Picard>:: - TimeDiscretizedODESystem(const int equation_id, ODE& ode, + TimeDiscretizedODESystem(const int process_id, ODE& ode, TimeDisc& time_discretization) : _ode(ode), _time_disc(time_discretization), _mat_trans(createMatrixTranslator<ODETag>(time_discretization)) { _M = &NumLib::GlobalMatrixProvider::provider.getMatrix( - ode.getMatrixSpecifications(equation_id), _M_id); + ode.getMatrixSpecifications(process_id), _M_id); _K = &NumLib::GlobalMatrixProvider::provider.getMatrix( - ode.getMatrixSpecifications(equation_id), _K_id); + ode.getMatrixSpecifications(process_id), _K_id); _b = &NumLib::GlobalVectorProvider::provider.getVector( - ode.getMatrixSpecifications(equation_id), _b_id); + ode.getMatrixSpecifications(process_id), _b_id); } TimeDiscretizedODESystem< diff --git a/NumLib/ODESolver/TimeDiscretizedODESystem.h b/NumLib/ODESolver/TimeDiscretizedODESystem.h index 68ec900cad00d81ef992d5fee1e7e7cf476c933b..0533c66334712996eedd298ea379b02e0003a7a5 100644 --- a/NumLib/ODESolver/TimeDiscretizedODESystem.h +++ b/NumLib/ODESolver/TimeDiscretizedODESystem.h @@ -73,11 +73,11 @@ public: /*! Constructs a new instance. * - * \param equation_id ID of the ODE to be solved. + * \param process_id ID of the ODE to be solved. * \param ode the ODE to be wrapped. * \param time_discretization the time discretization to be used. */ - explicit TimeDiscretizedODESystem(const int equation_id, ODE& ode, + explicit TimeDiscretizedODESystem(const int process_id, ODE& ode, TimeDisc& time_discretization); ~TimeDiscretizedODESystem() override; @@ -116,9 +116,9 @@ public: TimeDisc& getTimeDiscretization() override { return _time_disc; } MathLib::MatrixSpecifications getMatrixSpecifications( - const int equation_id) const override + const int process_id) const override { - return _ode.getMatrixSpecifications(equation_id); + return _ode.getMatrixSpecifications(process_id); } private: @@ -171,7 +171,7 @@ public: * \param ode the ODE to be wrapped. * \param time_discretization the time discretization to be used. */ - explicit TimeDiscretizedODESystem(const int equation_id, ODE& ode, + explicit TimeDiscretizedODESystem(const int process_id, ODE& ode, TimeDisc& time_discretization); ~TimeDiscretizedODESystem() override; @@ -215,9 +215,9 @@ public: TimeDisc& getTimeDiscretization() override { return _time_disc; } MathLib::MatrixSpecifications getMatrixSpecifications( - const int equation_id) const override + const int process_id) const override { - return _ode.getMatrixSpecifications(equation_id); + return _ode.getMatrixSpecifications(process_id); } private: diff --git a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h index 97a80e0b9715efc889b923c0e1412f54c93e0a61..07c3a78e3b1ab9b82d164ccd10dfc718b6b19142 100644 --- a/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h +++ b/ProcessLib/HydroMechanics/HydroMechanicsProcess-impl.h @@ -233,22 +233,22 @@ void HydroMechanicsProcess<DisplacementDim>::initializeBoundaryConditions() { if (_use_monolithic_scheme) { - const int equation_id_of_up = 0; + const int process_id_of_up = 0; initializeProcessBoundaryCondition(*_local_to_global_index_map, - equation_id_of_up); + process_id_of_up); return; } // Staggered scheme: // for the equations of pressure - const int equation_id_of_p = 0; + const int process_id_of_p = 0; initializeProcessBoundaryCondition( - *_local_to_global_index_map_with_base_nodes, equation_id_of_p); + *_local_to_global_index_map_with_base_nodes, process_id_of_p); // for the equations of deformation. - const int equation_id_of_u = 1; + const int process_id_of_u = 1; initializeProcessBoundaryCondition(*_local_to_global_index_map, - equation_id_of_u); + process_id_of_u); } template <int DisplacementDim> diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp index d332dd9048627084bc4dc1803dca6b75009a4de3..217be2524953a0795e94d81ae50d519df4c38580 100644 --- a/ProcessLib/Process.cpp +++ b/ProcessLib/Process.cpp @@ -167,7 +167,7 @@ void Process::setInitialConditions(const int process_id, double const t, } MathLib::MatrixSpecifications Process::getMatrixSpecifications( - const int /*equation_id*/) const + const int /*process_id*/) const { auto const& l = *_local_to_global_index_map; return {l.dofSizeWithoutGhosts(), l.dofSizeWithoutGhosts(), diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h index 546780f9e9ff49e0c0f65b70e2172825c5acde75..7074ccadf242c5dbcb250176089d570e9daaaf89 100644 --- a/ProcessLib/Process.h +++ b/ProcessLib/Process.h @@ -79,7 +79,7 @@ public: GlobalVector& x); virtual MathLib::MatrixSpecifications getMatrixSpecifications( - const int equation_id) const override; + const int process_id) const override; void setCoupledSolutionsForStaggeredScheme( CoupledSolutionsForStaggeredScheme* const coupled_solutions) diff --git a/ProcessLib/UncoupledProcessesTimeLoop.cpp b/ProcessLib/UncoupledProcessesTimeLoop.cpp index cb08c01047c907656600846ac4b212f29ac219cb..479fc1d48d9451d21e84e19684858974fc94167d 100644 --- a/ProcessLib/UncoupledProcessesTimeLoop.cpp +++ b/ProcessLib/UncoupledProcessesTimeLoop.cpp @@ -128,7 +128,7 @@ struct SingleProcessData /// Process ID. It is alway 0 when the monolithic scheme is used or /// a single process is modelled. - int equation_id = 0; + int process_id = 0; Process& process; ProcessOutput process_output; @@ -187,7 +187,7 @@ void setTimeDiscretizedODESystem( spd.tdisc_ode_sys = std::make_unique< NumLib::TimeDiscretizedODESystem<ODETag, Tag::Picard>>( - spd.equation_id, ode_sys, *spd.time_disc); + spd.process_id, ode_sys, *spd.time_disc); } else if (dynamic_cast<NonlinearSolverNewton*>(&spd.nonlinear_solver)) { @@ -198,7 +198,7 @@ void setTimeDiscretizedODESystem( { spd.tdisc_ode_sys = std::make_unique< NumLib::TimeDiscretizedODESystem<ODETag, Tag::Newton>>( - spd.equation_id, *ode_newton, *spd.time_disc); + spd.process_id, *ode_newton, *spd.time_disc); } else { @@ -385,7 +385,7 @@ std::vector<GlobalVector*> setInitialConditions( { std::vector<GlobalVector*> process_solutions; - int pcs_idx = 0; + int process_id = 0; for (auto& spd : per_process_data) { auto& pcs = spd->process; @@ -397,10 +397,10 @@ std::vector<GlobalVector*> setInitialConditions( // append a solution vector of suitable size process_solutions.emplace_back( &NumLib::GlobalVectorProvider::provider.getVector( - ode_sys.getMatrixSpecifications(pcs_idx))); + ode_sys.getMatrixSpecifications(process_id))); - auto& x0 = *process_solutions[pcs_idx]; - pcs.setInitialConditions(pcs_idx, t0, x0); + auto& x0 = *process_solutions[process_id]; + pcs.setInitialConditions(process_id, t0, x0); MathLib::LinAlg::finalizeAssembly(x0); time_disc.setInitialState(t0, x0); // push IC @@ -418,7 +418,7 @@ std::vector<GlobalVector*> setInitialConditions( mat_strg); // TODO: that might do duplicate work } - ++pcs_idx; + ++process_id; } return process_solutions; @@ -493,9 +493,10 @@ bool UncoupledProcessesTimeLoop::setCoupledSolutions() } _solutions_of_coupled_processes.reserve(_per_process_data.size()); - for (unsigned pcs_idx = 0; pcs_idx < _per_process_data.size(); pcs_idx++) + for (unsigned process_id = 0; process_id < _per_process_data.size(); + process_id++) { - auto const& x = *_process_solutions[pcs_idx]; + auto const& x = *_process_solutions[process_id]; _solutions_of_coupled_processes.emplace_back(x); // Create a vector to store the solution of the last coupling iteration @@ -673,23 +674,24 @@ bool UncoupledProcessesTimeLoop::loop() { // initialize output, convergence criterion, etc. { - unsigned pcs_idx = 0; + unsigned process_id = 0; for (auto& spd : _per_process_data) { auto& pcs = spd->process; - _output->addProcess(pcs, pcs_idx); + _output->addProcess(pcs, process_id); - spd->equation_id = pcs_idx; + spd->process_id = process_id; setTimeDiscretizedODESystem(*spd); if (auto* conv_crit = dynamic_cast<NumLib::ConvergenceCriterionPerComponent*>( spd->conv_crit.get())) { - conv_crit->setDOFTable(pcs.getDOFTable(pcs_idx), pcs.getMesh()); + conv_crit->setDOFTable(pcs.getDOFTable(process_id), + pcs.getMesh()); } - ++pcs_idx; + ++process_id; } } @@ -804,40 +806,40 @@ bool UncoupledProcessesTimeLoop::solveUncoupledEquationSystems( const double t, const double dt, const std::size_t timestep_id) { // TODO(wenqing): use process name - unsigned pcs_idx = 0; + unsigned process_id = 0; for (auto& spd : _per_process_data) { if (spd->skip_time_stepping) { - INFO("Process %u is skipped in the time stepping.", pcs_idx); - ++pcs_idx; + INFO("Process %u is skipped in the time stepping.", process_id); + ++process_id; continue; } BaseLib::RunTime time_timestep_process; time_timestep_process.start(); - auto& x = *_process_solutions[pcs_idx]; + auto& x = *_process_solutions[process_id]; auto& pcs = spd->process; - pcs.preTimestep(x, t, dt, pcs_idx); + pcs.preTimestep(x, t, dt, process_id); const auto nonlinear_solver_succeeded = solveOneTimeStepOneProcess( - pcs_idx, x, timestep_id, t, dt, *spd, *_output); + process_id, x, timestep_id, t, dt, *spd, *_output); spd->nonlinear_solver_converged = nonlinear_solver_succeeded; - pcs.postTimestep(x, pcs_idx); + pcs.postTimestep(x, process_id); pcs.computeSecondaryVariable(t, x); - INFO("[time] Solving process #%u took %g s in time step #%u ", pcs_idx, - time_timestep_process.elapsed(), timestep_id); + INFO("[time] Solving process #%u took %g s in time step #%u ", + process_id, time_timestep_process.elapsed(), timestep_id); if (!nonlinear_solver_succeeded) { ERR("The nonlinear solver failed in time step #%u at t = %g " "s for process #%u.", - timestep_id, t, pcs_idx); + timestep_id, t, process_id); // save unsuccessful solution - _output->doOutputAlways(pcs, pcs_idx, spd->process_output, + _output->doOutputAlways(pcs, process_id, spd->process_output, timestep_id, t, x); if (!spd->timestepper->isSolutionErrorComputationNeeded()) @@ -848,9 +850,10 @@ bool UncoupledProcessesTimeLoop::solveUncoupledEquationSystems( return false; } - _output->doOutput(pcs, pcs_idx, spd->process_output, timestep_id, t, x); + _output->doOutput(pcs, process_id, spd->process_output, timestep_id, t, + x); - ++pcs_idx; + ++process_id; } // end of for (auto& spd : _per_process_data) return true; @@ -883,43 +886,43 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( // TODO(wenqing): use process name bool nonlinear_solver_succeeded = true; coupling_iteration_converged = true; - unsigned pcs_idx = 0; + unsigned process_id = 0; for (auto& spd : _per_process_data) { if (spd->skip_time_stepping) { - INFO("Process %u is skipped in the time stepping.", pcs_idx); - ++pcs_idx; + INFO("Process %u is skipped in the time stepping.", process_id); + ++process_id; continue; } BaseLib::RunTime time_timestep_process; time_timestep_process.start(); - auto& x = *_process_solutions[pcs_idx]; + auto& x = *_process_solutions[process_id]; if (global_coupling_iteration == 0) { // Copy the solution of the previous time step to a vector that // belongs to process. For some problems, both of the current // solution and the solution of the previous time step are // required for the coupling computation. - spd->process.preTimestep(x, t, dt, pcs_idx); + spd->process.preTimestep(x, t, dt, process_id); } CoupledSolutionsForStaggeredScheme coupled_solutions( - _solutions_of_coupled_processes, dt, pcs_idx); + _solutions_of_coupled_processes, dt, process_id); spd->process.setCoupledSolutionsForStaggeredScheme( &coupled_solutions); const auto nonlinear_solver_succeeded = solveOneTimeStepOneProcess( - pcs_idx, x, timestep_id, t, dt, *spd, *_output); + process_id, x, timestep_id, t, dt, *spd, *_output); spd->nonlinear_solver_converged = nonlinear_solver_succeeded; INFO( "[time] Solving process #%u took %g s in time step #%u " " coupling iteration #%u", - pcs_idx, time_timestep_process.elapsed(), timestep_id, + process_id, time_timestep_process.elapsed(), timestep_id, global_coupling_iteration); if (!nonlinear_solver_succeeded) @@ -927,10 +930,10 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( ERR("The nonlinear solver failed in time step #%u at t = %g " "s" " for process #%u.", - timestep_id, t, pcs_idx); + timestep_id, t, process_id); // save unsuccessful solution - _output->doOutputAlways(spd->process, pcs_idx, + _output->doOutputAlways(spd->process, process_id, spd->process_output, timestep_id, t, x); if (!spd->timestepper->isSolutionErrorComputationNeeded()) @@ -942,14 +945,14 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( } // Check the convergence of the coupling iteration - auto& x_old = *_solutions_of_last_cpl_iteration[pcs_idx]; + auto& x_old = *_solutions_of_last_cpl_iteration[process_id]; if (global_coupling_iteration > 0) { - MathLib::LinAlg::axpy(x_old, -1.0, x); // save dx to x_old - _global_coupling_conv_crit[pcs_idx]->checkDeltaX(x_old, x); + MathLib::LinAlg::axpy(x_old, -1.0, x); // save dx to x_old + _global_coupling_conv_crit[process_id]->checkDeltaX(x_old, x); coupling_iteration_converged = coupling_iteration_converged && - _global_coupling_conv_crit[pcs_idx]->isSatisfied(); + _global_coupling_conv_crit[process_id]->isSatisfied(); } MathLib::LinAlg::copy(x, x_old); @@ -958,7 +961,7 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( break; } - ++pcs_idx; + ++process_id; } // end of for (auto& spd : _per_process_data) if (coupling_iteration_converged && global_coupling_iteration > 0) @@ -980,20 +983,20 @@ bool UncoupledProcessesTimeLoop::solveCoupledEquationSystemsByStaggeredScheme( timestep_id, t); } - unsigned pcs_idx = 0; + unsigned process_id = 0; for (auto& spd : _per_process_data) { if (spd->skip_time_stepping) { - ++pcs_idx; + ++process_id; continue; } auto& pcs = spd->process; - auto& x = *_process_solutions[pcs_idx]; - pcs.postTimestep(x, pcs_idx); + auto& x = *_process_solutions[process_id]; + pcs.postTimestep(x, process_id); pcs.computeSecondaryVariable(t, x); - ++pcs_idx; + ++process_id; } { @@ -1012,7 +1015,7 @@ void UncoupledProcessesTimeLoop::outputSolutions( unsigned timestep, const double t, OutputClass& output_object, OutputClassMember output_class_member) const { - unsigned pcs_idx = 0; + unsigned process_id = 0; for (auto& spd : _per_process_data) { auto& pcs = spd->process; @@ -1020,35 +1023,35 @@ void UncoupledProcessesTimeLoop::outputSolutions( // saved. if ((!spd->nonlinear_solver_converged) || spd->skip_time_stepping) { - ++pcs_idx; + ++process_id; continue; } - auto const& x = *_process_solutions[pcs_idx]; + auto const& x = *_process_solutions[process_id]; if (output_initial_condition) { pcs.preTimestep(x, _start_time, - spd->timestepper->getTimeStep().dt(), pcs_idx); + spd->timestepper->getTimeStep().dt(), process_id); } if (is_staggered_coupling) { CoupledSolutionsForStaggeredScheme coupled_solutions( - _solutions_of_coupled_processes, 0.0, pcs_idx); + _solutions_of_coupled_processes, 0.0, process_id); spd->process.setCoupledSolutionsForStaggeredScheme( &coupled_solutions); spd->process.setCoupledTermForTheStaggeredSchemeToLocalAssemblers(); (output_object.*output_class_member)( - pcs, pcs_idx, spd->process_output, timestep, t, x); + pcs, process_id, spd->process_output, timestep, t, x); } else { (output_object.*output_class_member)( - pcs, pcs_idx, spd->process_output, timestep, t, x); + pcs, process_id, spd->process_output, timestep, t, x); } - ++pcs_idx; + ++process_id; } } diff --git a/Tests/NumLib/ODEs.h b/Tests/NumLib/ODEs.h index b270f5241dec6b03fb6dfa6bd9ca79459b0cb319..cd12d81fd52e00347a5b25fca1cede671843fc3b 100644 --- a/Tests/NumLib/ODEs.h +++ b/Tests/NumLib/ODEs.h @@ -59,7 +59,7 @@ public: } MathLib::MatrixSpecifications getMatrixSpecifications( - const int /*equation_id*/) const override + const int /*process_id*/) const override { return { N, N, nullptr, nullptr }; } @@ -143,7 +143,7 @@ public: } MathLib::MatrixSpecifications getMatrixSpecifications( - const int /*equation_id*/) const override + const int /*process_id*/) const override { return { N, N, nullptr, nullptr }; } @@ -270,7 +270,7 @@ public: } MathLib::MatrixSpecifications getMatrixSpecifications( - const int /*equation_id*/) const override + const int /*process_id*/) const override { return { N, N, nullptr, nullptr }; } diff --git a/Tests/NumLib/TestODEInt.cpp b/Tests/NumLib/TestODEInt.cpp index ca936a30a538d964bb796e1bfbceb3dcf68ddb76..396ab73532d554a052311e765d6d082e30243870 100644 --- a/Tests/NumLib/TestODEInt.cpp +++ b/Tests/NumLib/TestODEInt.cpp @@ -68,9 +68,9 @@ public: Solution sol; - const int equation_id = 0; + const int process_id = 0; NumLib::TimeDiscretizedODESystem<ODE_::ODETag, NLTag> - ode_sys(equation_id, ode, timeDisc); + ode_sys(process_id, ode, timeDisc); auto linear_solver = createLinearSolver(); auto conv_crit = std::make_unique<NumLib::ConvergenceCriterionDeltaX>( @@ -91,7 +91,7 @@ public: delta_t); // initial condition - GlobalVector x0(ode.getMatrixSpecifications(equation_id).nrows); + GlobalVector x0(ode.getMatrixSpecifications(process_id).nrows); ODET::setIC(x0); sol.ts.push_back(t0);