16#include "../Utils_Fill.h"
51 class Karman_left_BC :
public Residual<double>
61 B[ 2 ] =
z[
W ] - 1.0;
65 class Karman_right_BC :
public Residual<double>
87 cout <<
"=== BVP: finite-difference soln of Karman eqns ======\n";
88 cout <<
"=== Here we use an adaptive mesh after timing. ===\n";
105 for (
int i = 0; i < N; ++i )
107 double y = ode.
solution().coord( i );
119 catch (
const std::runtime_error &error )
121 cout <<
" \033[1;31;48m * FAILED THROUGH EXCEPTION BEING RAISED \033[0m\n";
124 std::cout <<
"=== Adapting the mesh.\n";
127 std::string dirname(
"./DATA");
128 mkdir( dirname.c_str(), S_IRWXU );
129 TrackerFile my_file(
"./DATA/BVP_Karman.dat", 12 );
132 const double tol( 1.e-4 );
133 int adapt_counter ( 1 );
143 cout <<
" Adapted mesh to " << ode.
solution().get_nnodes() <<
" nodes.\n";
144 cout <<
" Adapted error = " << abs( ode.
solution()( N - 1,
V ) + 0.88447 ) <<
"\n";
147 while ( ( abs( ode.
solution()( N - 1,
V ) + 0.88447 ) > tol ) && ( adapt_counter < 10 ) );
152 if ( abs( ode.
solution()( N - 1,
V ) + 0.88447 ) > tol )
154 cout <<
"\033[1;31;48m * FAILED \033[0m\n";
155 cout <<
" Difference = " << abs( ode.
solution()( N - 1,
V ) + 0.88447 ) <<
"\n";
160 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 Karman equations.
Karman_equations()
The Karman system is a 5th order real system of ODEs.
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 > &f) const
Define the Karman system.
Define the boundary conditions.
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()
std::pair< unsigned, unsigned > adapt(const double &adapt_tol)
Adapt the computational mesh ONCE.
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.
void push_ptr(double *scalar, std::string desc="")
DenseVector< double > power_node_vector(const double &lower, const double &upper, const std::size_t &N, const double &power)
Return a DENSE vector with the nodal points of a non-uniform mesh distributed between the upper/lower...
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.