TetmeshPoissonProblem< ELEMENT > Class Template Reference

Demo class solves Poisson problem using Gmsh mesh. More...

+ Inheritance diagram for TetmeshPoissonProblem< ELEMENT >:

Public Member Functions

 TetmeshPoissonProblem ()
 Constructor. More...
 
 ~TetmeshPoissonProblem ()
 Destructor (empty) More...
 
void actions_before_adapt ()
 Actions before adapt (empty) More...
 
void actions_after_adapt ()
 Totally new mesh; build elements and apply boundary conditions. More...
 
void actions_before_newton_solve ()
 Update the problem specs before solve: (empty) More...
 
void actions_after_newton_solve ()
 Update the problem specs before solve (empty) More...
 
void doc_solution (const unsigned &nplot, DocInfo &doc_info)
 Doc the solution. More...
 
 TetmeshPoissonProblem ()
 Constructor. More...
 
 ~TetmeshPoissonProblem ()
 Destructor (empty) More...
 
void actions_before_adapt ()
 Actions before adapt (empty) More...
 
void actions_after_adapt ()
 Totally new mesh; build elements and apply boundary conditions. More...
 
void actions_before_newton_solve ()
 Update the problem specs before solve: (empty) More...
 
void actions_after_newton_solve ()
 Update the problem specs before solve (empty) More...
 
void doc_solution (const unsigned &nplot, DocInfo &doc_info)
 Doc the solution. 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
 
OomphCommunicator * communicator_pt ()
 access function to the oomph-lib communicator More...
 
const OomphCommunicator * communicator_pt () const
 access function to the oomph-lib communicator, const version More...
 
 Problem ()
 
 Problem (const Problem &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const Problem &)=delete
 Broken assignment operator. More...
 
virtual ~Problem ()
 Virtual destructor to clean up memory. More...
 
Mesh *& mesh_pt ()
 Return a pointer to the global mesh. More...
 
Mesh *const & mesh_pt () const
 Return a pointer to the global mesh (const version) More...
 
Mesh *& mesh_pt (const unsigned &imesh)
 
Mesh *const & mesh_pt (const unsigned &imesh) const
 Return a pointer to the i-th submesh (const version) More...
 
unsigned nsub_mesh () const
 Return number of submeshes. More...
 
unsigned add_sub_mesh (Mesh *const &mesh_pt)
 
void flush_sub_meshes ()
 
void build_global_mesh ()
 
void rebuild_global_mesh ()
 
LinearSolver *& linear_solver_pt ()
 Return a pointer to the linear solver object. More...
 
LinearSolver *const & linear_solver_pt () const
 Return a pointer to the linear solver object (const version) More...
 
LinearSolver *& mass_matrix_solver_for_explicit_timestepper_pt ()
 
LinearSolver * mass_matrix_solver_for_explicit_timestepper_pt () const
 
EigenSolver *& eigen_solver_pt ()
 Return a pointer to the eigen solver object. More...
 
EigenSolver *const & eigen_solver_pt () const
 Return a pointer to the eigen solver object (const version) More...
 
Time *& time_pt ()
 Return a pointer to the global time object. More...
 
Time * time_pt () const
 Return a pointer to the global time object (const version). More...
 
double & time ()
 Return the current value of continuous time. More...
 
double time () const
 Return the current value of continuous time (const version) More...
 
TimeStepper *& time_stepper_pt ()
 
const TimeStepper * time_stepper_pt () const
 
TimeStepper *& time_stepper_pt (const unsigned &i)
 Return a pointer to the i-th timestepper. More...
 
ExplicitTimeStepper *& explicit_time_stepper_pt ()
 Return a pointer to the explicit timestepper. More...
 
unsigned long set_timestepper_for_all_data (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data=false)
 
virtual void shift_time_values ()
 Shift all values along to prepare for next timestep. More...
 
AssemblyHandler *& assembly_handler_pt ()
 Return a pointer to the assembly handler object. More...
 
AssemblyHandler *const & assembly_handler_pt () const
 Return a pointer to the assembly handler object (const version) More...
 
double & minimum_dt ()
 Access function to min timestep in adaptive timestepping. More...
 
double & maximum_dt ()
 Access function to max timestep in adaptive timestepping. More...
 
unsigned & max_newton_iterations ()
 Access function to max Newton iterations before giving up. More...
 
void problem_is_nonlinear (const bool &prob_lin)
 Access function to Problem_is_nonlinear. More...
 
double & max_residuals ()
 
bool & time_adaptive_newton_crash_on_solve_fail ()
 Access function for Time_adaptive_newton_crash_on_solve_fail. More...
 
double & newton_solver_tolerance ()
 
void add_time_stepper_pt (TimeStepper *const &time_stepper_pt)
 
void set_explicit_time_stepper_pt (ExplicitTimeStepper *const &explicit_time_stepper_pt)
 
void initialise_dt (const double &dt)
 
void initialise_dt (const Vector< double > &dt)
 
Data *& global_data_pt (const unsigned &i)
 Return a pointer to the the i-th global data object. More...
 
void add_global_data (Data *const &global_data_pt)
 
void flush_global_data ()
 
LinearAlgebraDistribution *const & dof_distribution_pt () const
 Return the pointer to the dof distribution (read-only) More...
 
unsigned long ndof () const
 Return the number of dofs. More...
 
unsigned ntime_stepper () const
 Return the number of time steppers. More...
 
unsigned nglobal_data () const
 Return the number of global data values. More...
 
unsigned self_test ()
 Self-test: Check meshes and global data. Return 0 for OK. More...
 
void enable_store_local_dof_pt_in_elements ()
 
void disable_store_local_dof_pt_in_elements ()
 
unsigned long assign_eqn_numbers (const bool &assign_local_eqn_numbers=true)
 
void describe_dofs (std::ostream &out= *(oomph_info.stream_pt())) const
 
void enable_discontinuous_formulation ()
 
void disable_discontinuous_formulation ()
 
void get_dofs (DoubleVector &dofs) const
 
void get_dofs (const unsigned &t, DoubleVector &dofs) const
 Return vector of the t'th history value of all dofs. More...
 
void set_dofs (const DoubleVector &dofs)
 Set the values of the dofs. More...
 
void set_dofs (const unsigned &t, DoubleVector &dofs)
 Set the history values of the dofs. More...
 
void set_dofs (const unsigned &t, Vector< double * > &dof_pt)
 
void add_to_dofs (const double &lambda, const DoubleVector &increment_dofs)
 Add lambda x incremenet_dofs[l] to the l-th dof. More...
 
double * global_dof_pt (const unsigned &i)
 
double & dof (const unsigned &i)
 i-th dof in the problem More...
 
double dof (const unsigned &i) const
 i-th dof in the problem (const version) More...
 
double *& dof_pt (const unsigned &i)
 Pointer to i-th dof in the problem. More...
 
double * dof_pt (const unsigned &i) const
 Pointer to i-th dof in the problem (const version) More...
 
virtual void get_inverse_mass_matrix_times_residuals (DoubleVector &Mres)
 
virtual void get_dvaluesdt (DoubleVector &f)
 
virtual void get_residuals (DoubleVector &residuals)
 Get the total residuals Vector for the problem. More...
 
virtual void get_jacobian (DoubleVector &residuals, DenseDoubleMatrix &jacobian)
 
virtual void get_jacobian (DoubleVector &residuals, CRDoubleMatrix &jacobian)
 
virtual void get_jacobian (DoubleVector &residuals, CCDoubleMatrix &jacobian)
 
virtual void get_jacobian (DoubleVector &residuals, SumOfMatrices &jacobian)
 
void get_fd_jacobian (DoubleVector &residuals, DenseMatrix< double > &jacobian)
 Get the full Jacobian by finite differencing. More...
 
