Plugins
Loading...
Searching...
No Matches
ug::d3f::RiverSSSManager< TDomain, TAlgebra > Class Template Reference

Orchestrates the mass exchange between a 1D river and a 3D subsurface. More...

#include <add_river_sss.h>

Public Types

typedef TGrid::template EdgeAttachmentAccessor< ANumberaccessor_type
 
typedef TSSSManager::line_sss_type line_sss_type
 
typedef TGridFunction::element_type TElem
 
typedef TDomain::grid_type TGrid
 
typedef GridFunction< TDomain, TAlgebra > TGridFunction
 
typedef RiverSingularSourcesAndSinks< dimTSSSManager
 

Public Member Functions

void evaluate_exchange_flux (SmartPtr< TGridFunction > u)
 Computes the mass-conservative exchange flux [m^2/s] integrated over each river edge.
 
SmartPtr< CplUserData< number, dim > > get_qex ()
 
void init_line_sss ()
 Creates line SSS objects in the 3D domain for all 1D river edges. Must be called once before the simulation starts.
 
void push_sss_manager (SmartPtr< TSSSManager > ssmngr)
 
 RiverSSSManager ()=default
 
 RiverSSSManager (SmartPtr< TGridFunction > riverU, SmartPtr< TGridFunction > ssU)
 Constructor.
 
void set_bottom_permeability (number perm)
 
void set_bottom_thickness (number thickness)
 
void set_density (SmartPtr< CplUserData< number, dim > > density)
 
void set_river_width (number width)
 
void update_line_sss (number dt)
 Updates SSS intensities with current 1D river levels.
 

Static Public Attributes

static const int dim = TDomain::dim
 

Private Member Functions

void cache_interface_elements (SmartPtr< TGridFunction > u)
 Identifies all 3D cells that contain at least one river segment.
 
MathVector< dimvAcc (Vertex *v) const
 

Private Attributes

accessor_type m_aaExchangeFlux
 
ANumber m_aExchangeFlux
 
number m_bottom_thickness = 1.0
 
number m_density = 998.2
 
number m_gravity = 9.81
 
std::vector< TElem * > m_interface_elements
 
number m_perm = 1e-10
 
SmartPtr< CplUserData< number, dim > > m_spDensity
 
SmartPtr< CplUserData< number, dim > > m_spExfiltrationFlux
 
SmartPtr< GlobalGridFunctionNumberData< TGridFunction > > m_spGlobEval
 
SmartPtr< TGridFunctionm_spRiverU
 
SmartPtr< TGridFunctionm_spSubsurfaceU
 
std::vector< numberm_vflux
 
number m_viscosity = 1e-3
 
std::vector< SmartPtr< line_sss_type > > m_vspLineSSS
 
std::vector< SmartPtr< TSSSManager > > m_vspSSSManager
 
number m_width = 1.0
 

Detailed Description

template<typename TDomain, typename TAlgebra>
class ug::d3f::RiverSSSManager< TDomain, TAlgebra >

Orchestrates the mass exchange between a 1D river and a 3D subsurface.

  • This manager handles the physical and numerical coupling of the two domains:
  • 1. Physical Formulation (Conductance Concept): The exchange flux is modeled using Darcy's law across a leaky riverbed (colmation layer). The flux $Q$ is proportional to the pressure gradient and a conductance term $\alpha$: $Q = L \cdot \alpha \cdot (p_{sub} - p_{riv})$ where $\alpha = \frac{K \cdot W}{\mu \cdot B}$ encompasses the riverbed's permeability ($K$), width ($W$), thickness ($B$), and the fluid's viscosity ($\mu$).
  • 2. Numerical Formulation (Semi-Implicit Coupling): To prevent severe oscillations ("ping-pong" effect between the domains) without the computational burden of a fully monolithic solver, a semi-implicit scheme is used. The river water head ($p_{riv}$) is treated explicitly (frozen at the beginning of the coupling step), acting as a constant singular source/sink intensity. The subsurface pressure ($p_{sub}$), however, is treated implicitly within the 3D solver's Newton process.
  • Template Parameters
    TDomainThe 3D domain type.
    TAlgebraThe algebra type.

Member Typedef Documentation

◆ accessor_type

template<typename TDomain , typename TAlgebra >
typedef TGrid::template EdgeAttachmentAccessor<ANumber> ug::d3f::RiverSSSManager< TDomain, TAlgebra >::accessor_type

◆ line_sss_type

template<typename TDomain , typename TAlgebra >
typedef TSSSManager::line_sss_type ug::d3f::RiverSSSManager< TDomain, TAlgebra >::line_sss_type

◆ TElem

template<typename TDomain , typename TAlgebra >
typedef TGridFunction::element_type ug::d3f::RiverSSSManager< TDomain, TAlgebra >::TElem

◆ TGrid

template<typename TDomain , typename TAlgebra >
typedef TDomain::grid_type ug::d3f::RiverSSSManager< TDomain, TAlgebra >::TGrid

◆ TGridFunction

template<typename TDomain , typename TAlgebra >
typedef GridFunction<TDomain, TAlgebra> ug::d3f::RiverSSSManager< TDomain, TAlgebra >::TGridFunction

◆ TSSSManager

template<typename TDomain , typename TAlgebra >
typedef RiverSingularSourcesAndSinks<dim> ug::d3f::RiverSSSManager< TDomain, TAlgebra >::TSSSManager

Constructor & Destructor Documentation

