UnsteadyHeatMeltProblem< ELEMENT > Class Template Reference

UnsteadyHeat problem. More...

+ Inheritance diagram for UnsteadyHeatMeltProblem< ELEMENT >:

Public Member Functions

 UnsteadyHeatMeltProblem ()
 Constructor. More...
 
 ~UnsteadyHeatMeltProblem ()
 Destructor (empty) More...
 
void actions_after_newton_solve ()
 Update the problem specs after solve (empty) More...
 
void actions_before_newton_solve ()
 Update the problem specs before solve (empty) More...
 
void actions_before_adapt ()
 Actions before adapt: wipe flux elements. More...
 
void actions_after_adapt ()
 
void doc_solution ()
 Doc the solution. More...
 
double global_temporal_error_norm ()
 Dummy global error norm for adaptive time-stepping. 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 create_flux_elements ()
 Create flux elements. More...
 
void delete_flux_elements ()
 Delete flux elements. More...
 
void complete_problem_setup ()
 

Private Attributes

RefineableSolidTriangleMesh< ELEMENT > * Bulk_mesh_pt
 Pointers to specific mesh. More...
 
MeshSurface_melt_mesh_pt
 Pointer to the "surface" mesh. More...
 
unsigned Melt_boundary_id
 ID of melt boundary. More...
 
unsigned Bottom_boundary_id
 ID of bottom boundary. More...
 
unsigned Left_boundary_id
 ID of left boundary. More...
 
unsigned Right_boundary_id
 ID of right boundary. More...
 
ofstream Trace_file
 Trace file. More...
 
DocInfo Doc_info
 
BackupMeshForProjection< TElement< 1, 3 > > * Backed_up_surface_melt_mesh_pt
 

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 ()
 
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 UnsteadyHeatMeltProblem< ELEMENT >

UnsteadyHeat problem.

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

Constructor & Destructor Documentation

◆ UnsteadyHeatMeltProblem()

template<class ELEMENT >
UnsteadyHeatMeltProblem< ELEMENT >::UnsteadyHeatMeltProblem

Constructor.

Constructor for UnsteadyHeat problem in square domain.

