38#ifndef __H__UG__LIB_DISC__SPATIAL_DISC__USER_DATA__ONC_USER_DATA__
39#define __H__UG__LIB_DISC__SPATIAL_DISC__USER_DATA__ONC_USER_DATA__
65template <
typename TDomain>
67 :
public StdUserData<OutNormCmp<TDomain>, MathVector<TDomain::dim>, TDomain::dim, void, UserData<MathVector<TDomain::dim>, TDomain::dim, void> >
70 static const int dim = TDomain::dim;
102 std::vector<std::string> vssNames;
106 for (
size_t k = 0; k < vssNames.size (); k++)
110 }
UG_CATCH_THROW (
"SubsetIndicatorUserData: Failed to parse subset names.");
130 template <
int refDim>
147 (* m_spData) (vValue, vGlobIP, time, si, elem, vCornerCoords, vLocIP, nip, u, vJT);
150 if (refDim !=
dim - 1)
152 UG_THROW (
"OutNormCmp: Wrong dimensionality of the subset.");
157 fd_elem_type * fd_elem = NULL;
161 fd_elem_secure_container_type fd_elem_list;
163 grid.associated_elements (fd_elem_list, elem);
167 if (fd_elem_list.size () == 1)
169 fd_elem = fd_elem_list[0];
170 fd_si =
m_spDomain->subset_handler()->get_subset_index (fd_elem);
176 for (
size_t k = 0; k < fd_elem_list.size (); k++)
178 fd_elem_type * e = fd_elem_list[k];
194 for (
size_t ip = 0; ip < nip; ip++) vValue[ip] = 0;
206 = ReferenceMappingProvider::get<dim, dim> (fd_roid, fd_elem_corner_coords);
207 std::vector<MathVector<dim> > fd_loc_ip (nip);
208 for (
size_t ip = 0; ip < nip; ip++)
212 (* m_spData) (vValue, vGlobIP, time, fd_si, fd_elem, &(fd_elem_corner_coords[0]),
213 &(fd_loc_ip[0]), nip, u);
219 = ReferenceMappingProvider::get<refDim, dim> (roid, vCornerCoords);
220 for (
size_t ip = 0; ip < nip; ip++)
241 UG_THROW(
"OutNormCmp: Element required for evaluation, but not passed. Cannot evaluate.");
254 UG_THROW(
"OutNormCmp: Element required for evaluation, but not passed. Cannot evaluate.");
270template <
typename TDomain>
272 :
public StdUserData<ScaledOutNormCmp<TDomain>, MathVector<TDomain::dim>, TDomain::dim, void, UserData<MathVector<TDomain::dim>, TDomain::dim, void> >
275 static const int dim = TDomain::dim;
306 const char * ss_names
311 std::vector<std::string> vssNames;
315 for (
size_t k = 0; k < vssNames.size (); k++)
319 }
UG_CATCH_THROW (
"SubsetIndicatorUserData: Failed to parse subset names.");
340 template <
int refDim>
357 std::vector<number> scaling (nip);
358 (* m_spVecData) (vValue, vGlobIP, time, si, elem, vCornerCoords, vLocIP, nip, u, vJT);
359 (* m_spScalData) (&(scaling[0]), vGlobIP, time, si, elem, vCornerCoords, vLocIP, nip, u, vJT);
360 for (
size_t ip = 0; ip < nip; ip++)
361 vValue[ip] *= scaling[ip];
364 if (refDim !=
dim - 1)
366 UG_THROW (
"ScaledOutNormCmp: Wrong dimensionality of the subset.");
371 fd_elem_type * fd_elem = NULL;
375 fd_elem_secure_container_type fd_elem_list;
377 grid.associated_elements (fd_elem_list, elem);
381 if (fd_elem_list.size () == 1)
383 fd_elem = fd_elem_list[0];
384 fd_si =
m_spDomain->subset_handler()->get_subset_index (fd_elem);
390 for (
size_t k = 0; k < fd_elem_list.size (); k++)
392 fd_elem_type * e = fd_elem_list[k];
408 for (
size_t ip = 0; ip < nip; ip++) vValue[ip] = 0;
420 = ReferenceMappingProvider::get<dim, dim> (fd_roid, fd_elem_corner_coords);
421 std::vector<MathVector<dim> > fd_loc_ip (nip);
422 for (
size_t ip = 0; ip < nip; ip++)
426 std::vector<number> scaling (nip);
427 (* m_spVecData) (vValue, vGlobIP, time, fd_si, fd_elem, &(fd_elem_corner_coords[0]),
428 &(fd_loc_ip[0]), nip, u);
429 (* m_spScalData) (&(scaling[0]), vGlobIP, time, fd_si, fd_elem, &(fd_elem_corner_coords[0]),
430 &(fd_loc_ip[0]), nip, u);
436 = ReferenceMappingProvider::get<refDim, dim> (roid, vCornerCoords);
437 for (
size_t ip = 0; ip < nip; ip++)
439 vValue[ip] *= scaling[ip];
460 UG_THROW(
"ScaledOutNormCmp: Element required for evaluation, but not passed. Cannot evaluate.");
473 UG_THROW(
"ScaledOutNormCmp: Element required for evaluation, but not passed. Cannot evaluate.");
489template <
typename TDomain>
491 :
public StdUserData<ScaledFluxData<TDomain>, number, TDomain::dim, void, UserData<number, TDomain::dim, void> >
494 static const int dim = TDomain::dim;
525 const char * ss_names
530 std::vector<std::string> vssNames;
534 for (
size_t k = 0; k < vssNames.size (); k++)
538 }
UG_CATCH_THROW (
"SubsetIndicatorUserData: Failed to parse subset names.");
559 template <
int refDim>
574 if (refDim !=
dim - 1)
576 UG_THROW (
"ScaledFluxData: Wrong dimensionality of the subset.");
581 fd_elem_type * fd_elem = NULL;
585 fd_elem_secure_container_type fd_elem_list;
587 grid.associated_elements (fd_elem_list, elem);
591 if (fd_elem_list.size () == 1)
593 fd_elem = fd_elem_list[0];
594 fd_si =
m_spDomain->subset_handler()->get_subset_index (fd_elem);
600 for (
size_t k = 0; k < fd_elem_list.size (); k++)
602 fd_elem_type * e = fd_elem_list[k];
618 for (
size_t ip = 0; ip < nip; ip++) vValue[ip] = 0;
630 = ReferenceMappingProvider::get<dim, dim> (fd_roid, fd_elem_corner_coords);
631 std::vector<MathVector<dim> > fd_loc_ip (nip);
632 for (
size_t ip = 0; ip < nip; ip++)
639 for (
size_t co = 0; co < fd_elem->num_vertices (); co++)
642 VecSubtract (s_vec, fd_elem_corner_coords[co], vCornerCoords[0]);
651 std::vector<MathVector<dim> > vecfield (nip);
652 std::vector<number> scaling (nip);
653 (* m_spVecData) (&(vecfield[0]), vGlobIP, time, fd_si, fd_elem, &(fd_elem_corner_coords[0]),
654 &(fd_loc_ip[0]), nip, u);
655 (* m_spScalData) (&(scaling[0]), vGlobIP, time, fd_si, fd_elem, &(fd_elem_corner_coords[0]),
656 &(fd_loc_ip[0]), nip, u);
660 for (
size_t ip = 0; ip < nip; ip++)
661 vValue[ip] = scaling[ip] *
VecDot (vecfield[ip], normal);
674 UG_THROW(
"ScaledFluxData: Element required for evaluation, but not passed. Cannot evaluate.");
687 UG_THROW(
"ScaledFluxData: Element required for evaluation, but not passed. Cannot evaluate.");
Definition smart_pointer.h:108
T * get()
returns encapsulated pointer
Definition smart_pointer.h:197
virtual base class for reference mappings
Definition reference_mapping_provider.h:53
virtual void global_to_local(MathVector< dim > &locPos, const MathVector< worldDim > &globPos, const size_t maxIter=1000, const number tol=1e-10) const =0
map global coordinate to local coordinate
virtual void jacobian(MathMatrix< worldDim, dim > &J, const MathVector< dim > &locPos) const =0
returns jacobian
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition grid_base_objects.h:157
virtual ReferenceObjectID reference_object_id() const =0
Definition local_algebra.h:198
A class for fixed size, dense matrices.
Definition math_matrix.h:63
a mathematical Vector with N entries.
Definition math_vector.h:97
Projection to the outer normal for a given vector user data.
Definition dim_dim_user_data.h:68
static const int dim
the world dimension
Definition dim_dim_user_data.h:70
void evaluate(vec_type 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
Evaluator.
Definition dim_dim_user_data.h:132
SubsetGroup m_ssGrp
the subset group for the inner part
Definition dim_dim_user_data.h:88
MathVector< dim > vec_type
the original data type
Definition dim_dim_user_data.h:79
SmartPtr< domain_type > m_spDomain
the domain
Definition dim_dim_user_data.h:85
virtual bool requires_grid_fct() const
Returns true to get the grid element in the evaluation routine.
Definition dim_dim_user_data.h:126
SmartPtr< UserData< vec_type, dim, void > > m_spData
the original data
Definition dim_dim_user_data.h:82
TDomain domain_type
the domain type
Definition dim_dim_user_data.h:73
virtual bool continuous() const
Indicator functions are discontinuous.
Definition dim_dim_user_data.h:123
TDomain::grid_type grid_type
the grid type
Definition dim_dim_user_data.h:76
OutNormCmp(SmartPtr< domain_type > spDomain, SmartPtr< UserData< vec_type, dim, void > > spData, const char *ss_names)
constructor
Definition dim_dim_user_data.h:94
OutNormCmp(SmartPtr< domain_type > spDomain, SmartPtr< UserData< vec_type, dim, void > > spData)
constructor
Definition dim_dim_user_data.h:115
Scaled flux for a given vector user data.
Definition dim_dim_user_data.h:492
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
Evaluator.
Definition dim_dim_user_data.h:561
MathVector< dim > vec_type
the original data type
Definition dim_dim_user_data.h:503
SubsetGroup m_ssGrp
the subset group for the inner part
Definition dim_dim_user_data.h:515
SmartPtr< domain_type > m_spDomain
the domain
Definition dim_dim_user_data.h:512
SmartPtr< UserData< vec_type, dim, void > > m_spVecData
the original vector field data
Definition dim_dim_user_data.h:506
TDomain domain_type
the domain type
Definition dim_dim_user_data.h:497
virtual bool continuous() const
Indicator functions are discontinuous.
Definition dim_dim_user_data.h:552
virtual bool requires_grid_fct() const
Returns true to get the grid element in the evaluation routine.
Definition dim_dim_user_data.h:555
TDomain::grid_type grid_type
the grid type
Definition dim_dim_user_data.h:500
static const int dim
the world dimension
Definition dim_dim_user_data.h:494
ScaledFluxData(SmartPtr< domain_type > spDomain, SmartPtr< UserData< number, dim, void > > spScalData, SmartPtr< UserData< vec_type, dim, void > > spVecData, const char *ss_names)
constructor
Definition dim_dim_user_data.h:521
SmartPtr< UserData< number, dim, void > > m_spScalData
the scaling data
Definition dim_dim_user_data.h:509
ScaledFluxData(SmartPtr< domain_type > spDomain, SmartPtr< UserData< number, dim, void > > spScalData, SmartPtr< UserData< vec_type, dim, void > > spVecData)
constructor
Definition dim_dim_user_data.h:543
Scaled projection to the outer normal for a given vector user data.
Definition dim_dim_user_data.h:273
ScaledOutNormCmp(SmartPtr< domain_type > spDomain, SmartPtr< UserData< number, dim, void > > spScalData, SmartPtr< UserData< vec_type, dim, void > > spVecData)
constructor
Definition dim_dim_user_data.h:324
void evaluate(vec_type 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
Evaluator.
Definition dim_dim_user_data.h:342
static const int dim
the world dimension
Definition dim_dim_user_data.h:275
TDomain::grid_type grid_type
the grid type
Definition dim_dim_user_data.h:281
SubsetGroup m_ssGrp
the subset group for the inner part
Definition dim_dim_user_data.h:296
virtual bool requires_grid_fct() const
Returns true to get the grid element in the evaluation routine.
Definition dim_dim_user_data.h:336
ScaledOutNormCmp(SmartPtr< domain_type > spDomain, SmartPtr< UserData< number, dim, void > > spScalData, SmartPtr< UserData< vec_type, dim, void > > spVecData, const char *ss_names)
constructor
Definition dim_dim_user_data.h:302
virtual bool continuous() const
Indicator functions are discontinuous.
Definition dim_dim_user_data.h:333
SmartPtr< UserData< number, dim, void > > m_spScalData
the scaling data
Definition dim_dim_user_data.h:290
MathVector< dim > vec_type
the original data type
Definition dim_dim_user_data.h:284
TDomain domain_type
the domain type
Definition dim_dim_user_data.h:278
SmartPtr< UserData< vec_type, dim, void > > m_spVecData
the original vector field data
Definition dim_dim_user_data.h:287
SmartPtr< domain_type > m_spDomain
the domain
Definition dim_dim_user_data.h:293
Definition std_user_data.h:63
Group of subsets.
Definition subset_group.h:51
void clear()
clear all subsets
Definition subset_group.h:116
bool empty() const
returns if function group is empty
Definition subset_group.h:119
ConstSmartPtr< ISubsetHandler > subset_handler() const
get underlying subset handler
Definition subset_group.h:72
void add(int si)
adds a subset by number to this group
Definition subset_group.cpp:64
bool contains(int si) const
returns true if subset is contained in this group
Definition subset_group.cpp:272
Type based UserData.
Definition user_data.h:143
const FunctionIndexMapping & map() const
get function mapping
Definition user_data.h:78
void CollectCornerCoordinates(std::vector< typename TAAPos::ValueType > &vCornerCoordsOut, const TElem &elem, const TAAPos &aaPos, bool clearContainer=true)
returns the corner coordinates of a geometric object
Definition domain_util_impl.h:75
void RemoveWhitespaceFromString(std::string &str)
removes all white space from a string, also within the string
Definition string_util.cpp:50
#define UG_CATCH_THROW(msg)
Definition error.h:64
#define UG_THROW(msg)
Definition error.h:57
double number
Definition types.h:124
void OrthogProjectVec(vector_t &v, const matrix_t &A)
Orthogonal projection.
Definition math_matrix_vector_functions_common_impl.hpp:251
vector_t::value_type VecLength(const vector_t &v)
returns the length of v. Slower than VecLengthSq.
Definition math_vector_functions_common_impl.hpp:341
void VecSubtract(vector_t &vOut, const vector_t &v1, const vector_t &v2)
subtracts v2 from v1 and stores the result in a vOut
Definition math_vector_functions_common_impl.hpp:226
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
vector_t::value_type VecDot(const vector_t &v1, const vector_t &v2)
returns the dot-product of two vector_ts
Definition math_vector_functions_common_impl.hpp:385
ReferenceObjectID
these ids are used to identify the shape of a geometric object.
Definition grid_base_objects.h:74
void TokenizeString(const string &str, vector< string > &vToken, const char delimiter)
Definition string_util.cpp:56
PointerConstArray< TElem * > secure_container
Definition grid.h:146
Definition domain_traits.h:53
Definition grid_dim_traits.h:53