void get_derivative_wrt_global_parameter (double *const &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...
 
bool & use_predictor_values_as_initial_guess ()
 
void newton_solve ()
 Use Newton method to solve the problem. More...
 
void enable_globally_convergent_newton_method ()
 enable globally convergent Newton method More...
 
void disable_globally_convergent_newton_method ()
 disable globally convergent Newton method More...
 
void newton_solve (unsigned const &max_adapt)
 
void steady_newton_solve (unsigned const &max_adapt=0)
 
void copy (Problem *orig_problem_pt)
 
virtual Problem * make_copy ()
 
virtual void read (std::ifstream &restart_file, bool &unsteady_restart)
 
virtual void read (std::ifstream &restart_file)
 
virtual void dump (std::ofstream &dump_file) const
 
void dump (const std::string &dump_file_name) const
 
void delete_all_external_storage ()
 
virtual void symmetrise_eigenfunction_for_adaptive_pitchfork_tracking ()
 
double * bifurcation_parameter_pt () const
 
void get_bifurcation_eigenfunction (Vector< DoubleVector > &eigenfunction)
 
void activate_fold_tracking (double *const &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 ()
 
int & sign_of_jacobian ()
 
void explicit_timestep (const double &dt, const bool &shift_values=true)
 Take an explicit timestep of size dt. More...
 
void unsteady_newton_solve (const double &dt)
 
void unsteady_newton_solve (const double &dt, const bool &shift_values)
 
void unsteady_newton_solve (const double &dt, const unsigned &max_adapt, const bool &first, const bool &shift=true)
 
double doubly_adaptive_unsteady_newton_solve (const double &dt, const double &epsilon, const unsigned &max_adapt, const bool &first, const bool &shift=true)
 
double doubly_adaptive_unsteady_newton_solve (const double &dt, const double &epsilon, const unsigned &max_adapt, const unsigned &suppress_resolve_after_spatial_adapt_flag, const bool &first, const bool &shift=true)
 
double adaptive_unsteady_newton_solve (const double &dt_desired, const double &epsilon)
 
double adaptive_unsteady_newton_solve (const double &dt_desired, const double &epsilon, const bool &shift_values)
 
void assign_initial_values_impulsive ()
 
void assign_initial_values_impulsive (const double &dt)
 
void calculate_predictions ()
 Calculate predictions. More...
 
void enable_mass_matrix_reuse ()
 
void disable_mass_matrix_reuse ()
 
bool mass_matrix_reuse_is_enabled ()
 Return whether the mass matrix is being reused. More...
 
void refine_uniformly (const Vector< unsigned > &nrefine_for_mesh)
 
void refine_uniformly (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
 
void refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh)
 
void refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
 
void refine_uniformly (DocInfo &doc_info)
 
void refine_uniformly_and_prune (DocInfo &doc_info)
 
void refine_uniformly ()
 
void refine_uniformly (const unsigned &i_mesh, DocInfo &doc_info)
 Do uniform refinement for submesh i_mesh with documentation. More...
 
void refine_uniformly (const unsigned &i_mesh)
 Do uniform refinement for submesh i_mesh without documentation. More...
 
void p_refine_uniformly (const Vector< unsigned > &nrefine_for_mesh)
 
void p_refine_uniformly (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
 
void p_refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh)
 
void p_refine_uniformly_and_prune (const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
 
void p_refine_uniformly (DocInfo &doc_info)
 
void p_refine_uniformly_and_prune (DocInfo &doc_info)
 
void p_refine_uniformly ()
 
void p_refine_uniformly (const unsigned &i_mesh, DocInfo &doc_info)
 Do uniform p-refinement for submesh i_mesh with documentation. More...
 
void p_refine_uniformly (const unsigned &i_mesh)
 Do uniform p-refinement for submesh i_mesh without documentation. More...
 
void refine_selected_elements (const Vector< unsigned > &elements_to_be_refined)
 
void refine_selected_elements (const Vector< RefineableElement * > &elements_to_be_refined_pt)
 
void refine_selected_elements (const unsigned &i_mesh, const Vector< unsigned > &elements_to_be_refined)
 
void refine_selected_elements (const unsigned &i_mesh, const Vector< RefineableElement * > &elements_to_be_refined_pt)
 
void refine_selected_elements (const Vector< Vector< unsigned >> &elements_to_be_refined)
 
void refine_selected_elements (const Vector< Vector< RefineableElement * >> &elements_to_be_refined_pt)
 
void p_refine_selected_elements (const Vector< unsigned > &elements_to_be_refined)
 
void p_refine_selected_elements (const Vector< PRefineableElement * > &elements_to_be_refined_pt)
 
void p_refine_selected_elements (const unsigned &i_mesh, const Vector< unsigned > &elements_to_be_refined)
 
void p_refine_selected_elements (const unsigned &i_mesh, const Vector< PRefineableElement * > &elements_to_be_refined_pt)
 
void p_refine_selected_elements (const Vector< Vector< unsigned >> &elements_to_be_refined)
 
void p_refine_selected_elements (const Vector< Vector< PRefineableElement * >> &elements_to_be_refined_pt)
 
unsigned unrefine_uniformly ()
 
unsigned unrefine_uniformly (const unsigned &i_mesh)
 
void p_unrefine_uniformly (DocInfo &doc_info)
 
void p_unrefine_uniformly (const unsigned &i_mesh, DocInfo &doc_info)
 Do uniform p-unrefinement for submesh i_mesh without documentation. More...
 
void adapt (unsigned &n_refined, unsigned &n_unrefined)
 
void adapt ()
 
void p_adapt (unsigned &n_refined, unsigned &n_unrefined)
 
void p_adapt ()
 
void adapt_based_on_error_estimates (unsigned &n_refined, unsigned &n_unrefined, Vector< Vector< double >> &elemental_error)
 
void adapt_based_on_error_estimates (Vector< Vector< double >> &elemental_error)
 
void get_all_error_estimates (Vector< Vector< double >> &elemental_error)
 
void doc_errors (DocInfo &doc_info)
 Get max and min error for all elements in submeshes. More...
 
void doc_errors ()
 Get max and min error for all elements in submeshes. More...
 
void enable_info_in_newton_solve ()
 
void disable_info_in_newton_solve ()
 Disable the output of information when in the newton solver. More...
 
- 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 complete_problem_setup ()
 Apply BCs and make elements functional. More...
 
void apply_boundary_conditions ()
 Helper function to apply boundary conditions. More...
 
void complete_problem_setup ()
 Apply BCs and make elements functional. More...
 
void apply_boundary_conditions ()
 Helper function to apply boundary conditions. More...
 

Private Attributes

RefineableGmshTetMesh< ELEMENT > * Bulk_mesh_pt
 Bulk mesh. More...
 
TetMeshFacetedClosedSurface * Outer_boundary_pt
 Storage for the outer boundary object. More...
 
Vector< TetMeshFacetedSurface * > Inner_boundary_pt
 Inner boundary. More...
 
unsigned First_boundary_id_for_outer_boundary
 First boundary ID for outer boundary. More...
 
unsigned First_disk_boundary_id
 First boundary ID for warped disk. More...
 
unsigned Last_disk_boundary_id
 Last boundary ID for warped disk. More...
 
unsigned Torus_region_id
 Region ID for torus around edge of warped disk. More...
 
unsigned First_disk_with_torus_boundary_id
 First boundary ID for disk that is surrounded by torus. More...
 
unsigned Last_disk_with_torus_boundary_id
 Last boundary ID for disk that is surrounded by torus. More...
 
unsigned First_torus_boundary_id
 First boundary ID for torus surrounding edge of disk. More...
 
unsigned Last_torus_boundary_id
 Last boundary ID for torus surrounding edge of disk. More...
 
Vector< unsigned > One_based_boundary_id_for_disk_within_torus
 
Vector< unsigned > One_based_boundary_id_for_disk_outside_torus
 
unsigned Above_disk_region_id
 Region ID for layer above disk. More...
 
unsigned Below_disk_region_id
 Region ID for layer below disk. More...
 
unsigned First_disk_with_layers_boundary_id
 First boundary ID for disk with layers. More...
 
unsigned Last_disk_with_layers_boundary_id
 Last boundary ID for disk with layers. More...
 
double Exact_bounded_volume
 Sanity check: Exact bounded volume. More...
 
unsigned First_hollow_cube_boundary_id
 First boundary ID for hollow cube. More...
 
unsigned First_cube_region_boundary_id
 First boundary ID for cube region. More...
 
unsigned Cube_region_id
 Region ID for cube region. More...
 
unsigned Internal_rectangle_boundary_id
 Boundary ID for rectangular facet in main volume. More...
 
unsigned Internal_embedded_rectangle_boundary_id
 Boundary ID for rectangular facet embedded in region. More...
 
double Exact_volume_of_hole
 Sanity check: Exact volume of hole. More...
 
double Exact_volume_of_internal_region
 Sanity check: Exact volume of internal region. More...
 

Additional Inherited Members

- Public Types inherited from oomph::Problem
typedef void(* SpatialErrorEstimatorFctPt) (Mesh *&mesh_pt, Vector< double > &elemental_error)
 Function pointer for spatial error estimator. More...
 
typedef void(* SpatialErrorEstimatorWithDocFctPt) (Mesh *&mesh_pt, Vector< double > &elemental_error, DocInfo &doc_info)
 Function pointer for spatial error estimator with doc. More...
 
- Public Attributes inherited from oomph::Problem
bool Shut_up_in_newton_solve
 
- Static Public Attributes inherited from oomph::Problem
static bool Suppress_warning_about_actions_before_read_unstructured_meshes
 
- Protected Types inherited from oomph::Problem
enum  Assembly_method {
  Perform_assembly_using_vectors_of_pairs , Perform_assembly_using_two_vectors , Perform_assembly_using_maps , Perform_assembly_using_lists ,
  Perform_assembly_using_two_arrays
}
 Enumerated flags to determine which sparse assembly method is used. More...
 
- Protected Member Functions inherited from oomph::Problem
unsigned setup_element_count_per_dof ()
 
virtual void sparse_assemble_row_or_column_compressed (Vector< int * > &column_or_row_index, Vector< int * > &row_or_column_start, Vector< double * > &value, Vector< unsigned > &nnz, Vector< double * > &residual, bool compressed_row_flag)
 
virtual void actions_before_newton_convergence_check ()
 
virtual void actions_before_newton_step ()
 
virtual void actions_after_newton_step ()
 
virtual void actions_before_implicit_timestep ()
 
virtual void actions_after_implicit_timestep ()
 
virtual void actions_after_implicit_timestep_and_error_estimation ()
 
virtual void actions_before_explicit_timestep ()
 Actions that should be performed before each explicit time step. More...
 
virtual void actions_after_explicit_timestep ()
 Actions that should be performed after each explicit time step. More...
 
virtual void actions_before_read_unstructured_meshes ()
 
virtual void actions_after_read_unstructured_meshes ()
 
virtual void actions_after_change_in_global_parameter (double *const &parameter_pt)
 
virtual void actions_after_change_in_bifurcation_parameter ()
 
virtual void actions_after_parameter_increase (double *const &parameter_pt)
 
double & dof_derivative (const unsigned &i)
 
double & dof_current (const unsigned &i)
 
virtual void set_initial_condition ()
 
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 *, bool > Calculate_dparameter_analytic
 
bool Calculate_hessian_products_analytic
 
LinearAlgebraDistribution * Dof_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< double > Max_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< double > Dof_derivative
 Storage for the derivative of the problem variables wrt arc-length. More...
 
Vector< double > Dof_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
 
OomphCommunicator * Communicator_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 ELEMENT>
class TetmeshPoissonProblem< ELEMENT >

Demo class solves Poisson problem using Gmsh mesh.

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

Constructor & Destructor Documentation

◆ TetmeshPoissonProblem() [1/2]

template<class ELEMENT >
TetmeshPoissonProblem< ELEMENT >::TetmeshPoissonProblem

Constructor.

Keep track of (zero-based) IDs

227 {
228 
229  // OUTER BOUNDARY
230  //===============
231 
232  // Start boundary IDs for outer boundary from some crazy offset
233  // (just for testing). By default the one-based boundary IDs go from
234  // 1 to 6; let's start from 1001.
235  unsigned outer_boundary_id_offset=1000;
236 
237  //Make the outer boundary object
241  outer_boundary_id_offset);
242 
243  // Look, we can visualise the faceted surface!
244  Outer_boundary_pt->output("outer_faceted_surface.dat");
245 
246  // First oomph-lib (zero-based!) boundary ID for outer boundary
247  First_boundary_id_for_outer_boundary=outer_boundary_id_offset;
248 
249  // For sanity check:
254 
255 
256  // INTERNAL BOUNDARIES
257  //====================
258 
259 
260 
261  // A warped disk
262  //--------------
263 
264  // Warped disk with specified amplitude and wavenumber for warping
265  double epsilon=0.1;
266  unsigned n=4;
267  double z_offset=0.5;
268  WarpedCircularDisk* disk_pt=new WarpedCircularDisk(epsilon,n,z_offset);
269 
270  // (Half) number of segments used to represent the disk perimeter
271  unsigned half_nsegment=30;
272 
273  // Start enumeration from here
274  unsigned first_one_based_boundary_id=9001;
275 
276  // Provide storage for last boundary ID on disk (don't know
277  // in advance how many facets (with distinct IDs) the disk
278  // is going to be represented by
279  unsigned last_one_based_boundary_for_disk_id=0;
280 
281  // Create faceted representation of warped disk
282  DiskTetMeshFacetedSurface* disk_faceted_surface_pt=
283  new DiskTetMeshFacetedSurface(disk_pt,
284  half_nsegment,
285  first_one_based_boundary_id,
286  last_one_based_boundary_for_disk_id);
287 
288  // Keep track of the (zero-based) boundary IDs
289  First_disk_boundary_id=first_one_based_boundary_id-1;
290  Last_disk_boundary_id=last_one_based_boundary_for_disk_id-1;
291 
292  // Look, we can visualise the faceted surface!
293  disk_faceted_surface_pt->output("warped_disk_faceted_surface.dat");
294 
295  // Add as inner boundary for mesh
296  Inner_boundary_pt.push_back(disk_faceted_surface_pt);
297 
298 
299 
300  // A warped disk surrounded by a torus
301  //------------------------------------
302 
303  // Radius of torus region
304  double r_torus=0.1;
305 
306  // Warped disk with specified amplitude and wavenumber for warping
307  epsilon=0.1;
308  n=5;
309 
310  // Thickness of annular region on disk = radius of torus surrounding the
311  // edge
312  double h_annulus=r_torus;
315 
316  // Number of vertices around perimeter of torus
317  unsigned nvertex_torus=20;
318 
319  // Enumerate the boundaries making up the disk starting with this
320  // one-based ID
321  unsigned first_one_based_disk_with_torus_boundary_id=
322  last_one_based_boundary_for_disk_id+200;
323 
324 
325  // These get returned
326  unsigned last_one_based_disk_with_torus_boundary_id=0;
327  unsigned first_one_based_torus_boundary_id=0;
328  unsigned last_one_based_torus_boundary_id=0;
329 
330  // One-based region ID for torus
331  unsigned one_based_torus_region_id=4;
332 
333 
334  // Build disk with torus around the edge
337  disk2_pt,
338  half_nsegment,
339  r_torus,
340  nvertex_torus,
341  first_one_based_disk_with_torus_boundary_id,
342  one_based_torus_region_id,
343  last_one_based_disk_with_torus_boundary_id,
344  first_one_based_torus_boundary_id,
345  last_one_based_torus_boundary_id,
348 
349 
351  Torus_region_id=one_based_torus_region_id-1;
353  first_one_based_disk_with_torus_boundary_id-1;
355  last_one_based_disk_with_torus_boundary_id-1;
356  First_torus_boundary_id=first_one_based_torus_boundary_id-1;
357  Last_torus_boundary_id=last_one_based_torus_boundary_id-1;
358 
359  // Look, we can visualise the faceted surface!
360  disk_with_torus_pt->output("warped_disk_with_torus_faceted_surface.dat");
361 
362  // Add as inner boundary for mesh
363  Inner_boundary_pt.push_back(disk_with_torus_pt);
364 
365 
366 
367  // A warped disk bounded by a layer above and below
368  //-------------------------------------------------
369 
370  // Warped disk with specified amplitude and wavenumber for warping
371  epsilon=0.1;
372  n=6;
373  z_offset=-0.5;
374  WarpedCircularDisk* disk3_pt=new WarpedCircularDisk(epsilon,n,z_offset);
375 
376  // Start enumeration from here
377  first_one_based_boundary_id=last_one_based_torus_boundary_id+200;
378 
379  // Provide storage for last boundary ID on disk (don't know
380  // in advance how many facets (with distinct IDs) the disk
381  // is going to be represented by
382  unsigned last_one_based_boundary_for_disk_with_layers_id=0;
383  unsigned last_one_based_boundary_id=0;
384 
385  unsigned one_based_region_id_above_disk=2408;
386  unsigned one_based_region_id_below_disk=2409;
387 
388 
389  // Create faceted representation of warped disk
390  DiskWithTwoLayersTetMeshFacetedSurface* disk_with_layers_faceted_surface_pt=
392  (disk3_pt,
393  half_nsegment,
394  first_one_based_boundary_id,
395  one_based_region_id_above_disk,
396  one_based_region_id_below_disk,
397  last_one_based_boundary_for_disk_with_layers_id,
398  last_one_based_boundary_id);
399 
400  // // Keep track of the (zero-based) boundary IDs
401  First_disk_with_layers_boundary_id=first_one_based_boundary_id-1;
403  last_one_based_boundary_for_disk_with_layers_id-1;
404 
405  // Zero-based region IDs
406  Above_disk_region_id=one_based_region_id_above_disk-1;
407  Below_disk_region_id=one_based_region_id_below_disk-1;
408 
409 
410  // Look, we can visualise the faceted surface!
411  disk_with_layers_faceted_surface_pt->output
412  ("warped_disk_with_layers_faceted_surface.dat");
413 
414  // Add as inner boundary for mesh
415  Inner_boundary_pt.push_back(disk_with_layers_faceted_surface_pt);
416 
417 
418  // Build the mesh
419  //---------------
420 
421  // Initial element volume
422  double initial_element_volume=1.0;
423 
424  // Setup parameters for gmsh
425  GmshParameters* gmsh_parameters_pt=
428 
429  // Element volume
430  gmsh_parameters_pt->element_volume()=initial_element_volume;
431 
432 
433  // Specify inner boundaries
434  gmsh_parameters_pt->internal_surface_pt()=Inner_boundary_pt;
435 
436  // Filename for file in which target element size is stored
437  // (for disk-based operation of gmsh)
438  gmsh_parameters_pt->stem_for_filename_gmsh_size_transfer()=
439  "target_size_on_grid";
440  gmsh_parameters_pt->counter_for_filename_gmsh_size_transfer()=0;
441 
442  // Problem is linear so we don't need to transfer the solution to the
443  // new mesh; we keep it on for self-test purposes...
444  // gmsh_parameters_pt->disable_projection();
445 
446  // Redirect gmsh on-screen output
447  gmsh_parameters_pt->gmsh_onscreen_output_file_name()=
448  "RESLT/gmsh_on_screen_output.dat";
449 
450  // Not needed, of course, but here to test out the handling
451  // of timesteppers
453 
454 #ifdef DO_TETGEN
455 
456  // And now build it...
457  Bulk_mesh_pt =
460  initial_element_volume,
461  this->time_stepper_pt());
462 
463  // Problem is linear so we don't need to transfer the solution to the
464  // new mesh; we keep it on for self-test purposes...
465  Bulk_mesh_pt->disable_projection();
466 
467 #else
468 
469  // And now build it...
470  Bulk_mesh_pt = new RefineableGmshTetMesh<ELEMENT>(gmsh_parameters_pt,
471  this->time_stepper_pt());
472 
473 #endif
474 
475  // Add sub-mesh
476  Problem::mesh_pt()=Bulk_mesh_pt;
477 
478  // Set error estimator for bulk mesh
480  Bulk_mesh_pt->spatial_error_estimator_pt()=error_estimator_pt;
481 
482  // Set targets for spatial adaptivity
483  Bulk_mesh_pt->max_permitted_error()=0.0005;
484  Bulk_mesh_pt->min_permitted_error()=0.00001;
485 
486  // Complete problem setup
488 
489 #ifdef OOMPH_HAS_HYPRE
490 
491  // Create a new Hypre linear solver
492  HypreSolver* hypre_linear_solver_pt = new HypreSolver;
493 
494  // Set the linear solver for problem
495  linear_solver_pt() = hypre_linear_solver_pt;
496 
497  // Set some solver parameters
498  hypre_linear_solver_pt->max_iter() = 100;
499  hypre_linear_solver_pt->tolerance() = 1e-10;
500  hypre_linear_solver_pt->amg_simple_smoother() = 1;
501  hypre_linear_solver_pt->disable_doc_time();
502  hypre_linear_solver_pt->enable_hypre_error_messages();
503  hypre_linear_solver_pt->amg_print_level() = 0;
504  hypre_linear_solver_pt->krylov_print_level() = 0;
505  hypre_linear_solver_pt->hypre_method() = HypreSolver::BoomerAMG;
506 
507 #endif
508 
509  // Setup equation numbering scheme
510  oomph_info <<"Number of equations: " << assign_eqn_numbers() << std::endl;
511 
512 }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
unsigned Below_disk_region_id
Region ID for layer below disk.
Definition: curved_facet_bounded_tetmesh.cc:204
TetMeshFacetedClosedSurface * Outer_boundary_pt
Storage for the outer boundary object.
Definition: curved_facet_bounded_tetmesh.cc:151
double Exact_bounded_volume
Sanity check: Exact bounded volume.
Definition: curved_facet_bounded_tetmesh.cc:216
Vector< TetMeshFacetedSurface * > Inner_boundary_pt
Inner boundary.
Definition: curved_facet_bounded_tetmesh.cc:154
unsigned Last_disk_boundary_id
Last boundary ID for warped disk.
Definition: curved_facet_bounded_tetmesh.cc:167
unsigned First_disk_with_layers_boundary_id
First boundary ID for disk with layers.
Definition: curved_facet_bounded_tetmesh.cc:207
void complete_problem_setup()
Apply BCs and make elements functional.
Definition: curved_facet_bounded_tetmesh.cc:519
unsigned First_boundary_id_for_outer_boundary
First boundary ID for outer boundary.
Definition: curved_facet_bounded_tetmesh.cc:157
RefineableGmshTetMesh< ELEMENT > * Bulk_mesh_pt
Bulk mesh.
Definition: curved_facet_bounded_tetmesh.cc:145
unsigned First_disk_with_torus_boundary_id
First boundary ID for disk that is surrounded by torus.
Definition: curved_facet_bounded_tetmesh.cc:177
unsigned Torus_region_id
Region ID for torus around edge of warped disk.
Definition: curved_facet_bounded_tetmesh.cc:174
Vector< unsigned > One_based_boundary_id_for_disk_outside_torus
Definition: curved_facet_bounded_tetmesh.cc:194
unsigned First_disk_boundary_id
First boundary ID for warped disk.
Definition: curved_facet_bounded_tetmesh.cc:164
unsigned First_torus_boundary_id
First boundary ID for torus surrounding edge of disk.
Definition: curved_facet_bounded_tetmesh.cc:183
unsigned Above_disk_region_id
Region ID for layer above disk.
Definition: curved_facet_bounded_tetmesh.cc:201
unsigned Last_disk_with_torus_boundary_id
Last boundary ID for disk that is surrounded by torus.
Definition: curved_facet_bounded_tetmesh.cc:180
unsigned Last_disk_with_layers_boundary_id
Last boundary ID for disk with layers.
Definition: curved_facet_bounded_tetmesh.cc:210
unsigned Last_torus_boundary_id
Last boundary ID for torus surrounding edge of disk.
Definition: curved_facet_bounded_tetmesh.cc:186
Vector< unsigned > One_based_boundary_id_for_disk_within_torus
Definition: curved_facet_bounded_tetmesh.cc:190
CubicTetMeshFacetedClosedSurface from (+/- half width)^2 x +/- half length.
Definition: tetmesh_faceted_surfaces.h:66
TetMeshFacetedSurface that defines disk.
Definition: tetmesh_faceted_surfaces.h:366
TetMeshFacetedSurface that defines disk with torus around edge.
Definition: tetmesh_faceted_surfaces.h:732
Definition: tetmesh_faceted_surfaces.h:1067
Class to collate parameters for Gmsh mesh generation.
Definition: gmsh_tet_mesh.template.h:50
Vector< TetMeshFacetedSurface * > & internal_surface_pt()
Internal boundaries.
Definition: gmsh_tet_mesh.template.h:83
double & element_volume()
Uniform target element volume.
Definition: gmsh_tet_mesh.template.h:89
std::string & stem_for_filename_gmsh_size_transfer()
Definition: gmsh_tet_mesh.template.h:152
std::string & gmsh_onscreen_output_file_name()
Output filename for gmsh on-screen output.
Definition: gmsh_tet_mesh.template.h:184
int & counter_for_filename_gmsh_size_transfer()
Definition: gmsh_tet_mesh.template.h:160
void enable_hypre_error_messages()
Turn on the hypre error messages.
Definition: hypre_solver.h:242
Definition: hypre_solver.h:514
unsigned & amg_simple_smoother()
Access function to AMG_simple_smoother flag.
Definition: hypre_solver.h:583
unsigned & max_iter()
Access function to Max_iter.
Definition: hypre_solver.h:551
unsigned & hypre_method()
Access function to Hypre_method flag – specified via enumeration.
Definition: hypre_solver.h:563
unsigned & amg_print_level()
Access function to AMG_print_level.
Definition: hypre_solver.h:602
unsigned & krylov_print_level()
Access function to Krylov_print_level.
Definition: hypre_solver.h:737
double & tolerance()
Access function to Tolerance.
Definition: hypre_solver.h:557
void disable_doc_time()
Disable documentation of solve times.
Definition: linear_solver.h:116
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
TimeStepper *& time_stepper_pt()
Definition: problem.h:1524
Definition: gmsh_tet_mesh.template.h:2285
Definition: uns_adapt_3d_fs.cc:86
Definition: timesteppers.h:681
void output(std::ostream &outfile) const
Output.
Definition: tet_mesh.h:392
Definition: geom_obj_with_boundary.h:510
Definition: geom_obj_with_boundary.h:342
Definition: error_estimator.h:266
double Box_half_length
(Half)height of the box
Definition: curved_facet_bounded_tetmesh.cc:71
double Box_half_width
(Half-)width of the box
Definition: curved_facet_bounded_tetmesh.cc:68
std::string Gmsh_command_line_invocation
Specify how to call gmsh from the command line.
Definition: curved_facet_bounded_tetmesh.cc:74
Z2ErrorEstimator * error_estimator_pt
Definition: MortaringCantileverCompareToNonMortaring.cpp:190
double epsilon
Definition: osc_ring_sarah_asymptotics.h:43
OomphInfo oomph_info
Definition: oomph_definitions.cc:319

References oomph::HypreSolver::amg_print_level(), oomph::HypreSolver::amg_simple_smoother(), Global_Parameters::Box_half_length, Global_Parameters::Box_half_width, oomph::GmshParameters::counter_for_filename_gmsh_size_transfer(), oomph::LinearSolver::disable_doc_time(), e(), oomph::GmshParameters::element_volume(), oomph::HypreInterface::enable_hypre_error_messages(), oomph::SarahBL::epsilon, MeshRefinement::error_estimator_pt, Global_Parameters::Gmsh_command_line_invocation, oomph::GmshParameters::gmsh_onscreen_output_file_name(), oomph::HypreSolver::hypre_method(), oomph::GmshParameters::internal_surface_pt(), oomph::HypreSolver::krylov_print_level(), oomph::HypreSolver::max_iter(), n, oomph::oomph_info, oomph::TetMeshFacetedSurface::output(), oomph::GmshParameters::stem_for_filename_gmsh_size_transfer(), and oomph::HypreSolver::tolerance().

◆ ~TetmeshPoissonProblem() [1/2]

template<class ELEMENT >
TetmeshPoissonProblem< ELEMENT >::~TetmeshPoissonProblem ( )
inline

Destructor (empty)

99  {
100  //Delete the objects
101  unsigned nh = Inner_boundary_pt.size();
102  for(unsigned h=0;h<nh;++h)
103  {
104  delete Inner_boundary_pt[h];
105  }
106  delete Outer_boundary_pt;
107  }

◆ TetmeshPoissonProblem() [2/2]

template<class ELEMENT >
TetmeshPoissonProblem< ELEMENT >::TetmeshPoissonProblem ( )

Constructor.

◆ ~TetmeshPoissonProblem() [2/2]

template<class ELEMENT >
TetmeshPoissonProblem< ELEMENT >::~TetmeshPoissonProblem ( )
inline

Destructor (empty)

102  {
103  //Delete the objects
104  unsigned nh = Inner_boundary_pt.size();
105  for(unsigned h=0;h<nh;++h)
106  {
107  delete Inner_boundary_pt[h];
108  }
109  delete Outer_boundary_pt;
110  }

Member Function Documentation

◆ actions_after_adapt() [1/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_after_adapt ( )
inlinevirtual

Totally new mesh; build elements and apply boundary conditions.

Reimplemented from oomph::Problem.

115  {
116  // Complete problem setup
118  }

◆ actions_after_adapt() [2/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_after_adapt ( )
inlinevirtual

Totally new mesh; build elements and apply boundary conditions.

Reimplemented from oomph::Problem.

119  {
120  // Complete problem setup
122  }

◆ actions_after_newton_solve() [1/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_after_newton_solve ( )
inlinevirtual

Update the problem specs before solve (empty)

Reimplemented from oomph::Problem.

124 {}

◆ actions_after_newton_solve() [2/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_after_newton_solve ( )
inlinevirtual

Update the problem specs before solve (empty)

Reimplemented from oomph::Problem.

128 {}

◆ actions_before_adapt() [1/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_before_adapt ( )
inlinevirtual

Actions before adapt (empty)

Reimplemented from oomph::Problem.

111  {}

◆ actions_before_adapt() [2/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_before_adapt ( )
inlinevirtual

Actions before adapt (empty)

Reimplemented from oomph::Problem.

115  {}

◆ actions_before_newton_solve() [1/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Update the problem specs before solve: (empty)

Reimplemented from oomph::Problem.

121 {}

◆ actions_before_newton_solve() [2/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::actions_before_newton_solve ( )
inlinevirtual

Update the problem specs before solve: (empty)

Reimplemented from oomph::Problem.

125 {}

◆ apply_boundary_conditions() [1/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::apply_boundary_conditions
private

Helper function to apply boundary conditions.

530 {
531 
532 
533  ofstream pin_file;
534  pin_file.open("pinned_nodes.dat");
535 
536  // Identify boundary ids of pinned nodes
537 
538 
539  Vector<unsigned> pinned_boundary_id;
540  for (unsigned ibound=First_disk_boundary_id;
541  ibound<=Last_disk_boundary_id;ibound++)
542  {
543  pinned_boundary_id.push_back(ibound);
544  }
545  for (unsigned ibound=First_disk_with_torus_boundary_id;
546  ibound<=Last_disk_with_torus_boundary_id;ibound++)
547  {
548  pinned_boundary_id.push_back(ibound);
549  }
550  for (unsigned ibound=First_disk_with_layers_boundary_id;
551  ibound<=Last_disk_with_layers_boundary_id;ibound++)
552  {
553  pinned_boundary_id.push_back(ibound);
554  }
555  for (unsigned ibound=First_boundary_id_for_outer_boundary;
556  ibound<First_boundary_id_for_outer_boundary+6;ibound++)
557  {
558  pinned_boundary_id.push_back(ibound);
559  }
560 
561  // Loop over pinned boundaries
562  unsigned num_pin_bnd=pinned_boundary_id.size();
563  for (unsigned bnd=0;bnd<num_pin_bnd;bnd++)
564  {
565  unsigned ibound=pinned_boundary_id[bnd];
566  unsigned num_nod= Bulk_mesh_pt->nboundary_node(ibound);
567  if (num_nod==0)
568  {
569  std::ostringstream error_message;
570  error_message << "No boundary nodes on boundary "
571  << ibound << "! Something's gone wrong!\n";
572  throw OomphLibError(error_message.str(),
575  }
576  for (unsigned inod=0;inod<num_nod;inod++)
577  {
578  Bulk_mesh_pt->boundary_node_pt(ibound,inod)->pin(0);
579  Vector<double> x(3);
580  x[0]=Bulk_mesh_pt->boundary_node_pt(ibound,inod)->x(0);
581  x[1]=Bulk_mesh_pt->boundary_node_pt(ibound,inod)->x(1);
582  x[2]=Bulk_mesh_pt->boundary_node_pt(ibound,inod)->x(2);
583 
584  // Zero BC on outer boundary; unit BC elsewhere
585  double value=0.0;
586  if ((ibound>=First_disk_with_torus_boundary_id)&&
588  {
589  value=1.0;
590  }
591  if ((ibound>=First_disk_boundary_id)&&
592  (ibound<=Last_disk_boundary_id))
593  {
594  value=1.0;
595  }
596  if ((ibound>=First_disk_with_layers_boundary_id)&&
598  {
599  value=1.0;
600  }
601 
602  Bulk_mesh_pt->boundary_node_pt(ibound,inod)->set_value(0,value);
603  pin_file << x[0] << " "
604  << x[1] << " "
605  << x[2] << " "
606  << std::endl;
607  }
608  }
609 
610  pin_file.close();
611 
612 
613 
614 } // end set bc
Definition: oomph_definitions.h:222
squared absolute value
Definition: GlobalFunctions.h:87
list x
Definition: plotDoE.py:28
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Eigen::value, and plotDoE::x.

◆ apply_boundary_conditions() [2/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::apply_boundary_conditions ( )
private

Helper function to apply boundary conditions.

◆ complete_problem_setup() [1/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::complete_problem_setup
private

Apply BCs and make elements functional.

Complete problem setup.

520 {
521  // Apply bcs
523 }
void apply_boundary_conditions()
Helper function to apply boundary conditions.
Definition: curved_facet_bounded_tetmesh.cc:529

◆ complete_problem_setup() [2/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::complete_problem_setup ( )
private

Apply BCs and make elements functional.

◆ doc_solution() [1/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::doc_solution ( const unsigned &  nplot,
DocInfo &  doc_info 
)

Doc the solution.

so if it's very large it's BAAAAAD)

624 {
625 
626 
627  bool do_bulk_output=true;
628  if (CommandLineArgs::command_line_flag_has_been_set("--suppress_bulk_output"))
629  {
630  do_bulk_output=false;
631  }
632 
633  ofstream some_file;
634  ofstream some_file2;
635  ofstream face_some_file;
636  ofstream coarse_some_file;
637  char filename[100];
638 
639 
640  // Doc mesh quality (Ratio of max. edge length to min. height,
642  sprintf(filename,"%s/mesh_quality%i.dat",
643  doc_info.directory().c_str(),
644  doc_info.number());
645  ofstream quality_file;
646  quality_file.open(filename);
647  if (do_bulk_output) Bulk_mesh_pt->assess_mesh_quality(quality_file);
648  quality_file.close();
649 
650 
651  // Output elements adjacent to outer boundary
652  //-------------------------------------------
653  sprintf(filename,"%s/elements_next_to_outer_boundary%i.dat",
654  doc_info.directory().c_str(),
655  doc_info.number());
656  some_file.open(filename);
657  for (unsigned ibound=First_boundary_id_for_outer_boundary;
658  ibound<First_boundary_id_for_outer_boundary+6;ibound++)
659  {
660  unsigned n_el=Bulk_mesh_pt->nboundary_element(ibound);
661  for (unsigned e=0;e<n_el;e++)
662  {
663  if (do_bulk_output)
664  {
665  Bulk_mesh_pt->boundary_element_pt(ibound,e)->
666  output(some_file,nplot);
667  }
668  }
669  }
670  some_file.close();
671 
672 
673  // Output boundary coordinates on outer boundary
674  //-----------------------------------------------
675  sprintf(filename,"%s/boundary_coordinates_outer_boundary%i.dat",
676  doc_info.directory().c_str(),
677  doc_info.number());
678  some_file.open(filename);
679  for (unsigned ibound=First_boundary_id_for_outer_boundary;
680  ibound<First_boundary_id_for_outer_boundary+6;ibound++)
681  {
682  Bulk_mesh_pt->Mesh::template
683  doc_boundary_coordinates<ELEMENT>(ibound,some_file);
684  }
685  some_file.close();
686 
687  // Output boundary coordinates on outer boundary
688  //-----------------------------------------------
689  unsigned n_b=Bulk_mesh_pt->nboundary();
690  oomph_info << "number of boundaries in bulk mesh: " << n_b << std::endl;
691  sprintf(filename,"%s/boundary_coordinates%i.dat",
692  doc_info.directory().c_str(),
693  doc_info.number());
694  some_file.open(filename);
695  for (unsigned ibound=0;ibound<n_b;ibound++)
696  {
697  if (Bulk_mesh_pt->boundary_coordinate_exists(ibound))
698  {
699  Bulk_mesh_pt->Mesh::template
700  doc_boundary_coordinates<ELEMENT>(ibound,some_file);
701  }
702  }
703  some_file.close();
704 
705 
706  // Output boundaries
707  //------------------
708  sprintf(filename,"%s/boundaries%i.dat",doc_info.directory().c_str(),
709  doc_info.number());
710  some_file.open(filename);
711  Bulk_mesh_pt->output_boundaries(some_file);
712  some_file.close();
713 
714 
715  // Output volumes and areas
716  //-------------------------
717  std::ofstream volumes_and_areas_file;
718  sprintf(filename,"%s/volumes%i.dat",doc_info.directory().c_str(),
719  doc_info.number());
720  volumes_and_areas_file.open(filename);
721 
722 
723  // Output bulk elements in torus region
724  //-------------------------------------
725  double volume_in_torus_region=0.0;
726  sprintf(filename,"%s/soln_in_torus_region%i.dat",doc_info.directory().c_str(),
727  doc_info.number());
728  some_file.open(filename);
729  unsigned region_id=Torus_region_id;
730  unsigned n_el=Bulk_mesh_pt->nregion_element(region_id);
731  for (unsigned e=0;e<n_el;e++)
732  {
733  if (do_bulk_output)
734  {
735  Bulk_mesh_pt->region_element_pt(region_id,e)->output(some_file,nplot);
736  }
737  volume_in_torus_region+=Bulk_mesh_pt->
738  region_element_pt(region_id,e)->size();
739  }
740  some_file.close();
741 
742  // Output bulk elements above disk
743  //--------------------------------
744  double volume_in_above_disk_region=0.0;
745  sprintf(filename,"%s/soln_in_above_disk_region%i.dat",
746  doc_info.directory().c_str(),
747  doc_info.number());
748  some_file.open(filename);
749  region_id=Above_disk_region_id;
750  n_el=Bulk_mesh_pt->nregion_element(region_id);
751  for (unsigned e=0;e<n_el;e++)
752  {
753  if (do_bulk_output)
754  {
755  Bulk_mesh_pt->region_element_pt(region_id,e)->output(some_file,nplot);
756  }
757  volume_in_above_disk_region+=Bulk_mesh_pt->
758  region_element_pt(region_id,e)->size();
759  }
760  some_file.close();
761 
762 
763  // Output bulk elements below disk
764  //--------------------------------
765  double volume_in_below_disk_region=0.0;
766  sprintf(filename,"%s/soln_in_below_disk_region%i.dat",
767  doc_info.directory().c_str(),
768  doc_info.number());
769  some_file.open(filename);
770  region_id=Above_disk_region_id;
771  n_el=Bulk_mesh_pt->nregion_element(region_id);
772  for (unsigned e=0;e<n_el;e++)
773  {
774  if (do_bulk_output)
775  {
776  Bulk_mesh_pt->region_element_pt(region_id,e)->output(some_file,nplot);
777  }
778  volume_in_below_disk_region+=Bulk_mesh_pt->
779  region_element_pt(region_id,e)->size();
780  }
781  some_file.close();
782 
783  // Output bulk elements in region 0
784  //---------------------------------
785  double volume_in_region0=0.0;
786  sprintf(filename,"%s/soln_in_zero_region%i.dat",doc_info.directory().c_str(),
787  doc_info.number());
788  some_file.open(filename);
789  region_id=0;
790  n_el=Bulk_mesh_pt->nregion_element(region_id);
791  for (unsigned e=0;e<n_el;e++)
792  {
793  if (do_bulk_output)
794  {
795  Bulk_mesh_pt->region_element_pt(region_id,e)->output(some_file,nplot);
796  }
797  volume_in_region0+= Bulk_mesh_pt->region_element_pt(region_id,e)->size();
798  }
799  some_file.close();
800 
801 
802  // Get total mesh volume
803  double total_mesh_volume=0.0;
804  n_el=Bulk_mesh_pt->nelement();
805  for (unsigned e=0;e<n_el;e++)
806  {
807  total_mesh_volume+=Bulk_mesh_pt->finite_element_pt(e)->size();
808  }
809 
810 
811  // Check volumes:
812  oomph_info << "Error in total region volume balance: " <<
813  abs(total_mesh_volume-(volume_in_above_disk_region+
814  volume_in_below_disk_region+
815  volume_in_torus_region+
816  volume_in_region0))/total_mesh_volume*100.0
817  << " % " << std::endl;
818 
819  oomph_info << "Error in above/below disk region volume balance: " <<
820  abs(volume_in_above_disk_region-volume_in_below_disk_region)/
821  volume_in_above_disk_region*100.0 << " % " << std::endl;
822 
823 
824  // Attach face elements to boundary of torus
825  //------------------------------------------
826  sprintf(filename,"%s/face_elements_on_boundary_of_torus%i.dat",
827  doc_info.directory().c_str(),
828  doc_info.number());
829  some_file.open(filename);
830  double torus_surface_area=0.0;
831  region_id=Torus_region_id;
832  for (unsigned b=First_torus_boundary_id;
834  {
835  unsigned nel=Bulk_mesh_pt->nboundary_element_in_region(b,region_id);
836  for (unsigned e=0;e<nel;e++)
837  {
838  FiniteElement* el_pt=
839  Bulk_mesh_pt->boundary_element_in_region_pt(b,region_id,e);
840 
841  // What is the index of the face of the bulk element at the boundary
842  int face_index = Bulk_mesh_pt->
843  face_index_at_boundary_in_region(b,region_id,e);
844 
845  // Build the corresponding flux jump element
846  PoissonFluxElement<ELEMENT>* flux_element_pt
847  = new PoissonFluxElement<ELEMENT>(el_pt,face_index);
848 
849  // Get surface area
850  torus_surface_area+=flux_element_pt->size();
851 
852  // Output
853  flux_element_pt->output(some_file);
854 
855  // ...and we're done!
856  delete flux_element_pt;
857  }
858  }
859  some_file.close();
860  oomph_info << "Torus surface area: " << torus_surface_area << std::endl;
861 
862 
863  // Attach face elements to part of disk inside torus
864  //--------------------------------------------------
865  sprintf(filename,"%s/face_elements_on_disk_in_torus%i.dat",
866  doc_info.directory().c_str(),
867  doc_info.number());
868  some_file.open(filename);
869  double disk_in_torus_surface_area=0.0;
870  region_id=Torus_region_id;
872  for (unsigned i=0;i<nb;i++)
873  {
875  unsigned nel=Bulk_mesh_pt->nboundary_element_in_region(b,region_id);
876  for (unsigned e=0;e<nel;e++)
877  {
878  FiniteElement* el_pt=
879  Bulk_mesh_pt->boundary_element_in_region_pt(b,region_id,e);
880 
881  // What is the index of the face of the bulk element at the boundary
882  int face_index = Bulk_mesh_pt->
883  face_index_at_boundary_in_region(b,region_id,e);
884 
885  // Build the corresponding flux jump element
886  PoissonFluxElement<ELEMENT>* flux_element_pt
887  = new PoissonFluxElement<ELEMENT>(el_pt,face_index);
888 
889  // Get surface area
890  disk_in_torus_surface_area+=flux_element_pt->size();
891 
892  // Output
893  flux_element_pt->output(some_file);
894 
895  // ...and we're done!
896  delete flux_element_pt;
897  }
898  }
899  some_file.close();
900  oomph_info << "Disk in torus surface area: "
901  << disk_in_torus_surface_area << std::endl;
902 
903 
904  // Attach face elements to part of disk outside torus
905  //--------------------------------------------------
906  sprintf(filename,"%s/face_elements_on_disk_outside_torus%i.dat",
907  doc_info.directory().c_str(),
908  doc_info.number());
909  some_file.open(filename);
910  double disk_outside_torus_surface_area=0.0;
911  region_id=0;
913  for (unsigned i=0;i<nb;i++)
914  {
916  unsigned nel=Bulk_mesh_pt->nboundary_element_in_region(b,region_id);
917  for (unsigned e=0;e<nel;e++)
918  {
919  FiniteElement* el_pt=
920  Bulk_mesh_pt->boundary_element_in_region_pt(b,region_id,e);
921 
922  // What is the index of the face of the bulk element at the boundary
923  int face_index = Bulk_mesh_pt->
924  face_index_at_boundary_in_region(b,region_id,e);
925 
926  // Build the corresponding flux jump element
927  PoissonFluxElement<ELEMENT>* flux_element_pt
928  = new PoissonFluxElement<ELEMENT>(el_pt,face_index);
929 
930  // Get surface area
931  disk_outside_torus_surface_area+=flux_element_pt->size();
932 
933  // Output
934  flux_element_pt->output(some_file);
935 
936  // ...and we're done!
937  delete flux_element_pt;
938  }
939  }
940  some_file.close();
941  oomph_info << "Disk outside torus surface area: "
942  << disk_outside_torus_surface_area << std::endl;
943 
944  oomph_info << "Total surface area of disk with torus: "
945  << disk_in_torus_surface_area+disk_outside_torus_surface_area
946  << std::endl;
947 
948 
949  // Attach face elements to free-standing disk
950  //-------------------------------------------
951  sprintf(filename,"%s/face_elements_on_free_standing_disk%i.dat",
952  doc_info.directory().c_str(),
953  doc_info.number());
954  some_file.open(filename);
955  double free_standing_disk_surface_area=0.0;
956  region_id=0;
957  for (unsigned b=First_disk_boundary_id;
959  {
960  unsigned nel=Bulk_mesh_pt->nboundary_element_in_region(b,region_id);
961  for (unsigned e=0;e<nel;e++)
962  {
963  FiniteElement* el_pt=
964  Bulk_mesh_pt->boundary_element_in_region_pt(b,region_id,e);
965 
966  // What is the index of the face of the bulk element at the boundary
967  int face_index = Bulk_mesh_pt->
968  face_index_at_boundary_in_region(b,region_id,e);
969 
970  // Build the corresponding flux jump element
971  PoissonFluxElement<ELEMENT>* flux_element_pt
972  = new PoissonFluxElement<ELEMENT>(el_pt,face_index);
973 
974  // Get surface area
975  free_standing_disk_surface_area+=flux_element_pt->size();
976 
977  // Output
978  flux_element_pt->output(some_file);
979 
980  // ...and we're done!
981  delete flux_element_pt;
982  }
983  }
984  some_file.close();
985  oomph_info << "Free-standing disk surface area: "
986  << free_standing_disk_surface_area << std::endl;
987 
988 
989  // Attach face elements to disk surrounded by layers: above
990  //---------------------------------------------------------
991  sprintf(filename,"%s/face_elements_on_disk_upper_layer%i.dat",
992  doc_info.directory().c_str(),
993  doc_info.number());
994  some_file.open(filename);
995  double disk_upper_layer_surface_area=0.0;
996  region_id=Above_disk_region_id;
999  {
1000  unsigned nel=Bulk_mesh_pt->nboundary_element_in_region(b,region_id);
1001  for (unsigned e=0;e<nel;e++)
1002  {
1003  FiniteElement* el_pt=
1004  Bulk_mesh_pt->boundary_element_in_region_pt(b,region_id,e);
1005 
1006  // What is the index of the face of the bulk element at the boundary
1007  int face_index = Bulk_mesh_pt->
1008  face_index_at_boundary_in_region(b,region_id,e);
1009 
1010  // Build the corresponding flux jump element
1011  PoissonFluxElement<ELEMENT>* flux_element_pt
1012  = new PoissonFluxElement<ELEMENT>(el_pt,face_index);
1013 
1014  // Get surface area
1015  disk_upper_layer_surface_area+=flux_element_pt->size();
1016 
1017  // Output
1018  flux_element_pt->output(some_file);
1019 
1020  // ...and we're done!
1021  delete flux_element_pt;
1022  }
1023  }
1024  some_file.close();
1025  oomph_info << "Disk upper layer surface area: "
1026  << disk_upper_layer_surface_area << std::endl;
1027 
1028 
1029  // Attach face elements to disk surrounded by layers: below
1030  //---------------------------------------------------------
1031  sprintf(filename,"%s/face_elements_on_disk_lower_layer%i.dat",
1032  doc_info.directory().c_str(),
1033  doc_info.number());
1034  some_file.open(filename);
1035  double disk_lower_layer_surface_area=0.0;
1036  region_id=Below_disk_region_id;
1037  for (unsigned b=First_disk_with_layers_boundary_id;
1039  {
1040  unsigned nel=Bulk_mesh_pt->nboundary_element_in_region(b,region_id);
1041  for (unsigned e=0;e<nel;e++)
1042  {
1043  FiniteElement* el_pt=
1044  Bulk_mesh_pt->boundary_element_in_region_pt(b,region_id,e);
1045 
1046  // What is the index of the face of the bulk element at the boundary
1047  int face_index = Bulk_mesh_pt->
1048  face_index_at_boundary_in_region(b,region_id,e);
1049 
1050  // Build the corresponding flux jump element
1051  PoissonFluxElement<ELEMENT>* flux_element_pt
1052  = new PoissonFluxElement<ELEMENT>(el_pt,face_index);
1053 
1054  // Get surface area
1055  disk_lower_layer_surface_area+=flux_element_pt->size();
1056 
1057  // Output
1058  flux_element_pt->output(some_file);
1059 
1060  // ...and we're done!
1061  delete flux_element_pt;
1062  }
1063  }
1064  some_file.close();
1065  oomph_info << "Disk lower layer surface area: "
1066  << disk_lower_layer_surface_area << std::endl;
1067 
1068 
1069  // Doc volumes and areas
1070  volumes_and_areas_file << volume_in_above_disk_region << " "
1071  << volume_in_below_disk_region << " "
1072  << volume_in_torus_region << " "
1073  << total_mesh_volume << " "
1074  << volume_in_region0 << " "
1075  << torus_surface_area << " "
1076  << disk_in_torus_surface_area << " "
1077  << disk_outside_torus_surface_area << " "
1078  << disk_upper_layer_surface_area << " "
1079  << disk_lower_layer_surface_area << " "
1080  << free_standing_disk_surface_area << " "
1081  << std::endl;
1082  volumes_and_areas_file.close();
1083 
1084 
1085  // Output solution
1086  //----------------
1087  sprintf(filename,"%s/soln%i.dat",doc_info.directory().c_str(),
1088  doc_info.number());
1089  some_file.open(filename);
1090  if (do_bulk_output) Bulk_mesh_pt->output(some_file,nplot);
1091  some_file.close();
1092 
1093  // Output solution showing element outlines
1094  //-----------------------------------------
1095  sprintf(filename,"%s/coarse_soln%i.dat",doc_info.directory().c_str(),
1096  doc_info.number());
1097  some_file.open(filename);
1098  if (do_bulk_output) Bulk_mesh_pt->output(some_file,2);
1099  some_file.close();
1100 
1101 
1102  // Get norm of solution
1103  //---------------------
1104  sprintf(filename,"%s/norm%i.dat",doc_info.directory().c_str(),
1105  doc_info.number());
1106  some_file.open(filename);
1107  double norm_soln=0.0;
1108  Bulk_mesh_pt->compute_norm(norm_soln);
1109  some_file << sqrt(norm_soln) << std::endl;
1110  oomph_info << "Norm of computed solution: " << sqrt(norm_soln) << endl;
1111  some_file.close();
1112 
1113 } // end of doc
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Scalar * b
Definition: benchVecAdd.cpp:17
std::string directory() const
Output directory.
Definition: oomph_utilities.h:524
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554
Definition: elements.h:1313
double size() const
Definition: elements.cc:4290
Definition: poisson_flux_elements.h:51
void output(std::ostream &outfile)
Output function.
Definition: poisson_flux_elements.h:116
int nb
Definition: level2_impl.h:286
string filename
Definition: MergeRestartFiles.py:39
bool command_line_flag_has_been_set(const std::string &flag)
Definition: oomph_utilities.cc:501
void output(std::ostream &outfile, const unsigned &nplot)
Overload output function.
Definition: overloaded_element_body.h:490

References abs(), b, oomph::CommandLineArgs::command_line_flag_has_been_set(), oomph::DocInfo::directory(), e(), MergeRestartFiles::filename, i, nb, oomph::DocInfo::number(), oomph::oomph_info, oomph::PoissonFluxElement< ELEMENT >::output(), output(), oomph::FiniteElement::size(), and sqrt().

◆ doc_solution() [2/2]

template<class ELEMENT >
void TetmeshPoissonProblem< ELEMENT >::doc_solution ( const unsigned &  nplot,
DocInfo &  doc_info 
)

Doc the solution.

Member Data Documentation

◆ Above_disk_region_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Above_disk_region_id
private

Region ID for layer above disk.

◆ Below_disk_region_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Below_disk_region_id
private

Region ID for layer below disk.

◆ Bulk_mesh_pt

template<class ELEMENT >
RefineableGmshTetMesh< ELEMENT > * TetmeshPoissonProblem< ELEMENT >::Bulk_mesh_pt
private

Bulk mesh.

◆ Cube_region_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Cube_region_id
private

Region ID for cube region.

◆ Exact_bounded_volume

template<class ELEMENT >
double TetmeshPoissonProblem< ELEMENT >::Exact_bounded_volume
private

Sanity check: Exact bounded volume.

◆ Exact_volume_of_hole

template<class ELEMENT >
double TetmeshPoissonProblem< ELEMENT >::Exact_volume_of_hole
private

Sanity check: Exact volume of hole.

◆ Exact_volume_of_internal_region

template<class ELEMENT >
double TetmeshPoissonProblem< ELEMENT >::Exact_volume_of_internal_region
private

Sanity check: Exact volume of internal region.

◆ First_boundary_id_for_outer_boundary

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::First_boundary_id_for_outer_boundary
private

First boundary ID for outer boundary.

◆ First_cube_region_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::First_cube_region_boundary_id
private

First boundary ID for cube region.

◆ First_disk_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::First_disk_boundary_id
private

First boundary ID for warped disk.

◆ First_disk_with_layers_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::First_disk_with_layers_boundary_id
private

First boundary ID for disk with layers.

◆ First_disk_with_torus_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::First_disk_with_torus_boundary_id
private

First boundary ID for disk that is surrounded by torus.

◆ First_hollow_cube_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::First_hollow_cube_boundary_id
private

First boundary ID for hollow cube.

◆ First_torus_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::First_torus_boundary_id
private

First boundary ID for torus surrounding edge of disk.

◆ Inner_boundary_pt

template<class ELEMENT >
Vector< TetMeshFacetedSurface * > TetmeshPoissonProblem< ELEMENT >::Inner_boundary_pt
private

Inner boundary.

◆ Internal_embedded_rectangle_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Internal_embedded_rectangle_boundary_id
private

Boundary ID for rectangular facet embedded in region.

◆ Internal_rectangle_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Internal_rectangle_boundary_id
private

Boundary ID for rectangular facet in main volume.

◆ Last_disk_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Last_disk_boundary_id
private

Last boundary ID for warped disk.

◆ Last_disk_with_layers_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Last_disk_with_layers_boundary_id
private

Last boundary ID for disk with layers.

◆ Last_disk_with_torus_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Last_disk_with_torus_boundary_id
private

Last boundary ID for disk that is surrounded by torus.

◆ Last_torus_boundary_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Last_torus_boundary_id
private

Last boundary ID for torus surrounding edge of disk.

◆ One_based_boundary_id_for_disk_outside_torus

template<class ELEMENT >
Vector<unsigned> TetmeshPoissonProblem< ELEMENT >::One_based_boundary_id_for_disk_outside_torus
private

Storage for one-based boundary IDs for boundaries on disk outside the torus region

◆ One_based_boundary_id_for_disk_within_torus

template<class ELEMENT >
Vector<unsigned> TetmeshPoissonProblem< ELEMENT >::One_based_boundary_id_for_disk_within_torus
private

Storage for one-based boundary IDs for boundaries on disk within the torus region

◆ Outer_boundary_pt

template<class ELEMENT >
TetMeshFacetedClosedSurface * TetmeshPoissonProblem< ELEMENT >::Outer_boundary_pt
private

Storage for the outer boundary object.

◆ Torus_region_id

template<class ELEMENT >
unsigned TetmeshPoissonProblem< ELEMENT >::Torus_region_id
private

Region ID for torus around edge of warped disk.


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