24 #ifndef free_surface_h
25 #define free_surface_h
83 #include "../include/bem_problem.h"
84 #include "../include/numerical_towing_tank.h"
88 template<
int dim,
class Type>
96 template<
int dim,
class Type>
110 wind(dim), comp_dom(comp_dom), bem(bem)
118 virtual unsigned int n_dofs()
const;
121 const unsigned int step_number);
126 const unsigned int step_number,
132 const unsigned int step_number,
139 virtual int residual(
const double t,
151 virtual int jacobian(
const double t,
176 const bool is_jacobian);
226 const unsigned int step_number,
235 const unsigned int step_number,
307 const std::string fname)
const;
311 const std::string fname);
std::string output_file_name
Point< 3 > restart_hull_displacement
SolverControl solver_control
SparsityPattern vector_sparsity_pattern
SparseMatrix< double > jacobian_dot_matrix
Vector< double > temp_src
Point< 3 > restart_transom_left_tangent
Point< 3 > restart_transom_center_point
void prepare_bem_vectors(double time, Vector< double > &bem_bc, Vector< double > &dphi_dn) const
virtual void output_step(Vector< double > &solution, const unsigned int step_number)
This function is called at the end of each iteration step for the newton solver.
Point< 3 > restart_transom_right_tangent
Vector< double > diff_comp
Vector< double > working_map_points
Functions::ParsedFunction< dim > initial_norm_potential_grad
TopLoc_Location restart_hull_location
Functions::ParsedFunction< 1 > hull_x_axis_translation
SparseMatrix< double > vector_beltrami_matrix
void prepare_restart(const double t, Vector< double > &y, Vector< double > &yp, bool restart_flag=true)
Method to make sure residual is null at each (re)start of the computation.
bool is_hull_x_translation_imposed
unsigned int output_frequency
unsigned int rhs_evaluations_counter
Functions::ParsedFunction< dim > initial_wave_potential
std::string restore_filename
SparseMatrix< double > DphiDt_sys_matrix
FreeSurface(NumericalTowingTank &comp_dom, BEMProblem< dim > &bem)
virtual int residual(const double t, Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src_yp)
For dae problems, we need a residual function.
Vector< double > DphiDt_sys_rhs
double coarsening_fraction
double adaptive_ref_limit
Point< 3 > restart_transom_right_point
Vector< double > DphiDt_sys_solution_3
Vector< double > DphiDt_sys_rhs_4
Tensor< 1, dim, Type > & T(Point< dim, Type > &p)
void remove_transom_hanging_nodes(Vector< double > &solution, Vector< double > &solution_dot, const double t, const unsigned int step_number, const double h)
SparseMatrix< double > jacobian_preconditioner_matrix
void output_results(const std::string, const double t, const Vector< double > &solution, const Vector< double > &pressure)
virtual int setup_jacobian_prec(const Vector< double > &src_yy)
Setup Jacobian preconditioner for Newton.
double ref_transom_wet_surface
Vector< double > alg_comp
Vector< double > vector_sys_solution
Vector< double > vector_sys_rhs_2
bool sync_bem_with_geometry
double restart_hull_quat_scalar
void vmult(Vector< double > &dst, const Vector< double > &src) const
Point< 3 > restart_transom_left_point
Vector< double > current_sol_dot
ConstraintMatrix constraints
virtual unsigned int n_dofs() const
Returns the number of degrees of freedom.
double refinement_fraction
Functions::ParsedFunction< dim > initial_wave_shape
Vector< double > & get_diameters()
SparsityPattern jacobian_sparsity_pattern
Vector< double > DphiDt_sys_solution_2
DoFHandler< dim-1, dim >::active_cell_iterator cell_it
Vector< double > diameters
Functions::ParsedFunction< 1 > hull_z_axis_translation
void enforce_partial_geometry_constraints(const double blend_factor)
void compute_potential_gradients(Vector< double > &complete_potential_gradients, const Vector< double > &phi, const Vector< double > &dphi_dn)
ConstraintMatrix vector_constraints
void compute_keel_smoothing(Vector< double > &smoothing)
Vector< double > nodes_alg_jac_x_delta
NumericalTowingTank & comp_dom
Triangulation< dim-1, dim >::active_cell_iterator tria_it
Vector< double > DXDt_and_DphiDt_vector
void declare_parameters(ParameterHandler &prm)
virtual bool solution_check(Vector< double > &solution, Vector< double > &solution_dot, const double t, const unsigned int step_number, const double h)
This function will check the behaviour of the solution.
Vector< double > bem_dphi_dn
Vector< double > sys_comp
Vector< double > break_wave_press
virtual Vector< double > & differential_components()
And an identification of the differential components.
unsigned int refinement_level_on_boat
Vector< double > nodes_pos_res
virtual int jacobian_prec(const double t, Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src_yp, const Vector< double > &src, const double alpha)
Jacobian inverse preconditioner vector product for dae.
bool initial_condition_from_dump
void enforce_full_geometry_constraints()
Vector< double > working_nodes_velocities
bool is_hull_z_translation_imposed
Vector< double > vector_sys_solution_2
void compute_internal_velocities(const Vector< double > &phi, const Vector< double > &dphi_dn)
Vector< double > DphiDt_sys_rhs_3
Vector< double > DphiDt_sys_rhs_2
void dump_solution(const Vector< double > &y, const Vector< double > &yp, const std::string fname) const
void compute_pressure(Vector< double > &press, Vector< double > &comp_1, Vector< double > &comp_2, Vector< double > &comp_3, Vector< double > &comp_4, const double t, const Vector< double > &solution, const Vector< double > &solution_dot)
Functions::ParsedFunction< dim > inflow_norm_potential_grad
virtual int jacobian_prec_prod(Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src)
Jacobian preconditioner vector product for newton solver.
bool reset_time_integrator
Functions::ParsedFunction< 1 > hull_y_axis_translation
bool stop_time_integrator
SparsityPattern DphiDt_sparsity_pattern
SparseMatrix< double > jacobian_matrix
virtual int jacobian(const double t, Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src_yp, const Vector< double > &src, const double alpha)
Jacobian vector product for dae.
std::string node_displacement_type
Base class that needs to be inherited by any function that wants to use the newton solver class...
Vector< double > transom_pressure_patch
Vector< double > current_sol
void make_edges_conformal(Vector< double > &solution, Vector< double > &solution_dot, const double t, const unsigned int step_number, const double h)
Method to enforce mesh conformity at edges at each restart.
int residual_and_jacobian(const double t, Vector< double > &dst, const Vector< double > &src_yy, const Vector< double > &src_yp, const Vector< double > &src, const double alpha, const bool is_jacobian)
This function computes either DAE residual or corrensponding Jacobian matrix vector product with vect...
Vector< double > nodes_ref_surf_dist
Point< 3 > restart_hull_quat_vector
void compute_constraints(ConstraintMatrix &constraints, ConstraintMatrix &vector_constraints)
unsigned int Rhs_evaluations_counter()
SparseMatrix< double > vector_sys_matrix
Vector< double > DphiDt_sys_solution
SparseMatrix< double > preconditioner_preconditioner_matrix
Vector< double > vector_sys_rhs
void compute_DXDt_and_DphiDt(double time, const Vector< double > &phi, const Vector< double > &dphi_dn, const Vector< double > &nodes_velocities)
bool is_hull_y_translation_imposed
Base class that needs to be inherited by any function that wants to use the time integrator class...
unsigned int max_number_of_dofs
Functions::ParsedFunction< dim > wind
Vector< double > dae_linear_step_residual
void restore_solution(Vector< double > &y, Vector< double > &yp, const std::string fname)
Vector< double > ref_cell_areas
void initial_conditions(Vector< double > &dst)
void parse_parameters(ParameterHandler &prm)
Vector< double > bem_residual
Vector< double > nodes_diff_jac_x_delta
Vector< double > dae_nonlin_residual
SparseMatrix< double > DphiDt_sys_matrix_2