PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT > Class Template Reference
+ Inheritance diagram for PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >:

Public Member Functions

 PseudoElasticCollapsibleChannelProblem ()
 Constructor: More...
 
 ~PseudoElasticCollapsibleChannelProblem ()
 Destructor (empty) More...
 
void doc_solution (DocInfo &doc_info)
 Doc the solution. More...
 
void steady_run (DocInfo &doc_info)
 Do steady run. More...
 
void unsteady_run (DocInfo &doc_info)
 Do unsteady run. More...
 
void create_fsi_traction_elements ()
 Create FSI traction elements. More...
 
void create_lagrange_multiplier_elements ()
 
void create_solid_traction_elements ()
 
void actions_before_implicit_timestep ()
 Actions before timestep. More...
 
void actions_before_newton_convergence_check ()
 Update no slip bc after update of unknowns. More...
 
void actions_before_newton_solve ()
 Actions before Newton solve: Reset pseudo-elastic Lagrangian coordinates. More...
 
void actions_before_adapt ()
 Before adapt: Flush face element submeshes. More...
 
void actions_after_adapt ()
 After adapt: Rebuild face element submeshes and re-setup FSI. More...
 
void empty_mesh (Mesh *const &surface_mesh_pt)
 Helper function to delete elements from a mesh. More...
 
void doc_parameters ()
 Doc parameters. More...
 
WallMesh< SOLID_ELEMENT > * wall_mesh_pt ()
 Bulk solid mesh. More...
 
FluidMesh< FLUID_ELEMENT > * fluid_mesh_pt ()
 Bulk fluid mesh. More...
 
SolidMesh *& lagrange_multiplier_mesh_pt ()
 Meshes of Lagrange multiplier elements. More...
 
void set_initial_condition ()
 Set initial conditions. More...
 
 PseudoElasticCollapsibleChannelProblem ()
 Constructor: More...
 
 ~PseudoElasticCollapsibleChannelProblem ()
 Destructor (empty) More...
 
void doc_solution (DocInfo &doc_info)
 Doc the solution. More...
 
void steady_run (DocInfo &doc_info)
 Do steady run. More...
 
void unsteady_run (DocInfo &doc_info)
 Do unsteady run. More...
 
void create_fsi_traction_elements ()
 Create FSI traction elements. More...
 
void create_lagrange_multiplier_elements ()
 
void create_solid_traction_elements ()
 
void actions_before_implicit_timestep ()
 Actions before timestep. More...
 
void actions_before_newton_convergence_check ()
 Update no slip bc after update of unknowns. More...
 
void actions_before_newton_solve ()
 Actions before Newton solve: Reset pseudo-elastic Lagrangian coordinates. More...
 
void actions_before_adapt ()
 Before adapt: Flush face element submeshes. More...
 
void actions_after_adapt ()
 After adapt: Rebuild face element submeshes and re-setup FSI. More...
 
void empty_mesh (Mesh *const &surface_mesh_pt)
 Helper function to delete elements from a mesh. More...
 
void doc_parameters ()
 Doc parameters. More...
 
WallMesh< SOLID_ELEMENT > * wall_mesh_pt ()
 Bulk solid mesh. More...
 
FluidMesh< FLUID_ELEMENT > * fluid_mesh_pt ()
 Bulk fluid mesh. More...
 
SolidMesh *& lagrange_multiplier_mesh_pt ()
 Meshes of Lagrange multiplier elements. More...
 
void set_initial_condition ()
 Set initial conditions. More...
 
 PseudoElasticCollapsibleChannelProblem ()
 Constructor: More...
 
 ~PseudoElasticCollapsibleChannelProblem ()
 Destructor (empty) More...
 
void doc_solution (DocInfo &doc_info)
 Doc the solution. More...
 
void steady_run (DocInfo &doc_info)
 Do steady run. More...
 
void unsteady_run (DocInfo &doc_info)
 Do unsteady run. More...
 
void create_fsi_traction_elements ()
 Create FSI traction elements. More...
 
void create_lagrange_multiplier_elements ()
 
void create_solid_traction_elements ()
 
void actions_before_implicit_timestep ()
 Actions before timestep. More...
 
void actions_before_newton_convergence_check ()
 Update no slip bc after update of unknowns. More...
 
void actions_before_newton_solve ()
 Actions before Newton solve: Reset pseudo-elastic Lagrangian coordinates. More...
 
void actions_before_adapt ()
 Before adapt: Flush face element submeshes. More...
 
void actions_after_adapt ()
 After adapt: Rebuild face element submeshes and re-setup FSI. More...
 
void actions_before_distribute ()
 
void actions_after_distribute ()
 Recreate face elements and rebuild problem. More...
 
void empty_mesh (Mesh *const &surface_mesh_pt)
 Helper function to delete elements from a mesh. More...
 
void set_pseudo_elastic_fsi_solver ()
 
void doc_parameters ()
 Doc parameters. More...
 
WallMesh< SOLID_ELEMENT > * wall_mesh_pt ()
 Bulk solid mesh. More...
 
FluidMesh< FLUID_ELEMENT > * fluid_mesh_pt ()
 Bulk fluid mesh. More...
 
SolidMesh *& lagrange_multiplier_mesh_pt ()
 Meshes of Lagrange multiplier elements. More...
 
void set_initial_condition ()
 Set initial conditions. More...
 
- Public Member Functions inherited from oomph::Problem
virtual void debug_hook_fct (const unsigned &i)
 
void set_analytic_dparameter (double *const &parameter_pt)
 
void unset_analytic_dparameter (double *const &parameter_pt)
 
bool is_dparameter_calculated_analytically (double *const &parameter_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
 
OomphCommunicatorcommunicator_pt ()
 access function to the oomph-lib communicator More...
 
const OomphCommunicatorcommunicator_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 ()
 
LinearSolvermass_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...
 
Timetime_pt () const
 Return a pointer to the global time object (const version). More...
 
doubletime ()
 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 TimeSteppertime_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...
 
doubleminimum_dt ()
 Access function to min timestep in adaptive timestepping. More...
 
doublemaximum_dt ()
 Access function to max timestep in adaptive timestepping. More...
 
unsignedmax_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...
 
doublemax_residuals ()
 
booltime_adaptive_newton_crash_on_solve_fail ()
 Access function for Time_adaptive_newton_crash_on_solve_fail. More...
 
doublenewton_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...
 
doubleglobal_dof_pt (const unsigned &i)
 
doubledof (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...
 
doubledof_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 &parameter_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...
 
booluse_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 Problemmake_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 ()
 
doublebifurcation_parameter_pt () const
 
void get_bifurcation_eigenfunction (Vector< DoubleVector > &eigenfunction)
 
void activate_fold_tracking (double *const &parameter_pt, const bool &block_solve=true)
 
void activate_bifurcation_tracking (double *const &parameter_pt, const DoubleVector &eigenvector, const bool &block_solve=true)
 
void activate_bifurcation_tracking (double *const &parameter_pt, const DoubleVector &eigenvector, const DoubleVector &normalisation, const bool &block_solve=true)
 
void activate_pitchfork_tracking (double *const &parameter_pt, const DoubleVector &symmetry_vector, const bool &block_solve=true)
 
void activate_hopf_tracking (double *const &parameter_pt, const bool &block_solve=true)
 
void activate_hopf_tracking (double *const &parameter_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 &parameter_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 ()
 
intsign_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...
 
- Public Member Functions inherited from oomph::ExplicitTimeSteppableObject
 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 doc_solid_boundary_coordinates ()
 Sanity check: Doc boundary coordinates on i-th solid FSI interface. More...
 
void doc_solid_boundary_coordinates ()
 Sanity check: Doc boundary coordinates on i-th solid FSI interface. More...
 
void doc_solid_boundary_coordinates ()
 Sanity check: Doc boundary coordinates on i-th solid FSI interface. More...
 

Private Attributes

WallMesh< SOLID_ELEMENT > * Solid_mesh_pt
 Bulk solid mesh. More...
 
SolidMeshSolid_fsi_traction_mesh_pt
 Meshes of FSI traction elements (fluid traction onto solid) More...
 
FluidMesh< FLUID_ELEMENT > * Fluid_mesh_pt
 Bulk fluid mesh. More...
 
SolidMeshLagrange_multiplier_mesh_pt
 Mesh of Lagrange multiplier elements. More...
 
SolidMeshSolid_traction_mesh_pt
 Solid traction elements (prescibed external pressure on solid wall) More...
 
MeshAsGeomObjectSolid_fsi_boundary_pt
 GeomObject incarnations of the FSI boundary in the solid mesh. More...
 
GeomObjectWall_pt
 
BDF< 2 > * Fluid_time_stepper_pt
 Timestepper for the Navier-Stokes equations. More...
 
Steady< 2 > * Wall_time_stepper_pt
 Steady timestepper that stores two history values. More...
 

Additional Inherited Members

- Public Types inherited from oomph::Problem
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 Attributes inherited from oomph::Problem
bool Shut_up_in_newton_solve
 
- Static Public Attributes inherited from oomph::Problem
static bool Suppress_warning_about_actions_before_read_unstructured_meshes
 
- Protected Types inherited from oomph::Problem
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...
 
- Protected Member Functions inherited from oomph::Problem
unsigned setup_element_count_per_dof ()
 
virtual void sparse_assemble_row_or_column_compressed (Vector< int * > &column_or_row_index, Vector< int * > &row_or_column_start, Vector< double * > &value, Vector< unsigned > &nnz, Vector< double * > &residual, bool compressed_row_flag)
 
virtual void actions_after_newton_solve ()
 
virtual void actions_before_newton_step ()
 
virtual void actions_after_newton_step ()
 
virtual void actions_after_implicit_timestep ()
 
virtual void actions_after_implicit_timestep_and_error_estimation ()
 
virtual void actions_before_explicit_timestep ()
 Actions that should be performed before each explicit time step. More...
 
virtual void actions_after_explicit_timestep ()
 Actions that should be performed after each explicit time step. More...
 
virtual void actions_before_read_unstructured_meshes ()
 
virtual void actions_after_read_unstructured_meshes ()
 
virtual void actions_after_change_in_global_parameter (double *const &parameter_pt)
 
virtual void actions_after_change_in_bifurcation_parameter ()
 
virtual void actions_after_parameter_increase (double *const &parameter_pt)
 
doubledof_derivative (const unsigned &i)
 
doubledof_current (const unsigned &i)
 
virtual double global_temporal_error_norm ()
 
unsigned newton_solve_continuation (double *const &parameter_pt)
 
unsigned newton_solve_continuation (double *const &parameter_pt, DoubleVector &z)
 
void calculate_continuation_derivatives (double *const &parameter_pt)
 
void calculate_continuation_derivatives (const DoubleVector &z)
 
void calculate_continuation_derivatives_fd (double *const &parameter_pt)
 
bool does_pointer_correspond_to_problem_data (double *const &parameter_pt)
 
void set_consistent_pinned_values_for_continuation ()
 
- Protected Attributes inherited from oomph::Problem
Vector< Problem * > Copy_of_problem_pt
 
std::map< double *, boolCalculate_dparameter_analytic
 
bool Calculate_hessian_products_analytic
 
LinearAlgebraDistributionDof_distribution_pt
 
Vector< double * > Dof_pt
 Vector of pointers to dofs. More...
 
DoubleVectorWithHaloEntries Element_count_per_dof
 
double Relaxation_factor
 
double Newton_solver_tolerance
 
unsigned Max_newton_iterations
 Maximum number of Newton iterations. More...
 
unsigned Nnewton_iter_taken
 
Vector< doubleMax_res
 Maximum residuals at start and after each newton iteration. More...
 
double Max_residuals
 
bool Time_adaptive_newton_crash_on_solve_fail
 
bool Jacobian_reuse_is_enabled
 Is re-use of Jacobian in Newton iteration enabled? Default: false. More...
 
bool Jacobian_has_been_computed
 
bool Problem_is_nonlinear
 
bool Pause_at_end_of_sparse_assembly
 
bool Doc_time_in_distribute
 
unsigned Sparse_assembly_method
 
unsigned Sparse_assemble_with_arrays_initial_allocation
 
unsigned Sparse_assemble_with_arrays_allocation_increment
 
Vector< Vector< unsigned > > Sparse_assemble_with_arrays_previous_allocation
 
double Numerical_zero_for_sparse_assembly
 
double FD_step_used_in_get_hessian_vector_products
 
bool Mass_matrix_reuse_is_enabled
 
bool Mass_matrix_has_been_computed
 
bool Discontinuous_element_formulation
 
double Minimum_dt
 Minimum desired dt: if dt falls below this value, exit. More...
 
double Maximum_dt
 Maximum desired dt. More...
 
double DTSF_max_increase
 
double DTSF_min_decrease
 
double Minimum_dt_but_still_proceed
 
bool Scale_arc_length
 Boolean to control whether arc-length should be scaled. More...
 
double Desired_proportion_of_arc_length
 Proportion of the arc-length to taken by the parameter. More...
 
double Theta_squared
 
int Sign_of_jacobian
 Storage for the sign of the global Jacobian. More...
 
double Continuation_direction
 
double Parameter_derivative
 Storage for the derivative of the global parameter wrt arc-length. More...
 
double Parameter_current
 Storage for the present value of the global parameter. More...
 
bool Use_continuation_timestepper
 Boolean to control original or new storage of dof stuff. More...
 
unsigned Dof_derivative_offset
 
unsigned Dof_current_offset
 
Vector< doubleDof_derivative
 Storage for the derivative of the problem variables wrt arc-length. More...
 
Vector< doubleDof_current
 Storage for the present values of the variables. More...
 
double Ds_current
 Storage for the current step value. More...
 
unsigned Desired_newton_iterations_ds
 
double Minimum_ds
 Minimum desired value of arc-length. More...
 
bool Bifurcation_detection
 Boolean to control bifurcation detection via determinant of Jacobian. More...
 
bool Bisect_to_find_bifurcation
 Boolean to control wheter bisection is used to located bifurcation. More...
 
bool First_jacobian_sign_change
 Boolean to indicate whether a sign change has occured in the Jacobian. More...
 
bool Arc_length_step_taken
 Boolean to indicate whether an arc-length step has been taken. More...
 
bool Use_finite_differences_for_continuation_derivatives
 
OomphCommunicatorCommunicator_pt
 The communicator for this problem. More...
 
bool Always_take_one_newton_step
 
double Timestep_reduction_factor_after_nonconvergence
 
bool Keep_temporal_error_below_tolerance
 
- Static Protected Attributes inherited from oomph::Problem
static ContinuationStorageScheme Continuation_time_stepper
 Storage for the single static continuation timestorage object. More...
 

Detailed Description

template<class FLUID_ELEMENT, class SOLID_ELEMENT>
class PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >

////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////

Constructor & Destructor Documentation

◆ PseudoElasticCollapsibleChannelProblem() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::PseudoElasticCollapsibleChannelProblem

Constructor:

Constructor for unstructured 3D FSI problem.

593 {
594  // DEBUG: doc full stats for the multi-domain interaction
595  //Multi_domain_functions::Doc_full_stats=true;
596  //Multi_domain_functions::Doc_stats=true;
597 
598  // Allocate the timestepper for the Navier-Stokes equations
600 
601  // Add the fluid timestepper to the Problem's collection of timesteppers.
603 
604  // Create a Steady timestepper that stores two history values
606 
607  // Add the wall timestepper to the Problem's collection of timesteppers.
609 
610  // Domain size and shape parameters
611  //---------------------------------
612 
613  // Create geometric object that defines curvilinear boundary of
614  // fluid domain: Elliptical tube with half axes = radius = 1.0
615  Wall_pt=new EllipticalTube(1.0,1.0);
616 
617  // Bounding Lagrangian coordinates
618  Vector<double> xi_lo(2);
619  xi_lo[0]=0.0;
620  xi_lo[1]=0.0;
621  Vector<double> xi_hi(2);
622  xi_hi[0]= Global_Parameters::L;
623  xi_hi[1]= 0.5*MathematicalConstants::Pi;
624 
625  //Radial divider is located half-way along the circumference
626  double frac_mid=0.5;
627 
628  // Define fluid mesh
629  //------------------
630 
631  // create the fluid mesh
633  (Wall_pt,xi_lo,frac_mid,xi_hi,Global_Parameters::N_slice,
635 
636 
637  // Setup error estimator
638  if (CommandLineArgs::Argc==1)
639  {
640  Fluid_mesh_pt->spatial_error_estimator_pt()=new Z2ErrorEstimator;
641  Fluid_mesh_pt->max_permitted_error()=0.004;
642  Fluid_mesh_pt->min_permitted_error()=0.0001;
643  }
644  // Validation: Fake
645  else
646  {
647  // Setup fake error estimator: Refine one element on the outer
648  // and one on the inner surface of the wall
649  Vector<unsigned> elements_to_refine(2);
650  elements_to_refine[0]=3;
651  elements_to_refine[1]=8;
652 
653  unsigned central_node_number=13;
654  bool use_lagrangian_coordinates=false;
655  Fluid_mesh_pt->spatial_error_estimator_pt()=
656  new DummyErrorEstimator(Fluid_mesh_pt,elements_to_refine,
657  central_node_number,
658  use_lagrangian_coordinates);
659  }
660 
661 
662  // Define solid mesh
663  //------------------
664 
665  //Create solid bulk mesh with a slightly different number of elements
666  //in the axial direction
667  double r_min=1.0;
668  double r_max=1.0+Global_Parameters::H;
669  double& lz=Global_Parameters::L;
670  unsigned nr=2;
671  unsigned nphi=2;
673  // Try non-matching discretisation if validation
674  if (CommandLineArgs::Argc!=1)
675  {
676  nz=unsigned(double(nz)*1.5);
677  }
679  nr,nphi,nz,Wall_time_stepper_pt);
680 
681 
682  // Setup error estimator
683  if (CommandLineArgs::Argc==1)
684  {
685  Solid_mesh_pt->spatial_error_estimator_pt()=new Z2ErrorEstimator;
686  Solid_mesh_pt->max_permitted_error()=0.21;
687  Solid_mesh_pt->min_permitted_error()=0.001;
688  }
689  // Validation: Fake
690  else
691  {
692  // Setup fake error estimator: This refines two elements
693  Vector<unsigned> elements_to_refine(1);
694  elements_to_refine[0]=9;
695 
696  unsigned central_node_number=13;
697  bool use_lagrangian_coordinates=true;
698  Solid_mesh_pt->spatial_error_estimator_pt()=
699  new DummyErrorEstimator(Solid_mesh_pt,elements_to_refine,
700  central_node_number,
701  use_lagrangian_coordinates);
702  }
703 
704 
705  // Create FSI Traction elements
706  //-----------------------------
707 
708  // Build the FSI traction elements
711 
712  // Create Lagrange multiplier mesh for boundary motion of fluid mesh
713  //------------------------------------------------------------------
714 
715  // Create elements
717  //initialise pointer to solid boundary
720 
721  // Create solid traction elements for external pressure
722  //-----------------------------------------------------
723 
726 
727  // Combine the lot
728  //----------------
729 
730  // Add sub meshes:
731 
732  // The fluid bulk mesh
734 
735  // Solid bulk mesh
737 
738  // The solid fsi traction mesh
740 
741  // the solid traction elements
743 
744  // The Lagrange multiplier mesh for the fluid
746 
747  // Build global mesh
749 
750  // Apply BCs for fluid/pseudo-elastic elements
751  //--------------------------------------------
752 
753  unsigned nbound_fluid = Fluid_mesh_pt->nboundary();
754  for(unsigned b=0;b<nbound_fluid;b++)
755  {
756  unsigned nnode = Fluid_mesh_pt->nboundary_node(b);
757  for (unsigned i = 0; i < nnode; i++)
758  {
759 
760  // Fluid velocity BCs
761 
762  // Boundary 1 is the vertical symmetry boundary (y=const) where
763  // we allow flow in the y-direction. Elsewhere, pin the y velocity
764  if(b!=1) Fluid_mesh_pt->boundary_node_pt(b,i)->pin(1);
765 
766  // Boundary 2 is the horizontal symmetry boundary (x=const) where
767  // we allow flow in the x-direction. Elsewhere, pin the x velocity
768  if(b!=2) Fluid_mesh_pt->boundary_node_pt(b,i)->pin(0);
769 
770  // Boundaries 0 and 3 are the inflow and the wall respectively.
771  // Pin the axial velocity because of the prescribed inflow
772  // profile and the no slip on the wall (where the velocity is imposed
773  // by the node update), respectively
774  if((b==0)||(b==3))
775  {
776  Fluid_mesh_pt->boundary_node_pt(b,i)->pin(2);
777  }
778 
779  // Pseudo solid BCs
780  SolidNode* solid_node_pt = dynamic_cast<SolidNode*>
781  (Fluid_mesh_pt->boundary_node_pt(b,i));
782 
783  // Inflow, vertical symmetry BC (y=const), outflow: Suppress x-displ
784  if((b==0)||(b==1)||(b==4)) { solid_node_pt->pin_position(0); }
785 
786  // Inflow, horizontal symmetry BC (x=const), outflow: Suppress y-displ
787  if((b==0)||(b==2)||(b==4)) { solid_node_pt->pin_position(1); }
788 
789  // Inflow and outflow: Suppress z-displacement
790  if((b==0)||(b==4)) { solid_node_pt->pin_position(2); }
791  }
792  }
793 
794 
795  // Complete the build of the fluid elements so they are fully functional
796  //----------------------------------------------------------------------
797 
798  unsigned n_element = Fluid_mesh_pt->nelement();
799  for(unsigned e=0;e<n_element;e++)
800  {
801  // Upcast from GeneralisedElement to the present element
802  FLUID_ELEMENT* el_pt =
803  dynamic_cast<FLUID_ELEMENT*>(Fluid_mesh_pt->element_pt(e));
804 
805  //Set the Reynolds number
806  el_pt->re_pt() = &Global_Parameters::Re;
807  el_pt->re_st_pt() = &Global_Parameters::Re;
808 
809  // Set the constitutive law for pseudo-elastic mesh deformation
810  el_pt->constitutive_law_pt() =
812 
813  // Set the timescale ratio
814  el_pt->lambda_sq_pt() =
816 
817  } // end loop over elements
818 
819  // pin the rundundant nodal pressures
822 
823  // Apply BCs for solid
824  //--------------------
825 
826  unsigned nbound_solid = Solid_mesh_pt->nboundary();
827  for(unsigned b=0;b<nbound_solid;b++)
828  {
829  unsigned nnode = Solid_mesh_pt->nboundary_node(b);
830  for (unsigned i = 0; i < nnode; i++)
831  {
832  SolidNode* solid_node_pt=
833  dynamic_cast<SolidNode*>(Solid_mesh_pt->boundary_node_pt(b,i));
834 
835  // Inflow, vertical symmetry (y=const) and outflow: Pin x-displ
836  if((b==0)||(b==3)||(b==5)){solid_node_pt->pin_position(0);}
837 
838  // Inflow, horizontal symmetry (x=const) and outflow: Pin y-displ
839  if((b==0)||(b==1)||(b==5)){solid_node_pt->pin_position(1);}
840 
841  // Inflow and outflow: Pin z-displ
842  if((b==0)||(b==5)){solid_node_pt->pin_position(2);}
843 
844  // Pin all positions in "rigid sections"
845  double z = solid_node_pt->x(2);
846  if (z<=Global_Parameters::Lup||
848  {
849  solid_node_pt->pin_position(0);
850  solid_node_pt->pin_position(1);
851  solid_node_pt->pin_position(2);
852  }
853  }
854  }
855 
856  // Complete the build of Solid elements so they are fully functional
857  //----------------------------------------------------------------
858 
859  n_element = Solid_mesh_pt->nelement();
860  for(unsigned i=0;i<n_element;i++)
861  {
862  //Cast to a solid element
863  SOLID_ELEMENT *el_pt = dynamic_cast<SOLID_ELEMENT*>(
864  Solid_mesh_pt->element_pt(i));
865 
866  // Set the constitutive law
867  el_pt->constitutive_law_pt() =
869 
870  // Set the timescale ratio
871  el_pt->lambda_sq_pt() =
873  }
874 
875  // Setup FSI
876  //----------
877 
878  // The velocity of the fluid nodes on the fsi boundary
879  // is set by the wall motion -- hence the no-slip condition must be
880  // re-applied whenever a node update is performed for these nodes.
881  // Such tasks may be performed automatically by the auxiliary node update
882  // function specified by a function pointer:
883 
884  // Get boundary ID
885  unsigned b=3;
886 
887  // How many nodes on boundary b?
888  unsigned nnode_fsi_fluid = Fluid_mesh_pt->nboundary_node(b);
889 
890  for (unsigned i=0;i<nnode_fsi_fluid;i++)
891  {
892  Fluid_mesh_pt->
893  boundary_node_pt(b,i)->set_auxiliary_node_update_fct_pt(
895  }
896 
897  // Work out which fluid dofs affect the residuals of the wall elements:
898  // We pass the boundary between the fluid and solid meshes and
899  // pointers to the meshes.
900 
901  //Doc boundary coordinates in fluid
902  char filename[100];
903  sprintf(filename,"RESLT/fluid_boundary_coordinates.dat");
905 
906  // Setup FSI: Pass ID of fluid FSI boundary and associated
907  // mesh of solid fsi traction elements.
908  FSI_functions::setup_fluid_load_info_for_solid_elements<FLUID_ELEMENT,3>
910 
911  // Close the doc file
913 
914  // Setup equation numbering scheme
915  std::cout <<"Number of equations: " << assign_eqn_numbers() << std::endl;
916 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Scalar * b
Definition: benchVecAdd.cpp:17
MeshAsGeomObject * Solid_fsi_boundary_pt
GeomObject incarnations of the FSI boundary in the solid mesh.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:571
WallMesh< SOLID_ELEMENT > * Solid_mesh_pt
Bulk solid mesh.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:555
BDF< 2 > * Fluid_time_stepper_pt
Timestepper for the Navier-Stokes equations.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:578
void create_fsi_traction_elements()
Create FSI traction elements.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:951
void create_lagrange_multiplier_elements()
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:1029
Steady< 2 > * Wall_time_stepper_pt
Steady timestepper that stores two history values.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:581
GeomObject * Wall_pt
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:575
SolidMesh * Lagrange_multiplier_mesh_pt
Mesh of Lagrange multiplier elements.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:564
SolidMesh * Solid_fsi_traction_mesh_pt
Meshes of FSI traction elements (fluid traction onto solid)
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:558
void create_solid_traction_elements()
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:992
SolidMesh * Solid_traction_mesh_pt
Solid traction elements (prescibed external pressure on solid wall)
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:567
FluidMesh< FLUID_ELEMENT > * Fluid_mesh_pt
Bulk fluid mesh.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:561
Definition: error_estimator.h:435
Definition: geom_objects.h:1131
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
void add_time_stepper_pt(TimeStepper *const &time_stepper_pt)
Definition: problem.cc:1545
unsigned add_sub_mesh(Mesh *const &mesh_pt)
Definition: problem.h:1330
void build_global_mesh()
Definition: problem.cc:1493
unsigned long assign_eqn_numbers(const bool &assign_local_eqn_numbers=true)
Definition: problem.cc:1989
Definition: refineable_navier_stokes_elements.h:322
Definition: mesh.h:2562
Definition: nodes.h:1686
void pin_position(const unsigned &i)
Pin the nodal position.
Definition: nodes.h:1816
Definition: error_estimator.h:266
#define FLUID_ELEMENT
double r_min
Definition: two_d_biharmonic.cc:237
double r_max
Definition: two_d_biharmonic.cc:238
double Pi
Definition: two_d_biharmonic.cc:235
double Lambda_sq
Timescale ratio (non-dim density) for solid.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:409
unsigned N_slice
number of axial slices in fluid mesh
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:356
ConstitutiveLaw * Constitutive_law_pseudo_elastic_pt
Pointer to constitutive law for the pseudo elastic node update elements.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:368
double Re
reynolds number
Definition: adaptive_hopf.cc:54
double H
wall thickness
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:353
ConstitutiveLaw * Constitutive_law_wall_pt
Pointer to constitutive law for the wall.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:365
double L
tube length
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:344
double Lup
upstream length
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:347
double Ldown
downstream length
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:350
string filename
Definition: MergeRestartFiles.py:39
const unsigned nz
Definition: ConstraintElementsUnitTest.cpp:32
const double lz
Definition: ConstraintElementsUnitTest.cpp:35
int Argc
Number of arguments + 1.
Definition: oomph_utilities.cc:407
void apply_no_slip_on_moving_wall(Node *node_pt)
Definition: fsi.cc:48
std::ofstream Doc_boundary_coordinate_file
Definition: multi_domain.cc:47

References oomph::FSI_functions::apply_no_slip_on_moving_wall(), oomph::CommandLineArgs::Argc, b, Global_Parameters::Constitutive_law_pseudo_elastic_pt, Global_Parameters::Constitutive_law_wall_pt, oomph::Multi_domain_functions::Doc_boundary_coordinate_file, e(), MergeRestartFiles::filename, FLUID_ELEMENT, Global_Parameters::H, i, Global_Parameters::L, Global_Parameters::Lambda_sq, Global_Parameters::Ldown, Global_Parameters::Lup, Mesh_Parameters::lz, Global_Parameters::N_slice, Mesh_Parameters::nz, BiharmonicTestFunctions2::Pi, oomph::SolidNode::pin_position(), BiharmonicTestFunctions2::r_max, BiharmonicTestFunctions2::r_min, Global_Parameters::Re, and oomph::Node::x().

◆ ~PseudoElasticCollapsibleChannelProblem() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::~PseudoElasticCollapsibleChannelProblem ( )
inline

Destructor (empty)

445  {
446  delete Fluid_time_stepper_pt;
447  delete Wall_pt;
448  delete Wall_time_stepper_pt;
449  delete Fluid_mesh_pt->spatial_error_estimator_pt();
450  delete Fluid_mesh_pt;
451  delete Solid_mesh_pt->spatial_error_estimator_pt();
452  delete Solid_mesh_pt;
455  delete Solid_fsi_boundary_pt;
456  delete Solid_traction_mesh_pt;
457  }

◆ PseudoElasticCollapsibleChannelProblem() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::PseudoElasticCollapsibleChannelProblem ( )

Constructor:

◆ ~PseudoElasticCollapsibleChannelProblem() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::~PseudoElasticCollapsibleChannelProblem ( )
inline

Destructor (empty)

445  {
446  delete Fluid_time_stepper_pt;
447  delete Wall_pt;
448  delete Wall_time_stepper_pt;
449  delete Fluid_mesh_pt->spatial_error_estimator_pt();
450  delete Fluid_mesh_pt;
451  delete Solid_mesh_pt->spatial_error_estimator_pt();
452  delete Solid_mesh_pt;
455  delete Solid_fsi_boundary_pt;
456  delete Solid_traction_mesh_pt;
457  }

◆ PseudoElasticCollapsibleChannelProblem() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::PseudoElasticCollapsibleChannelProblem ( )

Constructor:

◆ ~PseudoElasticCollapsibleChannelProblem() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::~PseudoElasticCollapsibleChannelProblem ( )
inline

Destructor (empty)

451  {
452  delete Fluid_time_stepper_pt;
453  delete Wall_pt;
454  delete Wall_time_stepper_pt;
455  delete Fluid_mesh_pt->spatial_error_estimator_pt();
456  delete Fluid_mesh_pt;
457  delete Solid_mesh_pt->spatial_error_estimator_pt();
458  delete Solid_mesh_pt;
461  delete Solid_traction_mesh_pt;
462  }

Member Function Documentation

◆ actions_after_adapt() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_after_adapt
virtual

After adapt: Rebuild face element submeshes and re-setup FSI.

Re-create face elements and re-setup problem.

Reimplemented from oomph::Problem.

1144 {
1145  // delete and recreate meshes
1149 
1150  // Build the FSI traction elements
1152 
1153  // Create Lagrange multiplier mesh for boundary motion of fluid mesh
1155 
1156  // create solid traction elements for external pressure
1158 
1159  // Add these meshes as submeshes
1163 
1164  // Rebuild the global mesh
1166 
1167  // Unpin all pressure dofs
1170 
1171  // Pin redundant pressure dofs
1174 
1175 
1176  // Re-apply BCs for solid (just to be on the safe side, because of the
1177  //--------------------------------------------------------------------
1178  // way we're keeping the upstream and downstream sections rigid)
1179  //--------------------------------------------------------------
1180 
1181  unsigned nbound_solid = Solid_mesh_pt->nboundary();
1182  for(unsigned b=0;b<nbound_solid;b++)
1183  {
1184  unsigned nnode = Solid_mesh_pt->nboundary_node(b);
1185  for (unsigned i = 0; i < nnode; i++)
1186  {
1187  SolidNode* solid_node_pt=
1188  dynamic_cast<SolidNode*>(Solid_mesh_pt->boundary_node_pt(b,i));
1189 
1190  // Inflow, vertical symmetry (y=const) and outflow: Pin x-displ
1191  if((b==0)||(b==3)||(b==5)){solid_node_pt->pin_position(0);}
1192 
1193  // Inflow, horizontal symmetry (x=const) and outflow: Pin y-displ
1194  if((b==0)||(b==1)||(b==5)){solid_node_pt->pin_position(1);}
1195 
1196  // Inflow and outflow: Pin z-displ
1197  if((b==0)||(b==5)){solid_node_pt->pin_position(2);}
1198 
1199  // Pin all positions in "rigid sections"
1200  double z = solid_node_pt->x(2);
1201  if (z<=Global_Parameters::Lup||
1203  {
1204  solid_node_pt->pin_position(0);
1205  solid_node_pt->pin_position(1);
1206  solid_node_pt->pin_position(2);
1207  }
1208  }
1209  }
1210 
1211  // Setup FSI
1212  //----------
1213 
1214  unsigned b=3;
1215 
1216  FSI_functions::setup_fluid_load_info_for_solid_elements<FLUID_ELEMENT,3>
1218 
1219  unsigned nnode_fsi_fluid = Fluid_mesh_pt->nboundary_node(b);
1220  for (unsigned i=0;i<nnode_fsi_fluid;i++)
1221  {
1222  Fluid_mesh_pt->
1223  boundary_node_pt(b,i)->set_auxiliary_node_update_fct_pt(
1225  }
1226 }
void empty_mesh(Mesh *const &surface_mesh_pt)
Helper function to delete elements from a mesh.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:1326
void rebuild_global_mesh()
Definition: problem.cc:1533

References oomph::FSI_functions::apply_no_slip_on_moving_wall(), b, i, Global_Parameters::L, Global_Parameters::Ldown, Global_Parameters::Lup, oomph::SolidNode::pin_position(), and oomph::Node::x().

◆ actions_after_adapt() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_after_adapt ( )
virtual

After adapt: Rebuild face element submeshes and re-setup FSI.

Reimplemented from oomph::Problem.

◆ actions_after_adapt() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_after_adapt ( )
virtual

After adapt: Rebuild face element submeshes and re-setup FSI.

Reimplemented from oomph::Problem.

◆ actions_after_distribute()

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_after_distribute

Recreate face elements and rebuild problem.

After distribute: Rebuild face element submeshes and re-setup FSI

1274 {
1275  // delete and recreate meshes
1285 
1286  // Rebuild the global mesh
1288 
1289  // Unpin all pressure dofs
1292 
1293  // Pin redundant pressure dofs
1296 
1297  // Setup FSI
1298  //----------
1299 
1300  unsigned b=3;
1301 
1302  FSI_functions::setup_fluid_load_info_for_solid_elements<FLUID_ELEMENT,3>
1304 
1305  unsigned nnode_fsi_fluid = Fluid_mesh_pt->nboundary_node(b);
1306  for (unsigned i=0;i<nnode_fsi_fluid;i++)
1307  {
1308  Fluid_mesh_pt->
1309  boundary_node_pt(b,i)->set_auxiliary_node_update_fct_pt(
1311  }
1312 }

References oomph::FSI_functions::apply_no_slip_on_moving_wall(), b, and i.

◆ actions_before_adapt() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_adapt
virtual

Before adapt: Flush face element submeshes.

Flush mesh of face elements.

Reimplemented from oomph::Problem.

1119 {
1120  // Flush all the submeshes out but keep the meshes of
1121  // RefineableFSISolidTractionElements alive (i.e. don't delete them)
1122  flush_sub_meshes();
1123 
1124  // Add the fluid mesh and the solid mesh back again
1125  // Remember that it's important that the fluid mesh is
1126  // added before the solid mesh!
1129 
1130  // Rebuild the global mesh
1131  this->rebuild_global_mesh();
1132 }
void flush_sub_meshes()
Definition: problem.h:1339

◆ actions_before_adapt() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_adapt ( )
virtual

Before adapt: Flush face element submeshes.

Reimplemented from oomph::Problem.

◆ actions_before_adapt() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_adapt ( )
virtual

Before adapt: Flush face element submeshes.

Reimplemented from oomph::Problem.

◆ actions_before_distribute()

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_distribute

Before distribute: Flush face submeshes and keep all solid elements adjacent to the fluid as halos.

Retain all bulk solid elements adjacent to fluid mesh as halos then remove face-elements from problem.

1252 {
1253 
1254  // Flush all the submeshes out but keep the meshes of
1255  // RefineableFSISolidTractionElements alive (i.e. don't delete them)
1256  flush_sub_meshes();
1257 
1258  // Add the fluid mesh and the solid mesh back again
1259  // Remember that it's important that the fluid mesh is
1260  // added before the solid mesh!
1263 
1264  // Rebuild global mesh
1266 }

◆ actions_before_implicit_timestep() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_implicit_timestep
virtual

Actions before timestep.

Actions before implicit timestep.

Reimplemented from oomph::Problem.

1352 {
1353  // Get current time
1354  double t=time_pt()->time();
1355 
1356  // Factor for volume flux
1357  double fact=1.0+0.5*sin(MathematicalConstants::Pi*t/Global_Parameters::T);
1358  oomph_info << "Time, volume flux factor: " << t << " " << fact << std::endl;
1359 
1360  // Set inflow (bc 0)
1361  unsigned nnode= fluid_mesh_pt()->nboundary_node(0);
1362  for (unsigned i=0;i<nnode;i++)
1363  {
1364  double x = Fluid_mesh_pt->boundary_node_pt(0,i)->x(0);
1365  double y = Fluid_mesh_pt->boundary_node_pt(0,i)->x(1);
1366  double r = sqrt(x*x+y*y);
1367  double v = 2.0*(1.0-r*r);
1368  v*=fact;
1369  fluid_mesh_pt()->boundary_node_pt(0,i)->set_value(2,v);
1370  }
1371 
1372 }// end of actions_before_implicit_timestep
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
FluidMesh< FLUID_ELEMENT > * fluid_mesh_pt()
Bulk fluid mesh.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:540
Time *& time_pt()
Return a pointer to the global time object.
Definition: problem.h:1504
double & time()
Return the current value of the continuous time.
Definition: timesteppers.h:123
Scalar * y
Definition: level1_cplx_impl.h:128
double T
Period of periodic variation in inflow pressure.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:412
r
Definition: UniformPSDSelfTest.py:20
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
list x
Definition: plotDoE.py:28
t
Definition: plotPSD.py:36

References i, oomph::oomph_info, BiharmonicTestFunctions2::Pi, UniformPSDSelfTest::r, sin(), sqrt(), Global_Parameters::T, plotPSD::t, v, plotDoE::x, and y.

◆ actions_before_implicit_timestep() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_implicit_timestep ( )
virtual

Actions before timestep.

Reimplemented from oomph::Problem.

◆ actions_before_implicit_timestep() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_implicit_timestep ( )
virtual

Actions before timestep.

Reimplemented from oomph::Problem.

◆ actions_before_newton_convergence_check() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_newton_convergence_check ( )
inlinevirtual

Update no slip bc after update of unknowns.

Reimplemented from oomph::Problem.

484  {
485  Fluid_mesh_pt->node_update();
486  }

◆ actions_before_newton_convergence_check() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_newton_convergence_check ( )
inlinevirtual

Update no slip bc after update of unknowns.

Reimplemented from oomph::Problem.

484  {
485  Fluid_mesh_pt->node_update();
486  }

◆ actions_before_newton_convergence_check() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_newton_convergence_check ( )
inlinevirtual

Update no slip bc after update of unknowns.

Reimplemented from oomph::Problem.

489  {
490  Fluid_mesh_pt->node_update();
491  }

◆ actions_before_newton_solve() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Actions before Newton solve: Reset pseudo-elastic Lagrangian coordinates.

Reimplemented from oomph::Problem.

491  {
492  Fluid_mesh_pt->set_lagrangian_nodal_coordinates();
493  }

◆ actions_before_newton_solve() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Actions before Newton solve: Reset pseudo-elastic Lagrangian coordinates.

Reimplemented from oomph::Problem.

491  {
492  Fluid_mesh_pt->set_lagrangian_nodal_coordinates();
493  }

◆ actions_before_newton_solve() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Actions before Newton solve: Reset pseudo-elastic Lagrangian coordinates.

Reimplemented from oomph::Problem.

496  {
497  Fluid_mesh_pt->set_lagrangian_nodal_coordinates();
498  }

◆ create_fsi_traction_elements() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_fsi_traction_elements

Create FSI traction elements.

Create FSI traction elements that apply fluid traction onto wall.

952 {
953  // Boundary 4 is the is the fsi boundary of solid mesh
954  unsigned b=4;
955 
956  // How many bulk elements are adjacent to boundary b?
957  unsigned n_element = Solid_mesh_pt->nboundary_element(b);
958 
959  // Loop over the bulk elements adjacent to boundary b
960  for(unsigned e=0;e<n_element;e++)
961  {
962  // Get pointer to the bulk element that is adjacent to boundary b
963  SOLID_ELEMENT* bulk_elem_pt = dynamic_cast<SOLID_ELEMENT*>(
964  Solid_mesh_pt->boundary_element_pt(b,e));
965 
966  //What is the index of the face of the element e along boundary b
967  int face_index = Solid_mesh_pt->face_index_at_boundary(b,e);
968 
969  // Create new element
972  face_index);
973 
974  // Add it to the mesh
976 
977  // Specify boundary number
979 
980  // Specify FSI parameter
981  el_pt->q_pt() = &Global_Parameters::Q;
982  }
983 } // end of create_fsi_traction_elements
double *& q_pt()
Definition: fsi.h:248
void set_boundary_number_in_bulk_mesh(const unsigned &b)
Set function for the boundary number in bulk mesh.
Definition: elements.h:4482
void add_element_pt(GeneralisedElement *const &element_pt)
Add a (pointer to) an element to the mesh.
Definition: mesh.h:617
Definition: solid_traction_elements.h:1046
double Q
FSI parameter.
Definition: acoustic_fsi.cc:58

References b, e(), Global_Parameters::Q, oomph::FSIWallElement::q_pt(), and oomph::FaceElement::set_boundary_number_in_bulk_mesh().

◆ create_fsi_traction_elements() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_fsi_traction_elements ( )

Create FSI traction elements.

◆ create_fsi_traction_elements() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_fsi_traction_elements ( )

Create FSI traction elements.

◆ create_lagrange_multiplier_elements() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_lagrange_multiplier_elements

Create elements that enforce prescribed boundary motion for the pseudo-solid fluid mesh by Lagrange multipliers

Create elements that impose the prescribed boundary displacement for the pseudo-solid fluid mesh

1030 {
1031  // boundary 3 of fluid mesh
1032  unsigned b=3;
1033 
1034  // create the geom object for the wall
1035  //delete existing object, if it already exists
1037  //Now create new object
1039 
1040  // How many bulk fluid elements are adjacent to boundary b?
1041  unsigned n_element = Fluid_mesh_pt->nboundary_element(b);
1042 
1043  // Loop over the bulk fluid elements adjacent to boundary b?
1044  for(unsigned e=0;e<n_element;e++)
1045  {
1046  // Get pointer to the bulk fluid element that is adjacent to boundary b
1047  FLUID_ELEMENT* bulk_elem_pt = dynamic_cast<FLUID_ELEMENT*>(
1048  Fluid_mesh_pt->boundary_element_pt(b,e));
1049 
1050  //Find the index of the face of element e along boundary b
1051  int face_index = Fluid_mesh_pt->face_index_at_boundary(b,e);
1052 
1053  // Create new element
1055  el_pt =
1057  bulk_elem_pt,face_index);
1058 
1059  // Add it to the mesh
1061 
1062  // Set the GeomObject that defines the boundary shape and set
1063  // which bulk boundary we are attached to (needed to extract
1064  // the boundary coordinate from the bulk nodes)
1066 
1067  // Loop over the nodes
1068  unsigned nnod=el_pt->nnode();
1069  for (unsigned i=0;i<nnod;i++)
1070  {
1071  // How many nodal values were used by the "bulk" element
1072  // that originally created this node?
1073  unsigned n_bulk_value=el_pt->nbulk_value(i);
1074  Node* node_pt = el_pt->node_pt(i);
1075 
1076  // The remaining ones are Lagrange multipliers and we pin them.
1077  unsigned nval=node_pt->nvalue();
1078  for (unsigned j=n_bulk_value;j<nval;j++)
1079  {
1080  // Direction of Lagrange multiplier force
1081  int d=j-n_bulk_value;
1082 
1083 
1084  // Boundary 0 (inflow): Pseudo-solid displacement is fixed so pin
1085  // all Lagrange multipliers
1086  if (node_pt->is_on_boundary(0))
1087  {
1088  if (d==0||d==1||d==2) node_pt->pin(j);
1089  }
1090  // Boundary 1 (symm BC, x=const.): Pseudo-solid displacement is
1091  // fixed in x-direction so pin corresponding Lagrange multiplier
1092  if (node_pt->is_on_boundary(1))
1093  {
1094  if (d==0) node_pt->pin(j);
1095  }
1096  // Boundary 2 (symm BC, y=const.): Pseudo-solid displacement is
1097  // fixed in y-direction so pin corresponding Lagrange multiplier
1098  if (node_pt->is_on_boundary(2))
1099  {
1100  if (d==1) node_pt->pin(j);
1101  }
1102  // Boundary 4 (outflow): Pseudo-solid displacement is fixed so pin
1103  // all Lagrange multipliers
1104  if (node_pt->is_on_boundary(4))
1105  {
1106  if (d==0||d==1||d==2) node_pt->pin(j);
1107  }
1108  }
1109  }
1110  }
1111 } // end of create_lagrange_multiplier_elements
void pin(const unsigned &i)
Pin the i-th stored variable.
Definition: nodes.h:385
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
Definition: nodes.h:483
unsigned & nbulk_value(const unsigned &n)
Definition: elements.h:4845
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void set_boundary_shape_geom_object_pt(GeomObject *boundary_shape_geom_object_pt, const unsigned &boundary_number_in_bulk_mesh)
Definition: solid_traction_elements.h:1209
Definition: mesh_as_geometric_object.h:93
Definition: nodes.h:906
virtual bool is_on_boundary() const
Definition: nodes.h:1373
Definition: solid_traction_elements.h:2013
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References b, e(), FLUID_ELEMENT, i, oomph::Node::is_on_boundary(), j, oomph::FaceElement::nbulk_value(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::Data::nvalue(), oomph::Data::pin(), and oomph::ImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::set_boundary_shape_geom_object_pt().

◆ create_lagrange_multiplier_elements() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_lagrange_multiplier_elements ( )

Create elements that enforce prescribed boundary motion for the pseudo-solid fluid mesh by Lagrange multipliers

◆ create_lagrange_multiplier_elements() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_lagrange_multiplier_elements ( )

Create elements that enforce prescribed boundary motion for the pseudo-solid fluid mesh by Lagrange multipliers

◆ create_solid_traction_elements() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_solid_traction_elements

create solid traction elements (to apply pressure to external solid wall)

Create face elements that apply external pressure load onto wall

993 {
994  // Set boundary
995  unsigned b=2;
996 
997  // How many bulk elements are adjacent to boundary b?
998  unsigned n_element = Solid_mesh_pt->nboundary_element(b);
999 
1000  // Loop over the bulk elements adjacent to boundary b
1001  for(unsigned e=0;e<n_element;e++)
1002  {
1003  // Get pointer to the bulk element that is adjacent to boundary b
1004  SOLID_ELEMENT* bulk_elem_pt = dynamic_cast<SOLID_ELEMENT*>(
1005  Solid_mesh_pt->boundary_element_pt(b,e));
1006 
1007  //Find the index of the face of element e along boundary b
1008  int face_index = Solid_mesh_pt->face_index_at_boundary(b,e);
1009 
1010  // Create new element
1013  face_index);
1014 
1015  //Set the traction function
1017 
1018  // add to mesh
1020  }
1021 }
Definition: solid_traction_elements.h:474
void(*&)(const Vector< double > &xi, const Vector< double > &x, const Vector< double > &n, Vector< double > &traction) traction_fct_pt()
Reference to the traction function pointer.
Definition: solid_traction_elements.h:159
void press_load(const Vector< double > &xi, const Vector< double > &x, const Vector< double > &N, Vector< double > &load)
Load function for wall.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:391

References b, e(), Global_Parameters::press_load(), and oomph::SolidTractionElement< ELEMENT >::traction_fct_pt.

◆ create_solid_traction_elements() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_solid_traction_elements ( )

create solid traction elements (to apply pressure to external solid wall)

◆ create_solid_traction_elements() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_solid_traction_elements ( )

create solid traction elements (to apply pressure to external solid wall)

◆ doc_parameters() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_parameters ( )
inline

Doc parameters.

519  {
520  std::cout << "\n\n=================================================\n";
521  std::cout << "Q : " << Global_Parameters::Q
522  << std::endl;
523  std::cout << "Re : " << Global_Parameters::Re
524  << std::endl;
525  std::cout << "P : " << Global_Parameters::P
526  << std::endl;
527  std::cout << "Pcos : " << Global_Parameters::Pcos
528  << std::endl;
529  std::cout << "T : " << Global_Parameters::T
530  <<std::endl;
531  std::cout << "t : " << time_pt()->time()
532  << std::endl;
533  std::cout << "=================================================\n\n";
534  }
double P
Uniform pressure.
Definition: unstructured_acoustic_fsi.cc:145
double Pcos
Perturbation pressure.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:382

References Global_Parameters::P, Global_Parameters::Pcos, Global_Parameters::Q, Global_Parameters::Re, and Global_Parameters::T.

◆ doc_parameters() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_parameters ( )
inline

Doc parameters.

519  {
520  std::cout << "\n\n=================================================\n";
521  std::cout << "Q : " << Global_Parameters::Q
522  << std::endl;
523  std::cout << "Re : " << Global_Parameters::Re
524  << std::endl;
525  std::cout << "P : " << Global_Parameters::P
526  << std::endl;
527  std::cout << "Pcos : " << Global_Parameters::Pcos
528  << std::endl;
529  std::cout << "T : " << Global_Parameters::T
530  <<std::endl;
531  std::cout << "t : " << time_pt()->time()
532  << std::endl;
533  std::cout << "=================================================\n\n";
534  }

References Global_Parameters::P, Global_Parameters::Pcos, Global_Parameters::Q, Global_Parameters::Re, and Global_Parameters::T.

◆ doc_parameters() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_parameters ( )
inline

Doc parameters.

525  {
526  std::cout << "\n\n=================================================\n";
527  std::cout << "Q : " << Global_Parameters::Q
528  << std::endl;
529  std::cout << "Re : " << Global_Parameters::Re
530  << std::endl;
531  std::cout << "P : " << Global_Parameters::P
532  << std::endl;
533  std::cout << "Pcos : " << Global_Parameters::Pcos
534  << std::endl;
535  std::cout << "T : " << Global_Parameters::T
536  <<std::endl;
537  std::cout << "t : " << time_pt()->time()
538  << std::endl;
539  std::cout << "=================================================\n\n";
540  }

References Global_Parameters::P, Global_Parameters::Pcos, Global_Parameters::Q, Global_Parameters::Re, and Global_Parameters::T.

◆ doc_solid_boundary_coordinates() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_solid_boundary_coordinates
private

Sanity check: Doc boundary coordinates on i-th solid FSI interface.

Doc boundary coordinates of i-th solid FSI boundary.

1381 {
1382 
1383  //Doc boundary coordinates in fluid
1384  char filename[100];
1385  sprintf(filename,"RESLT/solid_boundary_coordinates.dat");
1386  std::ofstream the_file(filename);
1387 
1388  // Loop over traction elements
1389  unsigned n_face_element = Solid_fsi_traction_mesh_pt->nelement();
1390  for(unsigned e=0;e<n_face_element;e++)
1391  {
1392  //Cast the element pointer
1396 
1397  // Doc boundary coordinate
1398  Vector<double> s(2);
1399  Vector<double> zeta(2);
1400  Vector<double> x(3);
1401  unsigned n_plot=3;
1402  the_file << el_pt->tecplot_zone_string(n_plot);
1403 
1404  // Loop over plot points
1405  unsigned num_plot_points=el_pt->nplot_points(n_plot);
1406  for (unsigned iplot=0;iplot<num_plot_points;iplot++)
1407  {
1408  // Get local coordinates of plot point
1409  el_pt->get_s_plot(iplot,n_plot,s);
1410  el_pt->interpolated_zeta(s,zeta);
1411  el_pt->interpolated_x(s,x);
1412  for (unsigned i=0;i<3;i++)
1413  {
1414  the_file << x[i] << " ";
1415  }
1416  for (unsigned i=0;i<2;i++)
1417  {
1418  the_file << zeta[i] << " ";
1419  }
1420 
1421  the_file << std::endl;
1422  }
1423  el_pt->write_tecplot_zone_footer(the_file,n_plot);
1424  }
1425 
1426  // Close doc file
1427  the_file.close();
1428 
1429 } // end doc_solid_zeta
double interpolated_x(const Vector< double > &s, const unsigned &i) const
Definition: elements.h:4528
void interpolated_zeta(const Vector< double > &s, Vector< double > &zeta) const
Definition: elements.cc:4675
virtual std::string tecplot_zone_string(const unsigned &nplot) const
Definition: elements.h:3161
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Definition: elements.h:3148
virtual unsigned nplot_points(const unsigned &nplot) const
Definition: elements.h:3186
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Definition: elements.h:3174
GeneralisedElement *& element_pt(const unsigned long &e)
Return pointer to element e.
Definition: mesh.h:448
unsigned long nelement() const
Return number of elements in the mesh.
Definition: mesh.h:590
RealScalar s
Definition: level1_cplx_impl.h:130
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152

References e(), MergeRestartFiles::filename, oomph::FiniteElement::get_s_plot(), i, oomph::FaceElement::interpolated_x(), oomph::FiniteElement::interpolated_zeta(), oomph::FiniteElement::nplot_points(), s, oomph::FiniteElement::tecplot_zone_string(), oomph::FiniteElement::write_tecplot_zone_footer(), plotDoE::x, and Eigen::zeta().

◆ doc_solid_boundary_coordinates() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_solid_boundary_coordinates ( )
private

Sanity check: Doc boundary coordinates on i-th solid FSI interface.

◆ doc_solid_boundary_coordinates() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_solid_boundary_coordinates ( )
private

Sanity check: Doc boundary coordinates on i-th solid FSI interface.

◆ doc_solution() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_solution ( DocInfo doc_info)

Doc the solution.

1438 {
1439 
1440  ofstream some_file;
1441  char filename[100];
1442 
1443  // Number of plot points
1444  unsigned npts;
1445  npts=5;
1446 
1447  // Output solid boundaries
1448  //------------------------
1449  sprintf(filename,"%s/solid_boundaries%i.dat",doc_info.directory().c_str(),
1450  doc_info.number());
1451  some_file.open(filename);
1452  Solid_mesh_pt->output_boundaries(some_file);
1453  some_file.close();
1454 
1455 
1456  // Output solid solution
1457  //-----------------------
1458  sprintf(filename,"%s/solid_soln%i.dat",doc_info.directory().c_str(),
1459  doc_info.number());
1460  some_file.open(filename);
1461  Solid_mesh_pt->output(some_file,npts);
1462  some_file.close();
1463 
1464 
1465  // Output fluid boundaries
1466  //------------------------
1467  sprintf(filename,"%s/fluid_boundaries%i.dat",doc_info.directory().c_str(),
1468  doc_info.number());
1469  some_file.open(filename);
1470  Fluid_mesh_pt->output_boundaries(some_file);
1471  some_file.close();
1472 
1473 
1474  // Output fluid solution
1475  //-----------------------
1476  sprintf(filename,"%s/fluid_soln%i.dat",doc_info.directory().c_str(),
1477  doc_info.number());
1478  some_file.open(filename);
1479  Fluid_mesh_pt->output(some_file,npts);
1480  some_file.close();
1481 
1482 
1483  // Output fsi traction
1484  //--------------------
1485  sprintf(filename,"%s/fsi_traction%i.dat",doc_info.directory().c_str(),
1486  doc_info.number());
1487  some_file.open(filename);
1488  Solid_fsi_traction_mesh_pt->output(some_file,npts);
1489  some_file.close();
1490 
1491  // Output fsi traction
1492  //--------------------
1493  sprintf(filename,"%s/solid_traction%i.dat",doc_info.directory().c_str(),
1494  doc_info.number());
1495  some_file.open(filename);
1496  Solid_traction_mesh_pt->output(some_file,npts);
1497  some_file.close();
1498 
1499 
1500  // Output Lagrange multipliers
1501  //----------------------------
1502  sprintf(filename,"%s/lagrange%i.dat",doc_info.directory().c_str(),
1503  doc_info.number());
1504  some_file.open(filename);
1505  Lagrange_multiplier_mesh_pt->output(some_file,npts);
1506  some_file.close();
1507 
1508 } // end_of_doc
std::string directory() const
Output directory.
Definition: oomph_utilities.h:524
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554
void output(std::ostream &outfile)
Output for all elements.
Definition: mesh.cc:2027

References oomph::DocInfo::directory(), MergeRestartFiles::filename, and oomph::DocInfo::number().

◆ doc_solution() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_solution ( DocInfo doc_info)

Doc the solution.

◆ doc_solution() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::doc_solution ( DocInfo doc_info)

Doc the solution.

◆ empty_mesh() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::empty_mesh ( Mesh *const &  surface_mesh_pt)

Helper function to delete elements from a mesh.

Delete elements in specified mesh of face elements.

1327 {
1328  // How many surface elements are in the surface mesh
1329  unsigned n_element = surface_mesh_pt->nelement();
1330 
1331  // Loop over the surface elements
1332  for(unsigned e=0;e<n_element;e++)
1333  {
1334  // Kill surface element
1335  delete surface_mesh_pt->element_pt(e);
1336  }
1337 
1338  // Wipe the mesh
1339  surface_mesh_pt->flush_element_and_node_storage();
1340 
1341 } // end of empty_mesh
void flush_element_and_node_storage()
Definition: mesh.h:407

References e(), oomph::Mesh::element_pt(), oomph::Mesh::flush_element_and_node_storage(), and oomph::Mesh::nelement().

◆ empty_mesh() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::empty_mesh ( Mesh *const &  surface_mesh_pt)

Helper function to delete elements from a mesh.

◆ empty_mesh() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::empty_mesh ( Mesh *const &  surface_mesh_pt)

Helper function to delete elements from a mesh.

◆ fluid_mesh_pt() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
FluidMesh<FLUID_ELEMENT>* PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::fluid_mesh_pt ( )
inline

Bulk fluid mesh.

540 {return Fluid_mesh_pt; }

◆ fluid_mesh_pt() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
FluidMesh<FLUID_ELEMENT>* PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::fluid_mesh_pt ( )
inline

Bulk fluid mesh.

540 {return Fluid_mesh_pt; }

◆ fluid_mesh_pt() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
FluidMesh<FLUID_ELEMENT>* PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::fluid_mesh_pt ( )
inline

Bulk fluid mesh.

546 {return Fluid_mesh_pt; }

◆ lagrange_multiplier_mesh_pt() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
SolidMesh*& PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::lagrange_multiplier_mesh_pt ( )
inline

Meshes of Lagrange multiplier elements.

544  {return Lagrange_multiplier_mesh_pt; }

◆ lagrange_multiplier_mesh_pt() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
SolidMesh*& PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::lagrange_multiplier_mesh_pt ( )
inline

Meshes of Lagrange multiplier elements.

544  {return Lagrange_multiplier_mesh_pt; }

◆ lagrange_multiplier_mesh_pt() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
SolidMesh*& PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::lagrange_multiplier_mesh_pt ( )
inline

Meshes of Lagrange multiplier elements.

550  {return Lagrange_multiplier_mesh_pt; }

◆ set_initial_condition() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::set_initial_condition
virtual

Set initial conditions.

Apply initial conditions.

Reimplemented from oomph::Problem.

925 {
926  // Set Poiseuille flow
927  unsigned nnode = Fluid_mesh_pt->nnode();
928  for (unsigned i = 0; i < nnode; i++)
929  {
930  double x = Fluid_mesh_pt->node_pt(i)->x(0);
931  double y = Fluid_mesh_pt->node_pt(i)->x(1);
932  double r = sqrt(x*x+y*y);
933  double v = 2.0*(1.0-r*r);
934  Fluid_mesh_pt->node_pt(i)->set_value(0,0.0);
935  Fluid_mesh_pt->node_pt(i)->set_value(1,0.0);
936  Fluid_mesh_pt->node_pt(i)->set_value(2,v);
937  }
938 
939 
940  // Assign initial values for an impulsive start
941  Fluid_mesh_pt->assign_initial_values_impulsive();
942  Solid_mesh_pt->assign_initial_values_impulsive();
943 
944 }

References i, UniformPSDSelfTest::r, sqrt(), v, plotDoE::x, and y.

◆ set_initial_condition() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::set_initial_condition ( )
virtual

Set initial conditions.

Reimplemented from oomph::Problem.

◆ set_initial_condition() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::set_initial_condition ( )
virtual

Set initial conditions.

Reimplemented from oomph::Problem.

◆ set_pseudo_elastic_fsi_solver()

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::set_pseudo_elastic_fsi_solver

Switch to GMRES preconditioned with the pseudo-elastic FSI preconditioner

1591 {
1592 
1593 //setup the solver
1594 #ifdef OOMPH_HAS_TRILINOS
1595 
1596  TrilinosAztecOOSolver* solver_pt = new
1598  solver_pt->solver_type() = TrilinosAztecOOSolver::GMRES;
1599 
1600 #else
1601 
1603 
1604 #endif
1605 
1606  // Set tolerance
1607  solver_pt->tolerance()=1.0e-8;
1608 
1609  // Max. number of iterations
1610  solver_pt->max_iter()=200;
1611 
1612  // preconditioner
1613  PseudoElasticFSIPreconditioner* prec_pt = new
1615 
1616  // meshes
1618  prec_pt->set_solid_mesh_pt(wall_mesh_pt());
1620 
1621  // inexact pseudo-solid preconditioning
1623  = PseudoElasticPreconditioner::
1624  Block_upper_triangular_preconditioner;
1625 
1626 #ifdef OOMPH_HAS_HYPRE
1627 
1630  (Pseudo_Elastic_Preconditioner_Subsidiary_Operator_Helper
1631  ::get_elastic_preconditioner);
1632 
1633 #endif
1634 
1635 
1636 #ifdef OOMPH_HAS_TRILINOS
1637 
1640  (Pseudo_Elastic_Preconditioner_Subsidiary_Operator_Helper
1641  ::get_lagrange_multiplier_preconditioner);
1642 
1643 #endif
1644 
1645  // inexact "real" solid preconditioning
1648  prec_pt->set_solid_preconditioner(solid_prec_pt);
1649 
1650 #ifdef OOMPH_HAS_HYPRE
1651 
1653  (Real_Solid_Preconditioner_Helper::get_preconditioner);
1654 
1655 #endif
1656 
1657  // inexact navier stokes preconditioning
1659  ns_prec_pt = prec_pt->navier_stokes_schur_complement_preconditioner_pt();
1661 
1662  // ns momentum
1665 
1666 #ifdef OOMPH_HAS_HYPRE
1667 
1669  (LSC_Preconditioner_Helper::set_hypre_preconditioner);
1670 
1671 #endif
1672 
1673  ns_prec_pt->set_f_preconditioner(f_prec_pt);
1674 
1675 #ifdef OOMPH_HAS_HYPRE
1676 
1677  // ns pressure poisson
1678  HyprePreconditioner* p_prec_pt = new HyprePreconditioner;
1679  p_prec_pt->set_amg_iterations(2);
1680  p_prec_pt->amg_using_simple_smoothing();
1681  p_prec_pt->amg_simple_smoother() = 3;
1682  p_prec_pt->hypre_method() = HyprePreconditioner::BoomerAMG;
1683  p_prec_pt->amg_strength() = 0.25;
1684  // Use 6 for parallel (Falgout) or 3 (Ruge Stuben) for serial
1685  p_prec_pt->amg_coarsening() = 6;
1686  p_prec_pt->disable_doc_time();
1687  ns_prec_pt->set_p_preconditioner(p_prec_pt);
1688 
1689 #endif
1690 
1691  // and pass prec to solver and solver to problem
1692  solver_pt->preconditioner_pt() = prec_pt;
1693  linear_solver_pt() = solver_pt;
1694  }
WallMesh< SOLID_ELEMENT > * wall_mesh_pt()
Bulk solid mesh.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:537
SolidMesh *& lagrange_multiplier_mesh_pt()
Meshes of Lagrange multiplier elements.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:543
Definition: general_purpose_block_preconditioners.h:321
Definition: general_purpose_block_preconditioners.h:459
The GMRES method.
Definition: iterative_linear_solver.h:1227
void set_subsidiary_preconditioner_function(SubsidiaryPreconditionerFctPt sub_prec_fn)
access function to set the subsidiary preconditioner function.
Definition: general_purpose_block_preconditioners.h:136
Definition: hypre_solver.h:826
unsigned & amg_simple_smoother()
Access function to AMG_simple_smoother flag.
Definition: hypre_solver.h:983
double & amg_strength()
Access function to AMG_strength.
Definition: hypre_solver.h:1038
void set_amg_iterations(const unsigned &amg_iterations)
Function to set the number of times to apply BoomerAMG.
Definition: hypre_solver.h:964
unsigned & hypre_method()
Access function to Hypre_method flag – specified via enumeration.
Definition: hypre_solver.h:945
void disable_doc_time()
Disable documentation of preconditioner timings.
Definition: hypre_solver.h:939
void amg_using_simple_smoothing()
Definition: hypre_solver.h:977
unsigned & amg_coarsening()
Access function to AMG_coarsening flag.
Definition: hypre_solver.h:1020
Preconditioner *& preconditioner_pt()
Access function to preconditioner.
Definition: iterative_linear_solver.h:95
double & tolerance()
Access to convergence tolerance.
Definition: iterative_linear_solver.h:107
unsigned & max_iter()
Access to max. number of iterations.
Definition: iterative_linear_solver.h:113
Definition: navier_stokes_preconditioners.h:607
void set_p_preconditioner(Preconditioner *new_p_preconditioner_pt)
Function to set a new pressure matrix preconditioner (inexact solver)
Definition: navier_stokes_preconditioners.h:745
void set_f_preconditioner(Preconditioner *new_f_preconditioner_pt)
Function to set a new momentum matrix preconditioner (inexact solver)
Definition: navier_stokes_preconditioners.h:769
LinearSolver *& linear_solver_pt()
Return a pointer to the linear solver object.
Definition: problem.h:1466
Definition: pseudo_elastic_fsi_preconditioner.h:62
void enable_navier_stokes_schur_complement_preconditioner()
Definition: pseudo_elastic_fsi_preconditioner.h:193
NavierStokesSchurComplementPreconditioner *const navier_stokes_schur_complement_preconditioner_pt()
Access function to the Navier Stokes Schur complement preconditioner.
Definition: pseudo_elastic_fsi_preconditioner.h:186
void set_fluid_and_pseudo_elastic_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the combined fluid/pseudo solid elements
Definition: pseudo_elastic_fsi_preconditioner.h:150
void set_solid_preconditioner(Preconditioner *prec_pt)
Definition: pseudo_elastic_fsi_preconditioner.h:169
void set_lagrange_multiplier_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the lagrange multiplier elements
Definition: pseudo_elastic_fsi_preconditioner.h:162
PseudoElasticPreconditioner *const pseudo_elastic_preconditioner_pt()
Access function to the pseudo elastic subsidiary preconditioner.
Definition: pseudo_elastic_fsi_preconditioner.h:180
void set_solid_mesh_pt(Mesh *mesh_pt)
specify the mesh containing the solid elements
Definition: pseudo_elastic_fsi_preconditioner.h:156
Elastic_preconditioner_type & elastic_preconditioner_type()
Definition: pseudo_elastic_preconditioner.h:229
void set_lagrange_multiplier_subsidiary_preconditioner(SubsidiaryPreconditionerFctPt prec_fn)
Definition: pseudo_elastic_preconditioner.h:206
void set_elastic_subsidiary_preconditioner(SubsidiaryPreconditionerFctPt prec_fn)
Definition: pseudo_elastic_preconditioner.h:216
Definition: trilinos_solver.h:267
unsigned & solver_type()
Access function to Solver_type.
Definition: trilinos_solver.h:442

References oomph::HyprePreconditioner::amg_coarsening(), oomph::HyprePreconditioner::amg_simple_smoother(), oomph::HyprePreconditioner::amg_strength(), oomph::HyprePreconditioner::amg_using_simple_smoothing(), oomph::HyprePreconditioner::disable_doc_time(), oomph::PseudoElasticPreconditioner::elastic_preconditioner_type(), oomph::PseudoElasticFSIPreconditioner::enable_navier_stokes_schur_complement_preconditioner(), oomph::HyprePreconditioner::hypre_method(), oomph::TrilinosAztecOOSolver::max_iter(), oomph::PseudoElasticFSIPreconditioner::navier_stokes_schur_complement_preconditioner_pt(), oomph::IterativeLinearSolver::preconditioner_pt(), oomph::PseudoElasticFSIPreconditioner::pseudo_elastic_preconditioner_pt(), oomph::HyprePreconditioner::set_amg_iterations(), oomph::PseudoElasticPreconditioner::set_elastic_subsidiary_preconditioner(), oomph::NavierStokesSchurComplementPreconditioner::set_f_preconditioner(), oomph::PseudoElasticFSIPreconditioner::set_fluid_and_pseudo_elastic_mesh_pt(), oomph::PseudoElasticFSIPreconditioner::set_lagrange_multiplier_mesh_pt(), oomph::PseudoElasticPreconditioner::set_lagrange_multiplier_subsidiary_preconditioner(), oomph::NavierStokesSchurComplementPreconditioner::set_p_preconditioner(), oomph::PseudoElasticFSIPreconditioner::set_solid_mesh_pt(), oomph::PseudoElasticFSIPreconditioner::set_solid_preconditioner(), oomph::GeneralPurposeBlockPreconditioner< MATRIX >::set_subsidiary_preconditioner_function(), oomph::TrilinosAztecOOSolver::solver_type(), and oomph::TrilinosAztecOOSolver::tolerance().

◆ steady_run() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::steady_run ( DocInfo doc_info)

Do steady run.

1519 {
1520 
1521  //Output initial configuration
1522  this->doc_solution(doc_info);
1523  doc_info.number()++;
1524 
1525  // increment P
1526  double p_increment=5.0e-4;
1527  unsigned count=0;
1528  while (this->wall_mesh_pt()->min_deformation() > 0.9)
1529  {
1530  oomph_info << "Min wall position: "
1531  << this->wall_mesh_pt()->min_deformation() << std::endl;
1532  Global_Parameters::P+=p_increment;
1533 
1534  cout << "Doing steady solve: " << count << std::endl;
1535  if (CommandLineArgs::Argc!=1)
1536  {
1537  this->steady_newton_solve();
1538  }
1539  else
1540  {
1541  unsigned max_adapt=1;
1542  this->steady_newton_solve(max_adapt);
1543  }
1544  this->doc_parameters();
1545  this->doc_solution(doc_info);
1546  doc_info.number()++;
1547  count++;
1548  if (CommandLineArgs::Argc!=1)
1549  {
1550  oomph_info << "Just doing one steady solve during validation.\n";
1551  break;
1552  }
1553  }
1554 
1555 }
void doc_solution(DocInfo &doc_info)
Doc the solution.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:1437
void doc_parameters()
Doc parameters.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:518
double min_deformation()
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:263
void steady_newton_solve(unsigned const &max_adapt=0)
Definition: problem.cc:9292

References oomph::CommandLineArgs::Argc, oomph::DocInfo::number(), oomph::oomph_info, and Global_Parameters::P.

◆ steady_run() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::steady_run ( DocInfo doc_info)

Do steady run.

◆ steady_run() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::steady_run ( DocInfo doc_info)

Do steady run.

◆ unsteady_run() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::unsteady_run ( DocInfo doc_info)

Do unsteady run.

1564 {
1565 
1566  // Set number of timesteps
1568  if (CommandLineArgs::Argc!=1)
1569  {
1570  oomph_info << "Just doing one timestep during validation.\n";
1571  nstep=1;
1572  }
1573 
1574  // Do unsteady run
1575  for (unsigned r = 0; r < nstep; r++)
1576  {
1577  cout << "Doing unsteady solve: " << r << std::endl;
1579  this->doc_parameters();
1580  this->doc_solution(doc_info);
1581  doc_info.number()++;
1582  }
1583 
1584 }
void unsteady_newton_solve(const double &dt)
Definition: problem.cc:10953
unsigned Nperiod
Number of periods.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:421
double Dt
Timestep.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:415
unsigned Nstep_per_period
Number of steps per period.
Definition: interaction/pseudo_solid_collapsible_tube/pseudo_solid_collapsible_tube.cc:418

References oomph::CommandLineArgs::Argc, Global_Parameters::Dt, Global_Parameters::Nperiod, Global_Parameters::Nstep_per_period, oomph::DocInfo::number(), oomph::oomph_info, and UniformPSDSelfTest::r.

◆ unsteady_run() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::unsteady_run ( DocInfo doc_info)

Do unsteady run.

◆ unsteady_run() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
void PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::unsteady_run ( DocInfo doc_info)

Do unsteady run.

◆ wall_mesh_pt() [1/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
WallMesh<SOLID_ELEMENT>* PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::wall_mesh_pt ( )
inline

Bulk solid mesh.

537 {return Solid_mesh_pt; }

◆ wall_mesh_pt() [2/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
WallMesh<SOLID_ELEMENT>* PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::wall_mesh_pt ( )
inline

Bulk solid mesh.

537 {return Solid_mesh_pt; }

◆ wall_mesh_pt() [3/3]

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
WallMesh<SOLID_ELEMENT>* PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::wall_mesh_pt ( )
inline

Bulk solid mesh.

543 {return Solid_mesh_pt; }

Member Data Documentation

◆ Fluid_mesh_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
FluidMesh< FLUID_ELEMENT > * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Fluid_mesh_pt
private

Bulk fluid mesh.

◆ Fluid_time_stepper_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
BDF< 2 > * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Fluid_time_stepper_pt
private

Timestepper for the Navier-Stokes equations.

◆ Lagrange_multiplier_mesh_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
SolidMesh * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Lagrange_multiplier_mesh_pt
private

Mesh of Lagrange multiplier elements.

◆ Solid_fsi_boundary_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
MeshAsGeomObject * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Solid_fsi_boundary_pt
private

GeomObject incarnations of the FSI boundary in the solid mesh.

◆ Solid_fsi_traction_mesh_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
SolidMesh * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Solid_fsi_traction_mesh_pt
private

Meshes of FSI traction elements (fluid traction onto solid)

◆ Solid_mesh_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
WallMesh< SOLID_ELEMENT > * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Solid_mesh_pt
private

Bulk solid mesh.

◆ Solid_traction_mesh_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
SolidMesh * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Solid_traction_mesh_pt
private

Solid traction elements (prescibed external pressure on solid wall)

◆ Wall_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
GeomObject * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Wall_pt
private

Geometric Object defining the undeformed boundary of the fluid mesh

◆ Wall_time_stepper_pt

template<class FLUID_ELEMENT , class SOLID_ELEMENT >
Steady< 2 > * PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::Wall_time_stepper_pt
private

Steady timestepper that stores two history values.


The documentation for this class was generated from the following files: