![]() |
|
#include <segregated_fsi_solver.h>
Public Types | |
enum | convergence_criteria { Assess_convergence_based_on_absolute_solid_change , Assess_convergence_based_on_relative_solid_change , Assess_convergence_based_on_max_global_residual } |
Enumerated flags for convergence criteria. More... | |
enum | solve_type { Full_solve , Fluid_solve , Solid_solve } |
Enumerated flags to indicate which solve is taking place. More... | |
![]() | |
typedef void(* | SpatialErrorEstimatorFctPt) (Mesh *&mesh_pt, Vector< double > &elemental_error) |
Function pointer for spatial error estimator. More... | |
typedef void(* | SpatialErrorEstimatorWithDocFctPt) (Mesh *&mesh_pt, Vector< double > &elemental_error, DocInfo &doc_info) |
Function pointer for spatial error estimator with doc. More... | |
Public Member Functions | |
SegregatableFSIProblem () | |
virtual | ~SegregatableFSIProblem () |
Empty virtual destructor. More... | |
virtual void | identify_fluid_and_solid_dofs (Vector< Data * > &fluid_data_pt, Vector< Data * > &solid_data_pt, Mesh *&fluid_mesh_pt, Mesh *&solid_mesh_pt)=0 |
void | setup_segregated_solver (const bool &full_setup_of_fluid_and_solid_dofs=true) |
PicardConvergenceData | segregated_solve () |
PicardConvergenceData | steady_segregated_solve () |
PicardConvergenceData | unsteady_segregated_solve (const double &dt) |
PicardConvergenceData | unsteady_segregated_solve (const double &dt, const bool &shift_values) |
void | assess_convergence_based_on_max_global_residual (const double &tol) |
void | assess_convergence_based_on_max_global_residual () |
void | assess_convergence_based_on_absolute_solid_change (const double &tol) |
void | assess_convergence_based_on_absolute_solid_change () |
void | assess_convergence_based_on_relative_solid_change (const double &tol) |
void | assess_convergence_based_on_relative_solid_change () |
void | enable_pointwise_aitken (const unsigned &pointwise_aitken_start) |
void | enable_pointwise_aitken () |
void | disable_pointwise_aitken () |
Disable the use of pointwise Aitken extrapolation. More... | |
void | enable_under_relaxation (const double &omega=1.0) |
void | enable_irons_and_tuck_extrapolation () |
Use Irons and Tuck extrapolation for solid dofs. More... | |
void | disable_irons_and_tuck_extrapolation () |
Do not use Irons and Tuck extrapolation for solid dofs. More... | |
void | get_solid_change (double &rms_change, double &max_change, double &rms_norm) |
void | store_solid_dofs () |
void | reset_timer () |
Reset timer. More... | |
void | restart_timer () |
void | halt_timer () |
double | t_spent_on_actual_solve () |
Total elapsed time since start of solve. More... | |
![]() | |
virtual void | debug_hook_fct (const unsigned &i) |
void | set_analytic_dparameter (double *const ¶meter_pt) |
void | unset_analytic_dparameter (double *const ¶meter_pt) |
bool | is_dparameter_calculated_analytically (double *const ¶meter_pt) |
void | set_analytic_hessian_products () |
void | unset_analytic_hessian_products () |
bool | are_hessian_products_calculated_analytically () |
void | set_pinned_values_to_zero () |
bool | distributed () const |
virtual void | actions_before_adapt () |
virtual void | actions_after_adapt () |
Actions that are to be performed after a mesh adaptation. More... | |
OomphCommunicator * | communicator_pt () |
access function to the oomph-lib communicator More... | |
const OomphCommunicator * | communicator_pt () const |
access function to the oomph-lib communicator, const version More... | |
Problem () | |
Problem (const Problem &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const Problem &)=delete |
Broken assignment operator. More... | |
virtual | ~Problem () |
Virtual destructor to clean up memory. More... | |
Mesh *& | mesh_pt () |
Return a pointer to the global mesh. More... | |
Mesh *const & | mesh_pt () const |
Return a pointer to the global mesh (const version) More... | |
Mesh *& | mesh_pt (const unsigned &imesh) |
Mesh *const & | mesh_pt (const unsigned &imesh) const |
Return a pointer to the i-th submesh (const version) More... | |
unsigned | nsub_mesh () const |
Return number of submeshes. More... | |
unsigned | add_sub_mesh (Mesh *const &mesh_pt) |
void | flush_sub_meshes () |
void | build_global_mesh () |
void | rebuild_global_mesh () |
LinearSolver *& | linear_solver_pt () |
Return a pointer to the linear solver object. More... | |
LinearSolver *const & | linear_solver_pt () const |
Return a pointer to the linear solver object (const version) More... | |
LinearSolver *& | mass_matrix_solver_for_explicit_timestepper_pt () |
LinearSolver * | mass_matrix_solver_for_explicit_timestepper_pt () const |
EigenSolver *& | eigen_solver_pt () |
Return a pointer to the eigen solver object. More... | |
EigenSolver *const & | eigen_solver_pt () const |
Return a pointer to the eigen solver object (const version) More... | |
Time *& | time_pt () |
Return a pointer to the global time object. More... | |
Time * | time_pt () const |
Return a pointer to the global time object (const version). More... | |
double & | time () |
Return the current value of continuous time. More... | |
double | time () const |
Return the current value of continuous time (const version) More... | |
TimeStepper *& | time_stepper_pt () |
const TimeStepper * | time_stepper_pt () const |
TimeStepper *& | time_stepper_pt (const unsigned &i) |
Return a pointer to the i-th timestepper. More... | |
ExplicitTimeStepper *& | explicit_time_stepper_pt () |
Return a pointer to the explicit timestepper. More... | |
unsigned long | set_timestepper_for_all_data (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data=false) |
virtual void | shift_time_values () |
Shift all values along to prepare for next timestep. More... | |
AssemblyHandler *& | assembly_handler_pt () |
Return a pointer to the assembly handler object. More... | |
AssemblyHandler *const & | assembly_handler_pt () const |
Return a pointer to the assembly handler object (const version) More... | |
double & | minimum_dt () |
Access function to min timestep in adaptive timestepping. More... | |
double & | maximum_dt () |
Access function to max timestep in adaptive timestepping. More... | |
unsigned & | max_newton_iterations () |
Access function to max Newton iterations before giving up. More... | |
void | problem_is_nonlinear (const bool &prob_lin) |
Access function to Problem_is_nonlinear. More... | |
double & | max_residuals () |
bool & | time_adaptive_newton_crash_on_solve_fail () |
Access function for Time_adaptive_newton_crash_on_solve_fail. More... | |
double & | newton_solver_tolerance () |
void | add_time_stepper_pt (TimeStepper *const &time_stepper_pt) |
void | set_explicit_time_stepper_pt (ExplicitTimeStepper *const &explicit_time_stepper_pt) |
void | initialise_dt (const double &dt) |
void | initialise_dt (const Vector< double > &dt) |
Data *& | global_data_pt (const unsigned &i) |
Return a pointer to the the i-th global data object. More... | |
void | add_global_data (Data *const &global_data_pt) |
void | flush_global_data () |
LinearAlgebraDistribution *const & | dof_distribution_pt () const |
Return the pointer to the dof distribution (read-only) More... | |
unsigned long | ndof () const |
Return the number of dofs. More... | |
unsigned | ntime_stepper () const |
Return the number of time steppers. More... | |
unsigned | nglobal_data () const |
Return the number of global data values. More... | |
unsigned | self_test () |
Self-test: Check meshes and global data. Return 0 for OK. More... | |
void | enable_store_local_dof_pt_in_elements () |
void | disable_store_local_dof_pt_in_elements () |
unsigned long | assign_eqn_numbers (const bool &assign_local_eqn_numbers=true) |
void | describe_dofs (std::ostream &out= *(oomph_info.stream_pt())) const |
void | enable_discontinuous_formulation () |
void | disable_discontinuous_formulation () |
void | get_dofs (DoubleVector &dofs) const |
void | get_dofs (const unsigned &t, DoubleVector &dofs) const |
Return vector of the t'th history value of all dofs. More... | |
void | set_dofs (const DoubleVector &dofs) |
Set the values of the dofs. More... | |
void | set_dofs (const unsigned &t, DoubleVector &dofs) |
Set the history values of the dofs. More... | |
void | set_dofs (const unsigned &t, Vector< double * > &dof_pt) |
void | add_to_dofs (const double &lambda, const DoubleVector &increment_dofs) |
Add lambda x incremenet_dofs[l] to the l-th dof. More... | |
double * | global_dof_pt (const unsigned &i) |
double & | dof (const unsigned &i) |
i-th dof in the problem More... | |
double | dof (const unsigned &i) const |
i-th dof in the problem (const version) More... | |
double *& | dof_pt (const unsigned &i) |
Pointer to i-th dof in the problem. More... | |
double * | dof_pt (const unsigned &i) const |
Pointer to i-th dof in the problem (const version) More... | |
virtual void | get_inverse_mass_matrix_times_residuals (DoubleVector &Mres) |
virtual void | get_dvaluesdt (DoubleVector &f) |
virtual void | get_residuals (DoubleVector &residuals) |
Get the total residuals Vector for the problem. More... | |
virtual void | get_jacobian (DoubleVector &residuals, DenseDoubleMatrix &jacobian) |
virtual void | get_jacobian (DoubleVector &residuals, CRDoubleMatrix &jacobian) |
virtual void | get_jacobian (DoubleVector &residuals, CCDoubleMatrix &jacobian) |
virtual void | get_jacobian (DoubleVector &residuals, SumOfMatrices &jacobian) |
void | get_fd_jacobian (DoubleVector &residuals, DenseMatrix< double > &jacobian) |
Get the full Jacobian by finite differencing. More... | |
void | get_derivative_wrt_global_parameter (double *const ¶meter_pt, DoubleVector &result) |
void | get_hessian_vector_products (DoubleVectorWithHaloEntries const &Y, Vector< DoubleVectorWithHaloEntries > const &C, Vector< DoubleVectorWithHaloEntries > &product) |
void | solve_eigenproblem (const unsigned &n_eval, Vector< std::complex< double >> &eigenvalue, Vector< DoubleVector > &eigenvector, const bool &steady=true) |
Solve the eigenproblem. More... | |
void | solve_eigenproblem (const unsigned &n_eval, Vector< std::complex< double >> &eigenvalue, const bool &steady=true) |
virtual void | get_eigenproblem_matrices (CRDoubleMatrix &mass_matrix, CRDoubleMatrix &main_matrix, const double &shift=0.0) |
void | assign_eigenvector_to_dofs (DoubleVector &eigenvector) |
Assign the eigenvector passed to the function to the dofs. More... | |
void | add_eigenvector_to_dofs (const double &epsilon, const DoubleVector &eigenvector) |
void | store_current_dof_values () |
Store the current values of the degrees of freedom. More... | |
void | restore_dof_values () |
Restore the stored values of the degrees of freedom. More... | |
void | enable_jacobian_reuse () |
void | disable_jacobian_reuse () |
Disable recycling of Jacobian in Newton iteration. More... | |
bool | jacobian_reuse_is_enabled () |
Is recycling of Jacobian in Newton iteration enabled? More... | |
bool & | use_predictor_values_as_initial_guess () |
void | newton_solve () |
Use Newton method to solve the problem. More... | |
void | enable_globally_convergent_newton_method () |
enable globally convergent Newton method More... | |
void | disable_globally_convergent_newton_method () |
disable globally convergent Newton method More... | |
void | newton_solve (unsigned const &max_adapt) |
void | steady_newton_solve (unsigned const &max_adapt=0) |
void | copy (Problem *orig_problem_pt) |
virtual Problem * | make_copy () |
virtual void | read (std::ifstream &restart_file, bool &unsteady_restart) |
virtual void | read (std::ifstream &restart_file) |
virtual void | dump (std::ofstream &dump_file) const |
void | dump (const std::string &dump_file_name) const |
void | delete_all_external_storage () |
virtual void | symmetrise_eigenfunction_for_adaptive_pitchfork_tracking () |
double * | bifurcation_parameter_pt () const |
void | get_bifurcation_eigenfunction (Vector< DoubleVector > &eigenfunction) |
void | activate_fold_tracking (double *const ¶meter_pt, const bool &block_solve=true) |
void | activate_bifurcation_tracking (double *const ¶meter_pt, const DoubleVector &eigenvector, const bool &block_solve=true) |
void | activate_bifurcation_tracking (double *const ¶meter_pt, const DoubleVector &eigenvector, const DoubleVector &normalisation, const bool &block_solve=true) |
void | activate_pitchfork_tracking (double *const ¶meter_pt, const DoubleVector &symmetry_vector, const bool &block_solve=true) |
void | activate_hopf_tracking (double *const ¶meter_pt, const bool &block_solve=true) |
void | activate_hopf_tracking (double *const ¶meter_pt, const double &omega, const DoubleVector &null_real, const DoubleVector &null_imag, const bool &block_solve=true) |
void | deactivate_bifurcation_tracking () |
void | reset_assembly_handler_to_default () |
Reset the system to the standard non-augemented state. More... | |
double | arc_length_step_solve (double *const ¶meter_pt, const double &ds, const unsigned &max_adapt=0) |
double | arc_length_step_solve (Data *const &data_pt, const unsigned &data_index, const double &ds, const unsigned &max_adapt=0) |
void | reset_arc_length_parameters () |
int & | sign_of_jacobian () |
void | explicit_timestep (const double &dt, const bool &shift_values=true) |
Take an explicit timestep of size dt. More... | |
void | unsteady_newton_solve (const double &dt) |
void | unsteady_newton_solve (const double &dt, const bool &shift_values) |
void | unsteady_newton_solve (const double &dt, const unsigned &max_adapt, const bool &first, const bool &shift=true) |
double | doubly_adaptive_unsteady_newton_solve (const double &dt, const double &epsilon, const unsigned &max_adapt, const bool &first, const bool &shift=true) |
double | doubly_adaptive_unsteady_newton_solve (const double &dt, const double &epsilon, const unsigned &max_adapt, const unsigned &suppress_resolve_after_spatial_adapt_flag, const bool &first, const bool &shift=true) |
double | adaptive_unsteady_newton_solve (const double &dt_desired, const double &epsilon) |
double | adaptive_unsteady_newton_solve (const double &dt_desired, const double &epsilon, const bool &shift_values) |
void | assign_initial_values_impulsive () |
void | assign_initial_values_impulsive (const double &dt) |
void | calculate_predictions () |
Calculate predictions. More... | |
void | enable_mass_matrix_reuse () |
void | disable_mass_matrix_reuse () |
bool | mass_matrix_reuse_is_enabled () |
Return whether the mass matrix is being reused. More... | |
void | refine_uniformly (const Vector< unsigned > &nrefine_for_mesh) |
void | refine_uniformly (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info) |
void | refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh) |
void | refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info) |
void | refine_uniformly (DocInfo &doc_info) |
void | refine_uniformly_and_prune (DocInfo &doc_info) |
void | refine_uniformly () |
void | refine_uniformly (const unsigned &i_mesh, DocInfo &doc_info) |
Do uniform refinement for submesh i_mesh with documentation. More... | |
void | refine_uniformly (const unsigned &i_mesh) |
Do uniform refinement for submesh i_mesh without documentation. More... | |
void | p_refine_uniformly (const Vector< unsigned > &nrefine_for_mesh) |
void | p_refine_uniformly (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info) |
void | p_refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh) |
void | p_refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info) |
void | p_refine_uniformly (DocInfo &doc_info) |
void | p_refine_uniformly_and_prune (DocInfo &doc_info) |
void | p_refine_uniformly () |
void | p_refine_uniformly (const unsigned &i_mesh, DocInfo &doc_info) |
Do uniform p-refinement for submesh i_mesh with documentation. More... | |
void | p_refine_uniformly (const unsigned &i_mesh) |
Do uniform p-refinement for submesh i_mesh without documentation. More... | |
void | refine_selected_elements (const Vector< unsigned > &elements_to_be_refined) |
void | refine_selected_elements (const Vector< RefineableElement * > &elements_to_be_refined_pt) |
void | refine_selected_elements (const unsigned &i_mesh, const Vector< unsigned > &elements_to_be_refined) |
void | refine_selected_elements (const unsigned &i_mesh, const Vector< RefineableElement * > &elements_to_be_refined_pt) |
void | refine_selected_elements (const Vector< Vector< unsigned >> &elements_to_be_refined) |
void | refine_selected_elements (const Vector< Vector< RefineableElement * >> &elements_to_be_refined_pt) |
void | p_refine_selected_elements (const Vector< unsigned > &elements_to_be_refined) |
void | p_refine_selected_elements (const Vector< PRefineableElement * > &elements_to_be_refined_pt) |
void | p_refine_selected_elements (const unsigned &i_mesh, const Vector< unsigned > &elements_to_be_refined) |
void | p_refine_selected_elements (const unsigned &i_mesh, const Vector< PRefineableElement * > &elements_to_be_refined_pt) |
void | p_refine_selected_elements (const Vector< Vector< unsigned >> &elements_to_be_refined) |
void | p_refine_selected_elements (const Vector< Vector< PRefineableElement * >> &elements_to_be_refined_pt) |
unsigned | unrefine_uniformly () |
unsigned | unrefine_uniformly (const unsigned &i_mesh) |
void | p_unrefine_uniformly (DocInfo &doc_info) |
void | p_unrefine_uniformly (const unsigned &i_mesh, DocInfo &doc_info) |
Do uniform p-unrefinement for submesh i_mesh without documentation. More... | |
void | adapt (unsigned &n_refined, unsigned &n_unrefined) |
void | adapt () |
void | p_adapt (unsigned &n_refined, unsigned &n_unrefined) |
void | p_adapt () |
void | adapt_based_on_error_estimates (unsigned &n_refined, unsigned &n_unrefined, Vector< Vector< double >> &elemental_error) |
void | adapt_based_on_error_estimates (Vector< Vector< double >> &elemental_error) |
void | get_all_error_estimates (Vector< Vector< double >> &elemental_error) |
void | doc_errors (DocInfo &doc_info) |
Get max and min error for all elements in submeshes. More... | |
void | doc_errors () |
Get max and min error for all elements in submeshes. More... | |
void | enable_info_in_newton_solve () |
void | disable_info_in_newton_solve () |
Disable the output of information when in the newton solver. More... | |
![]() | |
ExplicitTimeSteppableObject () | |
Empty constructor. More... | |
ExplicitTimeSteppableObject (const ExplicitTimeSteppableObject &)=delete | |
Broken copy constructor. More... | |
void | operator= (const ExplicitTimeSteppableObject &)=delete |
Broken assignment operator. More... | |
virtual | ~ExplicitTimeSteppableObject () |
Empty destructor. More... | |
virtual void | actions_before_explicit_stage () |
virtual void | actions_after_explicit_stage () |
Private Member Functions | |
void | extrapolate_solid_data () |
Extrapolate solid data and update fluid mesh during unsteady run. More... | |
void | under_relax_solid () |
Under-relax solid, either by classical relaxation or by Irons & Tuck. More... | |
void | use_only_fluid_elements () |
void | use_only_solid_elements () |
void | pin_fluid_dofs () |
Pin fluid dofs. More... | |
Private Attributes | |
double | Omega_relax |
bool | Use_irons_and_tuck_extrapolation |
int | Convergence_criterion |
Convergence criterion (enumerated flag) More... | |
clock_t | T_ref |
double | T_spent_on_actual_solve |
bool | Timer_has_been_halted |
boolean flag to indicate if timer has been halted More... | |
Additional Inherited Members | |
![]() | |
bool | Shut_up_in_newton_solve |
![]() | |
static bool | Suppress_warning_about_actions_before_read_unstructured_meshes |
![]() | |
enum | Assembly_method { Perform_assembly_using_vectors_of_pairs , Perform_assembly_using_two_vectors , Perform_assembly_using_maps , Perform_assembly_using_lists , Perform_assembly_using_two_arrays } |
Enumerated flags to determine which sparse assembly method is used. More... | |
![]() | |
static ContinuationStorageScheme | Continuation_time_stepper |
Storage for the single static continuation timestorage object. More... | |
////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// Base class for problems that can be solved by segregated FSI solver
Enumerated flags for convergence criteria.
Enumerator | |
---|---|
Assess_convergence_based_on_absolute_solid_change | |
Assess_convergence_based_on_relative_solid_change | |
Assess_convergence_based_on_max_global_residual |
|
inline |
Constructor. Set default values for solver parameters:
boolean flag to indicate if timer has been halted
References Assess_convergence_based_on_max_global_residual, Convergence_criterion, Convergence_tolerance, Doc_max_global_residual, Fluid_mesh_pt, Full_solve, Max_picard, oomph::Problem::Newton_solver_tolerance, Omega_relax, Pointwise_aitken_start, Recheck_convergence_after_pointwise_aitken, Solid_mesh_pt, Solve_type, T_ref, T_spent_on_actual_solve, Timer_has_been_halted, Use_irons_and_tuck_extrapolation, and Use_pointwise_aitken.
|
inlinevirtual |
|
inlineprotectedvirtual |
This function is called once at the end of each segregated solve.
Referenced by segregated_solve().
|
inlineprotectedvirtual |
This function is to be filled with actions that take place before the check for convergence of the entire segregated solve
Reimplemented in SegregatedFSICollapsibleChannelProblem< ELEMENT >, and SegregatedFSICollapsibleChannelProblem< ELEMENT >.
Referenced by segregated_solve().
|
inlineprotectedvirtual |
This function is called once at the start of each segregated solve.
Reimplemented in SegregatedFSICollapsibleChannelProblem< ELEMENT >.
Referenced by segregated_solve().
|
inline |
Assess convergence based on max. absolute change of solid dofs. This interface has no argument and the default convergence tolerance for the Newton solver, Problem::Newton_solver_tolerance is used.
References oomph::Problem::Newton_solver_tolerance.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem(), and SegregatedFSIDrivenCavityProblem< ELEMENT >::SegregatedFSIDrivenCavityProblem().
|
inline |
Assess convergence based on max. absolute change of solid dofs. The argument specifies the convergence tolerance.
References Assess_convergence_based_on_absolute_solid_change, Convergence_criterion, and Convergence_tolerance.
|
inline |
Assess convergence based on max. residuals of coupled system of eqns. This interface has no argument and the default convergence tolerance for the Newton solver, Problem::Newton_solver_tolerance is used.
References oomph::Problem::Newton_solver_tolerance.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem().
|
inline |
Assess convergence based on max. residual of coupled system of eqns. The argument specifies the convergence tolerance.
References Assess_convergence_based_on_max_global_residual, Convergence_criterion, and Convergence_tolerance.
|
inline |
Assess convergence based on max. relative change of solid dofs. This interface has no argument and the default convergence tolerance for the Newton solver, Problem::Newton_solver_tolerance is used.
References oomph::Problem::Newton_solver_tolerance.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem().
|
inline |
Assess convergence based on max. relative change of solid dofs. The argument specifies the convergence tolerance.
References Assess_convergence_based_on_relative_solid_change, Convergence_criterion, and Convergence_tolerance.
|
inline |
Do not use Irons and Tuck extrapolation for solid dofs.
References Use_irons_and_tuck_extrapolation.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem().
|
inline |
Disable the use of pointwise Aitken extrapolation.
References Use_pointwise_aitken.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem(), and SegregatedFSIDrivenCavityProblem< ELEMENT >::SegregatedFSIDrivenCavityProblem().
|
inline |
Use Irons and Tuck extrapolation for solid dofs.
References Use_irons_and_tuck_extrapolation.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem().
|
inline |
Use pointwise Aitken extrapolation. This interface has no argument and the current value of Pointwise_aitken_start will be used. The default is zero, extrapolation starts immediately
References Use_pointwise_aitken.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem().
|
inline |
Use pointwise Aitken extrapolation. The argument is used to specify the Picard iteration after which pointwise Aitken extrapolation is to be used for the first time.
References Pointwise_aitken_start, and Use_pointwise_aitken.
|
inline |
Use under-relaxation and (optionally) specify under-relaxation parameter. Default: omega=1.0 (i.e. no actual under-relaxation; Other extreme: omega=0.0 (freeze wall shape). Under-relaxation parameter can also be computed dynamically by setting use_irons_and_tuck_extrapolation()
References Eigen::internal::omega(), and Omega_relax.
Referenced by SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem(), and SegregatedFSIDrivenCavityProblem< ELEMENT >::SegregatedFSIDrivenCavityProblem().
|
private |
Extrapolate solid data and update fluid mesh during unsteady run.
Extrapolate solid data and update fluid mesh. Extrapolation is based on previous history values and is therefore only called in time-dependent runs.
References Fluid_mesh_pt, i, k, oomph::Problem::mesh_pt(), oomph::Mesh::node_update(), and Solid_data_pt.
Referenced by unsteady_segregated_solve().
void oomph::SegregatableFSIProblem::get_solid_change | ( | double & | rms_change, |
double & | max_change, | ||
double & | rms_norm | ||
) |
Get rms of change in the solid dofs; the max. change of the solid dofs and the rms norm of the solid dofs themselves. Change is computed relative to the reference values stored when store_solid_dofs() was last called.
References boost::multiprecision::fabs(), i, k, Eigen::bfloat16_impl::pow(), Previous_solid_value, Solid_data_pt, and sqrt().
Referenced by segregated_solve().
|
inline |
Halt timer (e.g. before performing non-essential parts of the code such as documentation of the iteration's progress)
References T_ref, T_spent_on_actual_solve, and Timer_has_been_halted.
Referenced by t_spent_on_actual_solve().
|
pure virtual |
Identify the fluid and solid Data. This is a pure virtual function that MUST be implemented for every specific problem that is to be solved by the segregated solver. The two mesh pointers identify meshes that contain elements and nodes used during the fluid or solid solves respectively. Elements that feature during both phases of the segretated solution must be included in both. These pointers may be set to NULL. In this case, all elements in the global mesh (set up during the monolithic discretisation of the problem) contribute to the global Jacobian matrix and the residual vector, even if their contributions only contain zero entries. This can be costly, though the code will still compute the correct results.
Implemented in SegregatedFSIDrivenCavityProblem< ELEMENT >, SegregatedFSICollapsibleChannelProblem< ELEMENT >, and SegregatedFSICollapsibleChannelProblem< ELEMENT >.
Referenced by setup_segregated_solver().
|
private |
Pin fluid dofs.
Pin all fluid dofs.
References Fluid_data_pt, i, and k.
Referenced by segregated_solve().
|
protected |
Pin solid dofs.
Pin all solid dofs.
References i, k, and Solid_data_pt.
Referenced by segregated_solve().
|
protected |
Do pointwise Aitken extrapolation for solid.
Pointwise Aitken extrapolation for solid variables.
References boost::multiprecision::fabs(), i, k, max, Pointwise_aitken_counter, Pointwise_aitken_solid_value, Eigen::bfloat16_impl::pow(), Solid_data_pt, v1(), and v2().
Referenced by segregated_solve().
|
protected |
Rebuild global mesh for monolithic discretisation.
Rebuild global mesh for monolithic problem.
References oomph::Problem::add_sub_mesh(), oomph::Problem::flush_sub_meshes(), i, Orig_sub_mesh_pt, and oomph::Problem::rebuild_global_mesh().
Referenced by segregated_solve().
|
inline |
Reset timer.
References T_ref, T_spent_on_actual_solve, and Timer_has_been_halted.
Referenced by segregated_solve().
|
inline |
(Re-)start timer (e.g. after completing non-essential parts of the code such as documentation of the iteration's progress)
References T_ref, and Timer_has_been_halted.
Referenced by t_spent_on_actual_solve().
|
protected |
Restore pinned status of fluid dofs.
Restore the pinned status of all fluid dofs.
References Fluid_data_pt, Fluid_value_is_pinned, i, and k.
Referenced by segregated_solve().
|
protected |
Restore pinned status of solid dofs.
Restore the pinned status of all solid dofs.
References i, k, Solid_data_pt, and Solid_value_is_pinned.
Referenced by segregated_solve().
PicardConvergenceData oomph::SegregatableFSIProblem::segregated_solve | ( | ) |
Segregated solver. Peform a segregated step from the present state of the system. Returns PicardConvergenceData object that contains the vital stats of the iteration
Segregated fixed point solver with optional pointwise Aitken acceleration on selected solid dofs. Returns PicardConvergenceData object that contains the vital stats of the iteration.
References actions_after_segregated_solve(), actions_before_segregated_convergence_check(), actions_before_segregated_solve(), Assess_convergence_based_on_absolute_solid_change, Assess_convergence_based_on_max_global_residual, Assess_convergence_based_on_relative_solid_change, oomph::Problem::assign_eqn_numbers(), Convergence_criterion, Convergence_tolerance, oomph::PicardConvergenceData::cpu_for_global_residual(), oomph::PicardConvergenceData::cpu_total(), Doc_max_global_residual, oomph::PicardConvergenceData::essential_cpu_total(), boost::multiprecision::fabs(), Fluid_solve, Full_solve, oomph::Problem::get_residuals(), get_solid_change(), oomph::DoubleVector::max(), Max_picard, oomph::Problem::newton_solve(), oomph::PicardConvergenceData::niter(), oomph::oomph_info, pin_fluid_dofs(), pin_solid_dofs(), Pointwise_aitken_counter, pointwise_aitken_extrapolate(), Pointwise_aitken_start, rebuild_monolithic_mesh(), Recheck_convergence_after_pointwise_aitken, reset_timer(), restore_fluid_dofs(), restore_solid_dofs(), oomph::PicardConvergenceData::set_solver_converged(), Solid_solve, Solve_type, store_solid_dofs(), t_spent_on_actual_solve(), oomph::PicardConvergenceData::tol_achieved(), under_relax_solid(), use_only_fluid_elements(), use_only_solid_elements(), and Use_pointwise_aitken.
Referenced by steady_segregated_solve(), and unsteady_segregated_solve().
void oomph::SegregatableFSIProblem::setup_segregated_solver | ( | const bool & | full_setup_of_fluid_and_solid_dofs = true | ) |
Setup the segregated solver: Backup the pinned status of the fluid and solid dofs and allocate the internal storage based on the input provided by identify_fluid_and_solid_dofs(...) In addition, reset storage associated with convergence acceleration techniques. If the problem and degrees of freedom has not changed between calls to the solver then it is wasteful to call identify_fluid_and_solid_dofs(...) again and again. If the optional boolean flag is set to false then the storage for convergence acceleration techniques is reset, but the fluid and solid dofs are not altered.
Setup segregated solver, using the information provided by the user in his/her implementation of the pure virtual function identify_fluid_and_solid_dofs(...).
References Del_irons_and_tuck, Fluid_data_pt, Fluid_mesh_pt, Fluid_value_is_pinned, i, identify_fluid_and_solid_dofs(), k, oomph::Problem::mesh_pt(), oomph::Problem::nsub_mesh(), Omega_relax, oomph::oomph_info, Orig_sub_mesh_pt, Pointwise_aitken_counter, Pointwise_aitken_solid_value, Previous_solid_value, R_irons_and_tuck, Solid_data_pt, Solid_mesh_pt, Solid_value_is_pinned, Use_irons_and_tuck_extrapolation, and Use_pointwise_aitken.
PicardConvergenceData oomph::SegregatableFSIProblem::steady_segregated_solve | ( | ) |
Steady version of segregated solver. Makes all timesteppers steady before solving. Returns PicardConvergenceData object that contains the vital stats of the iteration.
Segregated fixed point solver with optional pointwise Aitken acceleration on selected solid dofs. Returns PicardConvergenceData object that contains the vital stats of the iteration.
References oomph::Problem::assign_initial_values_impulsive(), calibrate::error, i, oomph::TimeStepper::is_steady(), oomph::TimeStepper::make_steady(), oomph::Problem::ntime_stepper(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, segregated_solve(), oomph::Problem::time_stepper_pt(), and oomph::TimeStepper::undo_make_steady().
void oomph::SegregatableFSIProblem::store_solid_dofs | ( | ) |
Store the current solid values as reference values for future convergence check. Also add another entry to pointwise Aitken history if required.
Store the current solid values as reference values for future convergence check. Also add another entry to pointwise Aitken history.
References i, k, Pointwise_aitken_counter, Pointwise_aitken_solid_value, Previous_solid_value, Solid_data_pt, and Use_pointwise_aitken.
Referenced by segregated_solve().
|
inline |
Total elapsed time since start of solve.
References halt_timer(), restart_timer(), T_spent_on_actual_solve, and oomph::Problem::time().
Referenced by segregated_solve().
|
private |
Under-relax solid, either by classical relaxation or by Irons & Tuck.
Under-relax the most recently computed solid variables, either by classical relaxation or by Irons & Tuck
References Del_irons_and_tuck, boost::multiprecision::fabs(), i, k, Omega_relax, Previous_solid_value, R_irons_and_tuck, Solid_data_pt, and Use_irons_and_tuck_extrapolation.
Referenced by segregated_solve().
PicardConvergenceData oomph::SegregatableFSIProblem::unsteady_segregated_solve | ( | const double & | dt | ) |
Unsteady segregated solver, advance time by dt and solve by the segregated solver. The time values are always shifted by this function. Returns PicardConvergenceData object that contains the vital stats of the iteration.
Segregated fixed point solver with optional pointwise Aitken acceleration on selected solid dofs. Returns PicardConvergenceData object that contains the vital stats of the iteration.
PicardConvergenceData oomph::SegregatableFSIProblem::unsteady_segregated_solve | ( | const double & | dt, |
const bool & | shift_values | ||
) |
Unsteady segregated solver. Advance time by dt and solve the system by a segregated method. The boolean flag is used to control whether the time values should be shifted. If it is true the current data values will be shifted (stored as previous timesteps) before the solution step. Returns PicardConvergenceData object that contains the vital stats of the iteration.
Segregated fixed point solver with optional pointwise Aitken acceleration on selected solid dofs. Returns PicardConvergenceData object that contains the vital stats of the iteration.
References oomph::Problem::actions_after_implicit_timestep(), oomph::Problem::actions_before_implicit_timestep(), oomph::Time::dt(), calibrate::error, extrapolate_solid_data(), i, oomph::Problem::ntime_stepper(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::oomph_info, segregated_solve(), oomph::TimeStepper::set_weights(), oomph::Problem::shift_time_values(), oomph::Time::time(), oomph::Problem::time_pt(), and oomph::Problem::time_stepper_pt().
|
private |
Only include fluid elements in the Problem's mesh. This is called before the segregated fluid solve. The fluid elements are identified by the user via the fluid_mesh_pt argument in the pure virtual function identify_fluid_and_solid_dofs(...). If a NULL pointer is returned by this function (i.e. if the user hasn't bothered to identify the fluids elements in a submesh, then no stripping of non-fluid elements is performed. The result of the computation will be correct but it won't be very efficient.
References oomph::Problem::add_sub_mesh(), Fluid_mesh_pt, oomph::Problem::flush_sub_meshes(), and oomph::Problem::rebuild_global_mesh().
Referenced by segregated_solve().
|
private |
Only include solid elements in the Problem's mesh. This is called before the segregated solid solve. The solid elements are identified by the user via the solid_mesh_pt argument in the pure virtual function identify_fluid_and_solid_dofs(...). If a NULL pointer is returned by this function (i.e. if the user hasn't bothered to identify the solid elements in a submesh, then no stripping of non-solid elements is performed. The result of the computation will be correct but it won't be very efficient.
Only include solid elements in the Problem's mesh. This is called before the segregated solid solve. The solid elements are identified by the user via the solid_mesh_pt argument in the pure virtual function identify_fluid_and_solid_dofs(...). If a NULL pointer is returned by this function (i.e. if the user hasn't bothered to identify the solids elements in a submesh, then no stripping of non-solid elements is performed. The result of the computation will be correct but it won't be very efficient.
References oomph::Problem::add_sub_mesh(), oomph::Problem::flush_sub_meshes(), oomph::Problem::rebuild_global_mesh(), and Solid_mesh_pt.
Referenced by segregated_solve().
|
private |
Convergence criterion (enumerated flag)
Referenced by assess_convergence_based_on_absolute_solid_change(), assess_convergence_based_on_max_global_residual(), assess_convergence_based_on_relative_solid_change(), SegregatableFSIProblem(), and segregated_solve().
|
protected |
Convergence tolerance for Picard iteration.
Referenced by assess_convergence_based_on_absolute_solid_change(), assess_convergence_based_on_max_global_residual(), assess_convergence_based_on_relative_solid_change(), SegregatableFSIProblem(), and segregated_solve().
Vector of changes in Irons and Tuck under-relaxation.
Referenced by setup_segregated_solver(), and under_relax_solid().
|
protected |
Doc maximum global residual during iteration? (default: false)
Referenced by SegregatableFSIProblem(), segregated_solve(), SegregatedFSICollapsibleChannelProblem< ELEMENT >::SegregatedFSICollapsibleChannelProblem(), and SegregatedFSIDrivenCavityProblem< ELEMENT >::SegregatedFSIDrivenCavityProblem().
Vector storing the Data objects associated with the fluid problem: Tyically the nodal and internal data of the elements in the fluid bulk mesh
Referenced by pin_fluid_dofs(), restore_fluid_dofs(), and setup_segregated_solver().
|
protected |
Mesh containing only fluid elements – the elements in this Mesh will be excluded from the assembly process when the solid problem is solved
Referenced by extrapolate_solid_data(), SegregatableFSIProblem(), setup_segregated_solver(), and use_only_fluid_elements().
Vector of vectors that store the pinned status of fluid Data values
Referenced by restore_fluid_dofs(), and setup_segregated_solver().
|
protected |
Max. number of Picard iterations.
Referenced by SegregatableFSIProblem(), segregated_solve(), and SegregatedFSIDrivenCavityProblem< ELEMENT >::SegregatedFSIDrivenCavityProblem().
|
private |
Under-relaxation parameter. (1.0: no under-relaxation; 0.0: Freeze wall shape)
Referenced by enable_under_relaxation(), SegregatableFSIProblem(), setup_segregated_solver(), and under_relax_solid().
Backup for the pointers to the submeshes in the original problem.
Referenced by rebuild_monolithic_mesh(), and setup_segregated_solver().
|
protected |
Number of Aitken histories available (int because after extrapolation it's re-initialised to -1 to force the computation of three new genuine iterates).
Referenced by pointwise_aitken_extrapolate(), segregated_solve(), setup_segregated_solver(), and store_solid_dofs().
Vector of Vectors containing up to three previous iterates for the solid dofs; used for pointwise Aitken extrapolation
Referenced by pointwise_aitken_extrapolate(), setup_segregated_solver(), and store_solid_dofs().
|
protected |
Start pointwise Aitken extrpolation after specified number of Picard iterations
Referenced by enable_pointwise_aitken(), SegregatableFSIProblem(), and segregated_solve().
Vector storing the previous solid values – used for convergence check
Referenced by get_solid_change(), setup_segregated_solver(), store_solid_dofs(), and under_relax_solid().
|
protected |
Irons and Tuck relaxation factor.
Referenced by setup_segregated_solver(), and under_relax_solid().
|
protected |
Have we just done a pointwise Aitken step.
Referenced by SegregatableFSIProblem(), and segregated_solve().
Vector storing the Data objects associated with the solid problem: Typically the positional data of solid nodes and any quantities associated with displacement control, say.
Referenced by extrapolate_solid_data(), get_solid_change(), pin_solid_dofs(), pointwise_aitken_extrapolate(), restore_solid_dofs(), setup_segregated_solver(), store_solid_dofs(), and under_relax_solid().
|
protected |
Mesh containing only solid elements – the elements in this mesh will be excluded from the assembly process when the fluid problem is solved
Referenced by SegregatableFSIProblem(), setup_segregated_solver(), and use_only_solid_elements().
Vector of vectors that store the pinned status of solid Data values
Referenced by restore_solid_dofs(), and setup_segregated_solver().
|
protected |
Solve that is taking place (enumerated flag)
Referenced by SegregatableFSIProblem(), and segregated_solve().
|
private |
Reference time for segregated solve. Can be re-initialised whenever total elapsed time has been stored (before entering non-essential doc sections of the code)
Referenced by halt_timer(), reset_timer(), restart_timer(), and SegregatableFSIProblem().
|
private |
Total elapsed time since start of solve, can be accumulated by adding bits of time spent in relevant parts of code (bypassing sections that only document the progress)
Referenced by halt_timer(), reset_timer(), SegregatableFSIProblem(), and t_spent_on_actual_solve().
|
private |
boolean flag to indicate if timer has been halted
Referenced by halt_timer(), reset_timer(), restart_timer(), and SegregatableFSIProblem().
|
private |
Boolean flag to indicate use of Irons and Tuck's extrapolation for solid values
Referenced by disable_irons_and_tuck_extrapolation(), enable_irons_and_tuck_extrapolation(), SegregatableFSIProblem(), setup_segregated_solver(), and under_relax_solid().
|
protected |
Use pointwise Aitken extrapolation?
Referenced by disable_pointwise_aitken(), enable_pointwise_aitken(), SegregatableFSIProblem(), segregated_solve(), setup_segregated_solver(), and store_solid_dofs().