456 {
457 
458  // Output directory
459  Doc_info.set_directory("RESLT");
460 
461  // Output number
462  Doc_info.number()=0;
463 
464  // Open trace file
465  Trace_file.open("RESLT/trace.dat");
466 
467  // Allow for crap initial guess
468  Problem::Max_residuals=10000.0;
470 
471  // Allocate the timestepper -- this constructs the Problem's
472  // time object with a sufficient amount of storage to store the
473  // previous timsteps.
475 
476  // Pointer to the closed curve that defines the outer boundary
477  TriangleMeshClosedCurve* closed_curve_pt=0;
478 
479  // Build outer boundary as Polygon
480 
481  // The boundary is bounded by five distinct boundaries, each
482  // represented by its own polyline
483  Vector<TriangleMeshCurveSection*> boundary_polyline_pt(4);
484 
485  // Vertex coordinates on boundary
486  Vector<Vector<double> > bound_coords(2);
487 
488  // Left boundary
489  bound_coords[0].resize(2);
490  bound_coords[0][0]=0.0;
491  bound_coords[0][1]=1.0;
492 
493  bound_coords[1].resize(2);
494  bound_coords[1][0]=0.0;
495  bound_coords[1][1]=0.0;
496 
497  // Build the boundary polyline
499  boundary_polyline_pt[0]=new TriangleMeshPolyLine(bound_coords,
501 
502  // Bottom boundary
503  bound_coords[0].resize(2);
504  bound_coords[0][0]=0.0;
505  bound_coords[0][1]=0.0;
506 
507  bound_coords[1].resize(2);
508  bound_coords[1][0]=1.0;
509  bound_coords[1][1]=0.0;
510 
511  // Build the boundary polyline
513  boundary_polyline_pt[1]=new TriangleMeshPolyLine(bound_coords,
515 
516 
517  // Right boundary
518  bound_coords[0].resize(2);
519  bound_coords[0][0]=1.0;
520  bound_coords[0][1]=0.0;
521 
522  bound_coords[1].resize(2);
523  bound_coords[1][0]=1.0;
524  bound_coords[1][1]=1.0;
525 
526  // Build the boundary polyline
528  boundary_polyline_pt[2]=new TriangleMeshPolyLine(bound_coords,
530 
531  // Flux boundary
532  bound_coords[0].resize(2);
533  bound_coords[0][0]=1.0;
534  bound_coords[0][1]=1.0;
535 
536  bound_coords[1].resize(2);
537  bound_coords[1][0]=0.0;
538  bound_coords[1][1]=1.0;
539 
540  // Build boundary poly line
542  boundary_polyline_pt[3]=new TriangleMeshPolyLine(bound_coords,
544 
545  // Create the triangle mesh polygon for outer boundary
546  //----------------------------------------------------
547  TriangleMeshPolygon *outer_polygon =
548  new TriangleMeshPolygon(boundary_polyline_pt);
549 
550  // Set the pointer
551  closed_curve_pt = outer_polygon;
552 
553  // Now build the mesh
554  //===================
555 
556  // Use the TriangleMeshParameters object for helping on the manage of the
557  // TriangleMesh parameters
558  TriangleMeshParameters triangle_mesh_parameters(closed_curve_pt);
559 
560  // Specify the maximum area element
561  double uniform_element_area=0.002;
562  triangle_mesh_parameters.element_area() = uniform_element_area;
563 
564  // Create the mesh
565  Bulk_mesh_pt=new RefineableSolidTriangleMesh<ELEMENT>(triangle_mesh_parameters,
566  time_stepper_pt());
567 
568  // Set error estimator for bulk mesh
570  Bulk_mesh_pt->spatial_error_estimator_pt()=error_estimator_pt;
571 
572  // Set element size limits
573  Bulk_mesh_pt->max_element_size()=0.2;
574  Bulk_mesh_pt->min_element_size()=0.0002; // hierher 0.002;
575 
576 
577  // Create the surface mesh as an empty mesh
579 
580  // Build 'em
582 
583  // Set boundary condition and complete the build of all elements
585 
586  // Add the two sub meshes to the problem
589 
590  // Combine all submeshes into a single global Mesh
592 
593  // Set the initial conditions
594  unsigned nnod = Bulk_mesh_pt->nnode();
595  for(unsigned j=0;j<nnod;j++)
596  {
597  Bulk_mesh_pt->node_pt(j)->set_value(0,ExactSolution::U0);
598  }
599 
600  // Do equation numbering
601  cout <<"Number of equations: " << assign_eqn_numbers() << std::endl;
602 
603 } // end of constructor
RefineableSolidTriangleMesh< ELEMENT > * Bulk_mesh_pt
Pointers to specific mesh.
Definition: melt.cc:420
ofstream Trace_file
Trace file.
Definition: melt.cc:438
unsigned Right_boundary_id
ID of right boundary.
Definition: melt.cc:435
Mesh * Surface_melt_mesh_pt
Pointer to the "surface" mesh.
Definition: melt.cc:423
unsigned Melt_boundary_id
ID of melt boundary.
Definition: melt.cc:426
void complete_problem_setup()
Definition: melt.cc:309
unsigned Left_boundary_id
ID of left boundary.
Definition: melt.cc:432
unsigned Bottom_boundary_id
ID of bottom boundary.
Definition: melt.cc:429
void create_flux_elements()
Create flux elements.
Definition: melt.cc:261
DocInfo Doc_info
Definition: melt.cc:441
void set_directory(const std::string &directory)
Definition: oomph_utilities.cc:298
unsigned & number()
Number used (e.g.) for labeling output files.
Definition: oomph_utilities.h:554
Definition: mesh.h:67
void add_time_stepper_pt(TimeStepper *const &time_stepper_pt)
Definition: problem.cc:1545
unsigned add_sub_mesh(Mesh *const &mesh_pt)
Definition: problem.h:1330
void build_global_mesh()
Definition: problem.cc:1493
unsigned long assign_eqn_numbers(const bool &assign_local_eqn_numbers=true)
Definition: problem.cc:1989
TimeStepper *& time_stepper_pt()
Definition: problem.h:1524
Base class defining a closed curve for the Triangle mesh generation.
Definition: unstructured_two_d_mesh_geometry_base.h:1339
Definition: triangle_mesh.template.h:94
Class defining a polyline for use in Triangle Mesh generation.
Definition: unstructured_two_d_mesh_geometry_base.h:868
Class defining a closed polygon for the Triangle mesh generation.
Definition: unstructured_two_d_mesh_geometry_base.h:1451
Definition: oomph-lib/src/generic/Vector.h:58
Definition: error_estimator.h:266
double U0
Constant/initial temperature.
Definition: circular_boulder_melt.cc:99
Z2ErrorEstimator * error_estimator_pt
Definition: MortaringCantileverCompareToNonMortaring.cpp:190
unsigned Max_newton_iterations
Maximum number of newton iterations.
Definition: elements.cc:1654
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References GlobalParameters::Doc_info, oomph::TriangleMeshParameters::element_area(), MeshRefinement::error_estimator_pt, j, oomph::Locate_zeta_helpers::Max_newton_iterations, oomph::DocInfo::number(), oomph::DocInfo::set_directory(), oomph::Problem_Parameter::Trace_file, and ExactSolution::U0.

◆ ~UnsteadyHeatMeltProblem()

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

Destructor (empty)

194 {}

Member Function Documentation

◆ actions_after_adapt()

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

Actions after adapt: Setup the problem again – remember that the mesh has been completely rebuilt and its element's don't have any pointers to source fcts etc. yet

Reimplemented from oomph::Problem.

221  {
222  // Create flux elements
224 
225  // Rebuild the Problem's global mesh from its various sub-meshes
227 
228  // Rebuild elements
230 
231  // Now project from backup of original contact mesh to new one
234 
235  // Wipe Lagrange multiplier pressure
236  unsigned n_element=Surface_melt_mesh_pt->nelement();
237  for (unsigned e=0;e<n_element;e++)
238  {
240  dynamic_cast<SurfaceMeltElement<ELEMENT>*>(
243  }
244 
245  // Kill backed up mesh
247  Backed_up_surface_melt_mesh_pt=0; // hierher add to constructor
248 
249  }
Array< double, 1, 3 > e(1./3., 0.5, 2.)
BackupMeshForProjection< TElement< 1, 3 > > * Backed_up_surface_melt_mesh_pt
Definition: melt.cc:445
void project_onto_new_mesh(Mesh *new_mesh_pt)
Definition: face_mesh_project.h:394
GeneralisedElement *& element_pt(const unsigned long &e)
Return pointer to element e.
Definition: mesh.h:448
unsigned long nelement() const
Return number of elements in the mesh.
Definition: mesh.h:590
void rebuild_global_mesh()
Definition: problem.cc:1533
Definition: heat_transfer_and_melt_elements.h:2249
void set_lagrange_multiplier_pressure_to_zero()
Definition: heat_transfer_and_melt_elements.h:2433

References e(), and oomph::SurfaceMeltElement< ELEMENT >::set_lagrange_multiplier_pressure_to_zero().

◆ actions_after_newton_solve()

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

Update the problem specs after solve (empty)

Reimplemented from oomph::Problem.

197 {}

◆ actions_before_adapt()

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

Actions before adapt: wipe flux elements.

Reimplemented from oomph::Problem.

204  {
205  // Make backup of surface mesh
208 
209  // Kill the elements and wipe surface mesh
211 
212  // Rebuild the Problem's global mesh from its various sub-meshes
214  }
void delete_flux_elements()
Delete flux elements.
Definition: melt.cc:290
Definition: face_mesh_project.h:223

◆ actions_before_newton_solve()

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

Update the problem specs before solve (empty)

Reimplemented from oomph::Problem.

200 {}

◆ complete_problem_setup()

template<class ELEMENT >
void UnsteadyHeatMeltProblem< ELEMENT >::complete_problem_setup ( )
inlineprivate

Helper function to (re-)set boundary condition and complete the build of all elements

310  {
311 
312  // Set (pseudo-)solid mechanics properties for all elements
313  //---------------------------------------------------------
314  unsigned n_element = Bulk_mesh_pt->nelement();
315  for(unsigned e=0;e<n_element;e++)
316  {
317  //Cast to a solid element
318  ELEMENT *el_pt = dynamic_cast<ELEMENT*>(Bulk_mesh_pt->element_pt(e));
319 
320  // Set the constitutive law
321  el_pt->constitutive_law_pt() =
323 
324  // Set density to zero
325  el_pt->lambda_sq_pt()=&ProblemParameters::Lambda_sq;
326 
327  // Disable inertia
328  el_pt->disable_inertia();
329 
330  // Set source function
331  el_pt->source_fct_pt() =
333  }
334 
335  // Apply boundary conditions for solid
336  //------------------------------------
337 
338  // Bottom: completely pinned
339  unsigned b=Bottom_boundary_id;
340  unsigned nnod=Bulk_mesh_pt->nboundary_node(b);
341  for (unsigned j=0;j<nnod;j++)
342  {
343  SolidNode* nod_pt=Bulk_mesh_pt->boundary_node_pt(b,j);
344  nod_pt->pin_position(0);
345  nod_pt->pin_position(1);
346  }
347 
348  // Sides: Symmetry bcs
350  nnod=Bulk_mesh_pt->nboundary_node(b);
351  for (unsigned j=0;j<nnod;j++)
352  {
353  SolidNode* nod_pt=Bulk_mesh_pt->boundary_node_pt(b,j);
354  nod_pt->pin_position(0);
355  }
357  nnod=Bulk_mesh_pt->nboundary_node(b);
358  for (unsigned j=0;j<nnod;j++)
359  {
360  SolidNode* nod_pt=Bulk_mesh_pt->boundary_node_pt(b,j);
361  nod_pt->pin_position(0);
362  }
363 
364  // No melting: Pin all solid positions and the Lagrange multipliers
365  if (CommandLineArgs::command_line_flag_has_been_set("--disable_melting"))
366  {
367  unsigned nnod=Bulk_mesh_pt->nnode();
368  for (unsigned j=0;j<nnod;j++)
369  {
370  SolidNode* nod_pt=Bulk_mesh_pt->node_pt(j);
371  nod_pt->pin_position(0);
372  nod_pt->pin_position(1);
373  unsigned nval=nod_pt->nvalue();
374  if (nval==3)
375  {
376  nod_pt->pin(1);
377  }
378  }
379  }
380 
381  // Assign the Lagrangian coordinates -- sensible
382  // because we've completely rebuilt the mesh
383  // and haven't copied across any Lagrange multipliers
384  Bulk_mesh_pt->set_lagrangian_nodal_coordinates();
385  n_element=Surface_melt_mesh_pt->nelement();
386  for (unsigned e=0;e<n_element;e++)
387  {
389  dynamic_cast<SurfaceMeltElement<ELEMENT>*>(
392  }
393 
394  // Loop over the flux elements to pass pointer to prescribed flux function
395  //------------------------------------------------------------------------
396  n_element=Surface_melt_mesh_pt->nelement();
397  for(unsigned e=0;e<n_element;e++)
398  {
399  // Upcast from GeneralisedElement to SurfaceMeltElement flux element
401  dynamic_cast<SurfaceMeltElement<ELEMENT>*>(
403 
404  // Pass validation flux
405  el_pt->flux_fct_pt()=
407 
408  // Set melt temperature
410 
411  // Suppress melting?
412  if (CommandLineArgs::command_line_flag_has_been_set("--disable_melt_flux"))
413  {
414  el_pt->disable_melting();
415  }
416  }
417  }
Scalar * b
Definition: benchVecAdd.cpp:17
void pin(const unsigned &i)
Pin the i-th stored variable.
Definition: nodes.h:385
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
Definition: nodes.h:483
Definition: nodes.h:1686
void pin_position(const unsigned &i)
Pin the nodal position.
Definition: nodes.h:1816
void disable_melting()
Switch off melting by pinning melt-rate dofs.
Definition: heat_transfer_and_melt_elements.h:2408
double *& melt_temperature_pt()
Pointer to (non-default) melt temperature.
Definition: heat_transfer_and_melt_elements.h:2402
UnsteadyHeatPrescribedFluxFctPt & flux_fct_pt()
Access function for the prescribed-flux function pointer.
Definition: heat_transfer_and_melt_elements.h:147
void prescribed_flux_for_unsteady_heat_validation(const double &t, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
Definition: circular_boulder_melt.cc:219
void get_source_for_unsteady_heat_validation(const double &t, const Vector< double > &x, double &source)
Source function to make it an exact solution.
Definition: circular_boulder_melt.cc:133
double Melt_temperature
Melt-temperature.
Definition: circular_boulder_melt.cc:67
double Lambda_sq
Timescale ratio (non-dim density)
Definition: unstructured_two_d_curved.cc:54
ConstitutiveLaw * Constitutive_law_pt
Pointer to constitutive law.
Definition: circular_boulder_melt.cc:76
bool command_line_flag_has_been_set(const std::string &flag)
Definition: oomph_utilities.cc:501

References b, oomph::CommandLineArgs::command_line_flag_has_been_set(), ProblemParameters::Constitutive_law_pt, oomph::SurfaceMeltElement< ELEMENT >::disable_melting(), e(), oomph::TemplateFreeUnsteadyHeatBaseFaceElement::flux_fct_pt(), ExactSolution::get_source_for_unsteady_heat_validation(), j, ProblemParameters::Lambda_sq, ProblemParameters::Melt_temperature, oomph::SurfaceMeltElement< ELEMENT >::melt_temperature_pt(), oomph::Data::nvalue(), oomph::Data::pin(), oomph::SolidNode::pin_position(), ExactSolution::prescribed_flux_for_unsteady_heat_validation(), and oomph::SurfaceMeltElement< ELEMENT >::set_lagrange_multiplier_pressure_to_zero().

◆ create_flux_elements()

template<class ELEMENT >
void UnsteadyHeatMeltProblem< ELEMENT >::create_flux_elements ( )
inlineprivate

Create flux elements.

262  {
263  // How many bulk elements are adjacent to boundary b?
264  unsigned b=Melt_boundary_id;
265  unsigned n_element = Bulk_mesh_pt->nboundary_element(b);
266 
267  // Loop over the bulk elements adjacent to boundary b?
268  for(unsigned e=0;e<n_element;e++)
269  {
270  // Get pointer to the bulk element that is adjacent to boundary b
271  ELEMENT* bulk_elem_pt = dynamic_cast<ELEMENT*>(
272  Bulk_mesh_pt->boundary_element_pt(b,e));
273 
274  //What is the face index of element e along boundary b
275  int face_index = Bulk_mesh_pt->face_index_at_boundary(b,e);
276 
277  // Build the corresponding prescribed-flux element
278  SurfaceMeltElement<ELEMENT>* flux_element_pt = new
279  SurfaceMeltElement<ELEMENT>(bulk_elem_pt,face_index);
280 
281  //Add the prescribed-flux element to the surface mesh
282  Surface_melt_mesh_pt->add_element_pt(flux_element_pt);
283 
284  } //end of loop over bulk elements adjacent to boundary b
285  }
void add_element_pt(GeneralisedElement *const &element_pt)
Add a (pointer to) an element to the mesh.
Definition: mesh.h:617

References b, and e().

◆ delete_flux_elements()

template<class ELEMENT >
void UnsteadyHeatMeltProblem< ELEMENT >::delete_flux_elements ( )
inlineprivate

Delete flux elements.

291  {
292  // How many surface elements are in the surface mesh
293  unsigned n_element = Surface_melt_mesh_pt->nelement();
294 
295  // Loop over the surface elements
296  for(unsigned e=0;e<n_element;e++)
297  {
298  // Kill surface element
300  }
301 
302  // Wipe the mesh
304  }
void flush_element_and_node_storage()
Definition: mesh.h:407

References e().

◆ doc_solution()

template<class ELEMENT >
void UnsteadyHeatMeltProblem< ELEMENT >::doc_solution

Doc the solution.

612 {
613  ofstream some_file;
614  char filename[100];
615 
616  // Number of plot points
617  unsigned npts;
618  npts=5;
619 
620  cout << std::endl;
621  cout << "=================================================" << std::endl;
622  cout << "Docing solution for t=" << time_pt()->time() << std::endl;
623  cout << "=================================================" << std::endl;
624 
625  // Output solution
626  sprintf(filename,"%s/soln%i.dat",Doc_info.directory().c_str(),
627  Doc_info.number());
628  some_file.open(filename);
629  Bulk_mesh_pt->output(some_file,npts);
630  some_file.close();
631 
632  // Output solution coarsely (only element vertices for easier
633  // mesh visualisation)
634  sprintf(filename,"%s/coarse_soln%i.dat",Doc_info.directory().c_str(),
635  Doc_info.number());
636  some_file.open(filename);
637  Bulk_mesh_pt->output(some_file,2);
638  some_file.close();
639 
640  // Output flux with melt
641  sprintf(filename,"%s/flux_with_melt%i.dat",Doc_info.directory().c_str(),
642  Doc_info.number());
643  some_file.open(filename);
644  unsigned nel=Surface_melt_mesh_pt->nelement();
645  for (unsigned e=0;e<nel;e++)
646  {
647  dynamic_cast<SurfaceMeltElement<ELEMENT>* >(
648  Surface_melt_mesh_pt->element_pt(e))->output_melt(some_file);
649  }
650  some_file.close();
651 
652 
653  // Output Number of Newton iterations in form that can be visualised
654  // as vector in paraview
655  sprintf(filename,"%s/newton_iter%i.dat",Doc_info.directory().c_str(),
656  Doc_info.number());
657  some_file.open(filename);
658  some_file << "0 0 0 " << Nnewton_iter_taken << std::endl;
659  some_file.close();
660 
661 
662  // Output exact solution
663  sprintf(filename,"%s/exact_soln%i.dat",Doc_info.directory().c_str(),
664  Doc_info.number());
665  some_file.open(filename);
666  Bulk_mesh_pt->output_fct(
667  some_file,npts,time_pt()->time(),
669  some_file.close();
670 
671  // Output exact position of melting line
672  sprintf(filename,"%s/exact_height%i.dat",Doc_info.directory().c_str(),
673  Doc_info.number());
674  some_file.open(filename);
675  unsigned nplot=100;
676  for (unsigned j=0;j<nplot;j++)
677  {
678  double x=double(j)/double(nplot-1);
679  some_file << x << " "
681  << std::endl;
682  }
683  some_file.close();
684 
685 
686  // Write norm of solution to trace file
687  double norm=0.0;
688  Bulk_mesh_pt->compute_norm(norm);
689  Trace_file << norm << std::endl;
690 
691  //Increment counter for solutions
692  Doc_info.number()++;
693 
694 } // end of doc_solution
std::string directory() const
Output directory.
Definition: oomph_utilities.h:524
unsigned Nnewton_iter_taken
Definition: problem.h:603
Time *& time_pt()
Return a pointer to the global time object.
Definition: problem.h:1504
double & time()
Return the current value of continuous time.
Definition: problem.cc:11531
double & time()
Return the current value of the continuous time.
Definition: timesteppers.h:123
double melting_surface_height(const double &t, const double &x)
Height of melting surface.
Definition: circular_boulder_melt.cc:156
void get_exact_u_for_unsteady_heat_validation(const double &t, const Vector< double > &x, Vector< double > &u)
Exact solution as a Vector.
Definition: circular_boulder_melt.cc:112
string filename
Definition: MergeRestartFiles.py:39
list x
Definition: plotDoE.py:28

References oomph::DocInfo::directory(), GlobalParameters::Doc_info, e(), MergeRestartFiles::filename, ExactSolution::get_exact_u_for_unsteady_heat_validation(), j, ExactSolution::melting_surface_height(), oomph::DocInfo::number(), oomph::Problem_Parameter::Trace_file, and plotDoE::x.

◆ global_temporal_error_norm()

template<class ELEMENT >
double UnsteadyHeatMeltProblem< ELEMENT >::global_temporal_error_norm ( )
inlinevirtual

Dummy global error norm for adaptive time-stepping.

Reimplemented from oomph::Problem.

255 {return 0.0;}

Member Data Documentation

◆ Backed_up_surface_melt_mesh_pt

template<class ELEMENT >
BackupMeshForProjection<TElement<1,3> >* UnsteadyHeatMeltProblem< ELEMENT >::Backed_up_surface_melt_mesh_pt
private

Backup of Surface_melt_mesh_pt so the Lagrange multipliers and melt rate can be projected across

◆ Bottom_boundary_id

template<class ELEMENT >
unsigned UnsteadyHeatMeltProblem< ELEMENT >::Bottom_boundary_id
private

ID of bottom boundary.

◆ Bulk_mesh_pt

template<class ELEMENT >
RefineableSolidTriangleMesh<ELEMENT>* UnsteadyHeatMeltProblem< ELEMENT >::Bulk_mesh_pt
private

Pointers to specific mesh.

◆ Doc_info

template<class ELEMENT >
DocInfo UnsteadyHeatMeltProblem< ELEMENT >::Doc_info
private

◆ Left_boundary_id

template<class ELEMENT >
unsigned UnsteadyHeatMeltProblem< ELEMENT >::Left_boundary_id
private

ID of left boundary.

◆ Melt_boundary_id

template<class ELEMENT >
unsigned UnsteadyHeatMeltProblem< ELEMENT >::Melt_boundary_id
private

ID of melt boundary.

◆ Right_boundary_id

template<class ELEMENT >
unsigned UnsteadyHeatMeltProblem< ELEMENT >::Right_boundary_id
private

ID of right boundary.

◆ Surface_melt_mesh_pt

template<class ELEMENT >
Mesh* UnsteadyHeatMeltProblem< ELEMENT >::Surface_melt_mesh_pt
private

Pointer to the "surface" mesh.

◆ Trace_file

template<class ELEMENT >
ofstream UnsteadyHeatMeltProblem< ELEMENT >::Trace_file
private

Trace file.


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