33 #ifndef __H__UG__LIB_DISC__FUNCTION_SPACE__CONST_GRID_FUNCTION_USER_DATA__
34 #define __H__UG__LIB_DISC__FUNCTION_SPACE__CONST_GRID_FUNCTION_USER_DATA__
66 template <
typename TImpl,
typename TData,
typename TGr
idFunction>
68 :
public StdUserData<StdExplicitGridFunctionData<TImpl,TData, TGridFunction>, TData, TGridFunction::dim>
81 TImpl&
getImpl() {
return static_cast<TImpl&
>(*this);}
84 const TImpl&
getImpl()
const {
return static_cast<const TImpl&
>(*this);}
105 template <
int refDim>
109 const int si = this->
subset();
115 this->
template local_ips<refDim>(
s), this->
num_ip(
s),
120 template <
int refDim>
124 const int si = this->
subset();
130 this->
template local_ips<refDim>(
s), this->
num_ip(
s),
139 "local ip dimension and reference element dimension mismatch.");
143 case 1: eval<1>(u,elem,vCornerCoords,bDeriv);
break;
144 case 2: eval<2>(u,elem,vCornerCoords,bDeriv);
break;
145 case 3: eval<3>(u,elem,vCornerCoords,bDeriv);
break;
146 default:
UG_THROW(
"StdExplicitGridFunctionData: Dimension not supported.");
154 "local ip dimension and reference element dimension mismatch.");
158 case 1: eval<1>(u,elem,vCornerCoords,bDeriv);
break;
159 case 2: eval<2>(u,elem,vCornerCoords,bDeriv);
break;
160 case 3: eval<3>(u,elem,vCornerCoords,bDeriv);
break;
161 default:
UG_THROW(
"StdExplicitGridFunctionData: Dimension not supported.");
169 UG_THROW(
"StdExplicitGridFunctionData: Solution, element and local ips required "
170 "for evaluation, but not passed. Cannot evaluate.");
177 UG_THROW(
"StdExplicitGridFunctionData: Solution, element and local ips required "
178 "for evaluation, but not passed. Cannot evaluate.");
181 template <
int refDim>
193 getImpl().template evaluate<refDim> (vValue, vGlobIP,
time, si,
194 elem, vCornerCoords, vLocIP, nip, u, vJT);
209 template<
typename TGr
idFunction>
237 UG_THROW(
"ExplicitGridFunctionValue: Function space does not contain"
238 " a function with name " << cmp <<
".");
244 template <
int refDim>
262 LocalFiniteElementProvider::get<refDim>(roid,
m_lfeID);
265 std::vector<number> vShape;
268 std::vector<DoFIndex> ind;
272 for(
size_t ip = 0;
ip < nip; ++
ip)
275 rTrialSpace.
shapes(vShape, vLocIP[
ip]);
279 for(
size_t sh = 0; sh < vShape.size(); ++sh)
282 vValue[
ip] += valSH * vShape[sh];
287 UG_CATCH_THROW(
"ExplicitGridFunctionValue: Shape Function Set missing for"
288 " Reference Object: "<<roid<<
", Trial Space: "
289 <<
m_lfeID<<
", refDim="<<refDim);
308 template<
typename TGr
idFunction>
337 std::string fctString (cmps);
340 std::vector<std::string> tokens;
343 for(
size_t i = 0; i < tokens.size(); ++i)
346 if((
int)tokens.size() !=
dim)
347 UG_THROW(
"ExplicitGridFunctionVector: Needed " <<
dim <<
" components "
348 "in symbolic function names, but given: " << cmps <<
'.');
351 for(
int i = 0; i <
dim; ++i)
358 UG_CATCH_THROW(
"ExplicitGridFunctionVector: Cannot find some symbolic function name in '" << cmps <<
"'.");
361 template <
int refDim>
376 std::vector<number> vShape;
379 std::vector<DoFIndex> ind;
381 for (
int d = 0; d <
dim; ++d)
387 LocalFiniteElementProvider::get<refDim>(roid,
m_vlfeID[d]);
392 for(
size_t ip = 0;
ip < nip; ++
ip)
395 rTrialSpace.
shapes(vShape, vLocIP[
ip]);
399 for(
size_t sh = 0; sh < vShape.size(); ++sh)
402 vValue[
ip][d] += valSH * vShape[sh];
406 UG_CATCH_THROW(
"ExplicitGridFunctionVector: Shape Function Set missing for"
407 " Reference Object: " << roid <<
", Trial Space: "
408 <<
m_vlfeID <<
", refDim=" <<refDim);
414 for(
int i = 0; i <
dim; ++i)
433 template <
typename TGr
idFunction>
462 UG_THROW(
"ExplicitGridFunctionGradient: Function space does not contain"
463 " a function with name " << cmp <<
".");
470 template <
int refDim>
485 std::vector<MathMatrix<refDim, dim> > vJTTmp(nip);
489 = ReferenceMappingProvider::get<refDim, dim>(roid, vCornerCoords);
500 const int subsetInd =
m_spGridFct->domain()->subset_handler()->get_subset_index(elem);
501 const char* subsetName =
m_spGridFct->domain()->subset_handler()->get_subset_name(subsetInd);
508 LocalFiniteElementProvider::get<refDim>(roid,
m_lfeID);
511 std::vector<MathVector<refDim> > vLocGrad;
518 for(
size_t ip = 0;
ip < nip; ++
ip)
521 rTrialSpace.
grads(vLocGrad, vLocIP[
ip]);
524 std::vector<DoFIndex > ind;
529 for(
size_t sh = 0; sh < vLocGrad.size(); ++sh)
542 UG_CATCH_THROW(
"ExplicitGridFunctionGradient: Shape Function Set missing for"
543 " Reference Object: "<<roid<<
", Trial Space: "
544 <<
m_lfeID<<
", refDim="<<refDim);
556 std::map<std::string, double>::const_iterator it =
m_diffCoeffMap.find(key);
const TData * values(size_t s) const
returns all values for a series
Definition: user_data.h:516
size_t num_ip(size_t s) const
returns the number of integration points
Definition: user_data.h:327
size_t num_series() const
explicitly forward some functions
Definition: user_data.h:324
const TData & value(size_t s, size_t ip) const
returns the value at ip
Definition: user_data.h:512
virtual base class for reference mappings
Definition: reference_mapping_provider.h:53
virtual void jacobian_transposed(MathMatrix< dim, worldDim > &JT, const MathVector< dim > &locPos) const =0
returns transposed of jacobian
Definition: grid_function_user_data_explicit.h:436
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: grid_function_user_data_explicit.h:471
bool continuous() const
returns if provided data is continuous over geometric object boundaries
Definition: grid_function_user_data_explicit.h:547
void add_subset_coeff(const std::string &key, double val)
Definition: grid_function_user_data_explicit.h:549
LFEID m_lfeID
type of the shape functions
Definition: grid_function_user_data_explicit.h:442
double get_subset_coeff(const std::string &key) const
Definition: grid_function_user_data_explicit.h:554
static const int dim
Definition: grid_function_user_data_explicit.h:447
ExplicitGridFunctionGradient(SmartPtr< TGridFunction > gf, const char *cmp)
constructor
Definition: grid_function_user_data_explicit.h:451
std::map< std::string, double > m_diffCoeffMap
Definition: grid_function_user_data_explicit.h:443
size_t m_fct
component of the function
Definition: grid_function_user_data_explicit.h:441
StdExplicitGridFunctionData< ExplicitGridFunctionGradient< TGridFunction >, MathVector< TGridFunction::dim >, TGridFunction > base_type
Definition: grid_function_user_data_explicit.h:437
Definition: grid_function_user_data_explicit.h:212
bool continuous() const
returns if provided data is continuous over geometric object boundaries
Definition: grid_function_user_data_explicit.h:293
StdExplicitGridFunctionData< ExplicitGridFunctionValue< TGridFunction >, number, TGridFunction > base_type
Definition: grid_function_user_data_explicit.h:213
void evaluate(number 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: grid_function_user_data_explicit.h:245
ExplicitGridFunctionValue(SmartPtr< TGridFunction > gf, const char *cmp)
Definition: grid_function_user_data_explicit.h:226
LFEID m_lfeID
type of the shape functions
Definition: grid_function_user_data_explicit.h:218
static const int dim
Definition: grid_function_user_data_explicit.h:222
size_t m_fct
component of the function
Definition: grid_function_user_data_explicit.h:217
Definition: grid_function_user_data_explicit.h:311
bool continuous() const
returns if provided data is continuous over geometric object boundaries
Definition: grid_function_user_data_explicit.h:412
ExplicitGridFunctionVector(SmartPtr< TGridFunction > gf, const char *cmps)
Definition: grid_function_user_data_explicit.h:328
LFEID m_vlfeID[dim]
types of the shape functions
Definition: grid_function_user_data_explicit.h:322
static const int dim
Definition: grid_function_user_data_explicit.h:314
StdExplicitGridFunctionData< ExplicitGridFunctionVector< TGridFunction >, MathVector< TGridFunction::dim >, TGridFunction > base_type
Definition: grid_function_user_data_explicit.h:317
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: grid_function_user_data_explicit.h:362
size_t m_vfct[dim]
components of the function
Definition: grid_function_user_data_explicit.h:321
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition: grid_base_objects.h:157
virtual int base_object_id() const =0
virtual ReferenceObjectID reference_object_id() const =0
const MathVector< dim > & ip(size_t s, size_t ip) const
returns global ip
Definition: user_data.h:401
int dim_local_ips() const
returns current local ip dimension
Definition: user_data.h:372
int subset() const
returns the subset of evaluation
Definition: user_data.h:273
number time() const
get the current evaluation time
Definition: user_data.h:285
const MathVector< dim > * ips(size_t s) const
returns global ips
Definition: user_data.h:398
Identifier for Local Finite Elements.
Definition: local_finite_element_id.h:98
static bool continuous(const LFEID &id, bool bCreate=true)
returns if a Local Shape Function Set is continuous
Definition: local_finite_element_provider.cpp:749
virtual base class for local shape function sets
Definition: local_shape_function_set.h:70
virtual void grads(grad_type *vGrad, const MathVector< dim > &x) const =0
returns all gradients evaluated at a point
virtual void shapes(shape_type *vShape, const MathVector< dim > &x) const =0
returns all shape functions evaluated at a point
Definition: local_algebra.h:198
time series of local vectors
Definition: solution_time_series.h:167
const LocalVector & solution(size_t i) const
returns the local vector for the i'th time point
Definition: solution_time_series.h:182
A class for fixed size, dense matrices.
Definition: math_matrix.h:52
Definition: grid_function_user_data_explicit.h:69
size_t m_fct
component of function
Definition: grid_function_user_data_explicit.h:76
void evaluate(TData 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: grid_function_user_data_explicit.h:182
const TImpl & getImpl() const
const access to implementation
Definition: grid_function_user_data_explicit.h:84
TImpl & getImpl()
access to implementation
Definition: grid_function_user_data_explicit.h:81
virtual void compute(LocalVectorTimeSeries *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
compute values (and derivatives iff compDeriv == true, but only for the 'current' time point)
Definition: grid_function_user_data_explicit.h:150
StdExplicitGridFunctionData(SmartPtr< TGridFunction > spGridFct)
common constructor
Definition: grid_function_user_data_explicit.h:89
LFEID m_lfeID
Definition: grid_function_user_data_explicit.h:77
virtual void operator()(TData &value, const MathVector< dim > &globIP, number time, int si) const
returns value for a global position
Definition: grid_function_user_data_explicit.h:165
virtual bool requires_grid_fct() const
returns if grid function is needed for evaluation
Definition: grid_function_user_data_explicit.h:100
void eval(LocalVector *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
Definition: grid_function_user_data_explicit.h:106
virtual void compute(LocalVector *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
compute values (and derivatives iff compDeriv == true)
Definition: grid_function_user_data_explicit.h:135
virtual bool continuous() const
returns if provided data is continuous over geometric object boundaries
Definition: grid_function_user_data_explicit.h:103
static const int dim
world dimension of grid function
Definition: grid_function_user_data_explicit.h:72
SmartPtr< TGridFunction > m_spGridFct
grid function
Definition: grid_function_user_data_explicit.h:75
void eval(LocalVectorTimeSeries *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)
Definition: grid_function_user_data_explicit.h:121
virtual bool constant() const
returns if data is constant
Definition: grid_function_user_data_explicit.h:96
Definition: std_user_data.h:63
MathMatrix< N, M, T >::value_type Inverse(MathMatrix< N, M, T > &mOut, const MathMatrix< M, N, T > &m)
Inverse of a matrix.
Definition: math_matrix_functions_common_impl.hpp:560
void RemoveWhitespaceFromString(std::string &str)
removes all white space from a string, also within the string
Definition: string_util.cpp:50
#define UG_ASSERT(expr, msg)
Definition: assert.h:70
#define UG_CATCH_THROW(msg)
Definition: error.h:64
#define UG_THROW(msg)
Definition: error.h:57
double number
Definition: types.h:124
void MatVecMult(vector_t_out &vOut, const matrix_t &m, const vector_t_in &v)
Matrix - Vector Multiplication.
Definition: math_matrix_vector_functions_common_impl.hpp:49
void VecScaleAppend(vector_t &vOut, typename vector_t::value_type s1, const vector_t &v1)
Scales a Vector and adds it to a second vector.
Definition: math_vector_functions_common_impl.hpp:126
void VecSet(vector_t &vInOut, typename vector_t::value_type s)
Set each vector component to scalar (componentwise)
Definition: math_vector_functions_common_impl.hpp:539
void VecScale(vector_t &vOut, const vector_t &v, typename vector_t::value_type s)
scales a MathVector<N>
Definition: math_vector_functions_common_impl.hpp:252
ReferenceObjectID
these ids are used to identify the shape of a geometric object.
Definition: grid_base_objects.h:74
number & DoFRef(TMatrix &mat, const DoFIndex &iInd, const DoFIndex &jInd)
Definition: multi_index.h:276
void TokenizeString(const string &str, vector< string > &vToken, const char delimiter)
Definition: string_util.cpp:56