7#ifndef __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__BEAR_SCHEIDEGGER__
8#define __H__UG__LIB_DISC__DENSITY_DRIVEN_FLOW__BEAR_SCHEIDEGGER__
27 :
public StdDataLinker< BearScheidegger<dim>, MathMatrix<dim,dim>, dim>
40 m_spDVelocity = vel.template cast_dynamic<DependentUserData<MathVector<dim>, dim> >();
52 m_spDVelocity = vel.template cast_dynamic<DependentUserData<MathVector<dim>, dim> >();
65 (*m_spVelocity)(q, globIP,
time, si);
74 for(
size_t d1 = 0; d1 < dim; ++d1)
75 for(
size_t d2 = 0; d2 < dim; ++d2)
76 D(d1,d2) = alpha*q[d1]*q[d2];
78 for(
size_t d = 0; d < dim; ++d)
94 std::vector<MathVector<dim> > vQ(nip);
95 (*m_spVelocity)(&vQ[0], vGlobIP,
time, si,
96 elem, vCornerCoords, vLocIP, nip, u, vJT);
98 for(
size_t ip = 0;
ip < nip; ++
ip)
111 for(
size_t d1 = 0; d1 < dim; ++d1)
112 for(
size_t d2 = 0; d2 < dim; ++d2)
113 D(d1,d2) = alpha*q[d1]*q[d2];
115 for(
size_t d = 0; d < dim; ++d)
121 template <
int refDim>
135 const bool noDeriv = !bDeriv ||
143 UG_THROW(
"BearScheidegger: commonFct <-> fct should be equal");
147 for(
size_t ip = 0;
ip < nip; ++
ip)
155 if(noDeriv)
continue;
157 for(
size_t sh = 0; sh < this->num_sh(fct); ++sh)
158 vvvDeriv[
ip][fct][sh] = 0.0;
164 for(
size_t d1 = 0; d1 < dim; ++d1)
165 for(
size_t d2 = 0; d2 < dim; ++d2)
166 D(d1,d2) = alpha*q[d1]*q[d2];
168 for(
size_t d = 0; d < dim; ++d)
172#ifndef DF_LIMEX_PATCH
173 if(noDeriv)
continue;
182 for(
size_t sh = 0; sh < this->num_sh(fct); ++sh)
186 const number qabslinOverQabs = qabslin / qabs;
188 for(
size_t d1 = 0; d1 < dim; ++d1)
189 for(
size_t d2 = 0; d2 < dim; ++d2)
190 vvvDeriv[
ip][fct][sh](d1,d2) =
191 alpha*(qLin[d1]*q[d2] + q[d1]*qLin[d2]
195 - q[d1]*q[d2] * qabslinOverQabs);
198 for(
size_t d = 0; d < dim; ++d)
202 vvvDeriv[
ip][fct][sh](d,d) += qabslin*
m_alphaT;
216 static const size_t _Q_ = 0;
Definition bear_scheidegger.h:28
number m_damp_limex
Definition bear_scheidegger.h:221
const number m_alphaT
Definition bear_scheidegger.h:213
SmartPtr< DependentUserData< MathVector< dim >, dim > > m_spDVelocity
Definition bear_scheidegger.h:219
BearScheidegger(SmartPtr< CplUserData< MathVector< dim >, dim > > vel, number alphaTrans, number alphaLong)
Definition bear_scheidegger.h:32
void eval_and_deriv(MathMatrix< dim, dim > vD[], 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 subset, std::vector< std::vector< MathMatrix< dim, dim > > > vvvDeriv[], const MathMatrix< refDim, dim > *vJT=NULL) const
Definition bear_scheidegger.h:122
double alphaL() const
Definition bear_scheidegger.h:57
SmartPtr< CplUserData< MathVector< dim >, dim > > velocity() const
Definition bear_scheidegger.h:58
SmartPtr< CplUserData< MathVector< dim >, dim > > m_spVelocity
Definition bear_scheidegger.h:218
double alphaT() const
Definition bear_scheidegger.h:56
BearScheidegger(SmartPtr< CplUserData< MathVector< dim >, dim > > vel, number alphaTrans, number alphaLong, number damp)
Definition bear_scheidegger.h:44
void set_damp(number x)
Definition bear_scheidegger.h:209
static const size_t _Q_
Definition bear_scheidegger.h:216
void evaluate(MathMatrix< dim, dim > vD[], 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 bear_scheidegger.h:84
const number m_alphaL
Definition bear_scheidegger.h:214
StdDataLinker< BearScheidegger< dim >, MathMatrix< dim, dim >, dim > base_type
Definition bear_scheidegger.h:29
void evaluate(MathMatrix< dim, dim > &D, const MathVector< dim > &globIP, number time, int si) const
Definition bear_scheidegger.h:60
const MathVector< dim > & ip(size_t s, size_t ip) 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)
#define DF_LIMEX_PATCH
Definition d3f_limex.h:17
vector_t::value_type VecTwoNorm(const vector_t &v)
vector_t::value_type VecDot(const vector_t &v1, const vector_t &v2)