PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT > Class Template Reference
+ Inheritance diagram for PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >:

Public Member Functions

 PerturbedStateProblem (const unsigned &n_r, const unsigned &n_z, const double &domain_height, Mesh *external_mesh_pt)
 Constructor. More...
 
 ~PerturbedStateProblem ()
 Destructor (empty) More...
 
void actions_before_newton_solve ()
 Update before solve (empty) More...
 
void actions_after_newton_solve ()
 Update after solve (empty) More...
 
void actions_before_implicit_timestep ()
 Actions before timestep (empty) More...
 
void actions_after_implicit_timestep ()
 Update the problem specs after solve (empty) More...
 
void set_initial_condition ()
 Set the initial conditions to a "Poiseuille-style" profile. More...
 
void set_boundary_conditions ()
 Set up the (homogeneous) boundary conditions. More...
 
RectangularQuadMesh< PERTURBED_ELEMENT > * mesh_pt ()
 Access function for the specific mesh. More...
 
RectangularQuadMesh< BASE_ELEMENT > * base_state_mesh_pt ()
 Access function for the base state mesh. More...
 
void doc_solution (DocInfo &doc_info)
 Doc the solution. More...
 
 PerturbedStateProblem (const unsigned &n_r, const unsigned &n_z, const double &domain_height, Mesh *external_mesh_pt)
 Constructor. More...
 
 ~PerturbedStateProblem ()
 Destructor (empty) More...
 
void actions_before_newton_solve ()
 Update before solve (empty) More...
 
void actions_after_newton_solve ()
 Update after solve (empty) More...
 
void actions_before_implicit_timestep ()
 Actions before timestep (empty) More...
 
void actions_after_implicit_timestep ()
 Update the problem specs after solve (empty) More...
 
void actions_after_adapt ()
 
void set_initial_condition ()
 
void set_boundary_conditions ()
 Set up the (homogeneous) boundary conditions. More...
 
RefineableRectangularQuadMesh< PERTURBED_ELEMENT > * mesh_pt ()
 Access function for the specific mesh. More...
 
RefineableRectangularQuadMesh< BASE_ELEMENT > * base_state_mesh_pt ()
 Access function for the base state mesh. More...
 
void doc_solution (DocInfo &doc_info)
 Doc the solution. More...
 
 PerturbedStateProblem (const unsigned &n_r, const unsigned &n_z, const double &domain_height, Mesh *external_mesh_pt)
 Constructor. More...
 
 ~PerturbedStateProblem ()
 Destructor (empty) More...
 
void actions_before_newton_solve ()
 Update before solve (empty) More...
 
void actions_after_newton_solve ()
 Update after solve (empty) More...
 
void actions_before_implicit_timestep ()
 Actions before timestep (empty) More...
 
void actions_after_implicit_timestep ()
 Update the problem specs after solve (empty) More...
 
void set_initial_condition ()
 Set initial conditions to a "Poiseuille-style" profile. More...
 
void set_boundary_conditions ()
 Set up the (homogeneous) boundary conditions. More...
 
RectangularQuadMesh< PERTURBED_ELEMENT > * mesh_pt ()
 Access function for the specific mesh. More...
 
RectangularQuadMesh< BASE_ELEMENT > * base_state_mesh_pt ()
 Access function for the base state mesh. More...
 
SelfStartingBDF2time_stepper_pt ()
 Access function for the specific timestepper. More...
 
void doc_solution (DocInfo &doc_info, const bool &output_soln=true)
 Doc the solution. More...
 
void create_trace_file (DocInfo &doc_info)
 Create a trace file. More...
 
void initialise_trace_file ()
 Initialise trace file (print column headings) More...
 
void close_trace_file ()
 Clear and close trace file. More...
 
ofstream & trace_file ()
 Access function for trace file. More...
 
void pass_updated_nondim_parameters_to_elements ()
 
 PerturbedStateProblem (const unsigned &n_r, const unsigned &n_z, const double &domain_height, Mesh *external_mesh_pt)
 Constructor. More...
 
 ~PerturbedStateProblem ()
 Destructor (empty) More...
 
void actions_before_newton_solve ()
 Update before solve (empty) More...
 
void actions_after_newton_solve ()
 Update after solve (empty) More...
 
void actions_before_implicit_timestep ()
 Actions before timestep (empty) More...
 
void actions_after_implicit_timestep ()
 Update the problem specs after solve (empty) More...
 
void actions_after_adapt ()
 
void set_initial_condition ()
 Set initial conditions to a "Poiseuille-style" profile. More...
 
void set_boundary_conditions ()
 Set up the (homogeneous) boundary conditions. More...
 
RefineableRectangularQuadMesh< PERTURBED_ELEMENT > * mesh_pt ()
 Access function for the specific mesh. More...
 
RefineableRectangularQuadMesh< BASE_ELEMENT > * base_state_mesh_pt ()
 Access function for the base state mesh. More...
 
SelfStartingBDF2time_stepper_pt ()
 Access function for the specific timestepper. More...
 
void doc_solution (DocInfo &doc_info, const bool &output_soln=true)
 Doc the solution. More...
 
void create_trace_file (DocInfo &doc_info)
 Create a trace file. More...
 
void initialise_trace_file ()
 Initialise trace file (print column headings) More...
 
void close_trace_file ()
 Clear and close trace file. More...
 
ofstream & trace_file ()
 Access function for trace file. More...
 
void pass_updated_nondim_parameters_to_elements ()
 
 PerturbedStateProblem (const unsigned &n_r, const unsigned &n_z, const double &radius_inner_cylinder, const double &radius_outer_cylinder, const double &l_z, Mesh *external_mesh_pt)
 Constructor. More...
 
 ~PerturbedStateProblem ()
 Destructor (empty) More...
 
void actions_before_newton_solve ()
 Update before solve (empty) More...
 
void actions_after_newton_solve ()
 Update after solve (empty) More...
 
void actions_before_implicit_timestep ()
 Actions before timestep (empty) More...
 
void actions_after_implicit_timestep ()
 Update the problem specs after solve (empty) More...
 
void set_initial_condition ()
 Set initial conditions to a "Poiseuille-style" profile. More...
 
void set_boundary_conditions ()
 Set up the (homogeneous) boundary conditions. More...
 
RectangularQuadMesh< PERTURBED_ELEMENT > * mesh_pt ()
 Access function for the specific mesh. More...
 
RectangularQuadMesh< BASE_ELEMENT > * base_state_mesh_pt ()
 Access function for the base state mesh. More...
 
SelfStartingBDF2time_stepper_pt ()
 Access function for the specific timestepper. More...
 
void doc_solution (DocInfo &doc_info, const bool &output_soln=true)
 Doc the solution. More...
 
void create_trace_file (DocInfo &doc_info)
 Create a trace file. More...
 
void initialise_trace_file ()
 Initialise trace file (print column headings) More...
 
void close_trace_file ()
 Clear and close trace file. More...
 
ofstream & trace_file ()
 Access function for trace file. More...
 
 PerturbedStateProblem (const unsigned &n_r, const unsigned &n_z1, const unsigned &n_z2, const double &h1, const double &h2, SpineMesh *external_bulk_mesh_pt, int azimuthal_mode_number)
 
 ~PerturbedStateProblem ()
 Destructor (empty) More...
 
void set_initial_condition ()
 Set initial conditions (velocities given random values in range [0,1]) More...
 
void set_boundary_conditions ()
 Set up the (homogeneous) boundary conditions. More...
 
TwoLayerSpineMesh< BASE_ELEMENT > * base_state_bulk_mesh_pt ()
 Access function for the base state mesh. More...
 
TIMESTEPPER * time_stepper_pt ()
 Access function for the specific timestepper. More...
 
void doc_solution (DocInfo *&doc_info_pt, const bool &output_soln=true)
 Doc the solution. More...
 
void create_trace_file (DocInfo *&doc_info_pt)
 Create and initialise a trace file. More...
 
void close_trace_file ()
 Clear and close trace file. More...
 
ofstream & trace_file ()
 Access function for trace file. More...
 
void create_interface_elements ()
 Create interface elements at boundary between upper and lower layers. More...
 
TwoLayerPerturbedSpineMesh< PERTURBED_ELEMENT > * bulk_mesh_pt ()
 Access function for bulk mesh. More...
 
Meshsurface_mesh_pt ()
 Access function for surface mesh. 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
 
virtual void actions_before_adapt ()
 
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 fix_pressure (const unsigned &e, const unsigned &pdof, const double &pvalue)
 Fix pressure in element e at pressure dof pdof and set to pvalue. More...
 
void fix_pressure (const unsigned &e, const unsigned &pdof, const double &pvalue)
 Fix pressure in element e at pressure dof pdof and set to pvalue. More...
 
void fix_pressure (const unsigned &e, const unsigned &pdof, const double &pvalue)
 Fix pressure in element e at pressure dof pdof and set to pvalue. More...
 
void fix_pressure (const unsigned &e, const unsigned &pdof, const double &pvalue)
 Fix pressure in element e at pressure dof pdof and set to pvalue. More...
 
void fix_pressure (const unsigned &e, const unsigned &pdof, const double &pvalue)
 Fix pressure in element e at pressure dof pdof and set to pvalue. More...
 
void actions_before_newton_convergence_check ()
 
void actions_before_newton_solve ()
 Update before solve (empty) More...
 
void actions_after_newton_solve ()
 Update after solve (empty) More...
 
void actions_before_implicit_timestep ()
 Actions before timestep (empty) More...
 
void actions_after_implicit_timestep ()
 Update the problem specs after solve (empty) More...
 
void fix_pressure (const unsigned &e, const unsigned &pdof, const double &pvalue)
 Fix pressure in element e at pressure dof pdof and set to pvalue. More...
 

Private Attributes

MeshBase_state_mesh_pt
 Pointer to the base state mesh. More...
 
double Domain_height
 Height of domain. More...
 
ofstream Trace_file
 Trace file. More...
 
double Inner_cylinder_radius
 Inner and outer cylinder radii. More...
 
double Outer_cylinder_radius
 
