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
 
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 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...
 
TetMeshFacetedClosedSurfaceOuter_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< unsignedOne_based_boundary_id_for_disk_within_torus
 
Vector< unsignedOne_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)
 
doubledof_derivative (const unsigned &i)
 
doubledof_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 *, 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 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: