29 #ifndef OOMPH_PROBLEM_CLASS_HEADER
30 #define OOMPH_PROBLEM_CLASS_HEADER
35 #include <oomph-lib-config.h>
67 class RefineableElement;
70 class PRefineableElement;
76 class GeneralisedElement;
85 class AssemblyHandler;
156 template<
unsigned NNODE_1D>
251 oomph_info <<
"Called empty hook fct with i=" <<
i << std::endl;
266 std::map<double*, bool>::iterator it =
278 double*
const& parameter_pt)
327 const unsigned& max_adapt,
328 const unsigned& suppress_resolve_after_spatial_adapt,
330 const bool& shift =
true);
366 bool compressed_row_flag);
379 bool compressed_row_flag);
392 bool compressed_row_flag);
405 bool compressed_row_flag);
418 bool compressed_row_flag);
435 double*
const& parameter_pt);
443 unsigned& n_unrefined,
444 const unsigned& bifurcation_type,
445 const bool& actually_adapt =
true);
469 const unsigned& el_lo,
470 const unsigned& el_hi,
475 void parallel_sparse_assemble(
488 void copy_haloed_eqn_numbers_helper(
const bool& do_halos,
489 const bool& do_external_halos);
496 bool& actually_removed_some_data);
501 void remove_null_pointers_from_external_halo_node_storage();
506 void recompute_load_balanced_assembly();
510 bool Doc_imbalance_in_parallel_assembly;
514 bool Use_default_partition_in_load_balance;
529 bool Must_recompute_load_balance_for_assembly;
538 std::map<GeneralisedElement*, unsigned> Base_mesh_element_number_plus_one;
584 void setup_dof_halo_scheme();
683 bool compressed_row_flag);
811 return Problem_has_been_distributed;
829 enum Distributed_problem_matrix_distribution{Default_matrix_distribution,
830 Problem_matrix_distribution,
831 Uniform_matrix_distribution};
842 Distributed_problem_matrix_distribution& distributed_problem_matrix_distribution()
844 return Dist_problem_matrix_distribution;
849 void enable_doc_imbalance_in_parallel_assembly()
851 Doc_imbalance_in_parallel_assembly =
true;
856 void disable_doc_imbalance_in_parallel_assembly()
858 Doc_imbalance_in_parallel_assembly =
false;
864 Vector<double> elemental_assembly_time()
866 return Elemental_assembly_time;
872 void clear_elemental_assembly_time()
874 Must_recompute_load_balance_for_assembly =
true;
875 Elemental_assembly_time.clear();
894 void get_data_to_be_sent_during_load_balancing(
895 const Vector<unsigned>& element_domain_on_this_proc,
897 Vector<double>& send_data,
898 Vector<int>& send_displacement,
899 Vector<unsigned>& old_domain_for_base_element,
900 Vector<unsigned>& new_domain_for_base_element,
901 unsigned& max_refinement_level_overall);
920 void get_flat_packed_refinement_pattern_for_load_balancing(
921 const Vector<unsigned>& old_domain_for_base_element,
922 const Vector<unsigned>& new_domain_for_base_element,
923 const unsigned& max_refinement_level_overall,
924 std::map<
unsigned, Vector<unsigned>>&
925 flat_packed_refinement_info_for_root);
934 void send_data_to_be_sent_during_load_balancing(
936 Vector<double>& send_data,
937 Vector<int>& send_displacement);
940 void send_refinement_info_helper(
941 Vector<unsigned>& old_domain_for_base_element,
942 Vector<unsigned>& new_domain_for_base_element,
943 const unsigned& max_refinement_level_overall,
944 std::map<
unsigned, Vector<unsigned>>& refinement_info_for_root_local,
945 Vector<
Vector<Vector<unsigned>>>& refinement_info_for_root_elements);
956 Distributed_problem_matrix_distribution Dist_problem_matrix_distribution;
960 unsigned Parallel_sparse_assemble_previous_allocation;
964 bool Problem_has_been_distributed;
967 bool Bypass_increase_in_dof_check_during_pruning;
971 void enable_problem_distributed()
973 Problem_has_been_distributed =
true;
977 void disable_problem_distributed()
979 Problem_has_been_distributed =
false;
984 void set_default_first_and_last_element_for_assembly();
988 void set_first_and_last_element_for_assembly(
989 Vector<unsigned>& first_el_for_assembly,
990 Vector<unsigned>& last_el_for_assembly)
992 First_el_for_assembly = first_el_for_assembly;
993 Last_el_plus_one_for_assembly = last_el_for_assembly;
994 unsigned n = last_el_for_assembly.size();
995 for (
unsigned i = 0;
i <
n;
i++)
997 Last_el_plus_one_for_assembly[
i] += 1;
1004 void get_first_and_last_element_for_assembly(
1005 Vector<unsigned>& first_el_for_assembly,
1006 Vector<unsigned>& last_el_for_assembly)
const
1008 first_el_for_assembly = First_el_for_assembly;
1009 last_el_for_assembly = Last_el_plus_one_for_assembly;
1010 unsigned n = last_el_for_assembly.size();
1011 for (
unsigned i = 0;
i <
n;
i++)
1013 last_el_for_assembly[
i] -= 1;
1114 #ifdef OOMPH_HAS_MPI
1116 virtual void actions_before_distribute() {}
1119 virtual void actions_after_distribute() {}
1134 double*
const& parameter_pt)
1200 std::ostringstream warn_message;
1202 <<
"Warning: We're using the default (empty) set_initial_condition().\n"
1203 <<
"If the initial conditions isn't re-assigned after a mesh adaption "
1205 <<
"the initial conditions will represent the interpolation of the \n"
1206 <<
"initial conditions that were assigned on the original coarse "
1209 "Problem::set_initial_condition()",
1233 "The global_temporal_error_norm function will be problem-specific:\n";
1234 error_message +=
"Please write your own in your Problem class";
1355 #ifdef OOMPH_HAS_MPI
1365 virtual void build_mesh()
1367 std::string error_message =
"You are likely to have reached this error "
1368 "from Problem::load_balance()\n";
1370 "The build_mesh() function is problem-specific and must be supplied:\n";
1372 "Please write your own in your Problem class, ensuring that\n";
1373 error_message +=
"any (sub)meshes are built before calling "
1374 "Problem::build_global_mesh().\n";
1386 doc_info.disable_doc();
1389 bool report_stats =
false;
1392 Vector<unsigned> input_target_domain_for_local_non_halo_element;
1396 doc_info, report_stats, input_target_domain_for_local_non_halo_element);
1403 void load_balance(
const bool& report_stats)
1407 doc_info.disable_doc();
1410 Vector<unsigned> input_target_domain_for_local_non_halo_element;
1414 doc_info, report_stats, input_target_domain_for_local_non_halo_element);
1422 void load_balance(DocInfo& doc_info,
const bool& report_stats)
1425 Vector<unsigned> input_target_domain_for_local_non_halo_element;
1429 doc_info, report_stats, input_target_domain_for_local_non_halo_element);
1441 const bool& report_stats,
1442 const Vector<unsigned>& input_target_domain_for_local_non_halo_element);
1445 void set_default_partition_in_load_balance()
1447 Use_default_partition_in_load_balance =
true;
1451 void unset_default_partition_in_load_balance()
1453 Use_default_partition_in_load_balance =
false;
1459 void refine_distributed_base_mesh(
1460 Vector<
Vector<Vector<unsigned>>>& to_be_refined_on_each_root,
1461 const unsigned& max_level_overall);
1519 double time()
const;
1564 const bool& preserve_existing_data =
false);
1715 const bool& assign_local_eqn_numbers =
true);
1766 #ifdef OOMPH_HAS_MPI
1768 if (Problem_has_been_distributed)
1771 if (Halo_scheme_pt == 0)
1773 std::ostringstream error_stream;
1775 <<
"Direct access to global dofs in a distributed problem is only\n"
1776 <<
"possible if the function setup_dof_halo_scheme() has been "
1778 <<
"You can access local dofs via Problem::dof(i).\n";
1787 const unsigned first_row_local =
1789 const unsigned n_row_local =
1793 if ((
i >= first_row_local) && (
i < first_row_local + n_row_local))
1795 return this->Dof_pt[
i - first_row_local];
1808 return this->Dof_pt[
i];
1819 double dof(
const unsigned&
i)
const
1881 std::ostringstream error_stream;
1883 <<
"You must overload this function in your problem class to specify\n"
1884 <<
"which matrices should be summed to give the final Jacobian.";
1928 Vector<std::complex<double>>& eigenvalue,
1930 const bool& steady =
true);
1938 Vector<std::complex<double>>& eigenvalue,
1939 const bool& steady =
true)
1950 const double& shift = 0.0);
2018 const double& half_residual_squared_old,
2021 double& half_residual_squared,
2022 const double& stpmax);
2061 virtual void read(std::ifstream& restart_file,
bool& unsteady_restart);
2066 virtual void read(std::ifstream& restart_file)
2068 bool unsteady_restart;
2069 read(restart_file, unsteady_restart);
2074 virtual void dump(std::ofstream& dump_file)
const;
2080 std::ofstream dump_stream(dump_file_name.c_str());
2082 if (!dump_stream.is_open())
2084 std::string err =
"Couldn't open file " + dump_file_name;
2092 #ifdef OOMPH_HAS_MPI
2096 void get_all_halo_data(std::map<unsigned, double*>& map_of_halo_data);
2101 long synchronise_eqn_numbers(
const bool& assign_local_eqn_numbers =
true);
2107 void synchronise_dofs(
const bool& do_halos,
const bool& do_external_halos);
2110 void synchronise_all_dofs();
2113 void check_halo_schemes(
DocInfo& doc_info);
2116 void check_halo_schemes()
2120 check_halo_schemes(tmp_doc_info);
2125 Vector<unsigned> distribute(
const Vector<unsigned>& element_partition,
2127 const bool& report_stats =
false);
2131 Vector<unsigned> distribute(DocInfo& doc_info,
2132 const bool& report_stats =
false);
2136 Vector<unsigned> distribute(
const Vector<unsigned>& element_partition,
2137 const bool& report_stats =
false);
2141 Vector<unsigned> distribute(
const bool& report_stats =
false);
2147 virtual void partition_global_mesh(Mesh*& global_mesh_pt,
2149 Vector<unsigned>& element_domain,
2150 const bool& report_stats =
false);
2158 void prune_halo_elements_and_nodes(DocInfo& doc_info,
2159 const bool& report_stats);
2167 void prune_halo_elements_and_nodes(
const bool& report_stats =
false)
2170 doc_info.disable_doc();
2171 prune_halo_elements_and_nodes(doc_info, report_stats);
2175 double Max_permitted_error_for_halo_check;
2178 bool problem_has_been_distributed()
2180 return Problem_has_been_distributed;
2287 const bool& block_solve =
true);
2293 const bool& block_solve =
true);
2301 const bool& block_solve =
true);
2322 const bool& block_solve =
true);
2333 const bool& block_solve =
true);
2346 const double&
omega,
2349 const bool& block_solve =
true);
2370 const unsigned& max_adapt);
2388 const unsigned& max_adapt = 0);
2400 const unsigned& data_index,
2402 const unsigned& max_adapt = 0);
2454 const unsigned& max_adapt,
2456 const bool& shift =
true);
2473 const unsigned& max_adapt,
2475 const bool& shift =
true)
2479 unsigned suppress_resolve_after_spatial_adapt_flag = 0;
2484 suppress_resolve_after_spatial_adapt_flag,
2507 const unsigned& max_adapt,
2508 const unsigned& suppress_resolve_after_spatial_adapt_flag,
2510 const bool& shift =
true)
2517 suppress_resolve_after_spatial_adapt_flag,
2545 const bool& shift_values);
2684 "Problem::p_refine_uniformly_and_prune()",
2699 "Problem::p_refine_uniformly_and_prune()",
2724 "Problem::p_refine_uniformly_and_prune()",
2775 const unsigned& i_mesh,
2810 const unsigned& i_mesh,
2850 void adapt(
unsigned& n_refined,
unsigned& n_unrefined);
2861 unsigned n_refined, n_unrefined;
2862 adapt(n_refined, n_unrefined);
2872 void p_adapt(
unsigned& n_refined,
unsigned& n_unrefined);
2883 unsigned n_refined, n_unrefined;
2884 p_adapt(n_refined, n_unrefined);
2897 unsigned& n_refined,
2898 unsigned& n_unrefined,
2912 unsigned n_refined, n_unrefined;
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
cout<< "The eigenvalues of A are:"<< endl<< ces.eigenvalues()<< endl;cout<< "The matrix of eigenvectors, V, is:"<< endl<< ces.eigenvectors()<< endl<< endl;complex< float > lambda
Definition: ComplexEigenSolver_compute.cpp:9
Allows for timing the algorithms; accurate up to 0.01 sec.
Definition: MercuryTime.h:25
Definition: assembly_handler.h:63
Definition: assembly_handler.h:397
Definition: assembly_handler.h:688
Definition: assembly_handler.h:955
Definition: assembly_handler.h:609
A class for compressed column matrices that store doubles.
Definition: matrices.h:2791
Definition: matrices.h:888
Definition: generalised_timesteppers.h:101
Definition: matrices.h:1271
Definition: oomph_utilities.h:499
void disable_doc()
Disable documentation.
Definition: oomph_utilities.h:542
Definition: double_vector_with_halo.h:52
LinearAlgebraDistribution *& distribution_pt()
Definition: double_vector_with_halo.h:106
unsigned local_index(const unsigned &global_eqn)
Return the local index associated with the global equation.
Definition: double_vector_with_halo.h:118
Definition: double_vector_with_halo.h:150
Definition: double_vector.h:58
Definition: eigen_solver.h:61
Definition: explicit_timesteppers.h:65
A Base class for explicit timesteppers.
Definition: explicit_timesteppers.h:132
Definition: assembly_handler.h:473
Definition: assembly_handler.h:1050
Definition: linear_algebra_distribution.h:64
unsigned first_row() const
Definition: linear_algebra_distribution.h:261
unsigned nrow() const
access function to the number of global rows.
Definition: linear_algebra_distribution.h:186
unsigned nrow_local() const
Definition: linear_algebra_distribution.h:193
Definition: linear_solver.h:68
Definition: matrices.h:74
A class to handle errors in the Newton solver.
Definition: problem.h:2952
NewtonSolverError(unsigned Passed_iterations, double Passed_maxres)
Constructor that passes number of iterations and residuals.
Definition: problem.h:2975
bool linear_solver_error
Error in the linear solver.
Definition: problem.h:2955
NewtonSolverError()
Default constructor, does nothing.
Definition: problem.h:2964
unsigned iterations
Max. # of iterations performed when the Newton solver died.
Definition: problem.h:2958
NewtonSolverError(const bool &Passed_linear_failure)
Constructor that passes a failure of the linear solver.
Definition: problem.h:2969
double maxres
Max. residual when Newton solver died.
Definition: problem.h:2961
Definition: communicator.h:54
std::ostream *& stream_pt()
Access function for the stream pointer.
Definition: oomph_definitions.h:464
Definition: oomph_definitions.h:222
Definition: oomph_definitions.h:267
Definition: periodic_orbit_handler.h:691
Definition: assembly_handler.h:773
Definition: problem.h:151
EigenSolver *& eigen_solver_pt()
Return a pointer to the eigen solver object.
Definition: problem.h:1492
virtual void get_residuals(DoubleVector &residuals)
Get the total residuals Vector for the problem.
Definition: problem.cc:3714
virtual void actions_after_implicit_timestep()
Definition: problem.h:1070
bool Always_take_one_newton_step
Definition: problem.h:2197
bool Jacobian_reuse_is_enabled
Is re-use of Jacobian in Newton iteration enabled? Default: false.
Definition: problem.h:618
double *& dof_pt(const unsigned &i)
Pointer to i-th dof in the problem.
Definition: problem.h:1825
virtual void actions_after_newton_solve()
Definition: problem.h:1038
void add_time_stepper_pt(TimeStepper *const &time_stepper_pt)
Definition: problem.cc:1545
void solve_eigenproblem(const unsigned &n_eval, Vector< std::complex< double >> &eigenvalue, Vector< DoubleVector > &eigenvector, const bool &steady=true)
Solve the eigenproblem.
Definition: problem.cc:8313
bool Store_local_dof_pt_in_elements
Definition: problem.h:226
void set_dofs(const DoubleVector &dofs)
Set the values of the dofs.
Definition: problem.cc:3411
unsigned newton_solve_continuation(double *const ¶meter_pt)
Definition: problem.cc:9376
virtual void actions_before_newton_step()
Definition: problem.h:1053
bool Bifurcation_detection
Boolean to control bifurcation detection via determinant of Jacobian.
Definition: problem.h:790
void p_refine_uniformly(const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
Definition: problem.h:2670
void bifurcation_adapt_doc_errors(const unsigned &bifurcation_type)
Definition: problem.cc:13648
void reset_assembly_handler_to_default()
Reset the system to the standard non-augemented state.
Definition: problem.cc:10275
void adapt()
Definition: problem.h:2859
virtual void actions_before_newton_solve()
Definition: problem.h:1032
unsigned add_sub_mesh(Mesh *const &mesh_pt)
Definition: problem.h:1330
virtual void get_dvaluesdt(DoubleVector &f)
Definition: problem.cc:3684
virtual void get_jacobian(DoubleVector &residuals, SumOfMatrices &jacobian)
Definition: problem.h:1879
virtual void symmetrise_eigenfunction_for_adaptive_pitchfork_tracking()
Definition: problem.cc:10059
double & dof_current(const unsigned &i)
Definition: problem.h:1182
LinearSolver * mass_matrix_solver_for_explicit_timestepper_pt() const
Definition: problem.h:1486
void get_dofs(DoubleVector &dofs) const
Definition: problem.cc:2479
double Theta_squared
Definition: problem.h:742
void refine_uniformly(const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
Definition: problem.h:2585
EigenSolver *const & eigen_solver_pt() const
Return a pointer to the eigen solver object (const version)
Definition: problem.h:1498
virtual void dump(std::ofstream &dump_file) const
Definition: problem.cc:12029
LinearAlgebraDistribution *const & dof_distribution_pt() const
Return the pointer to the dof distribution (read-only)
Definition: problem.h:1668
void refine_uniformly(const Vector< unsigned > &nrefine_for_mesh)
Definition: problem.h:2575
Vector< double > Dof_derivative
Storage for the derivative of the problem variables wrt arc-length.
Definition: problem.h:774
virtual Problem * make_copy()
Definition: problem.cc:12011
virtual void actions_after_change_in_global_parameter(double *const ¶meter_pt)
Definition: problem.h:1133
double dof(const unsigned &i) const
i-th dof in the problem (const version)
Definition: problem.h:1819
unsigned long ndof() const
Return the number of dofs.
Definition: problem.h:1674
void(* SpatialErrorEstimatorWithDocFctPt)(Mesh *&mesh_pt, Vector< double > &elemental_error, DocInfo &doc_info)
Function pointer for spatial error estimator with doc.
Definition: problem.h:1262
virtual void sparse_assemble_row_or_column_compressed_with_two_arrays(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)
Definition: problem.cc:6061
void rebuild_global_mesh()
Definition: problem.cc:1533
double & max_residuals()
Definition: problem.h:1608
void get_all_error_estimates(Vector< Vector< double >> &elemental_error)
Definition: problem.cc:14627
bool Jacobian_has_been_computed
Definition: problem.h:622
void explicit_timestep(const double &dt, const bool &shift_values=true)
Take an explicit timestep of size dt.
Definition: problem.cc:10918
void adapt_based_on_error_estimates(unsigned &n_refined, unsigned &n_unrefined, Vector< Vector< double >> &elemental_error)
Definition: problem.cc:14528
void enable_store_local_dof_pt_in_elements()
Definition: problem.h:1696
void enable_info_in_newton_solve()
Definition: problem.h:2935
friend class BlockFoldLinearSolver
Definition: problem.h:158
Problem(const Problem &dummy)=delete
Broken copy constructor.
void p_refine_uniformly(const unsigned &i_mesh)
Do uniform p-refinement for submesh i_mesh without documentation.
Definition: problem.h:2748
void p_refine_uniformly(DocInfo &doc_info)
Definition: problem.h:2707
double Timestep_reduction_factor_after_nonconvergence
Definition: problem.h:2202
Mesh *const & mesh_pt(const unsigned &imesh) const
Return a pointer to the i-th submesh (const version)
Definition: problem.h:1308
Vector< double > Dof_current
Storage for the present values of the variables.
Definition: problem.h:777
void disable_mass_matrix_reuse()
Definition: problem.cc:11832
static bool Suppress_warning_about_actions_before_read_unstructured_meshes
Definition: problem.h:317
virtual void debug_hook_fct(const unsigned &i)
Definition: problem.h:249
double Desired_proportion_of_arc_length
Proportion of the arc-length to taken by the parameter.
Definition: problem.h:734
void adapt_based_on_error_estimates(Vector< Vector< double >> &elemental_error)
Definition: problem.h:2910
AssemblyHandler *& assembly_handler_pt()
Return a pointer to the assembly handler object.
Definition: problem.h:1570
virtual void actions_after_implicit_timestep_and_error_estimation()
Definition: problem.h:1075
void refine_uniformly_and_prune(const Vector< unsigned > &nrefine_for_mesh)
Definition: problem.h:2595
EigenSolver * Default_eigen_solver_pt
Pointer to the default eigensolver.
Definition: problem.h:191
Mesh *const & mesh_pt() const
Return a pointer to the global mesh (const version)
Definition: problem.h:1286
void p_refine_uniformly(const Vector< unsigned > &nrefine_for_mesh)
Definition: problem.h:2660
unsigned Nnewton_iter_taken
Definition: problem.h:603
void restore_dof_values()
Restore the stored values of the degrees of freedom.
Definition: problem.cc:8653
virtual void shift_time_values()
Shift all values along to prepare for next timestep.
Definition: problem.cc:11634
void refine_selected_elements(const Vector< unsigned > &elements_to_be_refined)
Definition: problem.cc:14898
bool Time_adaptive_newton_crash_on_solve_fail
Definition: problem.h:615
const TimeStepper * time_stepper_pt() const
Definition: problem.h:1537
bool is_dparameter_calculated_analytically(double *const ¶meter_pt)
Definition: problem.h:277
void calculate_continuation_derivatives_helper(const DoubleVector &z)
Definition: problem.cc:9912
void flush_sub_meshes()
Definition: problem.h:1339
bool & use_predictor_values_as_initial_guess()
Definition: problem.h:1994
unsigned Sparse_assembly_method
Definition: problem.h:641
void set_analytic_hessian_products()
Definition: problem.h:289
void globally_convergent_line_search(const Vector< double > &x_old, const double &half_residual_squared_old, DoubleVector &gradient, DoubleVector &newton_dir, double &half_residual_squared, const double &stpmax)
Line search helper for globally convergent Newton method.
Definition: problem.cc:9146
Time *& time_pt()
Return a pointer to the global time object.
Definition: problem.h:1504
AssemblyHandler *const & assembly_handler_pt() const
Return a pointer to the assembly handler object (const version)
Definition: problem.h:1576
double * global_dof_pt(const unsigned &i)
Definition: problem.h:1764
void get_hessian_vector_products(DoubleVectorWithHaloEntries const &Y, Vector< DoubleVectorWithHaloEntries > const &C, Vector< DoubleVectorWithHaloEntries > &product)
Definition: problem.cc:7985
virtual void actions_after_read_unstructured_meshes()
Definition: problem.h:1109
static ContinuationStorageScheme Continuation_time_stepper
Storage for the single static continuation timestorage object.
Definition: problem.h:761
virtual void get_eigenproblem_matrices(CRDoubleMatrix &mass_matrix, CRDoubleMatrix &main_matrix, const double &shift=0.0)
Definition: problem.cc:8368
virtual void actions_before_implicit_timestep()
Definition: problem.h:1064
virtual void read(std::ifstream &restart_file, bool &unsteady_restart)
Definition: problem.cc:12251
LinearSolver *const & linear_solver_pt() const
Return a pointer to the linear solver object (const version)
Definition: problem.h:1472
unsigned long set_timestepper_for_all_data(TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data=false)
Definition: problem.cc:11572
void p_refine_uniformly_and_prune(const Vector< unsigned > &nrefine_for_mesh)
Definition: problem.h:2680
LinearSolver * Linear_solver_pt
Pointer to the linear solver for the problem.
Definition: problem.h:173
virtual void actions_after_explicit_timestep()
Actions that should be performed after each explicit time step.
Definition: problem.h:1081
void activate_hopf_tracking(double *const ¶meter_pt, const bool &block_solve=true)
Definition: problem.cc:10218
void disable_jacobian_reuse()
Disable recycling of Jacobian in Newton iteration.
Definition: problem.h:1982
bool Doc_time_in_distribute
Definition: problem.h:637
unsigned Max_newton_iterations
Maximum number of Newton iterations.
Definition: problem.h:599
Vector< Vector< unsigned > > Sparse_assemble_with_arrays_previous_allocation
Definition: problem.h:667
virtual void actions_after_parameter_increase(double *const ¶meter_pt)
Definition: problem.h:1161
virtual void read(std::ifstream &restart_file)
Definition: problem.h:2066
unsigned unrefine_uniformly()
Definition: problem.cc:15831
unsigned Dof_current_offset
Definition: problem.h:771
virtual void sparse_assemble_row_or_column_compressed_with_two_vectors(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)
Definition: problem.cc:5698
bool jacobian_reuse_is_enabled()
Is recycling of Jacobian in Newton iteration enabled?
Definition: problem.h:1989
virtual void get_inverse_mass_matrix_times_residuals(DoubleVector &Mres)
Definition: problem.cc:3579
virtual void actions_after_change_in_bifurcation_parameter()
Definition: problem.h:1151
bool Empty_actions_before_read_unstructured_meshes_has_been_called
Definition: problem.h:218
void initialise_dt(const double &dt)
Definition: problem.cc:13231
OomphCommunicator * communicator_pt()
access function to the oomph-lib communicator
Definition: problem.h:1246
bool Mass_matrix_has_been_computed
Definition: problem.h:695
unsigned nglobal_data() const
Return the number of global data values.
Definition: problem.h:1686
virtual void actions_before_adapt()
Definition: problem.h:1022
void(* SpatialErrorEstimatorFctPt)(Mesh *&mesh_pt, Vector< double > &elemental_error)
Function pointer for spatial error estimator.
Definition: problem.h:1258
bool First_jacobian_sign_change
Boolean to indicate whether a sign change has occured in the Jacobian.
Definition: problem.h:796
void reset_arc_length_parameters()
Definition: problem.h:2409
void steady_newton_solve(unsigned const &max_adapt=0)
Definition: problem.cc:9292
void activate_pitchfork_tracking(double *const ¶meter_pt, const DoubleVector &symmetry_vector, const bool &block_solve=true)
Definition: problem.cc:10188
LinearSolver *& linear_solver_pt()
Return a pointer to the linear solver object.
Definition: problem.h:1466
double Continuation_direction
Definition: problem.h:749
void set_pinned_values_to_zero()
Definition: problem.cc:4304
virtual void actions_before_explicit_timestep()
Actions that should be performed before each explicit time step.
Definition: problem.h:1078
void add_global_data(Data *const &global_data_pt)
Definition: problem.h:1654
bool Scale_arc_length
Boolean to control whether arc-length should be scaled.
Definition: problem.h:731
bool Empty_actions_after_read_unstructured_meshes_has_been_called
Definition: problem.h:222
void p_refine_uniformly_aux(const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info, const bool &prune)
Definition: problem.cc:15592
void describe_dofs(std::ostream &out= *(oomph_info.stream_pt())) const
Definition: problem.cc:2359
double & dof(const unsigned &i)
i-th dof in the problem
Definition: problem.h:1813
double doubly_adaptive_unsteady_newton_solve(const double &dt, const double &epsilon, const unsigned &max_adapt, const bool &first, const bool &shift=true)
Definition: problem.h:2471
bool does_pointer_correspond_to_problem_data(double *const ¶meter_pt)
Definition: problem.cc:9846
TimeStepper *& time_stepper_pt(const unsigned &i)
Return a pointer to the i-th timestepper.
Definition: problem.h:1549
int & sign_of_jacobian()
Definition: problem.h:2424
bool & time_adaptive_newton_crash_on_solve_fail()
Access function for Time_adaptive_newton_crash_on_solve_fail.
Definition: problem.h:1614
void calculate_continuation_derivatives_fd_helper(double *const ¶meter_pt)
Definition: problem.cc:10004
double Maximum_dt
Maximum desired dt.
Definition: problem.h:709
unsigned self_test()
Self-test: Check meshes and global data. Return 0 for OK.
Definition: problem.cc:13276
virtual void sparse_assemble_row_or_column_compressed_with_maps(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)
Definition: problem.cc:4584
double doubly_adaptive_unsteady_newton_solve_helper(const double &dt, const double &epsilon, const unsigned &max_adapt, const unsigned &suppress_resolve_after_spatial_adapt, const bool &first, const bool &shift=true)
Definition: problem.cc:11379
void assign_initial_values_impulsive()
Definition: problem.cc:11499
void set_explicit_time_stepper_pt(ExplicitTimeStepper *const &explicit_time_stepper_pt)
Definition: problem.cc:1586
virtual void sparse_assemble_row_or_column_compressed_with_vectors_of_pairs(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)
Definition: problem.cc:5345
bool Use_finite_differences_for_continuation_derivatives
Definition: problem.h:803
void p_refine_uniformly_and_prune(DocInfo &doc_info)
Definition: problem.h:2720
bool Arc_length_step_taken
Boolean to indicate whether an arc-length step has been taken.
Definition: problem.h:799
void get_bifurcation_eigenfunction(Vector< DoubleVector > &eigenfunction)
Definition: problem.cc:10091
void calculate_continuation_derivatives(double *const ¶meter_pt)
Definition: problem.cc:9715
virtual ~Problem()
Virtual destructor to clean up memory.
Definition: problem.cc:181
bool Default_set_initial_condition_called
Definition: problem.h:211
double Relaxation_factor
Definition: problem.h:592
void calculate_continuation_derivatives_fd(double *const ¶meter_pt)
Definition: problem.cc:9818
double Parameter_current
Storage for the present value of the global parameter.
Definition: problem.h:755
void enable_jacobian_reuse()
Definition: problem.h:1975
void disable_globally_convergent_newton_method()
disable globally convergent Newton method
Definition: problem.h:2009
void problem_is_nonlinear(const bool &prob_lin)
Access function to Problem_is_nonlinear.
Definition: problem.h:1600
LinearSolver *& mass_matrix_solver_for_explicit_timestepper_pt()
Definition: problem.h:1479
double * bifurcation_parameter_pt() const
Definition: problem.cc:10081
OomphCommunicator * Communicator_pt
The communicator for this problem.
Definition: problem.h:1242
double Newton_solver_tolerance
Definition: problem.h:596
bool Discontinuous_element_formulation
Definition: problem.h:700
double adaptive_unsteady_newton_solve(const double &dt_desired, const double &epsilon)
Definition: problem.cc:11056
void activate_bifurcation_tracking(double *const ¶meter_pt, const DoubleVector &eigenvector, const bool &block_solve=true)
Definition: problem.cc:10129
void get_fd_jacobian(DoubleVector &residuals, DenseMatrix< double > &jacobian)
Get the full Jacobian by finite differencing.
Definition: problem.cc:7823
void bifurcation_adapt_helper(unsigned &n_refined, unsigned &n_unrefined, const unsigned &bifurcation_type, const bool &actually_adapt=true)
Definition: problem.cc:13354
void build_global_mesh()
Definition: problem.cc:1493
Vector< Problem * > Copy_of_problem_pt
Definition: problem.h:234
unsigned & max_newton_iterations()
Access function to max Newton iterations before giving up.
Definition: problem.h:1594
void add_eigenvector_to_dofs(const double &epsilon, const DoubleVector &eigenvector)
Definition: problem.cc:8747
double & newton_solver_tolerance()
Definition: problem.h:1621
Mesh * Mesh_pt
The mesh pointer.
Definition: problem.h:167
void activate_fold_tracking(double *const ¶meter_pt, const bool &block_solve=true)
Definition: problem.cc:10103
double Parameter_derivative
Storage for the derivative of the global parameter wrt arc-length.
Definition: problem.h:752
Time * time_pt() const
Return a pointer to the global time object (const version).
Definition: problem.h:1510
void flush_global_data()
Definition: problem.h:1662
virtual void sparse_assemble_row_or_column_compressed_with_lists(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)
Definition: problem.cc:4930
Vector< Data * > Global_data_pt
Definition: problem.h:425
Vector< double * > Dof_pt
Vector of pointers to dofs.
Definition: problem.h:554
void p_adapt()
Definition: problem.h:2881
double DTSF_max_increase
Definition: problem.h:713
void p_refine_uniformly_and_prune(const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
Definition: problem.h:2694
Mesh *& mesh_pt()
Return a pointer to the global mesh.
Definition: problem.h:1280
void p_refine_selected_elements(const Vector< unsigned > &elements_to_be_refined)
Definition: problem.cc:15159
unsigned setup_element_count_per_dof()
Definition: problem.cc:230
void newton_solve()
Use Newton method to solve the problem.
Definition: problem.cc:8783
bool Keep_temporal_error_below_tolerance
Definition: problem.h:2209
bool Shut_up_in_newton_solve
Definition: problem.h:2191
void setup_base_mesh_info_after_pruning()
Vector< Mesh * > Sub_mesh_pt
Vector of pointers to submeshes.
Definition: problem.h:170
Vector< double > Max_res
Maximum residuals at start and after each newton iteration.
Definition: problem.h:606
EigenSolver * Eigen_solver_pt
Pointer to the eigen solver for the problem.
Definition: problem.h:182
bool Bisect_to_find_bifurcation
Boolean to control wheter bisection is used to located bifurcation.
Definition: problem.h:793
void copy(Problem *orig_problem_pt)
Definition: problem.cc:11865
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)
Definition: problem.cc:4484
void add_to_dofs(const double &lambda, const DoubleVector &increment_dofs)
Add lambda x incremenet_dofs[l] to the l-th dof.
Definition: problem.cc:3564
double DTSF_min_decrease
Definition: problem.h:718
double Minimum_dt_but_still_proceed
Definition: problem.h:725
unsigned Desired_newton_iterations_ds
Definition: problem.h:784
void refine_uniformly_and_prune(DocInfo &doc_info)
Definition: problem.h:2627
void disable_store_local_dof_pt_in_elements()
Definition: problem.h:1703
ExplicitTimeStepper *& explicit_time_stepper_pt()
Return a pointer to the explicit timestepper.
Definition: problem.h:1555
bool Calculate_hessian_products_analytic
Definition: problem.h:244
void store_current_dof_values()
Store the current values of the degrees of freedom.
Definition: problem.cc:8607
double & maximum_dt()
Access function to max timestep in adaptive timestepping.
Definition: problem.h:1588
void deactivate_bifurcation_tracking()
Definition: problem.h:2353
virtual double global_temporal_error_norm()
Definition: problem.h:1230
Assembly_method
Enumerated flags to determine which sparse assembly method is used.
Definition: problem.h:645
@ Perform_assembly_using_two_arrays
Definition: problem.h:650
@ Perform_assembly_using_maps
Definition: problem.h:648
@ Perform_assembly_using_two_vectors
Definition: problem.h:647
@ Perform_assembly_using_vectors_of_pairs
Definition: problem.h:646
@ Perform_assembly_using_lists
Definition: problem.h:649
void enable_globally_convergent_newton_method()
enable globally convergent Newton method
Definition: problem.h:2003
Mesh *& mesh_pt(const unsigned &imesh)
Definition: problem.h:1293
int Sign_of_jacobian
Storage for the sign of the global Jacobian.
Definition: problem.h:745
void calculate_predictions()
Calculate predictions.
Definition: problem.cc:11656
double arc_length_step_solve_helper(double *const ¶meter_pt, const double &ds, const unsigned &max_adapt)
Definition: problem.cc:10515
double Max_residuals
Definition: problem.h:610
unsigned nsub_mesh() const
Return number of submeshes.
Definition: problem.h:1323
void unset_analytic_hessian_products()
Definition: problem.h:296
unsigned ntime_stepper() const
Return the number of time steppers.
Definition: problem.h:1680
double * dof_pt(const unsigned &i) const
Pointer to i-th dof in the problem (const version)
Definition: problem.h:1831
bool Use_globally_convergent_newton_method
Use the globally convergent newton method.
Definition: problem.h:214
LinearSolver * Default_linear_solver_pt
Pointer to the default linear solver.
Definition: problem.h:188
double Minimum_ds
Minimum desired value of arc-length.
Definition: problem.h:787
double Numerical_zero_for_sparse_assembly
Definition: problem.h:671
void solve_eigenproblem(const unsigned &n_eval, Vector< std::complex< double >> &eigenvalue, const bool &steady=true)
Definition: problem.h:1937
double FD_step_used_in_get_hessian_vector_products
Definition: problem.h:685
unsigned Sparse_assemble_with_arrays_initial_allocation
Definition: problem.h:658
double Ds_current
Storage for the current step value.
Definition: problem.h:780
virtual void set_initial_condition()
Definition: problem.h:1198
LinearSolver * Mass_matrix_solver_for_explicit_timestepper_pt
Definition: problem.h:179
unsigned long assign_eqn_numbers(const bool &assign_local_eqn_numbers=true)
Definition: problem.cc:1989
double & dof_derivative(const unsigned &i)
Definition: problem.h:1168
double Minimum_dt
Minimum desired dt: if dt falls below this value, exit.
Definition: problem.h:706
TimeStepper *& time_stepper_pt()
Definition: problem.h:1524
Problem()
Definition: problem.cc:69
virtual void actions_after_adapt()
Actions that are to be performed after a mesh adaptation.
Definition: problem.h:1025
void p_refine_uniformly()
Definition: problem.h:2737
void assign_eigenvector_to_dofs(DoubleVector &eigenvector)
Assign the eigenvector passed to the function to the dofs.
Definition: problem.cc:8716
void unsteady_newton_solve(const double &dt)
Definition: problem.cc:10953
bool Use_continuation_timestepper
Boolean to control original or new storage of dof stuff.
Definition: problem.h:758
void get_derivative_wrt_global_parameter(double *const ¶meter_pt, DoubleVector &result)
Definition: problem.cc:7887
void enable_mass_matrix_reuse()
Definition: problem.cc:11807
LinearAlgebraDistribution * Dof_distribution_pt
Definition: problem.h:460
void refine_uniformly()
Definition: problem.h:2640
bool Problem_is_nonlinear
Definition: problem.h:628
void refine_uniformly_and_prune(const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info)
Definition: problem.h:2605
double & minimum_dt()
Access function to min timestep in adaptive timestepping.
Definition: problem.h:1582
void operator=(const Problem &)=delete
Broken assignment operator.
AssemblyHandler * Default_assembly_handler_pt
Pointer to the default assembly handler.
Definition: problem.h:194
std::map< double *, bool > Calculate_dparameter_analytic
Definition: problem.h:239
Time * Time_pt
Pointer to global time for the problem.
Definition: problem.h:197
DoubleVectorWithHaloEntries Element_count_per_dof
Definition: problem.h:560
void refine_uniformly(DocInfo &doc_info)
Definition: problem.h:2614
Data *& global_data_pt(const unsigned &i)
Return a pointer to the the i-th global data object.
Definition: problem.h:1647
virtual void actions_before_newton_convergence_check()
Definition: problem.h:1048
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)
Definition: problem.h:2504
void set_consistent_pinned_values_for_continuation()
Definition: problem.cc:10466
void delete_all_external_storage()
Definition: problem.cc:16355
unsigned Sparse_assemble_with_arrays_allocation_increment
Definition: problem.h:663
void set_analytic_dparameter(double *const ¶meter_pt)
Definition: problem.h:256
virtual void actions_after_newton_step()
Definition: problem.h:1058
bool Pause_at_end_of_sparse_assembly
Definition: problem.h:633
double arc_length_step_solve(double *const ¶meter_pt, const double &ds, const unsigned &max_adapt=0)
Definition: problem.cc:10294
Vector< double > * Saved_dof_pt
Pointer to vector for backup of dofs.
Definition: problem.h:207
AssemblyHandler * Assembly_handler_pt
Definition: problem.h:185
void disable_info_in_newton_solve()
Disable the output of information when in the newton solver.
Definition: problem.h:2941
unsigned Dof_derivative_offset
Definition: problem.h:766
virtual void actions_before_read_unstructured_meshes()
Definition: problem.h:1095
const OomphCommunicator * communicator_pt() const
access function to the oomph-lib communicator, const version
Definition: problem.h:1252
Vector< TimeStepper * > Time_stepper_pt
Definition: problem.h:201
void doc_errors()
Get max and min error for all elements in submeshes.
Definition: problem.h:2926
bool Mass_matrix_reuse_is_enabled
Definition: problem.h:691
void enable_discontinuous_formulation()
Definition: problem.h:1727
bool distributed() const
Definition: problem.h:808
bool are_hessian_products_calculated_analytically()
Definition: problem.h:303
virtual void get_jacobian(DoubleVector &residuals, DenseDoubleMatrix &jacobian)
Definition: problem.cc:3890
ExplicitTimeStepper * Explicit_time_stepper_pt
Pointer to a single explicit timestepper.
Definition: problem.h:204
void dump(const std::string &dump_file_name) const
Definition: problem.h:2078
void p_unrefine_uniformly(DocInfo &doc_info)
Definition: problem.cc:15960
bool mass_matrix_reuse_is_enabled()
Return whether the mass matrix is being reused.
Definition: problem.h:2568
void disable_discontinuous_formulation()
Definition: problem.h:1736
void refine_uniformly(const unsigned &i_mesh)
Do uniform refinement for submesh i_mesh without documentation.
Definition: problem.h:2651
bool Use_predictor_values_as_initial_guess
Use values from the time stepper predictor as an initial guess.
Definition: problem.h:229
void unset_analytic_dparameter(double *const ¶meter_pt)
Definition: problem.h:263
void refine_uniformly_aux(const Vector< unsigned > &nrefine_for_mesh, DocInfo &doc_info, const bool &prune)
Definition: problem.cc:15445
double & time()
Return the current value of continuous time.
Definition: problem.cc:11531
Definition: sum_of_matrices.h:262
Definition: timesteppers.h:231
Definition: timesteppers.h:63
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
#define max(a, b)
Definition: datatypes.h:23
Matrix< Type, Size, 1 > Vector
\cpp11 SizeĆ1 vector of type Type.
Definition: Eigen/Eigen/src/Core/Matrix.h:515
Vector::Scalar omega(const Vector &t, const Vector &s, RealScalar angle)
Definition: IDRS.h:36
squared absolute value
Definition: GlobalFunctions.h:87
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
double epsilon
Definition: osc_ring_sarah_asymptotics.h:43
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
void product(const MatrixType &m)
Definition: product.h:42
std::ofstream out("Result.txt")
const char Y
Definition: test/EulerAngles.cpp:32