26class ConvergenceCriterion;
48 template <
typename ProcessData,
typename Output>
50 std::vector<GlobalVector*>& ,
51 std::vector<GlobalVector*>
const& ,
52 std::size_t
const ,
double const ,
53 double const , ProcessData
const& ,
54 std::vector<Output>
const& )>;
60 std::vector<CouplingNodeVariant>&& coupling_nodes)
75 std::vector<GlobalVector*>
const& process_solutions);
81 template <
typename ProcessData,
typename Output>
83 const double t,
const double dt,
const std::size_t timestep_id,
84 std::vector<GlobalVector*>& process_solutions,
85 std::vector<GlobalVector*>
const& process_solutions_prev,
86 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
87 std::vector<Output>
const& outputs,
89 solve_one_time_step_one_process);
113 template <
typename ProcessData,
typename Output>
115 std::vector<CouplingNodeVariant>& coupling_nodes,
116 const int max_iterations,
const double t,
const double dt,
117 const std::size_t timestep_id,
118 std::vector<GlobalVector*>& process_solutions,
119 std::vector<GlobalVector*>
const& process_solutions_prev,
120 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
121 std::vector<Output>
const& outputs,
123 solve_one_time_step_one_process);
125 template <
typename ProcessData,
typename Output>
128 const std::size_t timestep_id,
129 std::vector<GlobalVector*>& process_solutions,
130 std::vector<GlobalVector*>
const& process_solutions_prev,
131 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
132 std::vector<Output>
const& outputs,
134 solve_one_time_step_one_process);
136 template <
typename ProcessData,
typename Output>
138 int const global_coupling_iteration,
139 CouplingNode const& regular_coupling_node,
const double t,
140 const double dt,
const std::size_t timestep_id,
141 std::vector<GlobalVector*>& process_solutions,
142 std::vector<GlobalVector*>
const& process_solutions_prev,
143 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
144 std::vector<Output>
const& outputs,
146 solve_one_time_step_one_process);
154 std::vector<CouplingNodeVariant>
const& coupling_nodes);
157 std::vector<CouplingNodeVariant>
const& coupling_nodes);
Global vector based on Eigen vector.
NumLib::NonlinearSolverStatus executeSingleIteration(int const global_coupling_iteration, CouplingNode const ®ular_coupling_node, const double t, const double dt, const std::size_t timestep_id, std::vector< GlobalVector * > &process_solutions, std::vector< GlobalVector * > const &process_solutions_prev, std::vector< std::unique_ptr< ProcessData > > const &per_process_data, std::vector< Output > const &outputs, ProcessSolver< ProcessData, Output > const &solve_one_time_step_one_process)
void initializeCoupledSolutions(std::vector< GlobalVector * > const &process_solutions)
const int global_coupling_max_iterations_
Maximum iteration number of the coupling loop of the staggered scheme.
std::tuple< NumLib::NonlinearSolverStatus, bool > executeConcrete(std::vector< CouplingNodeVariant > &coupling_nodes, const int max_iterations, const double t, const double dt, const std::size_t timestep_id, std::vector< GlobalVector * > &process_solutions, std::vector< GlobalVector * > const &process_solutions_prev, std::vector< std::unique_ptr< ProcessData > > const &per_process_data, std::vector< Output > const &outputs, ProcessSolver< ProcessData, Output > const &solve_one_time_step_one_process)
void resetCouplingConvergenceCriteria(std::vector< CouplingNodeVariant > const &coupling_nodes)
std::vector< GlobalVector * > solutions_of_last_cpl_iteration_
void setFirstIterationIndicator(std::vector< CouplingNodeVariant > const &coupling_nodes)
Set the indicator of the first staggered coupling iteration be true.
std::vector< CouplingNodeVariant > coupling_nodes_
std::function< NumLib::NonlinearSolverStatus( std::vector< GlobalVector * > &, std::vector< GlobalVector * > const &, std::size_t const, double const, double const, ProcessData const &, std::vector< Output > const &)> ProcessSolver
StaggeredCoupling(const int global_coupling_max_iterations, std::vector< CouplingNodeVariant > &&coupling_nodes)
NumLib::NonlinearSolverStatus execute(const double t, const double dt, const std::size_t timestep_id, std::vector< GlobalVector * > &process_solutions, std::vector< GlobalVector * > const &process_solutions_prev, std::vector< std::unique_ptr< ProcessData > > const &per_process_data, std::vector< Output > const &outputs, ProcessSolver< ProcessData, Output > const &solve_one_time_step_one_process)
bool checkCouplingConvergence(const bool convergence_of_last_process, CouplingNode const &coupling_node, GlobalVector const &x) const
std::tuple< NumLib::NonlinearSolverStatus, bool > executeSubCoupling(CouplingNodeVariant &coupling_node, const double t, const double dt, const std::size_t timestep_id, std::vector< GlobalVector * > &process_solutions, std::vector< GlobalVector * > const &process_solutions_prev, std::vector< std::unique_ptr< ProcessData > > const &per_process_data, std::vector< Output > const &outputs, ProcessSolver< ProcessData, Output > const &solve_one_time_step_one_process)
void updatePreviousSolution(int const process_id, GlobalVector const &x)
std::variant< CouplingNode, RootCouplingNode > CouplingNodeVariant
Information of a coupling node.
std::unique_ptr< NumLib::ConvergenceCriterion > convergence_criterion
Status of the non-linear solver.
std::variant< CouplingNode, RootCouplingNode > CouplingNodeVariant
std::vector< CouplingNodeVariant > sub_coupling_nodes