SpineMeshBase_state_bulk_mesh_pt
 Pointer to the base state mesh. More...
 
TwoLayerPerturbedSpineMesh< PERTURBED_ELEMENT > * Bulk_mesh_pt
 Pointer to the (specific) "bulk" mesh. More...
 
MeshSurface_mesh_pt
 Pointer to the "surface" mesh. More...
 
int Azimuthal_mode_number
 Azimuthal mode number. More...
 
Vector< unsignedU_nodal_index
 Index at which the i-th velocity component is stored. More...
 
Vector< unsignedXhat_nodal_index
 

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_before_newton_step ()
 
virtual void actions_after_newton_step ()
 
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 BASE_ELEMENT, class PERTURBED_ELEMENT>
class PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >

////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// Perturbed state problem class for Tuckerman counter-rotating lids problem

////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// Perturbed state problem class for the time-periodic Taylor–Couette problem

Constructor & Destructor Documentation

◆ PerturbedStateProblem() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem ( const unsigned n_r,
const unsigned n_z,
const double domain_height,
Mesh external_mesh_pt 
)

Constructor.

Constructor for perturbed state Tuckerman counter-rotating lids problem

452  : Base_state_mesh_pt(external_mesh_pt),
453  Domain_height(domain_height)
454 {
455  // Be less verbose during newton solve
457 
458  // Be less verbose about linear solve timings
460 
461  // Tell problem that it is linear (avoid doing unnecessary checks)
462  Problem::Problem_is_nonlinear = false;
463 
464  // Allocate the timestepper (this constructs the time object as well)
466 
467  // Build and assign mesh
468  Problem::mesh_pt() =
469  new RectangularQuadMesh<PERTURBED_ELEMENT>(n_r,n_z,0.0,1.0,0.0,domain_height,
470  time_stepper_pt());
471 
472  // --------------------------------------------
473  // Set the boundary conditions for this problem
474  // --------------------------------------------
475 
476  // All nodes are free by default -- just pin the ones that have
477  // Dirichlet conditions here
478 
479  // Determine number of mesh boundaries
480  const unsigned n_boundary = mesh_pt()->nboundary();
481 
482  // Loop over mesh boundaries
483  for(unsigned b=0;b<n_boundary;b++)
484  {
485  // Determine number of nodes on boundary b
486  const unsigned n_node = mesh_pt()->nboundary_node(b);
487 
488  // Loop over nodes on boundary b
489  for(unsigned n=0;n<n_node;n++)
490  {
491  // Set up pointer to node
492  Node* nod_pt = mesh_pt()->boundary_node_pt(b,n);
493 
494  // On all solid boundaries, pin all velocity components
495  if(b!=3)
496  {
497  nod_pt->pin(0); // Radial (real)
498  nod_pt->pin(1); // Radial (imaginary)
499  nod_pt->pin(2); // Axial (real)
500  nod_pt->pin(3); // Axial (imaginary)
501  nod_pt->pin(4); // Azimuthal (real)
502  nod_pt->pin(5); // Azimuthal (imaginary)
503  }
504  // On symmetry boundary, pin only radial and azimuthal velocity
505  // components, unless we are looking at the k=1 azimuthal mode.
506  // In this case, do not pin any velocity components on this boundary
507  else
508  {
510  {
511  nod_pt->pin(0); // Radial (real)
512  nod_pt->pin(1); // Radial (imaginary)
513  nod_pt->pin(4); // Azimuthal (real)
514  nod_pt->pin(5); // Azimuthal (imaginary)
515  }
516  }
517  } // End of loop over nodes on boundary b
518  } // End of loop over mesh boundaries
519 
520  // ----------------------------------------------------------------
521  // Complete the problem setup to make the elements fully functional
522  // ----------------------------------------------------------------
523 
524  // Determine number of elements in mesh
525  const unsigned n_element = mesh_pt()->nelement();
526 
527  // Loop over the elements
528  for(unsigned e=0;e<n_element;e++)
529  {
530  // Upcast from GeneralisedElement to the present element
531  PERTURBED_ELEMENT* el_pt
532  = dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e));
533 
534  // Set the Reynolds number
535  el_pt->re_pt() = &GlobalPhysicalVariables::Re;
536 
537  // Set the Womersley number
538  el_pt->re_st_pt() = &GlobalPhysicalVariables::ReSt;
539 
540  // The mesh remains fixed
541  el_pt->disable_ALE();
542 
543  // Set the azimuthal wavenumber
544  el_pt->azimuthal_mode_number_pt() = &GlobalPhysicalVariables::k;
545 
546  } // End of loop over elements
547 
548  // Fix pressure ONLY when looking for axisymmetric modes
549  if(GlobalPhysicalVariables::k==0) { fix_pressure(0,0,0.0); }
550 
551  // ------------------------------------------------------------
552  // Set up interaction between base and perturbed state problems
553  // ------------------------------------------------------------
554 
555  // First interaction (base state velocities)
556  Multi_domain_functions::
557  setup_multi_domain_interaction<BASE_ELEMENT>
558  (this,mesh_pt(),Base_state_mesh_pt,0);
559 
560  // Second interaction (base state velocity derivatives w.r.t. space)
561  Multi_domain_functions::
562  setup_multi_domain_interaction<BASE_ELEMENT>
563  (this,mesh_pt(),Base_state_mesh_pt,1);
564 
565  // Set up equation numbering scheme
566  std::cout << "Number of equations: " << assign_eqn_numbers() << std::endl;
567 
568 } // End of perturbed state constructor
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Scalar * b
Definition: benchVecAdd.cpp:17
RectangularQuadMesh< PERTURBED_ELEMENT > * mesh_pt()
Access function for the specific mesh.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:405
SelfStartingBDF2 * time_stepper_pt()
Access function for the specific timestepper.
Definition: linearised_axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:512
void fix_pressure(const unsigned &e, const unsigned &pdof, const double &pvalue)
Fix pressure in element e at pressure dof pdof and set to pvalue.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:427
Mesh * Base_state_mesh_pt
Pointer to the base state mesh.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:424
double Domain_height
Height of domain.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:435
Definition: timesteppers.h:1165
void pin(const unsigned &i)
Pin the i-th stored variable.
Definition: nodes.h:385
void disable_doc_time()
Disable documentation of solve times.
Definition: linear_solver.h:116
Definition: nodes.h:906
void add_time_stepper_pt(TimeStepper *const &time_stepper_pt)
Definition: problem.cc:1545
LinearSolver *& linear_solver_pt()
Return a pointer to the linear solver object.
Definition: problem.h:1466
unsigned long assign_eqn_numbers(const bool &assign_local_eqn_numbers=true)
Definition: problem.cc:1989
void disable_info_in_newton_solve()
Disable the output of information when in the newton solver.
Definition: problem.h:2941
Definition: rectangular_quadmesh.template.h:59
double Re
Reynolds number.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:61
int k
Azimuthal mode number k in e^ik(theta) decomposition.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:73
double ReSt
Product of Reynolds and Strouhal numbers.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:64

References oomph::Problem::add_time_stepper_pt(), oomph::Problem::assign_eqn_numbers(), b, PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Base_state_mesh_pt, oomph::LinearSolver::disable_doc_time(), oomph::Problem::disable_info_in_newton_solve(), e(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure(), GlobalPhysicalVariables::k, oomph::Problem::linear_solver_pt(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt(), n, oomph::Data::pin(), GlobalPhysicalVariables::Re, GlobalPhysicalVariables::ReSt, and PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::time_stepper_pt().

◆ ~PerturbedStateProblem() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::~PerturbedStateProblem ( )
inline

Destructor (empty)

383 {}

◆ PerturbedStateProblem() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem ( const unsigned n_r,
const unsigned n_z,
const double domain_height,
Mesh external_mesh_pt 
)

Constructor.

◆ ~PerturbedStateProblem() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::~PerturbedStateProblem ( )
inline

Destructor (empty)

410 {}

◆ PerturbedStateProblem() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem ( const unsigned n_r,
const unsigned n_z,
const double domain_height,
Mesh external_mesh_pt 
)

Constructor.

◆ ~PerturbedStateProblem() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::~PerturbedStateProblem ( )
inline

Destructor (empty)

477 {}

◆ PerturbedStateProblem() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem ( const unsigned n_r,
const unsigned n_z,
const double domain_height,
Mesh external_mesh_pt 
)

Constructor.

◆ ~PerturbedStateProblem() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::~PerturbedStateProblem ( )
inline

Destructor (empty)

502 {}

◆ PerturbedStateProblem() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem ( const unsigned n_r,
const unsigned n_z,
const double radius_inner_cylinder,
const double radius_outer_cylinder,
const double l_z,
Mesh external_mesh_pt 
)

Constructor.

Constructor for perturbed state time-periodic Taylor–Couette problem.

616  : Base_state_mesh_pt(external_mesh_pt),
617  Inner_cylinder_radius(radius_inner_cylinder),
618  Outer_cylinder_radius(radius_outer_cylinder),
619  Domain_height(l_z)
620 {
621  // Be less verbose during newton solve
622  Problem::disable_info_in_newton_solve();
623 
624  // Be less verbose about linear solve timings
626 
627  // Allocate the timestepper (this constructs the time object as well)
629 
630  // Build and assign mesh
631  Problem::mesh_pt() =
632  new RectangularQuadMesh<PERTURBED_ELEMENT>(n_r,n_z,radius_inner_cylinder,
633  radius_outer_cylinder,0.0,l_z,
634  time_stepper_pt());
635 
636  // --------------------------------------------
637  // Set the boundary conditions for this problem
638  // --------------------------------------------
639 
640  // All nodes are free by default -- just pin the ones that have
641  // Dirichlet conditions here
642 
643  // Determine number of mesh boundaries
644  const unsigned n_boundary = mesh_pt()->nboundary();
645 
646  // Loop over mesh boundaries
647  for(unsigned b=0;b<n_boundary;b++)
648  {
649  // Determine number of nodes on boundary b
650  const unsigned n_node = mesh_pt()->nboundary_node(b);
651 
652  // Loop over nodes on boundary b
653  for(unsigned n=0;n<n_node;n++)
654  {
655  // Pin values for axial velocity components on all boundaries
656  mesh_pt()->boundary_node_pt(b,n)->pin(2); // Axial (real)
657  mesh_pt()->boundary_node_pt(b,n)->pin(3); // Axial (imaginary)
658 
659  // Pin values for radial and azimuthal velocity components on
660  // all solid boundaries
661  if(b==1 || b==3)
662  {
663  mesh_pt()->boundary_node_pt(b,n)->pin(0); // Radial (real)
664  mesh_pt()->boundary_node_pt(b,n)->pin(1); // Radial (imaginary)
665  mesh_pt()->boundary_node_pt(b,n)->pin(4); // Azimuthal (real)
666  mesh_pt()->boundary_node_pt(b,n)->pin(5); // Azimuthal (imaginary)
667  }
668  } // End of loop over nodes on boundary b
669  } // End of loop over mesh boundaries
670 
671  // ----------------------------------------------------------------
672  // Complete the problem setup to make the elements fully functional
673  // ----------------------------------------------------------------
674 
675  // Determine number of elements in mesh
676  const unsigned n_element = mesh_pt()->nelement();
677 
678  // Loop over the elements
679  for(unsigned e=0;e<n_element;e++)
680  {
681  // Upcast from GeneralisedElement to the present element
682  PERTURBED_ELEMENT* el_pt
683  = dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e));
684 
685  // Set the Reynolds number
686  el_pt->re_pt() = &GlobalPhysicalVariables::Re;
687 
688  // Set the Womersley number
689  el_pt->re_st_pt() = &GlobalPhysicalVariables::ReSt;
690 
691  // The mesh remains fixed
692  el_pt->disable_ALE();
693 
694  // Set the azimuthal wavenumber
695  el_pt->azimuthal_mode_number_pt() = &GlobalPhysicalVariables::k;
696 
697  } // End of loop over elements
698 
699  // Set the pressure in first element at 'node' 0 to 0.0
700  fix_pressure(0,0,0.0);
701 
702  // ------------------------------------------------------------
703  // Set up interaction between base and perturbed state problems
704  // ------------------------------------------------------------
705 
706  // First interaction (base state velocities)
707  Multi_domain_functions::
708  setup_multi_domain_interaction<BASE_ELEMENT>
709  (this,mesh_pt(),Base_state_mesh_pt,0);
710 
711  // Second interaction (base state velocity derivatives w.r.t. space)
712  Multi_domain_functions::
713  setup_multi_domain_interaction<BASE_ELEMENT>
714  (this,mesh_pt(),Base_state_mesh_pt,1);
715 
716  // Set up equation numbering scheme
717  std::cout << "Number of equations: " << assign_eqn_numbers() << std::endl;
718 
719 } // End of perturbed state constructor
double Outer_cylinder_radius
Definition: linearised_axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:582
double Inner_cylinder_radius
Inner and outer cylinder radii.
Definition: linearised_axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:581
Self-starting BDF2 timestepper class.
Definition: self_starting_BDF2_timestepper.h:37

