34#ifndef __H__UG__PLUGINS__LEVEL_SET_DARCY_VELOCITY_LINKER__
35#define __H__UG__PLUGINS__LEVEL_SET_DARCY_VELOCITY_LINKER__
65template <
typename TDomain,
typename TAlgebra>
67 :
public StdDataLinker<LSDarcyVelocityLinker<TDomain, TAlgebra>, MathVector<TDomain::dim>, TDomain::dim>
76 static const int dim = domain_type::dim;
112 (rRefElem.
num(0), elem, si,
false, vCornerCoords,
time);
123 UG_THROW (
"LSDarcyVelocityLinker: Element is necessary for the evaluation.");
126 template <
int refDim>
139 for(
size_t ip = 0;
ip < nip; ++
ip) vValue[
ip] = 0.0;
143 std::vector<number> vDensity(nip);
144 std::vector<number> vViscosity(nip);
145 std::vector<MathVector<dim> > vGravity(nip);
146 std::vector<MathVector<dim> > vPressureGrad(nip);
147 std::vector<MathMatrix<dim,dim> > vPermeability(nip);
149 (*m_spDensity)(&vDensity[0], vGlobIP,
time, si,
150 elem, vCornerCoords, vLocIP, nip, u, vJT);
151 (*m_spViscosity)(&vViscosity[0], vGlobIP,
time, si,
152 elem, vCornerCoords, vLocIP, nip, u, vJT);
153 (*m_spGravity)(&vGravity[0], vGlobIP,
time, si,
154 elem, vCornerCoords, vLocIP, nip, u, vJT);
155 (*m_spPressureGrad)(&vPressureGrad[0], vGlobIP,
time, si,
156 elem, vCornerCoords, vLocIP, nip, u, vJT);
157 (*m_spPermeability)(&vPermeability[0], vGlobIP,
time, si,
158 elem, vCornerCoords, vLocIP, nip, u, vJT);
160 for(
size_t ip = 0;
ip < nip; ++
ip)
177 template <
int refDim>
193 for(
size_t ip = 0;
ip < nip; ++
ip) vDarcyVel[
ip] = 0.0;
195 this->set_zero(vvvDeriv, nip);
206 for(
size_t ip = 0;
ip < nip; ++
ip)
229 this->set_zero(vvvDeriv, nip);
233 for(
size_t ip = 0;
ip < nip; ++
ip)
243 for(
size_t sh = 0; sh < this->num_sh(commonFct); ++sh)
252 for(
size_t ip = 0;
ip < nip; ++
ip)
253 for(
size_t fct = 0; fct <
m_spDDensity->num_fct(); ++fct)
271 for(
size_t sh = 0; sh < this->num_sh(commonFct); ++sh)
273 UG_ASSERT(commonFct < vvvDeriv[
ip].size(), commonFct<<
", "<<vvvDeriv[
ip].size());
274 UG_ASSERT(sh < vvvDeriv[
ip][commonFct].size(), sh<<
", "<<vvvDeriv[
ip][commonFct].size());
277 vDDensity[sh], Kmug);
283 for(
size_t ip = 0;
ip < nip; ++
ip)
284 for(
size_t fct = 0; fct <
m_spDGravity->num_fct(); ++fct)
299 for(
size_t sh = 0; sh < this->num_sh(commonFct); ++sh)
304 vvvDeriv[
ip][commonFct][sh] += tmp;
310 for(
size_t ip = 0;
ip < nip; ++
ip)
326 for(
size_t sh = 0; sh < this->num_sh(commonFct); ++sh)
331 vvvDeriv[
ip][commonFct][sh] += tmp;
337 for(
size_t ip = 0;
ip < nip; ++
ip)
359 for(
size_t sh = 0; sh < this->num_sh(commonFct); ++sh)
364 vvvDeriv[
ip][commonFct][sh] += tmp;
387 m_spDViscosity = data.template cast_dynamic<DependentUserData<number, dim> >();
400 m_spDDensity = data.template cast_dynamic<DependentUserData<number, dim> >();
413 m_spDGravity = data.template cast_dynamic<DependentUserData<MathVector<dim>,
dim> >();
430 static const size_t _K_ = 0;
445 static const size_t _G_ = 3;
parameterString s
Definition Biogas.lua:2
TData & value(size_t s, size_t ip)
virtual ReferenceObjectID reference_object_id() const=0
const MathVector< dim > & ip(size_t s, size_t ip) const
Linker for the Darcy velocity in a domain with a free surface specified by the level-set.
Definition ls_darcy_velocity_linker.h:68
SmartPtr< extrapol_type > m_spExtrapolation
extrapolation by the level-set function
Definition ls_darcy_velocity_linker.h:427
void eval_and_deriv(MathVector< dim > vDarcyVel[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< refDim > vLocIP[], const size_t nip, LocalVector *u, bool bDeriv, int s, std::vector< std::vector< MathVector< dim > > > vvvDeriv[], const MathMatrix< refDim, dim > *vJT=NULL) const
Definition ls_darcy_velocity_linker.h:178
LSDarcyVelocityLinker(SmartPtr< extrapol_type > spExtrapol)
Definition ls_darcy_velocity_linker.h:85
static const size_t _K_
import for permeability
Definition ls_darcy_velocity_linker.h:430
void evaluate(MathVector< dim > &value, const MathVector< dim > &globIP, number time, int si) const
Definition ls_darcy_velocity_linker.h:119
int elem_cut(GridObject *elem, int si, const MathVector< dim > vCornerCoords[], number time) const
Definition ls_darcy_velocity_linker.h:100
SmartPtr< DependentUserData< MathVector< dim >, dim > > m_spDGravity
Definition ls_darcy_velocity_linker.h:447
IInterfaceExtrapolation< domain_type, algebra_type > extrapol_type
Definition ls_darcy_velocity_linker.h:82
static const size_t _DP_
import for pressure gradient
Definition ls_darcy_velocity_linker.h:450
void set_permeability(number val)
Definition ls_darcy_velocity_linker.h:378
void set_density(SmartPtr< CplUserData< number, dim > > data)
set density import
Definition ls_darcy_velocity_linker.h:397
void set_viscosity(SmartPtr< CplUserData< number, dim > > data)
set permeability import
Definition ls_darcy_velocity_linker.h:384
void set_pressure_gradient(SmartPtr< CplUserData< MathVector< dim >, dim > > data)
set pressure gradient import
Definition ls_darcy_velocity_linker.h:418
static const size_t _G_
import for gravity
Definition ls_darcy_velocity_linker.h:445
SmartPtr< DependentUserData< MathMatrix< dim, dim >, dim > > m_spDPermeability
Definition ls_darcy_velocity_linker.h:432
StdDataLinker< LSDarcyVelocityLinker< domain_type, algebra_type >, MathVector< dim >, dim > base_type
Definition ls_darcy_velocity_linker.h:79
void set_density(number val)
Definition ls_darcy_velocity_linker.h:404
static const int dim
Definition ls_darcy_velocity_linker.h:76
void set_viscosity(number val)
Definition ls_darcy_velocity_linker.h:391
SmartPtr< DependentUserData< MathVector< dim >, dim > > m_spDPressureGrad
Definition ls_darcy_velocity_linker.h:452
TAlgebra algebra_type
Definition ls_darcy_velocity_linker.h:73
SmartPtr< DependentUserData< number, dim > > m_spDDensity
Definition ls_darcy_velocity_linker.h:442
SmartPtr< CplUserData< number, dim > > m_spDensity
Definition ls_darcy_velocity_linker.h:441
static const size_t _MU_
import for viscosity
Definition ls_darcy_velocity_linker.h:435
void evaluate(MathVector< dim > vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< refDim > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< refDim, dim > *vJT=NULL) const
Definition ls_darcy_velocity_linker.h:127
SmartPtr< CplUserData< MathVector< dim >, dim > > m_spPressureGrad
Definition ls_darcy_velocity_linker.h:451
SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > m_spPermeability
Definition ls_darcy_velocity_linker.h:431
void set_gravity(SmartPtr< CplUserData< MathVector< dim >, dim > > data)
set gravity import
Definition ls_darcy_velocity_linker.h:410
SmartPtr< DependentUserData< number, dim > > m_spDViscosity
Definition ls_darcy_velocity_linker.h:437
void set_permeability(SmartPtr< CplUserData< MathMatrix< dim, dim >, dim > > data)
set permeability import
Definition ls_darcy_velocity_linker.h:371
SmartPtr< CplUserData< MathVector< dim >, dim > > m_spGravity
Definition ls_darcy_velocity_linker.h:446
TDomain domain_type
Definition ls_darcy_velocity_linker.h:70
SmartPtr< CplUserData< number, dim > > m_spViscosity
Definition ls_darcy_velocity_linker.h:436
static const size_t _RHO_
import for density
Definition ls_darcy_velocity_linker.h:440
size_t num(int dim) const
void set_num_input(size_t num)
size_t input_common_fct(size_t i, size_t fct) const
virtual void set_input(size_t i, SmartPtr< ICplUserData< dim > > input, SmartPtr< UserDataInfo > info)
virtual bool zero_derivative() const
void MatScale(matrix_t &mOut, typename matrix_t::value_type s, const matrix_t &m)
#define UG_ASSERT(expr, msg)
void MatVecMult(vector_t_out &vOut, const matrix_t &m, const vector_t_in &v)
void VecScaleAppend(vector_t &vOut, typename vector_t::value_type s1, const vector_t &v1)
void VecSubtract(vector_t &vOut, const vector_t &v, typename vector_t::value_type s)
void VecScale(vector_t &vOut, const vector_t &v, typename vector_t::value_type s)
SmartPtr< T, FreePolicy > make_sp(T *inst)