40 template <
typename ProcessData,
typename Output>
42 std::vector<GlobalVector*>& ,
43 std::vector<GlobalVector*>
const& ,
44 std::size_t
const ,
double const ,
45 double const , ProcessData
const& ,
46 std::vector<Output>
const& )>;
52 std::vector<CouplingNodeVariant>&& coupling_nodes)
74 std::vector<GlobalVector*>
const& process_solutions);
80 template <
typename ProcessData,
typename Output>
82 const double t,
const double dt,
const std::size_t timestep_id,
83 std::vector<GlobalVector*>& process_solutions,
84 std::vector<GlobalVector*>
const& process_solutions_prev,
85 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
86 std::vector<Output>
const& outputs,
88 solve_one_time_step_one_process);
116 template <
typename ProcessData,
typename Output>
118 std::vector<CouplingNodeVariant>& coupling_nodes,
119 const int max_iterations,
const double t,
const double dt,
120 const std::size_t timestep_id,
121 std::vector<GlobalVector*>& process_solutions,
122 std::vector<GlobalVector*>
const& process_solutions_prev,
123 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
124 std::vector<Output>
const& outputs,
126 solve_one_time_step_one_process);
128 template <
typename ProcessData,
typename Output>
131 const std::size_t timestep_id,
132 std::vector<GlobalVector*>& process_solutions,
133 std::vector<GlobalVector*>
const& process_solutions_prev,
134 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
135 std::vector<Output>
const& outputs,
137 solve_one_time_step_one_process);
139 template <
typename ProcessData,
typename Output>
141 int const global_coupling_iteration,
142 CouplingNode const& regular_coupling_node,
const double t,
143 const double dt,
const std::size_t timestep_id,
144 std::vector<GlobalVector*>& process_solutions,
145 std::vector<GlobalVector*>
const& process_solutions_prev,
146 std::vector<std::unique_ptr<ProcessData>>
const& per_process_data,
147 std::vector<Output>
const& outputs,
149 solve_one_time_step_one_process);
157 std::vector<CouplingNodeVariant>
const& coupling_nodes);
160 std::vector<CouplingNodeVariant>
const& coupling_nodes);
MathLib::EigenVector GlobalVector
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.
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::tuple< NumLib::NonlinearSolverStatus, bool, int > 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)
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)
std::tuple< NumLib::NonlinearSolverStatus, bool, int > 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)
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
int number_of_global_coupling_iterations_
int lastNumberOfCouplingIterations() const
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