References oomph::Problem::add_time_stepper_pt(), oomph::Problem::assign_eqn_numbers(), b, PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Base_state_mesh_pt, oomph::LinearSolver::disable_doc_time(), e(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure(), GlobalPhysicalVariables::k, oomph::Problem::linear_solver_pt(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt(), n, GlobalPhysicalVariables::Re, GlobalPhysicalVariables::ReSt, and PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::time_stepper_pt().

◆ ~PerturbedStateProblem() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::~PerturbedStateProblem ( )
inline

Destructor (empty)

507 {}

◆ PerturbedStateProblem() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT , class TIMESTEPPER >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT, TIMESTEPPER >::PerturbedStateProblem ( const unsigned n_r,
const unsigned n_z1,
const unsigned n_z2,
const double h1,
const double h2,
SpineMesh external_bulk_mesh_pt,
int  azimuthal_mode_number 
)

Constructor: Pass the width of the domain in the r direction, and the heights of both bottom (fluid 1) and top (fluid 2) layers. Also pass the number of elements in both horizontal regions in the r direction and the number of elements in all three vertical regions in the z direction, along with the fractions which determine the spacings of those regions. Also pass a pointer to the base state mesh.

Constructor for perturbed state Tuckerman counter-rotating lids problem

673  : Base_state_bulk_mesh_pt(external_bulk_mesh_pt),
674  Azimuthal_mode_number(azimuthal_mode_number)
675 {
676  // Always take one newton step even if the initial residuals are
677  // below the required tolerance
678  Problem::Always_take_one_newton_step = true;
679 
680  // Allocate the timestepper (this constructs the time object as well)
681  add_time_stepper_pt(new TIMESTEPPER);
682 
683  // Build and assign mesh
685  (n_r,n_z1,n_z2,1.0,h1,h2,Base_state_bulk_mesh_pt,time_stepper_pt());
686 
687  // Create "surface mesh" that will contain only the interface elements.
688  // The constructor just creates the mesh without giving it any elements,
689  // nodes, etc.
690  Surface_mesh_pt = new Mesh;
691 
692  // Add the two sub meshes to the problem
695 
696  // Combine all submeshes into a single Mesh
698 
699  // -------------------------------------------------------------------
700  // Get information from elements about the order of nodal data storage
701  // -------------------------------------------------------------------
702 
703  // Get a pointer to the first element in the mesh -- note that we
704  // are assuming that the indices will be the same in each element
705  PERTURBED_ELEMENT* el_pt = dynamic_cast<PERTURBED_ELEMENT*>
706  (Bulk_mesh_pt->element_pt(0));
707 
708  // Determine indices at which the perturbations to the nodal positions
709  // are stored
710  this->Xhat_nodal_index.resize(4);
711  for(unsigned i=0;i<4;i++)
712  {
713  Xhat_nodal_index[i] = el_pt->xhat_index_lin_axi_nst(i);
714  }
715 
716  // Determine indices at which velocities are stored
717  this->U_nodal_index.resize(6);
718  for(unsigned i=0;i<6;i++)
719  {
720  U_nodal_index[i] = el_pt->u_index_lin_axi_nst(i);
721  }
722 
723  // Pass nodal indices of cosine (i=2) and sine (i=3) components of the
724  // perturbation to the nodal z-position to the bulk mesh. This
725  // information is used in the node_update function
728 
729  // --------------------------------------------
730  // Set the boundary conditions for this problem
731  // --------------------------------------------
732 
733  // All nodes are free by default -- just pin the ones that have
734  // Dirichlet conditions here
735 
736  // Determine number of mesh boundaries
737  const unsigned n_boundary = mesh_pt()->nboundary();
738 
739  // Loop over mesh boundaries
740  for(unsigned b=0;b<n_boundary;b++)
741  {
742  // Determine number of nodes on boundary b
743  const unsigned n_node = mesh_pt()->nboundary_node(b);
744 
745  // Loop over nodes on boundary b
746  for(unsigned n=0;n<n_node;n++)
747  {
748  // On top and bottom solid boundaries, pin all velocity components
749  if(b==0 || b==2)
750  {
751  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[0]);
752  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[1]);
753  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[2]);
754  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[3]);
755  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[4]);
756  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[5]);
757  }
758  // On outer wall, pin only radial and azimuthal velocities
759  // (slippery outer wall)
760  else if(b==1)
761  {
762  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[0]);
763  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[1]);
764  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[4]);
765  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[5]);
766  }
767  // On symmetry boundary, boundary conditions differ depending on
768  // the azimuthal mode number
769  else if(b==3)
770  {
771  // If k=0, pin only radial and azimuthal velocity components
772  if(Azimuthal_mode_number==0)
773  {
774  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[0]);
775  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[1]);
776  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[4]);
777  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[5]);
778  }
779  // If k is ODD, pin axial velocity only
780  else if(Azimuthal_mode_number%2)
781  {
782  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[2]);
783  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[3]);
784  }
785  // If k is EVEN (and non-zero), pin all velocity components
786  else
787  {
788  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[0]);
789  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[1]);
790  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[2]);
791  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[3]);
792  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[4]);
793  mesh_pt()->boundary_node_pt(b,n)->pin(U_nodal_index[5]);
794  }
795  }
796  } // End of loop over nodes on boundary b
797  } // End of loop over mesh boundaries
798 
799  // Pin all perturbations to the nodal positions (since these are
800  // dependent variables and therefore not dofs)
801  const unsigned n_node = Bulk_mesh_pt->nnode();
802  for(unsigned n=0;n<n_node;n++)
803  {
804  for(unsigned i=0;i<4;i++)
805  {
807  }
808  }
809 
810  // ---------------------------------------------------
811  // If k==0, pin all dofs corresponding to "sine parts"
812  // ---------------------------------------------------
813  if(Azimuthal_mode_number==0)
814  {
815  // Pin all the sine components of the velocity values
816  for(unsigned n=0;n<n_node;n++)
817  {
821  }
822 
823  // Pin all the sine components of the pressure dofs
824  const unsigned n_element = Bulk_mesh_pt->nelement();
825  for(unsigned e=0;e<n_element;e++)
826  {
827  // Loop over the three pressure dofs (sine parts)
828  for(unsigned i=0;i<3;i++)
829  {
830  // Pin the values and set them equal to zero
831  dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e))->
832  fix_sine_component_of_pressure(i,0.0);
833  }
834  }
835 
836  // Pin all the sine components of the perturbed spine heights and set
837  // them to zero
838  const unsigned n_perturbed_spine = Bulk_mesh_pt->nspine();
839  for(unsigned i=0;i<n_perturbed_spine;i++)
840  {
843  }
844  } // End of if k==0
845 
846  // -------------------------------------------------------------------
847  // If k>0, pin interface height on the symmetry axis (both components)
848  // -------------------------------------------------------------------
850  {
853  Bulk_mesh_pt->perturbed_spine_pt(0)->height(0) = 0.0;
854  Bulk_mesh_pt->perturbed_spine_pt(0)->height(1) = 0.0;
855  }
856 
857  // ----------------------------------------------------------------
858  // Complete the problem setup to make the elements fully functional
859  // ----------------------------------------------------------------
860 
861  // Determine number of bulk elements in lower and upper fluid
862  const unsigned n_lower = Bulk_mesh_pt->nlower();
863  const unsigned n_upper = Bulk_mesh_pt->nupper();
864 
865  // Loop over bulk elements in lower fluid
866  for(unsigned e=0;e<n_lower;e++)
867  {
868  // Upcast from GeneralisedElement to the present element
869  PERTURBED_ELEMENT* el_pt = dynamic_cast<PERTURBED_ELEMENT*>
871 
872  // Set the Reynolds number
873  el_pt->re_pt() = &GlobalPhysicalVariables::Re;
874 
875  // Set the Womersley number
876  el_pt->re_st_pt() = &GlobalPhysicalVariables::ReSt;
877 
878  // Set the product of the Reynolds number and inverse Froude number
879  el_pt->re_invfr_pt() = &GlobalPhysicalVariables::ReInvFr;
880 
881  // Set the direction of gravity
882  el_pt->g_pt() = &GlobalPhysicalVariables::G;
883 
884  // Set the azimuthal mode number
885  el_pt->azimuthal_mode_number_pt() = &Azimuthal_mode_number;
886 
887  // These terms in the Jacobian matrix are provided analytically, so
888  // by filling them in from geometric data we would be "double counting"
889  el_pt->enable_bypass_fill_in_jacobian_from_geometric_data();
890 
891  } // End of loop over bulk elements in lower fluid
892 
893  // Loop over bulk elements in upper fluid
894  for(unsigned e=0;e<n_upper;e++)
895  {
896  // Upcast from GeneralisedElement to the present element
897  PERTURBED_ELEMENT* el_pt = dynamic_cast<PERTURBED_ELEMENT*>
899 
900  // Set the Reynolds number
901  el_pt->re_pt() = &GlobalPhysicalVariables::Re;
902 
903  // Set the Womersley number
904  el_pt->re_st_pt() = &GlobalPhysicalVariables::ReSt;
905 
906  // Set the product of the Reynolds number and inverse Froude number
907  el_pt->re_invfr_pt() = &GlobalPhysicalVariables::ReInvFr;
908 
909  // Set the direction of gravity
910  el_pt->g_pt() = &GlobalPhysicalVariables::G;
911 
912  // Set the viscosity ratio
913  el_pt->viscosity_ratio_pt() = &GlobalPhysicalVariables::Viscosity_Ratio;
914 
915  // Set the density ratio
916  el_pt->density_ratio_pt() = &GlobalPhysicalVariables::Density_Ratio;
917 
918  // Set the azimuthal mode number
919  el_pt->azimuthal_mode_number_pt() = &Azimuthal_mode_number;
920 
921  // These terms in the Jacobian matrix are provided analytically, so
922  // by filling them in from geometric data we would be "double counting"
923  el_pt->enable_bypass_fill_in_jacobian_from_geometric_data();
924 
925  } // End of loop over bulk elements in upper fluid
926 
927  // Fix pressure ONLY when looking for axisymmetric modes
928  if(Azimuthal_mode_number==0) { fix_pressure(0,0,0.0); }
929 
930  // ------------------------------------------------------------
931  // Set up interaction between base and perturbed state problems
932  // ------------------------------------------------------------
933 
934  // First interaction (base state velocities)
935  Multi_domain_functions::setup_multi_domain_interaction<BASE_ELEMENT>
936  (this,mesh_pt(),external_bulk_mesh_pt,0);
937 
938  // Second interaction (base state velocity derivatives w.r.t.
939  // global spatial coordinates)
940  Multi_domain_functions::setup_multi_domain_interaction<BASE_ELEMENT>
941  (this,mesh_pt(),external_bulk_mesh_pt,1);
942 
943  // Third interaction (base state pressure)
944  Multi_domain_functions::setup_multi_domain_interaction<BASE_ELEMENT>
945  (this,mesh_pt(),external_bulk_mesh_pt,2);
946 
947  // Fourth interaction (base state velocity derivatives w.r.t. time)
948  Multi_domain_functions::setup_multi_domain_interaction<BASE_ELEMENT>
949  (this,mesh_pt(),external_bulk_mesh_pt,3);
950 
951  // Fourth interaction (base state velocity derivatives w.r.t. time)
952  Multi_domain_functions::setup_multi_domain_interaction<BASE_ELEMENT>
953  (this,mesh_pt(),external_bulk_mesh_pt,3);
954 
955  // Fifth interaction (base state velocity derivatives w.r.t.
956  // local spatial coordinates)
957  Multi_domain_functions::setup_multi_domain_interaction<BASE_ELEMENT>
958  (this,mesh_pt(),external_bulk_mesh_pt,4);
959 
960  // Set up equation numbering scheme
961  std::cout << "Number of equations: " << assign_eqn_numbers() << std::endl;
962 
963 } // End of perturbed state constructor
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Mesh * Surface_mesh_pt
Pointer to the "surface" mesh.
Definition: two_layer_interface_nonaxisym_perturbations.cc:643
int Azimuthal_mode_number
Azimuthal mode number.
Definition: two_layer_interface_nonaxisym_perturbations.cc:649
TwoLayerPerturbedSpineMesh< PERTURBED_ELEMENT > * Bulk_mesh_pt
Pointer to the (specific) "bulk" mesh.
Definition: two_layer_interface_nonaxisym_perturbations.cc:640
Vector< unsigned > Xhat_nodal_index
Definition: two_layer_interface_nonaxisym_perturbations.cc:656
SpineMesh * Base_state_bulk_mesh_pt
Pointer to the base state mesh.
Definition: two_layer_interface_nonaxisym_perturbations.cc:637
Vector< unsigned > U_nodal_index
Index at which the i-th velocity component is stored.
Definition: two_layer_interface_nonaxisym_perturbations.cc:652
Definition: mesh.h:67
GeneralisedElement *& element_pt(const unsigned long &e)
Return pointer to element e.
Definition: mesh.h:448
unsigned long nnode() const
Return number of nodes in the mesh.
Definition: mesh.h:596
unsigned long nelement() const
Return number of elements in the mesh.
Definition: mesh.h:590
unsigned long nspine() const
Return the number of perturbed spines in the mesh.
Definition: perturbed_spines.h:581
PerturbedSpineNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global PerturbedSpineNode.
Definition: perturbed_spines.h:590
PerturbedSpine *const & perturbed_spine_pt(const unsigned long &i) const
Return the i-th perturbed spine in the mesh.
Definition: perturbed_spines.h:575
Data *& height_pt()
Access function to Data object that stores the spine "heights".
Definition: perturbed_spines.h:114
double & height(const unsigned &i)
Access function to i-th component of spine "height".
Definition: perturbed_spines.h:101
unsigned add_sub_mesh(Mesh *const &mesh_pt)
Definition: problem.h:1330
void build_global_mesh()
Definition: problem.cc:1493
unsigned long nlower() const
Number of elements in top layer.
Definition: two_layer_perturbed_spine_mesh.template.h:134
const void set_perturbation_to_nodal_positions_indices(const unsigned &cosine_index, const unsigned &sine_index)
Definition: two_layer_perturbed_spine_mesh.template.h:176
FiniteElement *& upper_layer_element_pt(const unsigned long &i)
Access functions for pointers to elements in upper layer.
Definition: two_layer_perturbed_spine_mesh.template.h:123
FiniteElement *& lower_layer_element_pt(const unsigned long &i)
Access functions for pointers to elements in lower layer.
Definition: two_layer_perturbed_spine_mesh.template.h:127
unsigned long nupper() const
Number of elements in upper layer.
Definition: two_layer_perturbed_spine_mesh.template.h:131
double ReInvFr
Product of Rynolds number and inverse of Froude number.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:67
double Viscosity_Ratio
Definition: two_layer_interface_nonaxisym_perturbations.cc:85
Vector< double > G(3)
Direction of gravity.
double Density_Ratio
Definition: two_layer_interface_nonaxisym_perturbations.cc:89