◆ RiverSSSManager() [1/2]

template<typename TDomain , typename TAlgebra >
ug::d3f::RiverSSSManager< TDomain, TAlgebra >::RiverSSSManager ( )
default

◆ RiverSSSManager() [2/2]

template<typename TDomain , typename TAlgebra >
ug::d3f::RiverSSSManager< TDomain, TAlgebra >::RiverSSSManager ( SmartPtr< TGridFunction riverU,
SmartPtr< TGridFunction ssU 
)
inline

Member Function Documentation

◆ cache_interface_elements()

◆ evaluate_exchange_flux()

template<typename TDomain , typename TAlgebra >
void ug::d3f::RiverSSSManager< TDomain, TAlgebra >::evaluate_exchange_flux ( SmartPtr< TGridFunction u)
inline

Computes the mass-conservative exchange flux [m^2/s] integrated over each river edge.

  • This function uses an exact analytical approach: it iterates over all 3D cells intersected by the river network and mathematically reconstructs the exact leakage defect that the 3D solver formulated during matrix assembly.
  • It evaluates the conductance term $\alpha = (K \cdot W) / (\mu \cdot B)$ against the fully converged, implicit subsurface pressure $p_{sub}^{n+1}$.
  • Parameters
    uThe implicitly converged 3D subsurface grid function (pressure).

References pcl::ProcessCommunicator::allreduce(), ug::d3f::RiverSSSManager< TDomain, TAlgebra >::cache_interface_elements(), ug::CollectCornerCoordinates(), ug::DoFRef(), SmartPtr< typename T, template< class TT > class FreePolicy >::get(), get(), grid(), ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_aaExchangeFlux, ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_bottom_thickness, ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_interface_elements, ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_spRiverU, ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_vflux, ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_viscosity, ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_vspSSSManager, ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_width, ug::DimFV1Geometry< int TDim, int TWorldDim >::num_scv(), pcl::NumProcs(), PCL_RO_SUM, ug::DimFV1Geometry< int TDim, int TWorldDim >::scv(), ug::DimFV1Geometry< int TDim, int TWorldDim >::update(), ug::d3f::RiverSSSManager< TDomain, TAlgebra >::vAcc(), ug::VecDistance(), and ug::EdgeVertices::vertex().

◆ get_qex()

template<typename TDomain , typename TAlgebra >
SmartPtr< CplUserData< number, dim > > ug::d3f::RiverSSSManager< TDomain, TAlgebra >::get_qex ( )
inline

◆ init_line_sss()

◆ push_sss_manager()

template<typename TDomain , typename TAlgebra >
void ug::d3f::RiverSSSManager< TDomain, TAlgebra >::push_sss_manager ( SmartPtr< TSSSManager ssmngr)
inline

◆ set_bottom_permeability()

template<typename TDomain , typename TAlgebra >
void ug::d3f::RiverSSSManager< TDomain, TAlgebra >::set_bottom_permeability ( number  perm)
inline

◆ set_bottom_thickness()

template<typename TDomain , typename TAlgebra >
void ug::d3f::RiverSSSManager< TDomain, TAlgebra >::set_bottom_thickness ( number  thickness)
inline

◆ set_density()

template<typename TDomain , typename TAlgebra >
void ug::d3f::RiverSSSManager< TDomain, TAlgebra >::set_density ( SmartPtr< CplUserData< number, dim > >  density)
inline

◆ set_river_width()

template<typename TDomain , typename TAlgebra >
void ug::d3f::RiverSSSManager< TDomain, TAlgebra >::set_river_width ( number  width)
inline

◆ update_line_sss()

◆ vAcc()

Member Data Documentation

◆ dim

template<typename TDomain , typename TAlgebra >
const int ug::d3f::RiverSSSManager< TDomain, TAlgebra >::dim = TDomain::dim
static

◆ m_aaExchangeFlux

◆ m_aExchangeFlux

template<typename TDomain , typename TAlgebra >
ANumber ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_aExchangeFlux
private

◆ m_bottom_thickness

◆ m_density

template<typename TDomain , typename TAlgebra >
number ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_density = 998.2
private

◆ m_gravity

template<typename TDomain , typename TAlgebra >
number ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_gravity = 9.81
private

◆ m_interface_elements

template<typename TDomain , typename TAlgebra >
std::vector<TElem*> ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_interface_elements
private

◆ m_perm

◆ m_spDensity

template<typename TDomain , typename TAlgebra >
SmartPtr<CplUserData<number, dim> > ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_spDensity
private

◆ m_spExfiltrationFlux

template<typename TDomain , typename TAlgebra >
SmartPtr<CplUserData<number, dim> > ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_spExfiltrationFlux
private

◆ m_spGlobEval

◆ m_spRiverU

◆ m_spSubsurfaceU

template<typename TDomain , typename TAlgebra >
SmartPtr<TGridFunction> ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_spSubsurfaceU
private

◆ m_vflux

template<typename TDomain , typename TAlgebra >
std::vector<number> ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_vflux
private

◆ m_viscosity

template<typename TDomain , typename TAlgebra >
number ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_viscosity = 1e-3
private

◆ m_vspLineSSS

template<typename TDomain , typename TAlgebra >
std::vector<SmartPtr<line_sss_type> > ug::d3f::RiverSSSManager< TDomain, TAlgebra >::m_vspLineSSS
private

◆ m_vspSSSManager

◆ m_width


The documentation for this class was generated from the following file: