33#ifndef __H__UG__LIB_DISC__SPATIAL_DISC__USER_DATA__USER_DATA__
34#define __H__UG__LIB_DISC__SPATIAL_DISC__USER_DATA__USER_DATA__
59 virtual std::string
type()
const = 0;
93 UG_LOG (
"Warning: Replacing existing UserData object name '" <<
m_objName.
get() <<
"' with '" <<
name <<
"'.\n");
94 const size_t name_len = strnlen (
name, 128);
96 memcpy (new_name.
get(),
name, name_len); (new_name.
get()) [name_len] =
'\0';
122template <
typename TData>
126template <std::
size_t dim>
128template <std::
size_t dim>
130template <std::
size_t dim>
143template <
typename TData,
int dim,
typename TRet =
void>
166 number time,
int si)
const = 0;
171 number time,
int si,
const size_t nip)
const = 0;
192 operator()(&value, &globIP, time, si, elem, vCornerCoords, &locIP, 1, u);
202 operator()(&value, &globIP, time, si, elem, vCornerCoords, &locIP, 1, u);
212 operator()(&value, &globIP, time, si, elem, vCornerCoords, &locIP, 1, u);
303 bool bDeriv =
false) = 0;
309 bool bDeriv =
false) = 0;
343 const int timePointSpec,
344 bool bMayChange =
true);
350 bool bMayChange =
true)
352 return this->
template register_local_ip_series<ldim> (vPos, numIP, -1, bMayChange);
371 void set_time_point(
const size_t seriesId,
const int timePointSpec);
439 inline void check_s(
size_t s)
const;
492template <
typename TData,
int dim>
class DataImport;
504template <
typename TData,
int dim,
typename TRet =
void>
600template <
typename TData,
int dim>
632 const TData&
deriv(
size_t s,
size_t ip,
size_t fct,
size_t dof)
const
636 TData&
deriv(
size_t s,
size_t ip,
size_t fct,
size_t dof)
644 const TData*
deriv(
size_t s,
size_t ip,
size_t fct)
const
648 static void set_zero(std::vector<std::vector<TData> > vvvDeriv[],
const size_t nip);
709 std::vector<std::vector<std::vector<std::vector<TData> > > >
m_vvvvDeriv;
location name
Definition checkpoint_util.lua:128
Definition smart_pointer.h:296
Definition smart_pointer.h:107
T * get()
returns encapsulated pointer
Definition smart_pointer.h:197
bool valid() const
returns true if the pointer is valid, false if not.
Definition smart_pointer.h:206
Type based UserData.
Definition user_data.h:506
void check_series(size_t s) const
checks in debug mode the correct index
Definition user_data_impl.h:307
TData * values(size_t s)
returns all values for a series
Definition user_data.h:534
void register_storage_callback(DataImport< TData, dim > *obj, void(DataImport< TData, dim >::*func)())
register external callback, invoked when data storage changed
Definition user_data_impl.h:272
std::vector< std::vector< bool > > m_vvBoolFlag
bool flag at ip (size: (0,...num_series-1) x (0,...,num_ip-1))
Definition user_data.h:582
ICplUserData< dim > base_type
type of base class
Definition user_data.h:509
std::vector< std::pair< DataImport< TData, dim > *, CallbackFct > > m_vCallback
Definition user_data.h:587
void call_storage_callback() const
calls are registered external storage callbacks
Definition user_data_impl.h:295
void check_series_ip(size_t s, size_t ip) const
checks in debug mode the correct index
Definition user_data_impl.h:314
virtual void local_ip_series_added(const size_t seriesID)
resizes the data field, when local ip changed signaled
Definition user_data_impl.h:322
std::vector< std::vector< TData > > m_vvValue
data at ip (size: (0,...num_series-1) x (0,...,num_ip-1))
Definition user_data.h:579
TData & value(size_t s, size_t ip)
returns the value at ip
Definition user_data.h:530
virtual void local_ip_series_to_be_cleared()
free the data field memory and set series to zero
Definition user_data_impl.h:348
const TData * values(size_t s) const
returns all values for a series
Definition user_data.h:521
const TData & value(size_t s, size_t ip) const
returns the value at ip
Definition user_data.h:517
bool defined(size_t s, size_t ip) const
returns flag, if data is evaluated (for conditional data)
Definition user_data.h:543
std::function< void()> CallbackFct
registered callbacks
Definition user_data.h:586
void unregister_storage_callback(DataImport< TData, dim > *obj)
register all callbacks registered by class
Definition user_data_impl.h:281
size_t num_ip(size_t s) const
returns the number of integration points
Definition user_data.h:329
virtual void value_storage_changed(const size_t seriesID)
callback, invoked when storage of data has changed for a series
Definition user_data.h:572
~CplUserData()
destructor
Definition user_data.h:547
size_t num_series() const
explicitly forward some functions
Definition user_data.h:326
virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP)
implement callback, called when local IPs changed
Definition user_data_impl.h:360
Data import.
Definition data_import.h:180
Dependent UserData.
Definition user_data.h:602
std::vector< std::vector< std::vector< std::vector< TData > > > > m_vvvvDeriv
Derivatives.
Definition user_data.h:709
TData * deriv(size_t s, size_t ip, size_t fct)
returns the derivatives of the local function, at ip
Definition user_data.h:640
void resize_deriv_array()
resizes the derivative arrays for current number of ips.
Definition user_data_impl.h:465
std::vector< std::string > m_SymbFct
string of symbolic functions required
Definition user_data.h:676
std::vector< size_t > m_vvNumDoFPerFct
number of functions and their dofs
Definition user_data.h:705
TData & deriv(size_t s, size_t ip, size_t fct, size_t dof)
returns the derivative of the local function, at ip and for a dof
Definition user_data.h:636
virtual bool zero_derivative() const
returns that data depends on solution
Definition user_data.h:652
DependentUserData(const std::string &symbFct)
Definition user_data.h:619
virtual void local_ip_series_to_be_cleared()
implement callback, invoked when local ips are cleared
Definition user_data_impl.h:534
const TData * deriv(size_t s, size_t ip, size_t fct) const
returns the derivatives of the local function, at ip
Definition user_data.h:644
void extract_fct_grp()
extracts the function group
Definition user_data_impl.h:409
virtual void local_ip_series_added(const size_t seriesID)
resizes the derivative field when local ip change is signaled
Definition user_data_impl.h:524
const TData & deriv(size_t s, size_t ip, size_t fct, size_t dof) const
returns the derivative of the local function, at ip and for a dof
Definition user_data.h:632
void check_s_ip_fct(size_t s, size_t ip, size_t fct) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:510
static void set_zero(std::vector< std::vector< TData > > vvvDeriv[], const size_t nip)
sets all derivative values to zero
Definition user_data_impl.h:490
DependentUserData(const std::vector< std::string > &symbFct)
Definition user_data.h:620
size_t num_sh(size_t fct) const
number of shapes for local function
Definition user_data.h:625
DependentUserData()
default constructor
Definition user_data.h:614
DependentUserData(const char *symbFct)
Definition user_data.h:618
CplUserData< TData, dim > base_type
Base class type.
Definition user_data.h:605
virtual void set_function_pattern(ConstSmartPtr< FunctionPattern > fctPatt)
sets the associated function pattern
Definition user_data_impl.h:383
virtual void update_dof_sizes(const LocalIndices &ind)
resize lin defect arrays
Definition user_data_impl.h:450
void check_s_ip_fct_dof(size_t s, size_t ip, size_t fct, size_t dof) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:517
void check_s_ip(size_t s, size_t ip) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:501
virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP)
implement callback, called when local IPs changed
Definition user_data_impl.h:544
void set_functions(const char *symbFct)
Definition user_data_impl.h:390
virtual bool requires_grid_fct() const
returns if grid function is needed for evaluation
Definition user_data.h:655
Definition function_group.h:52
void set_function_pattern(ConstSmartPtr< FunctionPattern > spFuncPattern)
set underlying function pattern
Definition function_group.cpp:72
describes a mapping between two local index sets
Definition function_group.h:186
size_t num_fct() const
returns the number of indices that are mapped
Definition function_group.h:195
The base class for all geometric objects, such as vertices, edges, faces, volumes,...
Definition grid_base_objects.h:157
Base class for UserData.
Definition user_data.h:262
int dim_local_ips() const
returns current local ip dimension
Definition user_data.h:374
std::vector< const MathVector< 2 > * > m_pvLocIP2d
Definition user_data.h:465
bool at_current_time(size_t s) const
returns true iff the time point specification is equal to the current one, or not specified
Definition user_data_impl.h:220
ICplUserData()
default constructor
Definition user_data_impl.h:46
void check_s(size_t s) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:252
std::vector< const MathVector< dim > * > m_vvGlobPos
global ips
Definition user_data.h:472
void set_subset(int si)
set the subset of evaluation
Definition user_data.h:272
const MathVector< ldim > * local_ips(size_t s) const
returns local ips
Definition user_data_impl.h:175
virtual void prepare_element(GridObject *e, const MathVector< dim > vCornerCoords[])
called in the preparation for a particular element
Definition user_data.h:397
void clear()
clear all data
Definition user_data_impl.h:56
virtual bool constant() const
returns if data is constant
Definition user_data.h:291
size_t register_local_ip_series(const MathVector< ldim > *vPos, const size_t numIP, bool bMayChange=true)
set local positions without the specification of the time point, returns series id
Definition user_data.h:348
virtual void compute(LocalVectorTimeSeries *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)=0
compute values (and derivatives iff compDeriv == true, but only for the 'current' time point)
int subset() const
returns the subset of evaluation
Definition user_data.h:275
std::vector< int > m_vTimePoint
time points for the series
Definition user_data.h:469
virtual void local_ip_series_to_be_cleared()
callback invoked, when local ips are cleared
Definition user_data.h:428
void set_local_ips(const size_t seriesId, const MathVector< ldim > *vPos, const size_t numIP)
sets new local ip positions for a local ip series
Definition user_data_impl.h:118
void set_time_point(size_t timePoint)
sets the current time point
Definition user_data.h:281
int m_si
subset for evaluation
Definition user_data.h:484
size_t time_point()
returns the current time point
Definition user_data.h:284
number time(size_t s) const
get the specified evaluation time
Definition user_data.h:391
std::vector< const MathVector< 1 > * > m_pvLocIP1d
local ips of dimension 1d-3d
Definition user_data.h:464
std::vector< const MathVector< 3 > * > m_pvLocIP3d
Definition user_data.h:466
number time() const
get the current evaluation time
Definition user_data.h:287
virtual size_t num_needed_data() const
number of other Data this data depends on
Definition user_data.h:294
virtual void local_ips_changed(const size_t seriesID, const size_t newNumIP)=0
callback invoked, if a local ip series has been changed
const MathVector< dim > * ips(size_t s) const
returns global ips
Definition user_data.h:403
size_t m_timePoint
current time point (used if no explicit specification for series)
Definition user_data.h:478
const std::vector< const MathVector< 2 > * > & get_local_ips(Int2Type< 2 >) const
Definition user_data.h:450
void check_s_ip(size_t s, size_t ip) const
checks in debug mode the correct usage of indices
Definition user_data_impl.h:259
std::vector< const MathVector< 3 > * > & get_local_ips(Int2Type< 3 >)
Definition user_data.h:448
virtual void update_dof_sizes(const LocalIndices &ind)
resize arrays
Definition user_data.h:322
virtual ~ICplUserData()
virtual desctructor
Definition user_data.h:315
virtual void compute(LocalVector *u, GridObject *elem, const MathVector< dim > vCornerCoords[], bool bDeriv=false)=0
compute values (and derivatives iff compDeriv == true)
std::vector< size_t > m_vNumIP
number of evaluation points (-1 indicates no ips set)
Definition user_data.h:458
std::vector< const MathVector< 1 > * > & get_local_ips(Int2Type< 1 >)
help function to get local ips
Definition user_data.h:446
std::vector< number > m_vTime
time for evaluation
Definition user_data.h:475
const MathVector< dim > & ip(size_t s, size_t ip) const
returns global ip
Definition user_data.h:406
size_t num_ip(size_t s) const
returns the number of integration points
Definition user_data.h:329
virtual void global_ips_changed(const size_t seriesID, const MathVector< dim > *vPos, const size_t numIP)
callback invoked after global ips have been changed
Definition user_data.h:436
int m_defaultTimePoint
default time point (or -1 if not specified)
Definition user_data.h:481
virtual void local_ip_series_added(const size_t seriesID)
callback invoked after local ips have been added to the series
Definition user_data.h:422
size_t register_local_ip_series(const MathVector< ldim > *vPos, const size_t numIP, const int timePointSpec, bool bMayChange=true)
set local positions, returns series id
Definition user_data_impl.h:70
size_t num_series() const
returns the number of ip series
Definition user_data.h:326
int m_locPosDim
dimension of local position (-1 indicates no dim set)
Definition user_data.h:461
void set_global_ips(size_t s, const MathVector< dim > *vPos, size_t numIP)
set global positions
Definition user_data_impl.h:231
int time_point_specification(size_t s) const
returns the time point specification (note: it may be -1, i.e. not specified)
Definition user_data_impl.h:200
std::vector< const MathVector< 2 > * > & get_local_ips(Int2Type< 2 >)
Definition user_data.h:447
virtual bool zero_derivative() const
returns if data depends on solution
Definition user_data.h:319
const std::vector< const MathVector< 1 > * > & get_local_ips(Int2Type< 1 >) const
Definition user_data.h:449
const std::vector< const MathVector< 3 > * > & get_local_ips(Int2Type< 3 >) const
Definition user_data.h:451
const MathVector< ldim > & local_ip(size_t s, size_t ip) const
returns local ip
Definition user_data_impl.h:188
void set_times(const std::vector< number > &vTime)
set evaluation time
Definition user_data.h:278
std::vector< bool > m_vMayChange
flags if local ips may change
Definition user_data.h:455
virtual void check_setup() const
returns if the dependent data is ready for evaluation
Definition user_data.h:312
virtual SmartPtr< ICplUserData > needed_data(size_t i)
return needed data
Definition user_data.h:297
Definition local_algebra.h:50
Definition local_algebra.h:198
time series of local vectors
Definition solution_time_series.h:167
A class for fixed size, dense matrices.
Definition math_matrix.h:63
a mathematical Tensor of rank TRank and N entries.
Definition math_tensor.h:56
a mathematical Vector with N entries.
Definition math_vector.h:97
Type based UserData.
Definition user_data.h:145
TRet return_type
Definition user_data.h:148
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 3 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 3, dim > *vJT=NULL) const =0
std::string type() const
returns type of data as string (e.g. "Number", "Vector", "Matrix")
Definition user_data.h:154
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 1 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 1, dim > *vJT=NULL) const =0
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, GridObject *elem, const MathVector< dim > vCornerCoords[], const MathVector< 2 > vLocIP[], const size_t nip, LocalVector *u, const MathMatrix< 2, dim > *vJT=NULL) const =0
virtual bool requires_grid_fct() const =0
returns if grid function is needed for evaluation
virtual bool continuous() const =0
returns if provided data is continuous over geometric object boundaries
TData data_type
Definition user_data.h:147
virtual void operator()(TData vValue[], const MathVector< dim > vGlobIP[], number time, int si, const size_t nip) const =0
returns values for global positions
int get_dim() const
returns dimension
Definition user_data.h:151
virtual TRet operator()(TData &value, const MathVector< dim > &globIP, number time, int si) const =0
returns value for a global position
base class providing runtime-info on dimension and type
Definition user_data.h:53
virtual std::string type() const =0
returns type of data as string (e.g. "Number", "Vector", "Matrix")
const FunctionGroup & function_group() const
Function Group of functions.
Definition user_data.h:77
const FunctionIndexMapping & map() const
get function mapping
Definition user_data.h:80
virtual int get_dim() const =0
returns dimension
const char * obj_name()
gets the name of the object (s. the field m_objName)
Definition user_data.h:104
virtual bool requires_grid_fct() const =0
returns if grid function is needed for evaluation
FunctionIndexMapping m_map
Mapping for import fct.
Definition user_data.h:111
FunctionGroup m_fctGrp
functions the data depends on
Definition user_data.h:108
virtual bool continuous() const =0
returns if provided data is continuous over geometric object boundaries
virtual ~UserDataInfo()
virtual destructor
Definition user_data.h:65
void set_obj_name(const char *name)
sets the name of the object (s. the field m_objName)
Definition user_data.h:89
size_t num_fct() const
number of functions this export depends on
Definition user_data.h:83
virtual void set_function_pattern(ConstSmartPtr< FunctionPattern > fctPatt)
sets the function pattern for a possibly needed grid function
Definition user_data.h:72
SmartPtr< char > m_objName
This field is used mainly for debugging: One can assign a name to the object to identify it when runn...
Definition user_data.h:114
Base-class for all vertex-types.
Definition grid_base_objects.h:231
const NullSmartPtr SPNULL
The equivalent to NULL for smart pointers.
Definition smart_pointer.h:89
#define UG_ASSERT(expr, msg)
Definition assert.h:70
#define UG_LOG(msg)
Definition log.h:367
double number
Definition types.h:124
function func(x, y, z, t, si)
Definition metaprogramming_util.h:42
static std::string name()
Definition user_data.h:129
static std::string name()
Definition user_data.h:131
static std::string name()
Definition user_data.h:127
static std::string name()
Definition user_data.h:125
Definition user_data.h:123
static std::string name()
Definition user_data.h:123