12#include "../Utils_Fill.h"
55 B[ 0 ] =
z[
f ] + 1.0;
68 B[ 0 ] =
z[
f ] - 1.0;
82 cout <<
"=== BVP: finite-difference solution of Berman eqn ===\n";
92 double delta_Re = 0.1;
101 const double tol = 1.e-4;
107 for (
int i = 0; i < N; ++i )
109 double y = ode.
solution().coord( i );
111 ode.
solution()( i,
f ) = 1.5 * ( y - y * y * y / 3 );
113 ode.
solution()( i,
fd ) = 1.5 * ( 1 - y * y );
130 catch (
const std::runtime_error& error )
132 cout <<
" \033[1;31;48m * FAILED THROUGH EXCEPTION BEING RAISED \033[0m\n";
138 cout <<
" Bifurcation detected between Re = " << problem.
Re - delta_Re
139 <<
" and Re = " << problem.
Re <<
"\n";
140 cout <<
" Continuing further.\n";
142 problem.
Re += delta_Re;
145 while ( problem.
Re < 10.0 + tol );
150 if ( std::abs( 5.99898 - ode.
solution()( 0,
fdd ) ) > tol )
152 cout <<
"\033[1;31;48m * FAILED \033[0m\n";
153 cout << std::abs( 5.99898 - ode.
solution()( 0,
fdd ) ) <<
"\n";
158 cout <<
"\033[1;32;48m * PASSED \033[0m\n";
A shorter bundled include file for ODE_BVP and PDE_IBVP codes.
A matrix class that constructs a DENSE matrix as a row major std::vector of DenseVectors.
An DenseVector class – a dense vector object.
An equation object base class used in the IBVP classes (and others).
Define the Berman equation by inheriting Equation base class.
Berman_equation()
The Berman equation is a 4th order real ODE.
void matrix0(const DenseVector< double > &x, DenseMatrix< double > &m) const
Define the matrix in terms of the current state vector.
void residual_fn(const DenseVector< double > &z, DenseVector< double > &g) const
The Berman equation.
double Re
The Reynolds number.
void residual_fn(const DenseVector< double > &z, DenseVector< double > &B) const
A blank virtual residual function method.
void residual_fn(const DenseVector< double > &z, DenseVector< double > &B) const
A blank virtual residual function method.
A templated object for real/complex vector system of first-order ordinary differential equations.
OneD_Node_Mesh< _Type, _Xtype > & solution()
void solve2()
Formulate and solve the ODE using Newton iteration and a second-order finite difference scheme.
A base class to be inherited by objects that define residuals.
double g(1.0)
gravitational acceleration
DenseVector< double > uniform_node_vector(const double &lower, const double &upper, const std::size_t &N)
Return a DENSE vector with the nodal points of a uniform mesh distributed between the upper/lower bou...
A collection of OO numerical routines aimed at simple (typical) applied problems in continuum mechani...
void fill_identity(CppNoddy::Sequential_Matrix_base< _Type > &A)
Fill diagonal with unit values.