27 f[ 0 ] = q[ 0 ] * q[ 0 ] / 2;
39 c[ 0 ] = std::abs( q[ 0 ] );
40 c[ 1 ] = std::abs( q[ 0 ] );
46 std::vector<bool> inflow( q.
size(),
false );
48 if ( face_index == 1 )
53 if ( face_index == 3 )
66 q[ 0 ] = std::sin( 2 * M_PI * x );
80 cout <<
"=== Hyperbolic: 2D nonlinear advection in x =========\n";
84 const double west = 1.0;
85 const double east = 0.0;
86 const double south = 0.0;
87 const double north = 1.0;
88 const unsigned N = 51;
93 TwoD_TVDLF_Mesh NlinAdv_mesh( faces_x, faces_y, &conservative_problem, Example::Q_init );
97 unsigned loop_counter( 0 );
106 NlinAdv_mesh.
update( 0.49 );
110 while ( ( NlinAdv_mesh.
get_time() < 0.4 ) && ( loop_counter < 1000 ) );
113 if ( ( asym > 1.e-10 ) || ( loop_counter >= 1000 ) )
115 cout <<
"\033[1;31;48m * FAILED \033[0m\n";
116 cout <<
"asymmetry = " << asym <<
"\n";
117 cout <<
"loop counter = " << loop_counter <<
"\n";
122 cout <<
"\033[1;32;48m * PASSED \033[0m\n";
A shorter bundled include file for hyperbolic problems.
An DenseVector class – a dense vector object.
std::size_t size() const
A pass-thru definition to get the size of the vector.
void flux_fn_y(const DenseVector< double > &x, const DenseVector< double > &q, DenseVector< double > &f) const
A virtual flux function for the y-derivative.
std::vector< bool > edge_values(const int &face_index, const DenseVector< double > &x, DenseVector< double > &q) const
edge conditions
void flux_fn_x(const DenseVector< double > &x, const DenseVector< double > &q, DenseVector< double > &f) const
A virtual flux function for the x-derivative.
void max_charac_speed(const DenseVector< double > &x, const DenseVector< double > &q, DenseVector< double > &c) const
Bound the wave speed.
A class to represent a two-dimensional hyperbolic system of equations.
DenseVector< double > get_point_values(const DenseVector< double > &x)
Get the vector of unknowns at a point in the 2D mesh.
const double & get_time() const
Get a const reference to the time value for the current mesh.
double update(const double &CFL, const double &max_dt=std::numeric_limits< long double >::max())
Update the mesh object.
void set_limiter(const unsigned &id)
Set the limiter type to be applied in the slope values.
void Q_init(const double &x, DenseVector< double > &q)
Set the initial state of the system.
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...