5#ifndef D3F_ST_VENANT_ELEM_DISC_H
6#define D3F_ST_VENANT_ELEM_DISC_H
9#include "../../../ConvectionDiffusion/fv1/convection_diffusion_fv1.h"
16namespace ug {
namespace d3f{
23template <
typename TDomain>
26 static const int dim = TDomain::dim;
60template<
typename TDomain>
63 static const int dim = TDomain::dim;
92 UG_LOG(
"Creating 1D St. Venant element discretizations...\n");
94 std::vector<SmartPtr<TStVenant>> elemDiscs;
100 auto A = disc_A->value();
101 auto v = disc_v->value();
110 disc_A->set_upwind(upwind);
111 disc_v->set_upwind(upwind);
116 m_boundary_dir = boundaryDirection.template cast_dynamic<TNumberData>();
120 adv_velocity->add(v, downStreamVec);
122 disc_A->set_velocity(adv_velocity);
123 disc_v->set_velocity(adv_velocity);
134 flux_inner->add(h, downStreamVec);
135 flux_inner->add(bed_elevation, downStreamVec);
141 disc_v->set_flux(flux_v);
151 roughness->set_hmin(1e-8);
155 disc_v->set_reaction_rate(roughness);
158 elemDiscs.push_back(disc_A);
159 elemDiscs.push_back(disc_v);
161 UG_LOG(
"Successfully created St. Venant element discretizations.\n");
FV Discretization for the Convection-Diffusion Equation.
Definition convection_diffusion_fv1.h:61
Calculates a river bed profile by applying a constant slope starting from a specific boundary.
Definition sohle.h:61
Calculates the river bottom friction (reaction rate) using Manning's formula.
Definition manning_roughness_1d.h:18
Factory class to construct and link the coupled St. Venant equations.
Definition st_venant_elem_disc.h:61
SmartPtr< TScaleAddLinkerVector > m_v_velocity
Definition st_venant_elem_disc.h:211
SmartPtr< TNumberData > m_A_neumann
Definition st_venant_elem_disc.h:205
SmartPtr< TScaleAddLinkerNumber > export_flux()
Definition st_venant_elem_disc.h:167
CplUserData< MathVector< dim >, dim > TVectorData
Definition st_venant_elem_disc.h:73
void set_b(SmartPtr< TNumberData > b)
Definition st_venant_elem_disc.h:179
std::vector< std::string > m_functions
Definition st_venant_elem_disc.h:188
SmartPtr< TScaleAddLinkerNumber > m_v_gsh
Definition st_venant_elem_disc.h:209
SmartPtr< s_type > m_s
Definition st_venant_elem_disc.h:199
SmartPtr< TNumberData > export_manning_roughness()
Definition st_venant_elem_disc.h:169
void set_ks(SmartPtr< TNumberData > ks)
Definition st_venant_elem_disc.h:181
StVenantElemDiscFactory()
Definition st_venant_elem_disc.h:78
void set_width(SmartPtr< TNumberData > b)
Definition st_venant_elem_disc.h:180
virtual ~StVenantElemDiscFactory()=default
SmartPtr< TNumberData > m_boundary_dir
Definition st_venant_elem_disc.h:204
SmartPtr< TNumberData > get_boundary_dir()
Definition st_venant_elem_disc.h:172
ConvectionShapesFullUpwind< dim > TUpwind
Definition st_venant_elem_disc.h:70
EdgeOrientation< TDomain > TOrient
Definition st_venant_elem_disc.h:69
IElemDisc< TDomain > TElemDisc
Definition st_venant_elem_disc.h:66
SmartPtr< TNumberData > m_v_neumann
Definition st_venant_elem_disc.h:206
CplUserData< number, dim > TNumberData
Definition st_venant_elem_disc.h:72
SmartPtr< TScaleAddLinkerNumber > m_v_05
Definition st_venant_elem_disc.h:212
void set_gravity(number g)
Definition st_venant_elem_disc.h:178
SmartPtr< TScaleAddLinkerNumber > get_source_term()
Definition st_venant_elem_disc.h:171
void set_diffusion(number nu)
Definition st_venant_elem_disc.h:182
number m_diffusion
Definition st_venant_elem_disc.h:193
SmartPtr< TNumberData > get_neumann_V()
Definition st_venant_elem_disc.h:174
void set_h_threshold(number t)
Definition st_venant_elem_disc.h:183
void set_domain(SmartPtr< TDomain > domain)
Definition st_venant_elem_disc.h:177
SmartPtr< TScaleAddLinkerVector > m_v_flux
Definition st_venant_elem_disc.h:208
SmartPtr< TVectorData > export_v_flux_term()
Definition st_venant_elem_disc.h:170
static const int dim
Definition st_venant_elem_disc.h:63
SmartPtr< TScaleAddLinkerNumber > m_total_source_term
Definition st_venant_elem_disc.h:213
SmartPtr< TDomain > m_domain
Definition st_venant_elem_disc.h:189
SmartPtr< TVectorData > m_v_flux_term
Definition st_venant_elem_disc.h:203
StVenantElemDisc< TDomain > TStVenant
Definition st_venant_elem_disc.h:67
SmartPtr< TNumberData > m_manningRoughness
Definition st_venant_elem_disc.h:202
SmartPtr< TNumberData > get_neumann_A()
Definition st_venant_elem_disc.h:173
std::vector< SmartPtr< TStVenant > > create_1d_swe(const char *subsets)
Creates the elemental discretizations for the 1D Shallow Water Equations.
Definition st_venant_elem_disc.h:91
ScaleAddLinker< MathVector< dim >, dim, number > TScaleAddLinkerVector
Definition st_venant_elem_disc.h:74
number m_threshold
Definition st_venant_elem_disc.h:194
number m_gravity
Definition st_venant_elem_disc.h:192
const char * get_disc_type()
Definition st_venant_elem_disc.h:185
ConstantSohlGradient< TDomain > s_type
Definition st_venant_elem_disc.h:68
SmartPtr< TScaleAddLinkerNumber > export_velocity()
Definition st_venant_elem_disc.h:168
SmartPtr< TNumberData > m_b
Definition st_venant_elem_disc.h:198
InverseLinker< dim > TInverseLinker
Definition st_venant_elem_disc.h:76
SmartPtr< TUpwind > m_upwind
Definition st_venant_elem_disc.h:214
SmartPtr< TScaleAddLinkerVector > m_A_velocity
Definition st_venant_elem_disc.h:210
SmartPtr< TNumberData > m_frictionKs
Definition st_venant_elem_disc.h:197
SmartPtr< s_type > export_sohle()
Definition st_venant_elem_disc.h:166
ScaleAddLinker< number, dim, number > TScaleAddLinkerNumber
Definition st_venant_elem_disc.h:75
Element discretization for the 1D Shallow Water (St. Venant) Equations.
Definition st_venant_elem_disc.h:24
CplUserData< MathVector< dim >, dim > TVectorData
Definition st_venant_elem_disc.h:31
SmartPtr< TNumberData > get_width_data()
Definition st_venant_elem_disc.h:44
SmartPtr< DataExport< MathVector< dim >, dim > > m_exGrad
Definition st_venant_elem_disc.h:51
CplUserData< number, dim > TNumberData
Definition st_venant_elem_disc.h:30
SmartPtr< TInverseLinker > get_height_data()
Definition st_venant_elem_disc.h:45
void set_width_data(SmartPtr< TNumberData > b)
Definition st_venant_elem_disc.h:47
static const int dim
Definition st_venant_elem_disc.h:26
SmartPtr< DataExport< number, dim > > m_exValue
Definition st_venant_elem_disc.h:50
SmartPtr< TNumberData > m_height
Definition st_venant_elem_disc.h:52
ug::ConvectionDiffusionPlugin::ConvectionDiffusionFV1< TDomain > base_type
Definition st_venant_elem_disc.h:29
SmartPtr< TNumberData > m_width
Definition st_venant_elem_disc.h:53
InverseLinker< dim > TInverseLinker
Definition st_venant_elem_disc.h:32
StVenantElemDisc(const char *functions, const char *subsets)
Constructor initializing the underlying convection-diffusion element.
Definition st_venant_elem_disc.h:37
Linker to evaluate the normal component of a downstream vector at a boundary.
Definition st_venant_wall_bnd.h:24
SmartPtr< T, FreePolicy > make_sp(T *inst)
Boundary condition linkers for the St. Venant equations.