References oomph::Problem::add_sub_mesh(), oomph::Problem::add_time_stepper_pt(), oomph::Problem::assign_eqn_numbers(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Azimuthal_mode_number, b, PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Base_state_bulk_mesh_pt, oomph::Problem::build_global_mesh(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Bulk_mesh_pt, GlobalPhysicalVariables::Density_Ratio, e(), oomph::Mesh::element_pt(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure(), GlobalPhysicalVariables::G, oomph::PerturbedSpine::height(), oomph::PerturbedSpine::height_pt(), i, oomph::TwoLayerPerturbedSpineMesh< ELEMENT >::lower_layer_element_pt(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt(), n, oomph::Mesh::nelement(), oomph::TwoLayerPerturbedSpineMesh< ELEMENT >::nlower(), oomph::Mesh::nnode(), oomph::PerturbedSpineMesh::node_pt(), oomph::PerturbedSpineMesh::nspine(), oomph::TwoLayerPerturbedSpineMesh< ELEMENT >::nupper(), oomph::PerturbedSpineMesh::perturbed_spine_pt(), oomph::Data::pin(), GlobalPhysicalVariables::Re, GlobalPhysicalVariables::ReInvFr, GlobalPhysicalVariables::ReSt, oomph::TwoLayerPerturbedSpineMesh< ELEMENT >::set_perturbation_to_nodal_positions_indices(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Surface_mesh_pt, PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::time_stepper_pt(), PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::U_nodal_index, oomph::TwoLayerPerturbedSpineMesh< ELEMENT >::upper_layer_element_pt(), GlobalPhysicalVariables::Viscosity_Ratio, and PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Xhat_nodal_index.

◆ ~PerturbedStateProblem() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::~PerturbedStateProblem ( )
inline

Destructor (empty)

536 {}

Member Function Documentation

◆ actions_after_adapt() [1/2]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_adapt ( )
inlinevirtual

After adaptation: Pin pressure again (the previously pinned value might have disappeared) and pin redudant pressure dofs

Reimplemented from oomph::Problem.

427  {
428  // Unpin all pressure dofs
429  RefineableLinearisedAxisymmetricNavierStokesEquations::
430  unpin_all_pressure_dofs(mesh_pt()->element_pt());
431 
432  // Pin redudant pressure dofs
433  RefineableLinearisedAxisymmetricNavierStokesEquations::
434  pin_redundant_nodal_pressures(mesh_pt()->element_pt());
435 
436  // Fix pressure ONLY when looking for axisymmetric modes
437  if(GlobalPhysicalVariables::k==0) { fix_pressure(0,0,0.0); }
438 
439  // Set external elements for the multi-domain solution
440 
441  // First interaction (base state velocities)
442  Multi_domain_functions::
443  setup_multi_domain_interaction<BASE_ELEMENT>
444  (this,mesh_pt(),Base_state_mesh_pt,0);
445 
446  // Second interaction (base state velocity derivatives w.r.t. space)
447  Multi_domain_functions::
448  setup_multi_domain_interaction<BASE_ELEMENT>
449  (this,mesh_pt(),Base_state_mesh_pt,1);
450 
451  } // End of actions_after_adapt

References GlobalPhysicalVariables::k.

◆ actions_after_adapt() [2/2]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_adapt ( )
inlinevirtual

After adaptation: Pin pressure again (the previously pinned value might have disappeared) and pin redudant pressure dofs

Reimplemented from oomph::Problem.

519  {
520  // Unpin all pressure dofs
521  RefineableLinearisedAxisymmetricNavierStokesEquations::
522  unpin_all_pressure_dofs(mesh_pt()->element_pt());
523 
524  // Pin redudant pressure dofs
525  RefineableLinearisedAxisymmetricNavierStokesEquations::
526  pin_redundant_nodal_pressures(mesh_pt()->element_pt());
527 
528  // Fix pressure ONLY when looking for axisymmetric modes
529  if(GlobalPhysicalVariables::k==0) { fix_pressure(0,0,0.0); }
530 
531  // Set external elements for the multi-domain solution
532 
533  // First interaction (base state velocities)
534  Multi_domain_functions::
535  setup_multi_domain_interaction<BASE_ELEMENT>
536  (this,mesh_pt(),Base_state_mesh_pt,0);
537 
538  // Second interaction (base state velocity derivatives w.r.t. space)
539  Multi_domain_functions::
540  setup_multi_domain_interaction<BASE_ELEMENT>
541  (this,mesh_pt(),Base_state_mesh_pt,1);
542 
543  } // End of actions_after_adapt

References GlobalPhysicalVariables::k.

◆ actions_after_implicit_timestep() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_implicit_timestep ( )
inlinevirtual

Update the problem specs after solve (empty)

Reimplemented from oomph::Problem.

395 {}

◆ actions_after_implicit_timestep() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_implicit_timestep ( )
inlinevirtual

Update the problem specs after solve (empty)

Reimplemented from oomph::Problem.

422 {}

◆ actions_after_implicit_timestep() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_implicit_timestep ( )
inlinevirtual

Update the problem specs after solve (empty)

Reimplemented from oomph::Problem.

489 {}

◆ actions_after_implicit_timestep() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_implicit_timestep ( )
inlinevirtual

Update the problem specs after solve (empty)

Reimplemented from oomph::Problem.

514 {}

◆ actions_after_implicit_timestep() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_implicit_timestep ( )
inlinevirtual

Update the problem specs after solve (empty)

Reimplemented from oomph::Problem.

519 {}

◆ actions_after_implicit_timestep() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_implicit_timestep ( )
inlineprivatevirtual

Update the problem specs after solve (empty)

Reimplemented from oomph::Problem.

626 {}

◆ actions_after_newton_solve() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_newton_solve ( )
inlinevirtual

Update after solve (empty)

Reimplemented from oomph::Problem.

389 {}

◆ actions_after_newton_solve() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_newton_solve ( )
inlinevirtual

Update after solve (empty)

Reimplemented from oomph::Problem.

416 {}

◆ actions_after_newton_solve() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_newton_solve ( )
inlinevirtual

Update after solve (empty)

Reimplemented from oomph::Problem.

483 {}

◆ actions_after_newton_solve() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_newton_solve ( )
inlinevirtual

Update after solve (empty)

Reimplemented from oomph::Problem.

508 {}

◆ actions_after_newton_solve() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_newton_solve ( )
inlinevirtual

Update after solve (empty)

Reimplemented from oomph::Problem.

513 {}

◆ actions_after_newton_solve() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_after_newton_solve ( )
inlineprivatevirtual

Update after solve (empty)

Reimplemented from oomph::Problem.

609 {}

◆ actions_before_implicit_timestep() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_implicit_timestep ( )
inlinevirtual

Actions before timestep (empty)

Reimplemented from oomph::Problem.

392 {}

◆ actions_before_implicit_timestep() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_implicit_timestep ( )
inlinevirtual

Actions before timestep (empty)

Reimplemented from oomph::Problem.

419 {}

◆ actions_before_implicit_timestep() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_implicit_timestep ( )
inlinevirtual

Actions before timestep (empty)

Reimplemented from oomph::Problem.

486 {}

◆ actions_before_implicit_timestep() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_implicit_timestep ( )
inlinevirtual

Actions before timestep (empty)

Reimplemented from oomph::Problem.

511 {}

◆ actions_before_implicit_timestep() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_implicit_timestep ( )
inlinevirtual

Actions before timestep (empty)

Reimplemented from oomph::Problem.

516 {}

◆ actions_before_implicit_timestep() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_implicit_timestep ( )
inlineprivatevirtual

Actions before timestep (empty)

Reimplemented from oomph::Problem.

613  {
614  // Shift perturbed spine height history values
615  // -------------------------------------------
616 
617  const unsigned n_perturbed_spine = Bulk_mesh_pt->nspine();
618  for(unsigned i=0;i<n_perturbed_spine;i++)
619  {
622  }
623  }
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
virtual void shift_time_values()
Shift all values along to prepare for next timestep.
Definition: problem.cc:11634

References i.

◆ actions_before_newton_convergence_check()

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_newton_convergence_check ( )
inlineprivatevirtual

Update mesh to have nodal positions equal to that of the base state mesh

Reimplemented from oomph::Problem.

601  {
603  }
void node_update(const bool &update_all_solid_nodes=false)
Definition: perturbed_spines.cc:147

◆ actions_before_newton_solve() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Update before solve (empty)

Reimplemented from oomph::Problem.

386 {}

◆ actions_before_newton_solve() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Update before solve (empty)

Reimplemented from oomph::Problem.

413 {}

◆ actions_before_newton_solve() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Update before solve (empty)

Reimplemented from oomph::Problem.

480 {}

◆ actions_before_newton_solve() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Update before solve (empty)

Reimplemented from oomph::Problem.

505 {}

◆ actions_before_newton_solve() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Update before solve (empty)

Reimplemented from oomph::Problem.

510 {}

◆ actions_before_newton_solve() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::actions_before_newton_solve ( )
inlineprivatevirtual

Update before solve (empty)

Reimplemented from oomph::Problem.

606 {}

◆ base_state_bulk_mesh_pt()

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
TwoLayerSpineMesh<BASE_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::base_state_bulk_mesh_pt ( )
inline

Access function for the base state mesh.

◆ base_state_mesh_pt() [1/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RectangularQuadMesh<BASE_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::base_state_mesh_pt ( )
inline

Access function for the base state mesh.

413  {
414  return dynamic_cast<RectangularQuadMesh<BASE_ELEMENT>*>
416  }

◆ base_state_mesh_pt() [2/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RefineableRectangularQuadMesh<BASE_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::base_state_mesh_pt ( )
inline

Access function for the base state mesh.

469  {
470  return dynamic_cast<RefineableRectangularQuadMesh<BASE_ELEMENT>*>
472  }
Definition: rectangular_quadmesh.template.h:326

◆ base_state_mesh_pt() [3/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RectangularQuadMesh<BASE_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::base_state_mesh_pt ( )
inline

Access function for the base state mesh.

506  {
507  return dynamic_cast<RectangularQuadMesh<BASE_ELEMENT>*>
509  }

◆ base_state_mesh_pt() [4/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RefineableRectangularQuadMesh<BASE_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::base_state_mesh_pt ( )
inline

Access function for the base state mesh.

560  {
561  return dynamic_cast<RefineableRectangularQuadMesh<BASE_ELEMENT>*>
563  }

◆ base_state_mesh_pt() [5/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RectangularQuadMesh<BASE_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::base_state_mesh_pt ( )
inline

Access function for the base state mesh.

536  {
537  return dynamic_cast<RectangularQuadMesh<BASE_ELEMENT>*>
539  }

◆ bulk_mesh_pt()

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
TwoLayerPerturbedSpineMesh<PERTURBED_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::bulk_mesh_pt ( )
inline

Access function for bulk mesh.

586  {
587  return Bulk_mesh_pt;
588  }

◆ close_trace_file() [1/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::close_trace_file ( )
inline

Clear and close trace file.

539 { Trace_file.clear(); Trace_file.close(); }
ofstream Trace_file
Trace file.
Definition: linearised_axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:578

References oomph::Problem_Parameter::Trace_file.

◆ close_trace_file() [2/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::close_trace_file ( )
inline

Clear and close trace file.

593 { Trace_file.clear(); Trace_file.close(); }

References oomph::Problem_Parameter::Trace_file.

◆ close_trace_file() [3/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::close_trace_file ( )
inline

Clear and close trace file.

570  {
571  Trace_file.clear();
572  Trace_file.close();
573  }

References oomph::Problem_Parameter::Trace_file.

◆ close_trace_file() [4/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::close_trace_file ( )
inline

Clear and close trace file.

576 { Trace_file.clear(); Trace_file.close(); }

References oomph::Problem_Parameter::Trace_file.

◆ create_interface_elements()

template<class BASE_ELEMENT , class PERTURBED_ELEMENT , class TIMESTEPPER >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT, TIMESTEPPER >::create_interface_elements

Create interface elements at boundary between upper and lower layers.

Create Interface Elements at the free surface between the two fluids in the mesh pointed to by bulk_mesh_pt and add the elements to the Mesh object pointeed to by surface_mesh_pt.

1056 {
1057  // Determine the number of horizontal elements
1058  const unsigned n_r = this->Bulk_mesh_pt->nx();
1059 
1060  // Determine number of bulk elements in the lower layer
1061  const unsigned n_z1 = this->Bulk_mesh_pt->ny1();
1062 
1063  // Loop over the horizontal elements
1064  for(unsigned e=0;e<n_r;e++)
1065  {
1066  // Construct a new 1D line element on the face on which the local
1067  // coordinate 1 is fixed at its max. value (1) -- Face 2
1068  FiniteElement* interface_element_element_pt =
1070  <PERTURBED_ELEMENT>
1071  (this->Bulk_mesh_pt->finite_element_pt(n_r*(n_z1-1)+e),2);
1072 
1073  // Add the interface element to the surface mesh
1074  this->Surface_mesh_pt->add_element_pt(interface_element_element_pt);
1075  }
1076 
1077  // ----------------------------------------------------------------
1078  // Complete the problem setup to make the elements fully functional
1079  // ----------------------------------------------------------------
1080 
1081  // Determine number of 1D interface elements in mesh
1082  const unsigned n_interface_element = this->Surface_mesh_pt->nelement();
1083 
1084  // Loop over interface elements
1085  for(unsigned e=0;e<n_interface_element;e++)
1086  {
1087  // Upcast from GeneralisedElement to the present element
1089  <PERTURBED_ELEMENT>* el_pt =
1091  <PERTURBED_ELEMENT>*>(this->Surface_mesh_pt->element_pt(e));
1092 
1093  // Set the Strouhal number
1094  el_pt->st_pt() = &GlobalPhysicalVariables::St;
1095 
1096  // Set the Capillary number
1097  el_pt->ca_pt() = &GlobalPhysicalVariables::Ca;
1098 
1099  // Set the azimuthal mode number
1100  el_pt->azimuthal_mode_number_pt() = &Azimuthal_mode_number;
1101 
1102  // These terms in the Jacobian matrix are provided analytically, so
1103  // by filling them in from geometric data we would be "double counting"
1104  el_pt->enable_bypass_fill_in_jacobian_from_geometric_data();
1105  }
1106 
1107 } // End of create_interface_elements
Definition: elements.h:1313
double *& st_pt()
Return a pointer to the Strouhal number.
Definition: linearised_axisymmetric_fluid_interface_elements.h:185
FiniteElement * finite_element_pt(const unsigned &e) const
Definition: mesh.h:473
void add_element_pt(GeneralisedElement *const &element_pt)
Add a (pointer to) an element to the mesh.
Definition: mesh.h:617
Definition: linearised_axisymmetric_fluid_interface_elements.h:260
const unsigned & nx() const
Return number of elements in x direction.
Definition: rectangular_quadmesh.template.h:224
const unsigned & ny1() const
Access function for number of elements in lower layer.
Definition: two_layer_perturbed_spine_mesh.template.h:168
double St
Strouhal number.
Definition: linearised_axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:62
double Ca
Capillary number.
Definition: two_layer_interface_nonaxisym_perturbations.cc:92

References GlobalPhysicalVariables::Ca, e(), GlobalPhysicalVariables::St, and oomph::LinearisedAxisymmetricFluidInterfaceElement::st_pt().

◆ create_trace_file() [1/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::create_trace_file ( DocInfo doc_info)
inline

Create a trace file.

522  {
523  // Open trace file
524  char filename[256];
525  sprintf(filename,"%s/perturbed_trace_k%i_Re%4.2f.dat",
526  doc_info.directory().c_str(),
529  Trace_file.open(filename);
530  }
std::string directory() const
Output directory.
Definition: oomph_utilities.h:524
double Re_current
Definition: linearised_axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:70
string filename
Definition: MergeRestartFiles.py:39

References oomph::DocInfo::directory(), MergeRestartFiles::filename, GlobalPhysicalVariables::k, GlobalPhysicalVariables::Re_current, and oomph::Problem_Parameter::Trace_file.

◆ create_trace_file() [2/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::create_trace_file ( DocInfo doc_info)
inline

Create a trace file.

576  {
577  // Open trace file
578  char filename[256];
579  sprintf(filename,"%s/perturbed_trace_k%i_Re%4.2f.dat",
580  doc_info.directory().c_str(),
583  Trace_file.open(filename);
584  }

References oomph::DocInfo::directory(), MergeRestartFiles::filename, GlobalPhysicalVariables::k, GlobalPhysicalVariables::Re_current, and oomph::Problem_Parameter::Trace_file.

◆ create_trace_file() [3/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::create_trace_file ( DocInfo doc_info)
inline

Create a trace file.

552  {
553  // Open trace file
554  char filename[256];
555  sprintf(filename,"%s/perturbed_trace_epsilon%2.1f_Re%4.2f.dat",
556  doc_info.directory().c_str(),
559  Trace_file.open(filename);
560  }
double Epsilon
Dimensionless modulation amplitude (epsilon)
Definition: time_periodic_taylor_couette.cc:84
double MMC_Re_current
Definition: time_periodic_taylor_couette.cc:73

References oomph::DocInfo::directory(), GlobalPhysicalVariables::Epsilon, MergeRestartFiles::filename, GlobalPhysicalVariables::MMC_Re_current, and oomph::Problem_Parameter::Trace_file.

◆ create_trace_file() [4/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::create_trace_file ( DocInfo *&  doc_info_pt)
inline

Create and initialise a trace file.

562  {
563  // Open trace file
564  char filename[256];
565  sprintf(filename,"%s/perturbed_trace_k%i.dat",
566  doc_info_pt->directory().c_str(),
568  Trace_file.open(filename);
569 
570  // Initialise
571  Trace_file << "time, height (cosine), height (sine), growth_rate, d_kinetic_energy_dt, kinetic_energy"
572  << std::endl;
573  }

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

◆ doc_solution() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::doc_solution ( DocInfo doc_info)

Doc the solution.

Document the perturbed state solution.

667 {
668  ofstream some_file;
669  char filename[256];
670 
671  // Set number of plot points (in each coordinate direction)
672  const unsigned npts = 5;
673 
674  // Open solution output file
675  sprintf(filename,"%s/perturbed_soln%i.dat",
676  doc_info.directory().c_str(),
677  doc_info.number());
678  some_file.open(filename);
679 
680  // Output solution to file
681  mesh_pt()->output(some_file,npts);
682 
683  // Close solution output file
684  some_file.close();
685 
686 } // End of doc_solution for perturbed state
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554

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

◆ doc_solution() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::doc_solution ( DocInfo doc_info)

Doc the solution.

◆ doc_solution() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::doc_solution ( DocInfo doc_info,
const bool output_soln = true 
)

Doc the solution.

Document the perturbed state solution.

808 {
809  // Create vector of dofs
810  DoubleVector dofs;
811 
812  // Get dofs
813  this->get_dofs(dofs);
814 
815  // Get L2 norm of dof vector
816  const double dof_norm = dofs.norm();
817 
818  // Document in trace file
819  Trace_file << time_pt()->time() << " " << dof_norm << std::endl;
820 
821  // If desired, output solution to file
822  if(output_soln)
823  {
824  ofstream some_file;
825  char filename[256];
826 
827  // Set number of plot points (in each coordinate direction)
828  const unsigned npts = 5;
829 
830  // Open solution output file
831  sprintf(filename,"%s/perturbed_soln_k%i_Re%4.2f_soln%i.dat",
832  doc_info.directory().c_str(),
835  doc_info.number());
836  some_file.open(filename);
837 
838  // Output solution to file
839  mesh_pt()->output(some_file,npts);
840 
841  // Close solution output file
842  some_file.close();
843  }
844 } // End of doc_solution for perturbed state
Definition: double_vector.h:58
double norm() const
compute the 2 norm of this vector
Definition: double_vector.cc:867
void get_dofs(DoubleVector &dofs) const
Definition: problem.cc:2479
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

References oomph::DocInfo::directory(), MergeRestartFiles::filename, GlobalPhysicalVariables::k, oomph::DoubleVector::norm(), oomph::DocInfo::number(), GlobalPhysicalVariables::Re_current, and oomph::Problem_Parameter::Trace_file.

◆ doc_solution() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::doc_solution ( DocInfo doc_info,
const bool output_soln = true 
)

Doc the solution.

◆ doc_solution() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::doc_solution ( DocInfo doc_info,
const bool output_soln = true 
)

Doc the solution.

◆ doc_solution() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT , class TIMESTEPPER >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT, TIMESTEPPER >::doc_solution ( DocInfo *&  doc_info_pt,
const bool output_soln = true 
)

Doc the solution.

Document the perturbed state solution.

1189 {
1190  // Decide which spine to use for documenting heights in trace file
1191  // ---------------------------------------------------------------
1192 
1193  // Initialise "trace spine"
1194  unsigned trace_spine = 0;
1195 
1196  // Determine the number of spines in the mesh
1197  const unsigned n_spine = Bulk_mesh_pt->nspine();
1198 
1199  // Make decision based on azimuthal mode number
1200  if(Azimuthal_mode_number==0) { trace_spine = 0; }
1201  else { trace_spine = (n_spine-1)/2; }
1202 
1203  // Compute kinetic energy of perturbation
1204  // --------------------------------------
1205 
1206  // Initialise kinetic energy and its derivative w.r.t. time
1207  double kinetic_energy = 0.0;
1208  double d_kinetic_energy_dt = 0.0;
1209 
1210  // Loop over bulk elements in lower layer
1211  const unsigned n_lower = Bulk_mesh_pt->nlower();
1212  for(unsigned e=0;e<n_lower;e++)
1213  {
1214  // Upcast from GeneralisedElement to the present element
1215  PERTURBED_ELEMENT *el_pt = dynamic_cast<PERTURBED_ELEMENT*>
1217 
1218  // Initialise element's contributions to kinetic energy and its deriv
1219  double el_kinetic_energy = 0.0;
1220  double el_d_kinetic_energy_dt = 0.0;
1221 
1222  // Compute element's contributions to kinetic energy and its deriv
1223  el_pt->dkin_energy_dt(d_kinetic_energy_dt,el_kinetic_energy);
1224 
1225  // Add contribution to "global" kinetic energy and its deriv
1226  // (Don't forget to multiply through by the element's density ratio
1227  // in both cases)
1228  kinetic_energy += (el_pt->density_ratio())*el_kinetic_energy;
1229  d_kinetic_energy_dt += (el_pt->density_ratio())*el_d_kinetic_energy_dt;
1230  }
1231 
1232  // Loop over bulk elements in upper layer
1233  const unsigned n_upper = Bulk_mesh_pt->nupper();
1234  for(unsigned e=0;e<n_upper;e++)
1235  {
1236  // Upcast from GeneralisedElement to the present element
1237  PERTURBED_ELEMENT *el_pt = dynamic_cast<PERTURBED_ELEMENT*>
1239 
1240  // Initialise element's contributions to kinetic energy and its deriv
1241  double el_kinetic_energy = 0.0;
1242  double el_d_kinetic_energy_dt = 0.0;
1243 
1244  // Compute element's contributions to kinetic energy and its deriv
1245  el_pt->dkin_energy_dt(d_kinetic_energy_dt,el_kinetic_energy);
1246 
1247  // Add contribution to "global" kinetic energy and its deriv
1248  // (Don't forget to multiply through by the element's density ratio
1249  // in both cases)
1250  kinetic_energy += (el_pt->density_ratio())*el_kinetic_energy;
1251  d_kinetic_energy_dt += (el_pt->density_ratio())*el_d_kinetic_energy_dt;
1252  }
1253 
1254  // Compute growth rate by considering relative growth
1255  // (see A. Hazel and R. Hewitt's torus linear stab paper 2011, page 21)
1256  double growth_rate = 0.0;
1257  if(kinetic_energy!=0.0)
1258  {
1259  growth_rate = (0.5*d_kinetic_energy_dt)/kinetic_energy;
1260  }
1261 
1262  // Document in trace file
1263  Trace_file << time_pt()->time() << " "
1264  << Bulk_mesh_pt->perturbed_spine_pt(trace_spine)->height(0)
1265  << " "
1266  << Bulk_mesh_pt->perturbed_spine_pt(trace_spine)->height(1)
1267  << " "
1268  << growth_rate << " "
1269  << d_kinetic_energy_dt << " "
1270  << kinetic_energy << std::endl;
1271 
1272  // If desired, output solution to file
1273  if(output_soln)
1274  {
1275  ofstream some_file;
1276  char filename[256];
1277 
1278  // Set number of plot points (in each coordinate direction)
1279  const unsigned npts_bulk = 5;
1280  const unsigned npts_surface = 5;
1281 
1282  // Open solution output file
1283  sprintf(filename,"%s/perturbed_k%i_soln%i.dat",
1284  doc_info_pt->directory().c_str(),
1286  doc_info_pt->number());
1287  some_file.open(filename);
1288 
1289  // Output solution to file
1290  Bulk_mesh_pt->output(some_file,npts_bulk);
1291 
1292  // Close solution output file
1293  some_file.close();
1294 
1295  // Open interface solution output file
1296  sprintf(filename,
1297  "%s/perturbation_to_interface_k%i_soln%i.dat",
1298  doc_info_pt->directory().c_str(),
1300  doc_info_pt->number());
1301  some_file.open(filename);
1302 
1303  // Output solution to file
1304  const unsigned n_interface_element = Surface_mesh_pt->nelement();
1305  for(unsigned e=0;e<n_interface_element;e++)
1306  {
1307  // Upcast from GeneralisedElement to the present element
1309  <PERTURBED_ELEMENT>* el_pt =
1311  <PERTURBED_ELEMENT>*>(Surface_mesh_pt->element_pt(e));
1312 
1313  // Output solution to file
1314  el_pt->output_perturbation_to_interface(some_file,npts_surface);
1315  }
1316 
1317  // Close solution output file
1318  some_file.close();
1319 
1320  // Open interface solution output file
1321  sprintf(filename,
1322  "%s/combined_interface_position_k%i_soln%i.dat",
1323  doc_info_pt->directory().c_str(),
1325  doc_info_pt->number());
1326  some_file.open(filename);
1327 
1328  // Output solution to file
1329  for(unsigned e=0;e<n_interface_element;e++)
1330  {
1331  // Upcast from GeneralisedElement to the present element
1333  <PERTURBED_ELEMENT>* el_pt =
1335  <PERTURBED_ELEMENT>*>(Surface_mesh_pt->element_pt(e));
1336 
1337  // Output solution to file
1338  el_pt->output_interface_position(some_file,npts_surface);
1339  }
1340 
1341  // Close solution output file
1342  some_file.close();
1343 
1344  }
1345 
1346 } // End of doc_solution for perturbed state
void output(std::ostream &outfile)
Output for all elements.
Definition: mesh.cc:2027
void output_perturbation_to_interface(std::ostream &outfile, const unsigned &nplot)
Output the perturbation to the interface position.
Definition: linearised_axisymmetric_fluid_interface_elements.cc:129
void output_interface_position(std::ostream &outfile, const unsigned &nplot)
Output just the interface position (base + perturbation)
Definition: linearised_axisymmetric_fluid_interface_elements.cc:171

References oomph::DocInfo::directory(), e(), MergeRestartFiles::filename, oomph::DocInfo::number(), oomph::PerturbedSpineLinearisedAxisymmetricFluidInterfaceElement< ELEMENT >::output_interface_position(), oomph::PerturbedSpineLinearisedAxisymmetricFluidInterfaceElement< ELEMENT >::output_perturbation_to_interface(), and oomph::Problem_Parameter::Trace_file.

◆ fix_pressure() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure ( const unsigned e,
const unsigned pdof,
const double pvalue 
)
inlineprivate

Fix pressure in element e at pressure dof pdof and set to pvalue.

429  {
430  dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e))
431  ->fix_pressure(pdof,pvalue);
432  }

References e().

Referenced by PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem().

◆ fix_pressure() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure ( const unsigned e,
const unsigned pdof,
const double pvalue 
)
inlineprivate

Fix pressure in element e at pressure dof pdof and set to pvalue.

485  {
486  dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e))
487  ->fix_pressure(pdof,pvalue);
488  }

References e().

◆ fix_pressure() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure ( const unsigned e,
const unsigned pdof,
const double pvalue 
)
inlineprivate

Fix pressure in element e at pressure dof pdof and set to pvalue.

572  {
573  dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e))
574  ->fix_pressure(pdof,pvalue);
575  }

References e().

◆ fix_pressure() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure ( const unsigned e,
const unsigned pdof,
const double pvalue 
)
inlineprivate

Fix pressure in element e at pressure dof pdof and set to pvalue.

626  {
627  dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e))
628  ->fix_pressure(pdof,pvalue);
629  }

References e().

◆ fix_pressure() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure ( const unsigned e,
const unsigned pdof,
const double pvalue 
)
inlineprivate

Fix pressure in element e at pressure dof pdof and set to pvalue.

586  {
587  dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e))
588  ->fix_pressure(pdof,pvalue);
589  }

References e().

◆ fix_pressure() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::fix_pressure ( const unsigned e,
const unsigned pdof,
const double pvalue 
)
inlineprivate

Fix pressure in element e at pressure dof pdof and set to pvalue.

631  {
632  dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e))
633  ->fix_pressure(pdof,pvalue);
634  }

References e().

◆ initialise_trace_file() [1/3]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::initialise_trace_file ( )
inline

Initialise trace file (print column headings)

534  {
535  Trace_file << "time, norm_of_dof_vector" << std::endl;
536  }

References oomph::Problem_Parameter::Trace_file.

◆ initialise_trace_file() [2/3]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::initialise_trace_file ( )
inline

Initialise trace file (print column headings)

588  {
589  Trace_file << "time, norm_of_dof_vector" << std::endl;
590  }

References oomph::Problem_Parameter::Trace_file.

◆ initialise_trace_file() [3/3]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::initialise_trace_file ( )
inline

Initialise trace file (print column headings)

564  {
565  Trace_file << "time, norm_of_dof_vector" << std::endl;
566  }

References oomph::Problem_Parameter::Trace_file.

◆ mesh_pt() [1/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RectangularQuadMesh<PERTURBED_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt ( )
inline

Access function for the specific mesh.

406  {
407  return dynamic_cast<RectangularQuadMesh<PERTURBED_ELEMENT>*>
408  (Problem::mesh_pt());
409  }

Referenced by PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem().

◆ mesh_pt() [2/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RefineableRectangularQuadMesh<PERTURBED_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt ( )
inline

Access function for the specific mesh.

462  {
464  (Problem::mesh_pt());
465  }

◆ mesh_pt() [3/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RectangularQuadMesh<PERTURBED_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt ( )
inline

Access function for the specific mesh.

499  {
500  return dynamic_cast<RectangularQuadMesh<PERTURBED_ELEMENT>*>
501  (Problem::mesh_pt());
502  }

◆ mesh_pt() [4/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RefineableRectangularQuadMesh<PERTURBED_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt ( )
inline

Access function for the specific mesh.

553  {
555  (Problem::mesh_pt());
556  }

◆ mesh_pt() [5/5]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
RectangularQuadMesh<PERTURBED_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::mesh_pt ( )
inline

Access function for the specific mesh.

529  {
530  return dynamic_cast<RectangularQuadMesh<PERTURBED_ELEMENT>*>
531  (Problem::mesh_pt());
532  }

◆ pass_updated_nondim_parameters_to_elements() [1/2]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::pass_updated_nondim_parameters_to_elements ( )
inline
545  {
546  // Determine number of elements in mesh
547  const unsigned n_element = this->mesh_pt()->nelement();
548 
549  // Loop over the elements
550  for(unsigned e=0;e<n_element;e++)
551  {
552  // Upcast from GeneralisedElement to the present element
553  PERTURBED_ELEMENT* el_pt
554  = dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e));
555 
556  // Set the Reynolds number
557  el_pt->re_pt() = &GlobalPhysicalVariables::Re_current;
558 
559  // Set the Womersley number
560  el_pt->re_st_pt() = &GlobalPhysicalVariables::ReSt_current;
561  }
562  }
double ReSt_current
Definition: linearised_axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:71

References e(), GlobalPhysicalVariables::Re_current, and GlobalPhysicalVariables::ReSt_current.

◆ pass_updated_nondim_parameters_to_elements() [2/2]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::pass_updated_nondim_parameters_to_elements ( )
inline
599  {
600  // Determine number of elements in mesh
601  const unsigned n_element = this->mesh_pt()->nelement();
602 
603  // Loop over the elements
604  for(unsigned e=0;e<n_element;e++)
605  {
606  // Upcast from GeneralisedElement to the present element
607  PERTURBED_ELEMENT* el_pt
608  = dynamic_cast<PERTURBED_ELEMENT*>(mesh_pt()->element_pt(e));
609 
610  // Set the Reynolds number
611  el_pt->re_pt() = &GlobalPhysicalVariables::Re_current;
612 
613  // Set the Womersley number
614  el_pt->re_st_pt() = &GlobalPhysicalVariables::ReSt_current;
615  }
616  }

References e(), GlobalPhysicalVariables::Re_current, and GlobalPhysicalVariables::ReSt_current.

◆ set_boundary_conditions() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT , class TIMESTEPPER >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT, TIMESTEPPER >::set_boundary_conditions

Set up the (homogeneous) boundary conditions.

Set the (homogeneous) boundary conditions for the perturbed state.

616 {
617  // Determine number of mesh boundaries
618  const unsigned n_boundary = mesh_pt()->nboundary();
619 
620  // Loop over mesh boundaries
621  for(unsigned b=0;b<n_boundary;b++)
622  {
623  // Determine number of nodes on boundary b
624  const unsigned n_node = mesh_pt()->nboundary_node(b);
625 
626  // Loop over nodes on boundary b
627  for(unsigned n=0;n<n_node;n++)
628  {
629  // Set up pointer to node
630  Node* nod_pt = mesh_pt()->boundary_node_pt(b,n);
631 
632  // For the solid boundaries set all components to zero
633  if(b!=3)
634  {
635  nod_pt->set_value(0,0,0.0); // Radial
636  nod_pt->set_value(0,1,0.0); // Radial
637  nod_pt->set_value(0,2,0.0); // Axial
638  nod_pt->set_value(0,3,0.0); // Axial
639  nod_pt->set_value(0,4,0.0); // Azimuthal
640  nod_pt->set_value(0,5,0.0); // Azimuthal
641  }
642  // On symmetry boundary, set only radial and azimuthal components to
643  // zero, unless we are looking at the k=1 azimuthal mode. In this
644  // case, do not set the value of any of the velocity components
645  else
646  {
648  {
649  nod_pt->set_value(0,0,0.0); // Radial
650  nod_pt->set_value(0,1,0.0); // Radial
651  nod_pt->set_value(0,4,0.0); // Azimuthal
652  nod_pt->set_value(0,5,0.0); // Azimuthal
653  }
654  }
655  } // End of loop over nodes on boundary b
656  } // End of loop over mesh boundaries
657 } // End of set_boundary_conditions for perturbed state
void set_value(const unsigned &i, const double &value_)
Definition: nodes.h:271

References b, GlobalPhysicalVariables::k, n, and oomph::Data::set_value().

◆ set_boundary_conditions() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_boundary_conditions ( )

Set up the (homogeneous) boundary conditions.

◆ set_boundary_conditions() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_boundary_conditions ( )

Set up the (homogeneous) boundary conditions.

◆ set_boundary_conditions() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_boundary_conditions ( )

Set up the (homogeneous) boundary conditions.

◆ set_boundary_conditions() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_boundary_conditions ( )

Set up the (homogeneous) boundary conditions.

◆ set_boundary_conditions() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_boundary_conditions ( )

Set up the (homogeneous) boundary conditions.

◆ set_initial_condition() [1/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT , class TIMESTEPPER >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT, TIMESTEPPER >::set_initial_condition
virtual

Set the initial conditions to a "Poiseuille-style" profile.

Perturb the interface.

Set the three velocity components to a smoothly varying, non-zero profile

Set the three velocity components to a smoothly-varying, non-zero profile

Reimplemented from oomph::Problem.

579 {
580  // Determine number of nodes in mesh
581  const unsigned n_node = mesh_pt()->nnode();
582 
583  // Loop over all nodes in mesh
584  for(unsigned n=0;n<n_node;n++)
585  {
586  // Loop over the six velocity components
587  for(unsigned i=0;i<6;i++)
588  {
589  // Get x and y position of node
590  const double x = mesh_pt()->node_pt(n)->x(0);
591  const double y = mesh_pt()->node_pt(n)->x(1);
592 
593  // Assign "Poiseuille-style" initial conditions
594  const double value = 4.0*x*(x-1.0)*y*(y-Domain_height);
595 
596  mesh_pt()->node_pt(n)->set_value(i,value);
597  }
598  } // End of loop over nodes in mesh
599 
600  // Note that we do not need to set any history values as we are
601  // using a self-starting timestepper (BDF<1>)
602 
603  // Set the boundary conditions
605 
606 } // End of set_initial_condition for perturbed state
void set_boundary_conditions()
Set up the (homogeneous) boundary conditions.
Definition: axisym_navier_stokes/counter_rotating_disks/counter_rotating_disks.cc:615
Scalar * y
Definition: level1_cplx_impl.h:128
squared absolute value
Definition: GlobalFunctions.h:87
list x
Definition: plotDoE.py:28

References i, n, Eigen::value, plotDoE::x, and y.

◆ set_initial_condition() [2/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_initial_condition ( )
virtual

Set the three velocity components to a smoothly varying, non-zero profile

Reimplemented from oomph::Problem.

◆ set_initial_condition() [3/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_initial_condition ( )
virtual

Set initial conditions to a "Poiseuille-style" profile.

Reimplemented from oomph::Problem.

◆ set_initial_condition() [4/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_initial_condition ( )
virtual

Set initial conditions to a "Poiseuille-style" profile.

Reimplemented from oomph::Problem.

◆ set_initial_condition() [5/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_initial_condition ( )
virtual

Set initial conditions to a "Poiseuille-style" profile.

Reimplemented from oomph::Problem.

◆ set_initial_condition() [6/6]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
void PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::set_initial_condition ( )
virtual

Set initial conditions (velocities given random values in range [0,1])

Reimplemented from oomph::Problem.

◆ surface_mesh_pt()

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
Mesh* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::surface_mesh_pt ( )
inline

Access function for surface mesh.

592  {
593  return Surface_mesh_pt;
594  }

◆ time_stepper_pt() [1/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
SelfStartingBDF2* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::time_stepper_pt ( )
inline

Access function for the specific timestepper.

513  {
514  return dynamic_cast<SelfStartingBDF2*>(Problem::time_stepper_pt());
515  }

Referenced by PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem().

◆ time_stepper_pt() [2/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
SelfStartingBDF2* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::time_stepper_pt ( )
inline

Access function for the specific timestepper.

567  {
568  return dynamic_cast<SelfStartingBDF2*>(Problem::time_stepper_pt());
569  }

◆ time_stepper_pt() [3/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
SelfStartingBDF2* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::time_stepper_pt ( )
inline

Access function for the specific timestepper.

543  {
544  return dynamic_cast<SelfStartingBDF2*>(Problem::time_stepper_pt());
545  }

◆ time_stepper_pt() [4/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
TIMESTEPPER* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::time_stepper_pt ( )
inline

Access function for the specific timestepper.

553  {
554  return dynamic_cast<TIMESTEPPER*>(Problem::time_stepper_pt());
555  }

◆ trace_file() [1/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
ofstream& PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::trace_file ( )
inline

Access function for trace file.

542 { return Trace_file; }

References oomph::Problem_Parameter::Trace_file.

◆ trace_file() [2/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
ofstream& PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::trace_file ( )
inline

Access function for trace file.

596 { return Trace_file; }

References oomph::Problem_Parameter::Trace_file.

◆ trace_file() [3/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
ofstream& PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::trace_file ( )
inline

Access function for trace file.

576 { return Trace_file; }

References oomph::Problem_Parameter::Trace_file.

◆ trace_file() [4/4]

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
ofstream& PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::trace_file ( )
inline

Access function for trace file.

579 { return Trace_file; }

References oomph::Problem_Parameter::Trace_file.

Member Data Documentation

◆ Azimuthal_mode_number

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
int PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Azimuthal_mode_number
private

◆ Base_state_bulk_mesh_pt

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
SpineMesh* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Base_state_bulk_mesh_pt
private

◆ Base_state_mesh_pt

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
Mesh * PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Base_state_mesh_pt
private

◆ Bulk_mesh_pt

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
TwoLayerPerturbedSpineMesh<PERTURBED_ELEMENT>* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Bulk_mesh_pt
private

Pointer to the (specific) "bulk" mesh.

Referenced by PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem().

◆ Domain_height

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
double PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Domain_height
private

Height of domain.

◆ Inner_cylinder_radius

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
double PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Inner_cylinder_radius
private

Inner and outer cylinder radii.

◆ Outer_cylinder_radius

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
double PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Outer_cylinder_radius
private

◆ Surface_mesh_pt

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
Mesh* PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Surface_mesh_pt
private

◆ Trace_file

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
ofstream PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Trace_file
private

Trace file.

◆ U_nodal_index

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
Vector<unsigned> PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::U_nodal_index
private

Index at which the i-th velocity component is stored.

Referenced by PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem().

◆ Xhat_nodal_index

template<class BASE_ELEMENT , class PERTURBED_ELEMENT >
Vector<unsigned> PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::Xhat_nodal_index
private

Index at which the i-th component of the perturbation to the nodal coordinate is stored.

Referenced by PerturbedStateProblem< BASE_ELEMENT, PERTURBED_ELEMENT >::PerturbedStateProblem().


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